ur-agent 1.44.7 → 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.7"}`;
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.7"} (${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.7"}${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.7",
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.7".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.7",
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.7"
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.7");
78869
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.9");
78870
78870
  }
78871
78871
  async function reinitialize1PEventLoggingIfConfigChanged() {
78872
78872
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -81501,6 +81501,7 @@ var init_types2 = __esm(() => {
81501
81501
  autoMemoryEnabled: exports_external.boolean().optional().describe("Enable auto-memory for this project. When false, UR will not read from or write to the auto-memory directory."),
81502
81502
  autoMemoryDirectory: exports_external.string().optional().describe("Custom directory path for auto-memory storage. Supports ~/ prefix for home directory expansion. Ignored if set in projectSettings (checked-in .ur/settings.json) for security. When unset, defaults to ~/.ur/projects/<sanitized-cwd>/memory/."),
81503
81503
  autoMemoryExtractionInterval: exports_external.number().int().min(1).optional().describe("Run the auto-memory extraction agent only every N eligible turns (default 1 = every turn). The extraction is a forked agent call on the session model, so raising this trades memory freshness for lower token/compute usage."),
81504
+ automaticLearningEnabled: exports_external.boolean().optional().describe("Enable automatic learning from completed ci-loop, arena, escalation, and test-first outcomes. Default: true. The automatic path is a local JSON fold and uses no model calls."),
81504
81505
  verifier: exports_external.object({
81505
81506
  askBeforeGates: exports_external.boolean().optional().describe("When true, UR asks whether to run project verification commands (tests, typecheck, lint) after a task instead of running them automatically. Default: false.")
81506
81507
  }).optional().describe("Verifier behavior configuration"),
@@ -81513,7 +81514,7 @@ var init_types2 = __esm(() => {
81513
81514
  showThinkingSummaries: exports_external.boolean().optional().describe("Show thinking summaries in the transcript view (ctrl+o). Default: false."),
81514
81515
  skipDangerousModePermissionPrompt: exports_external.boolean().optional().describe("Whether the user has accepted the bypass permissions mode dialog"),
81515
81516
  ...{},
81516
- 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."),
81517
81518
  sshConfigs: exports_external.array(exports_external.object({
81518
81519
  id: exports_external.string().describe("Unique identifier for this SSH config. Used to match configs across settings sources."),
81519
81520
  name: exports_external.string().describe("Display name for the SSH connection"),
@@ -83404,7 +83405,16 @@ function saveStats(cwd2, stats) {
83404
83405
  writeFileSync6(statsPath(cwd2), `${JSON.stringify(stats, null, 2)}
83405
83406
  `);
83406
83407
  }
83408
+ function isAutomaticLearningEnabled() {
83409
+ if (isEnvTruthy(process.env.UR_CODE_DISABLE_AUTO_LEARNING)) {
83410
+ return false;
83411
+ }
83412
+ return getInitialSettings().automaticLearningEnabled !== false;
83413
+ }
83407
83414
  function recordOutcome(cwd2, input) {
83415
+ if (!isAutomaticLearningEnabled()) {
83416
+ return;
83417
+ }
83408
83418
  try {
83409
83419
  saveStats(cwd2, foldOutcomes(loadStats(cwd2), [outcomeFromRun(input)]));
83410
83420
  } catch {}
@@ -83453,6 +83463,29 @@ async function runLearn(options) {
83453
83463
  saveStats(options.cwd, stats);
83454
83464
  return { stats, newOutcomes: fresh.length, newLessons };
83455
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
+ }
83456
83489
  function formatStats(stats, json2) {
83457
83490
  if (json2)
83458
83491
  return JSON.stringify(stats, null, 2);
@@ -83480,6 +83513,12 @@ function formatStats(stats, json2) {
83480
83513
  for (const lesson of stats.lessons.slice(-10))
83481
83514
  lines.push(` - ${lesson}`);
83482
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
+ }
83483
83522
  if (cats.length === 0 && models.length === 0) {
83484
83523
  lines.push("No outcomes yet. Capture work with `ur artifacts`, then run `ur learn`.");
83485
83524
  }
@@ -83504,7 +83543,9 @@ function formatLearnResult(result, json2) {
83504
83543
  }
83505
83544
  var TEST_PASS_RE, TEST_FAIL_RE;
83506
83545
  var init_learning = __esm(() => {
83546
+ init_envUtils();
83507
83547
  init_json();
83548
+ init_settings2();
83508
83549
  init_artifacts();
83509
83550
  init_headlessAgent();
83510
83551
  init_intentRouter();
@@ -84761,7 +84802,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
84761
84802
  function formatA2AAgentCard(options = {}, pretty = true) {
84762
84803
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
84763
84804
  }
84764
- var urVersion = "1.44.7", coverage, priorityRoadmap;
84805
+ var urVersion = "1.44.9", coverage, priorityRoadmap;
84765
84806
  var init_trends = __esm(() => {
84766
84807
  coverage = [
84767
84808
  {
@@ -86756,7 +86797,7 @@ function getAttributionHeader(fingerprint) {
86756
86797
  if (!isAttributionHeaderEnabled()) {
86757
86798
  return "";
86758
86799
  }
86759
- const version2 = `${"1.44.7"}.${fingerprint}`;
86800
+ const version2 = `${"1.44.9"}.${fingerprint}`;
86760
86801
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
86761
86802
  const cch = "";
86762
86803
  const workload = getWorkload();
@@ -194726,7 +194767,7 @@ function getTelemetryAttributes() {
194726
194767
  attributes["session.id"] = sessionId;
194727
194768
  }
194728
194769
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
194729
- attributes["app.version"] = "1.44.7";
194770
+ attributes["app.version"] = "1.44.9";
194730
194771
  }
194731
194772
  const oauthAccount = getOauthAccountInfo();
194732
194773
  if (oauthAccount) {
@@ -230114,7 +230155,7 @@ function getInstallationEnv() {
230114
230155
  return;
230115
230156
  }
230116
230157
  function getURCodeVersion() {
230117
- return "1.44.7";
230158
+ return "1.44.9";
230118
230159
  }
230119
230160
  async function getInstalledVSCodeExtensionVersion(command) {
230120
230161
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -232953,7 +232994,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
232953
232994
  const client2 = new Client({
232954
232995
  name: "ur",
232955
232996
  title: "UR",
232956
- version: "1.44.7",
232997
+ version: "1.44.9",
232957
232998
  description: "UR-Nexus autonomous engineering workflow engine",
232958
232999
  websiteUrl: PRODUCT_URL
232959
233000
  }, {
@@ -233307,7 +233348,7 @@ var init_client5 = __esm(() => {
233307
233348
  const client2 = new Client({
233308
233349
  name: "ur",
233309
233350
  title: "UR",
233310
- version: "1.44.7",
233351
+ version: "1.44.9",
233311
233352
  description: "UR-Nexus autonomous engineering workflow engine",
233312
233353
  websiteUrl: PRODUCT_URL
233313
233354
  }, {
@@ -243121,9 +243162,9 @@ async function assertMinVersion() {
243121
243162
  if (false) {}
243122
243163
  try {
243123
243164
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
243124
- if (versionConfig.minVersion && lt("1.44.7", versionConfig.minVersion)) {
243165
+ if (versionConfig.minVersion && lt("1.44.9", versionConfig.minVersion)) {
243125
243166
  console.error(`
243126
- It looks like your version of UR (${"1.44.7"}) needs an update.
243167
+ It looks like your version of UR (${"1.44.9"}) needs an update.
243127
243168
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
243128
243169
 
243129
243170
  To update, please run:
@@ -243339,7 +243380,7 @@ async function installGlobalPackage(specificVersion) {
243339
243380
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
243340
243381
  logEvent("tengu_auto_updater_lock_contention", {
243341
243382
  pid: process.pid,
243342
- currentVersion: "1.44.7"
243383
+ currentVersion: "1.44.9"
243343
243384
  });
243344
243385
  return "in_progress";
243345
243386
  }
@@ -243348,7 +243389,7 @@ async function installGlobalPackage(specificVersion) {
243348
243389
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
243349
243390
  logError2(new Error("Windows NPM detected in WSL environment"));
243350
243391
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
243351
- currentVersion: "1.44.7"
243392
+ currentVersion: "1.44.9"
243352
243393
  });
243353
243394
  console.error(`
243354
243395
  Error: Windows NPM detected in WSL
@@ -243883,7 +243924,7 @@ function detectLinuxGlobPatternWarnings() {
243883
243924
  }
243884
243925
  async function getDoctorDiagnostic() {
243885
243926
  const installationType = await getCurrentInstallationType();
243886
- const version2 = typeof MACRO !== "undefined" ? "1.44.7" : "unknown";
243927
+ const version2 = typeof MACRO !== "undefined" ? "1.44.9" : "unknown";
243887
243928
  const installationPath = await getInstallationPath();
243888
243929
  const invokedBinary = getInvokedBinary();
243889
243930
  const multipleInstallations = await detectMultipleInstallations();
@@ -244818,8 +244859,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244818
244859
  const maxVersion = await getMaxVersion();
244819
244860
  if (maxVersion && gt(version2, maxVersion)) {
244820
244861
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
244821
- if (gte("1.44.7", maxVersion)) {
244822
- logForDebugging(`Native installer: current version ${"1.44.7"} 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`);
244823
244864
  logEvent("tengu_native_update_skipped_max_version", {
244824
244865
  latency_ms: Date.now() - startTime,
244825
244866
  max_version: maxVersion,
@@ -244830,7 +244871,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244830
244871
  version2 = maxVersion;
244831
244872
  }
244832
244873
  }
244833
- if (!forceReinstall && version2 === "1.44.7" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244874
+ if (!forceReinstall && version2 === "1.44.9" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244834
244875
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
244835
244876
  logEvent("tengu_native_update_complete", {
244836
244877
  latency_ms: Date.now() - startTime,
@@ -290249,6 +290290,40 @@ function stripTrailingWhitespace(str2) {
290249
290290
  }
290250
290291
  return result;
290251
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
+ }
290252
290327
  function findActualString(fileContent, searchString) {
290253
290328
  if (fileContent.includes(searchString)) {
290254
290329
  return searchString;
@@ -290259,7 +290334,7 @@ function findActualString(fileContent, searchString) {
290259
290334
  if (searchIndex !== -1) {
290260
290335
  return fileContent.substring(searchIndex, searchIndex + searchString.length);
290261
290336
  }
290262
- return null;
290337
+ return findActualStringWhitespaceTolerant(fileContent, searchString);
290263
290338
  }
290264
290339
  function preserveQuoteStyle(oldString, actualOldString, newString) {
290265
290340
  if (oldString === actualOldString) {
@@ -299333,6 +299408,16 @@ function normalizeAskUserQuestionInput2(value) {
299333
299408
  metadata: input.metadata
299334
299409
  } : {}
299335
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
+ }
299336
299421
  if (Array.isArray(input.questions)) {
299337
299422
  return {
299338
299423
  questions: input.questions.map(normalizeQuestionInput),
@@ -299427,6 +299512,7 @@ var init_AskUserQuestionTool = __esm(() => {
299427
299512
  init_MessageResponse();
299428
299513
  init_figures2();
299429
299514
  init_PermissionMode();
299515
+ init_json();
299430
299516
  init_v4();
299431
299517
  init_ink2();
299432
299518
  init_Tool();
@@ -302327,6 +302413,11 @@ var init_supportedSettings = __esm(() => {
302327
302413
  type: "boolean",
302328
302414
  description: "Enable auto-memory"
302329
302415
  },
302416
+ automaticLearningEnabled: {
302417
+ source: "settings",
302418
+ type: "boolean",
302419
+ description: "Automatically learn from completed agent runs using local JSON stats"
302420
+ },
302330
302421
  "codeIndex.autoReindex": {
302331
302422
  source: "global",
302332
302423
  type: "boolean",
@@ -323429,16 +323520,44 @@ function isHumanTurn(m) {
323429
323520
  }
323430
323521
 
323431
323522
  // src/memdir/findRelevantMemories.ts
323523
+ function tokenizeForMemoryRecall(text) {
323524
+ const terms = new Set;
323525
+ for (const raw of text.toLowerCase().match(/[a-z0-9][a-z0-9._/-]{2,}/g) ?? []) {
323526
+ const term = raw.replace(/^[/._-]+|[/._-]+$/g, "");
323527
+ if (term.length >= 3 && !STOP_WORDS.has(term)) {
323528
+ terms.add(term);
323529
+ }
323530
+ }
323531
+ return terms;
323532
+ }
323533
+ function scoreMemoryForQuery(queryTerms, memory) {
323534
+ const haystack = `${memory.filename} ${memory.description ?? ""} ${memory.type ?? ""}`.toLowerCase();
323535
+ let score = 0;
323536
+ for (const term of queryTerms) {
323537
+ if (haystack.includes(term)) {
323538
+ score += memory.filename.toLowerCase().includes(term) ? 3 : 1;
323539
+ }
323540
+ }
323541
+ return score;
323542
+ }
323432
323543
  async function findRelevantMemories(query2, memoryDir, signal, recentTools = [], alreadySurfaced = new Set) {
323433
323544
  const memories = (await scanMemoryFiles(memoryDir, signal)).filter((m) => !alreadySurfaced.has(m.filePath));
323434
323545
  if (memories.length === 0) {
323435
323546
  return [];
323436
323547
  }
323437
- const selectedFilenames = await selectRelevantMemories(query2, memories, signal, recentTools);
323438
- const byFilename = new Map(memories.map((m) => [m.filename, m]));
323548
+ const queryTerms = tokenizeForMemoryRecall(query2);
323549
+ if (queryTerms.size === 0) {
323550
+ return [];
323551
+ }
323552
+ const candidates2 = memories.map((memory) => ({ memory, score: scoreMemoryForQuery(queryTerms, memory) })).filter(({ score }) => score > 0).sort((a2, b) => b.score - a2.score || b.memory.mtimeMs - a2.memory.mtimeMs).slice(0, MAX_SELECTOR_CANDIDATES).map(({ memory }) => memory);
323553
+ if (candidates2.length === 0) {
323554
+ return [];
323555
+ }
323556
+ const selectedFilenames = await selectRelevantMemories(query2, candidates2, signal, recentTools);
323557
+ const byFilename = new Map(candidates2.map((m) => [m.filename, m]));
323439
323558
  const selected = selectedFilenames.map((filename) => byFilename.get(filename)).filter((m) => m !== undefined);
323440
323559
  if (false) {}
323441
- return selected.map((m) => ({ path: m.filePath, mtimeMs: m.mtimeMs }));
323560
+ return selected.slice(0, 3).map((m) => ({ path: m.filePath, mtimeMs: m.mtimeMs }));
323442
323561
  }
323443
323562
  async function selectRelevantMemories(query2, memories, signal, recentTools) {
323444
323563
  const validFilenames = new Set(memories.map((m) => m.filename));
@@ -323491,11 +323610,11 @@ ${manifest}${toolsSection}`
323491
323610
  }
323492
323611
  var SELECT_MEMORIES_SYSTEM_PROMPT = `You are selecting memories that will be useful to UR as it processes a user's query. You will be given the user's query and a list of available memory files with their filenames and descriptions.
323493
323612
 
323494
- Return a list of filenames for the memories that will clearly be useful to UR as it processes the user's query (up to 5). Only include memories that you are certain will be helpful based on their name and description.
323613
+ Return a list of filenames for the memories that will clearly be useful to UR as it processes the user's query (up to 3). Only include memories that you are certain will be helpful based on their name and description.
323495
323614
  - If you are unsure if a memory will be useful in processing the user's query, then do not include it in your list. Be selective and discerning.
323496
323615
  - If there are no memories in the list that would clearly be useful, feel free to return an empty list.
323497
323616
  - If a list of recently-used tools is provided, do not select memories that are usage reference or API documentation for those tools (UR is already exercising them). DO still select memories containing warnings, gotchas, or known issues about those tools \u2014 active use is exactly when those matter.
323498
- `;
323617
+ `, MAX_SELECTOR_CANDIDATES = 40, STOP_WORDS;
323499
323618
  var init_findRelevantMemories = __esm(() => {
323500
323619
  init_debug();
323501
323620
  init_errors();
@@ -323503,6 +323622,45 @@ var init_findRelevantMemories = __esm(() => {
323503
323622
  init_sideQuery();
323504
323623
  init_slowOperations();
323505
323624
  init_memoryScan();
323625
+ STOP_WORDS = new Set([
323626
+ "a",
323627
+ "about",
323628
+ "an",
323629
+ "and",
323630
+ "are",
323631
+ "as",
323632
+ "at",
323633
+ "be",
323634
+ "but",
323635
+ "by",
323636
+ "can",
323637
+ "do",
323638
+ "for",
323639
+ "from",
323640
+ "how",
323641
+ "i",
323642
+ "in",
323643
+ "is",
323644
+ "it",
323645
+ "me",
323646
+ "my",
323647
+ "of",
323648
+ "on",
323649
+ "or",
323650
+ "our",
323651
+ "please",
323652
+ "should",
323653
+ "that",
323654
+ "the",
323655
+ "this",
323656
+ "to",
323657
+ "use",
323658
+ "we",
323659
+ "what",
323660
+ "when",
323661
+ "with",
323662
+ "you"
323663
+ ]);
323506
323664
  });
323507
323665
 
323508
323666
  // src/utils/attachments.ts
@@ -324186,7 +324344,7 @@ async function getRelevantMemoryAttachments(input, agents, readFileState, recent
324186
324344
  });
324187
324345
  const dirs = memoryDirs.length > 0 ? memoryDirs : [getAutoMemPath()];
324188
324346
  const allResults = await Promise.all(dirs.map((dir) => findRelevantMemories(input, dir, signal, recentTools, alreadySurfaced).catch(() => [])));
324189
- const selected = allResults.flat().filter((m) => !readFileState.has(m.path) && !alreadySurfaced.has(m.path)).slice(0, 5);
324347
+ const selected = allResults.flat().filter((m) => !readFileState.has(m.path) && !alreadySurfaced.has(m.path)).slice(0, 3);
324190
324348
  const memories = await readMemoriesForSurfacing(selected, signal);
324191
324349
  if (memories.length === 0) {
324192
324350
  return [];
@@ -325055,7 +325213,7 @@ function isFileReadDenied(filePath, toolPermissionContext) {
325055
325213
  const denyRule = matchingRuleForInput(filePath, toolPermissionContext, "read", "deny");
325056
325214
  return denyRule !== null;
325057
325215
  }
325058
- var BRIEF_TOOL_NAME3 = null, TODO_REMINDER_CONFIG, PLAN_MODE_ATTACHMENT_CONFIG, MAX_MEMORY_LINES = 200, MAX_MEMORY_BYTES = 4096, RELEVANT_MEMORIES_CONFIG, VERIFY_PLAN_REMINDER_CONFIG, INLINE_NOTIFICATION_MODES, sentSkillNames, suppressNext = false;
325216
+ var BRIEF_TOOL_NAME3 = null, TODO_REMINDER_CONFIG, PLAN_MODE_ATTACHMENT_CONFIG, MAX_MEMORY_LINES = 120, MAX_MEMORY_BYTES = 2048, RELEVANT_MEMORIES_CONFIG, VERIFY_PLAN_REMINDER_CONFIG, INLINE_NOTIFICATION_MODES, sentSkillNames, suppressNext = false;
325059
325217
  var init_attachments2 = __esm(() => {
325060
325218
  init_analytics();
325061
325219
  init_Tool();
@@ -325136,7 +325294,7 @@ var init_attachments2 = __esm(() => {
325136
325294
  FULL_REMINDER_EVERY_N_ATTACHMENTS: 5
325137
325295
  };
325138
325296
  RELEVANT_MEMORIES_CONFIG = {
325139
- MAX_SESSION_BYTES: 60 * 1024
325297
+ MAX_SESSION_BYTES: 24 * 1024
325140
325298
  };
325141
325299
  VERIFY_PLAN_REMINDER_CONFIG = {
325142
325300
  TURNS_BETWEEN_REMINDERS: 10
@@ -341523,7 +341681,7 @@ function Feedback({
341523
341681
  platform: env2.platform,
341524
341682
  gitRepo: envInfo.isGit,
341525
341683
  terminal: env2.terminal,
341526
- version: "1.44.7",
341684
+ version: "1.44.9",
341527
341685
  transcript: normalizeMessagesForAPI(messages),
341528
341686
  errors: sanitizedErrors,
341529
341687
  lastApiRequest: getLastAPIRequest(),
@@ -341715,7 +341873,7 @@ function Feedback({
341715
341873
  ", ",
341716
341874
  env2.terminal,
341717
341875
  ", v",
341718
- "1.44.7"
341876
+ "1.44.9"
341719
341877
  ]
341720
341878
  }, undefined, true, undefined, this)
341721
341879
  ]
@@ -341821,7 +341979,7 @@ ${sanitizedDescription}
341821
341979
  ` + `**Environment Info**
341822
341980
  ` + `- Platform: ${env2.platform}
341823
341981
  ` + `- Terminal: ${env2.terminal}
341824
- ` + `- Version: ${"1.44.7"}
341982
+ ` + `- Version: ${"1.44.9"}
341825
341983
  ` + `- Feedback ID: ${feedbackId}
341826
341984
  ` + `
341827
341985
  **Errors**
@@ -344932,7 +345090,7 @@ function buildPrimarySection() {
344932
345090
  }, undefined, false, undefined, this);
344933
345091
  return [{
344934
345092
  label: "Version",
344935
- value: "1.44.7"
345093
+ value: "1.44.9"
344936
345094
  }, {
344937
345095
  label: "Session name",
344938
345096
  value: nameValue
@@ -348262,7 +348420,7 @@ function Config({
348262
348420
  }
348263
348421
  }, undefined, false, undefined, this)
348264
348422
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime176.jsxDEV(ChannelDowngradeDialog, {
348265
- currentVersion: "1.44.7",
348423
+ currentVersion: "1.44.9",
348266
348424
  onChoice: (choice) => {
348267
348425
  setShowSubmenu(null);
348268
348426
  setTabsHidden(false);
@@ -348274,7 +348432,7 @@ function Config({
348274
348432
  autoUpdatesChannel: "stable"
348275
348433
  };
348276
348434
  if (choice === "stay") {
348277
- newSettings.minimumVersion = "1.44.7";
348435
+ newSettings.minimumVersion = "1.44.9";
348278
348436
  }
348279
348437
  updateSettingsForSource("userSettings", newSettings);
348280
348438
  setSettingsData((prev_27) => ({
@@ -356344,7 +356502,7 @@ function HelpV2(t0) {
356344
356502
  let t6;
356345
356503
  if ($3[31] !== tabs) {
356346
356504
  t6 = /* @__PURE__ */ jsx_dev_runtime203.jsxDEV(Tabs, {
356347
- title: `UR v${"1.44.7"}`,
356505
+ title: `UR v${"1.44.9"}`,
356348
356506
  color: "professionalBlue",
356349
356507
  defaultTab: "general",
356350
356508
  children: tabs
@@ -357090,7 +357248,7 @@ function buildToolUseContext(tools, readFileStateCache) {
357090
357248
  async function handleInitialize(options2) {
357091
357249
  return {
357092
357250
  name: "UR",
357093
- version: "1.44.7",
357251
+ version: "1.44.9",
357094
357252
  protocolVersion: "0.1.0",
357095
357253
  workspaceRoot: options2.cwd,
357096
357254
  capabilities: {
@@ -377232,7 +377390,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
377232
377390
  return [];
377233
377391
  }
377234
377392
  }
377235
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.7") {
377393
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.9") {
377236
377394
  if (process.env.USER_TYPE === "ant") {
377237
377395
  const changelog = "";
377238
377396
  if (changelog) {
@@ -377259,7 +377417,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.7")
377259
377417
  releaseNotes
377260
377418
  };
377261
377419
  }
377262
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.7") {
377420
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.9") {
377263
377421
  if (process.env.USER_TYPE === "ant") {
377264
377422
  const changelog = "";
377265
377423
  if (changelog) {
@@ -378438,7 +378596,7 @@ function getRecentActivitySync() {
378438
378596
  return cachedActivity;
378439
378597
  }
378440
378598
  function getLogoDisplayData() {
378441
- const version2 = process.env.DEMO_VERSION ?? "1.44.7";
378599
+ const version2 = process.env.DEMO_VERSION ?? "1.44.9";
378442
378600
  const serverUrl = getDirectConnectServerUrl();
378443
378601
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
378444
378602
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -379227,7 +379385,7 @@ function LogoV2() {
379227
379385
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
379228
379386
  t2 = () => {
379229
379387
  const currentConfig2 = getGlobalConfig();
379230
- if (currentConfig2.lastReleaseNotesSeen === "1.44.7") {
379388
+ if (currentConfig2.lastReleaseNotesSeen === "1.44.9") {
379231
379389
  return;
379232
379390
  }
379233
379391
  saveGlobalConfig(_temp326);
@@ -379912,12 +380070,12 @@ function LogoV2() {
379912
380070
  return t41;
379913
380071
  }
379914
380072
  function _temp326(current) {
379915
- if (current.lastReleaseNotesSeen === "1.44.7") {
380073
+ if (current.lastReleaseNotesSeen === "1.44.9") {
379916
380074
  return current;
379917
380075
  }
379918
380076
  return {
379919
380077
  ...current,
379920
- lastReleaseNotesSeen: "1.44.7"
380078
+ lastReleaseNotesSeen: "1.44.9"
379921
380079
  };
379922
380080
  }
379923
380081
  function _temp241(s_0) {
@@ -410338,6 +410496,7 @@ var init_project2 = __esm(() => {
410338
410496
  });
410339
410497
 
410340
410498
  // src/ur/notes.ts
410499
+ import { createHash as createHash25 } from "crypto";
410341
410500
  import { appendFileSync as appendFileSync5, existsSync as existsSync50, mkdirSync as mkdirSync43, readFileSync as readFileSync56, writeFileSync as writeFileSync42 } from "fs";
410342
410501
  import { dirname as dirname62, join as join173 } from "path";
410343
410502
  function readJsonl(file2) {
@@ -410359,6 +410518,58 @@ function append2(file2, rec) {
410359
410518
  `);
410360
410519
  } catch {}
410361
410520
  }
410521
+ function memorySlug(text) {
410522
+ const words = text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").split("-").filter(Boolean).slice(0, 8).join("-");
410523
+ const hash2 = createHash25("sha1").update(text).digest("hex").slice(0, 8);
410524
+ return `${words || "remembered-note"}-${hash2}`;
410525
+ }
410526
+ function yamlSingleQuote(value) {
410527
+ return `'${value.replaceAll("'", "''")}'`;
410528
+ }
410529
+ function oneLine(text, max2 = 140) {
410530
+ const normalized = text.replace(/\s+/g, " ").trim();
410531
+ return normalized.length <= max2 ? normalized : `${normalized.slice(0, max2 - 1)}\u2026`;
410532
+ }
410533
+ function rememberInAutoMemory(memoryDir, text) {
410534
+ const trimmed = text.trim();
410535
+ if (!trimmed)
410536
+ return null;
410537
+ try {
410538
+ mkdirSync43(memoryDir, { recursive: true });
410539
+ const slug4 = memorySlug(trimmed);
410540
+ const fileName = `${slug4}.md`;
410541
+ const filePath = join173(memoryDir, fileName);
410542
+ const description = oneLine(trimmed);
410543
+ const now7 = new Date().toISOString();
410544
+ writeFileSync42(filePath, [
410545
+ "---",
410546
+ `name: ${yamlSingleQuote(description)}`,
410547
+ `description: ${yamlSingleQuote(description)}`,
410548
+ "type: feedback",
410549
+ "---",
410550
+ "",
410551
+ "# Remembered note",
410552
+ "",
410553
+ trimmed,
410554
+ "",
410555
+ `Saved: ${now7}`,
410556
+ ""
410557
+ ].join(`
410558
+ `));
410559
+ const indexPath3 = join173(memoryDir, "MEMORY.md");
410560
+ const indexLine = `- [Remembered note](${fileName}) \u2014 ${description}`;
410561
+ const existing2 = existsSync50(indexPath3) ? readFileSync56(indexPath3, "utf8") : "";
410562
+ if (!existing2.includes(`](${fileName})`)) {
410563
+ const prefix = existing2.trimEnd();
410564
+ writeFileSync42(indexPath3, `${prefix ? `${prefix}
410565
+ ` : ""}${indexLine}
410566
+ `);
410567
+ }
410568
+ return filePath;
410569
+ } catch {
410570
+ return null;
410571
+ }
410572
+ }
410362
410573
  function remember(cwd2, text) {
410363
410574
  append2(memFile(cwd2), { ts: new Date().toISOString(), text, kind: "note" });
410364
410575
  }
@@ -410402,9 +410613,13 @@ var call93 = async (args) => {
410402
410613
  `) : "no memory notes yet" };
410403
410614
  }
410404
410615
  remember(getCwd(), text);
410616
+ if (isAutoMemoryEnabled()) {
410617
+ rememberInAutoMemory(getAutoMemPath(), text);
410618
+ }
410405
410619
  return { type: "text", value: `remembered: ${text}` };
410406
410620
  };
410407
410621
  var init_remember = __esm(() => {
410622
+ init_paths();
410408
410623
  init_cwd2();
410409
410624
  init_notes();
410410
410625
  });
@@ -596872,7 +597087,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
596872
597087
  smapsRollup,
596873
597088
  platform: process.platform,
596874
597089
  nodeVersion: process.version,
596875
- ccVersion: "1.44.7"
597090
+ ccVersion: "1.44.9"
596876
597091
  };
596877
597092
  }
596878
597093
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -597458,7 +597673,7 @@ var init_bridge_kick = __esm(() => {
597458
597673
  var call138 = async () => {
597459
597674
  return {
597460
597675
  type: "text",
597461
- value: "1.44.7"
597676
+ value: "1.44.9"
597462
597677
  };
597463
597678
  }, version2, version_default;
597464
597679
  var init_version = __esm(() => {
@@ -607551,7 +607766,7 @@ function generateHtmlReport(data, insights) {
607551
607766
  </html>`;
607552
607767
  }
607553
607768
  function buildExportData(data, insights, facets, remoteStats) {
607554
- const version3 = typeof MACRO !== "undefined" ? "1.44.7" : "unknown";
607769
+ const version3 = typeof MACRO !== "undefined" ? "1.44.9" : "unknown";
607555
607770
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
607556
607771
  const facets_summary = {
607557
607772
  total: facets.size,
@@ -611833,7 +612048,7 @@ var init_sessionStorage = __esm(() => {
611833
612048
  init_settings2();
611834
612049
  init_slowOperations();
611835
612050
  init_uuid();
611836
- VERSION5 = typeof MACRO !== "undefined" ? "1.44.7" : "unknown";
612051
+ VERSION5 = typeof MACRO !== "undefined" ? "1.44.9" : "unknown";
611837
612052
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
611838
612053
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
611839
612054
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -613038,7 +613253,7 @@ var init_filesystem = __esm(() => {
613038
613253
  });
613039
613254
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
613040
613255
  const nonce = randomBytes18(16).toString("hex");
613041
- return join202(getURTempDir(), "bundled-skills", "1.44.7", nonce);
613256
+ return join202(getURTempDir(), "bundled-skills", "1.44.9", nonce);
613042
613257
  });
613043
613258
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
613044
613259
  });
@@ -618403,6 +618618,51 @@ var init_worktree3 = __esm(() => {
618403
618618
  ];
618404
618619
  });
618405
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
+
618406
618666
  // src/constants/cyberRiskInstruction.ts
618407
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.`;
618408
618668
 
@@ -618765,10 +619025,12 @@ async function computeSimpleEnvInfo(modelId, additionalWorkingDirectories) {
618765
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,
618766
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
618767
619027
  ].filter((item) => item !== null);
619028
+ const repoMap = loadRepoMapForPrompt(cwd2);
618768
619029
  return [
618769
619030
  `# Environment`,
618770
619031
  `You have been invoked in the following environment: `,
618771
- ...prependBullets(envItems)
619032
+ ...prependBullets(envItems),
619033
+ ...repoMap ? [``, repoMap.trimEnd()] : []
618772
619034
  ].join(`
618773
619035
  `);
618774
619036
  }
@@ -618882,11 +619144,12 @@ var init_prompts4 = __esm(() => {
618882
619144
  init_debug();
618883
619145
  init_memdir();
618884
619146
  init_undercover();
619147
+ init_repoWiki();
618885
619148
  init_mcpInstructionsDelta();
618886
619149
  });
618887
619150
 
618888
619151
  // src/utils/api.ts
618889
- import { createHash as createHash25 } from "crypto";
619152
+ import { createHash as createHash26 } from "crypto";
618890
619153
  function filterSwarmFieldsFromSchema(toolName, schema) {
618891
619154
  const fieldsToRemove = SWARM_FIELDS_BY_TOOL[toolName];
618892
619155
  if (!fieldsToRemove || fieldsToRemove.length === 0) {
@@ -618976,7 +619239,7 @@ function logAPIPrefix(systemPrompt) {
618976
619239
  logEvent("tengu_sysprompt_block", {
618977
619240
  snippet: firstSystemPrompt?.slice(0, 20),
618978
619241
  length: firstSystemPrompt?.length ?? 0,
618979
- hash: firstSystemPrompt ? createHash25("sha256").update(firstSystemPrompt).digest("hex") : ""
619242
+ hash: firstSystemPrompt ? createHash26("sha256").update(firstSystemPrompt).digest("hex") : ""
618980
619243
  });
618981
619244
  }
618982
619245
  function splitSysPromptPrefix(systemPrompt, options2) {
@@ -619302,7 +619565,7 @@ var init_api3 = __esm(() => {
619302
619565
  });
619303
619566
 
619304
619567
  // src/utils/fingerprint.ts
619305
- import { createHash as createHash26 } from "crypto";
619568
+ import { createHash as createHash27 } from "crypto";
619306
619569
  function extractFirstMessageText(messages) {
619307
619570
  const firstUserMessage = messages.find((msg) => msg.type === "user");
619308
619571
  if (!firstUserMessage) {
@@ -619324,12 +619587,12 @@ function computeFingerprint(messageText2, version3) {
619324
619587
  const indices = [4, 7, 20];
619325
619588
  const chars = indices.map((i3) => messageText2[i3] || "0").join("");
619326
619589
  const fingerprintInput = `${FINGERPRINT_SALT}${chars}${version3}`;
619327
- const hash2 = createHash26("sha256").update(fingerprintInput).digest("hex");
619590
+ const hash2 = createHash27("sha256").update(fingerprintInput).digest("hex");
619328
619591
  return hash2.slice(0, 3);
619329
619592
  }
619330
619593
  function computeFingerprintFromMessages(messages) {
619331
619594
  const firstMessageText = extractFirstMessageText(messages);
619332
- return computeFingerprint(firstMessageText, "1.44.7");
619595
+ return computeFingerprint(firstMessageText, "1.44.9");
619333
619596
  }
619334
619597
  var FINGERPRINT_SALT = "59cf53e54c78";
619335
619598
  var init_fingerprint = () => {};
@@ -621203,7 +621466,7 @@ async function sideQuery(opts) {
621203
621466
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
621204
621467
  }
621205
621468
  const messageText2 = extractFirstUserMessageText(messages);
621206
- const fingerprint2 = computeFingerprint(messageText2, "1.44.7");
621469
+ const fingerprint2 = computeFingerprint(messageText2, "1.44.9");
621207
621470
  const attributionHeader = getAttributionHeader(fingerprint2);
621208
621471
  const systemBlocks = [
621209
621472
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -621489,7 +621752,7 @@ import {
621489
621752
  } from "fs/promises";
621490
621753
  import { createServer as createServer6 } from "net";
621491
621754
  import { homedir as homedir33, platform as platform6 } from "os";
621492
- import { join as join205 } from "path";
621755
+ import { join as join206 } from "path";
621493
621756
  function log(message, ...args) {
621494
621757
  if (LOG_FILE) {
621495
621758
  const timestamp2 = new Date().toISOString();
@@ -621556,7 +621819,7 @@ class ChromeNativeHost {
621556
621819
  try {
621557
621820
  process.kill(pid, 0);
621558
621821
  } catch {
621559
- await unlink24(join205(socketDir, file4)).catch(() => {});
621822
+ await unlink24(join206(socketDir, file4)).catch(() => {});
621560
621823
  log(`Removed stale socket for PID ${pid}`);
621561
621824
  }
621562
621825
  }
@@ -621827,7 +622090,7 @@ var init_chromeNativeHost = __esm(() => {
621827
622090
  init_slowOperations();
621828
622091
  init_common2();
621829
622092
  MAX_MESSAGE_SIZE = 1024 * 1024;
621830
- 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;
621831
622094
  messageSchema = lazySchema(() => exports_external2.object({
621832
622095
  type: exports_external2.string()
621833
622096
  }).passthrough());
@@ -624337,7 +624600,7 @@ __export(exports_upstreamproxy, {
624337
624600
  });
624338
624601
  import { mkdir as mkdir44, readFile as readFile52, unlink as unlink25, writeFile as writeFile45 } from "fs/promises";
624339
624602
  import { homedir as homedir34 } from "os";
624340
- import { join as join206 } from "path";
624603
+ import { join as join207 } from "path";
624341
624604
  async function initUpstreamProxy(opts) {
624342
624605
  if (!isEnvTruthy(process.env.UR_CODE_REMOTE)) {
624343
624606
  return state;
@@ -624358,7 +624621,7 @@ async function initUpstreamProxy(opts) {
624358
624621
  }
624359
624622
  setNonDumpable();
624360
624623
  const baseUrl = opts?.ccrBaseUrl ?? "";
624361
- const caBundlePath = opts?.caBundlePath ?? join206(homedir34(), ".ccr", "ca-bundle.crt");
624624
+ const caBundlePath = opts?.caBundlePath ?? join207(homedir34(), ".ccr", "ca-bundle.crt");
624362
624625
  const caOk = await downloadCaBundle(baseUrl, opts?.systemCaPath ?? SYSTEM_CA_BUNDLE, caBundlePath);
624363
624626
  if (!caOk)
624364
624627
  return state;
@@ -624458,7 +624721,7 @@ async function downloadCaBundle(baseUrl, systemCaPath, outPath) {
624458
624721
  }
624459
624722
  const ccrCa = await resp.text();
624460
624723
  const systemCa = await readFile52(systemCaPath, "utf8").catch(() => "");
624461
- await mkdir44(join206(outPath, ".."), { recursive: true });
624724
+ await mkdir44(join207(outPath, ".."), { recursive: true });
624462
624725
  await writeFile45(outPath, systemCa + `
624463
624726
  ` + ccrCa, "utf8");
624464
624727
  return true;
@@ -625940,7 +626203,7 @@ function buildSystemInitMessage(inputs) {
625940
626203
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
625941
626204
  apiKeySource: getURHQApiKeyWithSource().source,
625942
626205
  betas: getSdkBetas(),
625943
- ur_version: "1.44.7",
626206
+ ur_version: "1.44.9",
625944
626207
  output_style: outputStyle2,
625945
626208
  agents: inputs.agents.map((agent) => agent.agentType),
625946
626209
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -632320,7 +632583,7 @@ var init_ShowInIDEPrompt = __esm(() => {
632320
632583
 
632321
632584
  // src/components/permissions/FilePermissionDialog/permissionOptions.tsx
632322
632585
  import { homedir as homedir35 } from "os";
632323
- 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";
632324
632587
  function isInURFolder(filePath) {
632325
632588
  const absolutePath = expandPath(filePath);
632326
632589
  const urFolderPath = expandPath(`${getOriginalCwd()}/.ur`);
@@ -632330,7 +632593,7 @@ function isInURFolder(filePath) {
632330
632593
  }
632331
632594
  function isInGlobalURFolder(filePath) {
632332
632595
  const absolutePath = expandPath(filePath);
632333
- const globalURFolderPath = join207(homedir35(), ".ur");
632596
+ const globalURFolderPath = join208(homedir35(), ".ur");
632334
632597
  const normalizedAbsolutePath = normalizeCaseForComparison(absolutePath);
632335
632598
  const normalizedGlobalURFolderPath = normalizeCaseForComparison(globalURFolderPath);
632336
632599
  return normalizedAbsolutePath.startsWith(normalizedGlobalURFolderPath + sep37.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedGlobalURFolderPath + "/");
@@ -640568,7 +640831,7 @@ var init_useVoiceEnabled = __esm(() => {
640568
640831
  function getSemverPart(version3) {
640569
640832
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
640570
640833
  }
640571
- function useUpdateNotification(updatedVersion, initialVersion = "1.44.7") {
640834
+ function useUpdateNotification(updatedVersion, initialVersion = "1.44.9") {
640572
640835
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
640573
640836
  if (!updatedVersion) {
640574
640837
  return null;
@@ -640617,7 +640880,7 @@ function AutoUpdater({
640617
640880
  return;
640618
640881
  }
640619
640882
  if (false) {}
640620
- const currentVersion = "1.44.7";
640883
+ const currentVersion = "1.44.9";
640621
640884
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
640622
640885
  let latestVersion = await getLatestVersion(channel);
640623
640886
  const isDisabled = isAutoUpdaterDisabled();
@@ -640846,12 +641109,12 @@ function NativeAutoUpdater({
640846
641109
  logEvent("tengu_native_auto_updater_start", {});
640847
641110
  try {
640848
641111
  const maxVersion = await getMaxVersion();
640849
- if (maxVersion && gt("1.44.7", maxVersion)) {
641112
+ if (maxVersion && gt("1.44.9", maxVersion)) {
640850
641113
  const msg = await getMaxVersionMessage();
640851
641114
  setMaxVersionIssue(msg ?? "affects your version");
640852
641115
  }
640853
641116
  const result = await installLatest(channel);
640854
- const currentVersion = "1.44.7";
641117
+ const currentVersion = "1.44.9";
640855
641118
  const latencyMs = Date.now() - startTime;
640856
641119
  if (result.lockFailed) {
640857
641120
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -640988,17 +641251,17 @@ function PackageManagerAutoUpdater(t0) {
640988
641251
  const maxVersion = await getMaxVersion();
640989
641252
  if (maxVersion && latest && gt(latest, maxVersion)) {
640990
641253
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
640991
- if (gte("1.44.7", maxVersion)) {
640992
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.7"} 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`);
640993
641256
  setUpdateAvailable(false);
640994
641257
  return;
640995
641258
  }
640996
641259
  latest = maxVersion;
640997
641260
  }
640998
- const hasUpdate = latest && !gte("1.44.7", latest) && !shouldSkipVersion(latest);
641261
+ const hasUpdate = latest && !gte("1.44.9", latest) && !shouldSkipVersion(latest);
640999
641262
  setUpdateAvailable(!!hasUpdate);
641000
641263
  if (hasUpdate) {
641001
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.7"} -> ${latest}`);
641264
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.9"} -> ${latest}`);
641002
641265
  }
641003
641266
  };
641004
641267
  $3[0] = t1;
@@ -641032,7 +641295,7 @@ function PackageManagerAutoUpdater(t0) {
641032
641295
  wrap: "truncate",
641033
641296
  children: [
641034
641297
  "currentVersion: ",
641035
- "1.44.7"
641298
+ "1.44.9"
641036
641299
  ]
641037
641300
  }, undefined, true, undefined, this);
641038
641301
  $3[3] = verbose;
@@ -653488,7 +653751,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
653488
653751
  project_dir: getOriginalCwd(),
653489
653752
  added_dirs: addedDirs
653490
653753
  },
653491
- version: "1.44.7",
653754
+ version: "1.44.9",
653492
653755
  output_style: {
653493
653756
  name: outputStyleName
653494
653757
  },
@@ -653571,7 +653834,7 @@ function StatusLineInner({
653571
653834
  const taskValues = Object.values(tasks2);
653572
653835
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
653573
653836
  const defaultStatusLineText = buildDefaultStatusBar({
653574
- version: "1.44.7",
653837
+ version: "1.44.9",
653575
653838
  providerLabel: providerRuntime.providerLabel,
653576
653839
  authMode: providerRuntime.authLabel,
653577
653840
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -659659,9 +659922,9 @@ function initSkillImprovement() {
659659
659922
  async function applySkillImprovement(skillName, updates) {
659660
659923
  if (!skillName)
659661
659924
  return;
659662
- const { join: join208 } = await import("path");
659925
+ const { join: join209 } = await import("path");
659663
659926
  const fs12 = await import("fs/promises");
659664
- const filePath = join208(getCwd(), ".ur", "skills", skillName, "SKILL.md");
659927
+ const filePath = join209(getCwd(), ".ur", "skills", skillName, "SKILL.md");
659665
659928
  let currentContent;
659666
659929
  try {
659667
659930
  currentContent = await fs12.readFile(filePath, "utf-8");
@@ -659815,7 +660078,7 @@ function useMoreRight(_args) {
659815
660078
  // src/utils/cleanup.ts
659816
660079
  import * as fs12 from "fs/promises";
659817
660080
  import { homedir as homedir36 } from "os";
659818
- import { join as join208 } from "path";
660081
+ import { join as join209 } from "path";
659819
660082
  function getCutoffDate() {
659820
660083
  const settings = getSettings_DEPRECATED() || {};
659821
660084
  const cleanupPeriodDays = settings.cleanupPeriodDays ?? DEFAULT_CLEANUP_PERIOD_DAYS;
@@ -659840,7 +660103,7 @@ async function cleanupOldFilesInDirectory(dirPath, cutoffDate, isMessagePath) {
659840
660103
  try {
659841
660104
  const timestamp2 = convertFileNameToDate(file4.name);
659842
660105
  if (timestamp2 < cutoffDate) {
659843
- await getFsImplementation().unlink(join208(dirPath, file4.name));
660106
+ await getFsImplementation().unlink(join209(dirPath, file4.name));
659844
660107
  if (isMessagePath) {
659845
660108
  result.messages++;
659846
660109
  } else {
@@ -659871,7 +660134,7 @@ async function cleanupOldMessageFiles() {
659871
660134
  } catch {
659872
660135
  return result;
659873
660136
  }
659874
- 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));
659875
660138
  for (const mcpLogDir of mcpLogDirs) {
659876
660139
  result = addCleanupResults(result, await cleanupOldFilesInDirectory(mcpLogDir, cutoffDate, true));
659877
660140
  await tryRmdir(mcpLogDir, fsImpl);
@@ -659910,7 +660173,7 @@ async function cleanupOldSessionFiles() {
659910
660173
  for (const projectDirent of projectDirents) {
659911
660174
  if (!projectDirent.isDirectory())
659912
660175
  continue;
659913
- const projectDir = join208(projectsDir, projectDirent.name);
660176
+ const projectDir = join209(projectsDir, projectDirent.name);
659914
660177
  let entries;
659915
660178
  try {
659916
660179
  entries = await fsImpl.readdir(projectDir);
@@ -659924,15 +660187,15 @@ async function cleanupOldSessionFiles() {
659924
660187
  continue;
659925
660188
  }
659926
660189
  try {
659927
- if (await unlinkIfOld(join208(projectDir, entry.name), cutoffDate, fsImpl)) {
660190
+ if (await unlinkIfOld(join209(projectDir, entry.name), cutoffDate, fsImpl)) {
659928
660191
  result.messages++;
659929
660192
  }
659930
660193
  } catch {
659931
660194
  result.errors++;
659932
660195
  }
659933
660196
  } else if (entry.isDirectory()) {
659934
- const sessionDir = join208(projectDir, entry.name);
659935
- const toolResultsDir = join208(sessionDir, TOOL_RESULTS_SUBDIR);
660197
+ const sessionDir = join209(projectDir, entry.name);
660198
+ const toolResultsDir = join209(sessionDir, TOOL_RESULTS_SUBDIR);
659936
660199
  let toolDirs;
659937
660200
  try {
659938
660201
  toolDirs = await fsImpl.readdir(toolResultsDir);
@@ -659943,14 +660206,14 @@ async function cleanupOldSessionFiles() {
659943
660206
  for (const toolEntry of toolDirs) {
659944
660207
  if (toolEntry.isFile()) {
659945
660208
  try {
659946
- if (await unlinkIfOld(join208(toolResultsDir, toolEntry.name), cutoffDate, fsImpl)) {
660209
+ if (await unlinkIfOld(join209(toolResultsDir, toolEntry.name), cutoffDate, fsImpl)) {
659947
660210
  result.messages++;
659948
660211
  }
659949
660212
  } catch {
659950
660213
  result.errors++;
659951
660214
  }
659952
660215
  } else if (toolEntry.isDirectory()) {
659953
- const toolDirPath = join208(toolResultsDir, toolEntry.name);
660216
+ const toolDirPath = join209(toolResultsDir, toolEntry.name);
659954
660217
  let toolFiles;
659955
660218
  try {
659956
660219
  toolFiles = await fsImpl.readdir(toolDirPath);
@@ -659961,7 +660224,7 @@ async function cleanupOldSessionFiles() {
659961
660224
  if (!tf.isFile())
659962
660225
  continue;
659963
660226
  try {
659964
- if (await unlinkIfOld(join208(toolDirPath, tf.name), cutoffDate, fsImpl)) {
660227
+ if (await unlinkIfOld(join209(toolDirPath, tf.name), cutoffDate, fsImpl)) {
659965
660228
  result.messages++;
659966
660229
  }
659967
660230
  } catch {
@@ -659993,7 +660256,7 @@ async function cleanupSingleDirectory(dirPath, extension, removeEmptyDir = true)
659993
660256
  if (!dirent.isFile() || !dirent.name.endsWith(extension))
659994
660257
  continue;
659995
660258
  try {
659996
- if (await unlinkIfOld(join208(dirPath, dirent.name), cutoffDate, fsImpl)) {
660259
+ if (await unlinkIfOld(join209(dirPath, dirent.name), cutoffDate, fsImpl)) {
659997
660260
  result.messages++;
659998
660261
  }
659999
660262
  } catch {
@@ -660006,7 +660269,7 @@ async function cleanupSingleDirectory(dirPath, extension, removeEmptyDir = true)
660006
660269
  return result;
660007
660270
  }
660008
660271
  function cleanupOldPlanFiles() {
660009
- const plansDir = join208(getURConfigHomeDir(), "plans");
660272
+ const plansDir = join209(getURConfigHomeDir(), "plans");
660010
660273
  return cleanupSingleDirectory(plansDir, ".md");
660011
660274
  }
660012
660275
  async function cleanupOldFileHistoryBackups() {
@@ -660015,14 +660278,14 @@ async function cleanupOldFileHistoryBackups() {
660015
660278
  const fsImpl = getFsImplementation();
660016
660279
  try {
660017
660280
  const configDir = getURConfigHomeDir();
660018
- const fileHistoryStorageDir = join208(configDir, "file-history");
660281
+ const fileHistoryStorageDir = join209(configDir, "file-history");
660019
660282
  let dirents;
660020
660283
  try {
660021
660284
  dirents = await fsImpl.readdir(fileHistoryStorageDir);
660022
660285
  } catch {
660023
660286
  return result;
660024
660287
  }
660025
- 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));
660026
660289
  await Promise.all(fileHistorySessionsDirs.map(async (fileHistorySessionDir) => {
660027
660290
  try {
660028
660291
  const stats2 = await fsImpl.stat(fileHistorySessionDir);
@@ -660049,14 +660312,14 @@ async function cleanupOldSessionEnvDirs() {
660049
660312
  const fsImpl = getFsImplementation();
660050
660313
  try {
660051
660314
  const configDir = getURConfigHomeDir();
660052
- const sessionEnvBaseDir = join208(configDir, "session-env");
660315
+ const sessionEnvBaseDir = join209(configDir, "session-env");
660053
660316
  let dirents;
660054
660317
  try {
660055
660318
  dirents = await fsImpl.readdir(sessionEnvBaseDir);
660056
660319
  } catch {
660057
660320
  return result;
660058
660321
  }
660059
- 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));
660060
660323
  for (const sessionEnvDir of sessionEnvDirs) {
660061
660324
  try {
660062
660325
  const stats2 = await fsImpl.stat(sessionEnvDir);
@@ -660078,7 +660341,7 @@ async function cleanupOldDebugLogs() {
660078
660341
  const cutoffDate = getCutoffDate();
660079
660342
  const result = { messages: 0, errors: 0 };
660080
660343
  const fsImpl = getFsImplementation();
660081
- const debugDir = join208(getURConfigHomeDir(), "debug");
660344
+ const debugDir = join209(getURConfigHomeDir(), "debug");
660082
660345
  let dirents;
660083
660346
  try {
660084
660347
  dirents = await fsImpl.readdir(debugDir);
@@ -660090,7 +660353,7 @@ async function cleanupOldDebugLogs() {
660090
660353
  continue;
660091
660354
  }
660092
660355
  try {
660093
- if (await unlinkIfOld(join208(debugDir, dirent.name), cutoffDate, fsImpl)) {
660356
+ if (await unlinkIfOld(join209(debugDir, dirent.name), cutoffDate, fsImpl)) {
660094
660357
  result.messages++;
660095
660358
  }
660096
660359
  } catch {
@@ -660100,7 +660363,7 @@ async function cleanupOldDebugLogs() {
660100
660363
  return result;
660101
660364
  }
660102
660365
  async function cleanupNpmCacheForURHQPackages() {
660103
- const markerPath = join208(getURConfigHomeDir(), ".npm-cache-cleanup");
660366
+ const markerPath = join209(getURConfigHomeDir(), ".npm-cache-cleanup");
660104
660367
  try {
660105
660368
  const stat47 = await fs12.stat(markerPath);
660106
660369
  if (Date.now() - stat47.mtimeMs < ONE_DAY_MS) {
@@ -660115,7 +660378,7 @@ async function cleanupNpmCacheForURHQPackages() {
660115
660378
  return;
660116
660379
  }
660117
660380
  logForDebugging("npm cache cleanup: starting");
660118
- const npmCachePath = join208(homedir36(), ".npm", "_cacache");
660381
+ const npmCachePath = join209(homedir36(), ".npm", "_cacache");
660119
660382
  const NPM_CACHE_RETENTION_COUNT = 5;
660120
660383
  const startTime = Date.now();
660121
660384
  try {
@@ -660170,7 +660433,7 @@ async function cleanupNpmCacheForURHQPackages() {
660170
660433
  }
660171
660434
  }
660172
660435
  async function cleanupOldVersionsThrottled() {
660173
- const markerPath = join208(getURConfigHomeDir(), ".version-cleanup");
660436
+ const markerPath = join209(getURConfigHomeDir(), ".version-cleanup");
660174
660437
  try {
660175
660438
  const stat47 = await fs12.stat(markerPath);
660176
660439
  if (Date.now() - stat47.mtimeMs < ONE_DAY_MS) {
@@ -663856,7 +664119,7 @@ __export(exports_asciicast, {
663856
664119
  _resetRecordingStateForTesting: () => _resetRecordingStateForTesting
663857
664120
  });
663858
664121
  import { appendFile as appendFile7, rename as rename10 } from "fs/promises";
663859
- 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";
663860
664123
  function getRecordFilePath() {
663861
664124
  if (recordingState.filePath !== null) {
663862
664125
  return recordingState.filePath;
@@ -663867,10 +664130,10 @@ function getRecordFilePath() {
663867
664130
  if (!isEnvTruthy(process.env.UR_CODE_TERMINAL_RECORDING)) {
663868
664131
  return null;
663869
664132
  }
663870
- const projectsDir = join210(getURConfigHomeDir(), "projects");
663871
- const projectDir = join210(projectsDir, sanitizePath2(getOriginalCwd()));
664133
+ const projectsDir = join211(getURConfigHomeDir(), "projects");
664134
+ const projectDir = join211(projectsDir, sanitizePath2(getOriginalCwd()));
663872
664135
  recordingState.timestamp = Date.now();
663873
- recordingState.filePath = join210(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
664136
+ recordingState.filePath = join211(projectDir, `${getSessionId()}-${recordingState.timestamp}.cast`);
663874
664137
  return recordingState.filePath;
663875
664138
  }
663876
664139
  function _resetRecordingStateForTesting() {
@@ -663879,13 +664142,13 @@ function _resetRecordingStateForTesting() {
663879
664142
  }
663880
664143
  function getSessionRecordingPaths() {
663881
664144
  const sessionId = getSessionId();
663882
- const projectsDir = join210(getURConfigHomeDir(), "projects");
663883
- const projectDir = join210(projectsDir, sanitizePath2(getOriginalCwd()));
664145
+ const projectsDir = join211(getURConfigHomeDir(), "projects");
664146
+ const projectDir = join211(projectsDir, sanitizePath2(getOriginalCwd()));
663884
664147
  try {
663885
664148
  const entries = getFsImplementation().readdirSync(projectDir);
663886
664149
  const names = typeof entries[0] === "string" ? entries : entries.map((e) => e.name);
663887
664150
  const files2 = names.filter((f) => f.startsWith(sessionId) && f.endsWith(".cast")).sort();
663888
- return files2.map((f) => join210(projectDir, f));
664151
+ return files2.map((f) => join211(projectDir, f));
663889
664152
  } catch {
663890
664153
  return [];
663891
664154
  }
@@ -663895,9 +664158,9 @@ async function renameRecordingForSession() {
663895
664158
  if (!oldPath || recordingState.timestamp === 0) {
663896
664159
  return;
663897
664160
  }
663898
- const projectsDir = join210(getURConfigHomeDir(), "projects");
663899
- const projectDir = join210(projectsDir, sanitizePath2(getOriginalCwd()));
663900
- 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`);
663901
664164
  if (oldPath === newPath) {
663902
664165
  return;
663903
664166
  }
@@ -665502,7 +665765,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
665502
665765
  } catch {}
665503
665766
  const data = {
665504
665767
  trigger: trigger2,
665505
- version: "1.44.7",
665768
+ version: "1.44.9",
665506
665769
  platform: process.platform,
665507
665770
  transcript,
665508
665771
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -666774,7 +667037,7 @@ var init_useChromeExtensionNotification = __esm(() => {
666774
667037
  });
666775
667038
 
666776
667039
  // src/utils/plugins/officialMarketplaceStartupCheck.ts
666777
- import { join as join211 } from "path";
667040
+ import { join as join212 } from "path";
666778
667041
  function isOfficialMarketplaceAutoInstallDisabled() {
666779
667042
  return isEnvTruthy(process.env.UR_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL);
666780
667043
  }
@@ -666858,7 +667121,7 @@ async function checkAndInstallOfficialMarketplace() {
666858
667121
  return { installed: false, skipped: true, reason: "policy_blocked" };
666859
667122
  }
666860
667123
  const cacheDir = getMarketplacesCacheDir();
666861
- const installLocation = join211(cacheDir, OFFICIAL_MARKETPLACE_NAME);
667124
+ const installLocation = join212(cacheDir, OFFICIAL_MARKETPLACE_NAME);
666862
667125
  const gcsSha = await fetchOfficialMarketplaceFromGcs(installLocation, cacheDir);
666863
667126
  if (gcsSha !== null) {
666864
667127
  const known = await loadKnownMarketplacesConfig();
@@ -669847,7 +670110,7 @@ var init_usePluginRecommendationBase = __esm(() => {
669847
670110
  });
669848
670111
 
669849
670112
  // src/hooks/useLspPluginRecommendation.tsx
669850
- import { extname as extname23, join as join212 } from "path";
670113
+ import { extname as extname23, join as join213 } from "path";
669851
670114
  function useLspPluginRecommendation() {
669852
670115
  const $3 = import_compiler_runtime346.c(12);
669853
670116
  const trackedFiles = useAppState(_temp206);
@@ -669932,7 +670195,7 @@ function useLspPluginRecommendation() {
669932
670195
  case "yes": {
669933
670196
  installPluginAndNotify(pluginId, pluginName, "lsp-plugin", addNotification, async (pluginData) => {
669934
670197
  logForDebugging(`[useLspPluginRecommendation] Installing plugin: ${pluginId}`);
669935
- 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;
669936
670199
  await cacheAndRegisterPlugin(pluginId, pluginData.entry, "user", undefined, localSourcePath);
669937
670200
  const settings = getSettingsForSource("userSettings");
669938
670201
  updateSettingsForSource("userSettings", {
@@ -672763,7 +673026,7 @@ var exports_REPL = {};
672763
673026
  __export(exports_REPL, {
672764
673027
  REPL: () => REPL
672765
673028
  });
672766
- import { dirname as dirname74, join as join213 } from "path";
673029
+ import { dirname as dirname74, join as join214 } from "path";
672767
673030
  import { tmpdir as tmpdir13 } from "os";
672768
673031
  import { writeFile as writeFile47 } from "fs/promises";
672769
673032
  import { randomUUID as randomUUID57 } from "crypto";
@@ -675335,7 +675598,7 @@ Note: ctrl + z now suspends UR, ctrl + _ undoes input.
675335
675598
  const w = Math.max(80, (process.stdout.columns ?? 80) - 6);
675336
675599
  const raw = await renderMessagesToPlainText(deferredMessages, tools, w);
675337
675600
  const text = raw.replace(/[ \t]+$/gm, "");
675338
- const path24 = join213(tmpdir13(), `cc-transcript-${Date.now()}.txt`);
675601
+ const path24 = join214(tmpdir13(), `cc-transcript-${Date.now()}.txt`);
675339
675602
  await writeFile47(path24, text);
675340
675603
  const opened = openFileInExternalEditor(path24);
675341
675604
  setStatus2(opened ? `opening ${path24}` : `wrote ${path24} \xB7 no $VISUAL/$EDITOR set`);
@@ -677387,7 +677650,7 @@ function WelcomeV2() {
677387
677650
  dimColor: true,
677388
677651
  children: [
677389
677652
  "v",
677390
- "1.44.7"
677653
+ "1.44.9"
677391
677654
  ]
677392
677655
  }, undefined, true, undefined, this)
677393
677656
  ]
@@ -678647,7 +678910,7 @@ function completeOnboarding() {
678647
678910
  saveGlobalConfig((current) => ({
678648
678911
  ...current,
678649
678912
  hasCompletedOnboarding: true,
678650
- lastOnboardingVersion: "1.44.7"
678913
+ lastOnboardingVersion: "1.44.9"
678651
678914
  }));
678652
678915
  }
678653
678916
  function showDialog(root2, renderer) {
@@ -683638,12 +683901,12 @@ var init_createDirectConnectSession = __esm(() => {
683638
683901
  });
683639
683902
 
683640
683903
  // src/utils/errorLogSink.ts
683641
- import { dirname as dirname76, join as join214 } from "path";
683904
+ import { dirname as dirname76, join as join215 } from "path";
683642
683905
  function getErrorsPath() {
683643
- return join214(CACHE_PATHS.errors(), DATE + ".jsonl");
683906
+ return join215(CACHE_PATHS.errors(), DATE + ".jsonl");
683644
683907
  }
683645
683908
  function getMCPLogsPath(serverName) {
683646
- return join214(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
683909
+ return join215(CACHE_PATHS.mcpLogs(serverName), DATE + ".jsonl");
683647
683910
  }
683648
683911
  function createJsonlWriter(options2) {
683649
683912
  const writer = createBufferedWriter(options2);
@@ -683687,7 +683950,7 @@ function appendToLog(path24, message) {
683687
683950
  cwd: getFsImplementation().cwd(),
683688
683951
  userType: process.env.USER_TYPE,
683689
683952
  sessionId: getSessionId(),
683690
- version: "1.44.7"
683953
+ version: "1.44.9"
683691
683954
  };
683692
683955
  getLogWriter(path24).write(messageWithTimestamp);
683693
683956
  }
@@ -683986,7 +684249,7 @@ var init_sessionMemory = __esm(() => {
683986
684249
  // src/utils/iTermBackup.ts
683987
684250
  import { copyFile as copyFile11, stat as stat49 } from "fs/promises";
683988
684251
  import { homedir as homedir38 } from "os";
683989
- import { join as join215 } from "path";
684252
+ import { join as join216 } from "path";
683990
684253
  function markITerm2SetupComplete() {
683991
684254
  saveGlobalConfig((current) => ({
683992
684255
  ...current,
@@ -684001,7 +684264,7 @@ function getIterm2RecoveryInfo() {
684001
684264
  };
684002
684265
  }
684003
684266
  function getITerm2PlistPath() {
684004
- return join215(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
684267
+ return join216(homedir38(), "Library", "Preferences", "com.googlecode.iterm2.plist");
684005
684268
  }
684006
684269
  async function checkAndRestoreITerm2Backup() {
684007
684270
  const { inProgress, backupPath } = getIterm2RecoveryInfo();
@@ -687475,7 +687738,7 @@ var init_idleTimeout = __esm(() => {
687475
687738
  // src/bridge/inboundAttachments.ts
687476
687739
  import { randomUUID as randomUUID60 } from "crypto";
687477
687740
  import { mkdir as mkdir45, writeFile as writeFile49 } from "fs/promises";
687478
- import { basename as basename61, join as join216 } from "path";
687741
+ import { basename as basename61, join as join217 } from "path";
687479
687742
  function debug(msg) {
687480
687743
  logForDebugging(`[bridge:inbound-attach] ${msg}`);
687481
687744
  }
@@ -687491,7 +687754,7 @@ function sanitizeFileName(name) {
687491
687754
  return base2 || "attachment";
687492
687755
  }
687493
687756
  function uploadsDir() {
687494
- return join216(getURConfigHomeDir(), "uploads", getSessionId());
687757
+ return join217(getURConfigHomeDir(), "uploads", getSessionId());
687495
687758
  }
687496
687759
  async function resolveOne(att) {
687497
687760
  const token = getBridgeAccessToken();
@@ -687520,7 +687783,7 @@ async function resolveOne(att) {
687520
687783
  const safeName = sanitizeFileName(att.file_name);
687521
687784
  const prefix = (att.file_uuid.slice(0, 8) || randomUUID60().slice(0, 8)).replace(/[^a-zA-Z0-9_-]/g, "_");
687522
687785
  const dir = uploadsDir();
687523
- const outPath = join216(dir, `${prefix}-${safeName}`);
687786
+ const outPath = join217(dir, `${prefix}-${safeName}`);
687524
687787
  try {
687525
687788
  await mkdir45(dir, { recursive: true });
687526
687789
  await writeFile49(outPath, data);
@@ -687620,7 +687883,7 @@ var init_sessionUrl = __esm(() => {
687620
687883
 
687621
687884
  // src/utils/plugins/zipCacheAdapters.ts
687622
687885
  import { readFile as readFile54 } from "fs/promises";
687623
- import { join as join217 } from "path";
687886
+ import { join as join218 } from "path";
687624
687887
  async function readZipCacheKnownMarketplaces() {
687625
687888
  try {
687626
687889
  const content = await readFile54(getZipCacheKnownMarketplacesPath(), "utf-8");
@@ -687645,13 +687908,13 @@ async function saveMarketplaceJsonToZipCache(marketplaceName, installLocation) {
687645
687908
  const content = await readMarketplaceJsonContent(installLocation);
687646
687909
  if (content !== null) {
687647
687910
  const relPath = getMarketplaceJsonRelativePath(marketplaceName);
687648
- await atomicWriteToZipCache(join217(zipCachePath, relPath), content);
687911
+ await atomicWriteToZipCache(join218(zipCachePath, relPath), content);
687649
687912
  }
687650
687913
  }
687651
687914
  async function readMarketplaceJsonContent(dir) {
687652
687915
  const candidates2 = [
687653
- join217(dir, ".ur-plugin", "marketplace.json"),
687654
- join217(dir, "marketplace.json"),
687916
+ join218(dir, ".ur-plugin", "marketplace.json"),
687917
+ join218(dir, "marketplace.json"),
687655
687918
  dir
687656
687919
  ];
687657
687920
  for (const candidate of candidates2) {
@@ -687781,8 +688044,8 @@ async function getEnvLessBridgeConfig() {
687781
688044
  }
687782
688045
  async function checkEnvLessBridgeMinVersion() {
687783
688046
  const cfg = await getEnvLessBridgeConfig();
687784
- if (cfg.min_version && lt("1.44.7", cfg.min_version)) {
687785
- return `Your version of UR (${"1.44.7"}) 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.
687786
688049
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
687787
688050
  }
687788
688051
  return null;
@@ -688110,9 +688373,9 @@ __export(exports_bridgePointer, {
688110
688373
  BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
688111
688374
  });
688112
688375
  import { mkdir as mkdir46, readFile as readFile55, stat as stat50, unlink as unlink26, writeFile as writeFile50 } from "fs/promises";
688113
- import { dirname as dirname77, join as join218 } from "path";
688376
+ import { dirname as dirname77, join as join219 } from "path";
688114
688377
  function getBridgePointerPath(dir) {
688115
- return join218(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
688378
+ return join219(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
688116
688379
  }
688117
688380
  async function writeBridgePointer(dir, pointer) {
688118
688381
  const path24 = getBridgePointerPath(dir);
@@ -688256,7 +688519,7 @@ async function initBridgeCore(params) {
688256
688519
  const rawApi = createBridgeApiClient({
688257
688520
  baseUrl,
688258
688521
  getAccessToken,
688259
- runnerVersion: "1.44.7",
688522
+ runnerVersion: "1.44.9",
688260
688523
  onDebug: logForDebugging,
688261
688524
  onAuth401,
688262
688525
  getTrustedDeviceToken
@@ -693938,7 +694201,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
693938
694201
  setCwd(cwd3);
693939
694202
  const server2 = new Server({
693940
694203
  name: "ur/tengu",
693941
- version: "1.44.7"
694204
+ version: "1.44.9"
693942
694205
  }, {
693943
694206
  capabilities: {
693944
694207
  tools: {}
@@ -694070,14 +694333,14 @@ __export(exports_urDesktop, {
694070
694333
  });
694071
694334
  import { readdir as readdir33, readFile as readFile57, stat as stat52 } from "fs/promises";
694072
694335
  import { homedir as homedir39 } from "os";
694073
- import { join as join219 } from "path";
694336
+ import { join as join220 } from "path";
694074
694337
  async function getURDesktopConfigPath() {
694075
694338
  const platform7 = getPlatform();
694076
694339
  if (!SUPPORTED_PLATFORMS.includes(platform7)) {
694077
694340
  throw new Error(`Unsupported platform: ${platform7} - UR Desktop integration only works on macOS and WSL.`);
694078
694341
  }
694079
694342
  if (platform7 === "macos") {
694080
- return join219(homedir39(), "Library", "Application Support", "UR", "ur_desktop_config.json");
694343
+ return join220(homedir39(), "Library", "Application Support", "UR", "ur_desktop_config.json");
694081
694344
  }
694082
694345
  const windowsHome = process.env.USERPROFILE ? process.env.USERPROFILE.replace(/\\/g, "/") : null;
694083
694346
  if (windowsHome) {
@@ -694096,7 +694359,7 @@ async function getURDesktopConfigPath() {
694096
694359
  if (user.name === "Public" || user.name === "Default" || user.name === "Default User" || user.name === "All Users") {
694097
694360
  continue;
694098
694361
  }
694099
- 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");
694100
694363
  try {
694101
694364
  await stat52(potentialConfigPath);
694102
694365
  return potentialConfigPath;
@@ -694650,11 +694913,11 @@ var init_providers2 = __esm(() => {
694650
694913
  });
694651
694914
 
694652
694915
  // src/utils/plugins/pluginDoctor.ts
694653
- import { existsSync as existsSync64, readdirSync as readdirSync25, readFileSync as readFileSync66, statSync as statSync15 } from "fs";
694654
- 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";
694655
694918
  function manifestPathFor(dir) {
694656
- const p2 = join220(dir, ".ur-plugin", "plugin.json");
694657
- return existsSync64(p2) ? p2 : null;
694919
+ const p2 = join221(dir, ".ur-plugin", "plugin.json");
694920
+ return existsSync65(p2) ? p2 : null;
694658
694921
  }
694659
694922
  function discoverPluginDirs(roots) {
694660
694923
  const dirs = [];
@@ -694666,7 +694929,7 @@ function discoverPluginDirs(roots) {
694666
694929
  }
694667
694930
  };
694668
694931
  for (const root2 of roots) {
694669
- if (!root2 || !existsSync64(root2))
694932
+ if (!root2 || !existsSync65(root2))
694670
694933
  continue;
694671
694934
  if (manifestPathFor(root2)) {
694672
694935
  add(root2);
@@ -694674,14 +694937,14 @@ function discoverPluginDirs(roots) {
694674
694937
  }
694675
694938
  let entries = [];
694676
694939
  try {
694677
- entries = readdirSync25(root2);
694940
+ entries = readdirSync26(root2);
694678
694941
  } catch {
694679
694942
  continue;
694680
694943
  }
694681
694944
  for (const entry of entries) {
694682
- const full = join220(root2, entry);
694945
+ const full = join221(root2, entry);
694683
694946
  try {
694684
- if (statSync15(full).isDirectory() && manifestPathFor(full))
694947
+ if (statSync16(full).isDirectory() && manifestPathFor(full))
694685
694948
  add(full);
694686
694949
  } catch {}
694687
694950
  }
@@ -694705,7 +694968,7 @@ function doctorPluginDir(dir) {
694705
694968
  }
694706
694969
  let parsed;
694707
694970
  try {
694708
- parsed = JSON.parse(readFileSync66(manifestPath5, "utf8"));
694971
+ parsed = JSON.parse(readFileSync67(manifestPath5, "utf8"));
694709
694972
  } catch (error40) {
694710
694973
  return {
694711
694974
  name: basename62(dir),
@@ -694810,7 +695073,7 @@ __export(exports_plugins, {
694810
695073
  VALID_UPDATE_SCOPES: () => VALID_UPDATE_SCOPES,
694811
695074
  VALID_INSTALLABLE_SCOPES: () => VALID_INSTALLABLE_SCOPES
694812
695075
  });
694813
- 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";
694814
695077
  function handleMarketplaceError(error40, action3) {
694815
695078
  logError2(error40);
694816
695079
  cliError(`${figures_default.cross} Failed to ${action3}: ${errorMessage2(error40)}`);
@@ -694837,7 +695100,7 @@ async function pluginDoctorHandler(options2) {
694837
695100
  const roots = [];
694838
695101
  if (options2.path)
694839
695102
  roots.push(resolve52(options2.path));
694840
- roots.push(join221(process.cwd(), ".ur", "plugins"));
695103
+ roots.push(join222(process.cwd(), ".ur", "plugins"));
694841
695104
  try {
694842
695105
  const data = loadInstalledPluginsV2();
694843
695106
  for (const installations of Object.values(data.plugins ?? {})) {
@@ -695344,12 +695607,12 @@ __export(exports_install, {
695344
695607
  install: () => install
695345
695608
  });
695346
695609
  import { homedir as homedir40 } from "os";
695347
- import { join as join222 } from "path";
695610
+ import { join as join223 } from "path";
695348
695611
  function getInstallationPath2() {
695349
695612
  const isWindows2 = env2.platform === "win32";
695350
695613
  const homeDir = homedir40();
695351
695614
  if (isWindows2) {
695352
- const windowsPath = join222(homeDir, ".local", "bin", "ur.exe");
695615
+ const windowsPath = join223(homeDir, ".local", "bin", "ur.exe");
695353
695616
  return windowsPath.replace(/\//g, "\\");
695354
695617
  }
695355
695618
  return "~/.local/bin/ur";
@@ -695980,7 +696243,7 @@ async function update() {
695980
696243
  logEvent("tengu_update_check", {});
695981
696244
  const diagnostic = await getDoctorDiagnostic();
695982
696245
  const result = await checkUpgradeStatus({
695983
- currentVersion: "1.44.7",
696246
+ currentVersion: "1.44.9",
695984
696247
  packageName: UR_AGENT_PACKAGE_NAME,
695985
696248
  installationType: diagnostic.installationType,
695986
696249
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -696007,7 +696270,7 @@ __export(exports_main, {
696007
696270
  startDeferredPrefetches: () => startDeferredPrefetches,
696008
696271
  main: () => main
696009
696272
  });
696010
- import { readFileSync as readFileSync67 } from "fs";
696273
+ import { readFileSync as readFileSync68 } from "fs";
696011
696274
  import { resolve as resolve53 } from "path";
696012
696275
  function logManagedSettings() {
696013
696276
  try {
@@ -696163,7 +696426,7 @@ function loadSettingsFromFlag(settingsFile) {
696163
696426
  resolvedPath: resolvedSettingsPath
696164
696427
  } = safeResolvePath(getFsImplementation(), settingsFile);
696165
696428
  try {
696166
- readFileSync67(resolvedSettingsPath, "utf8");
696429
+ readFileSync68(resolvedSettingsPath, "utf8");
696167
696430
  } catch (e) {
696168
696431
  if (isENOENT(e)) {
696169
696432
  process.stderr.write(source_default.red(`Error: Settings file not found: ${resolvedSettingsPath}
@@ -696577,7 +696840,7 @@ ${getTmuxInstallInstructions2()}
696577
696840
  }
696578
696841
  try {
696579
696842
  const filePath = resolve53(options2.systemPromptFile);
696580
- systemPrompt = readFileSync67(filePath, "utf8");
696843
+ systemPrompt = readFileSync68(filePath, "utf8");
696581
696844
  } catch (error40) {
696582
696845
  const code = getErrnoCode(error40);
696583
696846
  if (code === "ENOENT") {
@@ -696599,7 +696862,7 @@ ${getTmuxInstallInstructions2()}
696599
696862
  }
696600
696863
  try {
696601
696864
  const filePath = resolve53(options2.appendSystemPromptFile);
696602
- appendSystemPrompt = readFileSync67(filePath, "utf8");
696865
+ appendSystemPrompt = readFileSync68(filePath, "utf8");
696603
696866
  } catch (error40) {
696604
696867
  const code = getErrnoCode(error40);
696605
696868
  if (code === "ENOENT") {
@@ -697226,7 +697489,7 @@ ${customInstructions}` : customInstructions;
697226
697489
  }
697227
697490
  }
697228
697491
  logForDiagnosticsNoPII("info", "started", {
697229
- version: "1.44.7",
697492
+ version: "1.44.9",
697230
697493
  is_native_binary: isInBundledMode()
697231
697494
  });
697232
697495
  registerCleanup(async () => {
@@ -698012,7 +698275,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
698012
698275
  pendingHookMessages
698013
698276
  }, renderAndRun);
698014
698277
  }
698015
- }).version("1.44.7 (UR-Nexus)", "-v, --version", "Output the version number");
698278
+ }).version("1.44.9 (UR-Nexus)", "-v, --version", "Output the version number");
698016
698279
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
698017
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.");
698018
698281
  if (canUserConfigureAdvisor()) {
@@ -698927,7 +699190,7 @@ if (false) {}
698927
699190
  async function main2() {
698928
699191
  const args = process.argv.slice(2);
698929
699192
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
698930
- console.log(`${"1.44.7"} (UR-Nexus)`);
699193
+ console.log(`${"1.44.9"} (UR-Nexus)`);
698931
699194
  return;
698932
699195
  }
698933
699196
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {