ur-agent 1.80.8 → 1.80.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.80.10
4
+
5
+ - Fixed the underlying cause of task-free research still returning
6
+ `TaskListRequired` in the published CLI: the public bundle compiled the
7
+ shipped `Explore` and `Plan` definitions out of the active agent registry.
8
+ Research classification was correct, but there was no protected worker to
9
+ receive the capability-reduced call.
10
+ - Made `Explore` and `Plan` deterministic core agents for public, local, API,
11
+ and subscription-CLI use, aligned the development and release feature sets,
12
+ and added tests against the real built-in registry plus the bundle script.
13
+ Anthropic-internal experimentation remains isolated to internal builds.
14
+ Write-capable delegation, task enforcement, and Approve All are unchanged.
15
+
16
+ ## 1.80.9
17
+
18
+ - Fixed the remaining provider-independent `TaskListRequired` failure for
19
+ research fan-out. Some models preserved the research/report-only brief but
20
+ dropped the caller's explicit “read-only” wording while still selecting
21
+ `general-purpose`. UR now recognizes that constrained shape and reduces it
22
+ to the mechanically read-only shipped `Explore` worker before task gating.
23
+ - Kept the boundary fail-closed for any prompt that directs implementation,
24
+ building, file changes, command execution, testing, installation, commits,
25
+ deployment, or other mutation. Custom definitions, nested workers,
26
+ names/teams, worktrees, and cwd overrides remain excluded. Approve All is
27
+ unchanged.
28
+
3
29
  ## 1.80.8
4
30
 
5
31
  - Fixed provider-independent failed-first research delegation. Several model
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.8"}`;
107791
+ return `ur/${"1.80.10"}`;
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.8"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107813
+ return `ur-cli/${"1.80.10"} (${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.8"}${suffix}`;
107827
+ return `ur/${"1.80.10"}${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.8",
107965
+ appVersion: "1.80.10",
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.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115852
+ const match = "1.80.10".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.8",
115892
+ version: "1.80.10",
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.8"
116562
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.10"
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.8");
116590
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.10");
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.8", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
126553
+ var urVersion = "1.80.10", 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.8"}.${fingerprint}`;
129443
+ const version2 = `${"1.80.10"}.${fingerprint}`;
129444
129444
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
129445
129445
  const cch = "";
129446
129446
  const workload = getWorkload();
@@ -174699,7 +174699,11 @@ Use the literal string \`VERDICT: \` followed by exactly one of \`PASS\`, \`FAIL
174699
174699
 
174700
174700
  // src/tools/AgentTool/builtInAgents.ts
174701
174701
  function areExplorePlanAgentsEnabled() {
174702
- if (false) {}
174702
+ if (process.env.USER_TYPE !== "ant")
174703
+ return true;
174704
+ if (true) {
174705
+ return getFeatureValue_CACHED_MAY_BE_STALE("tengu_amber_stoat", true);
174706
+ }
174703
174707
  return false;
174704
174708
  }
174705
174709
  function getBuiltInAgents() {
@@ -184636,7 +184640,7 @@ var init_projectSafety = __esm(() => {
184636
184640
  function getInstruments() {
184637
184641
  if (instruments)
184638
184642
  return instruments;
184639
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.8");
184643
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.10");
184640
184644
  instruments = {
184641
184645
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
184642
184646
  description: "GenAI operation duration.",
@@ -184734,7 +184738,7 @@ function genAiAgentAttributes() {
184734
184738
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
184735
184739
  "gen_ai.provider.name": "ur",
184736
184740
  "gen_ai.agent.name": "UR-Nexus",
184737
- "gen_ai.agent.version": "1.80.8"
184741
+ "gen_ai.agent.version": "1.80.10"
184738
184742
  };
184739
184743
  }
184740
184744
  function genAiWorkflowAttributes(workflowName, workflowRunId) {
@@ -184755,7 +184759,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
184755
184759
  function startGenAiWorkflowSpan(workflowName, workflowRunId) {
184756
184760
  const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
184757
184761
  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.8").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184762
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.10").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184759
184763
  }
184760
184764
  function endGenAiWorkflowSpan(span, options2 = {}) {
184761
184765
  try {
@@ -184793,7 +184797,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
184793
184797
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
184794
184798
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
184795
184799
  }
184796
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.8").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184800
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.10").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184797
184801
  }
184798
184802
  function endGenAiMemorySpan(span, options2 = {}) {
184799
184803
  try {
@@ -278508,7 +278512,7 @@ function getTelemetryAttributes() {
278508
278512
  attributes["session.id"] = sessionId;
278509
278513
  }
278510
278514
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
278511
- attributes["app.version"] = "1.80.8";
278515
+ attributes["app.version"] = "1.80.10";
278512
278516
  }
278513
278517
  const oauthAccount = getOauthAccountInfo();
278514
278518
  if (oauthAccount) {
@@ -319499,7 +319503,7 @@ function getInstallationEnv() {
319499
319503
  return;
319500
319504
  }
319501
319505
  function getURCodeVersion() {
319502
- return "1.80.8";
319506
+ return "1.80.10";
319503
319507
  }
319504
319508
  async function getInstalledVSCodeExtensionVersion(command) {
319505
319509
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -326869,7 +326873,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
326869
326873
  const client2 = new Client({
326870
326874
  name: "ur",
326871
326875
  title: "UR",
326872
- version: "1.80.8",
326876
+ version: "1.80.10",
326873
326877
  description: "UR-Nexus autonomous engineering workflow engine",
326874
326878
  websiteUrl: PRODUCT_URL
326875
326879
  }, {
@@ -327230,7 +327234,7 @@ var init_client5 = __esm(() => {
327230
327234
  const client2 = new Client({
327231
327235
  name: "ur",
327232
327236
  title: "UR",
327233
- version: "1.80.8",
327237
+ version: "1.80.10",
327234
327238
  description: "UR-Nexus autonomous engineering workflow engine",
327235
327239
  websiteUrl: PRODUCT_URL
327236
327240
  }, {
@@ -329251,7 +329255,7 @@ function isShippedReadOnlyAgentDefinition(agent) {
329251
329255
  return SHIPPED_READ_ONLY_AGENT_TYPES.has(agent.agentType) && agent.source === "built-in" && agent.permissionMode === "plan";
329252
329256
  }
329253
329257
  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)) {
329258
+ if (isNestedAgent || input.subagent_type !== "general-purpose" || input.name !== undefined || input.team_name !== undefined || input.isolation !== undefined || input.cwd !== undefined || typeof input.prompt !== "string" || !RESEARCH_INTENT_MARKER.test(input.prompt) || !READ_ONLY_RESEARCH_MARKER.test(input.prompt) && MUTATING_DELEGATION_MARKER.test(input.prompt)) {
329255
329259
  return input;
329256
329260
  }
329257
329261
  const exploreAgent = activeAgents.find((agent) => agent.agentType === "Explore" && isShippedReadOnlyAgentDefinition(agent));
@@ -329266,7 +329270,7 @@ function shouldApplyAgentDefinitionPermissionMode(agent, parentMode, transcriptC
329266
329270
  return true;
329267
329271
  return parentMode !== "bypassPermissions" && parentMode !== "acceptEdits" && !(transcriptClassifierEnabled && parentMode === "auto");
329268
329272
  }
329269
- var SHIPPED_READ_ONLY_AGENT_TYPES, READ_ONLY_RESEARCH_MARKER, RESEARCH_INTENT_MARKER;
329273
+ var SHIPPED_READ_ONLY_AGENT_TYPES, READ_ONLY_RESEARCH_MARKER, RESEARCH_INTENT_MARKER, MUTATING_ACTION = "(?:implement(?:s|ed|ing)?|build(?:s|ing)?|built|create(?:s|d|ing)?|modif(?:y|ies|ied|ying)|edit(?:s|ed|ing)?|writ(?:e|es|ten|ing)|fix(?:es|ed|ing)?|refactor(?:s|ed|ing)?|update(?:s|d|ing)?|delete(?:s|d|ing)?|remove(?:s|d|ing)?|add(?:s|ed|ing)?|install(?:s|ed|ing)?|execute(?:s|d|ing)?|run(?:s|ning)?|commit(?:s|ted|ting)?|push(?:es|ed|ing)?|deploy(?:s|ed|ing)?|generate(?:s|d|ing)?|scaffold(?:s|ed|ing)?|author(?:s|ed|ing)?|change(?:s|d|ing)?)", MUTATING_DELEGATION_MARKER;
329270
329274
  var init_readOnlyAgents = __esm(() => {
329271
329275
  SHIPPED_READ_ONLY_AGENT_TYPES = new Set([
329272
329276
  "Explore",
@@ -329274,6 +329278,11 @@ var init_readOnlyAgents = __esm(() => {
329274
329278
  ]);
329275
329279
  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
329280
  RESEARCH_INTENT_MARKER = /\b(?:research|investigat\w*|explor\w*|analy[sz]\w*|audit\w*)\b/i;
329281
+ MUTATING_DELEGATION_MARKER = new RegExp([
329282
+ `\\b(?:and|then|also)\\s+${MUTATING_ACTION}\\b`,
329283
+ `\\b(?:please|must|should|need(?:s)?\\s+to|you(?:'ll|\\s+will|\\s+must|\\s+should))\\s+${MUTATING_ACTION}\\b`,
329284
+ `(?:^|[\\n.;:!?]\\s*|[-*]\\s+)${MUTATING_ACTION}\\b`
329285
+ ].join("|"), "i");
329277
329286
  });
329278
329287
 
329279
329288
  // src/components/AgentProgressLine.tsx
@@ -339998,7 +340007,7 @@ async function createRuntime() {
339998
340007
  bootstrapTelemetry();
339999
340008
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
340000
340009
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
340001
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.8"
340010
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.10"
340002
340011
  }));
340003
340012
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
340004
340013
  resource,
@@ -340031,11 +340040,11 @@ async function createRuntime() {
340031
340040
  setMeterProvider(meterProvider);
340032
340041
  setLoggerProvider(loggerProvider);
340033
340042
  if (meterProvider) {
340034
- const meter = meterProvider.getMeter("ur-agent", "1.80.8");
340043
+ const meter = meterProvider.getMeter("ur-agent", "1.80.10");
340035
340044
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
340036
340045
  }
340037
340046
  if (loggerProvider) {
340038
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.8"));
340047
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.10"));
340039
340048
  }
340040
340049
  if (!cleanupRegistered3) {
340041
340050
  cleanupRegistered3 = true;
@@ -340697,9 +340706,9 @@ async function assertMinVersion() {
340697
340706
  if (false) {}
340698
340707
  try {
340699
340708
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
340700
- if (versionConfig.minVersion && lt("1.80.8", versionConfig.minVersion)) {
340709
+ if (versionConfig.minVersion && lt("1.80.10", versionConfig.minVersion)) {
340701
340710
  console.error(`
340702
- It looks like your version of UR (${"1.80.8"}) needs an update.
340711
+ It looks like your version of UR (${"1.80.10"}) needs an update.
340703
340712
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
340704
340713
 
340705
340714
  To update, please run:
@@ -340915,7 +340924,7 @@ async function installGlobalPackage(specificVersion) {
340915
340924
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
340916
340925
  logEvent("tengu_auto_updater_lock_contention", {
340917
340926
  pid: process.pid,
340918
- currentVersion: "1.80.8"
340927
+ currentVersion: "1.80.10"
340919
340928
  });
340920
340929
  return "in_progress";
340921
340930
  }
@@ -340924,7 +340933,7 @@ async function installGlobalPackage(specificVersion) {
340924
340933
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
340925
340934
  logError2(new Error("Windows NPM detected in WSL environment"));
340926
340935
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
340927
- currentVersion: "1.80.8"
340936
+ currentVersion: "1.80.10"
340928
340937
  });
340929
340938
  console.error(`
340930
340939
  Error: Windows NPM detected in WSL
@@ -341459,7 +341468,7 @@ function detectLinuxGlobPatternWarnings() {
341459
341468
  }
341460
341469
  async function getDoctorDiagnostic() {
341461
341470
  const installationType = await getCurrentInstallationType();
341462
- const version2 = typeof MACRO !== "undefined" ? "1.80.8" : "unknown";
341471
+ const version2 = typeof MACRO !== "undefined" ? "1.80.10" : "unknown";
341463
341472
  const installationPath = await getInstallationPath();
341464
341473
  const invokedBinary = getInvokedBinary();
341465
341474
  const multipleInstallations = await detectMultipleInstallations();
@@ -342394,8 +342403,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342394
342403
  const maxVersion = await getMaxVersion();
342395
342404
  if (maxVersion && gt(version2, maxVersion)) {
342396
342405
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
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`);
342406
+ if (gte("1.80.10", maxVersion)) {
342407
+ logForDebugging(`Native installer: current version ${"1.80.10"} is already at or above maxVersion ${maxVersion}, skipping update`);
342399
342408
  logEvent("tengu_native_update_skipped_max_version", {
342400
342409
  latency_ms: Date.now() - startTime,
342401
342410
  max_version: maxVersion,
@@ -342406,7 +342415,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342406
342415
  version2 = maxVersion;
342407
342416
  }
342408
342417
  }
342409
- if (!forceReinstall && version2 === "1.80.8" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
342418
+ if (!forceReinstall && version2 === "1.80.10" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
342410
342419
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
342411
342420
  logEvent("tengu_native_update_complete", {
342412
342421
  latency_ms: Date.now() - startTime,
@@ -413062,7 +413071,7 @@ function isAnyTracingEnabled() {
413062
413071
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
413063
413072
  }
413064
413073
  function getTracer() {
413065
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.8");
413074
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.10");
413066
413075
  }
413067
413076
  function createSpanAttributes(spanType, customAttributes = {}) {
413068
413077
  const baseAttributes = getTelemetryAttributes();
@@ -443191,7 +443200,7 @@ function Feedback({
443191
443200
  platform: env2.platform,
443192
443201
  gitRepo: envInfo.isGit,
443193
443202
  terminal: env2.terminal,
443194
- version: "1.80.8",
443203
+ version: "1.80.10",
443195
443204
  transcript: normalizeMessagesForAPI(messages),
443196
443205
  errors: sanitizedErrors,
443197
443206
  lastApiRequest: getLastAPIRequest(),
@@ -443383,7 +443392,7 @@ function Feedback({
443383
443392
  ", ",
443384
443393
  env2.terminal,
443385
443394
  ", v",
443386
- "1.80.8"
443395
+ "1.80.10"
443387
443396
  ]
443388
443397
  }, undefined, true, undefined, this)
443389
443398
  ]
@@ -443489,7 +443498,7 @@ ${sanitizedDescription}
443489
443498
  ` + `**Environment Info**
443490
443499
  ` + `- Platform: ${env2.platform}
443491
443500
  ` + `- Terminal: ${env2.terminal}
443492
- ` + `- Version: ${"1.80.8"}
443501
+ ` + `- Version: ${"1.80.10"}
443493
443502
  ` + `- Feedback ID: ${feedbackId}
443494
443503
  ` + `
443495
443504
  **Errors**
@@ -446599,7 +446608,7 @@ function buildPrimarySection() {
446599
446608
  }, undefined, false, undefined, this);
446600
446609
  return [{
446601
446610
  label: "Version",
446602
- value: "1.80.8"
446611
+ value: "1.80.10"
446603
446612
  }, {
446604
446613
  label: "Session name",
446605
446614
  value: nameValue
@@ -449981,7 +449990,7 @@ function Config({
449981
449990
  }
449982
449991
  }, undefined, false, undefined, this)
449983
449992
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
449984
- currentVersion: "1.80.8",
449993
+ currentVersion: "1.80.10",
449985
449994
  onChoice: (choice) => {
449986
449995
  setShowSubmenu(null);
449987
449996
  setTabsHidden(false);
@@ -449993,7 +450002,7 @@ function Config({
449993
450002
  autoUpdatesChannel: "stable"
449994
450003
  };
449995
450004
  if (choice === "stay") {
449996
- newSettings.minimumVersion = "1.80.8";
450005
+ newSettings.minimumVersion = "1.80.10";
449997
450006
  }
449998
450007
  updateSettingsForSource("userSettings", newSettings);
449999
450008
  setSettingsData((prev_27) => ({
@@ -458302,7 +458311,7 @@ function HelpV2(t0) {
458302
458311
  let t6;
458303
458312
  if ($2[31] !== tabs) {
458304
458313
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
458305
- title: `UR v${"1.80.8"}`,
458314
+ title: `UR v${"1.80.10"}`,
458306
458315
  color: "professionalBlue",
458307
458316
  defaultTab: "general",
458308
458317
  children: tabs
@@ -459235,7 +459244,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
459235
459244
  async function handleInitialize(options2) {
459236
459245
  return {
459237
459246
  name: "UR",
459238
- version: "1.80.8",
459247
+ version: "1.80.10",
459239
459248
  protocolVersion: "0.1.0",
459240
459249
  workspaceRoot: options2.cwd,
459241
459250
  capabilities: {
@@ -476343,7 +476352,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
476343
476352
  return [];
476344
476353
  }
476345
476354
  }
476346
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.8") {
476355
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.10") {
476347
476356
  if (process.env.USER_TYPE === "ant") {
476348
476357
  const changelog = "";
476349
476358
  if (changelog) {
@@ -476370,7 +476379,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.8")
476370
476379
  releaseNotes
476371
476380
  };
476372
476381
  }
476373
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.8") {
476382
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.10") {
476374
476383
  if (process.env.USER_TYPE === "ant") {
476375
476384
  const changelog = "";
476376
476385
  if (changelog) {
@@ -479275,7 +479284,7 @@ function getRecentActivitySync() {
479275
479284
  return cachedActivity;
479276
479285
  }
479277
479286
  function getLogoDisplayData() {
479278
- const version2 = process.env.DEMO_VERSION ?? "1.80.8";
479287
+ const version2 = process.env.DEMO_VERSION ?? "1.80.10";
479279
479288
  const serverUrl = getDirectConnectServerUrl();
479280
479289
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
479281
479290
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -480143,7 +480152,7 @@ function LogoV2() {
480143
480152
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
480144
480153
  t2 = () => {
480145
480154
  const currentConfig = getGlobalConfig();
480146
- if (currentConfig.lastReleaseNotesSeen === "1.80.8") {
480155
+ if (currentConfig.lastReleaseNotesSeen === "1.80.10") {
480147
480156
  return;
480148
480157
  }
480149
480158
  saveGlobalConfig(_temp325);
@@ -480828,12 +480837,12 @@ function LogoV2() {
480828
480837
  return t41;
480829
480838
  }
480830
480839
  function _temp325(current) {
480831
- if (current.lastReleaseNotesSeen === "1.80.8") {
480840
+ if (current.lastReleaseNotesSeen === "1.80.10") {
480832
480841
  return current;
480833
480842
  }
480834
480843
  return {
480835
480844
  ...current,
480836
- lastReleaseNotesSeen: "1.80.8"
480845
+ lastReleaseNotesSeen: "1.80.10"
480837
480846
  };
480838
480847
  }
480839
480848
  function _temp241(s_0) {
@@ -496925,7 +496934,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
496925
496934
  if (spec.name !== specName) {
496926
496935
  throw new Error("Agentic CI workflow spec name does not match");
496927
496936
  }
496928
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.8" : "1.80.8");
496937
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.10" : "1.80.10");
496929
496938
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
496930
496939
  throw new Error("invalid ur-agent package version");
496931
496940
  }
@@ -497918,7 +497927,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
497918
497927
  path: ".github/workflows/ur.yml",
497919
497928
  root: "project",
497920
497929
  content: compileAgenticCiWorkflow("default", {
497921
- packageVersion: typeof MACRO !== "undefined" ? "1.80.8" : "1.80.8"
497930
+ packageVersion: typeof MACRO !== "undefined" ? "1.80.10" : "1.80.10"
497922
497931
  })
497923
497932
  },
497924
497933
  {
@@ -497981,7 +497990,7 @@ function value(tokens, flag) {
497981
497990
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
497982
497991
  }
497983
497992
  function cliVersion() {
497984
- return typeof MACRO !== "undefined" ? "1.80.8" : "1.80.8";
497993
+ return typeof MACRO !== "undefined" ? "1.80.10" : "1.80.10";
497985
497994
  }
497986
497995
  function workflowPath(cwd2) {
497987
497996
  return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -503837,7 +503846,7 @@ function createAcpStdioApp(deps) {
503837
503846
  }
503838
503847
  },
503839
503848
  authMethods: [],
503840
- agentInfo: { name: "UR-Nexus", version: "1.80.8" }
503849
+ agentInfo: { name: "UR-Nexus", version: "1.80.10" }
503841
503850
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
503842
503851
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
503843
503852
  await runtime2.announce({
@@ -503934,7 +503943,7 @@ function createAcpStdioAgent(deps) {
503934
503943
  }
503935
503944
  },
503936
503945
  authMethods: [],
503937
- agentInfo: { name: "UR-Nexus", version: "1.80.8" }
503946
+ agentInfo: { name: "UR-Nexus", version: "1.80.10" }
503938
503947
  });
503939
503948
  return;
503940
503949
  case "authenticate":
@@ -715160,7 +715169,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
715160
715169
  smapsRollup,
715161
715170
  platform: process.platform,
715162
715171
  nodeVersion: process.version,
715163
- ccVersion: "1.80.8"
715172
+ ccVersion: "1.80.10"
715164
715173
  };
715165
715174
  }
715166
715175
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -715749,7 +715758,7 @@ var init_bridge_kick = __esm(() => {
715749
715758
  var call154 = async () => {
715750
715759
  return {
715751
715760
  type: "text",
715752
- value: "1.80.8"
715761
+ value: "1.80.10"
715753
715762
  };
715754
715763
  }, version2, version_default;
715755
715764
  var init_version = __esm(() => {
@@ -726992,7 +727001,7 @@ function generateHtmlReport(data, insights) {
726992
727001
  </html>`;
726993
727002
  }
726994
727003
  function buildExportData(data, insights, facets, remoteStats) {
726995
- const version3 = typeof MACRO !== "undefined" ? "1.80.8" : "unknown";
727004
+ const version3 = typeof MACRO !== "undefined" ? "1.80.10" : "unknown";
726996
727005
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
726997
727006
  const facets_summary = {
726998
727007
  total: facets.size,
@@ -731305,7 +731314,7 @@ var init_sessionStorage = __esm(() => {
731305
731314
  init_settings2();
731306
731315
  init_slowOperations();
731307
731316
  init_uuid();
731308
- VERSION7 = typeof MACRO !== "undefined" ? "1.80.8" : "unknown";
731317
+ VERSION7 = typeof MACRO !== "undefined" ? "1.80.10" : "unknown";
731309
731318
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
731310
731319
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
731311
731320
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -732520,7 +732529,7 @@ var init_filesystem = __esm(() => {
732520
732529
  });
732521
732530
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
732522
732531
  const nonce = randomBytes24(16).toString("hex");
732523
- return join243(getURTempDir(), "bundled-skills", "1.80.8", nonce);
732532
+ return join243(getURTempDir(), "bundled-skills", "1.80.10", nonce);
732524
732533
  });
732525
732534
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
732526
732535
  });
@@ -738910,7 +738919,7 @@ function computeFingerprint(messageText2, version3) {
738910
738919
  }
738911
738920
  function computeFingerprintFromMessages(messages) {
738912
738921
  const firstMessageText = extractFirstMessageText(messages);
738913
- return computeFingerprint(firstMessageText, "1.80.8");
738922
+ return computeFingerprint(firstMessageText, "1.80.10");
738914
738923
  }
738915
738924
  var FINGERPRINT_SALT = "59cf53e54c78";
738916
738925
  var init_fingerprint = () => {};
@@ -740835,7 +740844,7 @@ async function sideQuery(opts) {
740835
740844
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
740836
740845
  }
740837
740846
  const messageText2 = extractFirstUserMessageText(messages);
740838
- const fingerprint2 = computeFingerprint(messageText2, "1.80.8");
740847
+ const fingerprint2 = computeFingerprint(messageText2, "1.80.10");
740839
740848
  const attributionHeader = getAttributionHeader(fingerprint2);
740840
740849
  const systemBlocks = [
740841
740850
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -745669,7 +745678,7 @@ function buildSystemInitMessage(inputs) {
745669
745678
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
745670
745679
  apiKeySource: getURHQApiKeyWithSource().source,
745671
745680
  betas: getSdkBetas(),
745672
- ur_version: "1.80.8",
745681
+ ur_version: "1.80.10",
745673
745682
  output_style: outputStyle,
745674
745683
  agents: inputs.agents.map((agent2) => agent2.agentType),
745675
745684
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -759505,7 +759514,7 @@ var init_useVoiceEnabled = __esm(() => {
759505
759514
  function getSemverPart(version3) {
759506
759515
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
759507
759516
  }
759508
- function useUpdateNotification(updatedVersion, initialVersion = "1.80.8") {
759517
+ function useUpdateNotification(updatedVersion, initialVersion = "1.80.10") {
759509
759518
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
759510
759519
  if (!updatedVersion) {
759511
759520
  return null;
@@ -759554,7 +759563,7 @@ function AutoUpdater({
759554
759563
  return;
759555
759564
  }
759556
759565
  if (false) {}
759557
- const currentVersion = "1.80.8";
759566
+ const currentVersion = "1.80.10";
759558
759567
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
759559
759568
  let latestVersion = await getLatestVersion(channel);
759560
759569
  const isDisabled = isAutoUpdaterDisabled();
@@ -759783,12 +759792,12 @@ function NativeAutoUpdater({
759783
759792
  logEvent("tengu_native_auto_updater_start", {});
759784
759793
  try {
759785
759794
  const maxVersion = await getMaxVersion();
759786
- if (maxVersion && gt("1.80.8", maxVersion)) {
759795
+ if (maxVersion && gt("1.80.10", maxVersion)) {
759787
759796
  const msg = await getMaxVersionMessage();
759788
759797
  setMaxVersionIssue(msg ?? "affects your version");
759789
759798
  }
759790
759799
  const result = await installLatest(channel);
759791
- const currentVersion = "1.80.8";
759800
+ const currentVersion = "1.80.10";
759792
759801
  const latencyMs = Date.now() - startTime;
759793
759802
  if (result.lockFailed) {
759794
759803
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -759925,17 +759934,17 @@ function PackageManagerAutoUpdater(t0) {
759925
759934
  const maxVersion = await getMaxVersion();
759926
759935
  if (maxVersion && latest && gt(latest, maxVersion)) {
759927
759936
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
759928
- if (gte("1.80.8", maxVersion)) {
759929
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
759937
+ if (gte("1.80.10", maxVersion)) {
759938
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.10"} is already at or above maxVersion ${maxVersion}, skipping update`);
759930
759939
  setUpdateAvailable(false);
759931
759940
  return;
759932
759941
  }
759933
759942
  latest = maxVersion;
759934
759943
  }
759935
- const hasUpdate = latest && !gte("1.80.8", latest) && !shouldSkipVersion(latest);
759944
+ const hasUpdate = latest && !gte("1.80.10", latest) && !shouldSkipVersion(latest);
759936
759945
  setUpdateAvailable(!!hasUpdate);
759937
759946
  if (hasUpdate) {
759938
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.8"} -> ${latest}`);
759947
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.10"} -> ${latest}`);
759939
759948
  }
759940
759949
  };
759941
759950
  $2[0] = t1;
@@ -759969,7 +759978,7 @@ function PackageManagerAutoUpdater(t0) {
759969
759978
  wrap: "truncate",
759970
759979
  children: [
759971
759980
  "currentVersion: ",
759972
- "1.80.8"
759981
+ "1.80.10"
759973
759982
  ]
759974
759983
  }, undefined, true, undefined, this);
759975
759984
  $2[3] = verbose;
@@ -770822,7 +770831,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
770822
770831
  project_dir: getOriginalCwd(),
770823
770832
  added_dirs: addedDirs
770824
770833
  },
770825
- version: "1.80.8",
770834
+ version: "1.80.10",
770826
770835
  output_style: {
770827
770836
  name: outputStyleName
770828
770837
  },
@@ -770957,7 +770966,7 @@ function StatusLineInner({
770957
770966
  const attention = customStatusError ?? taskAttention;
770958
770967
  const terminalSize = React133.useContext(TerminalSizeContext);
770959
770968
  const defaultStatusLineText = buildDefaultStatusBar({
770960
- version: "1.80.8",
770969
+ version: "1.80.10",
770961
770970
  providerLabel: providerRuntime.providerLabel,
770962
770971
  authMode: providerRuntime.authLabel,
770963
770972
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -783212,7 +783221,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
783212
783221
  } catch {}
783213
783222
  const data = {
783214
783223
  trigger: trigger2,
783215
- version: "1.80.8",
783224
+ version: "1.80.10",
783216
783225
  platform: process.platform,
783217
783226
  transcript,
783218
783227
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -795581,7 +795590,7 @@ function WelcomeV2() {
795581
795590
  dimColor: true,
795582
795591
  children: [
795583
795592
  "v",
795584
- "1.80.8"
795593
+ "1.80.10"
795585
795594
  ]
795586
795595
  }, undefined, true, undefined, this)
795587
795596
  ]
@@ -796841,7 +796850,7 @@ function completeOnboarding() {
796841
796850
  saveGlobalConfig((current) => ({
796842
796851
  ...current,
796843
796852
  hasCompletedOnboarding: true,
796844
- lastOnboardingVersion: "1.80.8"
796853
+ lastOnboardingVersion: "1.80.10"
796845
796854
  }));
796846
796855
  }
796847
796856
  function showDialog(root2, renderer) {
@@ -801987,7 +801996,7 @@ function appendToLog(path28, message) {
801987
801996
  cwd: getFsImplementation().cwd(),
801988
801997
  userType: process.env.USER_TYPE,
801989
801998
  sessionId: getSessionId(),
801990
- version: "1.80.8"
801999
+ version: "1.80.10"
801991
802000
  };
801992
802001
  getLogWriter(path28).write(messageWithTimestamp);
801993
802002
  }
@@ -806151,8 +806160,8 @@ async function getEnvLessBridgeConfig() {
806151
806160
  }
806152
806161
  async function checkEnvLessBridgeMinVersion() {
806153
806162
  const cfg = await getEnvLessBridgeConfig();
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.
806163
+ if (cfg.min_version && lt("1.80.10", cfg.min_version)) {
806164
+ return `Your version of UR (${"1.80.10"}) is too old for Remote Control.
806156
806165
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
806157
806166
  }
806158
806167
  return null;
@@ -806626,7 +806635,7 @@ async function initBridgeCore(params) {
806626
806635
  const rawApi = createBridgeApiClient({
806627
806636
  baseUrl,
806628
806637
  getAccessToken,
806629
- runnerVersion: "1.80.8",
806638
+ runnerVersion: "1.80.10",
806630
806639
  onDebug: logForDebugging,
806631
806640
  onAuth401,
806632
806641
  getTrustedDeviceToken
@@ -816099,7 +816108,7 @@ function getAgUiCapabilities() {
816099
816108
  name: "UR-Nexus",
816100
816109
  type: "ur-nexus",
816101
816110
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
816102
- version: "1.80.8",
816111
+ version: "1.80.10",
816103
816112
  provider: "UR",
816104
816113
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
816105
816114
  },
@@ -817326,7 +817335,7 @@ function createMCPServer(cwd4, debug2, verbose) {
817326
817335
  };
817327
817336
  const server2 = new Server({
817328
817337
  name: "ur-nexus",
817329
- version: "1.80.8"
817338
+ version: "1.80.10"
817330
817339
  }, {
817331
817340
  capabilities: {
817332
817341
  tools: {}
@@ -818530,7 +818539,7 @@ function thrownResponse(error40) {
818530
818539
  }
818531
818540
  async function createUrMcp2026Runtime(options5) {
818532
818541
  const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
818533
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.8" }, { capabilities: {} });
818542
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.10" }, { capabilities: {} });
818534
818543
  const [clientTransport, serverTransport] = createLinkedTransportPair();
818535
818544
  try {
818536
818545
  await server2.connect(serverTransport);
@@ -818541,7 +818550,7 @@ async function createUrMcp2026Runtime(options5) {
818541
818550
  }
818542
818551
  const runtime2 = new Mcp2026Runtime({
818543
818552
  cwd: options5.cwd,
818544
- version: "1.80.8",
818553
+ version: "1.80.10",
818545
818554
  backend: {
818546
818555
  listTools: async () => {
818547
818556
  const listed = await client2.listTools();
@@ -821276,7 +821285,7 @@ async function update() {
821276
821285
  logEvent("tengu_update_check", {});
821277
821286
  const diagnostic2 = await getDoctorDiagnostic();
821278
821287
  const result = await checkUpgradeStatus({
821279
- currentVersion: "1.80.8",
821288
+ currentVersion: "1.80.10",
821280
821289
  packageName: UR_AGENT_PACKAGE_NAME,
821281
821290
  installationType: diagnostic2.installationType,
821282
821291
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -822604,7 +822613,7 @@ ${customInstructions}` : customInstructions;
822604
822613
  }
822605
822614
  }
822606
822615
  logForDiagnosticsNoPII("info", "started", {
822607
- version: "1.80.8",
822616
+ version: "1.80.10",
822608
822617
  is_native_binary: isInBundledMode()
822609
822618
  });
822610
822619
  registerCleanup(async () => {
@@ -823391,7 +823400,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
823391
823400
  pendingHookMessages
823392
823401
  }, renderAndRun);
823393
823402
  }
823394
- }).version("1.80.8 (UR-Nexus)", "-v, --version", "Output the version number");
823403
+ }).version("1.80.10 (UR-Nexus)", "-v, --version", "Output the version number");
823395
823404
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
823396
823405
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
823397
823406
  if (canUserConfigureAdvisor()) {
@@ -824518,7 +824527,7 @@ if (false) {}
824518
824527
  async function main2() {
824519
824528
  const args = process.argv.slice(2);
824520
824529
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
824521
- console.log(`${"1.80.8"} (UR-Nexus)`);
824530
+ console.log(`${"1.80.10"} (UR-Nexus)`);
824522
824531
  return;
824523
824532
  }
824524
824533
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -9,6 +9,18 @@ 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.10 Addition
13
+
14
+ | Addition | Surface | What it adds |
15
+ | --- | --- | --- |
16
+ | Deterministic read-only agent registry | Public bundle, development runtime, `Agent` gate | Ships the protected `Explore` and `Plan` definitions in every public runtime so task-free research always has a real read-only destination. Tests now exercise the real registry and verify the release feature flag. |
17
+
18
+ ## v1.80.9 Addition
19
+
20
+ | Addition | Surface | What it adds |
21
+ | --- | --- | --- |
22
+ | Research-only intent recovery | Shared Agent execution gate | Handles providers that retain a pure research/report brief but omit the caller's “read-only” wording. The call is reduced to shipped Explore capabilities; any implementation or mutation directive remains task-gated. |
23
+
12
24
  ## v1.80.8 Addition
13
25
 
14
26
  | Addition | Surface | What it adds |
@@ -58,12 +58,15 @@ it to `0` to require a task before every mutation. Set `enabled` to `false` to
58
58
  return to advisory task tracking. Profiles that omit `TaskCreate` are not
59
59
  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
- permission mode. These exact built-in definitions are forced read-only; custom,
61
+ permission mode. These core definitions are always registered in public builds
62
+ and are forced read-only; custom,
62
63
  write-capable, nested, named/team, and worktree delegation still requires an
63
64
  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.
65
+ main-session `general-purpose` call is reduced to the shipped Explore definition
66
+ when its brief is explicitly read-only research or is unambiguously limited to
67
+ research and reporting. Any implementation, test, command-execution,
68
+ installation, or workspace-mutation directive keeps the call gated. It never
69
+ receives general-purpose tools through this path.
67
70
 
68
71
  ## Model Providers
69
72
 
@@ -108,6 +108,15 @@ ur provider status
108
108
  UR 1.80.8 routes that narrow contract to the protected Explore worker before
109
109
  the gate. A real general-purpose or implementation worker is still expected
110
110
  to require a task.
111
+ - If the model preserved only the research/report instructions and omitted the
112
+ words “read-only,” upgrade to 1.80.9. UR recognizes that remaining provider
113
+ shape without relying on a specific model name. Prompts that also direct
114
+ implementation, testing, command execution, or file changes remain blocked
115
+ until an actionable task exists.
116
+ - If the same failure persists on 1.80.9, upgrade to 1.80.10. The 1.80.9 public
117
+ bundle could still compile the protected `Explore` and `Plan` registry entries
118
+ out, leaving the correct routing decision with no read-only destination.
119
+ Version 1.80.10 makes both core agents deterministic in public builds.
111
120
 
112
121
  ### Ollama stops with `unavailable tool "WebSearch"`
113
122
 
package/docs/USAGE.md CHANGED
@@ -475,10 +475,12 @@ 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
476
  the parent is in Accept Edits or Approve All. Models are instructed to select
477
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,
478
+ read-only brief—or an unambiguous research-and-report-only brief—
479
+ `general-purpose`, UR reduces that main-session call to the shipped Explore
480
+ definition before gating. A brief that also directs implementation, testing,
481
+ command execution, or workspace changes remains task-gated. Ordinary
482
+ general-purpose work, custom overrides, nested agents, named/team workers,
483
+ worktrees, and cwd overrides still require an actionable parent task. When the user approves the plan,
482
484
  `ExitPlanMode` preserves any existing actionable board or creates a bounded set
483
485
  of professional, deduplicated implementation tasks plus a verification task
484
486
  that depends on them. Implementation therefore starts with visible tracking
@@ -19,10 +19,10 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.80.8 (UR-Nexus)"
22
+ # expected for this release: "1.80.10 (UR-Nexus)"
23
23
  ```
24
24
 
25
- ### 0.0 Read-only research delegation starts cleanly (1.80.8)
25
+ ### 0.0 Read-only research delegation starts cleanly (1.80.10)
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,
@@ -31,12 +31,17 @@ built-in `Explore` and `Plan` agent calls should initialize without
31
31
  Accept Edits or Approve All. Custom agents and ordinary general-purpose agents
32
32
  should remain blocked until they have an actionable parent task.
33
33
 
34
+ The installed public bundle must list both core definitions in its active
35
+ built-in registry; a correct research classifier without those definitions is
36
+ not a passing state. Development and release builds must both enable
37
+ `BUILTIN_EXPLORE_PLAN_AGENTS`.
38
+
34
39
  Repeat with multiple available model families. A model may correctly emit
35
40
  `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
39
- regressions are:
41
+ explicit read-only brief or a pure research/report-only brief, UR must safely
42
+ reduce it to Explore and start without a failed `TaskListRequired` attempt. A
43
+ brief that also requests implementation, tests, command execution, or file
44
+ changes must remain blocked. The deterministic regressions are:
40
45
 
41
46
  ```sh
42
47
  bun test test/taskListGate.test.ts test/toolExecutionFinalInput.test.ts
@@ -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.8</p>
48
+ <p class="eyebrow">Version 1.80.10</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.8"
10
+ version = "1.80.10"
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.8",
5
+ "version": "1.80.10",
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.8",
3
+ "version": "1.80.10",
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",
@@ -15,6 +15,9 @@ import { plugin } from 'bun'
15
15
 
16
16
  const enabledFlags = new Set([
17
17
  'TREE_SITTER_BASH',
18
+ // Explore/Plan are a supported public capability and the safe target for
19
+ // task-free read-only delegation. Keep development aligned with bundles.
20
+ 'BUILTIN_EXPLORE_PLAN_AGENTS',
18
21
  ...(process.env.FEATURE_FLAGS ?? '').split(',').filter(Boolean),
19
22
  ])
20
23