ur-agent 1.80.7 → 1.80.8

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,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.80.8
4
+
5
+ - Fixed provider-independent failed-first research delegation. Several model
6
+ families selected `general-purpose` even when their own worker brief said
7
+ read-only research, causing `TaskListRequired` before the research could
8
+ start. UR now safely downgrades that exact main-session contract to its
9
+ mechanically read-only shipped `Explore` agent before task gating.
10
+ - Strengthened the shared Agent prompt and Explore description so models choose
11
+ `subagent_type="Explore"` directly for task-free research. The compatibility
12
+ downgrade also recognizes “research task only; do not write files” wording.
13
+ - Kept the boundary fail-closed: implementation prompts, custom definitions,
14
+ nested workers, named/team agents, worktrees, cwd overrides, and every other
15
+ general-purpose call still require an actionable task. Permission and hook
16
+ rewrites are revalidated before execution. Approve All remains unchanged.
17
+
3
18
  ## 1.80.7
4
19
 
5
20
  - Fixed Ollama runs stopping with `response returned unavailable tool
package/dist/cli.js CHANGED
@@ -107788,7 +107788,7 @@ var init_auth = __esm(() => {
107788
107788
 
107789
107789
  // src/utils/userAgent.ts
107790
107790
  function getURCodeUserAgent() {
107791
- return `ur/${"1.80.7"}`;
107791
+ return `ur/${"1.80.8"}`;
107792
107792
  }
107793
107793
 
107794
107794
  // src/utils/workloadContext.ts
@@ -107810,7 +107810,7 @@ function getUserAgent() {
107810
107810
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
107811
107811
  const workload = getWorkload();
107812
107812
  const workloadSuffix = workload ? `, workload/${workload}` : "";
107813
- return `ur-cli/${"1.80.7"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107813
+ return `ur-cli/${"1.80.8"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107814
107814
  }
107815
107815
  function getMCPUserAgent() {
107816
107816
  const parts = [];
@@ -107824,7 +107824,7 @@ function getMCPUserAgent() {
107824
107824
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
107825
107825
  }
107826
107826
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
107827
- return `ur/${"1.80.7"}${suffix}`;
107827
+ return `ur/${"1.80.8"}${suffix}`;
107828
107828
  }
107829
107829
  function getWebFetchUserAgent() {
107830
107830
  return `UR-User (${getURCodeUserAgent()})`;
@@ -107962,7 +107962,7 @@ var init_user = __esm(() => {
107962
107962
  deviceId,
107963
107963
  sessionId: getSessionId(),
107964
107964
  email: getEmail(),
107965
- appVersion: "1.80.7",
107965
+ appVersion: "1.80.8",
107966
107966
  platform: getHostPlatformForAnalytics(),
107967
107967
  organizationUuid,
107968
107968
  accountUuid,
@@ -115849,7 +115849,7 @@ var init_metadata = __esm(() => {
115849
115849
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
115850
115850
  WHITESPACE_REGEX = /\s+/;
115851
115851
  getVersionBase = memoize_default(() => {
115852
- const match = "1.80.7".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115852
+ const match = "1.80.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115853
115853
  return match ? match[0] : undefined;
115854
115854
  });
115855
115855
  buildEnvContext = memoize_default(async () => {
@@ -115889,7 +115889,7 @@ var init_metadata = __esm(() => {
115889
115889
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
115890
115890
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
115891
115891
  isURAiAuth: isURAISubscriber(),
115892
- version: "1.80.7",
115892
+ version: "1.80.8",
115893
115893
  versionBase: getVersionBase(),
115894
115894
  buildTime: "",
115895
115895
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -116559,7 +116559,7 @@ function initialize1PEventLogging() {
116559
116559
  const platform2 = getPlatform();
116560
116560
  const attributes = {
116561
116561
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
116562
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.7"
116562
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.8"
116563
116563
  };
116564
116564
  if (platform2 === "wsl") {
116565
116565
  const wslVersion = getWslVersion();
@@ -116587,7 +116587,7 @@ function initialize1PEventLogging() {
116587
116587
  })
116588
116588
  ]
116589
116589
  });
116590
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.7");
116590
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.8");
116591
116591
  }
116592
116592
  async function reinitialize1PEventLoggingIfConfigChanged() {
116593
116593
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -126550,7 +126550,7 @@ function formatA2AAgentCard(options = {}, pretty = true) {
126550
126550
  function formatA2AV1AgentCard(options = {}, pretty = true) {
126551
126551
  return JSON.stringify(buildA2AV1AgentCard(options), null, pretty ? 2 : 0);
126552
126552
  }
126553
- var urVersion = "1.80.7", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
126553
+ var urVersion = "1.80.8", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
126554
126554
  var init_trends = __esm(() => {
126555
126555
  init_a2aCardSignature();
126556
126556
  coverage = [
@@ -129440,7 +129440,7 @@ function getAttributionHeader(fingerprint) {
129440
129440
  if (!isAttributionHeaderEnabled()) {
129441
129441
  return "";
129442
129442
  }
129443
- const version2 = `${"1.80.7"}.${fingerprint}`;
129443
+ const version2 = `${"1.80.8"}.${fingerprint}`;
129444
129444
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
129445
129445
  const cch = "";
129446
129446
  const workload = getWorkload();
@@ -174270,7 +174270,7 @@ NOTE: You are meant to be a fast agent that returns output as quickly as possibl
174270
174270
 
174271
174271
  Complete the user's search request efficiently and report your findings clearly.`;
174272
174272
  }
174273
- var EXPLORE_AGENT_MIN_QUERIES = 3, EXPLORE_WHEN_TO_USE = 'Fast agent specialized for exploring codebases. Use this when you need to quickly find files by patterns (eg. "src/components/**/*.tsx"), search code for keywords (eg. "API endpoints"), or answer questions about the codebase (eg. "how do API endpoints work?"). When calling this agent, specify the desired thoroughness level: "quick" for basic searches, "medium" for moderate exploration, or "very thorough" for comprehensive analysis across multiple locations and naming conventions.', EXPLORE_AGENT;
174273
+ var EXPLORE_AGENT_MIN_QUERIES = 3, EXPLORE_WHEN_TO_USE = 'Read-only research and exploration agent. Use this for external research, source gathering, audits, codebase exploration, file-pattern searches (eg. "src/components/**/*.tsx"), code searches (eg. "API endpoints"), and questions about how a repository works. Prefer this over general-purpose whenever the worker must not modify files, especially before an actionable task exists. Specify the desired thoroughness: "quick", "medium", or "very thorough".', EXPLORE_AGENT;
174274
174274
  var init_exploreAgent = __esm(() => {
174275
174275
  init_prompt3();
174276
174276
  init_prompt4();
@@ -184636,7 +184636,7 @@ var init_projectSafety = __esm(() => {
184636
184636
  function getInstruments() {
184637
184637
  if (instruments)
184638
184638
  return instruments;
184639
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.7");
184639
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.8");
184640
184640
  instruments = {
184641
184641
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
184642
184642
  description: "GenAI operation duration.",
@@ -184734,7 +184734,7 @@ function genAiAgentAttributes() {
184734
184734
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
184735
184735
  "gen_ai.provider.name": "ur",
184736
184736
  "gen_ai.agent.name": "UR-Nexus",
184737
- "gen_ai.agent.version": "1.80.7"
184737
+ "gen_ai.agent.version": "1.80.8"
184738
184738
  };
184739
184739
  }
184740
184740
  function genAiWorkflowAttributes(workflowName, workflowRunId) {
@@ -184755,7 +184755,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
184755
184755
  function startGenAiWorkflowSpan(workflowName, workflowRunId) {
184756
184756
  const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
184757
184757
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
184758
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.7").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184758
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.8").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184759
184759
  }
184760
184760
  function endGenAiWorkflowSpan(span, options2 = {}) {
184761
184761
  try {
@@ -184793,7 +184793,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
184793
184793
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
184794
184794
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
184795
184795
  }
184796
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.7").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184796
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.8").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184797
184797
  }
184798
184798
  function endGenAiMemorySpan(span, options2 = {}) {
184799
184799
  try {
@@ -278508,7 +278508,7 @@ function getTelemetryAttributes() {
278508
278508
  attributes["session.id"] = sessionId;
278509
278509
  }
278510
278510
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
278511
- attributes["app.version"] = "1.80.7";
278511
+ attributes["app.version"] = "1.80.8";
278512
278512
  }
278513
278513
  const oauthAccount = getOauthAccountInfo();
278514
278514
  if (oauthAccount) {
@@ -319499,7 +319499,7 @@ function getInstallationEnv() {
319499
319499
  return;
319500
319500
  }
319501
319501
  function getURCodeVersion() {
319502
- return "1.80.7";
319502
+ return "1.80.8";
319503
319503
  }
319504
319504
  async function getInstalledVSCodeExtensionVersion(command) {
319505
319505
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -326869,7 +326869,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
326869
326869
  const client2 = new Client({
326870
326870
  name: "ur",
326871
326871
  title: "UR",
326872
- version: "1.80.7",
326872
+ version: "1.80.8",
326873
326873
  description: "UR-Nexus autonomous engineering workflow engine",
326874
326874
  websiteUrl: PRODUCT_URL
326875
326875
  }, {
@@ -327230,7 +327230,7 @@ var init_client5 = __esm(() => {
327230
327230
  const client2 = new Client({
327231
327231
  name: "ur",
327232
327232
  title: "UR",
327233
- version: "1.80.7",
327233
+ version: "1.80.8",
327234
327234
  description: "UR-Nexus autonomous engineering workflow engine",
327235
327235
  websiteUrl: PRODUCT_URL
327236
327236
  }, {
@@ -329250,6 +329250,15 @@ var init_agentToolUtils = __esm(() => {
329250
329250
  function isShippedReadOnlyAgentDefinition(agent) {
329251
329251
  return SHIPPED_READ_ONLY_AGENT_TYPES.has(agent.agentType) && agent.source === "built-in" && agent.permissionMode === "plan";
329252
329252
  }
329253
+ function normalizeReadOnlyResearchDelegation(input, activeAgents, isNestedAgent) {
329254
+ if (isNestedAgent || input.subagent_type !== "general-purpose" || input.name !== undefined || input.team_name !== undefined || input.isolation !== undefined || input.cwd !== undefined || typeof input.prompt !== "string" || !READ_ONLY_RESEARCH_MARKER.test(input.prompt) || !RESEARCH_INTENT_MARKER.test(input.prompt)) {
329255
+ return input;
329256
+ }
329257
+ const exploreAgent = activeAgents.find((agent) => agent.agentType === "Explore" && isShippedReadOnlyAgentDefinition(agent));
329258
+ if (!exploreAgent)
329259
+ return input;
329260
+ return { ...input, subagent_type: exploreAgent.agentType };
329261
+ }
329253
329262
  function shouldApplyAgentDefinitionPermissionMode(agent, parentMode, transcriptClassifierEnabled) {
329254
329263
  if (!agent.permissionMode)
329255
329264
  return false;
@@ -329257,12 +329266,14 @@ function shouldApplyAgentDefinitionPermissionMode(agent, parentMode, transcriptC
329257
329266
  return true;
329258
329267
  return parentMode !== "bypassPermissions" && parentMode !== "acceptEdits" && !(transcriptClassifierEnabled && parentMode === "auto");
329259
329268
  }
329260
- var SHIPPED_READ_ONLY_AGENT_TYPES;
329269
+ var SHIPPED_READ_ONLY_AGENT_TYPES, READ_ONLY_RESEARCH_MARKER, RESEARCH_INTENT_MARKER;
329261
329270
  var init_readOnlyAgents = __esm(() => {
329262
329271
  SHIPPED_READ_ONLY_AGENT_TYPES = new Set([
329263
329272
  "Explore",
329264
329273
  "Plan"
329265
329274
  ]);
329275
+ READ_ONLY_RESEARCH_MARKER = /\bread[\s-]?only\b|\b(?:do not|don't|must not|never)\s+(?:modify|write|edit|create|change)\s+(?:any\s+)?(?:code\s+)?files?\b|\bno\s+(?:file|workspace)\s+(?:changes|modifications)\b/i;
329276
+ RESEARCH_INTENT_MARKER = /\b(?:research|investigat\w*|explor\w*|analy[sz]\w*|audit\w*)\b/i;
329266
329277
  });
329267
329278
 
329268
329279
  // src/components/AgentProgressLine.tsx
@@ -339987,7 +339998,7 @@ async function createRuntime() {
339987
339998
  bootstrapTelemetry();
339988
339999
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
339989
340000
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
339990
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.7"
340001
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.8"
339991
340002
  }));
339992
340003
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
339993
340004
  resource,
@@ -340020,11 +340031,11 @@ async function createRuntime() {
340020
340031
  setMeterProvider(meterProvider);
340021
340032
  setLoggerProvider(loggerProvider);
340022
340033
  if (meterProvider) {
340023
- const meter = meterProvider.getMeter("ur-agent", "1.80.7");
340034
+ const meter = meterProvider.getMeter("ur-agent", "1.80.8");
340024
340035
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
340025
340036
  }
340026
340037
  if (loggerProvider) {
340027
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.7"));
340038
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.8"));
340028
340039
  }
340029
340040
  if (!cleanupRegistered3) {
340030
340041
  cleanupRegistered3 = true;
@@ -340686,9 +340697,9 @@ async function assertMinVersion() {
340686
340697
  if (false) {}
340687
340698
  try {
340688
340699
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
340689
- if (versionConfig.minVersion && lt("1.80.7", versionConfig.minVersion)) {
340700
+ if (versionConfig.minVersion && lt("1.80.8", versionConfig.minVersion)) {
340690
340701
  console.error(`
340691
- It looks like your version of UR (${"1.80.7"}) needs an update.
340702
+ It looks like your version of UR (${"1.80.8"}) needs an update.
340692
340703
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
340693
340704
 
340694
340705
  To update, please run:
@@ -340904,7 +340915,7 @@ async function installGlobalPackage(specificVersion) {
340904
340915
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
340905
340916
  logEvent("tengu_auto_updater_lock_contention", {
340906
340917
  pid: process.pid,
340907
- currentVersion: "1.80.7"
340918
+ currentVersion: "1.80.8"
340908
340919
  });
340909
340920
  return "in_progress";
340910
340921
  }
@@ -340913,7 +340924,7 @@ async function installGlobalPackage(specificVersion) {
340913
340924
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
340914
340925
  logError2(new Error("Windows NPM detected in WSL environment"));
340915
340926
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
340916
- currentVersion: "1.80.7"
340927
+ currentVersion: "1.80.8"
340917
340928
  });
340918
340929
  console.error(`
340919
340930
  Error: Windows NPM detected in WSL
@@ -341448,7 +341459,7 @@ function detectLinuxGlobPatternWarnings() {
341448
341459
  }
341449
341460
  async function getDoctorDiagnostic() {
341450
341461
  const installationType = await getCurrentInstallationType();
341451
- const version2 = typeof MACRO !== "undefined" ? "1.80.7" : "unknown";
341462
+ const version2 = typeof MACRO !== "undefined" ? "1.80.8" : "unknown";
341452
341463
  const installationPath = await getInstallationPath();
341453
341464
  const invokedBinary = getInvokedBinary();
341454
341465
  const multipleInstallations = await detectMultipleInstallations();
@@ -342383,8 +342394,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342383
342394
  const maxVersion = await getMaxVersion();
342384
342395
  if (maxVersion && gt(version2, maxVersion)) {
342385
342396
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
342386
- if (gte("1.80.7", maxVersion)) {
342387
- logForDebugging(`Native installer: current version ${"1.80.7"} is already at or above maxVersion ${maxVersion}, skipping update`);
342397
+ if (gte("1.80.8", maxVersion)) {
342398
+ logForDebugging(`Native installer: current version ${"1.80.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
342388
342399
  logEvent("tengu_native_update_skipped_max_version", {
342389
342400
  latency_ms: Date.now() - startTime,
342390
342401
  max_version: maxVersion,
@@ -342395,7 +342406,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342395
342406
  version2 = maxVersion;
342396
342407
  }
342397
342408
  }
342398
- if (!forceReinstall && version2 === "1.80.7" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
342409
+ if (!forceReinstall && version2 === "1.80.8" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
342399
342410
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
342400
342411
  logEvent("tengu_native_update_complete", {
342401
342412
  latency_ms: Date.now() - startTime,
@@ -406705,7 +406716,7 @@ async function getPrompt9(agentDefinitions, isCoordinator, allowedAgentTypes) {
406705
406716
  ## When to fork
406706
406717
 
406707
406718
  Fork yourself (omit \`subagent_type\`) when the intermediate tool output isn't worth keeping in your context. The criterion is qualitative \u2014 "will I need this output again" \u2014 not task size.
406708
- - **Research**: fork open-ended questions. If research can be broken into independent questions, launch parallel forks in one message. A fork beats a fresh subagent for this \u2014 it inherits context and shares your cache.
406719
+ - **Research after tasks exist**: fork open-ended questions when inherited context is valuable. Before an actionable task exists, use the shipped \`Explore\` agent instead; a fork or general-purpose agent is write-capable and will be task-gated. If research can be broken into independent questions, launch parallel \`Explore\` agents in one message.
406709
406720
  - **Implementation**: fork only a bounded branch with explicit file scope. Parallel implementation forks must use isolated worktrees based on the exact clean starting revision; otherwise keep shared-checkout writers sequential. Do research before jumping to implementation.
406710
406721
 
406711
406722
  Forks are cheap because they share your prompt cache. Don't set \`model\` on a fork \u2014 a different model can't reuse the parent's cache. Pass a short \`name\` (one or two words, lowercase) so the user can see the fork in the teams panel and steer it mid-run.
@@ -413051,7 +413062,7 @@ function isAnyTracingEnabled() {
413051
413062
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
413052
413063
  }
413053
413064
  function getTracer() {
413054
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.7");
413065
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.8");
413055
413066
  }
413056
413067
  function createSpanAttributes(spanType, customAttributes = {}) {
413057
413068
  const baseAttributes = getTelemetryAttributes();
@@ -414843,6 +414854,16 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
414843
414854
  }
414844
414855
  }
414845
414856
  }
414857
+ if (parsedInput.success && (tool.name === AGENT_TOOL_NAME || tool.name === LEGACY_AGENT_TOOL_NAME)) {
414858
+ const normalizedDelegation = normalizeReadOnlyResearchDelegation(parsedInput.data, toolUseContext.options.agentDefinitions.activeAgents, Boolean(toolUseContext.agentId));
414859
+ if (normalizedDelegation !== parsedInput.data) {
414860
+ input = normalizedDelegation;
414861
+ parsedInput = tool.inputSchema.safeParse(input);
414862
+ logEvent("tengu_agent_read_only_research_normalized", {
414863
+ toolName: sanitizeToolNameForAnalytics(tool.name)
414864
+ });
414865
+ }
414866
+ }
414846
414867
  let callSig = callSignature(tool.name, input, repeatedFailureScope(toolUseContext, messageId));
414847
414868
  const repeat2 = checkRepeatedFailure(callSig);
414848
414869
  if (repeat2.action !== "allow") {
@@ -443170,7 +443191,7 @@ function Feedback({
443170
443191
  platform: env2.platform,
443171
443192
  gitRepo: envInfo.isGit,
443172
443193
  terminal: env2.terminal,
443173
- version: "1.80.7",
443194
+ version: "1.80.8",
443174
443195
  transcript: normalizeMessagesForAPI(messages),
443175
443196
  errors: sanitizedErrors,
443176
443197
  lastApiRequest: getLastAPIRequest(),
@@ -443362,7 +443383,7 @@ function Feedback({
443362
443383
  ", ",
443363
443384
  env2.terminal,
443364
443385
  ", v",
443365
- "1.80.7"
443386
+ "1.80.8"
443366
443387
  ]
443367
443388
  }, undefined, true, undefined, this)
443368
443389
  ]
@@ -443468,7 +443489,7 @@ ${sanitizedDescription}
443468
443489
  ` + `**Environment Info**
443469
443490
  ` + `- Platform: ${env2.platform}
443470
443491
  ` + `- Terminal: ${env2.terminal}
443471
- ` + `- Version: ${"1.80.7"}
443492
+ ` + `- Version: ${"1.80.8"}
443472
443493
  ` + `- Feedback ID: ${feedbackId}
443473
443494
  ` + `
443474
443495
  **Errors**
@@ -446578,7 +446599,7 @@ function buildPrimarySection() {
446578
446599
  }, undefined, false, undefined, this);
446579
446600
  return [{
446580
446601
  label: "Version",
446581
- value: "1.80.7"
446602
+ value: "1.80.8"
446582
446603
  }, {
446583
446604
  label: "Session name",
446584
446605
  value: nameValue
@@ -449960,7 +449981,7 @@ function Config({
449960
449981
  }
449961
449982
  }, undefined, false, undefined, this)
449962
449983
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
449963
- currentVersion: "1.80.7",
449984
+ currentVersion: "1.80.8",
449964
449985
  onChoice: (choice) => {
449965
449986
  setShowSubmenu(null);
449966
449987
  setTabsHidden(false);
@@ -449972,7 +449993,7 @@ function Config({
449972
449993
  autoUpdatesChannel: "stable"
449973
449994
  };
449974
449995
  if (choice === "stay") {
449975
- newSettings.minimumVersion = "1.80.7";
449996
+ newSettings.minimumVersion = "1.80.8";
449976
449997
  }
449977
449998
  updateSettingsForSource("userSettings", newSettings);
449978
449999
  setSettingsData((prev_27) => ({
@@ -458281,7 +458302,7 @@ function HelpV2(t0) {
458281
458302
  let t6;
458282
458303
  if ($2[31] !== tabs) {
458283
458304
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
458284
- title: `UR v${"1.80.7"}`,
458305
+ title: `UR v${"1.80.8"}`,
458285
458306
  color: "professionalBlue",
458286
458307
  defaultTab: "general",
458287
458308
  children: tabs
@@ -459214,7 +459235,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
459214
459235
  async function handleInitialize(options2) {
459215
459236
  return {
459216
459237
  name: "UR",
459217
- version: "1.80.7",
459238
+ version: "1.80.8",
459218
459239
  protocolVersion: "0.1.0",
459219
459240
  workspaceRoot: options2.cwd,
459220
459241
  capabilities: {
@@ -476322,7 +476343,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
476322
476343
  return [];
476323
476344
  }
476324
476345
  }
476325
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.7") {
476346
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.8") {
476326
476347
  if (process.env.USER_TYPE === "ant") {
476327
476348
  const changelog = "";
476328
476349
  if (changelog) {
@@ -476349,7 +476370,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.7")
476349
476370
  releaseNotes
476350
476371
  };
476351
476372
  }
476352
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.7") {
476373
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.8") {
476353
476374
  if (process.env.USER_TYPE === "ant") {
476354
476375
  const changelog = "";
476355
476376
  if (changelog) {
@@ -479254,7 +479275,7 @@ function getRecentActivitySync() {
479254
479275
  return cachedActivity;
479255
479276
  }
479256
479277
  function getLogoDisplayData() {
479257
- const version2 = process.env.DEMO_VERSION ?? "1.80.7";
479278
+ const version2 = process.env.DEMO_VERSION ?? "1.80.8";
479258
479279
  const serverUrl = getDirectConnectServerUrl();
479259
479280
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
479260
479281
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -480122,7 +480143,7 @@ function LogoV2() {
480122
480143
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
480123
480144
  t2 = () => {
480124
480145
  const currentConfig = getGlobalConfig();
480125
- if (currentConfig.lastReleaseNotesSeen === "1.80.7") {
480146
+ if (currentConfig.lastReleaseNotesSeen === "1.80.8") {
480126
480147
  return;
480127
480148
  }
480128
480149
  saveGlobalConfig(_temp325);
@@ -480807,12 +480828,12 @@ function LogoV2() {
480807
480828
  return t41;
480808
480829
  }
480809
480830
  function _temp325(current) {
480810
- if (current.lastReleaseNotesSeen === "1.80.7") {
480831
+ if (current.lastReleaseNotesSeen === "1.80.8") {
480811
480832
  return current;
480812
480833
  }
480813
480834
  return {
480814
480835
  ...current,
480815
- lastReleaseNotesSeen: "1.80.7"
480836
+ lastReleaseNotesSeen: "1.80.8"
480816
480837
  };
480817
480838
  }
480818
480839
  function _temp241(s_0) {
@@ -496904,7 +496925,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
496904
496925
  if (spec.name !== specName) {
496905
496926
  throw new Error("Agentic CI workflow spec name does not match");
496906
496927
  }
496907
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.7" : "1.80.7");
496928
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.8" : "1.80.8");
496908
496929
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
496909
496930
  throw new Error("invalid ur-agent package version");
496910
496931
  }
@@ -497897,7 +497918,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
497897
497918
  path: ".github/workflows/ur.yml",
497898
497919
  root: "project",
497899
497920
  content: compileAgenticCiWorkflow("default", {
497900
- packageVersion: typeof MACRO !== "undefined" ? "1.80.7" : "1.80.7"
497921
+ packageVersion: typeof MACRO !== "undefined" ? "1.80.8" : "1.80.8"
497901
497922
  })
497902
497923
  },
497903
497924
  {
@@ -497960,7 +497981,7 @@ function value(tokens, flag) {
497960
497981
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
497961
497982
  }
497962
497983
  function cliVersion() {
497963
- return typeof MACRO !== "undefined" ? "1.80.7" : "1.80.7";
497984
+ return typeof MACRO !== "undefined" ? "1.80.8" : "1.80.8";
497964
497985
  }
497965
497986
  function workflowPath(cwd2) {
497966
497987
  return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -503816,7 +503837,7 @@ function createAcpStdioApp(deps) {
503816
503837
  }
503817
503838
  },
503818
503839
  authMethods: [],
503819
- agentInfo: { name: "UR-Nexus", version: "1.80.7" }
503840
+ agentInfo: { name: "UR-Nexus", version: "1.80.8" }
503820
503841
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
503821
503842
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
503822
503843
  await runtime2.announce({
@@ -503913,7 +503934,7 @@ function createAcpStdioAgent(deps) {
503913
503934
  }
503914
503935
  },
503915
503936
  authMethods: [],
503916
- agentInfo: { name: "UR-Nexus", version: "1.80.7" }
503937
+ agentInfo: { name: "UR-Nexus", version: "1.80.8" }
503917
503938
  });
503918
503939
  return;
503919
503940
  case "authenticate":
@@ -715139,7 +715160,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
715139
715160
  smapsRollup,
715140
715161
  platform: process.platform,
715141
715162
  nodeVersion: process.version,
715142
- ccVersion: "1.80.7"
715163
+ ccVersion: "1.80.8"
715143
715164
  };
715144
715165
  }
715145
715166
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -715728,7 +715749,7 @@ var init_bridge_kick = __esm(() => {
715728
715749
  var call154 = async () => {
715729
715750
  return {
715730
715751
  type: "text",
715731
- value: "1.80.7"
715752
+ value: "1.80.8"
715732
715753
  };
715733
715754
  }, version2, version_default;
715734
715755
  var init_version = __esm(() => {
@@ -726971,7 +726992,7 @@ function generateHtmlReport(data, insights) {
726971
726992
  </html>`;
726972
726993
  }
726973
726994
  function buildExportData(data, insights, facets, remoteStats) {
726974
- const version3 = typeof MACRO !== "undefined" ? "1.80.7" : "unknown";
726995
+ const version3 = typeof MACRO !== "undefined" ? "1.80.8" : "unknown";
726975
726996
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
726976
726997
  const facets_summary = {
726977
726998
  total: facets.size,
@@ -731284,7 +731305,7 @@ var init_sessionStorage = __esm(() => {
731284
731305
  init_settings2();
731285
731306
  init_slowOperations();
731286
731307
  init_uuid();
731287
- VERSION7 = typeof MACRO !== "undefined" ? "1.80.7" : "unknown";
731308
+ VERSION7 = typeof MACRO !== "undefined" ? "1.80.8" : "unknown";
731288
731309
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
731289
731310
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
731290
731311
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -732499,7 +732520,7 @@ var init_filesystem = __esm(() => {
732499
732520
  });
732500
732521
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
732501
732522
  const nonce = randomBytes24(16).toString("hex");
732502
- return join243(getURTempDir(), "bundled-skills", "1.80.7", nonce);
732523
+ return join243(getURTempDir(), "bundled-skills", "1.80.8", nonce);
732503
732524
  });
732504
732525
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
732505
732526
  });
@@ -738119,7 +738140,7 @@ function getOllamaToolDisciplineSection() {
738119
738140
  }
738120
738141
  function getAgentToolSection() {
738121
738142
  const launch = isForkSubagentEnabled() ? `Calling ${AGENT_TOOL_NAME} without a subagent_type creates a fork, which runs in the background and keeps its raw tool output out of your context. **If you ARE the fork**, execute your bounded assignment directly; do not re-delegate.` : `Use ${AGENT_TOOL_NAME} with the specialized agent whose description best matches each bounded assignment.`;
738122
- return `${launch} For a large request, first create a bounded task list, then delegate at most one ready independent branch per agent. The shipped read-only Explore and Plan agents may investigate before that list exists; every custom, write-capable, nested, team, or worktree delegation requires a ready parent task. Launch independent read-only research, audits, or exploration together. Shared-checkout writers, unknown scopes, dependencies, and overlapping file targets must run sequentially. Parallel writers require separate worktrees based on the exact clean starting revision; if the current required state is dirty or unsnapshotted, keep those writers serial in the shared checkout. Keep tiny dependent steps with the parent when delegation overhead is larger than the work. The parent owns task status, integration, and final verification: do not duplicate delegated work, do not mark a delegated task complete from a launch acknowledgement, and do not finish until the returned result and acceptance evidence have been checked.`;
738143
+ return `${launch} For a large request, first create a bounded task list, then delegate at most one ready independent branch per agent. Before that list exists, read-only research, audits, and exploration MUST use subagent_type="Explore" (or "Plan" for planning); never label a read-only worker general-purpose. Every custom, general-purpose, write-capable, nested, team, or worktree delegation requires a ready parent task. Launch independent read-only research, audits, or exploration together. Shared-checkout writers, unknown scopes, dependencies, and overlapping file targets must run sequentially. Parallel writers require separate worktrees based on the exact clean starting revision; if the current required state is dirty or unsnapshotted, keep those writers serial in the shared checkout. Keep tiny dependent steps with the parent when delegation overhead is larger than the work. The parent owns task status, integration, and final verification: do not duplicate delegated work, do not mark a delegated task complete from a launch acknowledgement, and do not finish until the returned result and acceptance evidence have been checked.`;
738123
738144
  }
738124
738145
  function getDiscoverSkillsGuidance() {
738125
738146
  if (false) {}
@@ -738889,7 +738910,7 @@ function computeFingerprint(messageText2, version3) {
738889
738910
  }
738890
738911
  function computeFingerprintFromMessages(messages) {
738891
738912
  const firstMessageText = extractFirstMessageText(messages);
738892
- return computeFingerprint(firstMessageText, "1.80.7");
738913
+ return computeFingerprint(firstMessageText, "1.80.8");
738893
738914
  }
738894
738915
  var FINGERPRINT_SALT = "59cf53e54c78";
738895
738916
  var init_fingerprint = () => {};
@@ -740814,7 +740835,7 @@ async function sideQuery(opts) {
740814
740835
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
740815
740836
  }
740816
740837
  const messageText2 = extractFirstUserMessageText(messages);
740817
- const fingerprint2 = computeFingerprint(messageText2, "1.80.7");
740838
+ const fingerprint2 = computeFingerprint(messageText2, "1.80.8");
740818
740839
  const attributionHeader = getAttributionHeader(fingerprint2);
740819
740840
  const systemBlocks = [
740820
740841
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -745648,7 +745669,7 @@ function buildSystemInitMessage(inputs) {
745648
745669
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
745649
745670
  apiKeySource: getURHQApiKeyWithSource().source,
745650
745671
  betas: getSdkBetas(),
745651
- ur_version: "1.80.7",
745672
+ ur_version: "1.80.8",
745652
745673
  output_style: outputStyle,
745653
745674
  agents: inputs.agents.map((agent2) => agent2.agentType),
745654
745675
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -759484,7 +759505,7 @@ var init_useVoiceEnabled = __esm(() => {
759484
759505
  function getSemverPart(version3) {
759485
759506
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
759486
759507
  }
759487
- function useUpdateNotification(updatedVersion, initialVersion = "1.80.7") {
759508
+ function useUpdateNotification(updatedVersion, initialVersion = "1.80.8") {
759488
759509
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
759489
759510
  if (!updatedVersion) {
759490
759511
  return null;
@@ -759533,7 +759554,7 @@ function AutoUpdater({
759533
759554
  return;
759534
759555
  }
759535
759556
  if (false) {}
759536
- const currentVersion = "1.80.7";
759557
+ const currentVersion = "1.80.8";
759537
759558
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
759538
759559
  let latestVersion = await getLatestVersion(channel);
759539
759560
  const isDisabled = isAutoUpdaterDisabled();
@@ -759762,12 +759783,12 @@ function NativeAutoUpdater({
759762
759783
  logEvent("tengu_native_auto_updater_start", {});
759763
759784
  try {
759764
759785
  const maxVersion = await getMaxVersion();
759765
- if (maxVersion && gt("1.80.7", maxVersion)) {
759786
+ if (maxVersion && gt("1.80.8", maxVersion)) {
759766
759787
  const msg = await getMaxVersionMessage();
759767
759788
  setMaxVersionIssue(msg ?? "affects your version");
759768
759789
  }
759769
759790
  const result = await installLatest(channel);
759770
- const currentVersion = "1.80.7";
759791
+ const currentVersion = "1.80.8";
759771
759792
  const latencyMs = Date.now() - startTime;
759772
759793
  if (result.lockFailed) {
759773
759794
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -759904,17 +759925,17 @@ function PackageManagerAutoUpdater(t0) {
759904
759925
  const maxVersion = await getMaxVersion();
759905
759926
  if (maxVersion && latest && gt(latest, maxVersion)) {
759906
759927
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
759907
- if (gte("1.80.7", maxVersion)) {
759908
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.7"} is already at or above maxVersion ${maxVersion}, skipping update`);
759928
+ if (gte("1.80.8", maxVersion)) {
759929
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
759909
759930
  setUpdateAvailable(false);
759910
759931
  return;
759911
759932
  }
759912
759933
  latest = maxVersion;
759913
759934
  }
759914
- const hasUpdate = latest && !gte("1.80.7", latest) && !shouldSkipVersion(latest);
759935
+ const hasUpdate = latest && !gte("1.80.8", latest) && !shouldSkipVersion(latest);
759915
759936
  setUpdateAvailable(!!hasUpdate);
759916
759937
  if (hasUpdate) {
759917
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.7"} -> ${latest}`);
759938
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.8"} -> ${latest}`);
759918
759939
  }
759919
759940
  };
759920
759941
  $2[0] = t1;
@@ -759948,7 +759969,7 @@ function PackageManagerAutoUpdater(t0) {
759948
759969
  wrap: "truncate",
759949
759970
  children: [
759950
759971
  "currentVersion: ",
759951
- "1.80.7"
759972
+ "1.80.8"
759952
759973
  ]
759953
759974
  }, undefined, true, undefined, this);
759954
759975
  $2[3] = verbose;
@@ -770801,7 +770822,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
770801
770822
  project_dir: getOriginalCwd(),
770802
770823
  added_dirs: addedDirs
770803
770824
  },
770804
- version: "1.80.7",
770825
+ version: "1.80.8",
770805
770826
  output_style: {
770806
770827
  name: outputStyleName
770807
770828
  },
@@ -770936,7 +770957,7 @@ function StatusLineInner({
770936
770957
  const attention = customStatusError ?? taskAttention;
770937
770958
  const terminalSize = React133.useContext(TerminalSizeContext);
770938
770959
  const defaultStatusLineText = buildDefaultStatusBar({
770939
- version: "1.80.7",
770960
+ version: "1.80.8",
770940
770961
  providerLabel: providerRuntime.providerLabel,
770941
770962
  authMode: providerRuntime.authLabel,
770942
770963
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -783191,7 +783212,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
783191
783212
  } catch {}
783192
783213
  const data = {
783193
783214
  trigger: trigger2,
783194
- version: "1.80.7",
783215
+ version: "1.80.8",
783195
783216
  platform: process.platform,
783196
783217
  transcript,
783197
783218
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -795560,7 +795581,7 @@ function WelcomeV2() {
795560
795581
  dimColor: true,
795561
795582
  children: [
795562
795583
  "v",
795563
- "1.80.7"
795584
+ "1.80.8"
795564
795585
  ]
795565
795586
  }, undefined, true, undefined, this)
795566
795587
  ]
@@ -796820,7 +796841,7 @@ function completeOnboarding() {
796820
796841
  saveGlobalConfig((current) => ({
796821
796842
  ...current,
796822
796843
  hasCompletedOnboarding: true,
796823
- lastOnboardingVersion: "1.80.7"
796844
+ lastOnboardingVersion: "1.80.8"
796824
796845
  }));
796825
796846
  }
796826
796847
  function showDialog(root2, renderer) {
@@ -801966,7 +801987,7 @@ function appendToLog(path28, message) {
801966
801987
  cwd: getFsImplementation().cwd(),
801967
801988
  userType: process.env.USER_TYPE,
801968
801989
  sessionId: getSessionId(),
801969
- version: "1.80.7"
801990
+ version: "1.80.8"
801970
801991
  };
801971
801992
  getLogWriter(path28).write(messageWithTimestamp);
801972
801993
  }
@@ -806130,8 +806151,8 @@ async function getEnvLessBridgeConfig() {
806130
806151
  }
806131
806152
  async function checkEnvLessBridgeMinVersion() {
806132
806153
  const cfg = await getEnvLessBridgeConfig();
806133
- if (cfg.min_version && lt("1.80.7", cfg.min_version)) {
806134
- return `Your version of UR (${"1.80.7"}) is too old for Remote Control.
806154
+ if (cfg.min_version && lt("1.80.8", cfg.min_version)) {
806155
+ return `Your version of UR (${"1.80.8"}) is too old for Remote Control.
806135
806156
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
806136
806157
  }
806137
806158
  return null;
@@ -806605,7 +806626,7 @@ async function initBridgeCore(params) {
806605
806626
  const rawApi = createBridgeApiClient({
806606
806627
  baseUrl,
806607
806628
  getAccessToken,
806608
- runnerVersion: "1.80.7",
806629
+ runnerVersion: "1.80.8",
806609
806630
  onDebug: logForDebugging,
806610
806631
  onAuth401,
806611
806632
  getTrustedDeviceToken
@@ -816078,7 +816099,7 @@ function getAgUiCapabilities() {
816078
816099
  name: "UR-Nexus",
816079
816100
  type: "ur-nexus",
816080
816101
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
816081
- version: "1.80.7",
816102
+ version: "1.80.8",
816082
816103
  provider: "UR",
816083
816104
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
816084
816105
  },
@@ -817305,7 +817326,7 @@ function createMCPServer(cwd4, debug2, verbose) {
817305
817326
  };
817306
817327
  const server2 = new Server({
817307
817328
  name: "ur-nexus",
817308
- version: "1.80.7"
817329
+ version: "1.80.8"
817309
817330
  }, {
817310
817331
  capabilities: {
817311
817332
  tools: {}
@@ -818509,7 +818530,7 @@ function thrownResponse(error40) {
818509
818530
  }
818510
818531
  async function createUrMcp2026Runtime(options5) {
818511
818532
  const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
818512
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.7" }, { capabilities: {} });
818533
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.8" }, { capabilities: {} });
818513
818534
  const [clientTransport, serverTransport] = createLinkedTransportPair();
818514
818535
  try {
818515
818536
  await server2.connect(serverTransport);
@@ -818520,7 +818541,7 @@ async function createUrMcp2026Runtime(options5) {
818520
818541
  }
818521
818542
  const runtime2 = new Mcp2026Runtime({
818522
818543
  cwd: options5.cwd,
818523
- version: "1.80.7",
818544
+ version: "1.80.8",
818524
818545
  backend: {
818525
818546
  listTools: async () => {
818526
818547
  const listed = await client2.listTools();
@@ -821255,7 +821276,7 @@ async function update() {
821255
821276
  logEvent("tengu_update_check", {});
821256
821277
  const diagnostic2 = await getDoctorDiagnostic();
821257
821278
  const result = await checkUpgradeStatus({
821258
- currentVersion: "1.80.7",
821279
+ currentVersion: "1.80.8",
821259
821280
  packageName: UR_AGENT_PACKAGE_NAME,
821260
821281
  installationType: diagnostic2.installationType,
821261
821282
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -822583,7 +822604,7 @@ ${customInstructions}` : customInstructions;
822583
822604
  }
822584
822605
  }
822585
822606
  logForDiagnosticsNoPII("info", "started", {
822586
- version: "1.80.7",
822607
+ version: "1.80.8",
822587
822608
  is_native_binary: isInBundledMode()
822588
822609
  });
822589
822610
  registerCleanup(async () => {
@@ -823370,7 +823391,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
823370
823391
  pendingHookMessages
823371
823392
  }, renderAndRun);
823372
823393
  }
823373
- }).version("1.80.7 (UR-Nexus)", "-v, --version", "Output the version number");
823394
+ }).version("1.80.8 (UR-Nexus)", "-v, --version", "Output the version number");
823374
823395
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
823375
823396
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
823376
823397
  if (canUserConfigureAdvisor()) {
@@ -824497,7 +824518,7 @@ if (false) {}
824497
824518
  async function main2() {
824498
824519
  const args = process.argv.slice(2);
824499
824520
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
824500
- console.log(`${"1.80.7"} (UR-Nexus)`);
824521
+ console.log(`${"1.80.8"} (UR-Nexus)`);
824501
824522
  return;
824502
824523
  }
824503
824524
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -9,6 +9,12 @@ reproducible autonomous software engineering agent: every substantial task can
9
9
  be driven as `spec -> plan -> patch -> test -> report -> rollback`, with the
10
10
  spec as the durable source of truth and command evidence as the success gate.
11
11
 
12
+ ## v1.80.8 Addition
13
+
14
+ | Addition | Surface | What it adds |
15
+ | --- | --- | --- |
16
+ | Provider-independent research routing | Shared Agent prompt and execution gate | Directs every model family to use the shipped `Explore` worker for task-free read-only research. If a model still labels an explicitly read-only research brief `general-purpose`, UR reduces it to protected Explore capabilities before task gating; write-capable and custom delegation remains gated. |
17
+
12
18
  ## v1.80.7 Additions
13
19
 
14
20
  | Addition | Surface | What it adds |
@@ -60,7 +60,10 @@ gated, because they could not satisfy the requirement. The main session may
60
60
  launch UR's shipped `Explore` and `Plan` agents before a task exists in any
61
61
  permission mode. These exact built-in definitions are forced read-only; custom,
62
62
  write-capable, nested, named/team, and worktree delegation still requires an
63
- actionable parent task.
63
+ actionable parent task. As provider-independent compatibility, an unnamed
64
+ main-session `general-purpose` call whose own prompt explicitly declares both
65
+ research intent and no file writes is reduced to the shipped Explore definition
66
+ before the gate. It never receives general-purpose tools through this path.
64
67
 
65
68
  ## Model Providers
66
69
 
@@ -102,6 +102,12 @@ ur provider status
102
102
  agents without a parent task: create the requested tasks or finish and
103
103
  approve the plan first. Disabling `tasks.requireBeforeChanges` is no longer
104
104
  needed for normal plan mode.
105
+ - If an API, local, or subscription-CLI model still returns this error for an
106
+ explicitly read-only research brief on 1.80.7, upgrade to 1.80.8. Some models
107
+ emitted `subagent_type: "general-purpose"` despite the read-only instruction.
108
+ UR 1.80.8 routes that narrow contract to the protected Explore worker before
109
+ the gate. A real general-purpose or implementation worker is still expected
110
+ to require a task.
105
111
 
106
112
  ### Ollama stops with `unavailable tool "WebSearch"`
107
113
 
package/docs/USAGE.md CHANGED
@@ -473,9 +473,12 @@ the exact plan file for the active session while the rest of the workspace
473
473
  remains read-only. In any permission mode, the main session may delegate early
474
474
  research to UR's shipped `Explore` and `Plan` agents before tasks exist. Those
475
475
  two definitions are mechanically forced into plan permission mode even when
476
- the parent is in Accept Edits or Approve All. Custom overrides, general-purpose
477
- agents, nested agents, team workers, and worktree agents still require an
478
- actionable parent task. When the user approves the plan,
476
+ the parent is in Accept Edits or Approve All. Models are instructed to select
477
+ `subagent_type="Explore"` for this work. If a provider still labels an explicit
478
+ read-only research brief `general-purpose`, UR reduces that main-session call
479
+ to the shipped Explore definition before gating. Ordinary general-purpose
480
+ work, custom overrides, nested agents, named/team workers, worktrees, and cwd
481
+ overrides still require an actionable parent task. When the user approves the plan,
479
482
  `ExitPlanMode` preserves any existing actionable board or creates a bounded set
480
483
  of professional, deduplicated implementation tasks plus a verification task
481
484
  that depends on them. Implementation therefore starts with visible tracking
@@ -19,17 +19,23 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.80.7 (UR-Nexus)"
22
+ # expected for this release: "1.80.8 (UR-Nexus)"
23
23
  ```
24
24
 
25
- ### 0.0 Read-only research delegation starts cleanly (1.80.7)
25
+ ### 0.0 Read-only research delegation starts cleanly (1.80.8)
26
26
 
27
27
  Start an interactive session with task enforcement enabled and ask UR to
28
28
  research a change, both normally and from Plan Mode. Before any task exists,
29
29
  built-in `Explore` and `Plan` agent calls should initialize without
30
30
  `TaskListRequired`. Their workers remain read-only even when the parent uses
31
- Accept Edits or Approve All. Custom or general-purpose agents should remain
32
- blocked until they have an actionable parent task. The deterministic
31
+ Accept Edits or Approve All. Custom agents and ordinary general-purpose agents
32
+ should remain blocked until they have an actionable parent task.
33
+
34
+ Repeat with multiple available model families. A model may correctly emit
35
+ `subagent_type: "Explore"`; if it instead emits `general-purpose` with an
36
+ explicit read-only research/no-file-write brief, UR must safely reduce it to
37
+ Explore and start without a failed `TaskListRequired` attempt. A
38
+ general-purpose implementation brief must remain blocked. The deterministic
33
39
  regressions are:
34
40
 
35
41
  ```sh
@@ -45,7 +45,7 @@
45
45
  <main id="content" class="content">
46
46
  <header class="topbar">
47
47
  <div>
48
- <p class="eyebrow">Version 1.80.7</p>
48
+ <p class="eyebrow">Version 1.80.8</p>
49
49
  <h1>UR-Nexus Documentation</h1>
50
50
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
51
51
  </div>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.80.7"
10
+ version = "1.80.8"
11
11
 
12
12
  repositories {
13
13
  mavenCentral()
@@ -2,7 +2,7 @@
2
2
  "name": "ur-inline-diffs",
3
3
  "displayName": "UR Inline Diffs",
4
4
  "description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
5
- "version": "1.80.7",
5
+ "version": "1.80.8",
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.80.7",
3
+ "version": "1.80.8",
4
4
  "description": "UR-Nexus — autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",