ur-agent 1.44.8 → 1.44.9

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
@@ -71438,7 +71438,7 @@ var init_auth = __esm(() => {
71438
71438
 
71439
71439
  // src/utils/userAgent.ts
71440
71440
  function getURCodeUserAgent() {
71441
- return `ur/${"1.44.8"}`;
71441
+ return `ur/${"1.44.9"}`;
71442
71442
  }
71443
71443
 
71444
71444
  // src/utils/workloadContext.ts
@@ -71460,7 +71460,7 @@ function getUserAgent() {
71460
71460
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
71461
71461
  const workload = getWorkload();
71462
71462
  const workloadSuffix = workload ? `, workload/${workload}` : "";
71463
- return `ur-cli/${"1.44.8"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71463
+ return `ur-cli/${"1.44.9"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71464
71464
  }
71465
71465
  function getMCPUserAgent() {
71466
71466
  const parts = [];
@@ -71474,7 +71474,7 @@ function getMCPUserAgent() {
71474
71474
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
71475
71475
  }
71476
71476
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
71477
- return `ur/${"1.44.8"}${suffix}`;
71477
+ return `ur/${"1.44.9"}${suffix}`;
71478
71478
  }
71479
71479
  function getWebFetchUserAgent() {
71480
71480
  return `UR-User (${getURCodeUserAgent()})`;
@@ -71612,7 +71612,7 @@ var init_user = __esm(() => {
71612
71612
  deviceId,
71613
71613
  sessionId: getSessionId(),
71614
71614
  email: getEmail(),
71615
- appVersion: "1.44.8",
71615
+ appVersion: "1.44.9",
71616
71616
  platform: getHostPlatformForAnalytics(),
71617
71617
  organizationUuid,
71618
71618
  accountUuid,
@@ -78129,7 +78129,7 @@ var init_metadata = __esm(() => {
78129
78129
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
78130
78130
  WHITESPACE_REGEX = /\s+/;
78131
78131
  getVersionBase = memoize_default(() => {
78132
- const match = "1.44.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
78132
+ const match = "1.44.9".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
78133
78133
  return match ? match[0] : undefined;
78134
78134
  });
78135
78135
  buildEnvContext = memoize_default(async () => {
@@ -78169,7 +78169,7 @@ var init_metadata = __esm(() => {
78169
78169
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
78170
78170
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
78171
78171
  isURAiAuth: isURAISubscriber(),
78172
- version: "1.44.8",
78172
+ version: "1.44.9",
78173
78173
  versionBase: getVersionBase(),
78174
78174
  buildTime: "",
78175
78175
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -78839,7 +78839,7 @@ function initialize1PEventLogging() {
78839
78839
  const platform2 = getPlatform();
78840
78840
  const attributes = {
78841
78841
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
78842
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.8"
78842
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.9"
78843
78843
  };
78844
78844
  if (platform2 === "wsl") {
78845
78845
  const wslVersion = getWslVersion();
@@ -78866,7 +78866,7 @@ function initialize1PEventLogging() {
78866
78866
  })
78867
78867
  ]
78868
78868
  });
78869
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.8");
78869
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.9");
78870
78870
  }
78871
78871
  async function reinitialize1PEventLoggingIfConfigChanged() {
78872
78872
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -81514,7 +81514,7 @@ var init_types2 = __esm(() => {
81514
81514
  showThinkingSummaries: exports_external.boolean().optional().describe("Show thinking summaries in the transcript view (ctrl+o). Default: false."),
81515
81515
  skipDangerousModePermissionPrompt: exports_external.boolean().optional().describe("Whether the user has accepted the bypass permissions mode dialog"),
81516
81516
  ...{},
81517
- disableAutoMode: exports_external.enum(["disable"]).optional().describe("Disable auto mode"),
81517
+ disableAutoMode: exports_external.enum(["disable"]).optional().describe("DEPRECATED duplicate of permissions.disableAutoMode \u2014 both are honored for back-compat, but set the nested one. This top-level key will be removed in a future major."),
81518
81518
  sshConfigs: exports_external.array(exports_external.object({
81519
81519
  id: exports_external.string().describe("Unique identifier for this SSH config. Used to match configs across settings sources."),
81520
81520
  name: exports_external.string().describe("Display name for the SSH connection"),
@@ -83463,6 +83463,29 @@ async function runLearn(options) {
83463
83463
  saveStats(options.cwd, stats);
83464
83464
  return { stats, newOutcomes: fresh.length, newLessons };
83465
83465
  }
83466
+ function suggestSkillCandidates(stats, existingSkillNames = [], options = {}) {
83467
+ const minPasses = options.minPasses ?? 5;
83468
+ const minRate = options.minRate ?? 0.7;
83469
+ const existing = existingSkillNames.map((n2) => n2.toLowerCase());
83470
+ const out = [];
83471
+ for (const [category, t] of Object.entries(stats.categories)) {
83472
+ const total = t.pass + t.fail;
83473
+ if (t.pass < minPasses || total === 0)
83474
+ continue;
83475
+ const r = t.pass / total;
83476
+ if (r < minRate)
83477
+ continue;
83478
+ if (existing.some((name) => name.includes(category.toLowerCase())))
83479
+ continue;
83480
+ out.push({
83481
+ category,
83482
+ passes: t.pass,
83483
+ rate: r,
83484
+ hint: `You have ${t.pass} successful ${category} runs (${Math.round(r * 100)}%). Distill the repeatable steps into a skill: /create-skill ${category}-playbook or /skillify after the next ${category} run.`
83485
+ });
83486
+ }
83487
+ return out.sort((a2, b) => b.passes - a2.passes);
83488
+ }
83466
83489
  function formatStats(stats, json2) {
83467
83490
  if (json2)
83468
83491
  return JSON.stringify(stats, null, 2);
@@ -83490,6 +83513,12 @@ function formatStats(stats, json2) {
83490
83513
  for (const lesson of stats.lessons.slice(-10))
83491
83514
  lines.push(` - ${lesson}`);
83492
83515
  }
83516
+ const skillIdeas = suggestSkillCandidates(stats);
83517
+ if (skillIdeas.length) {
83518
+ lines.push("", "Skill candidates (auto-skillify):");
83519
+ for (const idea of skillIdeas.slice(0, 5))
83520
+ lines.push(` - ${idea.hint}`);
83521
+ }
83493
83522
  if (cats.length === 0 && models.length === 0) {
83494
83523
  lines.push("No outcomes yet. Capture work with `ur artifacts`, then run `ur learn`.");
83495
83524
  }
@@ -84773,7 +84802,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
84773
84802
  function formatA2AAgentCard(options = {}, pretty = true) {
84774
84803
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
84775
84804
  }
84776
- var urVersion = "1.44.8", coverage, priorityRoadmap;
84805
+ var urVersion = "1.44.9", coverage, priorityRoadmap;
84777
84806
  var init_trends = __esm(() => {
84778
84807
  coverage = [
84779
84808
  {
@@ -86768,7 +86797,7 @@ function getAttributionHeader(fingerprint) {
86768
86797
  if (!isAttributionHeaderEnabled()) {
86769
86798
  return "";
86770
86799
  }
86771
- const version2 = `${"1.44.8"}.${fingerprint}`;
86800
+ const version2 = `${"1.44.9"}.${fingerprint}`;
86772
86801
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
86773
86802
  const cch = "";
86774
86803
  const workload = getWorkload();
@@ -194738,7 +194767,7 @@ function getTelemetryAttributes() {
194738
194767
  attributes["session.id"] = sessionId;
194739
194768
  }
194740
194769
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
194741
- attributes["app.version"] = "1.44.8";
194770
+ attributes["app.version"] = "1.44.9";
194742
194771
  }
194743
194772
  const oauthAccount = getOauthAccountInfo();
194744
194773
  if (oauthAccount) {
@@ -230126,7 +230155,7 @@ function getInstallationEnv() {
230126
230155
  return;
230127
230156
  }
230128
230157
  function getURCodeVersion() {
230129
- return "1.44.8";
230158
+ return "1.44.9";
230130
230159
  }
230131
230160
  async function getInstalledVSCodeExtensionVersion(command) {
230132
230161
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -232965,7 +232994,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
232965
232994
  const client2 = new Client({
232966
232995
  name: "ur",
232967
232996
  title: "UR",
232968
- version: "1.44.8",
232997
+ version: "1.44.9",
232969
232998
  description: "UR-Nexus autonomous engineering workflow engine",
232970
232999
  websiteUrl: PRODUCT_URL
232971
233000
  }, {
@@ -233319,7 +233348,7 @@ var init_client5 = __esm(() => {
233319
233348
  const client2 = new Client({
233320
233349
  name: "ur",
233321
233350
  title: "UR",
233322
- version: "1.44.8",
233351
+ version: "1.44.9",
233323
233352
  description: "UR-Nexus autonomous engineering workflow engine",
233324
233353
  websiteUrl: PRODUCT_URL
233325
233354
  }, {
@@ -243133,9 +243162,9 @@ async function assertMinVersion() {
243133
243162
  if (false) {}
243134
243163
  try {
243135
243164
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
243136
- if (versionConfig.minVersion && lt("1.44.8", versionConfig.minVersion)) {
243165
+ if (versionConfig.minVersion && lt("1.44.9", versionConfig.minVersion)) {
243137
243166
  console.error(`
243138
- It looks like your version of UR (${"1.44.8"}) needs an update.
243167
+ It looks like your version of UR (${"1.44.9"}) needs an update.
243139
243168
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
243140
243169
 
243141
243170
  To update, please run:
@@ -243351,7 +243380,7 @@ async function installGlobalPackage(specificVersion) {
243351
243380
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
243352
243381
  logEvent("tengu_auto_updater_lock_contention", {
243353
243382
  pid: process.pid,
243354
- currentVersion: "1.44.8"
243383
+ currentVersion: "1.44.9"
243355
243384
  });
243356
243385
  return "in_progress";
243357
243386
  }
@@ -243360,7 +243389,7 @@ async function installGlobalPackage(specificVersion) {
243360
243389
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
243361
243390
  logError2(new Error("Windows NPM detected in WSL environment"));
243362
243391
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
243363
- currentVersion: "1.44.8"
243392
+ currentVersion: "1.44.9"
243364
243393
  });
243365
243394
  console.error(`
243366
243395
  Error: Windows NPM detected in WSL
@@ -243895,7 +243924,7 @@ function detectLinuxGlobPatternWarnings() {
243895
243924
  }
243896
243925
  async function getDoctorDiagnostic() {
243897
243926
  const installationType = await getCurrentInstallationType();
243898
- const version2 = typeof MACRO !== "undefined" ? "1.44.8" : "unknown";
243927
+ const version2 = typeof MACRO !== "undefined" ? "1.44.9" : "unknown";
243899
243928
  const installationPath = await getInstallationPath();
243900
243929
  const invokedBinary = getInvokedBinary();
243901
243930
  const multipleInstallations = await detectMultipleInstallations();
@@ -244830,8 +244859,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244830
244859
  const maxVersion = await getMaxVersion();
244831
244860
  if (maxVersion && gt(version2, maxVersion)) {
244832
244861
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
244833
- if (gte("1.44.8", maxVersion)) {
244834
- logForDebugging(`Native installer: current version ${"1.44.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
244862
+ if (gte("1.44.9", maxVersion)) {
244863
+ logForDebugging(`Native installer: current version ${"1.44.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
244835
244864
  logEvent("tengu_native_update_skipped_max_version", {
244836
244865
  latency_ms: Date.now() - startTime,
244837
244866
  max_version: maxVersion,
@@ -244842,7 +244871,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244842
244871
  version2 = maxVersion;
244843
244872
  }
244844
244873
  }
244845
- if (!forceReinstall && version2 === "1.44.8" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244874
+ if (!forceReinstall && version2 === "1.44.9" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244846
244875
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
244847
244876
  logEvent("tengu_native_update_complete", {
244848
244877
  latency_ms: Date.now() - startTime,
@@ -290261,6 +290290,40 @@ function stripTrailingWhitespace(str2) {
290261
290290
  }
290262
290291
  return result;
290263
290292
  }
290293
+ function normalizeLineForMatch(line) {
290294
+ return line.replaceAll("\t", " ").replace(/\s+$/, "");
290295
+ }
290296
+ function findActualStringWhitespaceTolerant(fileContent, searchString) {
290297
+ const searchLines = searchString.split(`
290298
+ `);
290299
+ const fileLines = fileContent.split(`
290300
+ `);
290301
+ const normalizedSearchLines = searchLines.map(normalizeLineForMatch);
290302
+ if (normalizedSearchLines.length === 0 || normalizedSearchLines.length > fileLines.length) {
290303
+ return null;
290304
+ }
290305
+ const firstSearchLine = normalizedSearchLines[0];
290306
+ const candidateStarts = [];
290307
+ for (let i3 = 0;i3 <= fileLines.length - normalizedSearchLines.length; i3++) {
290308
+ if (normalizeLineForMatch(fileLines[i3]) === firstSearchLine) {
290309
+ candidateStarts.push(i3);
290310
+ }
290311
+ }
290312
+ for (const start of candidateStarts) {
290313
+ let match = true;
290314
+ for (let j2 = 0;j2 < normalizedSearchLines.length; j2++) {
290315
+ if (normalizeLineForMatch(fileLines[start + j2]) !== normalizedSearchLines[j2]) {
290316
+ match = false;
290317
+ break;
290318
+ }
290319
+ }
290320
+ if (match) {
290321
+ return fileLines.slice(start, start + normalizedSearchLines.length).join(`
290322
+ `);
290323
+ }
290324
+ }
290325
+ return null;
290326
+ }
290264
290327
  function findActualString(fileContent, searchString) {
290265
290328
  if (fileContent.includes(searchString)) {
290266
290329
  return searchString;
@@ -290271,7 +290334,7 @@ function findActualString(fileContent, searchString) {
290271
290334
  if (searchIndex !== -1) {
290272
290335
  return fileContent.substring(searchIndex, searchIndex + searchString.length);
290273
290336
  }
290274
- return null;
290337
+ return findActualStringWhitespaceTolerant(fileContent, searchString);
290275
290338
  }
290276
290339
  function preserveQuoteStyle(oldString, actualOldString, newString) {
290277
290340
  if (oldString === actualOldString) {
@@ -299345,6 +299408,16 @@ function normalizeAskUserQuestionInput2(value) {
299345
299408
  metadata: input.metadata
299346
299409
  } : {}
299347
299410
  };
299411
+ if (typeof input.questions === "string") {
299412
+ const parsed = parseToolInputJsonLenient(input.questions);
299413
+ if (Array.isArray(parsed))
299414
+ input.questions = parsed;
299415
+ }
299416
+ if (typeof input.options === "string") {
299417
+ const parsed = parseToolInputJsonLenient(input.options);
299418
+ if (Array.isArray(parsed))
299419
+ input.options = parsed;
299420
+ }
299348
299421
  if (Array.isArray(input.questions)) {
299349
299422
  return {
299350
299423
  questions: input.questions.map(normalizeQuestionInput),
@@ -299439,6 +299512,7 @@ var init_AskUserQuestionTool = __esm(() => {
299439
299512
  init_MessageResponse();
299440
299513
  init_figures2();
299441
299514
  init_PermissionMode();
299515
+ init_json();
299442
299516
  init_v4();
299443
299517
  init_ink2();
299444
299518
  init_Tool();
@@ -341607,7 +341681,7 @@ function Feedback({
341607
341681
  platform: env2.platform,
341608
341682
  gitRepo: envInfo.isGit,
341609
341683
  terminal: env2.terminal,
341610
- version: "1.44.8",
341684
+ version: "1.44.9",
341611
341685
  transcript: normalizeMessagesForAPI(messages),
341612
341686
  errors: sanitizedErrors,
341613
341687
  lastApiRequest: getLastAPIRequest(),
@@ -341799,7 +341873,7 @@ function Feedback({
341799
341873
  ", ",
341800
341874
  env2.terminal,
341801
341875
  ", v",
341802
- "1.44.8"
341876
+ "1.44.9"
341803
341877
  ]
341804
341878
  }, undefined, true, undefined, this)
341805
341879
  ]
@@ -341905,7 +341979,7 @@ ${sanitizedDescription}
341905
341979
  ` + `**Environment Info**
341906
341980
  ` + `- Platform: ${env2.platform}
341907
341981
  ` + `- Terminal: ${env2.terminal}
341908
- ` + `- Version: ${"1.44.8"}
341982
+ ` + `- Version: ${"1.44.9"}
341909
341983
  ` + `- Feedback ID: ${feedbackId}
341910
341984
  ` + `
341911
341985
  **Errors**
@@ -345016,7 +345090,7 @@ function buildPrimarySection() {
345016
345090
  }, undefined, false, undefined, this);
345017
345091
  return [{
345018
345092
  label: "Version",
345019
- value: "1.44.8"
345093
+ value: "1.44.9"
345020
345094
  }, {
345021
345095
  label: "Session name",
345022
345096
  value: nameValue
@@ -348346,7 +348420,7 @@ function Config({
348346
348420
  }
348347
348421
  }, undefined, false, undefined, this)
348348
348422
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
348349
- currentVersion: "1.44.8",
348423
+ currentVersion: "1.44.9",
348350
348424
  onChoice: (choice) => {
348351
348425
  setShowSubmenu(null);
348352
348426
  setTabsHidden(false);
@@ -348358,7 +348432,7 @@ function Config({
348358
348432
  autoUpdatesChannel: "stable"
348359
348433
  };
348360
348434
  if (choice === "stay") {
348361
- newSettings.minimumVersion = "1.44.8";
348435
+ newSettings.minimumVersion = "1.44.9";
348362
348436
  }
348363
348437
  updateSettingsForSource("userSettings", newSettings);
348364
348438
  setSettingsData((prev_27) => ({
@@ -356428,7 +356502,7 @@ function HelpV2(t0) {
356428
356502
  let t6;
356429
356503
  if ($3[31] !== tabs) {
356430
356504
  t6 = /* @__PURE__ */ jsx_dev_runtime203.jsxDEV(Tabs, {
356431
- title: `UR v${"1.44.8"}`,
356505
+ title: `UR v${"1.44.9"}`,
356432
356506
  color: "professionalBlue",
356433
356507
  defaultTab: "general",
356434
356508
  children: tabs
@@ -357174,7 +357248,7 @@ function buildToolUseContext(tools, readFileStateCache) {
357174
357248
  async function handleInitialize(options2) {
357175
357249
  return {
357176
357250
  name: "UR",
357177
- version: "1.44.8",
357251
+ version: "1.44.9",
357178
357252
  protocolVersion: "0.1.0",
357179
357253
  workspaceRoot: options2.cwd,
357180
357254
  capabilities: {
@@ -377316,7 +377390,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
377316
377390
  return [];
377317
377391
  }
377318
377392
  }
377319
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.8") {
377393
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.9") {
377320
377394
  if (process.env.USER_TYPE === "ant") {
377321
377395
  const changelog = "";
377322
377396
  if (changelog) {
@@ -377343,7 +377417,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.8")
377343
377417
  releaseNotes
377344
377418
  };
377345
377419
  }
377346
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.8") {
377420
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.9") {
377347
377421
  if (process.env.USER_TYPE === "ant") {
377348
377422
  const changelog = "";
377349
377423
  if (changelog) {
@@ -378522,7 +378596,7 @@ function getRecentActivitySync() {
378522
378596
  return cachedActivity;
378523
378597
  }
378524
378598
  function getLogoDisplayData() {
378525
- const version2 = process.env.DEMO_VERSION ?? "1.44.8";
378599
+ const version2 = process.env.DEMO_VERSION ?? "1.44.9";
378526
378600
  const serverUrl = getDirectConnectServerUrl();
378527
378601
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
378528
378602
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -379311,7 +379385,7 @@ function LogoV2() {
379311
379385
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
379312
379386
  t2 = () => {
379313
379387
  const currentConfig2 = getGlobalConfig();
379314
- if (currentConfig2.lastReleaseNotesSeen === "1.44.8") {
379388
+ if (currentConfig2.lastReleaseNotesSeen === "1.44.9") {
379315
379389
  return;
379316
379390
  }
379317
379391
  saveGlobalConfig(_temp326);
@@ -379996,12 +380070,12 @@ function LogoV2() {
379996
380070
  return t41;
379997
380071
  }
379998
380072
  function _temp326(current) {
379999
- if (current.lastReleaseNotesSeen === "1.44.8") {
380073
+ if (current.lastReleaseNotesSeen === "1.44.9") {
380000
380074
  return current;
380001
380075
  }
380002
380076
  return {
380003
380077
  ...current,
380004
- lastReleaseNotesSeen: "1.44.8"
380078
+ lastReleaseNotesSeen: "1.44.9"
380005
380079
  };
380006
380080
  }
380007
380081
  function _temp241(s_0) {
@@ -597013,7 +597087,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
597013
597087
  smapsRollup,
597014
597088
  platform: process.platform,
597015
597089
  nodeVersion: process.version,
597016
- ccVersion: "1.44.8"
597090
+ ccVersion: "1.44.9"
597017
597091
  };
597018
597092
  }
597019
597093
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -597599,7 +597673,7 @@ var init_bridge_kick = __esm(() => {
597599
597673
  var call138 = async () => {
597600
597674
  return {
597601
597675
  type: "text",
597602
- value: "1.44.8"
597676
+ value: "1.44.9"
597603
597677
  };
597604
597678
  }, version2, version_default;
597605
597679
  var init_version = __esm(() => {
@@ -607692,7 +607766,7 @@ function generateHtmlReport(data, insights) {
607692
607766
  </html>`;
607693
607767
  }
607694
607768
  function buildExportData(data, insights, facets, remoteStats) {
607695
- const version3 = typeof MACRO !== "undefined" ? "1.44.8" : "unknown";
607769
+ const version3 = typeof MACRO !== "undefined" ? "1.44.9" : "unknown";
607696
607770
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
607697
607771
  const facets_summary = {
607698
607772
  total: facets.size,
@@ -611974,7 +612048,7 @@ var init_sessionStorage = __esm(() => {
611974
612048
  init_settings2();
611975
612049
  init_slowOperations();
611976
612050
  init_uuid();
611977
- VERSION5 = typeof MACRO !== "undefined" ? "1.44.8" : "unknown";
612051
+ VERSION5 = typeof MACRO !== "undefined" ? "1.44.9" : "unknown";
611978
612052
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
611979
612053
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
611980
612054
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -613179,7 +613253,7 @@ var init_filesystem = __esm(() => {
613179
613253
  });
613180
613254
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
613181
613255
  const nonce = randomBytes18(16).toString("hex");
613182
- return join202(getURTempDir(), "bundled-skills", "1.44.8", nonce);
613256
+ return join202(getURTempDir(), "bundled-skills", "1.44.9", nonce);
613183
613257
  });
613184
613258
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
613185
613259
  });
@@ -618544,6 +618618,51 @@ var init_worktree3 = __esm(() => {
618544
618618
  ];
618545
618619
  });
618546
618620
 
618621
+ // src/services/agents/repoWiki.ts
618622
+ import {
618623
+ chmodSync as chmodSync3,
618624
+ existsSync as existsSync64,
618625
+ mkdirSync as mkdirSync54,
618626
+ readdirSync as readdirSync25,
618627
+ readFileSync as readFileSync66,
618628
+ statSync as statSync15,
618629
+ writeFileSync as writeFileSync53
618630
+ } from "fs";
618631
+ import { join as join205 } from "path";
618632
+ function repoMapPath(cwd2) {
618633
+ return join205(cwd2, ".ur", "repo-map.md");
618634
+ }
618635
+ function loadRepoMapForPrompt(cwd2, maxBytes = 4000) {
618636
+ const path22 = repoMapPath(cwd2);
618637
+ if (!existsSync64(path22))
618638
+ return null;
618639
+ try {
618640
+ const age = Date.now() - statSync15(path22).mtimeMs;
618641
+ if (age > 7 * 24 * 3600 * 1000)
618642
+ return null;
618643
+ const body = readFileSync66(path22, "utf-8");
618644
+ return body.length <= maxBytes ? body : `${body.slice(0, maxBytes)}
618645
+ \u2026 [map truncated]`;
618646
+ } catch {
618647
+ return null;
618648
+ }
618649
+ }
618650
+ var SKIP_DIRS3;
618651
+ var init_repoWiki = __esm(() => {
618652
+ init_projectDna();
618653
+ init_repoIndex();
618654
+ init_json();
618655
+ SKIP_DIRS3 = new Set([
618656
+ "node_modules",
618657
+ ".git",
618658
+ "dist",
618659
+ "build",
618660
+ "coverage",
618661
+ ".ur",
618662
+ "out"
618663
+ ]);
618664
+ });
618665
+
618547
618666
  // src/constants/cyberRiskInstruction.ts
618548
618667
  var CYBER_RISK_INSTRUCTION = `IMPORTANT: Assist with authorized security testing, defensive security, CTF challenges, and educational contexts. Refuse requests for destructive techniques, DoS attacks, mass targeting, supply chain compromise, or detection evasion for malicious purposes. Dual-use security tools (C2 frameworks, credential testing, exploit development) require clear authorization context: pentesting engagements, CTF competitions, security research, or defensive use cases.`;
618549
618668
 
@@ -618906,10 +619025,12 @@ async function computeSimpleEnvInfo(modelId, additionalWorkingDirectories) {
618906
619025
  includeURProductInfo ? `UR is available as a CLI in the terminal, desktop app (Mac/Windows), web app (ur.ai/code), and IDE extensions (VS Code, JetBrains).` : null,
618907
619026
  includeURProductInfo ? `Fast mode for UR keeps the selected provider/model and requests faster output when that backend supports it. It can be toggled with /fast.` : null
618908
619027
  ].filter((item) => item !== null);
619028
+ const repoMap = loadRepoMapForPrompt(cwd2);
618909
619029
  return [
618910
619030
  `# Environment`,
618911
619031
  `You have been invoked in the following environment: `,
618912
- ...prependBullets(envItems)
619032
+ ...prependBullets(envItems),
619033
+ ...repoMap ? [``, repoMap.trimEnd()] : []
618913
619034
  ].join(`
618914
619035
  `);
618915
619036
  }
@@ -619023,6 +619144,7 @@ var init_prompts4 = __esm(() => {
619023
619144
  init_debug();
619024
619145
  init_memdir();
619025
619146
  init_undercover();
619147
+ init_repoWiki();
619026
619148
  init_mcpInstructionsDelta();
619027
619149
  });
619028
619150
 
@@ -619470,7 +619592,7 @@ function computeFingerprint(messageText2, version3) {
619470
619592
  }
619471
619593
  function computeFingerprintFromMessages(messages) {
619472
619594
  const firstMessageText = extractFirstMessageText(messages);
619473
- return computeFingerprint(firstMessageText, "1.44.8");
619595
+ return computeFingerprint(firstMessageText, "1.44.9");
619474
619596
  }
619475
619597
  var FINGERPRINT_SALT = "59cf53e54c78";
619476
619598
  var init_fingerprint = () => {};
@@ -621344,7 +621466,7 @@ async function sideQuery(opts) {
621344
621466
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
621345
621467
  }
621346
621468
  const messageText2 = extractFirstUserMessageText(messages);
621347
- const fingerprint2 = computeFingerprint(messageText2, "1.44.8");
621469
+ const fingerprint2 = computeFingerprint(messageText2, "1.44.9");
621348
621470
  const attributionHeader = getAttributionHeader(fingerprint2);
621349
621471
  const systemBlocks = [
621350
621472
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -621630,7 +621752,7 @@ import {
621630
621752
  } from "fs/promises";
621631
621753
  import { createServer as createServer6 } from "net";
621632
621754
  import { homedir as homedir33, platform as platform6 } from "os";
621633
- import { join as join205 } from "path";
621755
+ import { join as join206 } from "path";
621634
621756
  function log(message, ...args) {
621635
621757
  if (LOG_FILE) {
621636
621758
  const timestamp2 = new Date().toISOString();
@@ -621697,7 +621819,7 @@ class ChromeNativeHost {
621697
621819
  try {
621698
621820
  process.kill(pid, 0);
621699
621821
  } catch {
621700
- await unlink24(join205(socketDir, file4)).catch(() => {});
621822
+ await unlink24(join206(socketDir, file4)).catch(() => {});
621701
621823
  log(`Removed stale socket for PID ${pid}`);
621702
621824
  }
621703
621825
  }
@@ -621968,7 +622090,7 @@ var init_chromeNativeHost = __esm(() => {
621968
622090
  init_slowOperations();
621969
622091
  init_common2();
621970
622092
  MAX_MESSAGE_SIZE = 1024 * 1024;
621971
- LOG_FILE = process.env.USER_TYPE === "ant" ? join205(homedir33(), ".ur", "debug", "chrome-native-host.txt") : undefined;
622093
+ LOG_FILE = process.env.USER_TYPE === "ant" ? join206(homedir33(), ".ur", "debug", "chrome-native-host.txt") : undefined;
621972
622094
  messageSchema = lazySchema(() => exports_external2.object({
621973
622095
  type: exports_external2.string()
621974
622096
  }).passthrough());
@@ -624478,7 +624600,7 @@ __export(exports_upstreamproxy, {
624478
624600
  });
624479
624601
  import { mkdir as mkdir44, readFile as readFile52, unlink as unlink25, writeFile as writeFile45 } from "fs/promises";
624480
624602
  import { homedir as homedir34 } from "os";
624481
- import { join as join206 } from "path";
624603
+ import { join as join207 } from "path";
624482
624604
  async function initUpstreamProxy(opts) {
624483
624605
  if (!isEnvTruthy(process.env.UR_CODE_REMOTE)) {
624484
624606
  return state;
@@ -624499,7 +624621,7 @@ async function initUpstreamProxy(opts) {
624499
624621
  }
624500
624622
  setNonDumpable();
624501
624623
  const baseUrl = opts?.ccrBaseUrl ?? "";
624502
- const caBundlePath = opts?.caBundlePath ?? join206(homedir34(), ".ccr", "ca-bundle.crt");
624624
+ const caBundlePath = opts?.caBundlePath ?? join207(homedir34(), ".ccr", "ca-bundle.crt");
624503
624625
  const caOk = await downloadCaBundle(baseUrl, opts?.systemCaPath ?? SYSTEM_CA_BUNDLE, caBundlePath);
624504
624626
  if (!caOk)
624505
624627
  return state;
@@ -624599,7 +624721,7 @@ async function downloadCaBundle(baseUrl, systemCaPath, outPath) {
624599
624721
  }
624600
624722
  const ccrCa = await resp.text();
624601
624723
  const systemCa = await readFile52(systemCaPath, "utf8").catch(() => "");
624602
- await mkdir44(join206(outPath, ".."), { recursive: true });
624724
+ await mkdir44(join207(outPath, ".."), { recursive: true });
624603
624725
  await writeFile45(outPath, systemCa + `
624604
624726
  ` + ccrCa, "utf8");
624605
624727
  return true;
@@ -626081,7 +626203,7 @@ function buildSystemInitMessage(inputs) {
626081
626203
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
626082
626204
  apiKeySource: getURHQApiKeyWithSource().source,
626083
626205
  betas: getSdkBetas(),
626084
- ur_version: "1.44.8",
626206
+ ur_version: "1.44.9",
626085
626207
  output_style: outputStyle2,
626086
626208
  agents: inputs.agents.map((agent) => agent.agentType),
626087
626209
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -632461,7 +632583,7 @@ var init_ShowInIDEPrompt = __esm(() => {
632461
632583
 
632462
632584
  // src/components/permissions/FilePermissionDialog/permissionOptions.tsx
632463
632585
  import { homedir as homedir35 } from "os";
632464
- import { basename as basename51, join as join207, sep as sep37 } from "path";
632586
+ import { basename as basename51, join as join208, sep as sep37 } from "path";
632465
632587
  function isInURFolder(filePath) {
632466
632588
  const absolutePath = expandPath(filePath);
632467
632589
  const urFolderPath = expandPath(`${getOriginalCwd()}/.ur`);
@@ -632471,7 +632593,7 @@ function isInURFolder(filePath) {
632471
632593
  }
632472
632594
  function isInGlobalURFolder(filePath) {
632473
632595
  const absolutePath = expandPath(filePath);
632474
- const globalURFolderPath = join207(homedir35(), ".ur");
632596
+ const globalURFolderPath = join208(homedir35(), ".ur");
632475
632597
  const normalizedAbsolutePath = normalizeCaseForComparison(absolutePath);
632476
632598
  const normalizedGlobalURFolderPath = normalizeCaseForComparison(globalURFolderPath);
632477
632599
  return normalizedAbsolutePath.startsWith(normalizedGlobalURFolderPath + sep37.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalURFolderPath + "/");
@@ -640709,7 +640831,7 @@ var init_useVoiceEnabled = __esm(() => {
640709
640831
  function getSemverPart(version3) {
640710
640832
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
640711
640833
  }
640712
- function useUpdateNotification(updatedVersion, initialVersion = "1.44.8") {
640834
+ function useUpdateNotification(updatedVersion, initialVersion = "1.44.9") {
640713
640835
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
640714
640836
  if (!updatedVersion) {
640715
640837
  return null;
@@ -640758,7 +640880,7 @@ function AutoUpdater({
640758
640880
  return;
640759
640881
  }
640760
640882
  if (false) {}
640761
- const currentVersion = "1.44.8";
640883
+ const currentVersion = "1.44.9";
640762
640884
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
640763
640885
  let latestVersion = await getLatestVersion(channel);
640764
640886
  const isDisabled = isAutoUpdaterDisabled();
@@ -640987,12 +641109,12 @@ function NativeAutoUpdater({
640987
641109
  logEvent("tengu_native_auto_updater_start", {});
640988
641110
  try {
640989
641111
  const maxVersion = await getMaxVersion();
640990
- if (maxVersion && gt("1.44.8", maxVersion)) {
641112
+ if (maxVersion && gt("1.44.9", maxVersion)) {
640991
641113
  const msg = await getMaxVersionMessage();
640992
641114
  setMaxVersionIssue(msg ?? "affects your version");
640993
641115
  }
640994
641116
  const result = await installLatest(channel);
640995
- const currentVersion = "1.44.8";
641117
+ const currentVersion = "1.44.9";
640996
641118
  const latencyMs = Date.now() - startTime;
640997
641119
  if (result.lockFailed) {
640998
641120
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -641129,17 +641251,17 @@ function PackageManagerAutoUpdater(t0) {
641129
641251
  const maxVersion = await getMaxVersion();
641130
641252
  if (maxVersion && latest && gt(latest, maxVersion)) {
641131
641253
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
641132
- if (gte("1.44.8", maxVersion)) {
641133
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
641254
+ if (gte("1.44.9", maxVersion)) {
641255
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
641134
641256
  setUpdateAvailable(false);
641135
641257
  return;
641136
641258
  }
641137
641259
  latest = maxVersion;
641138
641260
  }
641139
- const hasUpdate = latest && !gte("1.44.8", latest) && !shouldSkipVersion(latest);
641261
+ const hasUpdate = latest && !gte("1.44.9", latest) && !shouldSkipVersion(latest);
641140
641262
  setUpdateAvailable(!!hasUpdate);
641141
641263
  if (hasUpdate) {
641142
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.8"} -> ${latest}`);
641264
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.9"} -> ${latest}`);
641143
641265
  }
641144
641266
  };
641145
641267
  $3[0] = t1;
@@ -641173,7 +641295,7 @@ function PackageManagerAutoUpdater(t0) {
641173
641295
  wrap: "truncate",
641174
641296
  children: [
641175
641297
  "currentVersion: ",
641176
- "1.44.8"
641298
+ "1.44.9"
641177
641299
  ]
641178
641300
  }, undefined, true, undefined, this);
641179
641301
  $3[3] = verbose;
@@ -653629,7 +653751,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
653629
653751
  project_dir: getOriginalCwd(),
653630
653752
  added_dirs: addedDirs
653631
653753
  },
653632
- version: "1.44.8",
653754
+ version: "1.44.9",
653633
653755
  output_style: {
653634
653756
  name: outputStyleName
653635
653757
  },
@@ -653712,7 +653834,7 @@ function StatusLineInner({
653712
653834
  const taskValues = Object.values(tasks2);
653713
653835
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
653714
653836
  const defaultStatusLineText = buildDefaultStatusBar({
653715
- version: "1.44.8",
653837
+ version: "1.44.9",
653716
653838
  providerLabel: providerRuntime.providerLabel,
653717
653839
  authMode: providerRuntime.authLabel,
653718
653840
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -659800,9 +659922,9 @@ function initSkillImprovement() {
659800
659922
  async function applySkillImprovement(skillName, updates) {
659801
659923
  if (!skillName)
659802
659924
  return;
659803
- const { join: join208 } = await import("path");
659925
+ const { join: join209 } = await import("path");
659804
659926
  const fs12 = await import("fs/promises");
659805
- const filePath = join208(getCwd(), ".ur", "skills", skillName, "SKILL.md");
659927
+ const filePath = join209(getCwd(), ".ur", "skills", skillName, "SKILL.md");
659806
659928
  let currentContent;
659807
659929
  try {
659808
659930
  currentContent = await fs12.readFile(filePath, "utf-8");
@@ -659956,7 +660078,7 @@ function useMoreRight(_args) {
659956
660078
  // src/utils/cleanup.ts
659957
660079
  import * as fs12 from "fs/promises";
659958
660080
  import { homedir as homedir36 } from "os";
659959
- import { join as join208 } from "path";
660081
+ import { join as join209 } from "path";
659960
660082
  function getCutoffDate() {
659961
660083
  const settings = getSettings_DEPRECATED() || {};
659962
660084
  const cleanupPeriodDays = settings.cleanupPeriodDays ?? DEFAULT_CLEANUP_PERIOD_DAYS;
@@ -659981,7 +660103,7 @@ async function cleanupOldFilesInDirectory(dirPath, cutoffDate, isMessagePath) {
659981
660103
  try {
659982
660104
  const timestamp2 = convertFileNameToDate(file4.name);
659983
660105
  if (timestamp2 < cutoffDate) {
659984
- await getFsImplementation().unlink(join208(dirPath, file4.name));
660106
+ await getFsImplementation().unlink(join209(dirPath, file4.name));
659985
660107
  if (isMessagePath) {
659986
660108
  result.messages++;
659987
660109
  } else {
@@ -660012,7 +660134,7 @@ async function cleanupOldMessageFiles() {
660012
660134
  } catch {
660013
660135
  return result;
660014
660136
  }
660015
- const mcpLogDirs = dirents.filter((dirent) => dirent.isDirectory() && dirent.name.startsWith("mcp-logs-")).map((dirent) => join208(baseCachePath, dirent.name));
660137
+ const mcpLogDirs = dirents.filter((dirent) => dirent.isDirectory() && dirent.name.startsWith("mcp-logs-")).map((dirent) => join209(baseCachePath, dirent.name));
660016
660138
  for (const mcpLogDir of mcpLogDirs) {
660017
660139
  result = addCleanupResults(result, await cleanupOldFilesInDirectory(mcpLogDir, cutoffDate, true));
660018
660140
  await tryRmdir(mcpLogDir, fsImpl);
@@ -660051,7 +660173,7 @@ async function cleanupOldSessionFiles() {
660051
660173
  for (const projectDirent of projectDirents) {
660052
660174
  if (!projectDirent.isDirectory())
660053
660175
  continue;
660054
- const projectDir = join208(projectsDir, projectDirent.name);
660176
+ const projectDir = join209(projectsDir, projectDirent.name);
660055
660177
  let entries;
660056
660178
  try {
660057
660179
  entries = await fsImpl.readdir(projectDir);
@@ -660065,15 +660187,15 @@ async function cleanupOldSessionFiles() {
660065
660187
  continue;
660066
660188
  }
660067
660189
  try {
660068
- if (await unlinkIfOld(join208(projectDir, entry.name), cutoffDate, fsImpl)) {
660190
+ if (await unlinkIfOld(join209(projectDir, entry.name), cutoffDate, fsImpl)) {
660069
660191
  result.messages++;
660070
660192
  }
660071
660193
  } catch {
660072
660194
  result.errors++;
660073
660195
  }
660074
660196
  } else if (entry.isDirectory()) {
660075
- const sessionDir = join208(projectDir, entry.name);
660076
- const toolResultsDir = join208(sessionDir, TOOL_RESULTS_SUBDIR);
660197
+ const sessionDir = join209(projectDir, entry.name);
660198
+ const toolResultsDir = join209(sessionDir, TOOL_RESULTS_SUBDIR);
660077
660199
  let toolDirs;
660078
660200
  try {
660079
660201
  toolDirs = await fsImpl.readdir(toolResultsDir);
@@ -660084,14 +660206,14 @@ async function cleanupOldSessionFiles() {
660084
660206
  for (const toolEntry of toolDirs) {
660085
660207
  if (toolEntry.isFile()) {
660086
660208
  try {
660087
- if (await unlinkIfOld(join208(toolResultsDir, toolEntry.name), cutoffDate, fsImpl)) {
660209
+ if (await unlinkIfOld(join209(toolResultsDir, toolEntry.name), cutoffDate, fsImpl)) {
660088
660210
  result.messages++;
660089
660211
  }
660090
660212
  } catch {
660091
660213
  result.errors++;
660092
660214
  }
660093
660215
  } else if (toolEntry.isDirectory()) {
660094
- const toolDirPath = join208(toolResultsDir, toolEntry.name);
660216
+ const toolDirPath = join209(toolResultsDir, toolEntry.name);
660095
660217
  let toolFiles;
660096
660218
  try {
660097
660219
  toolFiles = await fsImpl.readdir(toolDirPath);
@@ -660102,7 +660224,7 @@ async function cleanupOldSessionFiles() {
660102
660224
  if (!tf.isFile())
660103
660225
  continue;
660104
660226
  try {
660105
- if (await unlinkIfOld(join208(toolDirPath, tf.name), cutoffDate, fsImpl)) {
660227
+ if (await unlinkIfOld(join209(toolDirPath, tf.name), cutoffDate, fsImpl)) {
660106
660228
  result.messages++;
660107
660229
  }
660108
660230
  } catch {
@@ -660134,7 +660256,7 @@ async function cleanupSingleDirectory(dirPath, extension, removeEmptyDir = true)
660134
660256
  if (!dirent.isFile() || !dirent.name.endsWith(extension))
660135
660257
  continue;
660136
660258
  try {
660137
- if (await unlinkIfOld(join208(dirPath, dirent.name), cutoffDate, fsImpl)) {
660259
+ if (await unlinkIfOld(join209(dirPath, dirent.name), cutoffDate, fsImpl)) {
660138
660260
  result.messages++;
660139
660261
  }
660140
660262
  } catch {
@@ -660147,7 +660269,7 @@ async function cleanupSingleDirectory(dirPath, extension, removeEmptyDir = true)
660147
660269
  return result;
660148
660270
  }
660149
660271
  function cleanupOldPlanFiles() {
660150
- const plansDir = join208(getURConfigHomeDir(), "plans");
660272
+ const plansDir = join209(getURConfigHomeDir(), "plans");
660151
660273
  return cleanupSingleDirectory(plansDir, ".md");
660152
660274
  }
660153
660275
  async function cleanupOldFileHistoryBackups() {
@@ -660156,14 +660278,14 @@ async function cleanupOldFileHistoryBackups() {
660156
660278
  const fsImpl = getFsImplementation();
660157
660279
  try {
660158
660280
  const configDir = getURConfigHomeDir();
660159
- const fileHistoryStorageDir = join208(configDir, "file-history");
660281
+ const fileHistoryStorageDir = join209(configDir, "file-history");
660160
660282
  let dirents;
660161
660283
  try {
660162
660284
  dirents = await fsImpl.readdir(fileHistoryStorageDir);
660163
660285
  } catch {
660164
660286
  return result;
660165
660287
  }
660166
- const fileHistorySessionsDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join208(fileHistoryStorageDir, dirent.name));
660288
+ const fileHistorySessionsDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join209(fileHistoryStorageDir, dirent.name));
660167
660289
  await Promise.all(fileHistorySessionsDirs.map(async (fileHistorySessionDir) => {
660168
660290
  try {
660169
660291
  const stats2 = await fsImpl.stat(fileHistorySessionDir);
@@ -660190,14 +660312,14 @@ async function cleanupOldSessionEnvDirs() {
660190
660312
  const fsImpl = getFsImplementation();
660191
660313
  try {
660192
660314
  const configDir = getURConfigHomeDir();
660193
- const sessionEnvBaseDir = join208(configDir, "session-env");
660315
+ const sessionEnvBaseDir = join209(configDir, "session-env");
660194
660316
  let dirents;
660195
660317
  try {
660196
660318
  dirents = await fsImpl.readdir(sessionEnvBaseDir);
660197
660319
  } catch {
660198
660320
  return result;
660199
660321
  }
660200
- const sessionEnvDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join208(sessionEnvBaseDir, dirent.name));
660322
+ const sessionEnvDirs = dirents.filter((dirent) => dirent.isDirectory()).map((dirent) => join209(sessionEnvBaseDir, dirent.name));
660201
660323
  for (const sessionEnvDir of sessionEnvDirs) {
660202
660324
  try {
660203
660325
  const stats2 = await fsImpl.stat(sessionEnvDir);
@@ -660219,7 +660341,7 @@ async function cleanupOldDebugLogs() {
660219
660341
  const cutoffDate = getCutoffDate();
660220
660342
  const result = { messages: 0, errors: 0 };
660221
660343
  const fsImpl = getFsImplementation();
660222
- const debugDir = join208(getURConfigHomeDir(), "debug");
660344
+ const debugDir = join209(getURConfigHomeDir(), "debug");
660223
660345
  let dirents;
660224
660346
  try {
660225
660347
  dirents = await fsImpl.readdir(debugDir);
@@ -660231,7 +660353,7 @@ async function cleanupOldDebugLogs() {
660231
660353
  continue;
660232
660354
  }
660233
660355
  try {
660234
- if (await unlinkIfOld(join208(debugDir, dirent.name), cutoffDate, fsImpl)) {
660356
+ if (await unlinkIfOld(join209(debugDir, dirent.name), cutoffDate, fsImpl)) {
660235
660357
  result.messages++;
660236
660358
  }
660237
660359
  } catch {
@@ -660241,7 +660363,7 @@ async function cleanupOldDebugLogs() {
660241
660363
  return result;
660242
660364
  }
660243
660365
  async function cleanupNpmCacheForURHQPackages() {
660244
- const markerPath = join208(getURConfigHomeDir(), ".npm-cache-cleanup");
660366
+ const markerPath = join209(getURConfigHomeDir(), ".npm-cache-cleanup");
660245
660367
  try {
660246
660368
  const stat47 = await fs12.stat(markerPath);
660247
660369
  if (Date.now() - stat47.mtimeMs < ONE_DAY_MS) {
@@ -660256,7 +660378,7 @@ async function cleanupNpmCacheForURHQPackages() {
660256
660378
  return;
660257
660379
  }
660258
660380
  logForDebugging("npm cache cleanup: starting");
660259
- const npmCachePath = join208(homedir36(), ".npm", "_cacache");
660381
+ const npmCachePath = join209(homedir36(), ".npm", "_cacache");
660260
660382
  const NPM_CACHE_RETENTION_COUNT = 5;
660261
660383
  const startTime = Date.now();
660262
660384
  try {
@@ -660311,7 +660433,7 @@ async function cleanupNpmCacheForURHQPackages() {
660311
660433
  }
660312
660434
  }
660313
660435
  async function cleanupOldVersionsThrottled() {
660314
- const markerPath = join208(getURConfigHomeDir(), ".version-cleanup");
660436
+ const markerPath = join209(getURConfigHomeDir(), ".version-cleanup");
660315
660437
  try {
660316
660438
  const stat47 = await fs12.stat(markerPath);
660317
660439
  if (Date.now() - stat47.mtimeMs < ONE_DAY_MS) {
@@ -663997,7 +664119,7 @@ __export(exports_asciicast, {
663997
664119
  _resetRecordingStateForTesting: () => _resetRecordingStateForTesting
663998
664120
  });
663999
664121
  import { appendFile as appendFile7, rename as rename10 } from "fs/promises";
664000
- import { basename as basename60, dirname as dirname72, join as join210 } from "path";
664122
+ import { basename as basename60, dirname as dirname72, join as join211 } from "path";
664001
664123
  function getRecordFilePath() {
664002
664124
  if (recordingState.filePath !== null) {
664003
664125
  return recordingState.filePath;
@@ -664008,10 +664130,10 @@ function getRecordFilePath() {
664008
664130
  if (!isEnvTruthy(process.env.UR_CODE_TERMINAL_RECORDING)) {
664009
664131
  return null;
664010
664132
  }
664011
- const projectsDir = join210(getURConfigHomeDir(), "projects");
664012
- const projectDir = join210(projectsDir, sanitizePath2(getOriginalCwd()));
664133
+ const projectsDir = join211(getURConfigHomeDir(), "projects");
664134
+ const projectDir = join211(projectsDir, sanitizePath2(getOriginalCwd()));
664013
664135
  recordingState.timestamp = Date.now();
664014
- recordingState.filePath = join210(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
664136
+ recordingState.filePath = join211(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
664015
664137
  return recordingState.filePath;
664016
664138
  }
664017
664139
  function _resetRecordingStateForTesting() {
@@ -664020,13 +664142,13 @@ function _resetRecordingStateForTesting() {
664020
664142
  }
664021
664143
  function getSessionRecordingPaths() {
664022
664144
  const sessionId = getSessionId();
664023
- const projectsDir = join210(getURConfigHomeDir(), "projects");
664024
- const projectDir = join210(projectsDir, sanitizePath2(getOriginalCwd()));
664145
+ const projectsDir = join211(getURConfigHomeDir(), "projects");
664146
+ const projectDir = join211(projectsDir, sanitizePath2(getOriginalCwd()));
664025
664147
  try {
664026
664148
  const entries = getFsImplementation().readdirSync(projectDir);
664027
664149
  const names = typeof entries[0] === "string" ? entries : entries.map((e) => e.name);
664028
664150
  const files2 = names.filter((f) => f.startsWith(sessionId) && f.endsWith(".cast")).sort();
664029
- return files2.map((f) => join210(projectDir, f));
664151
+ return files2.map((f) => join211(projectDir, f));
664030
664152
  } catch {
664031
664153
  return [];
664032
664154
  }
@@ -664036,9 +664158,9 @@ async function renameRecordingForSession() {
664036
664158
  if (!oldPath || recordingState.timestamp === 0) {
664037
664159
  return;
664038
664160
  }
664039
- const projectsDir = join210(getURConfigHomeDir(), "projects");
664040
- const projectDir = join210(projectsDir, sanitizePath2(getOriginalCwd()));
664041
- const newPath = join210(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
664161
+ const projectsDir = join211(getURConfigHomeDir(), "projects");
664162
+ const projectDir = join211(projectsDir, sanitizePath2(getOriginalCwd()));
664163
+ const newPath = join211(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
664042
664164
  if (oldPath === newPath) {
664043
664165
  return;
664044
664166
  }
@@ -665643,7 +665765,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
665643
665765
  } catch {}
665644
665766
  const data = {
665645
665767
  trigger: trigger2,
665646
- version: "1.44.8",
665768
+ version: "1.44.9",
665647
665769
  platform: process.platform,
665648
665770
  transcript,
665649
665771
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -666915,7 +667037,7 @@ var init_useChromeExtensionNotification = __esm(() => {
666915
667037
  });
666916
667038
 
666917
667039
  // src/utils/plugins/officialMarketplaceStartupCheck.ts
666918
- import { join as join211 } from "path";
667040
+ import { join as join212 } from "path";
666919
667041
  function isOfficialMarketplaceAutoInstallDisabled() {
666920
667042
  return isEnvTruthy(process.env.UR_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL);
666921
667043
  }
@@ -666999,7 +667121,7 @@ async function checkAndInstallOfficialMarketplace() {
666999
667121
  return { installed: false, skipped: true, reason: "policy_blocked" };
667000
667122
  }
667001
667123
  const cacheDir = getMarketplacesCacheDir();
667002
- const installLocation = join211(cacheDir, OFFICIAL_MARKETPLACE_NAME);
667124
+ const installLocation = join212(cacheDir, OFFICIAL_MARKETPLACE_NAME);
667003
667125
  const gcsSha = await fetchOfficialMarketplaceFromGcs(installLocation, cacheDir);
667004
667126
  if (gcsSha !== null) {
667005
667127
  const known = await loadKnownMarketplacesConfig();
@@ -669988,7 +670110,7 @@ var init_usePluginRecommendationBase = __esm(() => {
669988
670110
  });
669989
670111
 
669990
670112
  // src/hooks/useLspPluginRecommendation.tsx
669991
- import { extname as extname23, join as join212 } from "path";
670113
+ import { extname as extname23, join as join213 } from "path";
669992
670114
  function useLspPluginRecommendation() {
669993
670115
  const $3 = import_compiler_runtime346.c(12);
669994
670116
  const trackedFiles = useAppState(_temp206);
@@ -670073,7 +670195,7 @@ function useLspPluginRecommendation() {
670073
670195
  case "yes": {
670074
670196
  installPluginAndNotify(pluginId, pluginName, "lsp-plugin", addNotification, async (pluginData) => {
670075
670197
  logForDebugging(`[useLspPluginRecommendation] Installing plugin: ${pluginId}`);
670076
- const localSourcePath = typeof pluginData.entry.source === "string" ? join212(pluginData.marketplaceInstallLocation, pluginData.entry.source) : undefined;
670198
+ const localSourcePath = typeof pluginData.entry.source === "string" ? join213(pluginData.marketplaceInstallLocation, pluginData.entry.source) : undefined;
670077
670199
  await cacheAndRegisterPlugin(pluginId, pluginData.entry, "user", undefined, localSourcePath);
670078
670200
  const settings = getSettingsForSource("userSettings");
670079
670201
  updateSettingsForSource("userSettings", {
@@ -672904,7 +673026,7 @@ var exports_REPL = {};
672904
673026
  __export(exports_REPL, {
672905
673027
  REPL: () => REPL
672906
673028
  });
672907
- import { dirname as dirname74, join as join213 } from "path";
673029
+ import { dirname as dirname74, join as join214 } from "path";
672908
673030
  import { tmpdir as tmpdir13 } from "os";
672909
673031
  import { writeFile as writeFile47 } from "fs/promises";
672910
673032
  import { randomUUID as randomUUID57 } from "crypto";
@@ -675476,7 +675598,7 @@ Note: ctrl + z now suspends UR, ctrl + _ undoes input.
675476
675598
  const w = Math.max(80, (process.stdout.columns ?? 80) - 6);
675477
675599
  const raw = await renderMessagesToPlainText(deferredMessages, tools, w);
675478
675600
  const text = raw.replace(/[ \t]+$/gm, "");
675479
- const path24 = join213(tmpdir13(), `cc-transcript-${Date.now()}.txt`);
675601
+ const path24 = join214(tmpdir13(), `cc-transcript-${Date.now()}.txt`);
675480
675602
  await writeFile47(path24, text);
675481
675603
  const opened = openFileInExternalEditor(path24);
675482
675604
  setStatus2(opened ? `opening ${path24}` : `wrote ${path24} \xB7 no $VISUAL/$EDITOR set`);
@@ -677528,7 +677650,7 @@ function WelcomeV2() {
677528
677650
  dimColor: true,
677529
677651
  children: [
677530
677652
  "v",
677531
- "1.44.8"
677653
+ "1.44.9"
677532
677654
  ]
677533
677655
  }, undefined, true, undefined, this)
677534
677656
  ]
@@ -678788,7 +678910,7 @@ function completeOnboarding() {
678788
678910
  saveGlobalConfig((current) => ({
678789
678911
  ...current,
678790
678912
  hasCompletedOnboarding: true,
678791
- lastOnboardingVersion: "1.44.8"
678913
+ lastOnboardingVersion: "1.44.9"
678792
678914
  }));
678793
678915
  }
678794
678916
  function showDialog(root2, renderer) {
@@ -683779,12 +683901,12 @@ var init_createDirectConnectSession = __esm(() => {
683779
683901
  });
683780
683902
 
683781
683903
  // src/utils/errorLogSink.ts
683782
- import { dirname as dirname76, join as join214 } from "path";
683904
+ import { dirname as dirname76, join as join215 } from "path";
683783
683905
  function getErrorsPath() {
683784
- return join214(CACHE_PATHS.errors(), DATE + ".jsonl");
683906
+ return join215(CACHE_PATHS.errors(), DATE + ".jsonl");
683785
683907
  }
683786
683908
  function getMCPLogsPath(serverName) {
683787
- return join214(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
683909
+ return join215(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
683788
683910
  }
683789
683911
  function createJsonlWriter(options2) {
683790
683912
  const writer = createBufferedWriter(options2);
@@ -683828,7 +683950,7 @@ function appendToLog(path24, message) {
683828
683950
  cwd: getFsImplementation().cwd(),
683829
683951
  userType: process.env.USER_TYPE,
683830
683952
  sessionId: getSessionId(),
683831
- version: "1.44.8"
683953
+ version: "1.44.9"
683832
683954
  };
683833
683955
  getLogWriter(path24).write(messageWithTimestamp);
683834
683956
  }
@@ -684127,7 +684249,7 @@ var init_sessionMemory = __esm(() => {
684127
684249
  // src/utils/iTermBackup.ts
684128
684250
  import { copyFile as copyFile11, stat as stat49 } from "fs/promises";
684129
684251
  import { homedir as homedir38 } from "os";
684130
- import { join as join215 } from "path";
684252
+ import { join as join216 } from "path";
684131
684253
  function markITerm2SetupComplete() {
684132
684254
  saveGlobalConfig((current) => ({
684133
684255
  ...current,
@@ -684142,7 +684264,7 @@ function getIterm2RecoveryInfo() {
684142
684264
  };
684143
684265
  }
684144
684266
  function getITerm2PlistPath() {
684145
- return join215(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
684267
+ return join216(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
684146
684268
  }
684147
684269
  async function checkAndRestoreITerm2Backup() {
684148
684270
  const { inProgress, backupPath } = getIterm2RecoveryInfo();
@@ -687616,7 +687738,7 @@ var init_idleTimeout = __esm(() => {
687616
687738
  // src/bridge/inboundAttachments.ts
687617
687739
  import { randomUUID as randomUUID60 } from "crypto";
687618
687740
  import { mkdir as mkdir45, writeFile as writeFile49 } from "fs/promises";
687619
- import { basename as basename61, join as join216 } from "path";
687741
+ import { basename as basename61, join as join217 } from "path";
687620
687742
  function debug(msg) {
687621
687743
  logForDebugging(`[bridge:inbound-attach] ${msg}`);
687622
687744
  }
@@ -687632,7 +687754,7 @@ function sanitizeFileName(name) {
687632
687754
  return base2 || "attachment";
687633
687755
  }
687634
687756
  function uploadsDir() {
687635
- return join216(getURConfigHomeDir(), "uploads", getSessionId());
687757
+ return join217(getURConfigHomeDir(), "uploads", getSessionId());
687636
687758
  }
687637
687759
  async function resolveOne(att) {
687638
687760
  const token = getBridgeAccessToken();
@@ -687661,7 +687783,7 @@ async function resolveOne(att) {
687661
687783
  const safeName = sanitizeFileName(att.file_name);
687662
687784
  const prefix = (att.file_uuid.slice(0, 8) || randomUUID60().slice(0, 8)).replace(/[^a-zA-Z0-9_-]/g, "_");
687663
687785
  const dir = uploadsDir();
687664
- const outPath = join216(dir, `${prefix}-${safeName}`);
687786
+ const outPath = join217(dir, `${prefix}-${safeName}`);
687665
687787
  try {
687666
687788
  await mkdir45(dir, { recursive: true });
687667
687789
  await writeFile49(outPath, data);
@@ -687761,7 +687883,7 @@ var init_sessionUrl = __esm(() => {
687761
687883
 
687762
687884
  // src/utils/plugins/zipCacheAdapters.ts
687763
687885
  import { readFile as readFile54 } from "fs/promises";
687764
- import { join as join217 } from "path";
687886
+ import { join as join218 } from "path";
687765
687887
  async function readZipCacheKnownMarketplaces() {
687766
687888
  try {
687767
687889
  const content = await readFile54(getZipCacheKnownMarketplacesPath(), "utf-8");
@@ -687786,13 +687908,13 @@ async function saveMarketplaceJsonToZipCache(marketplaceName, installLocation) {
687786
687908
  const content = await readMarketplaceJsonContent(installLocation);
687787
687909
  if (content !== null) {
687788
687910
  const relPath = getMarketplaceJsonRelativePath(marketplaceName);
687789
- await atomicWriteToZipCache(join217(zipCachePath, relPath), content);
687911
+ await atomicWriteToZipCache(join218(zipCachePath, relPath), content);
687790
687912
  }
687791
687913
  }
687792
687914
  async function readMarketplaceJsonContent(dir) {
687793
687915
  const candidates2 = [
687794
- join217(dir, ".ur-plugin", "marketplace.json"),
687795
- join217(dir, "marketplace.json"),
687916
+ join218(dir, ".ur-plugin", "marketplace.json"),
687917
+ join218(dir, "marketplace.json"),
687796
687918
  dir
687797
687919
  ];
687798
687920
  for (const candidate of candidates2) {
@@ -687922,8 +688044,8 @@ async function getEnvLessBridgeConfig() {
687922
688044
  }
687923
688045
  async function checkEnvLessBridgeMinVersion() {
687924
688046
  const cfg = await getEnvLessBridgeConfig();
687925
- if (cfg.min_version && lt("1.44.8", cfg.min_version)) {
687926
- return `Your version of UR (${"1.44.8"}) is too old for Remote Control.
688047
+ if (cfg.min_version && lt("1.44.9", cfg.min_version)) {
688048
+ return `Your version of UR (${"1.44.9"}) is too old for Remote Control.
687927
688049
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
687928
688050
  }
687929
688051
  return null;
@@ -688251,9 +688373,9 @@ __export(exports_bridgePointer, {
688251
688373
  BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
688252
688374
  });
688253
688375
  import { mkdir as mkdir46, readFile as readFile55, stat as stat50, unlink as unlink26, writeFile as writeFile50 } from "fs/promises";
688254
- import { dirname as dirname77, join as join218 } from "path";
688376
+ import { dirname as dirname77, join as join219 } from "path";
688255
688377
  function getBridgePointerPath(dir) {
688256
- return join218(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
688378
+ return join219(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
688257
688379
  }
688258
688380
  async function writeBridgePointer(dir, pointer) {
688259
688381
  const path24 = getBridgePointerPath(dir);
@@ -688397,7 +688519,7 @@ async function initBridgeCore(params) {
688397
688519
  const rawApi = createBridgeApiClient({
688398
688520
  baseUrl,
688399
688521
  getAccessToken,
688400
- runnerVersion: "1.44.8",
688522
+ runnerVersion: "1.44.9",
688401
688523
  onDebug: logForDebugging,
688402
688524
  onAuth401,
688403
688525
  getTrustedDeviceToken
@@ -694079,7 +694201,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
694079
694201
  setCwd(cwd3);
694080
694202
  const server2 = new Server({
694081
694203
  name: "ur/tengu",
694082
- version: "1.44.8"
694204
+ version: "1.44.9"
694083
694205
  }, {
694084
694206
  capabilities: {
694085
694207
  tools: {}
@@ -694211,14 +694333,14 @@ __export(exports_urDesktop, {
694211
694333
  });
694212
694334
  import { readdir as readdir33, readFile as readFile57, stat as stat52 } from "fs/promises";
694213
694335
  import { homedir as homedir39 } from "os";
694214
- import { join as join219 } from "path";
694336
+ import { join as join220 } from "path";
694215
694337
  async function getURDesktopConfigPath() {
694216
694338
  const platform7 = getPlatform();
694217
694339
  if (!SUPPORTED_PLATFORMS.includes(platform7)) {
694218
694340
  throw new Error(`Unsupported platform: ${platform7} - UR Desktop integration only works on macOS and WSL.`);
694219
694341
  }
694220
694342
  if (platform7 === "macos") {
694221
- return join219(homedir39(), "Library", "Application Support", "UR", "ur_desktop_config.json");
694343
+ return join220(homedir39(), "Library", "Application Support", "UR", "ur_desktop_config.json");
694222
694344
  }
694223
694345
  const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
694224
694346
  if (windowsHome) {
@@ -694237,7 +694359,7 @@ async function getURDesktopConfigPath() {
694237
694359
  if (user.name === "Public" || user.name === "Default" || user.name === "Default User" || user.name === "All Users") {
694238
694360
  continue;
694239
694361
  }
694240
- const potentialConfigPath = join219(usersDir, user.name, "AppData", "Roaming", "UR", "ur_desktop_config.json");
694362
+ const potentialConfigPath = join220(usersDir, user.name, "AppData", "Roaming", "UR", "ur_desktop_config.json");
694241
694363
  try {
694242
694364
  await stat52(potentialConfigPath);
694243
694365
  return potentialConfigPath;
@@ -694791,11 +694913,11 @@ var init_providers2 = __esm(() => {
694791
694913
  });
694792
694914
 
694793
694915
  // src/utils/plugins/pluginDoctor.ts
694794
- import { existsSync as existsSync64, readdirSync as readdirSync25, readFileSync as readFileSync66, statSync as statSync15 } from "fs";
694795
- import { basename as basename62, join as join220 } from "path";
694916
+ import { existsSync as existsSync65, readdirSync as readdirSync26, readFileSync as readFileSync67, statSync as statSync16 } from "fs";
694917
+ import { basename as basename62, join as join221 } from "path";
694796
694918
  function manifestPathFor(dir) {
694797
- const p2 = join220(dir, ".ur-plugin", "plugin.json");
694798
- return existsSync64(p2) ? p2 : null;
694919
+ const p2 = join221(dir, ".ur-plugin", "plugin.json");
694920
+ return existsSync65(p2) ? p2 : null;
694799
694921
  }
694800
694922
  function discoverPluginDirs(roots) {
694801
694923
  const dirs = [];
@@ -694807,7 +694929,7 @@ function discoverPluginDirs(roots) {
694807
694929
  }
694808
694930
  };
694809
694931
  for (const root2 of roots) {
694810
- if (!root2 || !existsSync64(root2))
694932
+ if (!root2 || !existsSync65(root2))
694811
694933
  continue;
694812
694934
  if (manifestPathFor(root2)) {
694813
694935
  add(root2);
@@ -694815,14 +694937,14 @@ function discoverPluginDirs(roots) {
694815
694937
  }
694816
694938
  let entries = [];
694817
694939
  try {
694818
- entries = readdirSync25(root2);
694940
+ entries = readdirSync26(root2);
694819
694941
  } catch {
694820
694942
  continue;
694821
694943
  }
694822
694944
  for (const entry of entries) {
694823
- const full = join220(root2, entry);
694945
+ const full = join221(root2, entry);
694824
694946
  try {
694825
- if (statSync15(full).isDirectory() && manifestPathFor(full))
694947
+ if (statSync16(full).isDirectory() && manifestPathFor(full))
694826
694948
  add(full);
694827
694949
  } catch {}
694828
694950
  }
@@ -694846,7 +694968,7 @@ function doctorPluginDir(dir) {
694846
694968
  }
694847
694969
  let parsed;
694848
694970
  try {
694849
- parsed = JSON.parse(readFileSync66(manifestPath5, "utf8"));
694971
+ parsed = JSON.parse(readFileSync67(manifestPath5, "utf8"));
694850
694972
  } catch (error40) {
694851
694973
  return {
694852
694974
  name: basename62(dir),
@@ -694951,7 +695073,7 @@ __export(exports_plugins, {
694951
695073
  VALID_UPDATE_SCOPES: () => VALID_UPDATE_SCOPES,
694952
695074
  VALID_INSTALLABLE_SCOPES: () => VALID_INSTALLABLE_SCOPES
694953
695075
  });
694954
- import { basename as basename63, dirname as dirname79, join as join221, resolve as resolve52 } from "path";
695076
+ import { basename as basename63, dirname as dirname79, join as join222, resolve as resolve52 } from "path";
694955
695077
  function handleMarketplaceError(error40, action3) {
694956
695078
  logError2(error40);
694957
695079
  cliError(`${figures_default.cross} Failed to ${action3}: ${errorMessage2(error40)}`);
@@ -694978,7 +695100,7 @@ async function pluginDoctorHandler(options2) {
694978
695100
  const roots = [];
694979
695101
  if (options2.path)
694980
695102
  roots.push(resolve52(options2.path));
694981
- roots.push(join221(process.cwd(), ".ur", "plugins"));
695103
+ roots.push(join222(process.cwd(), ".ur", "plugins"));
694982
695104
  try {
694983
695105
  const data = loadInstalledPluginsV2();
694984
695106
  for (const installations of Object.values(data.plugins ?? {})) {
@@ -695485,12 +695607,12 @@ __export(exports_install, {
695485
695607
  install: () => install
695486
695608
  });
695487
695609
  import { homedir as homedir40 } from "os";
695488
- import { join as join222 } from "path";
695610
+ import { join as join223 } from "path";
695489
695611
  function getInstallationPath2() {
695490
695612
  const isWindows2 = env2.platform === "win32";
695491
695613
  const homeDir = homedir40();
695492
695614
  if (isWindows2) {
695493
- const windowsPath = join222(homeDir, ".local", "bin", "ur.exe");
695615
+ const windowsPath = join223(homeDir, ".local", "bin", "ur.exe");
695494
695616
  return windowsPath.replace(/\//g, "\\");
695495
695617
  }
695496
695618
  return "~/.local/bin/ur";
@@ -696121,7 +696243,7 @@ async function update() {
696121
696243
  logEvent("tengu_update_check", {});
696122
696244
  const diagnostic = await getDoctorDiagnostic();
696123
696245
  const result = await checkUpgradeStatus({
696124
- currentVersion: "1.44.8",
696246
+ currentVersion: "1.44.9",
696125
696247
  packageName: UR_AGENT_PACKAGE_NAME,
696126
696248
  installationType: diagnostic.installationType,
696127
696249
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -696148,7 +696270,7 @@ __export(exports_main, {
696148
696270
  startDeferredPrefetches: () => startDeferredPrefetches,
696149
696271
  main: () => main
696150
696272
  });
696151
- import { readFileSync as readFileSync67 } from "fs";
696273
+ import { readFileSync as readFileSync68 } from "fs";
696152
696274
  import { resolve as resolve53 } from "path";
696153
696275
  function logManagedSettings() {
696154
696276
  try {
@@ -696304,7 +696426,7 @@ function loadSettingsFromFlag(settingsFile) {
696304
696426
  resolvedPath: resolvedSettingsPath
696305
696427
  } = safeResolvePath(getFsImplementation(), settingsFile);
696306
696428
  try {
696307
- readFileSync67(resolvedSettingsPath, "utf8");
696429
+ readFileSync68(resolvedSettingsPath, "utf8");
696308
696430
  } catch (e) {
696309
696431
  if (isENOENT(e)) {
696310
696432
  process.stderr.write(source_default.red(`Error: Settings file not found: ${resolvedSettingsPath}
@@ -696718,7 +696840,7 @@ ${getTmuxInstallInstructions2()}
696718
696840
  }
696719
696841
  try {
696720
696842
  const filePath = resolve53(options2.systemPromptFile);
696721
- systemPrompt = readFileSync67(filePath, "utf8");
696843
+ systemPrompt = readFileSync68(filePath, "utf8");
696722
696844
  } catch (error40) {
696723
696845
  const code = getErrnoCode(error40);
696724
696846
  if (code === "ENOENT") {
@@ -696740,7 +696862,7 @@ ${getTmuxInstallInstructions2()}
696740
696862
  }
696741
696863
  try {
696742
696864
  const filePath = resolve53(options2.appendSystemPromptFile);
696743
- appendSystemPrompt = readFileSync67(filePath, "utf8");
696865
+ appendSystemPrompt = readFileSync68(filePath, "utf8");
696744
696866
  } catch (error40) {
696745
696867
  const code = getErrnoCode(error40);
696746
696868
  if (code === "ENOENT") {
@@ -697367,7 +697489,7 @@ ${customInstructions}` : customInstructions;
697367
697489
  }
697368
697490
  }
697369
697491
  logForDiagnosticsNoPII("info", "started", {
697370
- version: "1.44.8",
697492
+ version: "1.44.9",
697371
697493
  is_native_binary: isInBundledMode()
697372
697494
  });
697373
697495
  registerCleanup(async () => {
@@ -698153,7 +698275,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
698153
698275
  pendingHookMessages
698154
698276
  }, renderAndRun);
698155
698277
  }
698156
- }).version("1.44.8 (UR-Nexus)", "-v, --version", "Output the version number");
698278
+ }).version("1.44.9 (UR-Nexus)", "-v, --version", "Output the version number");
698157
698279
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
698158
698280
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
698159
698281
  if (canUserConfigureAdvisor()) {
@@ -699068,7 +699190,7 @@ if (false) {}
699068
699190
  async function main2() {
699069
699191
  const args = process.argv.slice(2);
699070
699192
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
699071
- console.log(`${"1.44.8"} (UR-Nexus)`);
699193
+ console.log(`${"1.44.9"} (UR-Nexus)`);
699072
699194
  return;
699073
699195
  }
699074
699196
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {