ur-agent 1.43.6 → 1.44.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.44.1
4
+
5
+ - Fix task board rendering: finished, failed, and skipped tasks now render as
6
+ checked instead of unchecked.
7
+ - Deduplicate consecutive task board emissions and keep final boards clean
8
+ (single header, single progress summary).
9
+
10
+ ## 1.44.0
11
+
12
+ - Add `verifier.askBeforeGates` setting (default `false`). When enabled, UR asks
13
+ via `AskUserQuestion` whether to run project verification commands after a
14
+ task, instead of auto-running tests/typecheck/lint gates. Available in
15
+ `/config`, `ur config set verifier.askBeforeGates true`, and
16
+ `.ur/settings.json`.
17
+ - Prompt the model to stop after delivering its final response, reducing silent
18
+ extra thinking turns.
19
+
3
20
  ## 1.43.6
4
21
 
5
22
  - Render output from reasoning models on OpenAI-compatible providers (LM Studio,
package/dist/cli.js CHANGED
@@ -51805,7 +51805,7 @@ function isProviderRuntimeSelectable(providerId, env4 = process.env) {
51805
51805
  return getProviderRuntimeBlockReason(providerId, env4) === null;
51806
51806
  }
51807
51807
  function listProviders(_options = {}) {
51808
- return PROVIDER_IDS.map((id) => PROVIDERS[id]).filter((provider) => provider.id !== "subscription");
51808
+ return PROVIDER_IDS.map((id) => PROVIDERS[id]).filter((provider) => provider.id !== "subscription" && !provider.disabled);
51809
51809
  }
51810
51810
  function hasSecretLikeValue(value) {
51811
51811
  const trimmed = value.trim();
@@ -53025,7 +53025,8 @@ var init_providerRegistry = __esm(() => {
53025
53025
  versionArgs: ["--version"],
53026
53026
  statusArgs: ["login", "status"],
53027
53027
  loginArgs: ["login"],
53028
- deviceLoginArgs: ["login", "--device-auth"]
53028
+ deviceLoginArgs: ["login", "--device-auth"],
53029
+ disabled: true
53029
53030
  },
53030
53031
  "claude-code-cli": {
53031
53032
  id: "claude-code-cli",
@@ -53045,7 +53046,8 @@ var init_providerRegistry = __esm(() => {
53045
53046
  commandCandidates: ["claude"],
53046
53047
  versionArgs: ["--version"],
53047
53048
  statusArgs: ["auth", "status"],
53048
- loginArgs: ["auth", "login"]
53049
+ loginArgs: ["auth", "login"],
53050
+ disabled: true
53049
53051
  },
53050
53052
  "gemini-cli": {
53051
53053
  id: "gemini-cli",
@@ -53065,7 +53067,8 @@ var init_providerRegistry = __esm(() => {
53065
53067
  commandCandidates: ["gemini"],
53066
53068
  versionArgs: ["--version"],
53067
53069
  loginArgs: [],
53068
- unsupportedPersonalAccountMessage: "Personal Google account login is not enabled by UR-Nexus. Use an official Gemini Code Assist Standard/Enterprise path if your Gemini CLI supports it."
53070
+ unsupportedPersonalAccountMessage: "Personal Google account login is not enabled by UR-Nexus. Use an official Gemini Code Assist Standard/Enterprise path if your Gemini CLI supports it.",
53071
+ disabled: true
53069
53072
  },
53070
53073
  "antigravity-cli": {
53071
53074
  id: "antigravity-cli",
@@ -53084,7 +53087,8 @@ var init_providerRegistry = __esm(() => {
53084
53087
  accessPathLabel: "subscription login via official Antigravity CLI",
53085
53088
  commandCandidates: ["agy", "antigravity", "google-antigravity", "ag"],
53086
53089
  versionArgs: ["--version"],
53087
- loginArgs: []
53090
+ loginArgs: [],
53091
+ disabled: true
53088
53092
  },
53089
53093
  "openai-api": {
53090
53094
  id: "openai-api",
@@ -53203,11 +53207,12 @@ var init_providerRegistry = __esm(() => {
53203
53207
  listModels: "openai-compatible-models",
53204
53208
  validateModel: "discovered-list",
53205
53209
  runtimeKind: "ur-native",
53206
- ...UR_NATIVE_CAPABILITIES,
53210
+ ...SUBSCRIPTION_CLI_CAPABILITIES,
53207
53211
  authMode: "local",
53208
53212
  legalPath: "local OpenAI-compatible server",
53209
53213
  accessPathLabel: "local OpenAI-compatible endpoint",
53210
53214
  defaultBaseUrl: "http://localhost:1234/v1",
53215
+ disabled: true,
53211
53216
  endpointKind: "openai-compatible"
53212
53217
  },
53213
53218
  "llama.cpp": {
@@ -71253,7 +71258,7 @@ var init_auth = __esm(() => {
71253
71258
 
71254
71259
  // src/utils/userAgent.ts
71255
71260
  function getURCodeUserAgent() {
71256
- return `ur/${"1.43.6"}`;
71261
+ return `ur/${"1.44.1"}`;
71257
71262
  }
71258
71263
 
71259
71264
  // src/utils/workloadContext.ts
@@ -71275,7 +71280,7 @@ function getUserAgent() {
71275
71280
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
71276
71281
  const workload = getWorkload();
71277
71282
  const workloadSuffix = workload ? `, workload/${workload}` : "";
71278
- return `ur-cli/${"1.43.6"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71283
+ return `ur-cli/${"1.44.1"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71279
71284
  }
71280
71285
  function getMCPUserAgent() {
71281
71286
  const parts = [];
@@ -71289,7 +71294,7 @@ function getMCPUserAgent() {
71289
71294
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
71290
71295
  }
71291
71296
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
71292
- return `ur/${"1.43.6"}${suffix}`;
71297
+ return `ur/${"1.44.1"}${suffix}`;
71293
71298
  }
71294
71299
  function getWebFetchUserAgent() {
71295
71300
  return `UR-User (${getURCodeUserAgent()})`;
@@ -71427,7 +71432,7 @@ var init_user = __esm(() => {
71427
71432
  deviceId,
71428
71433
  sessionId: getSessionId(),
71429
71434
  email: getEmail(),
71430
- appVersion: "1.43.6",
71435
+ appVersion: "1.44.1",
71431
71436
  platform: getHostPlatformForAnalytics(),
71432
71437
  organizationUuid,
71433
71438
  accountUuid,
@@ -77944,7 +77949,7 @@ var init_metadata = __esm(() => {
77944
77949
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
77945
77950
  WHITESPACE_REGEX = /\s+/;
77946
77951
  getVersionBase = memoize_default(() => {
77947
- const match = "1.43.6".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
77952
+ const match = "1.44.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
77948
77953
  return match ? match[0] : undefined;
77949
77954
  });
77950
77955
  buildEnvContext = memoize_default(async () => {
@@ -77984,7 +77989,7 @@ var init_metadata = __esm(() => {
77984
77989
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
77985
77990
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
77986
77991
  isURAiAuth: isURAISubscriber(),
77987
- version: "1.43.6",
77992
+ version: "1.44.1",
77988
77993
  versionBase: getVersionBase(),
77989
77994
  buildTime: "",
77990
77995
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -78654,7 +78659,7 @@ function initialize1PEventLogging() {
78654
78659
  const platform2 = getPlatform();
78655
78660
  const attributes = {
78656
78661
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
78657
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.43.6"
78662
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.1"
78658
78663
  };
78659
78664
  if (platform2 === "wsl") {
78660
78665
  const wslVersion = getWslVersion();
@@ -78681,7 +78686,7 @@ function initialize1PEventLogging() {
78681
78686
  })
78682
78687
  ]
78683
78688
  });
78684
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.43.6");
78689
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.1");
78685
78690
  }
78686
78691
  async function reinitialize1PEventLoggingIfConfigChanged() {
78687
78692
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -81311,6 +81316,9 @@ var init_types2 = __esm(() => {
81311
81316
  prefersReducedMotion: exports_external.boolean().optional().describe("Reduce or disable animations for accessibility (spinner shimmer, flash effects, etc.)"),
81312
81317
  autoMemoryEnabled: exports_external.boolean().optional().describe("Enable auto-memory for this project. When false, UR will not read from or write to the auto-memory directory."),
81313
81318
  autoMemoryDirectory: exports_external.string().optional().describe("Custom directory path for auto-memory storage. Supports ~/ prefix for home directory expansion. Ignored if set in projectSettings (checked-in .ur/settings.json) for security. When unset, defaults to ~/.ur/projects/<sanitized-cwd>/memory/."),
81319
+ verifier: exports_external.object({
81320
+ askBeforeGates: exports_external.boolean().optional().describe("When true, UR asks whether to run project verification commands (tests, typecheck, lint) after a task instead of running them automatically. Default: false.")
81321
+ }).optional().describe("Verifier behavior configuration"),
81314
81322
  autoDreamEnabled: exports_external.boolean().optional().describe("Enable background memory consolidation (auto-dream). When set, overrides the server-side default."),
81315
81323
  ollama: exports_external.object({
81316
81324
  host: exports_external.string().optional().describe("URL of the Ollama server to use (e.g. http://192.168.1.50:11434)"),
@@ -83980,7 +83988,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
83980
83988
  function formatA2AAgentCard(options = {}, pretty = true) {
83981
83989
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
83982
83990
  }
83983
- var urVersion = "1.43.6", coverage, priorityRoadmap;
83991
+ var urVersion = "1.44.1", coverage, priorityRoadmap;
83984
83992
  var init_trends = __esm(() => {
83985
83993
  coverage = [
83986
83994
  {
@@ -85975,7 +85983,7 @@ function getAttributionHeader(fingerprint) {
85975
85983
  if (!isAttributionHeaderEnabled()) {
85976
85984
  return "";
85977
85985
  }
85978
- const version2 = `${"1.43.6"}.${fingerprint}`;
85986
+ const version2 = `${"1.44.1"}.${fingerprint}`;
85979
85987
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
85980
85988
  const cch = "";
85981
85989
  const workload = getWorkload();
@@ -144522,16 +144530,26 @@ class Verifier {
144522
144530
  const ranBash = this.ledger.ranBash(turnId);
144523
144531
  let commands = config2 ? pickCommands(config2, modifiedFiles, ranBash, this.cwd) : null;
144524
144532
  let timeoutMs = config2?.timeoutMs;
144533
+ let autoDetected = false;
144525
144534
  if (!commands && hasNonIgnoredEdits(config2, modifiedFiles, this.cwd)) {
144526
144535
  commands = this.autoDetectedAfterEditCommands();
144527
144536
  timeoutMs = config2?.timeoutMs ?? AUTO_DETECTED_GATE_TIMEOUT_MS;
144537
+ autoDetected = true;
144528
144538
  }
144529
144539
  if (commands && commands.length > 0) {
144530
- const result = await runGateCommands(commands, this.cwd, timeoutMs);
144531
- if (!result.ok) {
144540
+ if (!askBeforeGatesEnabled() && getIsNonInteractiveSession()) {
144541
+ const result = await runGateCommands(commands, this.cwd, timeoutMs);
144542
+ if (!result.ok) {
144543
+ this.bumpRejection(turnId);
144544
+ const failed = result;
144545
+ return { ok: false, reminder: failed.reminder };
144546
+ }
144547
+ } else {
144532
144548
  this.bumpRejection(turnId);
144533
- const failed = result;
144534
- return { ok: false, reminder: failed.reminder };
144549
+ return {
144550
+ ok: false,
144551
+ reminder: buildAskBeforeGatesReminder(commands, autoDetected)
144552
+ };
144535
144553
  }
144536
144554
  }
144537
144555
  const pluginValidators = await this.pluginValidatorsPromise;
@@ -144588,6 +144606,22 @@ class Verifier {
144588
144606
  return detectProjectQualityStack(this.cwd).commands.map((command) => command.command);
144589
144607
  }
144590
144608
  }
144609
+ function askBeforeGatesEnabled() {
144610
+ try {
144611
+ return getInitialSettings().verifier?.askBeforeGates === true;
144612
+ } catch {
144613
+ return false;
144614
+ }
144615
+ }
144616
+ function buildAskBeforeGatesReminder(commands, autoDetected) {
144617
+ const label = autoDetected ? "auto-detected project verification" : "project verification";
144618
+ const list2 = commands.map((c4) => `- \`${c4}\``).join(`
144619
+ `);
144620
+ return `I have ${label} commands ready to run:
144621
+ ${list2}
144622
+
144623
+ ` + `Do not automatically run them and do not declare the task complete without the user's decision. ` + `Use AskUserQuestion to ask the user whether to run these verification commands now. ` + `If they confirm, run them with the BashTool and then report the outcome. ` + `If they decline, finish your response without running them.`;
144624
+ }
144591
144625
  function pickPluginValidators(validators3, modifiedFiles, ranBash) {
144592
144626
  return validators3.filter((v) => {
144593
144627
  if (v.when === "always")
@@ -144605,6 +144639,8 @@ function pickPluginValidators(validators3, modifiedFiles, ranBash) {
144605
144639
  var import_picomatch3, DEFAULT_MAX_REJECTIONS_PER_TURN = 3, AUTO_DETECTED_GATE_TIMEOUT_MS = 600000;
144606
144640
  var init_verifier = __esm(() => {
144607
144641
  init_envUtils();
144642
+ init_state();
144643
+ init_settings2();
144608
144644
  init_projectQuality();
144609
144645
  init_doneDetector();
144610
144646
  init_ledger();
@@ -193917,7 +193953,7 @@ function getTelemetryAttributes() {
193917
193953
  attributes["session.id"] = sessionId;
193918
193954
  }
193919
193955
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
193920
- attributes["app.version"] = "1.43.6";
193956
+ attributes["app.version"] = "1.44.1";
193921
193957
  }
193922
193958
  const oauthAccount = getOauthAccountInfo();
193923
193959
  if (oauthAccount) {
@@ -229305,7 +229341,7 @@ function getInstallationEnv() {
229305
229341
  return;
229306
229342
  }
229307
229343
  function getURCodeVersion() {
229308
- return "1.43.6";
229344
+ return "1.44.1";
229309
229345
  }
229310
229346
  async function getInstalledVSCodeExtensionVersion(command) {
229311
229347
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -232144,7 +232180,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
232144
232180
  const client2 = new Client({
232145
232181
  name: "ur",
232146
232182
  title: "UR",
232147
- version: "1.43.6",
232183
+ version: "1.44.1",
232148
232184
  description: "UR-Nexus autonomous engineering workflow engine",
232149
232185
  websiteUrl: PRODUCT_URL
232150
232186
  }, {
@@ -232498,7 +232534,7 @@ var init_client5 = __esm(() => {
232498
232534
  const client2 = new Client({
232499
232535
  name: "ur",
232500
232536
  title: "UR",
232501
- version: "1.43.6",
232537
+ version: "1.44.1",
232502
232538
  description: "UR-Nexus autonomous engineering workflow engine",
232503
232539
  websiteUrl: PRODUCT_URL
232504
232540
  }, {
@@ -242312,9 +242348,9 @@ async function assertMinVersion() {
242312
242348
  if (false) {}
242313
242349
  try {
242314
242350
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
242315
- if (versionConfig.minVersion && lt("1.43.6", versionConfig.minVersion)) {
242351
+ if (versionConfig.minVersion && lt("1.44.1", versionConfig.minVersion)) {
242316
242352
  console.error(`
242317
- It looks like your version of UR (${"1.43.6"}) needs an update.
242353
+ It looks like your version of UR (${"1.44.1"}) needs an update.
242318
242354
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
242319
242355
 
242320
242356
  To update, please run:
@@ -242530,7 +242566,7 @@ async function installGlobalPackage(specificVersion) {
242530
242566
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
242531
242567
  logEvent("tengu_auto_updater_lock_contention", {
242532
242568
  pid: process.pid,
242533
- currentVersion: "1.43.6"
242569
+ currentVersion: "1.44.1"
242534
242570
  });
242535
242571
  return "in_progress";
242536
242572
  }
@@ -242539,7 +242575,7 @@ async function installGlobalPackage(specificVersion) {
242539
242575
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
242540
242576
  logError2(new Error("Windows NPM detected in WSL environment"));
242541
242577
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
242542
- currentVersion: "1.43.6"
242578
+ currentVersion: "1.44.1"
242543
242579
  });
242544
242580
  console.error(`
242545
242581
  Error: Windows NPM detected in WSL
@@ -243074,7 +243110,7 @@ function detectLinuxGlobPatternWarnings() {
243074
243110
  }
243075
243111
  async function getDoctorDiagnostic() {
243076
243112
  const installationType = await getCurrentInstallationType();
243077
- const version2 = typeof MACRO !== "undefined" ? "1.43.6" : "unknown";
243113
+ const version2 = typeof MACRO !== "undefined" ? "1.44.1" : "unknown";
243078
243114
  const installationPath = await getInstallationPath();
243079
243115
  const invokedBinary = getInvokedBinary();
243080
243116
  const multipleInstallations = await detectMultipleInstallations();
@@ -244009,8 +244045,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244009
244045
  const maxVersion = await getMaxVersion();
244010
244046
  if (maxVersion && gt(version2, maxVersion)) {
244011
244047
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
244012
- if (gte("1.43.6", maxVersion)) {
244013
- logForDebugging(`Native installer: current version ${"1.43.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
244048
+ if (gte("1.44.1", maxVersion)) {
244049
+ logForDebugging(`Native installer: current version ${"1.44.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
244014
244050
  logEvent("tengu_native_update_skipped_max_version", {
244015
244051
  latency_ms: Date.now() - startTime,
244016
244052
  max_version: maxVersion,
@@ -244021,7 +244057,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244021
244057
  version2 = maxVersion;
244022
244058
  }
244023
244059
  }
244024
- if (!forceReinstall && version2 === "1.43.6" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244060
+ if (!forceReinstall && version2 === "1.44.1" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244025
244061
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
244026
244062
  logEvent("tengu_native_update_complete", {
244027
244063
  latency_ms: Date.now() - startTime,
@@ -246552,6 +246588,16 @@ function getTaskIcon(status) {
246552
246588
  icon: figures_default.squareSmall,
246553
246589
  color: undefined
246554
246590
  };
246591
+ case "failed":
246592
+ return {
246593
+ icon: figures_default.cross,
246594
+ color: "error"
246595
+ };
246596
+ case "skipped":
246597
+ return {
246598
+ icon: figures_default.warning,
246599
+ color: "warning"
246600
+ };
246555
246601
  }
246556
246602
  }
246557
246603
  function TaskItem(t0) {
@@ -301951,6 +301997,12 @@ var init_supportedSettings = __esm(() => {
301951
301997
  path: ["codeIndexAutoReindex"],
301952
301998
  description: "Automatically refresh the local semantic code index during interactive sessions"
301953
301999
  },
302000
+ "verifier.askBeforeGates": {
302001
+ source: "settings",
302002
+ type: "boolean",
302003
+ path: ["verifier", "askBeforeGates"],
302004
+ description: "Ask before running project verification commands (tests, typecheck, lint) after a task instead of running them automatically. Default: false."
302005
+ },
301954
302006
  autoDreamEnabled: {
301955
302007
  source: "settings",
301956
302008
  type: "boolean",
@@ -341012,7 +341064,7 @@ function Feedback({
341012
341064
  platform: env2.platform,
341013
341065
  gitRepo: envInfo.isGit,
341014
341066
  terminal: env2.terminal,
341015
- version: "1.43.6",
341067
+ version: "1.44.1",
341016
341068
  transcript: normalizeMessagesForAPI(messages),
341017
341069
  errors: sanitizedErrors,
341018
341070
  lastApiRequest: getLastAPIRequest(),
@@ -341204,7 +341256,7 @@ function Feedback({
341204
341256
  ", ",
341205
341257
  env2.terminal,
341206
341258
  ", v",
341207
- "1.43.6"
341259
+ "1.44.1"
341208
341260
  ]
341209
341261
  }, undefined, true, undefined, this)
341210
341262
  ]
@@ -341310,7 +341362,7 @@ ${sanitizedDescription}
341310
341362
  ` + `**Environment Info**
341311
341363
  ` + `- Platform: ${env2.platform}
341312
341364
  ` + `- Terminal: ${env2.terminal}
341313
- ` + `- Version: ${"1.43.6"}
341365
+ ` + `- Version: ${"1.44.1"}
341314
341366
  ` + `- Feedback ID: ${feedbackId}
341315
341367
  ` + `
341316
341368
  **Errors**
@@ -344421,7 +344473,7 @@ function buildPrimarySection() {
344421
344473
  }, undefined, false, undefined, this);
344422
344474
  return [{
344423
344475
  label: "Version",
344424
- value: "1.43.6"
344476
+ value: "1.44.1"
344425
344477
  }, {
344426
344478
  label: "Session name",
344427
344479
  value: nameValue
@@ -346668,6 +346720,31 @@ function Config({
346668
346720
  });
346669
346721
  }
346670
346722
  }] : [],
346723
+ {
346724
+ id: "verifierAskBeforeGates",
346725
+ label: "Ask before running verification gates",
346726
+ value: settingsData?.verifier?.askBeforeGates ?? false,
346727
+ type: "boolean",
346728
+ onChange(askBeforeGates) {
346729
+ updateSettingsForSource("userSettings", {
346730
+ verifier: {
346731
+ ...settingsData?.verifier,
346732
+ askBeforeGates
346733
+ }
346734
+ });
346735
+ setSettingsData((prev) => ({
346736
+ ...prev,
346737
+ verifier: {
346738
+ ...prev?.verifier,
346739
+ askBeforeGates
346740
+ }
346741
+ }));
346742
+ logEvent("tengu_config_changed", {
346743
+ setting: "verifierAskBeforeGates",
346744
+ value: String(askBeforeGates)
346745
+ });
346746
+ }
346747
+ },
346671
346748
  {
346672
346749
  id: "verbose",
346673
346750
  label: "Verbose output",
@@ -347182,6 +347259,9 @@ function Config({
347182
347259
  if (globalConfig2.autoInstallIdeExtension !== initialConfig.current.autoInstallIdeExtension) {
347183
347260
  formattedChanges.push(`${globalConfig2.autoInstallIdeExtension ? "Enabled" : "Disabled"} auto-install IDE extension`);
347184
347261
  }
347262
+ if (settingsData?.verifier?.askBeforeGates !== initialSettingsData.current?.verifier?.askBeforeGates) {
347263
+ formattedChanges.push(`${settingsData?.verifier?.askBeforeGates ? "Enabled" : "Disabled"} ask before running verification gates`);
347264
+ }
347185
347265
  if (globalConfig2.autoCompactEnabled !== initialConfig.current.autoCompactEnabled) {
347186
347266
  formattedChanges.push(`${globalConfig2.autoCompactEnabled ? "Enabled" : "Disabled"} auto-compact`);
347187
347267
  }
@@ -347239,6 +347319,7 @@ function Config({
347239
347319
  autoUpdatesChannel: iu?.autoUpdatesChannel,
347240
347320
  minimumVersion: iu?.minimumVersion,
347241
347321
  language: iu?.language,
347322
+ verifier: iu?.verifier,
347242
347323
  ...{},
347243
347324
  syntaxHighlightingDisabled: iu?.syntaxHighlightingDisabled,
347244
347325
  permissions: iu?.permissions === undefined ? undefined : {
@@ -347722,7 +347803,7 @@ function Config({
347722
347803
  }
347723
347804
  }, undefined, false, undefined, this)
347724
347805
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime177.jsxDEV(ChannelDowngradeDialog, {
347725
- currentVersion: "1.43.6",
347806
+ currentVersion: "1.44.1",
347726
347807
  onChoice: (choice) => {
347727
347808
  setShowSubmenu(null);
347728
347809
  setTabsHidden(false);
@@ -347734,7 +347815,7 @@ function Config({
347734
347815
  autoUpdatesChannel: "stable"
347735
347816
  };
347736
347817
  if (choice === "stay") {
347737
- newSettings.minimumVersion = "1.43.6";
347818
+ newSettings.minimumVersion = "1.44.1";
347738
347819
  }
347739
347820
  updateSettingsForSource("userSettings", newSettings);
347740
347821
  setSettingsData((prev_27) => ({
@@ -355804,7 +355885,7 @@ function HelpV2(t0) {
355804
355885
  let t6;
355805
355886
  if ($3[31] !== tabs) {
355806
355887
  t6 = /* @__PURE__ */ jsx_dev_runtime204.jsxDEV(Tabs, {
355807
- title: `UR v${"1.43.6"}`,
355888
+ title: `UR v${"1.44.1"}`,
355808
355889
  color: "professionalBlue",
355809
355890
  defaultTab: "general",
355810
355891
  children: tabs
@@ -356550,7 +356631,7 @@ function buildToolUseContext(tools, readFileStateCache) {
356550
356631
  async function handleInitialize(options2) {
356551
356632
  return {
356552
356633
  name: "UR",
356553
- version: "1.43.6",
356634
+ version: "1.44.1",
356554
356635
  protocolVersion: "0.1.0",
356555
356636
  workspaceRoot: options2.cwd,
356556
356637
  capabilities: {
@@ -376692,7 +376773,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
376692
376773
  return [];
376693
376774
  }
376694
376775
  }
376695
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.43.6") {
376776
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.1") {
376696
376777
  if (process.env.USER_TYPE === "ant") {
376697
376778
  const changelog = "";
376698
376779
  if (changelog) {
@@ -376719,7 +376800,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.43.6")
376719
376800
  releaseNotes
376720
376801
  };
376721
376802
  }
376722
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.43.6") {
376803
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.1") {
376723
376804
  if (process.env.USER_TYPE === "ant") {
376724
376805
  const changelog = "";
376725
376806
  if (changelog) {
@@ -377898,7 +377979,7 @@ function getRecentActivitySync() {
377898
377979
  return cachedActivity;
377899
377980
  }
377900
377981
  function getLogoDisplayData() {
377901
- const version2 = process.env.DEMO_VERSION ?? "1.43.6";
377982
+ const version2 = process.env.DEMO_VERSION ?? "1.44.1";
377902
377983
  const serverUrl = getDirectConnectServerUrl();
377903
377984
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
377904
377985
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -378687,7 +378768,7 @@ function LogoV2() {
378687
378768
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
378688
378769
  t2 = () => {
378689
378770
  const currentConfig2 = getGlobalConfig();
378690
- if (currentConfig2.lastReleaseNotesSeen === "1.43.6") {
378771
+ if (currentConfig2.lastReleaseNotesSeen === "1.44.1") {
378691
378772
  return;
378692
378773
  }
378693
378774
  saveGlobalConfig(_temp326);
@@ -379372,12 +379453,12 @@ function LogoV2() {
379372
379453
  return t41;
379373
379454
  }
379374
379455
  function _temp326(current) {
379375
- if (current.lastReleaseNotesSeen === "1.43.6") {
379456
+ if (current.lastReleaseNotesSeen === "1.44.1") {
379376
379457
  return current;
379377
379458
  }
379378
379459
  return {
379379
379460
  ...current,
379380
- lastReleaseNotesSeen: "1.43.6"
379461
+ lastReleaseNotesSeen: "1.44.1"
379381
379462
  };
379382
379463
  }
379383
379464
  function _temp243(s_0) {
@@ -397453,7 +397534,11 @@ function publicStatus(task) {
397453
397534
  if (task.status === "paused-review")
397454
397535
  return "paused for review";
397455
397536
  if (task.status === "skipped")
397456
- return "skipped by policy";
397537
+ return "skipped";
397538
+ if (task.status === "failed")
397539
+ return "failed";
397540
+ if (task.status === "finished")
397541
+ return "completed";
397457
397542
  return task.status;
397458
397543
  }
397459
397544
  function isWaiting(task) {
@@ -397474,6 +397559,9 @@ function progressSummary(tasks2) {
397474
397559
  const skipped = tasks2.filter((task) => task.status === "skipped").length;
397475
397560
  return `Progress: ${finished7}/${tasks2.length} finished, ${running} running, ${queued} queued, ${waiting} waiting, ${failed} failed, ${skipped} skipped`;
397476
397561
  }
397562
+ function isFinished(task) {
397563
+ return task.status === "finished" || task.status === "failed" || task.status === "skipped";
397564
+ }
397477
397565
  function renderTaskBoard(planOrTasks, options2 = {}) {
397478
397566
  const tasks2 = Array.isArray(planOrTasks) ? planOrTasks : planOrTasks.tasks;
397479
397567
  const activeAgents = options2.activeAgents ?? tasks2.filter((task) => task.status === "running").length;
@@ -397482,7 +397570,8 @@ function renderTaskBoard(planOrTasks, options2 = {}) {
397482
397570
  const rows = orderedTasks.map((task) => {
397483
397571
  const status2 = pad(publicStatus(task), 18);
397484
397572
  const agent = pad(String(task.assignedAgent), 8);
397485
- return `${task.order}. ${status2} | ${agent} | ${task.title}`;
397573
+ const check3 = isFinished(task) ? "[\u2713]" : "[ ]";
397574
+ return `${check3} ${task.order}. ${status2} | ${agent} | ${task.title}`;
397486
397575
  });
397487
397576
  return [
397488
397577
  "[UR-Nexus Task Board]",
@@ -397757,13 +397846,18 @@ function emitBoard(options2, tasks2, maxAgents2) {
397757
397846
  ...DEFAULT_PROMPT_PLANNING_CONFIG,
397758
397847
  ...resolvePromptPlanningConfig(options2.config)
397759
397848
  };
397760
- if (config3.showTaskBoard) {
397761
- options2.onEvent?.({
397762
- type: "board",
397763
- board: renderTaskBoard(tasks2, { maxAgents: maxAgents2 }),
397764
- tasks: tasks2
397765
- });
397766
- }
397849
+ if (!config3.showTaskBoard)
397850
+ return;
397851
+ const board = renderTaskBoard(tasks2, { maxAgents: maxAgents2 });
397852
+ const lastBoard = lastBoardByRun.get(options2);
397853
+ if (lastBoard === board)
397854
+ return;
397855
+ lastBoardByRun.set(options2, board);
397856
+ options2.onEvent?.({
397857
+ type: "board",
397858
+ board,
397859
+ tasks: tasks2
397860
+ });
397767
397861
  }
397768
397862
  function emitStatus(options2, task, tasks2, lastStatuses, maxAgents2) {
397769
397863
  if (lastStatuses.get(task.id) === task.status)
@@ -397978,10 +398072,12 @@ async function runPromptPlan(plan, options2) {
397978
398072
  await Promise.race(running);
397979
398073
  }
397980
398074
  }
398075
+ var lastBoardByRun;
397981
398076
  var init_executor = __esm(() => {
397982
398077
  init_config9();
397983
398078
  init_evidence3();
397984
398079
  init_validation4();
398080
+ lastBoardByRun = new WeakMap;
397985
398081
  });
397986
398082
 
397987
398083
  // src/services/promptPlanning/planner.ts
@@ -411258,7 +411354,7 @@ var init_code_index2 = __esm(() => {
411258
411354
 
411259
411355
  // node_modules/typescript/lib/typescript.js
411260
411356
  var require_typescript2 = __commonJS((exports, module) => {
411261
- var __dirname = "/sessions/friendly-inspiring-goldberg/mnt/UR-1.43.3/node_modules/typescript/lib", __filename = "/sessions/friendly-inspiring-goldberg/mnt/UR-1.43.3/node_modules/typescript/lib/typescript.js";
411357
+ var __dirname = "/Users/maith/Desktop/ur3-dev/UR-1.43.3/node_modules/typescript/lib", __filename = "/Users/maith/Desktop/ur3-dev/UR-1.43.3/node_modules/typescript/lib/typescript.js";
411262
411358
  /*! *****************************************************************************
411263
411359
  Copyright (c) Microsoft Corporation. All rights reserved.
411264
411360
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
@@ -596792,7 +596888,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
596792
596888
  smapsRollup,
596793
596889
  platform: process.platform,
596794
596890
  nodeVersion: process.version,
596795
- ccVersion: "1.43.6"
596891
+ ccVersion: "1.44.1"
596796
596892
  };
596797
596893
  }
596798
596894
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -597378,7 +597474,7 @@ var init_bridge_kick = __esm(() => {
597378
597474
  var call137 = async () => {
597379
597475
  return {
597380
597476
  type: "text",
597381
- value: "1.43.6"
597477
+ value: "1.44.1"
597382
597478
  };
597383
597479
  }, version2, version_default;
597384
597480
  var init_version = __esm(() => {
@@ -607471,7 +607567,7 @@ function generateHtmlReport(data, insights) {
607471
607567
  </html>`;
607472
607568
  }
607473
607569
  function buildExportData(data, insights, facets, remoteStats) {
607474
- const version3 = typeof MACRO !== "undefined" ? "1.43.6" : "unknown";
607570
+ const version3 = typeof MACRO !== "undefined" ? "1.44.1" : "unknown";
607475
607571
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
607476
607572
  const facets_summary = {
607477
607573
  total: facets.size,
@@ -611751,7 +611847,7 @@ var init_sessionStorage = __esm(() => {
611751
611847
  init_settings2();
611752
611848
  init_slowOperations();
611753
611849
  init_uuid();
611754
- VERSION5 = typeof MACRO !== "undefined" ? "1.43.6" : "unknown";
611850
+ VERSION5 = typeof MACRO !== "undefined" ? "1.44.1" : "unknown";
611755
611851
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
611756
611852
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
611757
611853
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -612956,7 +613052,7 @@ var init_filesystem = __esm(() => {
612956
613052
  });
612957
613053
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
612958
613054
  const nonce = randomBytes18(16).toString("hex");
612959
- return join202(getURTempDir(), "bundled-skills", "1.43.6", nonce);
613055
+ return join202(getURTempDir(), "bundled-skills", "1.44.1", nonce);
612960
613056
  });
612961
613057
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
612962
613058
  });
@@ -618383,7 +618479,9 @@ function getSimpleDoingTasksSection() {
618383
618479
  `Default to writing no comments. Only add one when the WHY is non-obvious: a hidden constraint, a subtle invariant, a workaround for a specific bug, behavior that would surprise a reader. If removing the comment wouldn't confuse a future reader, don't write it.`,
618384
618480
  `Don't explain WHAT the code does, since well-named identifiers already do that. Don't reference the current task, fix, or callers ("used by X", "added for the Y flow", "handles the case from issue #123"), since those belong in the PR description and rot as the codebase evolves.`,
618385
618481
  `Don't remove existing comments unless you're removing the code they describe or you know they're wrong. A comment that looks pointless to you may encode a constraint or a lesson from a past bug that isn't visible in the current diff.`,
618386
- `Before reporting a task complete, verify it actually works: run the test, execute the script, check the output. Minimum complexity means no gold-plating, not skipping the finish line. If you can't verify (no test exists, can't run the code), say so explicitly rather than claiming success.`
618482
+ `When you finish the substantive work of a task, do not automatically run the full project test suite. Instead, use AskUserQuestion to ask the user whether they want you to run the verification commands. Only run them if the user confirms. If they decline, report completion based on the verification you have already performed.`,
618483
+ `Before reporting a task complete, verify it actually works: run the test, execute the script, check the output. Minimum complexity means no gold-plating, not skipping the finish line. If you can't verify (no test exists, can't run the code), say so explicitly rather than claiming success.`,
618484
+ `When the task is fully complete and you have delivered your final response, stop. Do not continue with additional thinking turns, empty responses, or further tool calls unless the user asks for something new.`
618387
618485
  ];
618388
618486
  const userHelpSubitems = [
618389
618487
  `/help: Get help with using UR`,
@@ -619245,7 +619343,7 @@ function computeFingerprint(messageText2, version3) {
619245
619343
  }
619246
619344
  function computeFingerprintFromMessages(messages) {
619247
619345
  const firstMessageText = extractFirstMessageText(messages);
619248
- return computeFingerprint(firstMessageText, "1.43.6");
619346
+ return computeFingerprint(firstMessageText, "1.44.1");
619249
619347
  }
619250
619348
  var FINGERPRINT_SALT = "59cf53e54c78";
619251
619349
  var init_fingerprint = () => {};
@@ -621119,7 +621217,7 @@ async function sideQuery(opts) {
621119
621217
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
621120
621218
  }
621121
621219
  const messageText2 = extractFirstUserMessageText(messages);
621122
- const fingerprint2 = computeFingerprint(messageText2, "1.43.6");
621220
+ const fingerprint2 = computeFingerprint(messageText2, "1.44.1");
621123
621221
  const attributionHeader = getAttributionHeader(fingerprint2);
621124
621222
  const systemBlocks = [
621125
621223
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -625856,7 +625954,7 @@ function buildSystemInitMessage(inputs) {
625856
625954
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
625857
625955
  apiKeySource: getURHQApiKeyWithSource().source,
625858
625956
  betas: getSdkBetas(),
625859
- ur_version: "1.43.6",
625957
+ ur_version: "1.44.1",
625860
625958
  output_style: outputStyle2,
625861
625959
  agents: inputs.agents.map((agent) => agent.agentType),
625862
625960
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -640484,7 +640582,7 @@ var init_useVoiceEnabled = __esm(() => {
640484
640582
  function getSemverPart(version3) {
640485
640583
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
640486
640584
  }
640487
- function useUpdateNotification(updatedVersion, initialVersion = "1.43.6") {
640585
+ function useUpdateNotification(updatedVersion, initialVersion = "1.44.1") {
640488
640586
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
640489
640587
  if (!updatedVersion) {
640490
640588
  return null;
@@ -640533,7 +640631,7 @@ function AutoUpdater({
640533
640631
  return;
640534
640632
  }
640535
640633
  if (false) {}
640536
- const currentVersion = "1.43.6";
640634
+ const currentVersion = "1.44.1";
640537
640635
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
640538
640636
  let latestVersion = await getLatestVersion(channel);
640539
640637
  const isDisabled = isAutoUpdaterDisabled();
@@ -640762,12 +640860,12 @@ function NativeAutoUpdater({
640762
640860
  logEvent("tengu_native_auto_updater_start", {});
640763
640861
  try {
640764
640862
  const maxVersion = await getMaxVersion();
640765
- if (maxVersion && gt("1.43.6", maxVersion)) {
640863
+ if (maxVersion && gt("1.44.1", maxVersion)) {
640766
640864
  const msg = await getMaxVersionMessage();
640767
640865
  setMaxVersionIssue(msg ?? "affects your version");
640768
640866
  }
640769
640867
  const result = await installLatest(channel);
640770
- const currentVersion = "1.43.6";
640868
+ const currentVersion = "1.44.1";
640771
640869
  const latencyMs = Date.now() - startTime;
640772
640870
  if (result.lockFailed) {
640773
640871
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -640904,17 +641002,17 @@ function PackageManagerAutoUpdater(t0) {
640904
641002
  const maxVersion = await getMaxVersion();
640905
641003
  if (maxVersion && latest && gt(latest, maxVersion)) {
640906
641004
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
640907
- if (gte("1.43.6", maxVersion)) {
640908
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.43.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
641005
+ if (gte("1.44.1", maxVersion)) {
641006
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
640909
641007
  setUpdateAvailable(false);
640910
641008
  return;
640911
641009
  }
640912
641010
  latest = maxVersion;
640913
641011
  }
640914
- const hasUpdate = latest && !gte("1.43.6", latest) && !shouldSkipVersion(latest);
641012
+ const hasUpdate = latest && !gte("1.44.1", latest) && !shouldSkipVersion(latest);
640915
641013
  setUpdateAvailable(!!hasUpdate);
640916
641014
  if (hasUpdate) {
640917
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.43.6"} -> ${latest}`);
641015
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.1"} -> ${latest}`);
640918
641016
  }
640919
641017
  };
640920
641018
  $3[0] = t1;
@@ -640948,7 +641046,7 @@ function PackageManagerAutoUpdater(t0) {
640948
641046
  wrap: "truncate",
640949
641047
  children: [
640950
641048
  "currentVersion: ",
640951
- "1.43.6"
641049
+ "1.44.1"
640952
641050
  ]
640953
641051
  }, undefined, true, undefined, this);
640954
641052
  $3[3] = verbose;
@@ -653400,7 +653498,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
653400
653498
  project_dir: getOriginalCwd(),
653401
653499
  added_dirs: addedDirs
653402
653500
  },
653403
- version: "1.43.6",
653501
+ version: "1.44.1",
653404
653502
  output_style: {
653405
653503
  name: outputStyleName
653406
653504
  },
@@ -653483,7 +653581,7 @@ function StatusLineInner({
653483
653581
  const taskValues = Object.values(tasks2);
653484
653582
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
653485
653583
  const defaultStatusLineText = buildDefaultStatusBar({
653486
- version: "1.43.6",
653584
+ version: "1.44.1",
653487
653585
  providerLabel: providerRuntime.providerLabel,
653488
653586
  authMode: providerRuntime.authLabel,
653489
653587
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -664971,7 +665069,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
664971
665069
  } catch {}
664972
665070
  const data = {
664973
665071
  trigger: trigger2,
664974
- version: "1.43.6",
665072
+ version: "1.44.1",
664975
665073
  platform: process.platform,
664976
665074
  transcript,
664977
665075
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -676856,7 +676954,7 @@ function WelcomeV2() {
676856
676954
  dimColor: true,
676857
676955
  children: [
676858
676956
  "v",
676859
- "1.43.6"
676957
+ "1.44.1"
676860
676958
  ]
676861
676959
  }, undefined, true, undefined, this)
676862
676960
  ]
@@ -678116,7 +678214,7 @@ function completeOnboarding() {
678116
678214
  saveGlobalConfig((current) => ({
678117
678215
  ...current,
678118
678216
  hasCompletedOnboarding: true,
678119
- lastOnboardingVersion: "1.43.6"
678217
+ lastOnboardingVersion: "1.44.1"
678120
678218
  }));
678121
678219
  }
678122
678220
  function showDialog(root2, renderer) {
@@ -683153,7 +683251,7 @@ function appendToLog(path24, message) {
683153
683251
  cwd: getFsImplementation().cwd(),
683154
683252
  userType: process.env.USER_TYPE,
683155
683253
  sessionId: getSessionId(),
683156
- version: "1.43.6"
683254
+ version: "1.44.1"
683157
683255
  };
683158
683256
  getLogWriter(path24).write(messageWithTimestamp);
683159
683257
  }
@@ -687247,8 +687345,8 @@ async function getEnvLessBridgeConfig() {
687247
687345
  }
687248
687346
  async function checkEnvLessBridgeMinVersion() {
687249
687347
  const cfg = await getEnvLessBridgeConfig();
687250
- if (cfg.min_version && lt("1.43.6", cfg.min_version)) {
687251
- return `Your version of UR (${"1.43.6"}) is too old for Remote Control.
687348
+ if (cfg.min_version && lt("1.44.1", cfg.min_version)) {
687349
+ return `Your version of UR (${"1.44.1"}) is too old for Remote Control.
687252
687350
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
687253
687351
  }
687254
687352
  return null;
@@ -687722,7 +687820,7 @@ async function initBridgeCore(params) {
687722
687820
  const rawApi = createBridgeApiClient({
687723
687821
  baseUrl,
687724
687822
  getAccessToken,
687725
- runnerVersion: "1.43.6",
687823
+ runnerVersion: "1.44.1",
687726
687824
  onDebug: logForDebugging,
687727
687825
  onAuth401,
687728
687826
  getTrustedDeviceToken
@@ -693404,7 +693502,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
693404
693502
  setCwd(cwd3);
693405
693503
  const server2 = new Server({
693406
693504
  name: "ur/tengu",
693407
- version: "1.43.6"
693505
+ version: "1.44.1"
693408
693506
  }, {
693409
693507
  capabilities: {
693410
693508
  tools: {}
@@ -695446,7 +695544,7 @@ async function update() {
695446
695544
  logEvent("tengu_update_check", {});
695447
695545
  const diagnostic = await getDoctorDiagnostic();
695448
695546
  const result = await checkUpgradeStatus({
695449
- currentVersion: "1.43.6",
695547
+ currentVersion: "1.44.1",
695450
695548
  packageName: UR_AGENT_PACKAGE_NAME,
695451
695549
  installationType: diagnostic.installationType,
695452
695550
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -696692,7 +696790,7 @@ ${customInstructions}` : customInstructions;
696692
696790
  }
696693
696791
  }
696694
696792
  logForDiagnosticsNoPII("info", "started", {
696695
- version: "1.43.6",
696793
+ version: "1.44.1",
696696
696794
  is_native_binary: isInBundledMode()
696697
696795
  });
696698
696796
  registerCleanup(async () => {
@@ -697478,7 +697576,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
697478
697576
  pendingHookMessages
697479
697577
  }, renderAndRun);
697480
697578
  }
697481
- }).version("1.43.6 (UR-Nexus)", "-v, --version", "Output the version number");
697579
+ }).version("1.44.1 (UR-Nexus)", "-v, --version", "Output the version number");
697482
697580
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
697483
697581
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
697484
697582
  if (canUserConfigureAdvisor()) {
@@ -698393,7 +698491,7 @@ if (false) {}
698393
698491
  async function main2() {
698394
698492
  const args = process.argv.slice(2);
698395
698493
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
698396
- console.log(`${"1.43.6"} (UR-Nexus)`);
698494
+ console.log(`${"1.44.1"} (UR-Nexus)`);
698397
698495
  return;
698398
698496
  }
698399
698497
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -44,7 +44,7 @@
44
44
  <main id="content" class="content">
45
45
  <header class="topbar">
46
46
  <div>
47
- <p class="eyebrow">Version 1.43.6</p>
47
+ <p class="eyebrow">Version 1.44.0</p>
48
48
  <h1>UR-Nexus Documentation</h1>
49
49
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
50
50
  </div>
@@ -477,6 +477,7 @@ UR_VERIFIER_MODE=loose
477
477
  UR_VERIFIER_MODE=off
478
478
  UR_VERIFIER_AUTO_SUBAGENT=1</code></pre>
479
479
  <p>L1 gates catch false done claims and loops. <code>/verify</code> manually runs deeper verification.</p>
480
+ <p>Interactive users can set <code>"verifier": { "askBeforeGates": true }</code> in <code>.ur/settings.json</code> (or via <code>ur config set verifier.askBeforeGates true</code>) to have UR ask before running project test/typecheck/lint gates after a task, instead of running them automatically. Default is <code>false</code> (auto-run gates).</p>
480
481
  </article>
481
482
  <article>
482
483
  <h3>MCP and plugins</h3>
@@ -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.43.6",
5
+ "version": "1.44.0",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.43.6",
4
- "description": "UR-Nexus \u2014 autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
3
+ "version": "1.44.1",
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",
7
7
  "engines": {