ur-agent 1.80.5 → 1.80.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.80.6
4
+
5
+ - Fixed Plan Mode's failed-first research delegation. UR's shipped read-only
6
+ `Explore` and `Plan` agents can now run before implementation tasks exist, as
7
+ the plan workflow already instructs, without emitting `TaskListRequired`.
8
+ - Kept the exception deliberately narrow: the active definition must be the
9
+ built-in plan-permission agent, called by the main session without a name,
10
+ team, worktree, or nested parent. Custom overrides and every write-capable
11
+ delegation still require an actionable task, and rewritten tool inputs are
12
+ revalidated immediately before execution. Approve All remains unchanged.
13
+
3
14
  ## 1.80.5
4
15
 
5
16
  - Fixed the plan-mode/task-tracking deadlock introduced by the strict task
package/dist/cli.js CHANGED
@@ -107784,7 +107784,7 @@ var init_auth = __esm(() => {
107784
107784
 
107785
107785
  // src/utils/userAgent.ts
107786
107786
  function getURCodeUserAgent() {
107787
- return `ur/${"1.80.5"}`;
107787
+ return `ur/${"1.80.6"}`;
107788
107788
  }
107789
107789
 
107790
107790
  // src/utils/workloadContext.ts
@@ -107806,7 +107806,7 @@ function getUserAgent() {
107806
107806
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
107807
107807
  const workload = getWorkload();
107808
107808
  const workloadSuffix = workload ? `, workload/${workload}` : "";
107809
- return `ur-cli/${"1.80.5"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107809
+ return `ur-cli/${"1.80.6"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107810
107810
  }
107811
107811
  function getMCPUserAgent() {
107812
107812
  const parts = [];
@@ -107820,7 +107820,7 @@ function getMCPUserAgent() {
107820
107820
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
107821
107821
  }
107822
107822
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
107823
- return `ur/${"1.80.5"}${suffix}`;
107823
+ return `ur/${"1.80.6"}${suffix}`;
107824
107824
  }
107825
107825
  function getWebFetchUserAgent() {
107826
107826
  return `UR-User (${getURCodeUserAgent()})`;
@@ -107958,7 +107958,7 @@ var init_user = __esm(() => {
107958
107958
  deviceId,
107959
107959
  sessionId: getSessionId(),
107960
107960
  email: getEmail(),
107961
- appVersion: "1.80.5",
107961
+ appVersion: "1.80.6",
107962
107962
  platform: getHostPlatformForAnalytics(),
107963
107963
  organizationUuid,
107964
107964
  accountUuid,
@@ -115845,7 +115845,7 @@ var init_metadata = __esm(() => {
115845
115845
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
115846
115846
  WHITESPACE_REGEX = /\s+/;
115847
115847
  getVersionBase = memoize_default(() => {
115848
- const match = "1.80.5".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115848
+ const match = "1.80.6".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115849
115849
  return match ? match[0] : undefined;
115850
115850
  });
115851
115851
  buildEnvContext = memoize_default(async () => {
@@ -115885,7 +115885,7 @@ var init_metadata = __esm(() => {
115885
115885
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
115886
115886
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
115887
115887
  isURAiAuth: isURAISubscriber(),
115888
- version: "1.80.5",
115888
+ version: "1.80.6",
115889
115889
  versionBase: getVersionBase(),
115890
115890
  buildTime: "",
115891
115891
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -116555,7 +116555,7 @@ function initialize1PEventLogging() {
116555
116555
  const platform2 = getPlatform();
116556
116556
  const attributes = {
116557
116557
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
116558
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.5"
116558
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.6"
116559
116559
  };
116560
116560
  if (platform2 === "wsl") {
116561
116561
  const wslVersion = getWslVersion();
@@ -116583,7 +116583,7 @@ function initialize1PEventLogging() {
116583
116583
  })
116584
116584
  ]
116585
116585
  });
116586
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.5");
116586
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.6");
116587
116587
  }
116588
116588
  async function reinitialize1PEventLoggingIfConfigChanged() {
116589
116589
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -126546,7 +126546,7 @@ function formatA2AAgentCard(options = {}, pretty = true) {
126546
126546
  function formatA2AV1AgentCard(options = {}, pretty = true) {
126547
126547
  return JSON.stringify(buildA2AV1AgentCard(options), null, pretty ? 2 : 0);
126548
126548
  }
126549
- var urVersion = "1.80.5", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
126549
+ var urVersion = "1.80.6", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
126550
126550
  var init_trends = __esm(() => {
126551
126551
  init_a2aCardSignature();
126552
126552
  coverage = [
@@ -129436,7 +129436,7 @@ function getAttributionHeader(fingerprint) {
129436
129436
  if (!isAttributionHeaderEnabled()) {
129437
129437
  return "";
129438
129438
  }
129439
- const version2 = `${"1.80.5"}.${fingerprint}`;
129439
+ const version2 = `${"1.80.6"}.${fingerprint}`;
129440
129440
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
129441
129441
  const cch = "";
129442
129442
  const workload = getWorkload();
@@ -174285,6 +174285,7 @@ var init_exploreAgent = __esm(() => {
174285
174285
  ],
174286
174286
  source: "built-in",
174287
174287
  baseDir: "built-in",
174288
+ permissionMode: "plan",
174288
174289
  model: process.env.USER_TYPE === "ant" ? "inherit" : "modelH",
174289
174290
  omitAgentMd: true,
174290
174291
  getSystemPrompt: () => getExploreSystemPrompt()
@@ -174395,6 +174396,7 @@ var init_planAgent = __esm(() => {
174395
174396
  source: "built-in",
174396
174397
  tools: EXPLORE_AGENT.tools,
174397
174398
  baseDir: "built-in",
174399
+ permissionMode: "plan",
174398
174400
  model: "inherit",
174399
174401
  omitAgentMd: true,
174400
174402
  getSystemPrompt: () => getPlanV2SystemPrompt()
@@ -184630,7 +184632,7 @@ var init_projectSafety = __esm(() => {
184630
184632
  function getInstruments() {
184631
184633
  if (instruments)
184632
184634
  return instruments;
184633
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.5");
184635
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.6");
184634
184636
  instruments = {
184635
184637
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
184636
184638
  description: "GenAI operation duration.",
@@ -184728,7 +184730,7 @@ function genAiAgentAttributes() {
184728
184730
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
184729
184731
  "gen_ai.provider.name": "ur",
184730
184732
  "gen_ai.agent.name": "UR-Nexus",
184731
- "gen_ai.agent.version": "1.80.5"
184733
+ "gen_ai.agent.version": "1.80.6"
184732
184734
  };
184733
184735
  }
184734
184736
  function genAiWorkflowAttributes(workflowName, workflowRunId) {
@@ -184749,7 +184751,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
184749
184751
  function startGenAiWorkflowSpan(workflowName, workflowRunId) {
184750
184752
  const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
184751
184753
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
184752
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.5").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184754
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.6").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184753
184755
  }
184754
184756
  function endGenAiWorkflowSpan(span, options2 = {}) {
184755
184757
  try {
@@ -184787,7 +184789,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
184787
184789
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
184788
184790
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
184789
184791
  }
184790
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.5").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184792
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.6").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184791
184793
  }
184792
184794
  function endGenAiMemorySpan(span, options2 = {}) {
184793
184795
  try {
@@ -278502,7 +278504,7 @@ function getTelemetryAttributes() {
278502
278504
  attributes["session.id"] = sessionId;
278503
278505
  }
278504
278506
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
278505
- attributes["app.version"] = "1.80.5";
278507
+ attributes["app.version"] = "1.80.6";
278506
278508
  }
278507
278509
  const oauthAccount = getOauthAccountInfo();
278508
278510
  if (oauthAccount) {
@@ -319493,7 +319495,7 @@ function getInstallationEnv() {
319493
319495
  return;
319494
319496
  }
319495
319497
  function getURCodeVersion() {
319496
- return "1.80.5";
319498
+ return "1.80.6";
319497
319499
  }
319498
319500
  async function getInstalledVSCodeExtensionVersion(command) {
319499
319501
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -326863,7 +326865,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
326863
326865
  const client2 = new Client({
326864
326866
  name: "ur",
326865
326867
  title: "UR",
326866
- version: "1.80.5",
326868
+ version: "1.80.6",
326867
326869
  description: "UR-Nexus autonomous engineering workflow engine",
326868
326870
  websiteUrl: PRODUCT_URL
326869
326871
  }, {
@@ -327224,7 +327226,7 @@ var init_client5 = __esm(() => {
327224
327226
  const client2 = new Client({
327225
327227
  name: "ur",
327226
327228
  title: "UR",
327227
- version: "1.80.5",
327229
+ version: "1.80.6",
327228
327230
  description: "UR-Nexus autonomous engineering workflow engine",
327229
327231
  websiteUrl: PRODUCT_URL
327230
327232
  }, {
@@ -339962,7 +339964,7 @@ async function createRuntime() {
339962
339964
  bootstrapTelemetry();
339963
339965
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
339964
339966
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
339965
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.5"
339967
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.6"
339966
339968
  }));
339967
339969
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
339968
339970
  resource,
@@ -339995,11 +339997,11 @@ async function createRuntime() {
339995
339997
  setMeterProvider(meterProvider);
339996
339998
  setLoggerProvider(loggerProvider);
339997
339999
  if (meterProvider) {
339998
- const meter = meterProvider.getMeter("ur-agent", "1.80.5");
340000
+ const meter = meterProvider.getMeter("ur-agent", "1.80.6");
339999
340001
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
340000
340002
  }
340001
340003
  if (loggerProvider) {
340002
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.5"));
340004
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.6"));
340003
340005
  }
340004
340006
  if (!cleanupRegistered3) {
340005
340007
  cleanupRegistered3 = true;
@@ -340661,9 +340663,9 @@ async function assertMinVersion() {
340661
340663
  if (false) {}
340662
340664
  try {
340663
340665
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
340664
- if (versionConfig.minVersion && lt("1.80.5", versionConfig.minVersion)) {
340666
+ if (versionConfig.minVersion && lt("1.80.6", versionConfig.minVersion)) {
340665
340667
  console.error(`
340666
- It looks like your version of UR (${"1.80.5"}) needs an update.
340668
+ It looks like your version of UR (${"1.80.6"}) needs an update.
340667
340669
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
340668
340670
 
340669
340671
  To update, please run:
@@ -340879,7 +340881,7 @@ async function installGlobalPackage(specificVersion) {
340879
340881
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
340880
340882
  logEvent("tengu_auto_updater_lock_contention", {
340881
340883
  pid: process.pid,
340882
- currentVersion: "1.80.5"
340884
+ currentVersion: "1.80.6"
340883
340885
  });
340884
340886
  return "in_progress";
340885
340887
  }
@@ -340888,7 +340890,7 @@ async function installGlobalPackage(specificVersion) {
340888
340890
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
340889
340891
  logError2(new Error("Windows NPM detected in WSL environment"));
340890
340892
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
340891
- currentVersion: "1.80.5"
340893
+ currentVersion: "1.80.6"
340892
340894
  });
340893
340895
  console.error(`
340894
340896
  Error: Windows NPM detected in WSL
@@ -341423,7 +341425,7 @@ function detectLinuxGlobPatternWarnings() {
341423
341425
  }
341424
341426
  async function getDoctorDiagnostic() {
341425
341427
  const installationType = await getCurrentInstallationType();
341426
- const version2 = typeof MACRO !== "undefined" ? "1.80.5" : "unknown";
341428
+ const version2 = typeof MACRO !== "undefined" ? "1.80.6" : "unknown";
341427
341429
  const installationPath = await getInstallationPath();
341428
341430
  const invokedBinary = getInvokedBinary();
341429
341431
  const multipleInstallations = await detectMultipleInstallations();
@@ -342358,8 +342360,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342358
342360
  const maxVersion = await getMaxVersion();
342359
342361
  if (maxVersion && gt(version2, maxVersion)) {
342360
342362
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
342361
- if (gte("1.80.5", maxVersion)) {
342362
- logForDebugging(`Native installer: current version ${"1.80.5"} is already at or above maxVersion ${maxVersion}, skipping update`);
342363
+ if (gte("1.80.6", maxVersion)) {
342364
+ logForDebugging(`Native installer: current version ${"1.80.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
342363
342365
  logEvent("tengu_native_update_skipped_max_version", {
342364
342366
  latency_ms: Date.now() - startTime,
342365
342367
  max_version: maxVersion,
@@ -342370,7 +342372,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342370
342372
  version2 = maxVersion;
342371
342373
  }
342372
342374
  }
342373
- if (!forceReinstall && version2 === "1.80.5" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
342375
+ if (!forceReinstall && version2 === "1.80.6" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
342374
342376
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
342375
342377
  logEvent("tengu_native_update_complete", {
342376
342378
  latency_ms: Date.now() - startTime,
@@ -396226,6 +396228,8 @@ function checkTaskListGate(input) {
396226
396228
  return { allowed: true };
396227
396229
  if (input.isPlanningArtifact === true)
396228
396230
  return { allowed: true };
396231
+ if (input.isReadOnlyPlanningDelegation === true)
396232
+ return { allowed: true };
396229
396233
  const isMutating = input.isMutating ?? isMutatingTool2(input.toolName);
396230
396234
  if (!isMutating)
396231
396235
  return { allowed: true };
@@ -400519,12 +400523,13 @@ var init_prompt18 = __esm(() => {
400519
400523
 
400520
400524
  In plan mode, you'll:
400521
400525
  1. Thoroughly explore the codebase using Glob, Grep, and Read tools
400522
- 2. Understand existing patterns and architecture
400523
- 3. Design an implementation approach
400524
- 4. Present your plan to the user for approval
400525
- 5. Use ${ASK_USER_QUESTION_TOOL_NAME} if you need to clarify approaches
400526
- 6. Use TaskCreate for manual task decomposition when useful; plan-file writes are allowed while planning
400527
- 7. Exit plan mode with ExitPlanMode when ready. After approval, ExitPlanMode guarantees that visible implementation tasks exist before coding begins
400526
+ 2. Delegate early research only to UR's shipped read-only Explore or Plan agents; other delegation requires an actionable parent task
400527
+ 3. Understand existing patterns and architecture
400528
+ 4. Design an implementation approach
400529
+ 5. Present your plan to the user for approval
400530
+ 6. Use ${ASK_USER_QUESTION_TOOL_NAME} if you need to clarify approaches
400531
+ 7. Use TaskCreate for manual task decomposition when useful; plan-file writes are allowed while planning
400532
+ 8. Exit plan mode with ExitPlanMode when ready. After approval, ExitPlanMode guarantees that visible implementation tasks exist before coding begins
400528
400533
 
400529
400534
  `;
400530
400535
  });
@@ -400643,7 +400648,7 @@ var init_EnterPlanModeTool = __esm(() => {
400643
400648
  }));
400644
400649
  return {
400645
400650
  data: {
400646
- message: "Entered plan mode. Explore the codebase and write the plan file. TaskCreate remains available for manual decomposition; after approval, ExitPlanMode guarantees visible implementation tasks before coding begins."
400651
+ message: "Entered plan mode. Explore the codebase and write the plan file. UR's shipped read-only Explore and Plan agents may assist before tasks exist; other delegation requires an actionable parent task. TaskCreate remains available for manual decomposition; after approval, ExitPlanMode guarantees visible implementation tasks before coding begins."
400647
400652
  }
400648
400653
  };
400649
400654
  },
@@ -400658,8 +400663,9 @@ In plan mode, you should:
400658
400663
  3. Consider multiple approaches and their trade-offs
400659
400664
  4. Use AskUserQuestion if you need to clarify the approach
400660
400665
  5. Design a concrete implementation strategy
400661
- 6. If useful, use TaskCreate to decompose the work manually; plan-file writes remain allowed while planning
400662
- 7. When ready, use ExitPlanMode to present your plan for approval. After approval, it guarantees visible implementation tasks before coding begins
400666
+ 6. Before tasks exist, delegate only to UR's shipped read-only Explore or Plan agents; other delegation requires an actionable parent task
400667
+ 7. If useful, use TaskCreate to decompose the work manually; plan-file writes remain allowed while planning
400668
+ 8. When ready, use ExitPlanMode to present your plan for approval. After approval, it guarantees visible implementation tasks before coding begins
400663
400669
 
400664
400670
  Remember: DO NOT write or edit any files yet. This is a read-only exploration and planning phase.`;
400665
400671
  return {
@@ -413021,7 +413027,7 @@ function isAnyTracingEnabled() {
413021
413027
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
413022
413028
  }
413023
413029
  function getTracer() {
413024
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.5");
413030
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.6");
413025
413031
  }
413026
413032
  function createSpanAttributes(spanType, customAttributes = {}) {
413027
413033
  const baseAttributes = getTelemetryAttributes();
@@ -414476,6 +414482,16 @@ function isCurrentPlanFileMutation(toolName, input, context5) {
414476
414482
  return false;
414477
414483
  }
414478
414484
  }
414485
+ function isReadOnlyPlanningDelegation(toolName, input, context5) {
414486
+ if (context5.agentId || context5.getAppState().toolPermissionContext.mode !== "plan" || toolName !== AGENT_TOOL_NAME && toolName !== LEGACY_AGENT_TOOL_NAME || !input || typeof input !== "object" || Array.isArray(input)) {
414487
+ return false;
414488
+ }
414489
+ const delegation = input;
414490
+ if (typeof delegation.subagent_type !== "string" || !READ_ONLY_PLANNING_AGENT_TYPES.has(delegation.subagent_type) || delegation.name !== undefined || delegation.team_name !== undefined || delegation.isolation !== undefined) {
414491
+ return false;
414492
+ }
414493
+ return context5.options.agentDefinitions.activeAgents.some((agent) => agent.agentType === delegation.subagent_type && agent.source === "built-in" && agent.permissionMode === "plan");
414494
+ }
414479
414495
  function getStopHookInfo(attachment) {
414480
414496
  if (typeof attachment !== "object" || attachment === null || !("command" in attachment) || typeof attachment.command !== "string" || !("durationMs" in attachment) || typeof attachment.durationMs !== "number") {
414481
414497
  return null;
@@ -414941,6 +414957,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
414941
414957
  requiresTaskList: taskListRun?.requiresTaskList,
414942
414958
  requirementReason: taskListRun?.requirementReason,
414943
414959
  isPlanningArtifact: isCurrentPlanFileMutation(tool.name, parsedInput.data, toolUseContext),
414960
+ isReadOnlyPlanningDelegation: isReadOnlyPlanningDelegation(tool.name, parsedInput.data, toolUseContext),
414944
414961
  taskListWriterAvailable: toolUseContext.options.tools.some((candidate) => candidate.name === "TaskCreate")
414945
414962
  });
414946
414963
  if (gate.allowed === false) {
@@ -415302,6 +415319,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
415302
415319
  requiresTaskList: taskListRun?.requiresTaskList,
415303
415320
  requirementReason: taskListRun?.requirementReason,
415304
415321
  isPlanningArtifact: isCurrentPlanFileMutation(tool.name, finalParsedInput.data, toolUseContext),
415322
+ isReadOnlyPlanningDelegation: isReadOnlyPlanningDelegation(tool.name, finalParsedInput.data, toolUseContext),
415305
415323
  taskListWriterAvailable: toolUseContext.options.tools.some((candidate) => candidate.name === "TaskCreate")
415306
415324
  });
415307
415325
  if (finalGate.allowed === false) {
@@ -415711,7 +415729,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
415711
415729
  }
415712
415730
  }
415713
415731
  }
415714
- var HOOK_TIMING_DISPLAY_THRESHOLD_MS2 = 500, SLOW_PHASE_LOG_THRESHOLD_MS = 2000;
415732
+ var READ_ONLY_PLANNING_AGENT_TYPES, HOOK_TIMING_DISPLAY_THRESHOLD_MS2 = 500, SLOW_PHASE_LOG_THRESHOLD_MS = 2000;
415715
415733
  var init_toolExecution = __esm(() => {
415716
415734
  init_analytics();
415717
415735
  init_metadata();
@@ -415722,6 +415740,7 @@ var init_toolExecution = __esm(() => {
415722
415740
  init_AskUserQuestionTool();
415723
415741
  init_prompt();
415724
415742
  init_bashPermissions();
415743
+ init_constants2();
415725
415744
  init_prompt3();
415726
415745
  init_prompt4();
415727
415746
  init_gitOperationTracking();
@@ -415752,6 +415771,7 @@ var init_toolExecution = __esm(() => {
415752
415771
  init_mcpStringUtils();
415753
415772
  init_utils3();
415754
415773
  init_toolHooks();
415774
+ READ_ONLY_PLANNING_AGENT_TYPES = new Set(["Explore", "Plan"]);
415755
415775
  });
415756
415776
 
415757
415777
  // src/services/tools/StreamingToolExecutor.ts
@@ -433403,7 +433423,7 @@ function getPlanModeV2Instructions(attachment) {
433403
433423
  const agentCount = getPlanModeV2AgentCount();
433404
433424
  const exploreAgentCount = getPlanModeV2ExploreAgentCount();
433405
433425
  const planFileInfo = attachment.planExists ? `A plan file already exists at ${attachment.planFilePath}. You can read it and make incremental edits using the ${FileEditTool.name} tool.` : `No plan file exists yet. You should create your plan at ${attachment.planFilePath} using the ${FileWriteTool.name} tool.`;
433406
- const content = `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. TaskCreate, TaskUpdate, TaskList, and TaskGet are also allowed for visible task tracking. This supercedes any other instructions you have received.
433426
+ const content = `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. TaskCreate, TaskUpdate, TaskList, and TaskGet are also allowed for visible task tracking. Before tasks exist, only UR's shipped read-only ${EXPLORE_AGENT.agentType} and ${PLAN_AGENT.agentType} agents may be delegated to; custom, general-purpose, nested, team, and worktree agents still require an actionable parent task. This supercedes any other instructions you have received.
433407
433427
 
433408
433428
  ## Plan File Info:
433409
433429
  ${planFileInfo}
@@ -433478,7 +433498,7 @@ function getReadOnlyToolNames() {
433478
433498
  }
433479
433499
  function getPlanModeInterviewInstructions(attachment) {
433480
433500
  const planFileInfo = attachment.planExists ? `A plan file already exists at ${attachment.planFilePath}. You can read it and make incremental edits using the ${FileEditTool.name} tool.` : `No plan file exists yet. You should create your plan at ${attachment.planFilePath} using the ${FileWriteTool.name} tool.`;
433481
- const content = `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. TaskCreate, TaskUpdate, TaskList, and TaskGet are also allowed for visible task tracking. This supercedes any other instructions you have received.
433501
+ const content = `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. TaskCreate, TaskUpdate, TaskList, and TaskGet are also allowed for visible task tracking.${areExplorePlanAgentsEnabled() ? ` Before tasks exist, only UR's shipped read-only ${EXPLORE_AGENT.agentType} and ${PLAN_AGENT.agentType} agents may be delegated to; custom, general-purpose, nested, team, and worktree agents still require an actionable parent task.` : ""} This supercedes any other instructions you have received.
433482
433502
 
433483
433503
  ## Plan File Info:
433484
433504
  ${planFileInfo}
@@ -443127,7 +443147,7 @@ function Feedback({
443127
443147
  platform: env2.platform,
443128
443148
  gitRepo: envInfo.isGit,
443129
443149
  terminal: env2.terminal,
443130
- version: "1.80.5",
443150
+ version: "1.80.6",
443131
443151
  transcript: normalizeMessagesForAPI(messages),
443132
443152
  errors: sanitizedErrors,
443133
443153
  lastApiRequest: getLastAPIRequest(),
@@ -443319,7 +443339,7 @@ function Feedback({
443319
443339
  ", ",
443320
443340
  env2.terminal,
443321
443341
  ", v",
443322
- "1.80.5"
443342
+ "1.80.6"
443323
443343
  ]
443324
443344
  }, undefined, true, undefined, this)
443325
443345
  ]
@@ -443425,7 +443445,7 @@ ${sanitizedDescription}
443425
443445
  ` + `**Environment Info**
443426
443446
  ` + `- Platform: ${env2.platform}
443427
443447
  ` + `- Terminal: ${env2.terminal}
443428
- ` + `- Version: ${"1.80.5"}
443448
+ ` + `- Version: ${"1.80.6"}
443429
443449
  ` + `- Feedback ID: ${feedbackId}
443430
443450
  ` + `
443431
443451
  **Errors**
@@ -446535,7 +446555,7 @@ function buildPrimarySection() {
446535
446555
  }, undefined, false, undefined, this);
446536
446556
  return [{
446537
446557
  label: "Version",
446538
- value: "1.80.5"
446558
+ value: "1.80.6"
446539
446559
  }, {
446540
446560
  label: "Session name",
446541
446561
  value: nameValue
@@ -449917,7 +449937,7 @@ function Config({
449917
449937
  }
449918
449938
  }, undefined, false, undefined, this)
449919
449939
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
449920
- currentVersion: "1.80.5",
449940
+ currentVersion: "1.80.6",
449921
449941
  onChoice: (choice) => {
449922
449942
  setShowSubmenu(null);
449923
449943
  setTabsHidden(false);
@@ -449929,7 +449949,7 @@ function Config({
449929
449949
  autoUpdatesChannel: "stable"
449930
449950
  };
449931
449951
  if (choice === "stay") {
449932
- newSettings.minimumVersion = "1.80.5";
449952
+ newSettings.minimumVersion = "1.80.6";
449933
449953
  }
449934
449954
  updateSettingsForSource("userSettings", newSettings);
449935
449955
  setSettingsData((prev_27) => ({
@@ -458238,7 +458258,7 @@ function HelpV2(t0) {
458238
458258
  let t6;
458239
458259
  if ($2[31] !== tabs) {
458240
458260
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
458241
- title: `UR v${"1.80.5"}`,
458261
+ title: `UR v${"1.80.6"}`,
458242
458262
  color: "professionalBlue",
458243
458263
  defaultTab: "general",
458244
458264
  children: tabs
@@ -459171,7 +459191,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
459171
459191
  async function handleInitialize(options2) {
459172
459192
  return {
459173
459193
  name: "UR",
459174
- version: "1.80.5",
459194
+ version: "1.80.6",
459175
459195
  protocolVersion: "0.1.0",
459176
459196
  workspaceRoot: options2.cwd,
459177
459197
  capabilities: {
@@ -476279,7 +476299,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
476279
476299
  return [];
476280
476300
  }
476281
476301
  }
476282
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.5") {
476302
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.6") {
476283
476303
  if (process.env.USER_TYPE === "ant") {
476284
476304
  const changelog = "";
476285
476305
  if (changelog) {
@@ -476306,7 +476326,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.5")
476306
476326
  releaseNotes
476307
476327
  };
476308
476328
  }
476309
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.5") {
476329
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.6") {
476310
476330
  if (process.env.USER_TYPE === "ant") {
476311
476331
  const changelog = "";
476312
476332
  if (changelog) {
@@ -479211,7 +479231,7 @@ function getRecentActivitySync() {
479211
479231
  return cachedActivity;
479212
479232
  }
479213
479233
  function getLogoDisplayData() {
479214
- const version2 = process.env.DEMO_VERSION ?? "1.80.5";
479234
+ const version2 = process.env.DEMO_VERSION ?? "1.80.6";
479215
479235
  const serverUrl = getDirectConnectServerUrl();
479216
479236
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
479217
479237
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -480079,7 +480099,7 @@ function LogoV2() {
480079
480099
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
480080
480100
  t2 = () => {
480081
480101
  const currentConfig = getGlobalConfig();
480082
- if (currentConfig.lastReleaseNotesSeen === "1.80.5") {
480102
+ if (currentConfig.lastReleaseNotesSeen === "1.80.6") {
480083
480103
  return;
480084
480104
  }
480085
480105
  saveGlobalConfig(_temp325);
@@ -480764,12 +480784,12 @@ function LogoV2() {
480764
480784
  return t41;
480765
480785
  }
480766
480786
  function _temp325(current) {
480767
- if (current.lastReleaseNotesSeen === "1.80.5") {
480787
+ if (current.lastReleaseNotesSeen === "1.80.6") {
480768
480788
  return current;
480769
480789
  }
480770
480790
  return {
480771
480791
  ...current,
480772
- lastReleaseNotesSeen: "1.80.5"
480792
+ lastReleaseNotesSeen: "1.80.6"
480773
480793
  };
480774
480794
  }
480775
480795
  function _temp241(s_0) {
@@ -496861,7 +496881,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
496861
496881
  if (spec.name !== specName) {
496862
496882
  throw new Error("Agentic CI workflow spec name does not match");
496863
496883
  }
496864
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.5" : "1.80.5");
496884
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.6" : "1.80.6");
496865
496885
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
496866
496886
  throw new Error("invalid ur-agent package version");
496867
496887
  }
@@ -497854,7 +497874,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
497854
497874
  path: ".github/workflows/ur.yml",
497855
497875
  root: "project",
497856
497876
  content: compileAgenticCiWorkflow("default", {
497857
- packageVersion: typeof MACRO !== "undefined" ? "1.80.5" : "1.80.5"
497877
+ packageVersion: typeof MACRO !== "undefined" ? "1.80.6" : "1.80.6"
497858
497878
  })
497859
497879
  },
497860
497880
  {
@@ -497917,7 +497937,7 @@ function value(tokens, flag) {
497917
497937
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
497918
497938
  }
497919
497939
  function cliVersion() {
497920
- return typeof MACRO !== "undefined" ? "1.80.5" : "1.80.5";
497940
+ return typeof MACRO !== "undefined" ? "1.80.6" : "1.80.6";
497921
497941
  }
497922
497942
  function workflowPath(cwd2) {
497923
497943
  return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -503773,7 +503793,7 @@ function createAcpStdioApp(deps) {
503773
503793
  }
503774
503794
  },
503775
503795
  authMethods: [],
503776
- agentInfo: { name: "UR-Nexus", version: "1.80.5" }
503796
+ agentInfo: { name: "UR-Nexus", version: "1.80.6" }
503777
503797
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
503778
503798
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
503779
503799
  await runtime2.announce({
@@ -503870,7 +503890,7 @@ function createAcpStdioAgent(deps) {
503870
503890
  }
503871
503891
  },
503872
503892
  authMethods: [],
503873
- agentInfo: { name: "UR-Nexus", version: "1.80.5" }
503893
+ agentInfo: { name: "UR-Nexus", version: "1.80.6" }
503874
503894
  });
503875
503895
  return;
503876
503896
  case "authenticate":
@@ -715096,7 +715116,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
715096
715116
  smapsRollup,
715097
715117
  platform: process.platform,
715098
715118
  nodeVersion: process.version,
715099
- ccVersion: "1.80.5"
715119
+ ccVersion: "1.80.6"
715100
715120
  };
715101
715121
  }
715102
715122
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -715685,7 +715705,7 @@ var init_bridge_kick = __esm(() => {
715685
715705
  var call154 = async () => {
715686
715706
  return {
715687
715707
  type: "text",
715688
- value: "1.80.5"
715708
+ value: "1.80.6"
715689
715709
  };
715690
715710
  }, version2, version_default;
715691
715711
  var init_version = __esm(() => {
@@ -726928,7 +726948,7 @@ function generateHtmlReport(data, insights) {
726928
726948
  </html>`;
726929
726949
  }
726930
726950
  function buildExportData(data, insights, facets, remoteStats) {
726931
- const version3 = typeof MACRO !== "undefined" ? "1.80.5" : "unknown";
726951
+ const version3 = typeof MACRO !== "undefined" ? "1.80.6" : "unknown";
726932
726952
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
726933
726953
  const facets_summary = {
726934
726954
  total: facets.size,
@@ -731241,7 +731261,7 @@ var init_sessionStorage = __esm(() => {
731241
731261
  init_settings2();
731242
731262
  init_slowOperations();
731243
731263
  init_uuid();
731244
- VERSION7 = typeof MACRO !== "undefined" ? "1.80.5" : "unknown";
731264
+ VERSION7 = typeof MACRO !== "undefined" ? "1.80.6" : "unknown";
731245
731265
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
731246
731266
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
731247
731267
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -732456,7 +732476,7 @@ var init_filesystem = __esm(() => {
732456
732476
  });
732457
732477
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
732458
732478
  const nonce = randomBytes24(16).toString("hex");
732459
- return join243(getURTempDir(), "bundled-skills", "1.80.5", nonce);
732479
+ return join243(getURTempDir(), "bundled-skills", "1.80.6", nonce);
732460
732480
  });
732461
732481
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
732462
732482
  });
@@ -738845,7 +738865,7 @@ function computeFingerprint(messageText2, version3) {
738845
738865
  }
738846
738866
  function computeFingerprintFromMessages(messages) {
738847
738867
  const firstMessageText = extractFirstMessageText(messages);
738848
- return computeFingerprint(firstMessageText, "1.80.5");
738868
+ return computeFingerprint(firstMessageText, "1.80.6");
738849
738869
  }
738850
738870
  var FINGERPRINT_SALT = "59cf53e54c78";
738851
738871
  var init_fingerprint = () => {};
@@ -740770,7 +740790,7 @@ async function sideQuery(opts) {
740770
740790
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
740771
740791
  }
740772
740792
  const messageText2 = extractFirstUserMessageText(messages);
740773
- const fingerprint2 = computeFingerprint(messageText2, "1.80.5");
740793
+ const fingerprint2 = computeFingerprint(messageText2, "1.80.6");
740774
740794
  const attributionHeader = getAttributionHeader(fingerprint2);
740775
740795
  const systemBlocks = [
740776
740796
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -745604,7 +745624,7 @@ function buildSystemInitMessage(inputs) {
745604
745624
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
745605
745625
  apiKeySource: getURHQApiKeyWithSource().source,
745606
745626
  betas: getSdkBetas(),
745607
- ur_version: "1.80.5",
745627
+ ur_version: "1.80.6",
745608
745628
  output_style: outputStyle,
745609
745629
  agents: inputs.agents.map((agent2) => agent2.agentType),
745610
745630
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -759440,7 +759460,7 @@ var init_useVoiceEnabled = __esm(() => {
759440
759460
  function getSemverPart(version3) {
759441
759461
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
759442
759462
  }
759443
- function useUpdateNotification(updatedVersion, initialVersion = "1.80.5") {
759463
+ function useUpdateNotification(updatedVersion, initialVersion = "1.80.6") {
759444
759464
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
759445
759465
  if (!updatedVersion) {
759446
759466
  return null;
@@ -759489,7 +759509,7 @@ function AutoUpdater({
759489
759509
  return;
759490
759510
  }
759491
759511
  if (false) {}
759492
- const currentVersion = "1.80.5";
759512
+ const currentVersion = "1.80.6";
759493
759513
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
759494
759514
  let latestVersion = await getLatestVersion(channel);
759495
759515
  const isDisabled = isAutoUpdaterDisabled();
@@ -759718,12 +759738,12 @@ function NativeAutoUpdater({
759718
759738
  logEvent("tengu_native_auto_updater_start", {});
759719
759739
  try {
759720
759740
  const maxVersion = await getMaxVersion();
759721
- if (maxVersion && gt("1.80.5", maxVersion)) {
759741
+ if (maxVersion && gt("1.80.6", maxVersion)) {
759722
759742
  const msg = await getMaxVersionMessage();
759723
759743
  setMaxVersionIssue(msg ?? "affects your version");
759724
759744
  }
759725
759745
  const result = await installLatest(channel);
759726
- const currentVersion = "1.80.5";
759746
+ const currentVersion = "1.80.6";
759727
759747
  const latencyMs = Date.now() - startTime;
759728
759748
  if (result.lockFailed) {
759729
759749
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -759860,17 +759880,17 @@ function PackageManagerAutoUpdater(t0) {
759860
759880
  const maxVersion = await getMaxVersion();
759861
759881
  if (maxVersion && latest && gt(latest, maxVersion)) {
759862
759882
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
759863
- if (gte("1.80.5", maxVersion)) {
759864
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.5"} is already at or above maxVersion ${maxVersion}, skipping update`);
759883
+ if (gte("1.80.6", maxVersion)) {
759884
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
759865
759885
  setUpdateAvailable(false);
759866
759886
  return;
759867
759887
  }
759868
759888
  latest = maxVersion;
759869
759889
  }
759870
- const hasUpdate = latest && !gte("1.80.5", latest) && !shouldSkipVersion(latest);
759890
+ const hasUpdate = latest && !gte("1.80.6", latest) && !shouldSkipVersion(latest);
759871
759891
  setUpdateAvailable(!!hasUpdate);
759872
759892
  if (hasUpdate) {
759873
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.5"} -> ${latest}`);
759893
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.6"} -> ${latest}`);
759874
759894
  }
759875
759895
  };
759876
759896
  $2[0] = t1;
@@ -759904,7 +759924,7 @@ function PackageManagerAutoUpdater(t0) {
759904
759924
  wrap: "truncate",
759905
759925
  children: [
759906
759926
  "currentVersion: ",
759907
- "1.80.5"
759927
+ "1.80.6"
759908
759928
  ]
759909
759929
  }, undefined, true, undefined, this);
759910
759930
  $2[3] = verbose;
@@ -770757,7 +770777,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
770757
770777
  project_dir: getOriginalCwd(),
770758
770778
  added_dirs: addedDirs
770759
770779
  },
770760
- version: "1.80.5",
770780
+ version: "1.80.6",
770761
770781
  output_style: {
770762
770782
  name: outputStyleName
770763
770783
  },
@@ -770892,7 +770912,7 @@ function StatusLineInner({
770892
770912
  const attention = customStatusError ?? taskAttention;
770893
770913
  const terminalSize = React133.useContext(TerminalSizeContext);
770894
770914
  const defaultStatusLineText = buildDefaultStatusBar({
770895
- version: "1.80.5",
770915
+ version: "1.80.6",
770896
770916
  providerLabel: providerRuntime.providerLabel,
770897
770917
  authMode: providerRuntime.authLabel,
770898
770918
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -783147,7 +783167,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
783147
783167
  } catch {}
783148
783168
  const data = {
783149
783169
  trigger: trigger2,
783150
- version: "1.80.5",
783170
+ version: "1.80.6",
783151
783171
  platform: process.platform,
783152
783172
  transcript,
783153
783173
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -795516,7 +795536,7 @@ function WelcomeV2() {
795516
795536
  dimColor: true,
795517
795537
  children: [
795518
795538
  "v",
795519
- "1.80.5"
795539
+ "1.80.6"
795520
795540
  ]
795521
795541
  }, undefined, true, undefined, this)
795522
795542
  ]
@@ -796776,7 +796796,7 @@ function completeOnboarding() {
796776
796796
  saveGlobalConfig((current) => ({
796777
796797
  ...current,
796778
796798
  hasCompletedOnboarding: true,
796779
- lastOnboardingVersion: "1.80.5"
796799
+ lastOnboardingVersion: "1.80.6"
796780
796800
  }));
796781
796801
  }
796782
796802
  function showDialog(root2, renderer) {
@@ -801922,7 +801942,7 @@ function appendToLog(path28, message) {
801922
801942
  cwd: getFsImplementation().cwd(),
801923
801943
  userType: process.env.USER_TYPE,
801924
801944
  sessionId: getSessionId(),
801925
- version: "1.80.5"
801945
+ version: "1.80.6"
801926
801946
  };
801927
801947
  getLogWriter(path28).write(messageWithTimestamp);
801928
801948
  }
@@ -806086,8 +806106,8 @@ async function getEnvLessBridgeConfig() {
806086
806106
  }
806087
806107
  async function checkEnvLessBridgeMinVersion() {
806088
806108
  const cfg = await getEnvLessBridgeConfig();
806089
- if (cfg.min_version && lt("1.80.5", cfg.min_version)) {
806090
- return `Your version of UR (${"1.80.5"}) is too old for Remote Control.
806109
+ if (cfg.min_version && lt("1.80.6", cfg.min_version)) {
806110
+ return `Your version of UR (${"1.80.6"}) is too old for Remote Control.
806091
806111
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
806092
806112
  }
806093
806113
  return null;
@@ -806561,7 +806581,7 @@ async function initBridgeCore(params) {
806561
806581
  const rawApi = createBridgeApiClient({
806562
806582
  baseUrl,
806563
806583
  getAccessToken,
806564
- runnerVersion: "1.80.5",
806584
+ runnerVersion: "1.80.6",
806565
806585
  onDebug: logForDebugging,
806566
806586
  onAuth401,
806567
806587
  getTrustedDeviceToken
@@ -816034,7 +816054,7 @@ function getAgUiCapabilities() {
816034
816054
  name: "UR-Nexus",
816035
816055
  type: "ur-nexus",
816036
816056
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
816037
- version: "1.80.5",
816057
+ version: "1.80.6",
816038
816058
  provider: "UR",
816039
816059
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
816040
816060
  },
@@ -817261,7 +817281,7 @@ function createMCPServer(cwd4, debug2, verbose) {
817261
817281
  };
817262
817282
  const server2 = new Server({
817263
817283
  name: "ur-nexus",
817264
- version: "1.80.5"
817284
+ version: "1.80.6"
817265
817285
  }, {
817266
817286
  capabilities: {
817267
817287
  tools: {}
@@ -818465,7 +818485,7 @@ function thrownResponse(error40) {
818465
818485
  }
818466
818486
  async function createUrMcp2026Runtime(options5) {
818467
818487
  const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
818468
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.5" }, { capabilities: {} });
818488
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.6" }, { capabilities: {} });
818469
818489
  const [clientTransport, serverTransport] = createLinkedTransportPair();
818470
818490
  try {
818471
818491
  await server2.connect(serverTransport);
@@ -818476,7 +818496,7 @@ async function createUrMcp2026Runtime(options5) {
818476
818496
  }
818477
818497
  const runtime2 = new Mcp2026Runtime({
818478
818498
  cwd: options5.cwd,
818479
- version: "1.80.5",
818499
+ version: "1.80.6",
818480
818500
  backend: {
818481
818501
  listTools: async () => {
818482
818502
  const listed = await client2.listTools();
@@ -821211,7 +821231,7 @@ async function update() {
821211
821231
  logEvent("tengu_update_check", {});
821212
821232
  const diagnostic2 = await getDoctorDiagnostic();
821213
821233
  const result = await checkUpgradeStatus({
821214
- currentVersion: "1.80.5",
821234
+ currentVersion: "1.80.6",
821215
821235
  packageName: UR_AGENT_PACKAGE_NAME,
821216
821236
  installationType: diagnostic2.installationType,
821217
821237
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -822539,7 +822559,7 @@ ${customInstructions}` : customInstructions;
822539
822559
  }
822540
822560
  }
822541
822561
  logForDiagnosticsNoPII("info", "started", {
822542
- version: "1.80.5",
822562
+ version: "1.80.6",
822543
822563
  is_native_binary: isInBundledMode()
822544
822564
  });
822545
822565
  registerCleanup(async () => {
@@ -823326,7 +823346,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
823326
823346
  pendingHookMessages
823327
823347
  }, renderAndRun);
823328
823348
  }
823329
- }).version("1.80.5 (UR-Nexus)", "-v, --version", "Output the version number");
823349
+ }).version("1.80.6 (UR-Nexus)", "-v, --version", "Output the version number");
823330
823350
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
823331
823351
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
823332
823352
  if (canUserConfigureAdvisor()) {
@@ -824453,7 +824473,7 @@ if (false) {}
824453
824473
  async function main2() {
824454
824474
  const args = process.argv.slice(2);
824455
824475
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
824456
- console.log(`${"1.80.5"} (UR-Nexus)`);
824476
+ console.log(`${"1.80.6"} (UR-Nexus)`);
824457
824477
  return;
824458
824478
  }
824459
824479
  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.6 Addition
13
+
14
+ | Addition | Surface | What it adds |
15
+ | --- | --- | --- |
16
+ | Read-only planning delegation | Plan mode, `Agent`, strict-hybrid task gate | Lets the shipped `Explore` and `Plan` agents research before implementation tasks exist, eliminating failed-first delegation while retaining plan permissions and task requirements for every custom, write-capable, nested, team, or worktree agent. |
17
+
12
18
  ## v1.80.5 Addition
13
19
 
14
20
  | Addition | Surface | What it adds |
@@ -85,16 +85,20 @@ ur provider status
85
85
 
86
86
  ### Plan mode says `TaskListRequired`
87
87
 
88
- - Likely cause on UR 1.80.3–1.80.4: the strict task gate treated the session's
89
- own plan-file update as a project mutation, creating a circular requirement
90
- for tasks before the plan could be finalized.
91
- - Fix: upgrade to UR 1.80.5 or newer. The exact active plan file is allowed
92
- during plan mode, and approved plans are synchronized into visible
88
+ - Likely cause on UR 1.80.3–1.80.5: the strict task gate treated either the
89
+ active plan file or early read-only research delegation as an untracked
90
+ project mutation, creating a circular requirement before planning finished.
91
+ - Fix: upgrade to UR 1.80.6 or newer. The exact active plan file and main-thread
92
+ delegation to UR's shipped read-only `Explore` and `Plan` agents are allowed
93
+ before tasks exist. Approved plans are synchronized into visible
93
94
  implementation and verification tasks before the first project mutation.
94
- Other files remain protected. Existing actionable tasks are preserved.
95
+ Other files and write-capable delegation remain protected. Existing
96
+ actionable tasks are preserved.
95
97
  - If the message names a project file rather than the active plan file, it is
96
- expected: create the requested tasks or finish and approve the plan first.
97
- Disabling `tasks.requireBeforeChanges` is no longer needed for plan mode.
98
+ expected. It is also expected for custom/general-purpose/nested/team/worktree
99
+ agents without a parent task: create the requested tasks or finish and
100
+ approve the plan first. Disabling `tasks.requireBeforeChanges` is no longer
101
+ needed for normal plan mode.
98
102
 
99
103
  ## Providers and models
100
104
 
package/docs/USAGE.md CHANGED
@@ -470,11 +470,16 @@ older builds are hidden and removed at the next prompt boundary.
470
470
 
471
471
  Plan mode has one narrow exception to the mutation gate: UR may write or edit
472
472
  the exact plan file for the active session while the rest of the workspace
473
- remains read-only. When the user approves the plan, `ExitPlanMode` preserves
474
- any existing actionable board or creates a bounded set of professional,
475
- deduplicated implementation tasks plus a verification task that depends on
476
- them. Implementation therefore starts with visible tracking without requiring
477
- the model or user to recover from a circular `TaskListRequired` error.
473
+ remains read-only. The main session may also delegate early research to UR's
474
+ shipped `Explore` and `Plan` agents before tasks exist. Those two definitions
475
+ are mechanically held in plan permission mode; custom overrides,
476
+ general-purpose agents, nested agents, team workers, and worktree agents still
477
+ require an actionable parent task. When the user approves the plan,
478
+ `ExitPlanMode` preserves any existing actionable board or creates a bounded set
479
+ of professional, deduplicated implementation tasks plus a verification task
480
+ that depends on them. Implementation therefore starts with visible tracking
481
+ without requiring the model or user to recover from a circular
482
+ `TaskListRequired` error.
478
483
 
479
484
  Independent read-only tasks can run in parallel. A task that may write to the
480
485
  shared checkout is serialized with other possible writers, even when it comes
@@ -19,7 +19,19 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.80.5 (UR-Nexus)"
22
+ # expected for this release: "1.80.6 (UR-Nexus)"
23
+ ```
24
+
25
+ ### 0.0 Plan research delegation starts cleanly (1.80.6)
26
+
27
+ Start an interactive session with task enforcement enabled and ask UR to plan a
28
+ change that requires codebase research. Before any task exists, built-in
29
+ `Explore` and `Plan` agent calls should initialize without `TaskListRequired`.
30
+ Custom or general-purpose agents should remain blocked until they have an
31
+ actionable parent task. The deterministic regressions are:
32
+
33
+ ```sh
34
+ bun test test/taskListGate.test.ts test/toolExecutionFinalInput.test.ts
23
35
  ```
24
36
 
25
37
  ### 0.0.1 Plan approval creates visible tasks (1.80.5)
@@ -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.5</p>
48
+ <p class="eyebrow">Version 1.80.6</p>
49
49
  <h1>UR-Nexus Documentation</h1>
50
50
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
51
51
  </div>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.80.5"
10
+ version = "1.80.6"
11
11
 
12
12
  repositories {
13
13
  mavenCentral()
@@ -2,7 +2,7 @@
2
2
  "name": "ur-inline-diffs",
3
3
  "displayName": "UR Inline Diffs",
4
4
  "description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
5
- "version": "1.80.5",
5
+ "version": "1.80.6",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.80.5",
3
+ "version": "1.80.6",
4
4
  "description": "UR-Nexus — autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",