ur-agent 1.80.0 → 1.80.2

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/dist/cli.js CHANGED
@@ -87675,6 +87675,33 @@ function dedupeQuestions(questions) {
87675
87675
  }
87676
87676
  return out;
87677
87677
  }
87678
+ function repairSingleOptionQuestions(questions) {
87679
+ return dedupeQuestions(questions).map((question) => {
87680
+ if (!isRecord2(question) || !Array.isArray(question.options))
87681
+ return question;
87682
+ if (question.options.length !== 1)
87683
+ return question;
87684
+ const onlyOption = question.options[0];
87685
+ if (!isRecord2(onlyOption) || typeof onlyOption.label !== "string") {
87686
+ return question;
87687
+ }
87688
+ const onlyLabel = duplicateKey(onlyOption.label);
87689
+ if (!onlyLabel)
87690
+ return question;
87691
+ const fallbackLabels = ["Different answer", "Reject suggestion"];
87692
+ const fallbackLabel = fallbackLabels.find((label) => duplicateKey(label) !== onlyLabel);
87693
+ return {
87694
+ ...question,
87695
+ options: [
87696
+ onlyOption,
87697
+ {
87698
+ label: fallbackLabel,
87699
+ description: "Reject the suggested option so the agent can ask for a different answer."
87700
+ }
87701
+ ]
87702
+ };
87703
+ });
87704
+ }
87678
87705
  function describeQuestionPayloadProblems(value) {
87679
87706
  const problems = [];
87680
87707
  if (!isRecord2(value)) {
@@ -87921,7 +87948,7 @@ function looksLikeOptionEntry(value) {
87921
87948
  return typeof entry.label === "string" || typeof entry.value === "string" || typeof entry.header === "string" || typeof entry.description === "string";
87922
87949
  }
87923
87950
  function recoverFlattenedOptions(input, entries) {
87924
- if (entries.length < 2 || !entries.every(looksLikeOptionEntry))
87951
+ if (entries.length < 1 || !entries.every(looksLikeOptionEntry))
87925
87952
  return null;
87926
87953
  const questionText = stringField(input, [
87927
87954
  "question",
@@ -88010,7 +88037,7 @@ function normalizeAskUserQuestionInput(value) {
88010
88037
  const entry = typeof raw === "string" || Array.isArray(raw) || objectValue(raw) ? normalizeQuestionInput({ question: questionText, options: raw }, index2) : null;
88011
88038
  return entry;
88012
88039
  });
88013
- const normalized = dedupeQuestions(questions.filter((entry) => entry !== null && typeof entry === "object"));
88040
+ const normalized = repairSingleOptionQuestions(questions.filter((entry) => entry !== null && typeof entry === "object"));
88014
88041
  if (normalized.length > 0) {
88015
88042
  return {
88016
88043
  questions: normalized.slice(0, 4),
@@ -88023,14 +88050,14 @@ function normalizeAskUserQuestionInput(value) {
88023
88050
  const normalized = input.questions.map((entry, index2) => normalizeQuestionInput(entry, index2)).filter((entry) => entry !== null && typeof entry === "object");
88024
88051
  if (normalized.length > 0) {
88025
88052
  return {
88026
- questions: dedupeQuestions(normalized),
88053
+ questions: repairSingleOptionQuestions(normalized),
88027
88054
  ...commonFields
88028
88055
  };
88029
88056
  }
88030
88057
  const recovered = recoverFlattenedOptions(input, input.questions);
88031
88058
  if (recovered && typeof recovered === "object") {
88032
88059
  return {
88033
- questions: dedupeQuestions([recovered]),
88060
+ questions: repairSingleOptionQuestions([recovered]),
88034
88061
  ...commonFields
88035
88062
  };
88036
88063
  }
@@ -88040,7 +88067,7 @@ function normalizeAskUserQuestionInput(value) {
88040
88067
  const singleQuestion = normalizeQuestionInput(input, 0);
88041
88068
  if (singleQuestion && singleQuestion !== input) {
88042
88069
  return {
88043
- questions: dedupeQuestions([singleQuestion]),
88070
+ questions: repairSingleOptionQuestions([singleQuestion]),
88044
88071
  ...commonFields
88045
88072
  };
88046
88073
  }
@@ -107757,7 +107784,7 @@ var init_auth = __esm(() => {
107757
107784
 
107758
107785
  // src/utils/userAgent.ts
107759
107786
  function getURCodeUserAgent() {
107760
- return `ur/${"1.80.0"}`;
107787
+ return `ur/${"1.80.2"}`;
107761
107788
  }
107762
107789
 
107763
107790
  // src/utils/workloadContext.ts
@@ -107779,7 +107806,7 @@ function getUserAgent() {
107779
107806
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
107780
107807
  const workload = getWorkload();
107781
107808
  const workloadSuffix = workload ? `, workload/${workload}` : "";
107782
- return `ur-cli/${"1.80.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107809
+ return `ur-cli/${"1.80.2"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107783
107810
  }
107784
107811
  function getMCPUserAgent() {
107785
107812
  const parts = [];
@@ -107793,7 +107820,7 @@ function getMCPUserAgent() {
107793
107820
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
107794
107821
  }
107795
107822
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
107796
- return `ur/${"1.80.0"}${suffix}`;
107823
+ return `ur/${"1.80.2"}${suffix}`;
107797
107824
  }
107798
107825
  function getWebFetchUserAgent() {
107799
107826
  return `UR-User (${getURCodeUserAgent()})`;
@@ -107931,7 +107958,7 @@ var init_user = __esm(() => {
107931
107958
  deviceId,
107932
107959
  sessionId: getSessionId(),
107933
107960
  email: getEmail(),
107934
- appVersion: "1.80.0",
107961
+ appVersion: "1.80.2",
107935
107962
  platform: getHostPlatformForAnalytics(),
107936
107963
  organizationUuid,
107937
107964
  accountUuid,
@@ -115818,7 +115845,7 @@ var init_metadata = __esm(() => {
115818
115845
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
115819
115846
  WHITESPACE_REGEX = /\s+/;
115820
115847
  getVersionBase = memoize_default(() => {
115821
- const match = "1.80.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115848
+ const match = "1.80.2".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115822
115849
  return match ? match[0] : undefined;
115823
115850
  });
115824
115851
  buildEnvContext = memoize_default(async () => {
@@ -115858,7 +115885,7 @@ var init_metadata = __esm(() => {
115858
115885
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
115859
115886
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
115860
115887
  isURAiAuth: isURAISubscriber(),
115861
- version: "1.80.0",
115888
+ version: "1.80.2",
115862
115889
  versionBase: getVersionBase(),
115863
115890
  buildTime: "",
115864
115891
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -116528,7 +116555,7 @@ function initialize1PEventLogging() {
116528
116555
  const platform2 = getPlatform();
116529
116556
  const attributes = {
116530
116557
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
116531
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.0"
116558
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.2"
116532
116559
  };
116533
116560
  if (platform2 === "wsl") {
116534
116561
  const wslVersion = getWslVersion();
@@ -116556,7 +116583,7 @@ function initialize1PEventLogging() {
116556
116583
  })
116557
116584
  ]
116558
116585
  });
116559
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.0");
116586
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.2");
116560
116587
  }
116561
116588
  async function reinitialize1PEventLoggingIfConfigChanged() {
116562
116589
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -126515,7 +126542,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
126515
126542
  function formatA2AAgentCard(options = {}, pretty = true) {
126516
126543
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
126517
126544
  }
126518
- var urVersion = "1.80.0", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
126545
+ var urVersion = "1.80.2", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
126519
126546
  var init_trends = __esm(() => {
126520
126547
  init_a2aCardSignature();
126521
126548
  coverage = [
@@ -129405,7 +129432,7 @@ function getAttributionHeader(fingerprint) {
129405
129432
  if (!isAttributionHeaderEnabled()) {
129406
129433
  return "";
129407
129434
  }
129408
- const version2 = `${"1.80.0"}.${fingerprint}`;
129435
+ const version2 = `${"1.80.2"}.${fingerprint}`;
129409
129436
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
129410
129437
  const cch = "";
129411
129438
  const workload = getWorkload();
@@ -184598,7 +184625,7 @@ var init_projectSafety = __esm(() => {
184598
184625
  function getInstruments() {
184599
184626
  if (instruments)
184600
184627
  return instruments;
184601
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.0");
184628
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.2");
184602
184629
  instruments = {
184603
184630
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
184604
184631
  description: "GenAI operation duration.",
@@ -184696,7 +184723,7 @@ function genAiAgentAttributes() {
184696
184723
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
184697
184724
  "gen_ai.provider.name": "ur",
184698
184725
  "gen_ai.agent.name": "UR-Nexus",
184699
- "gen_ai.agent.version": "1.80.0"
184726
+ "gen_ai.agent.version": "1.80.2"
184700
184727
  };
184701
184728
  }
184702
184729
  function genAiWorkflowAttributes(workflowName, workflowRunId) {
@@ -184717,7 +184744,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
184717
184744
  function startGenAiWorkflowSpan(workflowName, workflowRunId) {
184718
184745
  const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
184719
184746
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
184720
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184747
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.2").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184721
184748
  }
184722
184749
  function endGenAiWorkflowSpan(span, options2 = {}) {
184723
184750
  try {
@@ -184755,7 +184782,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
184755
184782
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
184756
184783
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
184757
184784
  }
184758
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184785
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.2").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184759
184786
  }
184760
184787
  function endGenAiMemorySpan(span, options2 = {}) {
184761
184788
  try {
@@ -278470,7 +278497,7 @@ function getTelemetryAttributes() {
278470
278497
  attributes["session.id"] = sessionId;
278471
278498
  }
278472
278499
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
278473
- attributes["app.version"] = "1.80.0";
278500
+ attributes["app.version"] = "1.80.2";
278474
278501
  }
278475
278502
  const oauthAccount = getOauthAccountInfo();
278476
278503
  if (oauthAccount) {
@@ -319461,7 +319488,7 @@ function getInstallationEnv() {
319461
319488
  return;
319462
319489
  }
319463
319490
  function getURCodeVersion() {
319464
- return "1.80.0";
319491
+ return "1.80.2";
319465
319492
  }
319466
319493
  async function getInstalledVSCodeExtensionVersion(command) {
319467
319494
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -326831,7 +326858,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
326831
326858
  const client2 = new Client({
326832
326859
  name: "ur",
326833
326860
  title: "UR",
326834
- version: "1.80.0",
326861
+ version: "1.80.2",
326835
326862
  description: "UR-Nexus autonomous engineering workflow engine",
326836
326863
  websiteUrl: PRODUCT_URL
326837
326864
  }, {
@@ -327192,7 +327219,7 @@ var init_client5 = __esm(() => {
327192
327219
  const client2 = new Client({
327193
327220
  name: "ur",
327194
327221
  title: "UR",
327195
- version: "1.80.0",
327222
+ version: "1.80.2",
327196
327223
  description: "UR-Nexus autonomous engineering workflow engine",
327197
327224
  websiteUrl: PRODUCT_URL
327198
327225
  }, {
@@ -339930,7 +339957,7 @@ async function createRuntime() {
339930
339957
  bootstrapTelemetry();
339931
339958
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
339932
339959
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
339933
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.0"
339960
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.2"
339934
339961
  }));
339935
339962
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
339936
339963
  resource,
@@ -339963,11 +339990,11 @@ async function createRuntime() {
339963
339990
  setMeterProvider(meterProvider);
339964
339991
  setLoggerProvider(loggerProvider);
339965
339992
  if (meterProvider) {
339966
- const meter = meterProvider.getMeter("ur-agent", "1.80.0");
339993
+ const meter = meterProvider.getMeter("ur-agent", "1.80.2");
339967
339994
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
339968
339995
  }
339969
339996
  if (loggerProvider) {
339970
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.0"));
339997
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.2"));
339971
339998
  }
339972
339999
  if (!cleanupRegistered3) {
339973
340000
  cleanupRegistered3 = true;
@@ -340629,9 +340656,9 @@ async function assertMinVersion() {
340629
340656
  if (false) {}
340630
340657
  try {
340631
340658
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
340632
- if (versionConfig.minVersion && lt("1.80.0", versionConfig.minVersion)) {
340659
+ if (versionConfig.minVersion && lt("1.80.2", versionConfig.minVersion)) {
340633
340660
  console.error(`
340634
- It looks like your version of UR (${"1.80.0"}) needs an update.
340661
+ It looks like your version of UR (${"1.80.2"}) needs an update.
340635
340662
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
340636
340663
 
340637
340664
  To update, please run:
@@ -340847,7 +340874,7 @@ async function installGlobalPackage(specificVersion) {
340847
340874
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
340848
340875
  logEvent("tengu_auto_updater_lock_contention", {
340849
340876
  pid: process.pid,
340850
- currentVersion: "1.80.0"
340877
+ currentVersion: "1.80.2"
340851
340878
  });
340852
340879
  return "in_progress";
340853
340880
  }
@@ -340856,7 +340883,7 @@ async function installGlobalPackage(specificVersion) {
340856
340883
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
340857
340884
  logError2(new Error("Windows NPM detected in WSL environment"));
340858
340885
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
340859
- currentVersion: "1.80.0"
340886
+ currentVersion: "1.80.2"
340860
340887
  });
340861
340888
  console.error(`
340862
340889
  Error: Windows NPM detected in WSL
@@ -341391,7 +341418,7 @@ function detectLinuxGlobPatternWarnings() {
341391
341418
  }
341392
341419
  async function getDoctorDiagnostic() {
341393
341420
  const installationType = await getCurrentInstallationType();
341394
- const version2 = typeof MACRO !== "undefined" ? "1.80.0" : "unknown";
341421
+ const version2 = typeof MACRO !== "undefined" ? "1.80.2" : "unknown";
341395
341422
  const installationPath = await getInstallationPath();
341396
341423
  const invokedBinary = getInvokedBinary();
341397
341424
  const multipleInstallations = await detectMultipleInstallations();
@@ -342326,8 +342353,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342326
342353
  const maxVersion = await getMaxVersion();
342327
342354
  if (maxVersion && gt(version2, maxVersion)) {
342328
342355
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
342329
- if (gte("1.80.0", maxVersion)) {
342330
- logForDebugging(`Native installer: current version ${"1.80.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
342356
+ if (gte("1.80.2", maxVersion)) {
342357
+ logForDebugging(`Native installer: current version ${"1.80.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
342331
342358
  logEvent("tengu_native_update_skipped_max_version", {
342332
342359
  latency_ms: Date.now() - startTime,
342333
342360
  max_version: maxVersion,
@@ -342338,7 +342365,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342338
342365
  version2 = maxVersion;
342339
342366
  }
342340
342367
  }
342341
- if (!forceReinstall && version2 === "1.80.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
342368
+ if (!forceReinstall && version2 === "1.80.2" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
342342
342369
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
342343
342370
  logEvent("tengu_native_update_complete", {
342344
342371
  latency_ms: Date.now() - startTime,
@@ -359252,17 +359279,6 @@ function getPillLabel(tasks) {
359252
359279
  case "local_agent":
359253
359280
  return n2 === 1 ? "1 local agent" : `${n2} local agents`;
359254
359281
  case "remote_agent": {
359255
- const first = tasks[0];
359256
- if (n2 === 1 && first.type === "remote_agent" && first.isUltraplan) {
359257
- switch (first.ultraplanPhase) {
359258
- case "plan_ready":
359259
- return `${DIAMOND_FILLED} ultraplan ready`;
359260
- case "needs_input":
359261
- return `${DIAMOND_OPEN} ultraplan needs your input`;
359262
- default:
359263
- return `${DIAMOND_OPEN} ultraplan`;
359264
- }
359265
- }
359266
359282
  return n2 === 1 ? `${DIAMOND_OPEN} 1 cloud session` : `${DIAMOND_OPEN} ${n2} cloud sessions`;
359267
359283
  }
359268
359284
  case "local_workflow":
@@ -359275,12 +359291,6 @@ function getPillLabel(tasks) {
359275
359291
  }
359276
359292
  return `${n2} background ${n2 === 1 ? "task" : "tasks"}`;
359277
359293
  }
359278
- function pillNeedsCta(tasks) {
359279
- if (tasks.length !== 1)
359280
- return false;
359281
- const t = tasks[0];
359282
- return t.type === "remote_agent" && t.isUltraplan === true && t.ultraplanPhase !== undefined;
359283
- }
359284
359294
  var init_pillLabel = __esm(() => {
359285
359295
  init_figures2();
359286
359296
  });
@@ -368953,8 +368963,7 @@ async function teleportToRemote(options2) {
368953
368963
  request_id: `set-mode-${randomUUID36()}`,
368954
368964
  request: {
368955
368965
  subtype: "set_permission_mode",
368956
- mode: options2.permissionMode,
368957
- ultraplan: options2.ultraplan
368966
+ mode: options2.permissionMode
368958
368967
  }
368959
368968
  }
368960
368969
  });
@@ -368975,7 +368984,7 @@ async function teleportToRemote(options2) {
368975
368984
  });
368976
368985
  }
368977
368986
  const requestBody = {
368978
- title: options2.ultraplan ? `ultraplan: ${sessionTitle}` : sessionTitle,
368987
+ title: sessionTitle,
368979
368988
  events: events2,
368980
368989
  session_context: sessionContext,
368981
368990
  environment_id: environmentId
@@ -369283,7 +369292,6 @@ function registerRemoteAgentTask(options2) {
369283
369292
  context: context5,
369284
369293
  toolUseId,
369285
369294
  isRemoteReview,
369286
- isUltraplan,
369287
369295
  isLongRunning,
369288
369296
  remoteTaskMetadata
369289
369297
  } = options2;
@@ -369300,7 +369308,6 @@ function registerRemoteAgentTask(options2) {
369300
369308
  todoList: [],
369301
369309
  log: [],
369302
369310
  isRemoteReview,
369303
- isUltraplan,
369304
369311
  isLongRunning,
369305
369312
  pollStartedAt: Date.now(),
369306
369313
  remoteTaskMetadata
@@ -369314,7 +369321,6 @@ function registerRemoteAgentTask(options2) {
369314
369321
  command,
369315
369322
  spawnedAt: Date.now(),
369316
369323
  toolUseId,
369317
- isUltraplan,
369318
369324
  isRemoteReview,
369319
369325
  isLongRunning,
369320
369326
  remoteTaskMetadata
@@ -369366,7 +369372,6 @@ async function restoreRemoteAgentTasksImpl(context5) {
369366
369372
  todoList: [],
369367
369373
  log: [],
369368
369374
  isRemoteReview: meta.isRemoteReview,
369369
- isUltraplan: meta.isUltraplan,
369370
369375
  isLongRunning: meta.isLongRunning,
369371
369376
  startTime: meta.spawnedAt,
369372
369377
  pollStartedAt: Date.now(),
@@ -369439,7 +369444,7 @@ function startRemoteSessionPolling(taskId, context5) {
369439
369444
  return;
369440
369445
  }
369441
369446
  }
369442
- const result = task.isUltraplan || task.isLongRunning ? undefined : accumulatedLog.findLast((msg) => msg.type === "result");
369447
+ const result = task.isLongRunning ? undefined : accumulatedLog.findLast((msg) => msg.type === "result");
369443
369448
  if (task.isRemoteReview && logGrew && cachedReviewContent === null) {
369444
369449
  cachedReviewContent = extractReviewTagFromLog(response.newEvents);
369445
369450
  }
@@ -369572,7 +369577,7 @@ var init_RemoteAgentTask = __esm(() => {
369572
369577
  init_framework();
369573
369578
  init_api2();
369574
369579
  init_teleport();
369575
- REMOTE_TASK_TYPES = ["remote-agent", "ultraplan", "ultrareview", "autofix-pr", "background-pr"];
369580
+ REMOTE_TASK_TYPES = ["remote-agent", "ultrareview", "autofix-pr", "background-pr"];
369576
369581
  completionCheckers = new Map;
369577
369582
  RemoteAgentTask = {
369578
369583
  name: "RemoteAgentTask",
@@ -412380,7 +412385,7 @@ function isAnyTracingEnabled() {
412380
412385
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
412381
412386
  }
412382
412387
  function getTracer() {
412383
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.0");
412388
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.2");
412384
412389
  }
412385
412390
  function createSpanAttributes(spanType, customAttributes = {}) {
412386
412391
  const baseAttributes = getTelemetryAttributes();
@@ -442812,7 +442817,7 @@ function Feedback({
442812
442817
  platform: env2.platform,
442813
442818
  gitRepo: envInfo.isGit,
442814
442819
  terminal: env2.terminal,
442815
- version: "1.80.0",
442820
+ version: "1.80.2",
442816
442821
  transcript: normalizeMessagesForAPI(messages),
442817
442822
  errors: sanitizedErrors,
442818
442823
  lastApiRequest: getLastAPIRequest(),
@@ -443004,7 +443009,7 @@ function Feedback({
443004
443009
  ", ",
443005
443010
  env2.terminal,
443006
443011
  ", v",
443007
- "1.80.0"
443012
+ "1.80.2"
443008
443013
  ]
443009
443014
  }, undefined, true, undefined, this)
443010
443015
  ]
@@ -443110,7 +443115,7 @@ ${sanitizedDescription}
443110
443115
  ` + `**Environment Info**
443111
443116
  ` + `- Platform: ${env2.platform}
443112
443117
  ` + `- Terminal: ${env2.terminal}
443113
- ` + `- Version: ${"1.80.0"}
443118
+ ` + `- Version: ${"1.80.2"}
443114
443119
  ` + `- Feedback ID: ${feedbackId}
443115
443120
  ` + `
443116
443121
  **Errors**
@@ -446220,7 +446225,7 @@ function buildPrimarySection() {
446220
446225
  }, undefined, false, undefined, this);
446221
446226
  return [{
446222
446227
  label: "Version",
446223
- value: "1.80.0"
446228
+ value: "1.80.2"
446224
446229
  }, {
446225
446230
  label: "Session name",
446226
446231
  value: nameValue
@@ -449602,7 +449607,7 @@ function Config({
449602
449607
  }
449603
449608
  }, undefined, false, undefined, this)
449604
449609
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
449605
- currentVersion: "1.80.0",
449610
+ currentVersion: "1.80.2",
449606
449611
  onChoice: (choice) => {
449607
449612
  setShowSubmenu(null);
449608
449613
  setTabsHidden(false);
@@ -449614,7 +449619,7 @@ function Config({
449614
449619
  autoUpdatesChannel: "stable"
449615
449620
  };
449616
449621
  if (choice === "stay") {
449617
- newSettings.minimumVersion = "1.80.0";
449622
+ newSettings.minimumVersion = "1.80.2";
449618
449623
  }
449619
449624
  updateSettingsForSource("userSettings", newSettings);
449620
449625
  setSettingsData((prev_27) => ({
@@ -457872,7 +457877,7 @@ function HelpV2(t0) {
457872
457877
  let t6;
457873
457878
  if ($2[31] !== tabs) {
457874
457879
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
457875
- title: `UR v${"1.80.0"}`,
457880
+ title: `UR v${"1.80.2"}`,
457876
457881
  color: "professionalBlue",
457877
457882
  defaultTab: "general",
457878
457883
  children: tabs
@@ -458805,7 +458810,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
458805
458810
  async function handleInitialize(options2) {
458806
458811
  return {
458807
458812
  name: "UR",
458808
- version: "1.80.0",
458813
+ version: "1.80.2",
458809
458814
  protocolVersion: "0.1.0",
458810
458815
  workspaceRoot: options2.cwd,
458811
458816
  capabilities: {
@@ -475913,7 +475918,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
475913
475918
  return [];
475914
475919
  }
475915
475920
  }
475916
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.0") {
475921
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.2") {
475917
475922
  if (process.env.USER_TYPE === "ant") {
475918
475923
  const changelog = "";
475919
475924
  if (changelog) {
@@ -475940,7 +475945,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.0")
475940
475945
  releaseNotes
475941
475946
  };
475942
475947
  }
475943
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.0") {
475948
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.2") {
475944
475949
  if (process.env.USER_TYPE === "ant") {
475945
475950
  const changelog = "";
475946
475951
  if (changelog) {
@@ -478845,7 +478850,7 @@ function getRecentActivitySync() {
478845
478850
  return cachedActivity;
478846
478851
  }
478847
478852
  function getLogoDisplayData() {
478848
- const version2 = process.env.DEMO_VERSION ?? "1.80.0";
478853
+ const version2 = process.env.DEMO_VERSION ?? "1.80.2";
478849
478854
  const serverUrl = getDirectConnectServerUrl();
478850
478855
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
478851
478856
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -479713,7 +479718,7 @@ function LogoV2() {
479713
479718
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
479714
479719
  t2 = () => {
479715
479720
  const currentConfig = getGlobalConfig();
479716
- if (currentConfig.lastReleaseNotesSeen === "1.80.0") {
479721
+ if (currentConfig.lastReleaseNotesSeen === "1.80.2") {
479717
479722
  return;
479718
479723
  }
479719
479724
  saveGlobalConfig(_temp325);
@@ -480398,12 +480403,12 @@ function LogoV2() {
480398
480403
  return t41;
480399
480404
  }
480400
480405
  function _temp325(current) {
480401
- if (current.lastReleaseNotesSeen === "1.80.0") {
480406
+ if (current.lastReleaseNotesSeen === "1.80.2") {
480402
480407
  return current;
480403
480408
  }
480404
480409
  return {
480405
480410
  ...current,
480406
- lastReleaseNotesSeen: "1.80.0"
480411
+ lastReleaseNotesSeen: "1.80.2"
480407
480412
  };
480408
480413
  }
480409
480414
  function _temp241(s_0) {
@@ -488720,528 +488725,6 @@ var init_teammateViewHelpers = __esm(() => {
488720
488725
  init_Task();
488721
488726
  });
488722
488727
 
488723
- // src/bridge/types.ts
488724
- var DEFAULT_SESSION_TIMEOUT_MS, BRIDGE_LOGIN_INSTRUCTION = "Remote Control is only available with ur.com subscriptions. Please use `/login` to sign in with your ur.com account.", BRIDGE_LOGIN_ERROR, REMOTE_CONTROL_DISCONNECTED_MSG = "Remote Control disconnected.";
488725
- var init_types14 = __esm(() => {
488726
- DEFAULT_SESSION_TIMEOUT_MS = 24 * 60 * 60 * 1000;
488727
- BRIDGE_LOGIN_ERROR = `Error: You must be logged in to use Remote Control.
488728
-
488729
- ` + BRIDGE_LOGIN_INSTRUCTION;
488730
- });
488731
-
488732
- // src/utils/ultraplan/ccrSession.ts
488733
- function sdkMessageContent(message) {
488734
- if (!("message" in message)) {
488735
- return;
488736
- }
488737
- const sdkMessage = message.message;
488738
- if (!sdkMessage || typeof sdkMessage !== "object") {
488739
- return;
488740
- }
488741
- return sdkMessage.content;
488742
- }
488743
- function isToolUseBlock(block2) {
488744
- return !!block2 && typeof block2 === "object" && block2.type === "tool_use" && typeof block2.id === "string" && typeof block2.name === "string";
488745
- }
488746
- function isToolResultBlockParam(block2) {
488747
- return !!block2 && typeof block2 === "object" && block2.type === "tool_result" && typeof block2.tool_use_id === "string";
488748
- }
488749
-
488750
- class ExitPlanModeScanner {
488751
- exitPlanCalls = [];
488752
- results = new Map;
488753
- rejectedIds = new Set;
488754
- terminated = null;
488755
- rescanAfterRejection = false;
488756
- everSeenPending = false;
488757
- get rejectCount() {
488758
- return this.rejectedIds.size;
488759
- }
488760
- get hasPendingPlan() {
488761
- const id = this.exitPlanCalls.findLast((c4) => !this.rejectedIds.has(c4));
488762
- return id !== undefined && !this.results.has(id);
488763
- }
488764
- ingest(newEvents) {
488765
- for (const m of newEvents) {
488766
- if (m.type === "assistant") {
488767
- const content = sdkMessageContent(m);
488768
- if (!Array.isArray(content))
488769
- continue;
488770
- for (const block2 of content) {
488771
- if (isToolUseBlock(block2) && block2.name === EXIT_PLAN_MODE_V2_TOOL_NAME) {
488772
- this.exitPlanCalls.push(block2.id);
488773
- }
488774
- }
488775
- } else if (m.type === "user") {
488776
- const content = sdkMessageContent(m);
488777
- if (!Array.isArray(content))
488778
- continue;
488779
- for (const block2 of content) {
488780
- if (isToolResultBlockParam(block2)) {
488781
- this.results.set(block2.tool_use_id, block2);
488782
- }
488783
- }
488784
- } else if (m.type === "result" && m.subtype !== "success") {
488785
- this.terminated = { subtype: m.subtype };
488786
- }
488787
- }
488788
- const shouldScan = newEvents.length > 0 || this.rescanAfterRejection;
488789
- this.rescanAfterRejection = false;
488790
- let found = null;
488791
- if (shouldScan) {
488792
- for (let i3 = this.exitPlanCalls.length - 1;i3 >= 0; i3--) {
488793
- const id = this.exitPlanCalls[i3];
488794
- if (this.rejectedIds.has(id))
488795
- continue;
488796
- const tr = this.results.get(id);
488797
- if (!tr) {
488798
- found = { kind: "pending" };
488799
- } else if (tr.is_error === true) {
488800
- const teleportPlan = extractTeleportPlan(tr.content);
488801
- found = teleportPlan !== null ? { kind: "teleport", plan: teleportPlan } : { kind: "rejected", id };
488802
- } else {
488803
- found = { kind: "approved", plan: extractApprovedPlan(tr.content) };
488804
- }
488805
- break;
488806
- }
488807
- if (found?.kind === "approved" || found?.kind === "teleport")
488808
- return found;
488809
- }
488810
- if (found?.kind === "rejected") {
488811
- this.rejectedIds.add(found.id);
488812
- this.rescanAfterRejection = true;
488813
- }
488814
- if (this.terminated) {
488815
- return { kind: "terminated", subtype: this.terminated.subtype };
488816
- }
488817
- if (found?.kind === "rejected") {
488818
- return found;
488819
- }
488820
- if (found?.kind === "pending") {
488821
- this.everSeenPending = true;
488822
- return found;
488823
- }
488824
- return { kind: "unchanged" };
488825
- }
488826
- }
488827
- async function pollForApprovedExitPlanMode(sessionId, timeoutMs, onPhaseChange, shouldStop) {
488828
- const deadline = Date.now() + timeoutMs;
488829
- const scanner = new ExitPlanModeScanner;
488830
- let cursor = null;
488831
- let failures = 0;
488832
- let lastPhase = "running";
488833
- while (Date.now() < deadline) {
488834
- if (shouldStop?.()) {
488835
- throw new UltraplanPollError("poll stopped by caller", "stopped", scanner.rejectCount);
488836
- }
488837
- let newEvents;
488838
- let sessionStatus;
488839
- try {
488840
- const resp = await pollRemoteSessionEvents(sessionId, cursor);
488841
- newEvents = resp.newEvents;
488842
- cursor = resp.lastEventId;
488843
- sessionStatus = resp.sessionStatus;
488844
- failures = 0;
488845
- } catch (e) {
488846
- const transient = isTransientNetworkError(e);
488847
- if (!transient || ++failures >= MAX_CONSECUTIVE_FAILURES) {
488848
- throw new UltraplanPollError(e instanceof Error ? e.message : String(e), "network_or_unknown", scanner.rejectCount, { cause: e });
488849
- }
488850
- await sleep2(POLL_INTERVAL_MS2);
488851
- continue;
488852
- }
488853
- let result;
488854
- try {
488855
- result = scanner.ingest(newEvents);
488856
- } catch (e) {
488857
- throw new UltraplanPollError(e instanceof Error ? e.message : String(e), "extract_marker_missing", scanner.rejectCount);
488858
- }
488859
- if (result.kind === "approved") {
488860
- return {
488861
- plan: result.plan,
488862
- rejectCount: scanner.rejectCount,
488863
- executionTarget: "remote"
488864
- };
488865
- }
488866
- if (result.kind === "teleport") {
488867
- return {
488868
- plan: result.plan,
488869
- rejectCount: scanner.rejectCount,
488870
- executionTarget: "local"
488871
- };
488872
- }
488873
- if (result.kind === "terminated") {
488874
- throw new UltraplanPollError(`remote session ended (${result.subtype}) before plan approval`, "terminated", scanner.rejectCount);
488875
- }
488876
- const quietIdle = (sessionStatus === "idle" || sessionStatus === "requires_action") && newEvents.length === 0;
488877
- const phase = scanner.hasPendingPlan ? "plan_ready" : quietIdle ? "needs_input" : "running";
488878
- if (phase !== lastPhase) {
488879
- logForDebugging(`[ultraplan] phase ${lastPhase} \u2192 ${phase}`);
488880
- lastPhase = phase;
488881
- onPhaseChange?.(phase);
488882
- }
488883
- await sleep2(POLL_INTERVAL_MS2);
488884
- }
488885
- throw new UltraplanPollError(scanner.everSeenPending ? `no approval after ${timeoutMs / 1000}s` : `ExitPlanMode never reached after ${timeoutMs / 1000}s (the remote container failed to start, or session ID mismatch?)`, scanner.everSeenPending ? "timeout_pending" : "timeout_no_plan", scanner.rejectCount);
488886
- }
488887
- function contentToText3(content) {
488888
- return typeof content === "string" ? content : Array.isArray(content) ? content.map((b) => ("text" in b) ? b.text : "").join("") : "";
488889
- }
488890
- function extractTeleportPlan(content) {
488891
- const text2 = contentToText3(content);
488892
- const marker = `${ULTRAPLAN_TELEPORT_SENTINEL}
488893
- `;
488894
- const idx = text2.indexOf(marker);
488895
- if (idx === -1)
488896
- return null;
488897
- return text2.slice(idx + marker.length).trimEnd();
488898
- }
488899
- function extractApprovedPlan(content) {
488900
- const text2 = contentToText3(content);
488901
- const markers = [
488902
- `## Approved Plan (edited by user):
488903
- `,
488904
- `## Approved Plan:
488905
- `
488906
- ];
488907
- for (const marker of markers) {
488908
- const idx = text2.indexOf(marker);
488909
- if (idx !== -1) {
488910
- return text2.slice(idx + marker.length).trimEnd();
488911
- }
488912
- }
488913
- throw new Error(`ExitPlanMode approved but tool_result has no "## Approved Plan:" marker \u2014 remote may have hit the empty-plan or isAgent branch. Content preview: ${text2.slice(0, 200)}`);
488914
- }
488915
- var POLL_INTERVAL_MS2 = 3000, MAX_CONSECUTIVE_FAILURES = 5, UltraplanPollError, ULTRAPLAN_TELEPORT_SENTINEL = "__ULTRAPLAN_TELEPORT_LOCAL__";
488916
- var init_ccrSession = __esm(() => {
488917
- init_debug();
488918
- init_api2();
488919
- init_teleport();
488920
- UltraplanPollError = class UltraplanPollError extends Error {
488921
- reason;
488922
- rejectCount;
488923
- constructor(message, reason, rejectCount, options2) {
488924
- super(message, options2);
488925
- this.reason = reason;
488926
- this.rejectCount = rejectCount;
488927
- this.name = "UltraplanPollError";
488928
- }
488929
- };
488930
- });
488931
-
488932
- // src/utils/ultraplan/prompt.txt
488933
- var require_prompt = __commonJS((exports, module) => {
488934
- module.exports = `<system-reminder>
488935
- You are preparing a careful implementation plan for the user's request.
488936
-
488937
- Clarify the goal, inspect the relevant repository context, identify risks, and produce a concrete plan that can be reviewed before execution. Keep the plan focused on the requested change and avoid unrelated refactors.
488938
- </system-reminder>
488939
- `;
488940
- });
488941
-
488942
- // src/commands/ultraplan.tsx
488943
- function getUltraplanModel() {
488944
- return getFeatureValue_CACHED_MAY_BE_STALE("tengu_ultraplan_model", ALL_MODEL_CONFIGS.modelO46.firstParty);
488945
- }
488946
- function buildUltraplanPrompt(blurb, seedPlan) {
488947
- const parts = [];
488948
- if (seedPlan) {
488949
- parts.push("Here is a draft plan to refine:", "", seedPlan, "");
488950
- }
488951
- parts.push(ULTRAPLAN_INSTRUCTIONS);
488952
- if (blurb) {
488953
- parts.push("", blurb);
488954
- }
488955
- return parts.join(`
488956
- `);
488957
- }
488958
- function startDetachedPoll(taskId, sessionId, url3, getAppState, setAppState) {
488959
- const started = Date.now();
488960
- let failed = false;
488961
- (async () => {
488962
- try {
488963
- const {
488964
- plan,
488965
- rejectCount,
488966
- executionTarget
488967
- } = await pollForApprovedExitPlanMode(sessionId, ULTRAPLAN_TIMEOUT_MS, (phase) => {
488968
- if (phase === "needs_input")
488969
- logEvent("tengu_ultraplan_awaiting_input", {});
488970
- updateTaskState(taskId, setAppState, (t) => {
488971
- if (t.status !== "running")
488972
- return t;
488973
- const next = phase === "running" ? undefined : phase;
488974
- return t.ultraplanPhase === next ? t : {
488975
- ...t,
488976
- ultraplanPhase: next
488977
- };
488978
- });
488979
- }, () => getAppState().tasks?.[taskId]?.status !== "running");
488980
- logEvent("tengu_ultraplan_approved", {
488981
- duration_ms: Date.now() - started,
488982
- plan_length: plan.length,
488983
- reject_count: rejectCount,
488984
- execution_target: executionTarget
488985
- });
488986
- if (executionTarget === "remote") {
488987
- const task = getAppState().tasks?.[taskId];
488988
- if (task?.status !== "running")
488989
- return;
488990
- updateTaskState(taskId, setAppState, (t) => t.status !== "running" ? t : {
488991
- ...t,
488992
- status: "completed",
488993
- endTime: Date.now()
488994
- });
488995
- setAppState((prev) => prev.ultraplanSessionUrl === url3 ? {
488996
- ...prev,
488997
- ultraplanSessionUrl: undefined
488998
- } : prev);
488999
- enqueuePendingNotification({
489000
- value: [`Ultraplan approved \u2014 executing in UR on the web. Follow along at: ${url3}`, "", "Results will land as a pull request when the remote session finishes. There is nothing to do here."].join(`
489001
- `),
489002
- mode: "task-notification"
489003
- });
489004
- } else {
489005
- setAppState((prev) => {
489006
- const task = prev.tasks?.[taskId];
489007
- if (!task || task.status !== "running")
489008
- return prev;
489009
- return {
489010
- ...prev,
489011
- ultraplanPendingChoice: {
489012
- plan,
489013
- sessionId,
489014
- taskId
489015
- }
489016
- };
489017
- });
489018
- }
489019
- } catch (e) {
489020
- const task = getAppState().tasks?.[taskId];
489021
- if (task?.status !== "running")
489022
- return;
489023
- failed = true;
489024
- logEvent("tengu_ultraplan_failed", {
489025
- duration_ms: Date.now() - started,
489026
- reason: e instanceof UltraplanPollError ? e.reason : "network_or_unknown",
489027
- reject_count: e instanceof UltraplanPollError ? e.rejectCount : undefined
489028
- });
489029
- enqueuePendingNotification({
489030
- value: `Ultraplan failed: ${errorMessage2(e)}
489031
-
489032
- Session: ${url3}`,
489033
- mode: "task-notification"
489034
- });
489035
- archiveRemoteSession(sessionId).catch((e2) => logForDebugging(`ultraplan archive failed: ${String(e2)}`));
489036
- setAppState((prev) => prev.ultraplanSessionUrl === url3 ? {
489037
- ...prev,
489038
- ultraplanSessionUrl: undefined
489039
- } : prev);
489040
- } finally {
489041
- if (failed) {
489042
- updateTaskState(taskId, setAppState, (t) => t.status !== "running" ? t : {
489043
- ...t,
489044
- status: "failed",
489045
- endTime: Date.now()
489046
- });
489047
- }
489048
- }
489049
- })();
489050
- }
489051
- function buildLaunchMessage(disconnectedBridge) {
489052
- const prefix = disconnectedBridge ? `${REMOTE_CONTROL_DISCONNECTED_MSG} ` : "";
489053
- return `${DIAMOND_OPEN} ultraplan
489054
- ${prefix}Starting UR on the web\u2026`;
489055
- }
489056
- function buildSessionReadyMessage(url3) {
489057
- return `${DIAMOND_OPEN} ultraplan \xB7 Monitor progress in UR on the web ${url3}
489058
- You can continue working \u2014 when the ${DIAMOND_OPEN} fills, press \u2193 to view results`;
489059
- }
489060
- function buildAlreadyActiveMessage(url3) {
489061
- return url3 ? `ultraplan: already polling. Open ${url3} to check status, or wait for the plan to land here.` : "ultraplan: already launching. Please wait for the session to start.";
489062
- }
489063
- async function stopUltraplan(taskId, sessionId, setAppState) {
489064
- await RemoteAgentTask.kill(taskId, setAppState);
489065
- setAppState((prev) => prev.ultraplanSessionUrl || prev.ultraplanPendingChoice || prev.ultraplanLaunching ? {
489066
- ...prev,
489067
- ultraplanSessionUrl: undefined,
489068
- ultraplanPendingChoice: undefined,
489069
- ultraplanLaunching: undefined
489070
- } : prev);
489071
- const url3 = getRemoteSessionUrl(sessionId, process.env.SESSION_INGRESS_URL);
489072
- enqueuePendingNotification({
489073
- value: `Ultraplan stopped.
489074
-
489075
- Session: ${url3}`,
489076
- mode: "task-notification"
489077
- });
489078
- enqueuePendingNotification({
489079
- value: "The user stopped the ultraplan session above. Do not respond to the stop notification \u2014 wait for their next message.",
489080
- mode: "task-notification",
489081
- isMeta: true
489082
- });
489083
- }
489084
- async function launchUltraplan(opts) {
489085
- const {
489086
- blurb,
489087
- seedPlan,
489088
- getAppState,
489089
- setAppState,
489090
- signal,
489091
- disconnectedBridge,
489092
- onSessionReady
489093
- } = opts;
489094
- const {
489095
- ultraplanSessionUrl: active2,
489096
- ultraplanLaunching
489097
- } = getAppState();
489098
- if (active2 || ultraplanLaunching) {
489099
- logEvent("tengu_ultraplan_create_failed", {
489100
- reason: active2 ? "already_polling" : "already_launching"
489101
- });
489102
- return buildAlreadyActiveMessage(active2);
489103
- }
489104
- if (!blurb && !seedPlan) {
489105
- return "Advanced remote planning needs a prompt or an approved draft plan.";
489106
- }
489107
- setAppState((prev) => prev.ultraplanLaunching ? prev : {
489108
- ...prev,
489109
- ultraplanLaunching: true
489110
- });
489111
- launchDetached({
489112
- blurb,
489113
- seedPlan,
489114
- getAppState,
489115
- setAppState,
489116
- signal,
489117
- onSessionReady
489118
- });
489119
- return buildLaunchMessage(disconnectedBridge);
489120
- }
489121
- async function launchDetached(opts) {
489122
- const {
489123
- blurb,
489124
- seedPlan,
489125
- getAppState,
489126
- setAppState,
489127
- signal,
489128
- onSessionReady
489129
- } = opts;
489130
- let sessionId;
489131
- try {
489132
- const model = getUltraplanModel();
489133
- const eligibility = await checkRemoteAgentEligibility();
489134
- if (!eligibility.eligible) {
489135
- logEvent("tengu_ultraplan_create_failed", {
489136
- reason: "precondition",
489137
- precondition_errors: eligibility.errors.map((e) => e.type).join(",")
489138
- });
489139
- const reasons = eligibility.errors.map(formatPreconditionError).join(`
489140
- `);
489141
- enqueuePendingNotification({
489142
- value: `ultraplan: cannot launch remote session \u2014
489143
- ${reasons}`,
489144
- mode: "task-notification"
489145
- });
489146
- return;
489147
- }
489148
- const prompt = buildUltraplanPrompt(blurb, seedPlan);
489149
- let bundleFailMsg;
489150
- const session2 = await teleportToRemote({
489151
- initialMessage: prompt,
489152
- description: blurb || "Refine local plan",
489153
- model,
489154
- permissionMode: "plan",
489155
- ultraplan: true,
489156
- signal,
489157
- useDefaultEnvironment: true,
489158
- onBundleFail: (msg) => {
489159
- bundleFailMsg = msg;
489160
- }
489161
- });
489162
- if (!session2) {
489163
- logEvent("tengu_ultraplan_create_failed", {
489164
- reason: bundleFailMsg ? "bundle_fail" : "teleport_null"
489165
- });
489166
- enqueuePendingNotification({
489167
- value: `ultraplan: session creation failed${bundleFailMsg ? ` \u2014 ${bundleFailMsg}` : ""}. See --debug for details.`,
489168
- mode: "task-notification"
489169
- });
489170
- return;
489171
- }
489172
- sessionId = session2.id;
489173
- const url3 = getRemoteSessionUrl(session2.id, process.env.SESSION_INGRESS_URL);
489174
- setAppState((prev) => ({
489175
- ...prev,
489176
- ultraplanSessionUrl: url3,
489177
- ultraplanLaunching: undefined
489178
- }));
489179
- onSessionReady?.(buildSessionReadyMessage(url3));
489180
- logEvent("tengu_ultraplan_launched", {
489181
- has_seed_plan: Boolean(seedPlan),
489182
- model
489183
- });
489184
- const {
489185
- taskId
489186
- } = registerRemoteAgentTask({
489187
- remoteTaskType: "ultraplan",
489188
- session: {
489189
- id: session2.id,
489190
- title: blurb || "Ultraplan"
489191
- },
489192
- command: blurb,
489193
- context: {
489194
- abortController: new AbortController,
489195
- getAppState,
489196
- setAppState
489197
- },
489198
- isUltraplan: true
489199
- });
489200
- startDetachedPoll(taskId, session2.id, url3, getAppState, setAppState);
489201
- } catch (e) {
489202
- logError2(e);
489203
- logEvent("tengu_ultraplan_create_failed", {
489204
- reason: "unexpected_error"
489205
- });
489206
- enqueuePendingNotification({
489207
- value: `ultraplan: unexpected error \u2014 ${errorMessage2(e)}`,
489208
- mode: "task-notification"
489209
- });
489210
- if (sessionId) {
489211
- archiveRemoteSession(sessionId).catch((err2) => logForDebugging("ultraplan: failed to archive orphaned session", err2));
489212
- setAppState((prev) => prev.ultraplanSessionUrl ? {
489213
- ...prev,
489214
- ultraplanSessionUrl: undefined
489215
- } : prev);
489216
- }
489217
- } finally {
489218
- setAppState((prev) => prev.ultraplanLaunching ? {
489219
- ...prev,
489220
- ultraplanLaunching: undefined
489221
- } : prev);
489222
- }
489223
- }
489224
- var ULTRAPLAN_TIMEOUT_MS, _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS;
489225
- var init_ultraplan = __esm(() => {
489226
- init_types14();
489227
- init_figures2();
489228
- init_growthbook();
489229
- init_analytics();
489230
- init_RemoteAgentTask();
489231
- init_debug();
489232
- init_errors();
489233
- init_log2();
489234
- init_messageQueueManager();
489235
- init_configs();
489236
- init_framework();
489237
- init_teleport();
489238
- init_ccrSession();
489239
- ULTRAPLAN_TIMEOUT_MS = 30 * 60 * 1000;
489240
- _rawPrompt = require_prompt();
489241
- DEFAULT_INSTRUCTIONS = (typeof _rawPrompt === "string" ? _rawPrompt : _rawPrompt.default).trimEnd();
489242
- ULTRAPLAN_INSTRUCTIONS = DEFAULT_INSTRUCTIONS;
489243
- });
489244
-
489245
488728
  // src/components/tasks/renderToolActivity.tsx
489246
488729
  function renderToolActivity(activity, tools, theme) {
489247
488730
  const tool = findToolByName(tools, activity.toolName);
@@ -491516,445 +490999,6 @@ var init_mappers = __esm(() => {
491516
490999
  });
491517
491000
 
491518
491001
  // src/components/tasks/RemoteSessionDetailDialog.tsx
491519
- function formatToolUseSummary(name, input) {
491520
- if (name === EXIT_PLAN_MODE_V2_TOOL_NAME) {
491521
- return "Review the plan in UR on the web";
491522
- }
491523
- if (!input || typeof input !== "object")
491524
- return name;
491525
- if (name === ASK_USER_QUESTION_TOOL_NAME && "questions" in input) {
491526
- const qs = input.questions;
491527
- if (Array.isArray(qs) && qs[0] && typeof qs[0] === "object") {
491528
- const q = "question" in qs[0] && typeof qs[0].question === "string" && qs[0].question ? qs[0].question : ("header" in qs[0]) && typeof qs[0].header === "string" ? qs[0].header : null;
491529
- if (q) {
491530
- const oneLine2 = q.replace(/\s+/g, " ").trim();
491531
- return `Answer in browser: ${truncateToWidth(oneLine2, 50)}`;
491532
- }
491533
- }
491534
- }
491535
- for (const v of Object.values(input)) {
491536
- if (typeof v === "string" && v.trim()) {
491537
- const oneLine2 = v.replace(/\s+/g, " ").trim();
491538
- return `${name} ${truncateToWidth(oneLine2, 60)}`;
491539
- }
491540
- }
491541
- return name;
491542
- }
491543
- function UltraplanSessionDetail(t0) {
491544
- const $2 = import_compiler_runtime200.c(70);
491545
- const {
491546
- session: session2,
491547
- onDone,
491548
- onBack,
491549
- onKill
491550
- } = t0;
491551
- const running = session2.status === "running" || session2.status === "pending";
491552
- const phase = session2.ultraplanPhase;
491553
- const statusText = running ? phase ? PHASE_LABEL[phase] : "running" : session2.status;
491554
- const elapsedTime = useElapsedTime(session2.startTime, running, 1000, 0, session2.endTime);
491555
- let spawns = 0;
491556
- let calls = 0;
491557
- let lastBlock = null;
491558
- for (const msg of session2.log) {
491559
- if (msg.type !== "assistant") {
491560
- continue;
491561
- }
491562
- for (const block2 of msg.message.content) {
491563
- if (block2.type !== "tool_use") {
491564
- continue;
491565
- }
491566
- calls++;
491567
- lastBlock = block2;
491568
- if (block2.name === AGENT_TOOL_NAME || block2.name === LEGACY_AGENT_TOOL_NAME) {
491569
- spawns++;
491570
- }
491571
- }
491572
- }
491573
- const t1 = 1 + spawns;
491574
- let t2;
491575
- if ($2[0] !== lastBlock) {
491576
- t2 = lastBlock ? formatToolUseSummary(lastBlock.name, lastBlock.input) : null;
491577
- $2[0] = lastBlock;
491578
- $2[1] = t2;
491579
- } else {
491580
- t2 = $2[1];
491581
- }
491582
- let t3;
491583
- if ($2[2] !== calls || $2[3] !== t1 || $2[4] !== t2) {
491584
- t3 = {
491585
- agentsWorking: t1,
491586
- toolCalls: calls,
491587
- lastToolCall: t2
491588
- };
491589
- $2[2] = calls;
491590
- $2[3] = t1;
491591
- $2[4] = t2;
491592
- $2[5] = t3;
491593
- } else {
491594
- t3 = $2[5];
491595
- }
491596
- const {
491597
- agentsWorking,
491598
- toolCalls,
491599
- lastToolCall
491600
- } = t3;
491601
- let t4;
491602
- if ($2[6] !== session2.sessionId) {
491603
- t4 = getRemoteTaskSessionUrl(session2.sessionId);
491604
- $2[6] = session2.sessionId;
491605
- $2[7] = t4;
491606
- } else {
491607
- t4 = $2[7];
491608
- }
491609
- const sessionUrl = t4;
491610
- let t5;
491611
- if ($2[8] !== onBack || $2[9] !== onDone) {
491612
- t5 = onBack ?? (() => onDone("Remote session details dismissed", {
491613
- display: "system"
491614
- }));
491615
- $2[8] = onBack;
491616
- $2[9] = onDone;
491617
- $2[10] = t5;
491618
- } else {
491619
- t5 = $2[10];
491620
- }
491621
- const goBackOrClose = t5;
491622
- const [confirmingStop, setConfirmingStop] = import_react157.useState(false);
491623
- if (confirmingStop) {
491624
- let t62;
491625
- if ($2[11] === Symbol.for("react.memo_cache_sentinel")) {
491626
- t62 = () => setConfirmingStop(false);
491627
- $2[11] = t62;
491628
- } else {
491629
- t62 = $2[11];
491630
- }
491631
- let t72;
491632
- if ($2[12] === Symbol.for("react.memo_cache_sentinel")) {
491633
- t72 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedText, {
491634
- dimColor: true,
491635
- children: "This will terminate the UR on the web session."
491636
- }, undefined, false, undefined, this);
491637
- $2[12] = t72;
491638
- } else {
491639
- t72 = $2[12];
491640
- }
491641
- let t82;
491642
- if ($2[13] === Symbol.for("react.memo_cache_sentinel")) {
491643
- t82 = {
491644
- label: "Terminate session",
491645
- value: "stop"
491646
- };
491647
- $2[13] = t82;
491648
- } else {
491649
- t82 = $2[13];
491650
- }
491651
- let t92;
491652
- if ($2[14] === Symbol.for("react.memo_cache_sentinel")) {
491653
- t92 = [t82, {
491654
- label: "Back",
491655
- value: "back"
491656
- }];
491657
- $2[14] = t92;
491658
- } else {
491659
- t92 = $2[14];
491660
- }
491661
- let t102;
491662
- if ($2[15] !== goBackOrClose || $2[16] !== onKill) {
491663
- t102 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(Dialog, {
491664
- title: "Stop ultraplan?",
491665
- onCancel: t62,
491666
- color: "background",
491667
- children: /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedBox_default, {
491668
- flexDirection: "column",
491669
- gap: 1,
491670
- children: [
491671
- t72,
491672
- /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(Select, {
491673
- options: t92,
491674
- onChange: (v) => {
491675
- if (v === "stop") {
491676
- onKill?.();
491677
- goBackOrClose();
491678
- } else {
491679
- setConfirmingStop(false);
491680
- }
491681
- }
491682
- }, undefined, false, undefined, this)
491683
- ]
491684
- }, undefined, true, undefined, this)
491685
- }, undefined, false, undefined, this);
491686
- $2[15] = goBackOrClose;
491687
- $2[16] = onKill;
491688
- $2[17] = t102;
491689
- } else {
491690
- t102 = $2[17];
491691
- }
491692
- return t102;
491693
- }
491694
- const t6 = phase === "plan_ready" ? DIAMOND_FILLED : DIAMOND_OPEN;
491695
- let t7;
491696
- if ($2[18] !== t6) {
491697
- t7 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedText, {
491698
- color: "background",
491699
- children: [
491700
- t6,
491701
- " "
491702
- ]
491703
- }, undefined, true, undefined, this);
491704
- $2[18] = t6;
491705
- $2[19] = t7;
491706
- } else {
491707
- t7 = $2[19];
491708
- }
491709
- let t8;
491710
- if ($2[20] === Symbol.for("react.memo_cache_sentinel")) {
491711
- t8 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedText, {
491712
- bold: true,
491713
- children: "ultraplan"
491714
- }, undefined, false, undefined, this);
491715
- $2[20] = t8;
491716
- } else {
491717
- t8 = $2[20];
491718
- }
491719
- let t9;
491720
- if ($2[21] !== elapsedTime || $2[22] !== statusText) {
491721
- t9 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedText, {
491722
- dimColor: true,
491723
- children: [
491724
- " \xB7 ",
491725
- elapsedTime,
491726
- " \xB7 ",
491727
- statusText
491728
- ]
491729
- }, undefined, true, undefined, this);
491730
- $2[21] = elapsedTime;
491731
- $2[22] = statusText;
491732
- $2[23] = t9;
491733
- } else {
491734
- t9 = $2[23];
491735
- }
491736
- let t10;
491737
- if ($2[24] !== t7 || $2[25] !== t9) {
491738
- t10 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedText, {
491739
- children: [
491740
- t7,
491741
- t8,
491742
- t9
491743
- ]
491744
- }, undefined, true, undefined, this);
491745
- $2[24] = t7;
491746
- $2[25] = t9;
491747
- $2[26] = t10;
491748
- } else {
491749
- t10 = $2[26];
491750
- }
491751
- let t11;
491752
- if ($2[27] !== phase) {
491753
- t11 = phase === "plan_ready" && /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedText, {
491754
- color: "success",
491755
- children: [
491756
- figures_default.tick,
491757
- " "
491758
- ]
491759
- }, undefined, true, undefined, this);
491760
- $2[27] = phase;
491761
- $2[28] = t11;
491762
- } else {
491763
- t11 = $2[28];
491764
- }
491765
- let t12;
491766
- if ($2[29] !== agentsWorking) {
491767
- t12 = plural(agentsWorking, "agent");
491768
- $2[29] = agentsWorking;
491769
- $2[30] = t12;
491770
- } else {
491771
- t12 = $2[30];
491772
- }
491773
- const t13 = phase ? AGENT_VERB[phase] : "working";
491774
- let t14;
491775
- if ($2[31] !== toolCalls) {
491776
- t14 = plural(toolCalls, "call");
491777
- $2[31] = toolCalls;
491778
- $2[32] = t14;
491779
- } else {
491780
- t14 = $2[32];
491781
- }
491782
- let t15;
491783
- if ($2[33] !== agentsWorking || $2[34] !== t11 || $2[35] !== t12 || $2[36] !== t13 || $2[37] !== t14 || $2[38] !== toolCalls) {
491784
- t15 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedText, {
491785
- children: [
491786
- t11,
491787
- agentsWorking,
491788
- " ",
491789
- t12,
491790
- " ",
491791
- t13,
491792
- " \xB7 ",
491793
- toolCalls,
491794
- " tool",
491795
- " ",
491796
- t14
491797
- ]
491798
- }, undefined, true, undefined, this);
491799
- $2[33] = agentsWorking;
491800
- $2[34] = t11;
491801
- $2[35] = t12;
491802
- $2[36] = t13;
491803
- $2[37] = t14;
491804
- $2[38] = toolCalls;
491805
- $2[39] = t15;
491806
- } else {
491807
- t15 = $2[39];
491808
- }
491809
- let t16;
491810
- if ($2[40] !== lastToolCall) {
491811
- t16 = lastToolCall && /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedText, {
491812
- dimColor: true,
491813
- children: lastToolCall
491814
- }, undefined, false, undefined, this);
491815
- $2[40] = lastToolCall;
491816
- $2[41] = t16;
491817
- } else {
491818
- t16 = $2[41];
491819
- }
491820
- let t17;
491821
- if ($2[42] !== sessionUrl) {
491822
- t17 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedText, {
491823
- dimColor: true,
491824
- children: sessionUrl
491825
- }, undefined, false, undefined, this);
491826
- $2[42] = sessionUrl;
491827
- $2[43] = t17;
491828
- } else {
491829
- t17 = $2[43];
491830
- }
491831
- let t18;
491832
- if ($2[44] !== sessionUrl || $2[45] !== t17) {
491833
- t18 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(Link, {
491834
- url: sessionUrl,
491835
- children: t17
491836
- }, undefined, false, undefined, this);
491837
- $2[44] = sessionUrl;
491838
- $2[45] = t17;
491839
- $2[46] = t18;
491840
- } else {
491841
- t18 = $2[46];
491842
- }
491843
- let t19;
491844
- if ($2[47] === Symbol.for("react.memo_cache_sentinel")) {
491845
- t19 = {
491846
- label: "Review in UR on the web",
491847
- value: "open"
491848
- };
491849
- $2[47] = t19;
491850
- } else {
491851
- t19 = $2[47];
491852
- }
491853
- let t20;
491854
- if ($2[48] !== onKill || $2[49] !== running) {
491855
- t20 = onKill && running ? [{
491856
- label: "Stop ultraplan",
491857
- value: "stop"
491858
- }] : [];
491859
- $2[48] = onKill;
491860
- $2[49] = running;
491861
- $2[50] = t20;
491862
- } else {
491863
- t20 = $2[50];
491864
- }
491865
- let t21;
491866
- if ($2[51] === Symbol.for("react.memo_cache_sentinel")) {
491867
- t21 = {
491868
- label: "Back",
491869
- value: "back"
491870
- };
491871
- $2[51] = t21;
491872
- } else {
491873
- t21 = $2[51];
491874
- }
491875
- let t22;
491876
- if ($2[52] !== t20) {
491877
- t22 = [t19, ...t20, t21];
491878
- $2[52] = t20;
491879
- $2[53] = t22;
491880
- } else {
491881
- t22 = $2[53];
491882
- }
491883
- let t23;
491884
- if ($2[54] !== goBackOrClose || $2[55] !== onDone || $2[56] !== sessionUrl) {
491885
- t23 = (v_0) => {
491886
- switch (v_0) {
491887
- case "open": {
491888
- openBrowser(sessionUrl);
491889
- onDone();
491890
- return;
491891
- }
491892
- case "stop": {
491893
- setConfirmingStop(true);
491894
- return;
491895
- }
491896
- case "back": {
491897
- goBackOrClose();
491898
- return;
491899
- }
491900
- }
491901
- };
491902
- $2[54] = goBackOrClose;
491903
- $2[55] = onDone;
491904
- $2[56] = sessionUrl;
491905
- $2[57] = t23;
491906
- } else {
491907
- t23 = $2[57];
491908
- }
491909
- let t24;
491910
- if ($2[58] !== t22 || $2[59] !== t23) {
491911
- t24 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(Select, {
491912
- options: t22,
491913
- onChange: t23
491914
- }, undefined, false, undefined, this);
491915
- $2[58] = t22;
491916
- $2[59] = t23;
491917
- $2[60] = t24;
491918
- } else {
491919
- t24 = $2[60];
491920
- }
491921
- let t25;
491922
- if ($2[61] !== t15 || $2[62] !== t16 || $2[63] !== t18 || $2[64] !== t24) {
491923
- t25 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ThemedBox_default, {
491924
- flexDirection: "column",
491925
- gap: 1,
491926
- children: [
491927
- t15,
491928
- t16,
491929
- t18,
491930
- t24
491931
- ]
491932
- }, undefined, true, undefined, this);
491933
- $2[61] = t15;
491934
- $2[62] = t16;
491935
- $2[63] = t18;
491936
- $2[64] = t24;
491937
- $2[65] = t25;
491938
- } else {
491939
- t25 = $2[65];
491940
- }
491941
- let t26;
491942
- if ($2[66] !== goBackOrClose || $2[67] !== t10 || $2[68] !== t25) {
491943
- t26 = /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(Dialog, {
491944
- title: t10,
491945
- onCancel: goBackOrClose,
491946
- color: "background",
491947
- children: t25
491948
- }, undefined, false, undefined, this);
491949
- $2[66] = goBackOrClose;
491950
- $2[67] = t10;
491951
- $2[68] = t25;
491952
- $2[69] = t26;
491953
- } else {
491954
- t26 = $2[69];
491955
- }
491956
- return t26;
491957
- }
491958
491002
  function StagePipeline(t0) {
491959
491003
  const $2 = import_compiler_runtime200.c(15);
491960
491004
  const {
@@ -492437,18 +491481,10 @@ function RemoteSessionDetailDialog({
492437
491481
  const [isTeleporting, setIsTeleporting] = import_react157.useState(false);
492438
491482
  const [teleportError, setTeleportError] = import_react157.useState(null);
492439
491483
  const lastMessages = import_react157.useMemo(() => {
492440
- if (session2.isUltraplan || session2.isRemoteReview)
491484
+ if (session2.isRemoteReview)
492441
491485
  return [];
492442
491486
  return normalizeMessages(toInternalMessages(session2.log)).filter((_) => _.type !== "progress").slice(-3);
492443
491487
  }, [session2]);
492444
- if (session2.isUltraplan) {
492445
- return /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(UltraplanSessionDetail, {
492446
- session: session2,
492447
- onDone,
492448
- onBack,
492449
- onKill
492450
- }, undefined, false, undefined, this);
492451
- }
492452
491488
  if (session2.isRemoteReview) {
492453
491489
  return /* @__PURE__ */ jsx_dev_runtime269.jsxDEV(ReviewSessionDetail, {
492454
491490
  session: session2,
@@ -492667,15 +491703,12 @@ function RemoteSessionDetailDialog({
492667
491703
  }, undefined, true, undefined, this)
492668
491704
  }, undefined, false, undefined, this);
492669
491705
  }
492670
- var import_compiler_runtime200, import_react157, jsx_dev_runtime269, PHASE_LABEL, AGENT_VERB, STAGES, STAGE_LABELS;
491706
+ var import_compiler_runtime200, import_react157, jsx_dev_runtime269, STAGES, STAGE_LABELS;
492671
491707
  var init_RemoteSessionDetailDialog = __esm(() => {
492672
- init_figures();
492673
491708
  init_figures2();
492674
491709
  init_useElapsedTime();
492675
491710
  init_ink2();
492676
491711
  init_RemoteAgentTask();
492677
- init_constants2();
492678
- init_prompt();
492679
491712
  init_browser();
492680
491713
  init_errors();
492681
491714
  init_format2();
@@ -492692,14 +491725,6 @@ var init_RemoteSessionDetailDialog = __esm(() => {
492692
491725
  import_compiler_runtime200 = __toESM(require_compiler_runtime(), 1);
492693
491726
  import_react157 = __toESM(require_react(), 1);
492694
491727
  jsx_dev_runtime269 = __toESM(require_jsx_dev_runtime(), 1);
492695
- PHASE_LABEL = {
492696
- needs_input: "input required",
492697
- plan_ready: "ready"
492698
- };
492699
- AGENT_VERB = {
492700
- needs_input: "waiting",
492701
- plan_ready: "done"
492702
- };
492703
491728
  STAGES = ["finding", "verifying", "synthesizing"];
492704
491729
  STAGE_LABELS = {
492705
491730
  finding: "Find",
@@ -493362,11 +492387,7 @@ function BackgroundTasksDialog({
493362
492387
  } else if (currentSelection_0.type === "dream" && currentSelection_0.status === "running") {
493363
492388
  killDreamTask(currentSelection_0.id);
493364
492389
  } else if (currentSelection_0.type === "remote_agent" && currentSelection_0.status === "running") {
493365
- if (currentSelection_0.task.isUltraplan) {
493366
- stopUltraplan(currentSelection_0.id, currentSelection_0.task.sessionId, setAppState);
493367
- } else {
493368
- killRemoteAgentTask(currentSelection_0.id);
493369
- }
492390
+ killRemoteAgentTask(currentSelection_0.id);
493370
492391
  }
493371
492392
  }
493372
492393
  if (e.key === "f") {
@@ -493459,7 +492480,7 @@ function BackgroundTasksDialog({
493459
492480
  onDone,
493460
492481
  toolUseContext,
493461
492482
  onBack: goBackToList,
493462
- onKill: task_0.status !== "running" ? undefined : task_0.isUltraplan ? () => void stopUltraplan(task_0.id, task_0.sessionId, setAppState) : () => void killRemoteAgentTask(task_0.id)
492483
+ onKill: task_0.status !== "running" ? undefined : () => void killRemoteAgentTask(task_0.id)
493463
492484
  }, `session-${task_0.id}`, false, undefined, this);
493464
492485
  case "in_process_teammate":
493465
492486
  return /* @__PURE__ */ jsx_dev_runtime271.jsxDEV(InProcessTeammateDetailDialog, {
@@ -493983,7 +493004,6 @@ var init_BackgroundTasksDialog = __esm(() => {
493983
493004
  init_LocalAgentTask();
493984
493005
  init_LocalShellTask();
493985
493006
  init_RemoteAgentTask();
493986
- init_ultraplan();
493987
493007
  init_overlayContext();
493988
493008
  init_ink2();
493989
493009
  init_useKeybinding();
@@ -497480,7 +496500,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
497480
496500
  if (spec.name !== specName) {
497481
496501
  throw new Error("Agentic CI workflow spec name does not match");
497482
496502
  }
497483
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.0" : "1.80.0");
496503
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.2" : "1.80.2");
497484
496504
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
497485
496505
  throw new Error("invalid ur-agent package version");
497486
496506
  }
@@ -498473,7 +497493,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
498473
497493
  path: ".github/workflows/ur.yml",
498474
497494
  root: "project",
498475
497495
  content: compileAgenticCiWorkflow("default", {
498476
- packageVersion: typeof MACRO !== "undefined" ? "1.80.0" : "1.80.0"
497496
+ packageVersion: typeof MACRO !== "undefined" ? "1.80.2" : "1.80.2"
498477
497497
  })
498478
497498
  },
498479
497499
  {
@@ -498536,7 +497556,7 @@ function value(tokens, flag) {
498536
497556
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
498537
497557
  }
498538
497558
  function cliVersion() {
498539
- return typeof MACRO !== "undefined" ? "1.80.0" : "1.80.0";
497559
+ return typeof MACRO !== "undefined" ? "1.80.2" : "1.80.2";
498540
497560
  }
498541
497561
  function workflowPath(cwd2) {
498542
497562
  return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -504392,7 +503412,7 @@ function createAcpStdioApp(deps) {
504392
503412
  }
504393
503413
  },
504394
503414
  authMethods: [],
504395
- agentInfo: { name: "UR-Nexus", version: "1.80.0" }
503415
+ agentInfo: { name: "UR-Nexus", version: "1.80.2" }
504396
503416
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
504397
503417
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
504398
503418
  await runtime2.announce({
@@ -504489,7 +503509,7 @@ function createAcpStdioAgent(deps) {
504489
503509
  }
504490
503510
  },
504491
503511
  authMethods: [],
504492
- agentInfo: { name: "UR-Nexus", version: "1.80.0" }
503512
+ agentInfo: { name: "UR-Nexus", version: "1.80.2" }
504493
503513
  });
504494
503514
  return;
504495
503515
  case "authenticate":
@@ -709490,7 +708510,7 @@ var init_agentDisplay = __esm(() => {
709490
708510
 
709491
708511
  // src/components/agents/types.ts
709492
708512
  var AGENT_PATHS;
709493
- var init_types15 = __esm(() => {
708513
+ var init_types14 = __esm(() => {
709494
708514
  AGENT_PATHS = {
709495
708515
  FOLDER_NAME: ".ur",
709496
708516
  AGENTS_DIR: "agents"
@@ -709637,7 +708657,7 @@ var init_agentFileUtils = __esm(() => {
709637
708657
  init_cwd2();
709638
708658
  init_envUtils();
709639
708659
  init_errors();
709640
- init_types15();
708660
+ init_types14();
709641
708661
  });
709642
708662
 
709643
708663
  // src/components/agents/AgentDetail.tsx
@@ -715375,7 +714395,7 @@ var init_plugin2 = __esm(() => {
715375
714395
 
715376
714396
  // src/services/settingsSync/types.ts
715377
714397
  var UserSyncContentSchema, UserSyncDataSchema;
715378
- var init_types16 = __esm(() => {
714398
+ var init_types15 = __esm(() => {
715379
714399
  init_v4();
715380
714400
  UserSyncContentSchema = lazySchema(() => exports_external.object({
715381
714401
  entries: exports_external.record(exports_external.string(), exports_external.string())
@@ -715407,7 +714427,7 @@ var init_settingsSync = __esm(() => {
715407
714427
  init_growthbook();
715408
714428
  init_analytics();
715409
714429
  init_withRetry();
715410
- init_types16();
714430
+ init_types15();
715411
714431
  MAX_FILE_SIZE_BYTES3 = 500 * 1024;
715412
714432
  });
715413
714433
 
@@ -715715,7 +714735,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
715715
714735
  smapsRollup,
715716
714736
  platform: process.platform,
715717
714737
  nodeVersion: process.version,
715718
- ccVersion: "1.80.0"
714738
+ ccVersion: "1.80.2"
715719
714739
  };
715720
714740
  }
715721
714741
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -715820,6 +714840,15 @@ var init_heapdump2 = __esm(() => {
715820
714840
  heapdump_default = heapDump;
715821
714841
  });
715822
714842
 
714843
+ // src/bridge/types.ts
714844
+ var DEFAULT_SESSION_TIMEOUT_MS, BRIDGE_LOGIN_INSTRUCTION = "Remote Control is only available with ur.com subscriptions. Please use `/login` to sign in with your ur.com account.", BRIDGE_LOGIN_ERROR;
714845
+ var init_types16 = __esm(() => {
714846
+ DEFAULT_SESSION_TIMEOUT_MS = 24 * 60 * 60 * 1000;
714847
+ BRIDGE_LOGIN_ERROR = `Error: You must be logged in to use Remote Control.
714848
+
714849
+ ` + BRIDGE_LOGIN_INSTRUCTION;
714850
+ });
714851
+
715823
714852
  // src/bridge/bridgeApi.ts
715824
714853
  function validateBridgeId(id, label) {
715825
714854
  if (!id || !SAFE_ID_PATTERN.test(id)) {
@@ -716061,7 +715090,7 @@ var BETA_HEADER = "environments-2025-11-01", SAFE_ID_PATTERN, BridgeFatalError;
716061
715090
  var init_bridgeApi = __esm(() => {
716062
715091
  init_axios2();
716063
715092
  init_debugUtils();
716064
- init_types14();
715093
+ init_types16();
716065
715094
  SAFE_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
716066
715095
  BridgeFatalError = class BridgeFatalError extends Error {
716067
715096
  status;
@@ -716295,7 +715324,7 @@ var init_bridge_kick = __esm(() => {
716295
715324
  var call154 = async () => {
716296
715325
  return {
716297
715326
  type: "text",
716298
- value: "1.80.0"
715327
+ value: "1.80.2"
716299
715328
  };
716300
715329
  }, version2, version_default;
716301
715330
  var init_version = __esm(() => {
@@ -727538,7 +726567,7 @@ function generateHtmlReport(data, insights) {
727538
726567
  </html>`;
727539
726568
  }
727540
726569
  function buildExportData(data, insights, facets, remoteStats) {
727541
- const version3 = typeof MACRO !== "undefined" ? "1.80.0" : "unknown";
726570
+ const version3 = typeof MACRO !== "undefined" ? "1.80.2" : "unknown";
727542
726571
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
727543
726572
  const facets_summary = {
727544
726573
  total: facets.size,
@@ -731851,7 +730880,7 @@ var init_sessionStorage = __esm(() => {
731851
730880
  init_settings2();
731852
730881
  init_slowOperations();
731853
730882
  init_uuid();
731854
- VERSION7 = typeof MACRO !== "undefined" ? "1.80.0" : "unknown";
730883
+ VERSION7 = typeof MACRO !== "undefined" ? "1.80.2" : "unknown";
731855
730884
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
731856
730885
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
731857
730886
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -733066,7 +732095,7 @@ var init_filesystem = __esm(() => {
733066
732095
  });
733067
732096
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
733068
732097
  const nonce = randomBytes24(16).toString("hex");
733069
- return join243(getURTempDir(), "bundled-skills", "1.80.0", nonce);
732098
+ return join243(getURTempDir(), "bundled-skills", "1.80.2", nonce);
733070
732099
  });
733071
732100
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
733072
732101
  });
@@ -739455,7 +738484,7 @@ function computeFingerprint(messageText2, version3) {
739455
738484
  }
739456
738485
  function computeFingerprintFromMessages(messages) {
739457
738486
  const firstMessageText = extractFirstMessageText(messages);
739458
- return computeFingerprint(firstMessageText, "1.80.0");
738487
+ return computeFingerprint(firstMessageText, "1.80.2");
739459
738488
  }
739460
738489
  var FINGERPRINT_SALT = "59cf53e54c78";
739461
738490
  var init_fingerprint = () => {};
@@ -741380,7 +740409,7 @@ async function sideQuery(opts) {
741380
740409
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
741381
740410
  }
741382
740411
  const messageText2 = extractFirstUserMessageText(messages);
741383
- const fingerprint2 = computeFingerprint(messageText2, "1.80.0");
740412
+ const fingerprint2 = computeFingerprint(messageText2, "1.80.2");
741384
740413
  const attributionHeader = getAttributionHeader(fingerprint2);
741385
740414
  const systemBlocks = [
741386
740415
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -745305,8 +744334,7 @@ function externalMetadataToAppState(metadata) {
745305
744334
  ...prev.toolPermissionContext,
745306
744335
  mode: permissionModeFromString(metadata.permission_mode)
745307
744336
  }
745308
- } : {},
745309
- ...typeof metadata.is_ultraplan_mode === "boolean" ? { isUltraplanMode: metadata.is_ultraplan_mode } : {}
744337
+ } : {}
745310
744338
  });
745311
744339
  }
745312
744340
  function onChangeAppState({
@@ -745319,10 +744347,8 @@ function onChangeAppState({
745319
744347
  const prevExternal = toExternalPermissionMode(prevMode);
745320
744348
  const newExternal = toExternalPermissionMode(newMode);
745321
744349
  if (prevExternal !== newExternal) {
745322
- const isUltraplan = newExternal === "plan" && newState.isUltraplanMode && !oldState.isUltraplanMode ? true : null;
745323
744350
  notifySessionMetadataChanged({
745324
- permission_mode: newExternal,
745325
- is_ultraplan_mode: isUltraplan
744351
+ permission_mode: newExternal
745326
744352
  });
745327
744353
  }
745328
744354
  notifyPermissionModeChanged(newMode);
@@ -746217,7 +745243,7 @@ function buildSystemInitMessage(inputs) {
746217
745243
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
746218
745244
  apiKeySource: getURHQApiKeyWithSource().source,
746219
745245
  betas: getSdkBetas(),
746220
- ur_version: "1.80.0",
745246
+ ur_version: "1.80.2",
746221
745247
  output_style: outputStyle,
746222
745248
  agents: inputs.agents.map((agent2) => agent2.agentType),
746223
745249
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -753773,7 +752799,6 @@ function ExitPlanModePermissionRequest({
753773
752799
  }) {
753774
752800
  const toolPermissionContext = useAppState((s) => s.toolPermissionContext);
753775
752801
  const setAppState = useSetAppState();
753776
- const store2 = useAppStateStore();
753777
752802
  const {
753778
752803
  addNotification
753779
752804
  } = useNotifications();
@@ -753781,9 +752806,6 @@ function ExitPlanModePermissionRequest({
753781
752806
  const [pastedContents, setPastedContents] = import_react214.useState({});
753782
752807
  const nextPasteIdRef = import_react214.useRef(0);
753783
752808
  const showClearContext = useAppState((s) => s.settings.showClearContextOnPlanAccept) ?? false;
753784
- const ultraplanSessionUrl = useAppState((s) => s.ultraplanSessionUrl);
753785
- const ultraplanLaunching = useAppState((s) => s.ultraplanLaunching);
753786
- const showUltraplan = false;
753787
752809
  const usage30 = toolUseConfirm.assistantMessage.message.usage;
753788
752810
  const {
753789
752811
  mode: mode2,
@@ -753792,12 +752814,11 @@ function ExitPlanModePermissionRequest({
753792
752814
  } = toolPermissionContext;
753793
752815
  const options5 = import_react214.useMemo(() => buildPlanApprovalOptions({
753794
752816
  showClearContext,
753795
- showUltraplan,
753796
752817
  usedPercent: showClearContext ? getContextUsedPercent(usage30, mode2) : null,
753797
752818
  isAutoModeAvailable,
753798
752819
  isBypassPermissionsModeAvailable,
753799
752820
  onFeedbackChange: setPlanFeedback
753800
- }), [showClearContext, showUltraplan, usage30, mode2, isAutoModeAvailable, isBypassPermissionsModeAvailable]);
752821
+ }), [showClearContext, usage30, mode2, isAutoModeAvailable, isBypassPermissionsModeAvailable]);
753801
752822
  function onImagePaste(base64Image, mediaType, filename, dimensions, _sourcePath) {
753802
752823
  const pasteId = nextPasteIdRef.current++;
753803
752824
  const newContent = {
@@ -753895,28 +752916,6 @@ function ExitPlanModePermissionRequest({
753895
752916
  async function handleResponse(value2) {
753896
752917
  const trimmedFeedback = planFeedback.trim();
753897
752918
  const acceptFeedback = trimmedFeedback || undefined;
753898
- if (value2 === "ultraplan") {
753899
- logEvent("tengu_plan_exit", {
753900
- planLengthChars: currentPlan.length,
753901
- outcome: "ultraplan",
753902
- interviewPhaseEnabled: isPlanModeInterviewPhaseEnabled(),
753903
- planStructureVariant
753904
- });
753905
- onDone();
753906
- onReject();
753907
- toolUseConfirm.onReject("Plan being refined via Ultraplan \u2014 please wait for the result.");
753908
- launchUltraplan({
753909
- blurb: "",
753910
- seedPlan: currentPlan,
753911
- getAppState: store2.getState,
753912
- setAppState: store2.setState,
753913
- signal: new AbortController().signal
753914
- }).then((msg) => enqueuePendingNotification({
753915
- value: msg,
753916
- mode: "task-notification"
753917
- })).catch(logError2);
753918
- return;
753919
- }
753920
752919
  const updatedInput = isV2 && !planEditedLocally ? {} : {
753921
752920
  plan: currentPlan
753922
752921
  };
@@ -754339,7 +753338,6 @@ ${currentPlan}${verificationInstruction}${transcriptHint}${teamHint}${feedbackSu
754339
753338
  }
754340
753339
  function buildPlanApprovalOptions({
754341
753340
  showClearContext,
754342
- showUltraplan,
754343
753341
  usedPercent,
754344
753342
  isAutoModeAvailable,
754345
753343
  isBypassPermissionsModeAvailable,
@@ -754375,12 +753373,6 @@ function buildPlanApprovalOptions({
754375
753373
  label: "Yes, manually approve edits",
754376
753374
  value: "yes-default-keep-context"
754377
753375
  });
754378
- if (showUltraplan) {
754379
- options5.push({
754380
- label: "No, refine with Ultraplan on UR on the web",
754381
- value: "ultraplan"
754382
- });
754383
- }
754384
753376
  options5.push({
754385
753377
  type: "input",
754386
753378
  label: "No, keep planning",
@@ -754417,7 +753409,6 @@ var init_ExitPlanModePermissionRequest = __esm(() => {
754417
753409
  init_AppState();
754418
753410
  init_state();
754419
753411
  init_generateSessionName();
754420
- init_ultraplan();
754421
753412
  init_ink2();
754422
753413
  init_constants2();
754423
753414
  init_agentSwarmsEnabled();
@@ -754426,7 +753417,6 @@ var init_ExitPlanModePermissionRequest = __esm(() => {
754426
753417
  init_file();
754427
753418
  init_ide();
754428
753419
  init_log2();
754429
- init_messageQueueManager();
754430
753420
  init_messages();
754431
753421
  init_model();
754432
753422
  init_PermissionMode();
@@ -760089,7 +759079,7 @@ var init_useVoiceEnabled = __esm(() => {
760089
759079
  function getSemverPart(version3) {
760090
759080
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
760091
759081
  }
760092
- function useUpdateNotification(updatedVersion, initialVersion = "1.80.0") {
759082
+ function useUpdateNotification(updatedVersion, initialVersion = "1.80.2") {
760093
759083
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
760094
759084
  if (!updatedVersion) {
760095
759085
  return null;
@@ -760138,7 +759128,7 @@ function AutoUpdater({
760138
759128
  return;
760139
759129
  }
760140
759130
  if (false) {}
760141
- const currentVersion = "1.80.0";
759131
+ const currentVersion = "1.80.2";
760142
759132
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
760143
759133
  let latestVersion = await getLatestVersion(channel);
760144
759134
  const isDisabled = isAutoUpdaterDisabled();
@@ -760367,12 +759357,12 @@ function NativeAutoUpdater({
760367
759357
  logEvent("tengu_native_auto_updater_start", {});
760368
759358
  try {
760369
759359
  const maxVersion = await getMaxVersion();
760370
- if (maxVersion && gt("1.80.0", maxVersion)) {
759360
+ if (maxVersion && gt("1.80.2", maxVersion)) {
760371
759361
  const msg = await getMaxVersionMessage();
760372
759362
  setMaxVersionIssue(msg ?? "affects your version");
760373
759363
  }
760374
759364
  const result = await installLatest(channel);
760375
- const currentVersion = "1.80.0";
759365
+ const currentVersion = "1.80.2";
760376
759366
  const latencyMs = Date.now() - startTime;
760377
759367
  if (result.lockFailed) {
760378
759368
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -760509,17 +759499,17 @@ function PackageManagerAutoUpdater(t0) {
760509
759499
  const maxVersion = await getMaxVersion();
760510
759500
  if (maxVersion && latest && gt(latest, maxVersion)) {
760511
759501
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
760512
- if (gte("1.80.0", maxVersion)) {
760513
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
759502
+ if (gte("1.80.2", maxVersion)) {
759503
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
760514
759504
  setUpdateAvailable(false);
760515
759505
  return;
760516
759506
  }
760517
759507
  latest = maxVersion;
760518
759508
  }
760519
- const hasUpdate = latest && !gte("1.80.0", latest) && !shouldSkipVersion(latest);
759509
+ const hasUpdate = latest && !gte("1.80.2", latest) && !shouldSkipVersion(latest);
760520
759510
  setUpdateAvailable(!!hasUpdate);
760521
759511
  if (hasUpdate) {
760522
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.0"} -> ${latest}`);
759512
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.2"} -> ${latest}`);
760523
759513
  }
760524
759514
  };
760525
759515
  $2[0] = t1;
@@ -760553,7 +759543,7 @@ function PackageManagerAutoUpdater(t0) {
760553
759543
  wrap: "truncate",
760554
759544
  children: [
760555
759545
  "currentVersion: ",
760556
- "1.80.0"
759546
+ "1.80.2"
760557
759547
  ]
760558
759548
  }, undefined, true, undefined, this);
760559
759549
  $2[3] = verbose;
@@ -763964,17 +762954,15 @@ var init_getNextPermissionMode = __esm(() => {
763964
762954
  init_permissionSetup();
763965
762955
  });
763966
762956
 
763967
- // src/utils/ultraplan/keyword.ts
763968
- function findKeywordTriggerPositions(text2, keyword) {
763969
- const re = new RegExp(keyword, "i");
763970
- if (!re.test(text2))
763971
- return [];
763972
- if (text2.startsWith("/"))
762957
+ // src/utils/remoteReviewKeyword.ts
762958
+ function findRemoteReviewTriggerPositions(text2) {
762959
+ const keyword = "ultrareview";
762960
+ if (!new RegExp(keyword, "i").test(text2) || text2.startsWith("/"))
763973
762961
  return [];
763974
762962
  const quotedRanges = [];
763975
762963
  let openQuote = null;
763976
762964
  let openAt = 0;
763977
- const isWord = (ch2) => !!ch2 && /[\p{L}\p{N}_]/u.test(ch2);
762965
+ const isWord = (ch2) => Boolean(ch2 && /[\p{L}\p{N}_]/u.test(ch2));
763978
762966
  for (let i3 = 0;i3 < text2.length; i3++) {
763979
762967
  const ch2 = text2[i3];
763980
762968
  if (openQuote) {
@@ -763994,32 +762982,29 @@ function findKeywordTriggerPositions(text2, keyword) {
763994
762982
  }
763995
762983
  }
763996
762984
  const positions = [];
763997
- const wordRe = new RegExp(`\\b${keyword}\\b`, "gi");
763998
- const matches = text2.matchAll(wordRe);
763999
- for (const match of matches) {
762985
+ for (const match of text2.matchAll(/\bultrareview\b/gi)) {
764000
762986
  if (match.index === undefined)
764001
762987
  continue;
764002
762988
  const start = match.index;
764003
762989
  const end = start + match[0].length;
764004
- if (quotedRanges.some((r) => start >= r.start && start < r.end))
762990
+ if (quotedRanges.some((range) => start >= range.start && start < range.end)) {
764005
762991
  continue;
762992
+ }
764006
762993
  const before = text2[start - 1];
764007
762994
  const after = text2[end];
764008
762995
  if (before === "/" || before === "\\" || before === "-")
764009
762996
  continue;
764010
- if (after === "/" || after === "\\" || after === "-" || after === "?")
762997
+ if (after === "/" || after === "\\" || after === "-" || after === "?") {
764011
762998
  continue;
762999
+ }
764012
763000
  if (after === "." && isWord(text2[end + 1]))
764013
763001
  continue;
764014
763002
  positions.push({ word: match[0], start, end });
764015
763003
  }
764016
763004
  return positions;
764017
763005
  }
764018
- function findUltrareviewTriggerPositions(text2) {
764019
- return findKeywordTriggerPositions(text2, "ultrareview");
764020
- }
764021
763006
  var OPEN_TO_CLOSE;
764022
- var init_keyword = __esm(() => {
763007
+ var init_remoteReviewKeyword = __esm(() => {
764023
763008
  OPEN_TO_CLOSE = {
764024
763009
  "`": "`",
764025
763010
  '"': '"',
@@ -771411,7 +770396,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
771411
770396
  project_dir: getOriginalCwd(),
771412
770397
  added_dirs: addedDirs
771413
770398
  },
771414
- version: "1.80.0",
770399
+ version: "1.80.2",
771415
770400
  output_style: {
771416
770401
  name: outputStyleName
771417
770402
  },
@@ -771546,7 +770531,7 @@ function StatusLineInner({
771546
770531
  const attention = customStatusError ?? taskAttention;
771547
770532
  const terminalSize = React133.useContext(TerminalSizeContext);
771548
770533
  const defaultStatusLineText = buildDefaultStatusBar({
771549
- version: "1.80.0",
770534
+ version: "1.80.2",
771550
770535
  providerLabel: providerRuntime.providerLabel,
771551
770536
  authMode: providerRuntime.authLabel,
771552
770537
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -771949,33 +770934,33 @@ function BackgroundTaskStatus(t0) {
771949
770934
  const viewedIdx = t82;
771950
770935
  const availableWidth = Math.max(20, columns - 20 - 4);
771951
770936
  const t92 = selectedIdx >= 0 ? selectedIdx : 0;
771952
- let t102;
770937
+ let t10;
771953
770938
  if ($2[15] !== availableWidth || $2[16] !== pillWidths || $2[17] !== t92) {
771954
- t102 = calculateHorizontalScrollWindow(pillWidths, availableWidth, 2, t92);
770939
+ t10 = calculateHorizontalScrollWindow(pillWidths, availableWidth, 2, t92);
771955
770940
  $2[15] = availableWidth;
771956
770941
  $2[16] = pillWidths;
771957
770942
  $2[17] = t92;
771958
- $2[18] = t102;
770943
+ $2[18] = t10;
771959
770944
  } else {
771960
- t102 = $2[18];
770945
+ t10 = $2[18];
771961
770946
  }
771962
770947
  const {
771963
770948
  startIndex,
771964
770949
  endIndex,
771965
770950
  showLeftArrow,
771966
770951
  showRightArrow
771967
- } = t102;
771968
- let t112;
770952
+ } = t10;
770953
+ let t11;
771969
770954
  if ($2[19] !== allPills || $2[20] !== endIndex || $2[21] !== startIndex) {
771970
- t112 = allPills.slice(startIndex, endIndex);
770955
+ t11 = allPills.slice(startIndex, endIndex);
771971
770956
  $2[19] = allPills;
771972
770957
  $2[20] = endIndex;
771973
770958
  $2[21] = startIndex;
771974
- $2[22] = t112;
770959
+ $2[22] = t11;
771975
770960
  } else {
771976
- t112 = $2[22];
770961
+ t11 = $2[22];
771977
770962
  }
771978
- const visiblePills = t112;
770963
+ const visiblePills = t11;
771979
770964
  let t12;
771980
770965
  if ($2[23] !== showLeftArrow) {
771981
770966
  t12 = showLeftArrow && /* @__PURE__ */ jsx_dev_runtime416.jsxDEV(ThemedText, {
@@ -772095,36 +771080,7 @@ function BackgroundTaskStatus(t0) {
772095
771080
  } else {
772096
771081
  t9 = $2[42];
772097
771082
  }
772098
- let t10;
772099
- if ($2[43] !== runningTasks) {
772100
- t10 = pillNeedsCta(runningTasks) && /* @__PURE__ */ jsx_dev_runtime416.jsxDEV(ThemedText, {
772101
- dimColor: true,
772102
- children: [
772103
- " \xB7 ",
772104
- figures_default.arrowDown,
772105
- " to view"
772106
- ]
772107
- }, undefined, true, undefined, this);
772108
- $2[43] = runningTasks;
772109
- $2[44] = t10;
772110
- } else {
772111
- t10 = $2[44];
772112
- }
772113
- let t11;
772114
- if ($2[45] !== t10 || $2[46] !== t9) {
772115
- t11 = /* @__PURE__ */ jsx_dev_runtime416.jsxDEV(jsx_dev_runtime416.Fragment, {
772116
- children: [
772117
- t9,
772118
- t10
772119
- ]
772120
- }, undefined, true, undefined, this);
772121
- $2[45] = t10;
772122
- $2[46] = t9;
772123
- $2[47] = t11;
772124
- } else {
772125
- t11 = $2[47];
772126
- }
772127
- return t11;
771083
+ return t9;
772128
771084
  }
772129
771085
  function _temp164(pill_0, i_0) {
772130
771086
  const pillText = `@${pill_0.name}`;
@@ -772654,14 +771610,14 @@ function usePrStatus(isLoading, enabled = true) {
772654
771610
  return;
772655
771611
  }
772656
771612
  if (!cancelled) {
772657
- timeoutRef.current = setTimeout(poll, POLL_INTERVAL_MS3);
771613
+ timeoutRef.current = setTimeout(poll, POLL_INTERVAL_MS2);
772658
771614
  }
772659
771615
  }
772660
771616
  const elapsed = Date.now() - lastFetchRef.current;
772661
- if (elapsed >= POLL_INTERVAL_MS3) {
771617
+ if (elapsed >= POLL_INTERVAL_MS2) {
772662
771618
  poll();
772663
771619
  } else {
772664
- timeoutRef.current = setTimeout(poll, POLL_INTERVAL_MS3 - elapsed);
771620
+ timeoutRef.current = setTimeout(poll, POLL_INTERVAL_MS2 - elapsed);
772665
771621
  }
772666
771622
  return () => {
772667
771623
  cancelled = true;
@@ -772673,7 +771629,7 @@ function usePrStatus(isLoading, enabled = true) {
772673
771629
  }, [isLoading, enabled]);
772674
771630
  return prStatus;
772675
771631
  }
772676
- var import_react251, POLL_INTERVAL_MS3 = 60000, SLOW_GH_THRESHOLD_MS = 4000, IDLE_STOP_MS, INITIAL_STATE3;
771632
+ var import_react251, POLL_INTERVAL_MS2 = 60000, SLOW_GH_THRESHOLD_MS = 4000, IDLE_STOP_MS, INITIAL_STATE3;
772677
771633
  var init_usePrStatus = __esm(() => {
772678
771634
  init_state();
772679
771635
  init_ghPrStatus();
@@ -774224,10 +773180,7 @@ function PromptInput({
774224
773180
  });
774225
773181
  const displayedValue = import_react258.useMemo(() => isSearchingHistory && historyMatch ? getValueFromInput(typeof historyMatch === "string" ? historyMatch : historyMatch.display) : input, [isSearchingHistory, historyMatch, input]);
774226
773182
  const thinkTriggers = import_react258.useMemo(() => findThinkingTriggerPositions(displayedValue), [displayedValue]);
774227
- const ultraplanSessionUrl = useAppState((s) => s.ultraplanSessionUrl);
774228
- const ultraplanLaunching = useAppState((s) => s.ultraplanLaunching);
774229
- const ultraplanTriggers = import_react258.useMemo(() => [], [displayedValue, ultraplanSessionUrl, ultraplanLaunching]);
774230
- const ultrareviewTriggers = import_react258.useMemo(() => isUltrareviewEnabled() ? findUltrareviewTriggerPositions(displayedValue) : [], [displayedValue]);
773183
+ const ultrareviewTriggers = import_react258.useMemo(() => isUltrareviewEnabled() ? findRemoteReviewTriggerPositions(displayedValue) : [], [displayedValue]);
774231
773184
  const btwTriggers = import_react258.useMemo(() => findBtwTriggerPositions(displayedValue), [displayedValue]);
774232
773185
  const buddyTriggers = import_react258.useMemo(() => findBuddyTriggerPositions(displayedValue), [displayedValue]);
774233
773186
  const slashCommandTriggers = import_react258.useMemo(() => {
@@ -774366,7 +773319,6 @@ function PromptInput({
774366
773319
  }
774367
773320
  }
774368
773321
  }
774369
- if (false) {}
774370
773322
  for (const trigger2 of ultrareviewTriggers) {
774371
773323
  for (let i3 = trigger2.start;i3 < trigger2.end; i3++) {
774372
773324
  highlights.push({
@@ -774390,7 +773342,7 @@ function PromptInput({
774390
773342
  }
774391
773343
  }
774392
773344
  return highlights;
774393
- }, [isSearchingHistory, historyQuery, historyMatch, historyFailedMatch, cursorOffset, btwTriggers, imageRefPositions, memberMentionHighlights, slashCommandTriggers, tokenBudgetTriggers, slackChannelTriggers, displayedValue, voiceInterimRange, thinkTriggers, ultraplanTriggers, ultrareviewTriggers, buddyTriggers]);
773345
+ }, [isSearchingHistory, historyQuery, historyMatch, historyFailedMatch, cursorOffset, btwTriggers, imageRefPositions, memberMentionHighlights, slashCommandTriggers, tokenBudgetTriggers, slackChannelTriggers, displayedValue, voiceInterimRange, thinkTriggers, ultrareviewTriggers, buddyTriggers]);
774394
773346
  const {
774395
773347
  addNotification,
774396
773348
  removeNotification
@@ -774407,11 +773359,6 @@ function PromptInput({
774407
773359
  removeNotification("ultrathink-active");
774408
773360
  }
774409
773361
  }, [addNotification, removeNotification, thinkTriggers.length]);
774410
- import_react258.useEffect(() => {
774411
- if (false) {} else {
774412
- removeNotification("ultraplan-active");
774413
- }
774414
- }, [addNotification, removeNotification, ultraplanTriggers.length]);
774415
773362
  import_react258.useEffect(() => {
774416
773363
  if (isUltrareviewEnabled() && ultrareviewTriggers.length) {
774417
773364
  addNotification({
@@ -775780,7 +774727,7 @@ var init_PromptInput = __esm(() => {
775780
774727
  init_teammateMailbox();
775781
774728
  init_thinking();
775782
774729
  init_tokenBudget();
775783
- init_keyword();
774730
+ init_remoteReviewKeyword();
775784
774731
  init_AutoModeOptInDialog();
775785
774732
  init_BridgeDialog();
775786
774733
  init_ConfigurableShortcutHint();
@@ -780302,7 +779249,6 @@ var init_processBashCommand = __esm(() => {
780302
779249
  import { randomUUID as randomUUID83 } from "crypto";
780303
779250
  async function processUserInput({
780304
779251
  input,
780305
- preExpansionInput,
780306
779252
  mode: mode2,
780307
779253
  setToolJSX,
780308
779254
  context: context6,
@@ -780325,7 +779271,7 @@ async function processUserInput({
780325
779271
  }
780326
779272
  queryCheckpoint("query_process_user_input_base_start");
780327
779273
  const appState = context6.getAppState();
780328
- const result = await processUserInputBase(input, mode2, setToolJSX, context6, pastedContents, ideSelection, messages, uuid3, isAlreadyProcessing, querySource, canUseTool, appState.toolPermissionContext.mode, skipSlashCommands, bridgeOrigin, isMeta, skipAttachments, preExpansionInput);
779274
+ const result = await processUserInputBase(input, mode2, setToolJSX, context6, pastedContents, ideSelection, messages, uuid3, isAlreadyProcessing, querySource, canUseTool, appState.toolPermissionContext.mode, skipSlashCommands, bridgeOrigin, isMeta, skipAttachments);
780329
779275
  queryCheckpoint("query_process_user_input_base_end");
780330
779276
  if (!result.shouldQuery) {
780331
779277
  return result;
@@ -780394,7 +779340,7 @@ function applyTruncation(content) {
780394
779340
  }
780395
779341
  return content;
780396
779342
  }
780397
- async function processUserInputBase(input, mode2, setToolJSX, context6, pastedContents, ideSelection, messages, uuid3, isAlreadyProcessing, querySource, canUseTool, permissionMode, skipSlashCommands, bridgeOrigin, isMeta, skipAttachments, preExpansionInput) {
779343
+ async function processUserInputBase(input, mode2, setToolJSX, context6, pastedContents, ideSelection, messages, uuid3, isAlreadyProcessing, querySource, canUseTool, permissionMode, skipSlashCommands, bridgeOrigin, isMeta, skipAttachments) {
780398
779344
  let inputString = null;
780399
779345
  let precedingInputBlocks = [];
780400
779346
  const imageMetadataTexts = [];
@@ -780496,7 +779442,6 @@ async function processUserInputBase(input, mode2, setToolJSX, context6, pastedCo
780496
779442
  }
780497
779443
  }
780498
779444
  }
780499
- if (false) {}
780500
779445
  const shouldExtractAttachments = !skipAttachments && inputString !== null && (mode2 !== "prompt" || effectiveSkipSlash || !inputString.startsWith("/"));
780501
779446
  queryCheckpoint("query_attachment_loading_start");
780502
779447
  const attachmentMessages = shouldExtractAttachments ? await toArray2(getAttachmentMessages(inputString, context6, ideSelection ?? null, [], messages, querySource)) : [];
@@ -780546,7 +779491,6 @@ var init_processUserInput = __esm(() => {
780546
779491
  init_imageStore();
780547
779492
  init_messages();
780548
779493
  init_queryProfiler();
780549
- init_keyword();
780550
779494
  init_processTextPrompt();
780551
779495
  });
780552
779496
 
@@ -780794,7 +779738,6 @@ async function executeUserInput(params) {
780794
779738
  const isFirst = i3 === 0;
780795
779739
  const result = await processUserInput({
780796
779740
  input: cmd.value,
780797
- preExpansionInput: cmd.preExpansionValue,
780798
779741
  mode: cmd.mode,
780799
779742
  setToolJSX,
780800
779743
  context: makeContext(),
@@ -783843,7 +782786,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
783843
782786
  } catch {}
783844
782787
  const data = {
783845
782788
  trigger: trigger2,
783846
- version: "1.80.0",
782789
+ version: "1.80.2",
783847
782790
  platform: process.platform,
783848
782791
  transcript,
783849
782792
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -786424,8 +785367,7 @@ var init_controlSchemas = __esm(() => {
786424
785367
  }).describe("Requests permission to use a tool with the given input."));
786425
785368
  SDKControlSetPermissionModeRequestSchema = lazySchema(() => exports_external.object({
786426
785369
  subtype: exports_external.literal("set_permission_mode"),
786427
- mode: PermissionModeSchema(),
786428
- ultraplan: exports_external.boolean().optional().describe("@internal CCR ultraplan session marker.")
785370
+ mode: PermissionModeSchema()
786429
785371
  }).describe("Sets the permission mode for tool execution handling."));
786430
785372
  SDKControlSetModelRequestSchema = lazySchema(() => exports_external.object({
786431
785373
  subtype: exports_external.literal("set_model"),
@@ -791872,7 +790814,6 @@ function REPL({
791872
790814
  const tasks2 = useAppState((s) => s.tasks);
791873
790815
  const workerSandboxPermissions = useAppState((s) => s.workerSandboxPermissions);
791874
790816
  const elicitation = useAppState((s) => s.elicitation);
791875
- const ultraplanPendingChoice = useAppState((s) => s.ultraplanPendingChoice);
791876
790817
  const viewingAgentTaskId = useAppState((s) => s.viewingAgentTaskId);
791877
790818
  const setAppState = useSetAppState();
791878
790819
  const viewedLocalAgent = viewingAgentTaskId ? tasks2[viewingAgentTaskId] : undefined;
@@ -792330,11 +791271,6 @@ function REPL({
792330
791271
  const [showBashesDialog, setShowBashesDialog] = import_react317.useState(false);
792331
791272
  const [isSearchingHistory, setIsSearchingHistory] = import_react317.useState(false);
792332
791273
  const [isHelpOpen, setIsHelpOpen] = import_react317.useState(false);
792333
- import_react317.useEffect(() => {
792334
- if (ultraplanPendingChoice && showBashesDialog) {
792335
- setShowBashesDialog(false);
792336
- }
792337
- }, [ultraplanPendingChoice, showBashesDialog]);
792338
791274
  const isTerminalFocused = useTerminalFocus();
792339
791275
  const terminalFocusRef = import_react317.useRef(isTerminalFocused);
792340
791276
  terminalFocusRef.current = isTerminalFocused;
@@ -792622,8 +791558,6 @@ function REPL({
792622
791558
  return "cost";
792623
791559
  if (allowDialogsWithAnimation && idleReturnPending)
792624
791560
  return "idle-return";
792625
- if (false)
792626
- ;
792627
791561
  if (allowDialogsWithAnimation && showIdeOnboarding)
792628
791562
  return "ide-onboarding";
792629
791563
  if (false)
@@ -794265,7 +793199,7 @@ Note: ctrl + z now suspends UR, ctrl + _ undoes input.
794265
793199
  }, undefined, false, undefined, this),
794266
793200
  transcriptScrollRef ? /* @__PURE__ */ jsx_dev_runtime456.jsxDEV(ScrollKeybindingHandler, {
794267
793201
  scrollRef,
794268
- isActive: focusedInputDialog !== "ultraplan-choice",
793202
+ isActive: true,
794269
793203
  isModal: !searchOpen,
794270
793204
  onScroll: () => jumpRef.current?.disarmSearch()
794271
793205
  }, undefined, false, undefined, this) : null,
@@ -794749,7 +793683,6 @@ Note: ctrl + z now suspends UR, ctrl + _ undoes input.
794749
793683
  focusedInputDialog === "desktop-upsell" && /* @__PURE__ */ jsx_dev_runtime456.jsxDEV(DesktopUpsellStartup, {
794750
793684
  onDone: () => setShowDesktopUpsellStartup(false)
794751
793685
  }, undefined, false, undefined, this),
794752
- null,
794753
793686
  mrRender(),
794754
793687
  !toolJSX?.shouldHidePromptInput && !focusedInputDialog && !isExiting && !disabled && !cursor && /* @__PURE__ */ jsx_dev_runtime456.jsxDEV(jsx_dev_runtime456.Fragment, {
794755
793688
  children: [
@@ -796222,7 +795155,7 @@ function WelcomeV2() {
796222
795155
  dimColor: true,
796223
795156
  children: [
796224
795157
  "v",
796225
- "1.80.0"
795158
+ "1.80.2"
796226
795159
  ]
796227
795160
  }, undefined, true, undefined, this)
796228
795161
  ]
@@ -797482,7 +796415,7 @@ function completeOnboarding() {
797482
796415
  saveGlobalConfig((current) => ({
797483
796416
  ...current,
797484
796417
  hasCompletedOnboarding: true,
797485
- lastOnboardingVersion: "1.80.0"
796418
+ lastOnboardingVersion: "1.80.2"
797486
796419
  }));
797487
796420
  }
797488
796421
  function showDialog(root2, renderer) {
@@ -799460,7 +798393,7 @@ var init_debug2 = __esm(() => {
799460
798393
  TAIL_READ_BYTES = 64 * 1024;
799461
798394
  });
799462
798395
 
799463
- // src/skills/bundled/debug-v2.ts
798396
+ // src/skills/bundled/fix-bug.ts
799464
798397
  function registerFixBugSkill() {
799465
798398
  registerBundledSkill({
799466
798399
  name: "fix-bug",
@@ -799469,7 +798402,7 @@ function registerFixBugSkill() {
799469
798402
  argumentHint: "[bug description or reproduction steps]",
799470
798403
  userInvocable: true,
799471
798404
  async getPromptForCommand(args) {
799472
- let prompt = DEBUG_V2_PROMPT;
798405
+ let prompt = FIX_BUG_PROMPT;
799473
798406
  if (args)
799474
798407
  prompt += `
799475
798408
 
@@ -799480,17 +798413,17 @@ ${args}`;
799480
798413
  }
799481
798414
  });
799482
798415
  }
799483
- var DEBUG_V2_PROMPT;
799484
- var init_debug_v2 = __esm(() => {
798416
+ var FIX_BUG_PROMPT;
798417
+ var init_fix_bug = __esm(() => {
799485
798418
  init_constants2();
799486
798419
  init_bundledSkills();
799487
- DEBUG_V2_PROMPT = `# Debug Skill: Reproduce, Root-Cause, and Fix
798420
+ FIX_BUG_PROMPT = `# Fix Bug Skill: Reproduce, Root-Cause, and Repair
799488
798421
 
799489
798422
  Reproduce, root-cause, and fix the described bug in an isolated worktree. Produce a regression test and keep publishing user-controlled.
799490
798423
 
799491
798424
  ## Setup
799492
798425
 
799493
- 1. Use the ${AGENT_TOOL_NAME} tool with "isolation: worktree" and model "route: strong" to create a fresh git worktree and branch named "ur/debug-<timestamp>-<slug>".
798426
+ 1. Use the ${AGENT_TOOL_NAME} tool with "isolation: worktree" and model "route: strong" to create a fresh git worktree and branch named "ur/fix-bug-<timestamp>-<slug>".
799494
798427
  2. Inside the worktree, inspect the relevant files, tests, and reproduction steps. Read the current git state with "git status" and "git log --oneline -5".
799495
798428
 
799496
798429
  ## Reproduction
@@ -801696,7 +800629,7 @@ var init_bundled = __esm(() => {
801696
800629
  init_batch();
801697
800630
  init_urInChrome();
801698
800631
  init_debug2();
801699
- init_debug_v2();
800632
+ init_fix_bug();
801700
800633
  init_refactor();
801701
800634
  init_paper_implementation();
801702
800635
  init_benchmark();
@@ -802628,7 +801561,7 @@ function appendToLog(path28, message) {
802628
801561
  cwd: getFsImplementation().cwd(),
802629
801562
  userType: process.env.USER_TYPE,
802630
801563
  sessionId: getSessionId(),
802631
- version: "1.80.0"
801564
+ version: "1.80.2"
802632
801565
  };
802633
801566
  getLogWriter(path28).write(messageWithTimestamp);
802634
801567
  }
@@ -806792,8 +805725,8 @@ async function getEnvLessBridgeConfig() {
806792
805725
  }
806793
805726
  async function checkEnvLessBridgeMinVersion() {
806794
805727
  const cfg = await getEnvLessBridgeConfig();
806795
- if (cfg.min_version && lt("1.80.0", cfg.min_version)) {
806796
- return `Your version of UR (${"1.80.0"}) is too old for Remote Control.
805728
+ if (cfg.min_version && lt("1.80.2", cfg.min_version)) {
805729
+ return `Your version of UR (${"1.80.2"}) is too old for Remote Control.
806797
805730
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
806798
805731
  }
806799
805732
  return null;
@@ -807267,7 +806200,7 @@ async function initBridgeCore(params) {
807267
806200
  const rawApi = createBridgeApiClient({
807268
806201
  baseUrl,
807269
806202
  getAccessToken,
807270
- runnerVersion: "1.80.0",
806203
+ runnerVersion: "1.80.2",
807271
806204
  onDebug: logForDebugging,
807272
806205
  onAuth401,
807273
806206
  getTrustedDeviceToken
@@ -810229,7 +809162,7 @@ function runHeadlessStreaming(structuredIO, mcpClients, commands, tools, initial
810229
809162
  const teamContext = currentAppState.teamContext;
810230
809163
  if (teamContext && isTeamLead(teamContext)) {
810231
809164
  const agentName = "team-lead";
810232
- const POLL_INTERVAL_MS4 = 500;
809165
+ const POLL_INTERVAL_MS3 = 500;
810233
809166
  while (true) {
810234
809167
  const refreshedState = getAppState();
810235
809168
  const hasActiveTeammates = hasActiveInProcessTeammates(refreshedState) || refreshedState.teamContext && Object.keys(refreshedState.teamContext.teammates).length > 0;
@@ -810296,7 +809229,7 @@ ${m.text}
810296
809229
  run3();
810297
809230
  return;
810298
809231
  }
810299
- await sleep2(POLL_INTERVAL_MS4);
809232
+ await sleep2(POLL_INTERVAL_MS3);
810300
809233
  }
810301
809234
  }
810302
809235
  }
@@ -810429,8 +809362,7 @@ ${m.text}
810429
809362
  const m = message.request;
810430
809363
  setAppState((prev) => ({
810431
809364
  ...prev,
810432
- toolPermissionContext: handleSetPermissionMode(m, message.request_id, prev.toolPermissionContext, output),
810433
- isUltraplanMode: m.ultraplan ?? prev.isUltraplanMode
809365
+ toolPermissionContext: handleSetPermissionMode(m, message.request_id, prev.toolPermissionContext, output)
810434
809366
  }));
810435
809367
  } else if (message.request.subtype === "set_model") {
810436
809368
  const requestedModel = message.request.model ?? "default";
@@ -816741,7 +815673,7 @@ function getAgUiCapabilities() {
816741
815673
  name: "UR-Nexus",
816742
815674
  type: "ur-nexus",
816743
815675
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
816744
- version: "1.80.0",
815676
+ version: "1.80.2",
816745
815677
  provider: "UR",
816746
815678
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
816747
815679
  },
@@ -817872,7 +816804,7 @@ function createMCPServer(cwd4, debug2, verbose) {
817872
816804
  };
817873
816805
  const server2 = new Server({
817874
816806
  name: "ur-nexus",
817875
- version: "1.80.0"
816807
+ version: "1.80.2"
817876
816808
  }, {
817877
816809
  capabilities: {
817878
816810
  tools: {}
@@ -819076,7 +818008,7 @@ function thrownResponse(error40) {
819076
818008
  }
819077
818009
  async function createUrMcp2026Runtime(options5) {
819078
818010
  const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
819079
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.0" }, { capabilities: {} });
818011
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.2" }, { capabilities: {} });
819080
818012
  const [clientTransport, serverTransport] = createLinkedTransportPair();
819081
818013
  try {
819082
818014
  await server2.connect(serverTransport);
@@ -819087,7 +818019,7 @@ async function createUrMcp2026Runtime(options5) {
819087
818019
  }
819088
818020
  const runtime2 = new Mcp2026Runtime({
819089
818021
  cwd: options5.cwd,
819090
- version: "1.80.0",
818022
+ version: "1.80.2",
819091
818023
  backend: {
819092
818024
  listTools: async () => {
819093
818025
  const listed = await client2.listTools();
@@ -821689,7 +820621,7 @@ async function update() {
821689
820621
  logEvent("tengu_update_check", {});
821690
820622
  const diagnostic2 = await getDoctorDiagnostic();
821691
820623
  const result = await checkUpgradeStatus({
821692
- currentVersion: "1.80.0",
820624
+ currentVersion: "1.80.2",
821693
820625
  packageName: UR_AGENT_PACKAGE_NAME,
821694
820626
  installationType: diagnostic2.installationType,
821695
820627
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -823017,7 +821949,7 @@ ${customInstructions}` : customInstructions;
823017
821949
  }
823018
821950
  }
823019
821951
  logForDiagnosticsNoPII("info", "started", {
823020
- version: "1.80.0",
821952
+ version: "1.80.2",
823021
821953
  is_native_binary: isInBundledMode()
823022
821954
  });
823023
821955
  registerCleanup(async () => {
@@ -823804,7 +822736,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
823804
822736
  pendingHookMessages
823805
822737
  }, renderAndRun);
823806
822738
  }
823807
- }).version("1.80.0 (UR-Nexus)", "-v, --version", "Output the version number");
822739
+ }).version("1.80.2 (UR-Nexus)", "-v, --version", "Output the version number");
823808
822740
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
823809
822741
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
823810
822742
  if (canUserConfigureAdvisor()) {
@@ -824912,7 +823844,7 @@ if (false) {}
824912
823844
  async function main2() {
824913
823845
  const args = process.argv.slice(2);
824914
823846
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
824915
- console.log(`${"1.80.0"} (UR-Nexus)`);
823847
+ console.log(`${"1.80.2"} (UR-Nexus)`);
824916
823848
  return;
824917
823849
  }
824918
823850
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {