ur-agent 1.43.5 → 1.44.0

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,23 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.44.0
4
+
5
+ - Add `verifier.askBeforeGates` setting (default `false`). When enabled, UR asks
6
+ via `AskUserQuestion` whether to run project verification commands after a
7
+ task, instead of auto-running tests/typecheck/lint gates. Available in
8
+ `/config`, `ur config set verifier.askBeforeGates true`, and
9
+ `.ur/settings.json`.
10
+ - Prompt the model to stop after delivering its final response, reducing silent
11
+ extra thinking turns.
12
+
13
+ ## 1.43.6
14
+
15
+ - Render output from reasoning models on OpenAI-compatible providers (LM Studio,
16
+ vLLM). The streaming and non-streaming parsers now read `reasoning_content`
17
+ (and `reasoning`) deltas and surface them as thinking blocks. Models that emit
18
+ their output in the reasoning field (e.g. NVIDIA Nemotron, DeepSeek-R1
19
+ distills, QwQ) previously produced an empty response with no error.
20
+
3
21
  ## 1.43.5
4
22
 
5
23
  - Fix model discovery for OpenAI-compatible providers (LM Studio, llama.cpp,
package/dist/cli.js CHANGED
@@ -56561,6 +56561,13 @@ async function* streamOpenAIEvents(body, options) {
56561
56561
  let finishReason;
56562
56562
  let usage = EMPTY_USAGE;
56563
56563
  const toolStates = new Map;
56564
+ let activeThinkingIndex = null;
56565
+ const stopThinking = function* () {
56566
+ if (activeThinkingIndex !== null) {
56567
+ yield { type: "content_block_stop", index: activeThinkingIndex };
56568
+ activeThinkingIndex = null;
56569
+ }
56570
+ };
56564
56571
  const stopText = function* () {
56565
56572
  if (activeTextIndex !== null) {
56566
56573
  yield { type: "content_block_stop", index: activeTextIndex };
@@ -56569,6 +56576,8 @@ async function* streamOpenAIEvents(body, options) {
56569
56576
  };
56570
56577
  const ensureText = function* () {
56571
56578
  if (activeTextIndex === null) {
56579
+ for (const event of stopThinking())
56580
+ yield event;
56572
56581
  activeTextIndex = blockIndex++;
56573
56582
  sawBlock = true;
56574
56583
  yield {
@@ -56578,6 +56587,19 @@ async function* streamOpenAIEvents(body, options) {
56578
56587
  };
56579
56588
  }
56580
56589
  };
56590
+ const ensureThinking = function* () {
56591
+ if (activeThinkingIndex === null) {
56592
+ for (const event of stopText())
56593
+ yield event;
56594
+ activeThinkingIndex = blockIndex++;
56595
+ sawBlock = true;
56596
+ yield {
56597
+ type: "content_block_start",
56598
+ index: activeThinkingIndex,
56599
+ content_block: { type: "thinking", thinking: "" }
56600
+ };
56601
+ }
56602
+ };
56581
56603
  const ensureTool = function* (state) {
56582
56604
  if (state.blockIndex !== undefined)
56583
56605
  return;
@@ -56617,6 +56639,16 @@ async function* streamOpenAIEvents(body, options) {
56617
56639
  }
56618
56640
  for (const choice of chunk?.choices ?? []) {
56619
56641
  const delta = choice?.delta ?? {};
56642
+ const reasoning = typeof delta.reasoning_content === "string" ? delta.reasoning_content : typeof delta.reasoning === "string" ? delta.reasoning : "";
56643
+ if (reasoning.length > 0) {
56644
+ for (const event of ensureThinking())
56645
+ yield event;
56646
+ yield {
56647
+ type: "content_block_delta",
56648
+ index: activeThinkingIndex,
56649
+ delta: { type: "thinking_delta", thinking: reasoning }
56650
+ };
56651
+ }
56620
56652
  if (typeof delta.content === "string" && delta.content.length > 0) {
56621
56653
  for (const event of ensureText())
56622
56654
  yield event;
@@ -56660,6 +56692,8 @@ async function* streamOpenAIEvents(body, options) {
56660
56692
  }
56661
56693
  for (const event of stopText())
56662
56694
  yield event;
56695
+ for (const event of stopThinking())
56696
+ yield event;
56663
56697
  for (const [index2, state] of toolStates.entries()) {
56664
56698
  if (state.blockIndex === undefined) {
56665
56699
  throw new ProviderResponseParseError(`${providerName} streamed tool_calls[${index2}] without a function name`, { state });
@@ -57464,6 +57498,10 @@ function messageToOpenAIMessages(message, toolNamesById, providerName) {
57464
57498
  }
57465
57499
  function parseOpenAIMessageContent(message, legacyText, providerName) {
57466
57500
  const content = [];
57501
+ const reasoning = typeof message?.reasoning_content === "string" ? message.reasoning_content : typeof message?.reasoning === "string" ? message.reasoning : "";
57502
+ if (reasoning.length > 0) {
57503
+ content.push({ type: "thinking", thinking: reasoning });
57504
+ }
57467
57505
  const text = openAIMessageText(message?.content, legacyText);
57468
57506
  if (text.length > 0) {
57469
57507
  content.push({ type: "text", text });
@@ -71215,7 +71253,7 @@ var init_auth = __esm(() => {
71215
71253
 
71216
71254
  // src/utils/userAgent.ts
71217
71255
  function getURCodeUserAgent() {
71218
- return `ur/${"1.43.5"}`;
71256
+ return `ur/${"1.44.0"}`;
71219
71257
  }
71220
71258
 
71221
71259
  // src/utils/workloadContext.ts
@@ -71237,7 +71275,7 @@ function getUserAgent() {
71237
71275
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
71238
71276
  const workload = getWorkload();
71239
71277
  const workloadSuffix = workload ? `, workload/${workload}` : "";
71240
- return `ur-cli/${"1.43.5"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71278
+ return `ur-cli/${"1.44.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71241
71279
  }
71242
71280
  function getMCPUserAgent() {
71243
71281
  const parts = [];
@@ -71251,7 +71289,7 @@ function getMCPUserAgent() {
71251
71289
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
71252
71290
  }
71253
71291
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
71254
- return `ur/${"1.43.5"}${suffix}`;
71292
+ return `ur/${"1.44.0"}${suffix}`;
71255
71293
  }
71256
71294
  function getWebFetchUserAgent() {
71257
71295
  return `UR-User (${getURCodeUserAgent()})`;
@@ -71389,7 +71427,7 @@ var init_user = __esm(() => {
71389
71427
  deviceId,
71390
71428
  sessionId: getSessionId(),
71391
71429
  email: getEmail(),
71392
- appVersion: "1.43.5",
71430
+ appVersion: "1.44.0",
71393
71431
  platform: getHostPlatformForAnalytics(),
71394
71432
  organizationUuid,
71395
71433
  accountUuid,
@@ -77906,7 +77944,7 @@ var init_metadata = __esm(() => {
77906
77944
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
77907
77945
  WHITESPACE_REGEX = /\s+/;
77908
77946
  getVersionBase = memoize_default(() => {
77909
- const match = "1.43.5".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
77947
+ const match = "1.44.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
77910
77948
  return match ? match[0] : undefined;
77911
77949
  });
77912
77950
  buildEnvContext = memoize_default(async () => {
@@ -77946,7 +77984,7 @@ var init_metadata = __esm(() => {
77946
77984
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
77947
77985
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
77948
77986
  isURAiAuth: isURAISubscriber(),
77949
- version: "1.43.5",
77987
+ version: "1.44.0",
77950
77988
  versionBase: getVersionBase(),
77951
77989
  buildTime: "",
77952
77990
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -78616,7 +78654,7 @@ function initialize1PEventLogging() {
78616
78654
  const platform2 = getPlatform();
78617
78655
  const attributes = {
78618
78656
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
78619
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.43.5"
78657
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.0"
78620
78658
  };
78621
78659
  if (platform2 === "wsl") {
78622
78660
  const wslVersion = getWslVersion();
@@ -78643,7 +78681,7 @@ function initialize1PEventLogging() {
78643
78681
  })
78644
78682
  ]
78645
78683
  });
78646
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.43.5");
78684
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.0");
78647
78685
  }
78648
78686
  async function reinitialize1PEventLoggingIfConfigChanged() {
78649
78687
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -81273,6 +81311,9 @@ var init_types2 = __esm(() => {
81273
81311
  prefersReducedMotion: exports_external.boolean().optional().describe("Reduce or disable animations for accessibility (spinner shimmer, flash effects, etc.)"),
81274
81312
  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."),
81275
81313
  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/."),
81314
+ verifier: exports_external.object({
81315
+ 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.")
81316
+ }).optional().describe("Verifier behavior configuration"),
81276
81317
  autoDreamEnabled: exports_external.boolean().optional().describe("Enable background memory consolidation (auto-dream). When set, overrides the server-side default."),
81277
81318
  ollama: exports_external.object({
81278
81319
  host: exports_external.string().optional().describe("URL of the Ollama server to use (e.g. http://192.168.1.50:11434)"),
@@ -83942,7 +83983,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
83942
83983
  function formatA2AAgentCard(options = {}, pretty = true) {
83943
83984
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
83944
83985
  }
83945
- var urVersion = "1.43.5", coverage, priorityRoadmap;
83986
+ var urVersion = "1.44.0", coverage, priorityRoadmap;
83946
83987
  var init_trends = __esm(() => {
83947
83988
  coverage = [
83948
83989
  {
@@ -85937,7 +85978,7 @@ function getAttributionHeader(fingerprint) {
85937
85978
  if (!isAttributionHeaderEnabled()) {
85938
85979
  return "";
85939
85980
  }
85940
- const version2 = `${"1.43.5"}.${fingerprint}`;
85981
+ const version2 = `${"1.44.0"}.${fingerprint}`;
85941
85982
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
85942
85983
  const cch = "";
85943
85984
  const workload = getWorkload();
@@ -144484,16 +144525,26 @@ class Verifier {
144484
144525
  const ranBash = this.ledger.ranBash(turnId);
144485
144526
  let commands = config2 ? pickCommands(config2, modifiedFiles, ranBash, this.cwd) : null;
144486
144527
  let timeoutMs = config2?.timeoutMs;
144528
+ let autoDetected = false;
144487
144529
  if (!commands && hasNonIgnoredEdits(config2, modifiedFiles, this.cwd)) {
144488
144530
  commands = this.autoDetectedAfterEditCommands();
144489
144531
  timeoutMs = config2?.timeoutMs ?? AUTO_DETECTED_GATE_TIMEOUT_MS;
144532
+ autoDetected = true;
144490
144533
  }
144491
144534
  if (commands && commands.length > 0) {
144492
- const result = await runGateCommands(commands, this.cwd, timeoutMs);
144493
- if (!result.ok) {
144535
+ if (!askBeforeGatesEnabled() && getIsNonInteractiveSession()) {
144536
+ const result = await runGateCommands(commands, this.cwd, timeoutMs);
144537
+ if (!result.ok) {
144538
+ this.bumpRejection(turnId);
144539
+ const failed = result;
144540
+ return { ok: false, reminder: failed.reminder };
144541
+ }
144542
+ } else {
144494
144543
  this.bumpRejection(turnId);
144495
- const failed = result;
144496
- return { ok: false, reminder: failed.reminder };
144544
+ return {
144545
+ ok: false,
144546
+ reminder: buildAskBeforeGatesReminder(commands, autoDetected)
144547
+ };
144497
144548
  }
144498
144549
  }
144499
144550
  const pluginValidators = await this.pluginValidatorsPromise;
@@ -144550,6 +144601,22 @@ class Verifier {
144550
144601
  return detectProjectQualityStack(this.cwd).commands.map((command) => command.command);
144551
144602
  }
144552
144603
  }
144604
+ function askBeforeGatesEnabled() {
144605
+ try {
144606
+ return getInitialSettings().verifier?.askBeforeGates === true;
144607
+ } catch {
144608
+ return false;
144609
+ }
144610
+ }
144611
+ function buildAskBeforeGatesReminder(commands, autoDetected) {
144612
+ const label = autoDetected ? "auto-detected project verification" : "project verification";
144613
+ const list2 = commands.map((c4) => `- \`${c4}\``).join(`
144614
+ `);
144615
+ return `I have ${label} commands ready to run:
144616
+ ${list2}
144617
+
144618
+ ` + `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.`;
144619
+ }
144553
144620
  function pickPluginValidators(validators3, modifiedFiles, ranBash) {
144554
144621
  return validators3.filter((v) => {
144555
144622
  if (v.when === "always")
@@ -144567,6 +144634,8 @@ function pickPluginValidators(validators3, modifiedFiles, ranBash) {
144567
144634
  var import_picomatch3, DEFAULT_MAX_REJECTIONS_PER_TURN = 3, AUTO_DETECTED_GATE_TIMEOUT_MS = 600000;
144568
144635
  var init_verifier = __esm(() => {
144569
144636
  init_envUtils();
144637
+ init_state();
144638
+ init_settings2();
144570
144639
  init_projectQuality();
144571
144640
  init_doneDetector();
144572
144641
  init_ledger();
@@ -193879,7 +193948,7 @@ function getTelemetryAttributes() {
193879
193948
  attributes["session.id"] = sessionId;
193880
193949
  }
193881
193950
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
193882
- attributes["app.version"] = "1.43.5";
193951
+ attributes["app.version"] = "1.44.0";
193883
193952
  }
193884
193953
  const oauthAccount = getOauthAccountInfo();
193885
193954
  if (oauthAccount) {
@@ -229267,7 +229336,7 @@ function getInstallationEnv() {
229267
229336
  return;
229268
229337
  }
229269
229338
  function getURCodeVersion() {
229270
- return "1.43.5";
229339
+ return "1.44.0";
229271
229340
  }
229272
229341
  async function getInstalledVSCodeExtensionVersion(command) {
229273
229342
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -232106,7 +232175,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
232106
232175
  const client2 = new Client({
232107
232176
  name: "ur",
232108
232177
  title: "UR",
232109
- version: "1.43.5",
232178
+ version: "1.44.0",
232110
232179
  description: "UR-Nexus autonomous engineering workflow engine",
232111
232180
  websiteUrl: PRODUCT_URL
232112
232181
  }, {
@@ -232460,7 +232529,7 @@ var init_client5 = __esm(() => {
232460
232529
  const client2 = new Client({
232461
232530
  name: "ur",
232462
232531
  title: "UR",
232463
- version: "1.43.5",
232532
+ version: "1.44.0",
232464
232533
  description: "UR-Nexus autonomous engineering workflow engine",
232465
232534
  websiteUrl: PRODUCT_URL
232466
232535
  }, {
@@ -242274,9 +242343,9 @@ async function assertMinVersion() {
242274
242343
  if (false) {}
242275
242344
  try {
242276
242345
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
242277
- if (versionConfig.minVersion && lt("1.43.5", versionConfig.minVersion)) {
242346
+ if (versionConfig.minVersion && lt("1.44.0", versionConfig.minVersion)) {
242278
242347
  console.error(`
242279
- It looks like your version of UR (${"1.43.5"}) needs an update.
242348
+ It looks like your version of UR (${"1.44.0"}) needs an update.
242280
242349
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
242281
242350
 
242282
242351
  To update, please run:
@@ -242492,7 +242561,7 @@ async function installGlobalPackage(specificVersion) {
242492
242561
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
242493
242562
  logEvent("tengu_auto_updater_lock_contention", {
242494
242563
  pid: process.pid,
242495
- currentVersion: "1.43.5"
242564
+ currentVersion: "1.44.0"
242496
242565
  });
242497
242566
  return "in_progress";
242498
242567
  }
@@ -242501,7 +242570,7 @@ async function installGlobalPackage(specificVersion) {
242501
242570
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
242502
242571
  logError2(new Error("Windows NPM detected in WSL environment"));
242503
242572
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
242504
- currentVersion: "1.43.5"
242573
+ currentVersion: "1.44.0"
242505
242574
  });
242506
242575
  console.error(`
242507
242576
  Error: Windows NPM detected in WSL
@@ -243036,7 +243105,7 @@ function detectLinuxGlobPatternWarnings() {
243036
243105
  }
243037
243106
  async function getDoctorDiagnostic() {
243038
243107
  const installationType = await getCurrentInstallationType();
243039
- const version2 = typeof MACRO !== "undefined" ? "1.43.5" : "unknown";
243108
+ const version2 = typeof MACRO !== "undefined" ? "1.44.0" : "unknown";
243040
243109
  const installationPath = await getInstallationPath();
243041
243110
  const invokedBinary = getInvokedBinary();
243042
243111
  const multipleInstallations = await detectMultipleInstallations();
@@ -243971,8 +244040,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
243971
244040
  const maxVersion = await getMaxVersion();
243972
244041
  if (maxVersion && gt(version2, maxVersion)) {
243973
244042
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
243974
- if (gte("1.43.5", maxVersion)) {
243975
- logForDebugging(`Native installer: current version ${"1.43.5"} is already at or above maxVersion ${maxVersion}, skipping update`);
244043
+ if (gte("1.44.0", maxVersion)) {
244044
+ logForDebugging(`Native installer: current version ${"1.44.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
243976
244045
  logEvent("tengu_native_update_skipped_max_version", {
243977
244046
  latency_ms: Date.now() - startTime,
243978
244047
  max_version: maxVersion,
@@ -243983,7 +244052,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
243983
244052
  version2 = maxVersion;
243984
244053
  }
243985
244054
  }
243986
- if (!forceReinstall && version2 === "1.43.5" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244055
+ if (!forceReinstall && version2 === "1.44.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
243987
244056
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
243988
244057
  logEvent("tengu_native_update_complete", {
243989
244058
  latency_ms: Date.now() - startTime,
@@ -301913,6 +301982,12 @@ var init_supportedSettings = __esm(() => {
301913
301982
  path: ["codeIndexAutoReindex"],
301914
301983
  description: "Automatically refresh the local semantic code index during interactive sessions"
301915
301984
  },
301985
+ "verifier.askBeforeGates": {
301986
+ source: "settings",
301987
+ type: "boolean",
301988
+ path: ["verifier", "askBeforeGates"],
301989
+ description: "Ask before running project verification commands (tests, typecheck, lint) after a task instead of running them automatically. Default: false."
301990
+ },
301916
301991
  autoDreamEnabled: {
301917
301992
  source: "settings",
301918
301993
  type: "boolean",
@@ -340974,7 +341049,7 @@ function Feedback({
340974
341049
  platform: env2.platform,
340975
341050
  gitRepo: envInfo.isGit,
340976
341051
  terminal: env2.terminal,
340977
- version: "1.43.5",
341052
+ version: "1.44.0",
340978
341053
  transcript: normalizeMessagesForAPI(messages),
340979
341054
  errors: sanitizedErrors,
340980
341055
  lastApiRequest: getLastAPIRequest(),
@@ -341166,7 +341241,7 @@ function Feedback({
341166
341241
  ", ",
341167
341242
  env2.terminal,
341168
341243
  ", v",
341169
- "1.43.5"
341244
+ "1.44.0"
341170
341245
  ]
341171
341246
  }, undefined, true, undefined, this)
341172
341247
  ]
@@ -341272,7 +341347,7 @@ ${sanitizedDescription}
341272
341347
  ` + `**Environment Info**
341273
341348
  ` + `- Platform: ${env2.platform}
341274
341349
  ` + `- Terminal: ${env2.terminal}
341275
- ` + `- Version: ${"1.43.5"}
341350
+ ` + `- Version: ${"1.44.0"}
341276
341351
  ` + `- Feedback ID: ${feedbackId}
341277
341352
  ` + `
341278
341353
  **Errors**
@@ -344383,7 +344458,7 @@ function buildPrimarySection() {
344383
344458
  }, undefined, false, undefined, this);
344384
344459
  return [{
344385
344460
  label: "Version",
344386
- value: "1.43.5"
344461
+ value: "1.44.0"
344387
344462
  }, {
344388
344463
  label: "Session name",
344389
344464
  value: nameValue
@@ -346630,6 +346705,31 @@ function Config({
346630
346705
  });
346631
346706
  }
346632
346707
  }] : [],
346708
+ {
346709
+ id: "verifierAskBeforeGates",
346710
+ label: "Ask before running verification gates",
346711
+ value: settingsData?.verifier?.askBeforeGates ?? false,
346712
+ type: "boolean",
346713
+ onChange(askBeforeGates) {
346714
+ updateSettingsForSource("userSettings", {
346715
+ verifier: {
346716
+ ...settingsData?.verifier,
346717
+ askBeforeGates
346718
+ }
346719
+ });
346720
+ setSettingsData((prev) => ({
346721
+ ...prev,
346722
+ verifier: {
346723
+ ...prev?.verifier,
346724
+ askBeforeGates
346725
+ }
346726
+ }));
346727
+ logEvent("tengu_config_changed", {
346728
+ setting: "verifierAskBeforeGates",
346729
+ value: String(askBeforeGates)
346730
+ });
346731
+ }
346732
+ },
346633
346733
  {
346634
346734
  id: "verbose",
346635
346735
  label: "Verbose output",
@@ -347144,6 +347244,9 @@ function Config({
347144
347244
  if (globalConfig2.autoInstallIdeExtension !== initialConfig.current.autoInstallIdeExtension) {
347145
347245
  formattedChanges.push(`${globalConfig2.autoInstallIdeExtension ? "Enabled" : "Disabled"} auto-install IDE extension`);
347146
347246
  }
347247
+ if (settingsData?.verifier?.askBeforeGates !== initialSettingsData.current?.verifier?.askBeforeGates) {
347248
+ formattedChanges.push(`${settingsData?.verifier?.askBeforeGates ? "Enabled" : "Disabled"} ask before running verification gates`);
347249
+ }
347147
347250
  if (globalConfig2.autoCompactEnabled !== initialConfig.current.autoCompactEnabled) {
347148
347251
  formattedChanges.push(`${globalConfig2.autoCompactEnabled ? "Enabled" : "Disabled"} auto-compact`);
347149
347252
  }
@@ -347201,6 +347304,7 @@ function Config({
347201
347304
  autoUpdatesChannel: iu?.autoUpdatesChannel,
347202
347305
  minimumVersion: iu?.minimumVersion,
347203
347306
  language: iu?.language,
347307
+ verifier: iu?.verifier,
347204
347308
  ...{},
347205
347309
  syntaxHighlightingDisabled: iu?.syntaxHighlightingDisabled,
347206
347310
  permissions: iu?.permissions === undefined ? undefined : {
@@ -347684,7 +347788,7 @@ function Config({
347684
347788
  }
347685
347789
  }, undefined, false, undefined, this)
347686
347790
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime177.jsxDEV(ChannelDowngradeDialog, {
347687
- currentVersion: "1.43.5",
347791
+ currentVersion: "1.44.0",
347688
347792
  onChoice: (choice) => {
347689
347793
  setShowSubmenu(null);
347690
347794
  setTabsHidden(false);
@@ -347696,7 +347800,7 @@ function Config({
347696
347800
  autoUpdatesChannel: "stable"
347697
347801
  };
347698
347802
  if (choice === "stay") {
347699
- newSettings.minimumVersion = "1.43.5";
347803
+ newSettings.minimumVersion = "1.44.0";
347700
347804
  }
347701
347805
  updateSettingsForSource("userSettings", newSettings);
347702
347806
  setSettingsData((prev_27) => ({
@@ -355766,7 +355870,7 @@ function HelpV2(t0) {
355766
355870
  let t6;
355767
355871
  if ($3[31] !== tabs) {
355768
355872
  t6 = /* @__PURE__ */ jsx_dev_runtime204.jsxDEV(Tabs, {
355769
- title: `UR v${"1.43.5"}`,
355873
+ title: `UR v${"1.44.0"}`,
355770
355874
  color: "professionalBlue",
355771
355875
  defaultTab: "general",
355772
355876
  children: tabs
@@ -356512,7 +356616,7 @@ function buildToolUseContext(tools, readFileStateCache) {
356512
356616
  async function handleInitialize(options2) {
356513
356617
  return {
356514
356618
  name: "UR",
356515
- version: "1.43.5",
356619
+ version: "1.44.0",
356516
356620
  protocolVersion: "0.1.0",
356517
356621
  workspaceRoot: options2.cwd,
356518
356622
  capabilities: {
@@ -376654,7 +376758,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
376654
376758
  return [];
376655
376759
  }
376656
376760
  }
376657
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.43.5") {
376761
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.0") {
376658
376762
  if (process.env.USER_TYPE === "ant") {
376659
376763
  const changelog = "";
376660
376764
  if (changelog) {
@@ -376681,7 +376785,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.43.5")
376681
376785
  releaseNotes
376682
376786
  };
376683
376787
  }
376684
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.43.5") {
376788
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.0") {
376685
376789
  if (process.env.USER_TYPE === "ant") {
376686
376790
  const changelog = "";
376687
376791
  if (changelog) {
@@ -377860,7 +377964,7 @@ function getRecentActivitySync() {
377860
377964
  return cachedActivity;
377861
377965
  }
377862
377966
  function getLogoDisplayData() {
377863
- const version2 = process.env.DEMO_VERSION ?? "1.43.5";
377967
+ const version2 = process.env.DEMO_VERSION ?? "1.44.0";
377864
377968
  const serverUrl = getDirectConnectServerUrl();
377865
377969
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
377866
377970
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -378649,7 +378753,7 @@ function LogoV2() {
378649
378753
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
378650
378754
  t2 = () => {
378651
378755
  const currentConfig2 = getGlobalConfig();
378652
- if (currentConfig2.lastReleaseNotesSeen === "1.43.5") {
378756
+ if (currentConfig2.lastReleaseNotesSeen === "1.44.0") {
378653
378757
  return;
378654
378758
  }
378655
378759
  saveGlobalConfig(_temp326);
@@ -379334,12 +379438,12 @@ function LogoV2() {
379334
379438
  return t41;
379335
379439
  }
379336
379440
  function _temp326(current) {
379337
- if (current.lastReleaseNotesSeen === "1.43.5") {
379441
+ if (current.lastReleaseNotesSeen === "1.44.0") {
379338
379442
  return current;
379339
379443
  }
379340
379444
  return {
379341
379445
  ...current,
379342
- lastReleaseNotesSeen: "1.43.5"
379446
+ lastReleaseNotesSeen: "1.44.0"
379343
379447
  };
379344
379448
  }
379345
379449
  function _temp243(s_0) {
@@ -411220,7 +411324,7 @@ var init_code_index2 = __esm(() => {
411220
411324
 
411221
411325
  // node_modules/typescript/lib/typescript.js
411222
411326
  var require_typescript2 = __commonJS((exports, module) => {
411223
- 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";
411327
+ 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";
411224
411328
  /*! *****************************************************************************
411225
411329
  Copyright (c) Microsoft Corporation. All rights reserved.
411226
411330
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
@@ -596754,7 +596858,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
596754
596858
  smapsRollup,
596755
596859
  platform: process.platform,
596756
596860
  nodeVersion: process.version,
596757
- ccVersion: "1.43.5"
596861
+ ccVersion: "1.44.0"
596758
596862
  };
596759
596863
  }
596760
596864
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -597340,7 +597444,7 @@ var init_bridge_kick = __esm(() => {
597340
597444
  var call137 = async () => {
597341
597445
  return {
597342
597446
  type: "text",
597343
- value: "1.43.5"
597447
+ value: "1.44.0"
597344
597448
  };
597345
597449
  }, version2, version_default;
597346
597450
  var init_version = __esm(() => {
@@ -607433,7 +607537,7 @@ function generateHtmlReport(data, insights) {
607433
607537
  </html>`;
607434
607538
  }
607435
607539
  function buildExportData(data, insights, facets, remoteStats) {
607436
- const version3 = typeof MACRO !== "undefined" ? "1.43.5" : "unknown";
607540
+ const version3 = typeof MACRO !== "undefined" ? "1.44.0" : "unknown";
607437
607541
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
607438
607542
  const facets_summary = {
607439
607543
  total: facets.size,
@@ -611713,7 +611817,7 @@ var init_sessionStorage = __esm(() => {
611713
611817
  init_settings2();
611714
611818
  init_slowOperations();
611715
611819
  init_uuid();
611716
- VERSION5 = typeof MACRO !== "undefined" ? "1.43.5" : "unknown";
611820
+ VERSION5 = typeof MACRO !== "undefined" ? "1.44.0" : "unknown";
611717
611821
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
611718
611822
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
611719
611823
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -612918,7 +613022,7 @@ var init_filesystem = __esm(() => {
612918
613022
  });
612919
613023
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
612920
613024
  const nonce = randomBytes18(16).toString("hex");
612921
- return join202(getURTempDir(), "bundled-skills", "1.43.5", nonce);
613025
+ return join202(getURTempDir(), "bundled-skills", "1.44.0", nonce);
612922
613026
  });
612923
613027
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
612924
613028
  });
@@ -618345,7 +618449,9 @@ function getSimpleDoingTasksSection() {
618345
618449
  `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.`,
618346
618450
  `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.`,
618347
618451
  `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.`,
618348
- `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.`
618452
+ `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.`,
618453
+ `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.`,
618454
+ `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.`
618349
618455
  ];
618350
618456
  const userHelpSubitems = [
618351
618457
  `/help: Get help with using UR`,
@@ -619207,7 +619313,7 @@ function computeFingerprint(messageText2, version3) {
619207
619313
  }
619208
619314
  function computeFingerprintFromMessages(messages) {
619209
619315
  const firstMessageText = extractFirstMessageText(messages);
619210
- return computeFingerprint(firstMessageText, "1.43.5");
619316
+ return computeFingerprint(firstMessageText, "1.44.0");
619211
619317
  }
619212
619318
  var FINGERPRINT_SALT = "59cf53e54c78";
619213
619319
  var init_fingerprint = () => {};
@@ -621081,7 +621187,7 @@ async function sideQuery(opts) {
621081
621187
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
621082
621188
  }
621083
621189
  const messageText2 = extractFirstUserMessageText(messages);
621084
- const fingerprint2 = computeFingerprint(messageText2, "1.43.5");
621190
+ const fingerprint2 = computeFingerprint(messageText2, "1.44.0");
621085
621191
  const attributionHeader = getAttributionHeader(fingerprint2);
621086
621192
  const systemBlocks = [
621087
621193
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -625818,7 +625924,7 @@ function buildSystemInitMessage(inputs) {
625818
625924
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
625819
625925
  apiKeySource: getURHQApiKeyWithSource().source,
625820
625926
  betas: getSdkBetas(),
625821
- ur_version: "1.43.5",
625927
+ ur_version: "1.44.0",
625822
625928
  output_style: outputStyle2,
625823
625929
  agents: inputs.agents.map((agent) => agent.agentType),
625824
625930
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -640446,7 +640552,7 @@ var init_useVoiceEnabled = __esm(() => {
640446
640552
  function getSemverPart(version3) {
640447
640553
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
640448
640554
  }
640449
- function useUpdateNotification(updatedVersion, initialVersion = "1.43.5") {
640555
+ function useUpdateNotification(updatedVersion, initialVersion = "1.44.0") {
640450
640556
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
640451
640557
  if (!updatedVersion) {
640452
640558
  return null;
@@ -640495,7 +640601,7 @@ function AutoUpdater({
640495
640601
  return;
640496
640602
  }
640497
640603
  if (false) {}
640498
- const currentVersion = "1.43.5";
640604
+ const currentVersion = "1.44.0";
640499
640605
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
640500
640606
  let latestVersion = await getLatestVersion(channel);
640501
640607
  const isDisabled = isAutoUpdaterDisabled();
@@ -640724,12 +640830,12 @@ function NativeAutoUpdater({
640724
640830
  logEvent("tengu_native_auto_updater_start", {});
640725
640831
  try {
640726
640832
  const maxVersion = await getMaxVersion();
640727
- if (maxVersion && gt("1.43.5", maxVersion)) {
640833
+ if (maxVersion && gt("1.44.0", maxVersion)) {
640728
640834
  const msg = await getMaxVersionMessage();
640729
640835
  setMaxVersionIssue(msg ?? "affects your version");
640730
640836
  }
640731
640837
  const result = await installLatest(channel);
640732
- const currentVersion = "1.43.5";
640838
+ const currentVersion = "1.44.0";
640733
640839
  const latencyMs = Date.now() - startTime;
640734
640840
  if (result.lockFailed) {
640735
640841
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -640866,17 +640972,17 @@ function PackageManagerAutoUpdater(t0) {
640866
640972
  const maxVersion = await getMaxVersion();
640867
640973
  if (maxVersion && latest && gt(latest, maxVersion)) {
640868
640974
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
640869
- if (gte("1.43.5", maxVersion)) {
640870
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.43.5"} is already at or above maxVersion ${maxVersion}, skipping update`);
640975
+ if (gte("1.44.0", maxVersion)) {
640976
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
640871
640977
  setUpdateAvailable(false);
640872
640978
  return;
640873
640979
  }
640874
640980
  latest = maxVersion;
640875
640981
  }
640876
- const hasUpdate = latest && !gte("1.43.5", latest) && !shouldSkipVersion(latest);
640982
+ const hasUpdate = latest && !gte("1.44.0", latest) && !shouldSkipVersion(latest);
640877
640983
  setUpdateAvailable(!!hasUpdate);
640878
640984
  if (hasUpdate) {
640879
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.43.5"} -> ${latest}`);
640985
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.0"} -> ${latest}`);
640880
640986
  }
640881
640987
  };
640882
640988
  $3[0] = t1;
@@ -640910,7 +641016,7 @@ function PackageManagerAutoUpdater(t0) {
640910
641016
  wrap: "truncate",
640911
641017
  children: [
640912
641018
  "currentVersion: ",
640913
- "1.43.5"
641019
+ "1.44.0"
640914
641020
  ]
640915
641021
  }, undefined, true, undefined, this);
640916
641022
  $3[3] = verbose;
@@ -653362,7 +653468,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
653362
653468
  project_dir: getOriginalCwd(),
653363
653469
  added_dirs: addedDirs
653364
653470
  },
653365
- version: "1.43.5",
653471
+ version: "1.44.0",
653366
653472
  output_style: {
653367
653473
  name: outputStyleName
653368
653474
  },
@@ -653445,7 +653551,7 @@ function StatusLineInner({
653445
653551
  const taskValues = Object.values(tasks2);
653446
653552
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
653447
653553
  const defaultStatusLineText = buildDefaultStatusBar({
653448
- version: "1.43.5",
653554
+ version: "1.44.0",
653449
653555
  providerLabel: providerRuntime.providerLabel,
653450
653556
  authMode: providerRuntime.authLabel,
653451
653557
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -664933,7 +665039,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
664933
665039
  } catch {}
664934
665040
  const data = {
664935
665041
  trigger: trigger2,
664936
- version: "1.43.5",
665042
+ version: "1.44.0",
664937
665043
  platform: process.platform,
664938
665044
  transcript,
664939
665045
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -676818,7 +676924,7 @@ function WelcomeV2() {
676818
676924
  dimColor: true,
676819
676925
  children: [
676820
676926
  "v",
676821
- "1.43.5"
676927
+ "1.44.0"
676822
676928
  ]
676823
676929
  }, undefined, true, undefined, this)
676824
676930
  ]
@@ -678078,7 +678184,7 @@ function completeOnboarding() {
678078
678184
  saveGlobalConfig((current) => ({
678079
678185
  ...current,
678080
678186
  hasCompletedOnboarding: true,
678081
- lastOnboardingVersion: "1.43.5"
678187
+ lastOnboardingVersion: "1.44.0"
678082
678188
  }));
678083
678189
  }
678084
678190
  function showDialog(root2, renderer) {
@@ -683115,7 +683221,7 @@ function appendToLog(path24, message) {
683115
683221
  cwd: getFsImplementation().cwd(),
683116
683222
  userType: process.env.USER_TYPE,
683117
683223
  sessionId: getSessionId(),
683118
- version: "1.43.5"
683224
+ version: "1.44.0"
683119
683225
  };
683120
683226
  getLogWriter(path24).write(messageWithTimestamp);
683121
683227
  }
@@ -687209,8 +687315,8 @@ async function getEnvLessBridgeConfig() {
687209
687315
  }
687210
687316
  async function checkEnvLessBridgeMinVersion() {
687211
687317
  const cfg = await getEnvLessBridgeConfig();
687212
- if (cfg.min_version && lt("1.43.5", cfg.min_version)) {
687213
- return `Your version of UR (${"1.43.5"}) is too old for Remote Control.
687318
+ if (cfg.min_version && lt("1.44.0", cfg.min_version)) {
687319
+ return `Your version of UR (${"1.44.0"}) is too old for Remote Control.
687214
687320
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
687215
687321
  }
687216
687322
  return null;
@@ -687684,7 +687790,7 @@ async function initBridgeCore(params) {
687684
687790
  const rawApi = createBridgeApiClient({
687685
687791
  baseUrl,
687686
687792
  getAccessToken,
687687
- runnerVersion: "1.43.5",
687793
+ runnerVersion: "1.44.0",
687688
687794
  onDebug: logForDebugging,
687689
687795
  onAuth401,
687690
687796
  getTrustedDeviceToken
@@ -693366,7 +693472,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
693366
693472
  setCwd(cwd3);
693367
693473
  const server2 = new Server({
693368
693474
  name: "ur/tengu",
693369
- version: "1.43.5"
693475
+ version: "1.44.0"
693370
693476
  }, {
693371
693477
  capabilities: {
693372
693478
  tools: {}
@@ -695408,7 +695514,7 @@ async function update() {
695408
695514
  logEvent("tengu_update_check", {});
695409
695515
  const diagnostic = await getDoctorDiagnostic();
695410
695516
  const result = await checkUpgradeStatus({
695411
- currentVersion: "1.43.5",
695517
+ currentVersion: "1.44.0",
695412
695518
  packageName: UR_AGENT_PACKAGE_NAME,
695413
695519
  installationType: diagnostic.installationType,
695414
695520
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -696654,7 +696760,7 @@ ${customInstructions}` : customInstructions;
696654
696760
  }
696655
696761
  }
696656
696762
  logForDiagnosticsNoPII("info", "started", {
696657
- version: "1.43.5",
696763
+ version: "1.44.0",
696658
696764
  is_native_binary: isInBundledMode()
696659
696765
  });
696660
696766
  registerCleanup(async () => {
@@ -697440,7 +697546,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
697440
697546
  pendingHookMessages
697441
697547
  }, renderAndRun);
697442
697548
  }
697443
- }).version("1.43.5 (UR-Nexus)", "-v, --version", "Output the version number");
697549
+ }).version("1.44.0 (UR-Nexus)", "-v, --version", "Output the version number");
697444
697550
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
697445
697551
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
697446
697552
  if (canUserConfigureAdvisor()) {
@@ -698355,7 +698461,7 @@ if (false) {}
698355
698461
  async function main2() {
698356
698462
  const args = process.argv.slice(2);
698357
698463
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
698358
- console.log(`${"1.43.5"} (UR-Nexus)`);
698464
+ console.log(`${"1.44.0"} (UR-Nexus)`);
698359
698465
  return;
698360
698466
  }
698361
698467
  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.5</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.5",
5
+ "version": "1.44.0",
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.43.5",
3
+ "version": "1.44.0",
4
4
  "description": "UR-Nexus \u2014 autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",