ur-agent 1.24.1 → 1.25.1

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
@@ -66884,7 +66884,7 @@ var init_auth = __esm(() => {
66884
66884
 
66885
66885
  // src/utils/userAgent.ts
66886
66886
  function getURCodeUserAgent() {
66887
- return `ur/${"1.24.1"}`;
66887
+ return `ur/${"1.25.1"}`;
66888
66888
  }
66889
66889
 
66890
66890
  // src/utils/workloadContext.ts
@@ -66906,7 +66906,7 @@ function getUserAgent() {
66906
66906
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
66907
66907
  const workload = getWorkload();
66908
66908
  const workloadSuffix = workload ? `, workload/${workload}` : "";
66909
- return `ur-cli/${"1.24.1"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
66909
+ return `ur-cli/${"1.25.1"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
66910
66910
  }
66911
66911
  function getMCPUserAgent() {
66912
66912
  const parts = [];
@@ -66920,7 +66920,7 @@ function getMCPUserAgent() {
66920
66920
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
66921
66921
  }
66922
66922
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
66923
- return `ur/${"1.24.1"}${suffix}`;
66923
+ return `ur/${"1.25.1"}${suffix}`;
66924
66924
  }
66925
66925
  function getWebFetchUserAgent() {
66926
66926
  return `UR-User (${getURCodeUserAgent()})`;
@@ -67058,7 +67058,7 @@ var init_user = __esm(() => {
67058
67058
  deviceId,
67059
67059
  sessionId: getSessionId(),
67060
67060
  email: getEmail(),
67061
- appVersion: "1.24.1",
67061
+ appVersion: "1.25.1",
67062
67062
  platform: getHostPlatformForAnalytics(),
67063
67063
  organizationUuid,
67064
67064
  accountUuid,
@@ -73575,7 +73575,7 @@ var init_metadata = __esm(() => {
73575
73575
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
73576
73576
  WHITESPACE_REGEX = /\s+/;
73577
73577
  getVersionBase = memoize_default(() => {
73578
- const match = "1.24.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
73578
+ const match = "1.25.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
73579
73579
  return match ? match[0] : undefined;
73580
73580
  });
73581
73581
  buildEnvContext = memoize_default(async () => {
@@ -73615,7 +73615,7 @@ var init_metadata = __esm(() => {
73615
73615
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
73616
73616
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
73617
73617
  isURAiAuth: isURAISubscriber2(),
73618
- version: "1.24.1",
73618
+ version: "1.25.1",
73619
73619
  versionBase: getVersionBase(),
73620
73620
  buildTime: "",
73621
73621
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -74285,7 +74285,7 @@ function initialize1PEventLogging() {
74285
74285
  const platform2 = getPlatform();
74286
74286
  const attributes = {
74287
74287
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
74288
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.24.1"
74288
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.25.1"
74289
74289
  };
74290
74290
  if (platform2 === "wsl") {
74291
74291
  const wslVersion = getWslVersion();
@@ -74312,7 +74312,7 @@ function initialize1PEventLogging() {
74312
74312
  })
74313
74313
  ]
74314
74314
  });
74315
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.24.1");
74315
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.25.1");
74316
74316
  }
74317
74317
  async function reinitialize1PEventLoggingIfConfigChanged() {
74318
74318
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -76721,7 +76721,7 @@ function isMcpServerCommandEntry(entry) {
76721
76721
  function isMcpServerUrlEntry(entry) {
76722
76722
  return "serverUrl" in entry && entry.serverUrl !== undefined;
76723
76723
  }
76724
- var EnvironmentVariablesSchema, PermissionsSchema, ExtraKnownMarketplaceSchema, AllowedMcpServerEntrySchema, DeniedMcpServerEntrySchema, CUSTOMIZATION_SURFACES, SettingsSchema;
76724
+ var EnvironmentVariablesSchema, PermissionsSchema, ExtraKnownMarketplaceSchema, AllowedMcpServerEntrySchema, DeniedMcpServerEntrySchema, CUSTOMIZATION_SURFACES, PROVIDER_SETTING_IDS, NonSecretPreferenceSchema, SettingsSchema;
76725
76725
  var init_types2 = __esm(() => {
76726
76726
  init_v4();
76727
76727
  init_sandboxTypes();
@@ -76781,6 +76781,26 @@ var init_types2 = __esm(() => {
76781
76781
  "hooks",
76782
76782
  "mcp"
76783
76783
  ];
76784
+ PROVIDER_SETTING_IDS = [
76785
+ "codex-cli",
76786
+ "claude-code-cli",
76787
+ "gemini-cli",
76788
+ "antigravity-cli",
76789
+ "openai-api",
76790
+ "anthropic-api",
76791
+ "gemini-api",
76792
+ "openrouter",
76793
+ "openai-compatible",
76794
+ "ollama",
76795
+ "lmstudio",
76796
+ "llama.cpp",
76797
+ "vllm"
76798
+ ];
76799
+ NonSecretPreferenceSchema = exports_external.union([
76800
+ exports_external.string(),
76801
+ exports_external.number(),
76802
+ exports_external.boolean()
76803
+ ]);
76784
76804
  SettingsSchema = lazySchema(() => exports_external.object({
76785
76805
  $schema: exports_external.literal(UR_CODE_SETTINGS_SCHEMA_URL).optional().describe("JSON Schema reference for UR settings"),
76786
76806
  apiKeyHelper: exports_external.string().optional().describe("Path to a script that outputs authentication values"),
@@ -76809,6 +76829,14 @@ var init_types2 = __esm(() => {
76809
76829
  includeGitInstructions: exports_external.boolean().optional().describe("Include built-in commit and PR workflow instructions in UR's system prompt (default: true)"),
76810
76830
  permissions: PermissionsSchema().optional().describe("Tool usage permissions configuration"),
76811
76831
  model: exports_external.string().optional().describe("Override the default model used by UR"),
76832
+ provider: exports_external.object({
76833
+ active: exports_external.enum(PROVIDER_SETTING_IDS).optional().describe("Active legal model provider adapter"),
76834
+ model: exports_external.string().optional().describe("Selected model name for the active provider"),
76835
+ baseUrl: exports_external.string().optional().describe("Provider base URL without embedded credentials"),
76836
+ commandPath: exports_external.string().optional().describe("Explicit official CLI executable path for subscription providers"),
76837
+ fallback: exports_external.union([exports_external.enum(PROVIDER_SETTING_IDS), exports_external.literal("disabled")]).optional().describe("Optional fallback provider; UR asks before using it"),
76838
+ preferences: exports_external.record(exports_external.string(), NonSecretPreferenceSchema).optional().describe("Non-secret provider preferences only")
76839
+ }).optional().describe("Legal provider configuration; credentials must stay in environment variables or official CLIs"),
76812
76840
  availableModels: exports_external.array(exports_external.string()).optional().describe("Allowlist of models that users can select. " + 'Accepts family aliases ("modelO" allows any modelO version), ' + 'version prefixes ("modelO-4-5" allows only that version), ' + "and full model IDs. " + "If undefined, all models are available. If empty array, only the default model is available. " + "Typically set in managed settings by enterprise administrators."),
76813
76841
  modelOverrides: exports_external.record(exports_external.string(), exports_external.string()).optional().describe('Override mapping from URHQ model ID (e.g. "ur-modelO-4-6") to provider-specific ' + "model ID (e.g. a Bedrock inference profile ARN). Typically set in managed settings by " + "enterprise administrators."),
76814
76842
  enableAllProjectMcpServers: exports_external.boolean().optional().describe("Whether to automatically approve all MCP servers in the project"),
@@ -79550,7 +79578,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
79550
79578
  function formatA2AAgentCard(options = {}, pretty = true) {
79551
79579
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
79552
79580
  }
79553
- var urVersion = "1.24.1", coverage, priorityRoadmap;
79581
+ var urVersion = "1.25.1", coverage, priorityRoadmap;
79554
79582
  var init_trends = __esm(() => {
79555
79583
  coverage = [
79556
79584
  {
@@ -81542,7 +81570,7 @@ function getAttributionHeader(fingerprint) {
81542
81570
  if (!isAttributionHeaderEnabled()) {
81543
81571
  return "";
81544
81572
  }
81545
- const version2 = `${"1.24.1"}.${fingerprint}`;
81573
+ const version2 = `${"1.25.1"}.${fingerprint}`;
81546
81574
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
81547
81575
  const cch = "";
81548
81576
  const workload = getWorkload();
@@ -124970,7 +124998,7 @@ function getEffortLevelDescription(level) {
124970
124998
  case "high":
124971
124999
  return "Comprehensive implementation with extensive testing and documentation";
124972
125000
  case "max":
124973
- return "Maximum capability with deepest reasoning (modelO 4.6 only)";
125001
+ return "Maximum capability with deepest reasoning";
124974
125002
  }
124975
125003
  }
124976
125004
  function getEffortValueDescription(value) {
@@ -128869,7 +128897,7 @@ How to use the statusLine command:
128869
128897
  "project_dir": "string", // Project root directory path
128870
128898
  "added_dirs": ["string"] // Directories added via /add-dir
128871
128899
  },
128872
- "version": "string", // UR-AGENT app version (e.g., "1.24.1")
128900
+ "version": "string", // UR-AGENT app version (e.g., "1.25.1")
128873
128901
  "output_style": {
128874
128902
  "name": "string", // Output style name (e.g., "default", "Explanatory", "Learning")
128875
128903
  },
@@ -189211,7 +189239,7 @@ function getTelemetryAttributes() {
189211
189239
  attributes["session.id"] = sessionId;
189212
189240
  }
189213
189241
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
189214
- attributes["app.version"] = "1.24.1";
189242
+ attributes["app.version"] = "1.25.1";
189215
189243
  }
189216
189244
  const oauthAccount = getOauthAccountInfo();
189217
189245
  if (oauthAccount) {
@@ -224205,9 +224233,10 @@ var init_IdeOnboardingDialog = __esm(() => {
224205
224233
  });
224206
224234
 
224207
224235
  // src/utils/ide.ts
224236
+ import { writeFileSync as writeFileSync10 } from "fs";
224208
224237
  import { createConnection } from "net";
224209
224238
  import * as os3 from "os";
224210
- import { basename as basename12, join as join64, sep as pathSeparator, resolve as resolve19 } from "path";
224239
+ import { basename as basename12, dirname as dirname29, join as join64, sep as pathSeparator, resolve as resolve19 } from "path";
224211
224240
  function isProcessRunning2(pid) {
224212
224241
  try {
224213
224242
  process.kill(pid, 0);
@@ -224594,12 +224623,7 @@ async function installIDEExtension(ideType) {
224594
224623
  let version2 = await getInstalledVSCodeExtensionVersion(command);
224595
224624
  if (!version2 || lt(version2, getURCodeVersion())) {
224596
224625
  await sleep(500);
224597
- const result = await execFileNoThrowWithCwd(command, ["--force", "--install-extension", "urhq.ur"], {
224598
- env: getInstallationEnv()
224599
- });
224600
- if (result.code !== 0) {
224601
- throw new Error(`${result.code}: ${result.error} ${result.stderr}`);
224602
- }
224626
+ await installBundledVSCodeExtension(command);
224603
224627
  version2 = getURCodeVersion();
224604
224628
  }
224605
224629
  return version2;
@@ -224617,7 +224641,7 @@ function getInstallationEnv() {
224617
224641
  return;
224618
224642
  }
224619
224643
  function getURCodeVersion() {
224620
- return "1.24.1";
224644
+ return "1.25.1";
224621
224645
  }
224622
224646
  async function getInstalledVSCodeExtensionVersion(command) {
224623
224647
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -224627,12 +224651,122 @@ async function getInstalledVSCodeExtensionVersion(command) {
224627
224651
  `) || [];
224628
224652
  for (const line of lines) {
224629
224653
  const [extensionId, version2] = line.split("@");
224630
- if (extensionId === "urhq.ur" && version2) {
224654
+ if (extensionId === EXTENSION_ID && version2) {
224631
224655
  return version2;
224632
224656
  }
224633
224657
  }
224634
224658
  return null;
224635
224659
  }
224660
+ function findBundledVSCodeExtensionDir(invokedPath = process.argv[1] ?? "") {
224661
+ const fs3 = getFsImplementation();
224662
+ const starts = [
224663
+ invokedPath ? dirname29(resolve19(invokedPath)) : null,
224664
+ process.cwd()
224665
+ ].filter((value) => Boolean(value));
224666
+ for (const start of starts) {
224667
+ let current = start;
224668
+ for (let depth = 0;depth < 12; depth++) {
224669
+ const candidate = join64(current, BUNDLED_EXTENSION_RELATIVE_PATH);
224670
+ if (fs3.existsSync(join64(candidate, "package.json"))) {
224671
+ return candidate;
224672
+ }
224673
+ const parent = dirname29(current);
224674
+ if (parent === current)
224675
+ break;
224676
+ current = parent;
224677
+ }
224678
+ }
224679
+ return null;
224680
+ }
224681
+ function escapeXml2(value) {
224682
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
224683
+ }
224684
+ function buildContentTypesXml() {
224685
+ return `<?xml version="1.0" encoding="utf-8"?>
224686
+ <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
224687
+ <Default Extension="json" ContentType="application/json"/>
224688
+ <Default Extension="js" ContentType="application/javascript"/>
224689
+ <Default Extension="svg" ContentType="image/svg+xml"/>
224690
+ <Default Extension="vsixmanifest" ContentType="text/xml"/>
224691
+ </Types>
224692
+ `;
224693
+ }
224694
+ function buildVsixManifest(manifest) {
224695
+ const categories = manifest.categories?.join(",") || "Other";
224696
+ const engine = manifest.engines?.vscode || "^1.92.0";
224697
+ return `<?xml version="1.0" encoding="utf-8"?>
224698
+ <PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011">
224699
+ <Metadata>
224700
+ <Identity Language="en-US" Id="${escapeXml2(manifest.name)}" Version="${escapeXml2(manifest.version)}" Publisher="${escapeXml2(manifest.publisher)}"/>
224701
+ <DisplayName>${escapeXml2(manifest.displayName ?? manifest.name)}</DisplayName>
224702
+ <Description xml:space="preserve">${escapeXml2(manifest.description ?? manifest.name)}</Description>
224703
+ <Categories>${escapeXml2(categories)}</Categories>
224704
+ <Properties>
224705
+ <Property Id="Microsoft.VisualStudio.Code.Engine" Value="${escapeXml2(engine)}"/>
224706
+ </Properties>
224707
+ </Metadata>
224708
+ <Installation>
224709
+ <InstallationTarget Id="Microsoft.VisualStudio.Code"/>
224710
+ </Installation>
224711
+ <Dependencies/>
224712
+ <Assets>
224713
+ <Asset Type="Microsoft.VisualStudio.Code.Manifest" Path="extension/package.json" Addressable="true"/>
224714
+ </Assets>
224715
+ </PackageManifest>
224716
+ `;
224717
+ }
224718
+ function collectExtensionFiles(dir, prefix = "") {
224719
+ const fs3 = getFsImplementation();
224720
+ const files = {};
224721
+ for (const entry of fs3.readdirSync(dir)) {
224722
+ if (entry.name === "node_modules" || entry.name === ".git")
224723
+ continue;
224724
+ const fullPath = join64(dir, entry.name);
224725
+ const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;
224726
+ if (entry.isDirectory()) {
224727
+ Object.assign(files, collectExtensionFiles(fullPath, relativePath));
224728
+ } else if (entry.isFile()) {
224729
+ files[`extension/${relativePath}`] = fs3.readFileBytesSync(fullPath);
224730
+ }
224731
+ }
224732
+ return files;
224733
+ }
224734
+ async function createBundledVSCodeExtensionVsix() {
224735
+ const extensionDir = findBundledVSCodeExtensionDir();
224736
+ if (!extensionDir) {
224737
+ throw new Error(`Bundled VS Code extension not found at ${BUNDLED_EXTENSION_RELATIVE_PATH}.`);
224738
+ }
224739
+ const fs3 = getFsImplementation();
224740
+ const manifestPath3 = join64(extensionDir, "package.json");
224741
+ const manifest = jsonParse(fs3.readFileSync(manifestPath3, { encoding: "utf8" }));
224742
+ if (!manifest?.name || !manifest.version || !manifest.publisher) {
224743
+ throw new Error(`Invalid VS Code extension manifest at ${manifestPath3}.`);
224744
+ }
224745
+ const { zipSync: zipSync2 } = await Promise.resolve().then(() => (init_esm8(), exports_esm));
224746
+ const encoder = new TextEncoder;
224747
+ const files = collectExtensionFiles(extensionDir);
224748
+ files["extension.vsixmanifest"] = encoder.encode(buildVsixManifest(manifest));
224749
+ files["[Content_Types].xml"] = encoder.encode(buildContentTypesXml());
224750
+ const tempVsixPath = join64(os3.tmpdir(), `ur-agent-${manifest.name}-${manifest.version}-${Date.now()}.vsix`);
224751
+ writeFileSync10(tempVsixPath, Buffer.from(zipSync2(files, { level: 6 })));
224752
+ return tempVsixPath;
224753
+ }
224754
+ async function installBundledVSCodeExtension(command) {
224755
+ const tempVsixPath = await createBundledVSCodeExtensionVsix();
224756
+ try {
224757
+ await sleep(500);
224758
+ const result = await execFileNoThrowWithCwd(command, ["--force", "--install-extension", tempVsixPath], {
224759
+ env: getInstallationEnv()
224760
+ });
224761
+ if (result.code !== 0) {
224762
+ throw new Error(`${result.code}: ${result.error} ${result.stderr}`);
224763
+ }
224764
+ } finally {
224765
+ try {
224766
+ await getFsImplementation().unlink(tempVsixPath);
224767
+ } catch {}
224768
+ }
224769
+ }
224636
224770
  function getVSCodeIDECommandByParentProcess() {
224637
224771
  try {
224638
224772
  const platform4 = getPlatform();
@@ -224914,7 +225048,7 @@ async function installFromArtifactory(command) {
224914
225048
  throw error40;
224915
225049
  }
224916
225050
  }
224917
- var ideOnboardingDialog = () => (init_IdeOnboardingDialog(), __toCommonJS(exports_IdeOnboardingDialog)), supportedIdeConfigs, isSupportedVSCodeTerminal, isSupportedJetBrainsTerminal, isSupportedTerminal, getWindowsUserProfile, currentIDESearch = null, EXTENSION_ID, cachedRunningIDEs = null, EDITOR_DISPLAY_NAMES, detectHostIP;
225051
+ var ideOnboardingDialog = () => (init_IdeOnboardingDialog(), __toCommonJS(exports_IdeOnboardingDialog)), supportedIdeConfigs, isSupportedVSCodeTerminal, isSupportedJetBrainsTerminal, isSupportedTerminal, getWindowsUserProfile, currentIDESearch = null, PUBLIC_EXTENSION_ID = "ur-agent.ur-inline-diffs", INTERNAL_EXTENSION_ID = "urhq.ur-internal", BUNDLED_EXTENSION_RELATIVE_PATH, EXTENSION_ID, cachedRunningIDEs = null, EDITOR_DISPLAY_NAMES, detectHostIP;
224918
225052
  var init_ide = __esm(() => {
224919
225053
  init_axios2();
224920
225054
  init_execa();
@@ -225089,7 +225223,8 @@ var init_ide = __esm(() => {
225089
225223
  logForDebugging("Unable to get Windows USERPROFILE via PowerShell - IDE detection may be incomplete");
225090
225224
  return;
225091
225225
  });
225092
- EXTENSION_ID = process.env.USER_TYPE === "ant" ? "urhq.ur-internal" : "urhq.ur";
225226
+ BUNDLED_EXTENSION_RELATIVE_PATH = join64("extensions", "vscode-ur-inline-diffs");
225227
+ EXTENSION_ID = process.env.USER_TYPE === "ant" ? INTERNAL_EXTENSION_ID : PUBLIC_EXTENSION_ID;
225093
225228
  EDITOR_DISPLAY_NAMES = {
225094
225229
  code: "VS Code",
225095
225230
  cursor: "Cursor",
@@ -226502,7 +226637,7 @@ function createLinkedTransportPair() {
226502
226637
 
226503
226638
  // src/services/mcp/client.ts
226504
226639
  import { mkdir as mkdir9, readFile as readFile11, unlink as unlink4, writeFile as writeFile7 } from "fs/promises";
226505
- import { dirname as dirname29, join as join65 } from "path";
226640
+ import { dirname as dirname30, join as join65 } from "path";
226506
226641
  function isMcpSessionExpiredError(error40) {
226507
226642
  const httpStatus = "code" in error40 ? error40.code : undefined;
226508
226643
  if (httpStatus !== 404) {
@@ -226535,7 +226670,7 @@ function setMcpAuthCacheEntry(serverId) {
226535
226670
  const cache3 = await getMcpAuthCache();
226536
226671
  cache3[serverId] = { timestamp: Date.now() };
226537
226672
  const cachePath = getMcpAuthCachePath();
226538
- await mkdir9(dirname29(cachePath), { recursive: true });
226673
+ await mkdir9(dirname30(cachePath), { recursive: true });
226539
226674
  await writeFile7(cachePath, jsonStringify(cache3));
226540
226675
  authCachePromise = null;
226541
226676
  }).catch(() => {});
@@ -227345,7 +227480,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
227345
227480
  const client2 = new Client({
227346
227481
  name: "ur",
227347
227482
  title: "UR",
227348
- version: "1.24.1",
227483
+ version: "1.25.1",
227349
227484
  description: "URHQ's agentic coding tool",
227350
227485
  websiteUrl: PRODUCT_URL
227351
227486
  }, {
@@ -227699,7 +227834,7 @@ var init_client5 = __esm(() => {
227699
227834
  const client2 = new Client({
227700
227835
  name: "ur",
227701
227836
  title: "UR",
227702
- version: "1.24.1",
227837
+ version: "1.25.1",
227703
227838
  description: "URHQ's agentic coding tool",
227704
227839
  websiteUrl: PRODUCT_URL
227705
227840
  }, {
@@ -237512,9 +237647,9 @@ async function assertMinVersion() {
237512
237647
  if (false) {}
237513
237648
  try {
237514
237649
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
237515
- if (versionConfig.minVersion && lt("1.24.1", versionConfig.minVersion)) {
237650
+ if (versionConfig.minVersion && lt("1.25.1", versionConfig.minVersion)) {
237516
237651
  console.error(`
237517
- It looks like your version of UR (${"1.24.1"}) needs an update.
237652
+ It looks like your version of UR (${"1.25.1"}) needs an update.
237518
237653
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
237519
237654
 
237520
237655
  To update, please run:
@@ -237730,7 +237865,7 @@ async function installGlobalPackage(specificVersion) {
237730
237865
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
237731
237866
  logEvent("tengu_auto_updater_lock_contention", {
237732
237867
  pid: process.pid,
237733
- currentVersion: "1.24.1"
237868
+ currentVersion: "1.25.1"
237734
237869
  });
237735
237870
  return "in_progress";
237736
237871
  }
@@ -237739,7 +237874,7 @@ async function installGlobalPackage(specificVersion) {
237739
237874
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
237740
237875
  logError2(new Error("Windows NPM detected in WSL environment"));
237741
237876
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
237742
- currentVersion: "1.24.1"
237877
+ currentVersion: "1.25.1"
237743
237878
  });
237744
237879
  console.error(`
237745
237880
  Error: Windows NPM detected in WSL
@@ -238274,7 +238409,7 @@ function detectLinuxGlobPatternWarnings() {
238274
238409
  }
238275
238410
  async function getDoctorDiagnostic() {
238276
238411
  const installationType = await getCurrentInstallationType();
238277
- const version2 = typeof MACRO !== "undefined" ? "1.24.1" : "unknown";
238412
+ const version2 = typeof MACRO !== "undefined" ? "1.25.1" : "unknown";
238278
238413
  const installationPath = await getInstallationPath();
238279
238414
  const invokedBinary = getInvokedBinary();
238280
238415
  const multipleInstallations = await detectMultipleInstallations();
@@ -238946,7 +239081,7 @@ import {
238946
239081
  writeFile as writeFile13
238947
239082
  } from "fs/promises";
238948
239083
  import { homedir as homedir20 } from "os";
238949
- import { basename as basename15, delimiter as delimiter4, dirname as dirname30, join as join76, resolve as resolve21 } from "path";
239084
+ import { basename as basename15, delimiter as delimiter4, dirname as dirname31, join as join76, resolve as resolve21 } from "path";
238950
239085
  function getPlatform2() {
238951
239086
  const os4 = env2.platform;
238952
239087
  const arch = process.arch === "x64" ? "x64" : process.arch === "arm64" ? "arm64" : null;
@@ -238989,7 +239124,7 @@ async function getVersionPaths(version2) {
238989
239124
  const dirs = getBaseDirectories();
238990
239125
  const dirsToCreate = [dirs.versions, dirs.staging, dirs.locks];
238991
239126
  await Promise.all(dirsToCreate.map((dir) => mkdir11(dir, { recursive: true })));
238992
- const executableParentDir = dirname30(dirs.executable);
239127
+ const executableParentDir = dirname31(dirs.executable);
238993
239128
  await mkdir11(executableParentDir, { recursive: true });
238994
239129
  const installPath = join76(dirs.versions, version2);
238995
239130
  try {
@@ -239083,7 +239218,7 @@ async function tryWithVersionLock(versionFilePath, callback, retries = 0) {
239083
239218
  }
239084
239219
  }
239085
239220
  async function atomicMoveToInstallPath(stagedBinaryPath, installPath) {
239086
- await mkdir11(dirname30(installPath), { recursive: true });
239221
+ await mkdir11(dirname31(installPath), { recursive: true });
239087
239222
  const tempInstallPath = `${installPath}.tmp.${process.pid}.${Date.now()}`;
239088
239223
  try {
239089
239224
  await copyFile2(stagedBinaryPath, tempInstallPath);
@@ -239209,8 +239344,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
239209
239344
  const maxVersion = await getMaxVersion();
239210
239345
  if (maxVersion && gt(version2, maxVersion)) {
239211
239346
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
239212
- if (gte("1.24.1", maxVersion)) {
239213
- logForDebugging(`Native installer: current version ${"1.24.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
239347
+ if (gte("1.25.1", maxVersion)) {
239348
+ logForDebugging(`Native installer: current version ${"1.25.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
239214
239349
  logEvent("tengu_native_update_skipped_max_version", {
239215
239350
  latency_ms: Date.now() - startTime,
239216
239351
  max_version: maxVersion,
@@ -239221,7 +239356,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
239221
239356
  version2 = maxVersion;
239222
239357
  }
239223
239358
  }
239224
- if (!forceReinstall && version2 === "1.24.1" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
239359
+ if (!forceReinstall && version2 === "1.25.1" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
239225
239360
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
239226
239361
  logEvent("tengu_native_update_complete", {
239227
239362
  latency_ms: Date.now() - startTime,
@@ -239297,7 +239432,7 @@ async function updateSymlink(symlinkPath, targetPath) {
239297
239432
  const isWindows2 = platform4.startsWith("win32");
239298
239433
  if (isWindows2) {
239299
239434
  try {
239300
- const parentDir2 = dirname30(symlinkPath);
239435
+ const parentDir2 = dirname31(symlinkPath);
239301
239436
  await mkdir11(parentDir2, { recursive: true });
239302
239437
  let existingStats;
239303
239438
  try {
@@ -239343,7 +239478,7 @@ async function updateSymlink(symlinkPath, targetPath) {
239343
239478
  return false;
239344
239479
  }
239345
239480
  }
239346
- const parentDir = dirname30(symlinkPath);
239481
+ const parentDir = dirname31(symlinkPath);
239347
239482
  try {
239348
239483
  await mkdir11(parentDir, { recursive: true });
239349
239484
  logForDebugging(`Created directory ${parentDir} for symlink`);
@@ -239360,7 +239495,7 @@ async function updateSymlink(symlinkPath, targetPath) {
239360
239495
  if (symlinkExists) {
239361
239496
  try {
239362
239497
  const currentTarget = await readlink(symlinkPath);
239363
- const resolvedCurrentTarget = resolve21(dirname30(symlinkPath), currentTarget);
239498
+ const resolvedCurrentTarget = resolve21(dirname31(symlinkPath), currentTarget);
239364
239499
  const resolvedTargetPath = resolve21(targetPath);
239365
239500
  if (resolvedCurrentTarget === resolvedTargetPath) {
239366
239501
  return false;
@@ -239400,7 +239535,7 @@ async function checkInstall(force = false) {
239400
239535
  }
239401
239536
  const dirs = getBaseDirectories();
239402
239537
  const messages = [];
239403
- const localBinDir = dirname30(dirs.executable);
239538
+ const localBinDir = dirname31(dirs.executable);
239404
239539
  const resolvedLocalBinPath = resolve21(localBinDir);
239405
239540
  const platform4 = getPlatform2();
239406
239541
  const isWindows2 = platform4.startsWith("win32");
@@ -239424,7 +239559,7 @@ async function checkInstall(force = false) {
239424
239559
  } else {
239425
239560
  try {
239426
239561
  const target = await readlink(dirs.executable);
239427
- const absoluteTarget = resolve21(dirname30(dirs.executable), target);
239562
+ const absoluteTarget = resolve21(dirname31(dirs.executable), target);
239428
239563
  if (!await isPossibleURBinary(absoluteTarget)) {
239429
239564
  messages.push({
239430
239565
  message: `UR symlink points to missing or invalid binary: ${target}`,
@@ -239531,7 +239666,7 @@ async function installLatestImpl(channelOrVersion, forceReinstall = false) {
239531
239666
  async function getVersionFromSymlink(symlinkPath) {
239532
239667
  try {
239533
239668
  const target = await readlink(symlinkPath);
239534
- const absoluteTarget = resolve21(dirname30(symlinkPath), target);
239669
+ const absoluteTarget = resolve21(dirname31(symlinkPath), target);
239535
239670
  if (await isPossibleURBinary(absoluteTarget)) {
239536
239671
  return absoluteTarget;
239537
239672
  }
@@ -239626,7 +239761,7 @@ async function cleanupOldVersions() {
239626
239761
  const dirs = getBaseDirectories();
239627
239762
  const oneHourAgo = Date.now() - 3600000;
239628
239763
  if (getPlatform2().startsWith("win32")) {
239629
- const executableDir = dirname30(dirs.executable);
239764
+ const executableDir = dirname31(dirs.executable);
239630
239765
  try {
239631
239766
  const files = await readdir9(executableDir);
239632
239767
  let cleanedCount = 0;
@@ -247551,7 +247686,7 @@ __export(exports_teamHelpers, {
247551
247686
  cleanupSessionTeams: () => cleanupSessionTeams,
247552
247687
  addHiddenPaneId: () => addHiddenPaneId
247553
247688
  });
247554
- import { mkdirSync as mkdirSync11, readFileSync as readFileSync18, writeFileSync as writeFileSync10 } from "fs";
247689
+ import { mkdirSync as mkdirSync11, readFileSync as readFileSync18, writeFileSync as writeFileSync11 } from "fs";
247555
247690
  import { mkdir as mkdir14, readFile as readFile17, rm as rm4, writeFile as writeFile16 } from "fs/promises";
247556
247691
  import { join as join79 } from "path";
247557
247692
  function sanitizeName(name) {
@@ -247591,7 +247726,7 @@ async function readTeamFileAsync(teamName) {
247591
247726
  function writeTeamFile(teamName, teamFile) {
247592
247727
  const teamDir = getTeamDir(teamName);
247593
247728
  mkdirSync11(teamDir, { recursive: true });
247594
- writeFileSync10(getTeamFilePath(teamName), jsonStringify(teamFile, null, 2));
247729
+ writeFileSync11(getTeamFilePath(teamName), jsonStringify(teamFile, null, 2));
247595
247730
  }
247596
247731
  async function writeTeamFileAsync(teamName, teamFile) {
247597
247732
  const teamDir = getTeamDir(teamName);
@@ -262741,7 +262876,7 @@ import {
262741
262876
  stat as stat21,
262742
262877
  unlink as unlink10
262743
262878
  } from "fs/promises";
262744
- import { dirname as dirname31, isAbsolute as isAbsolute14, join as join80, relative as relative12 } from "path";
262879
+ import { dirname as dirname32, isAbsolute as isAbsolute14, join as join80, relative as relative12 } from "path";
262745
262880
  import { inspect as inspect3 } from "util";
262746
262881
  function fileHistoryEnabled() {
262747
262882
  if (getIsNonInteractiveSession()) {
@@ -263182,7 +263317,7 @@ async function createBackup(filePath, version2) {
263182
263317
  } catch (e) {
263183
263318
  if (!isENOENT(e))
263184
263319
  throw e;
263185
- await mkdir15(dirname31(backupPath), { recursive: true });
263320
+ await mkdir15(dirname32(backupPath), { recursive: true });
263186
263321
  await copyFile3(filePath, backupPath);
263187
263322
  }
263188
263323
  await chmod6(backupPath, srcStats.mode);
@@ -263214,7 +263349,7 @@ async function restoreBackup(filePath, backupFileName) {
263214
263349
  } catch (e) {
263215
263350
  if (!isENOENT(e))
263216
263351
  throw e;
263217
- await mkdir15(dirname31(filePath), { recursive: true });
263352
+ await mkdir15(dirname32(filePath), { recursive: true });
263218
263353
  await copyFile3(backupPath, filePath);
263219
263354
  }
263220
263355
  await chmod6(filePath, backupStats.mode);
@@ -281528,7 +281663,7 @@ var builders = null;
281528
281663
  import { realpath as realpath10 } from "fs/promises";
281529
281664
  import {
281530
281665
  basename as basename22,
281531
- dirname as dirname33,
281666
+ dirname as dirname34,
281532
281667
  isAbsolute as isAbsolute18,
281533
281668
  join as join89,
281534
281669
  sep as pathSep,
@@ -281751,7 +281886,7 @@ function isSkillFile(filePath) {
281751
281886
  function transformSkillFiles(files) {
281752
281887
  const filesByDir = new Map;
281753
281888
  for (const file2 of files) {
281754
- const dir = dirname33(file2.filePath);
281889
+ const dir = dirname34(file2.filePath);
281755
281890
  const dirFiles = filesByDir.get(dir) ?? [];
281756
281891
  dirFiles.push(file2);
281757
281892
  filesByDir.set(dir, dirFiles);
@@ -281780,15 +281915,15 @@ function buildNamespace(targetDir, baseDir) {
281780
281915
  return relativePath ? relativePath.split(pathSep).join(":") : "";
281781
281916
  }
281782
281917
  function getSkillCommandName(filePath, baseDir) {
281783
- const skillDirectory = dirname33(filePath);
281784
- const parentOfSkillDir = dirname33(skillDirectory);
281918
+ const skillDirectory = dirname34(filePath);
281919
+ const parentOfSkillDir = dirname34(skillDirectory);
281785
281920
  const commandBaseName = basename22(skillDirectory);
281786
281921
  const namespace = buildNamespace(parentOfSkillDir, baseDir);
281787
281922
  return namespace ? `${namespace}:${commandBaseName}` : commandBaseName;
281788
281923
  }
281789
281924
  function getRegularCommandName(filePath, baseDir) {
281790
281925
  const fileName = basename22(filePath);
281791
- const fileDirectory = dirname33(filePath);
281926
+ const fileDirectory = dirname34(filePath);
281792
281927
  const commandBaseName = fileName.replace(/\.md$/, "");
281793
281928
  const namespace = buildNamespace(fileDirectory, baseDir);
281794
281929
  return namespace ? `${namespace}:${commandBaseName}` : commandBaseName;
@@ -281811,7 +281946,7 @@ async function loadSkillsFromCommandsDir(cwd2) {
281811
281946
  } of processedFiles) {
281812
281947
  try {
281813
281948
  const isSkillFormat = isSkillFile(filePath);
281814
- const skillDirectory = isSkillFormat ? dirname33(filePath) : undefined;
281949
+ const skillDirectory = isSkillFormat ? dirname34(filePath) : undefined;
281815
281950
  const cmdName = getCommandName2({
281816
281951
  baseDir,
281817
281952
  filePath,
@@ -281863,7 +281998,7 @@ async function discoverSkillDirsForPaths(filePaths, cwd2) {
281863
281998
  const resolvedCwd = cwd2.endsWith(pathSep) ? cwd2.slice(0, -1) : cwd2;
281864
281999
  const newDirs = [];
281865
282000
  for (const filePath of filePaths) {
281866
- let currentDir = dirname33(filePath);
282001
+ let currentDir = dirname34(filePath);
281867
282002
  while (currentDir.startsWith(resolvedCwd + pathSep)) {
281868
282003
  const skillDir = join89(currentDir, ".ur", "skills");
281869
282004
  if (!dynamicSkillDirs.has(skillDir)) {
@@ -281877,7 +282012,7 @@ async function discoverSkillDirsForPaths(filePaths, cwd2) {
281877
282012
  newDirs.push(skillDir);
281878
282013
  } catch {}
281879
282014
  }
281880
- const parent = dirname33(currentDir);
282015
+ const parent = dirname34(currentDir);
281881
282016
  if (parent === currentDir)
281882
282017
  break;
281883
282018
  currentDir = parent;
@@ -282381,7 +282516,7 @@ var init_fileOperationAnalytics = __esm(() => {
282381
282516
 
282382
282517
  // src/utils/gitDiff.ts
282383
282518
  import { access as access5, readFile as readFile23 } from "fs/promises";
282384
- import { dirname as dirname34, join as join90, relative as relative16, sep as sep16 } from "path";
282519
+ import { dirname as dirname35, join as join90, relative as relative16, sep as sep16 } from "path";
282385
282520
  async function fetchGitDiff() {
282386
282521
  const isGit = await getIsGit();
282387
282522
  if (!isGit)
@@ -282565,7 +282700,7 @@ function parseShortstat(stdout) {
282565
282700
  };
282566
282701
  }
282567
282702
  async function fetchSingleFileGitDiff(absoluteFilePath) {
282568
- const gitRoot = findGitRoot(dirname34(absoluteFilePath));
282703
+ const gitRoot = findGitRoot(dirname35(absoluteFilePath));
282569
282704
  if (!gitRoot)
282570
282705
  return null;
282571
282706
  const gitPath = relative16(gitRoot, absoluteFilePath).split(sep16).join("/");
@@ -285688,7 +285823,7 @@ var init_UI8 = __esm(() => {
285688
285823
  });
285689
285824
 
285690
285825
  // src/tools/FileEditTool/FileEditTool.ts
285691
- import { dirname as dirname35, isAbsolute as isAbsolute19, sep as sep17 } from "path";
285826
+ import { dirname as dirname36, isAbsolute as isAbsolute19, sep as sep17 } from "path";
285692
285827
  function readFileForEdit(absoluteFilePath) {
285693
285828
  try {
285694
285829
  const meta = readFileSyncWithMetadata(absoluteFilePath);
@@ -285992,7 +286127,7 @@ String: ${old_string}`,
285992
286127
  activateConditionalSkillsForPaths([absoluteFilePath], cwd2);
285993
286128
  }
285994
286129
  await diagnosticTracker.beforeFileEdited(absoluteFilePath);
285995
- await fs4.mkdir(dirname35(absoluteFilePath));
286130
+ await fs4.mkdir(dirname36(absoluteFilePath));
285996
286131
  if (fileHistoryEnabled()) {
285997
286132
  await fileHistoryTrackEdit(updateFileHistoryState, absoluteFilePath, parentMessage?.uuid ?? "");
285998
286133
  }
@@ -286583,7 +286718,7 @@ var init_UI9 = __esm(() => {
286583
286718
  });
286584
286719
 
286585
286720
  // src/tools/FileWriteTool/FileWriteTool.ts
286586
- import { dirname as dirname36, sep as sep18 } from "path";
286721
+ import { dirname as dirname37, sep as sep18 } from "path";
286587
286722
  var inputSchema13, outputSchema10, FileWriteTool;
286588
286723
  var init_FileWriteTool = __esm(() => {
286589
286724
  init_analytics();
@@ -286723,7 +286858,7 @@ var init_FileWriteTool = __esm(() => {
286723
286858
  },
286724
286859
  async call({ file_path, content }, { readFileState, updateFileHistoryState, dynamicSkillDirTriggers }, _, parentMessage) {
286725
286860
  const fullFilePath = expandPath(file_path);
286726
- const dir = dirname36(fullFilePath);
286861
+ const dir = dirname37(fullFilePath);
286727
286862
  const cwd2 = getCwd2();
286728
286863
  const newSkillDirs = await discoverSkillDirsForPaths([fullFilePath], cwd2);
286729
286864
  if (newSkillDirs.length > 0) {
@@ -286865,7 +287000,7 @@ var init_FileWriteTool = __esm(() => {
286865
287000
  });
286866
287001
 
286867
287002
  // src/utils/plugins/orphanedPluginFilter.ts
286868
- import { dirname as dirname37, isAbsolute as isAbsolute21, join as join91, normalize as normalize11, relative as relative19, sep as sep19 } from "path";
287003
+ import { dirname as dirname38, isAbsolute as isAbsolute21, join as join91, normalize as normalize11, relative as relative19, sep as sep19 } from "path";
286869
287004
  async function getGlobExclusionsForPluginCache(searchPath) {
286870
287005
  const cachePath = normalize11(join91(getPluginsDirectory(), "cache"));
286871
287006
  if (searchPath && !pathsOverlap(searchPath, cachePath)) {
@@ -286885,7 +287020,7 @@ async function getGlobExclusionsForPluginCache(searchPath) {
286885
287020
  ORPHANED_AT_FILENAME
286886
287021
  ], cachePath, new AbortController().signal);
286887
287022
  cachedExclusions = markers.map((markerPath) => {
286888
- const versionDir = dirname37(markerPath);
287023
+ const versionDir = dirname38(markerPath);
286889
287024
  const rel = isAbsolute21(versionDir) ? relative19(cachePath, versionDir) : versionDir;
286890
287025
  const posixRelative = rel.replace(/\\/g, "/");
286891
287026
  return `!**/${posixRelative}/**`;
@@ -286915,12 +287050,12 @@ var init_orphanedPluginFilter = __esm(() => {
286915
287050
  });
286916
287051
 
286917
287052
  // src/utils/glob.ts
286918
- import { basename as basename24, dirname as dirname38, isAbsolute as isAbsolute22, join as join92, sep as sep20 } from "path";
287053
+ import { basename as basename24, dirname as dirname39, isAbsolute as isAbsolute22, join as join92, sep as sep20 } from "path";
286919
287054
  function extractGlobBaseDirectory(pattern) {
286920
287055
  const globChars = /[*?[{]/;
286921
287056
  const match = pattern.match(globChars);
286922
287057
  if (!match || match.index === undefined) {
286923
- const dir = dirname38(pattern);
287058
+ const dir = dirname39(pattern);
286924
287059
  const file2 = basename24(pattern);
286925
287060
  return { baseDir: dir, relativePattern: file2 };
286926
287061
  }
@@ -292782,7 +292917,7 @@ var init_embeddings = __esm(() => {
292782
292917
  // src/utils/codeIndex/store.ts
292783
292918
  import { createHash as createHash18 } from "crypto";
292784
292919
  import { mkdir as mkdir21, readFile as readFile25, writeFile as writeFile22 } from "fs/promises";
292785
- import { dirname as dirname39, join as join96 } from "path";
292920
+ import { dirname as dirname40, join as join96 } from "path";
292786
292921
  function codeIndexDir(root2) {
292787
292922
  return join96(root2, ".ur", "code-index");
292788
292923
  }
@@ -292830,7 +292965,7 @@ async function loadIndex(root2) {
292830
292965
  }
292831
292966
  async function saveIndex(root2, index2) {
292832
292967
  const path13 = indexPath(root2);
292833
- await mkdir21(dirname39(path13), { recursive: true });
292968
+ await mkdir21(dirname40(path13), { recursive: true });
292834
292969
  await writeFile22(path13, JSON.stringify(index2), { encoding: "utf-8" });
292835
292970
  }
292836
292971
  var init_store = () => {};
@@ -293131,7 +293266,7 @@ var init_indexer = __esm(() => {
293131
293266
  });
293132
293267
 
293133
293268
  // src/utils/codeIndex/graph.ts
293134
- import { existsSync as existsSync15, mkdirSync as mkdirSync12, readFileSync as readFileSync21, writeFileSync as writeFileSync11 } from "fs";
293269
+ import { existsSync as existsSync15, mkdirSync as mkdirSync12, readFileSync as readFileSync21, writeFileSync as writeFileSync12 } from "fs";
293135
293270
  import { posix as posix6, resolve as resolve32 } from "path";
293136
293271
  import { join as join97 } from "path";
293137
293272
  function matchAll2(text, regexes) {
@@ -293289,7 +293424,7 @@ async function buildCodeGraph(options2) {
293289
293424
  }
293290
293425
  const graph = buildGraphFromFiles(sources);
293291
293426
  mkdirSync12(join97(options2.root, ".ur", "code-index"), { recursive: true });
293292
- writeFileSync11(graphPath(options2.root), `${JSON.stringify(graph, null, 2)}
293427
+ writeFileSync12(graphPath(options2.root), `${JSON.stringify(graph, null, 2)}
293293
293428
  `);
293294
293429
  return graph;
293295
293430
  }
@@ -293340,7 +293475,7 @@ var init_graph = __esm(() => {
293340
293475
 
293341
293476
  // src/utils/codeIndex/repoIndex.ts
293342
293477
  import { createHash as createHash19 } from "crypto";
293343
- import { existsSync as existsSync16, mkdirSync as mkdirSync13, readFileSync as readFileSync22, writeFileSync as writeFileSync12 } from "fs";
293478
+ import { existsSync as existsSync16, mkdirSync as mkdirSync13, readFileSync as readFileSync22, writeFileSync as writeFileSync13 } from "fs";
293344
293479
  import { join as join98, posix as posix7 } from "path";
293345
293480
  function sha12(content) {
293346
293481
  return createHash19("sha1").update(content).digest("hex");
@@ -293653,17 +293788,17 @@ async function buildRepoIndex(options2) {
293653
293788
  const docs = { version: 1, builtAt: now5, docs: docEntries };
293654
293789
  const configs = { version: 1, builtAt: now5, configs: configEntries };
293655
293790
  mkdirSync13(repoIndexDir(options2.root), { recursive: true });
293656
- writeFileSync12(repoIndexPath(options2.root), `${JSON.stringify(repo, null, 2)}
293791
+ writeFileSync13(repoIndexPath(options2.root), `${JSON.stringify(repo, null, 2)}
293657
293792
  `);
293658
- writeFileSync12(symbolIndexPath(options2.root), `${JSON.stringify(symbols, null, 2)}
293793
+ writeFileSync13(symbolIndexPath(options2.root), `${JSON.stringify(symbols, null, 2)}
293659
293794
  `);
293660
- writeFileSync12(callIndexPath(options2.root), `${JSON.stringify(calls, null, 2)}
293795
+ writeFileSync13(callIndexPath(options2.root), `${JSON.stringify(calls, null, 2)}
293661
293796
  `);
293662
- writeFileSync12(testIndexPath(options2.root), `${JSON.stringify(tests, null, 2)}
293797
+ writeFileSync13(testIndexPath(options2.root), `${JSON.stringify(tests, null, 2)}
293663
293798
  `);
293664
- writeFileSync12(docIndexPath(options2.root), `${JSON.stringify(docs, null, 2)}
293799
+ writeFileSync13(docIndexPath(options2.root), `${JSON.stringify(docs, null, 2)}
293665
293800
  `);
293666
- writeFileSync12(configIndexPath(options2.root), `${JSON.stringify(configs, null, 2)}
293801
+ writeFileSync13(configIndexPath(options2.root), `${JSON.stringify(configs, null, 2)}
293667
293802
  `);
293668
293803
  return { repo, symbols, calls, tests, docs, configs };
293669
293804
  }
@@ -294084,7 +294219,7 @@ function normalizeQuestionOptionInput(value) {
294084
294219
  const option = objectValue3(value);
294085
294220
  if (!option)
294086
294221
  return value;
294087
- const label = typeof option.label === "string" && option.label.trim() ? option.label.trim() : typeof option.value === "string" && option.value.trim() ? option.value.trim() : "";
294222
+ const label = typeof option.label === "string" && option.label.trim() ? option.label.trim() : typeof option.value === "string" && option.value.trim() ? option.value.trim() : typeof option.description === "string" && option.description.trim() ? option.description.trim() : "";
294088
294223
  const description = typeof option.description === "string" && option.description.trim() ? option.description.trim() : label;
294089
294224
  if (!label || !description)
294090
294225
  return value;
@@ -294235,7 +294370,7 @@ var init_AskUserQuestionTool = __esm(() => {
294235
294370
  questionSchema = lazySchema(() => exports_external.object({
294236
294371
  question: exports_external.string().describe('The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"'),
294237
294372
  header: exports_external.string().describe(`Very short label displayed as a chip/tag (max ${ASK_USER_QUESTION_TOOL_CHIP_WIDTH} chars). Examples: "Auth method", "Library", "Approach".`),
294238
- options: exports_external.array(questionOptionSchema()).min(2).max(4).describe(`The available choices for this question. Must have 2-4 options. Each option should be a distinct, mutually exclusive choice (unless multiSelect is enabled). There should be no 'Other' option, that will be provided automatically.`),
294373
+ options: exports_external.array(questionOptionSchema()).min(2).max(8).describe(`The available choices for this question. Must have 2-8 options. Keep options concise and distinct; there should be no 'Other' option, that will be provided automatically.`),
294239
294374
  multiSelect: exports_external.boolean().default(false).describe("Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.")
294240
294375
  }));
294241
294376
  annotationsSchema = lazySchema(() => {
@@ -308375,7 +308510,7 @@ var init_rootcause = __esm(() => {
308375
308510
 
308376
308511
  // src/stability/ledger.ts
308377
308512
  import { appendFileSync as appendFileSync4, existsSync as existsSync17, mkdirSync as mkdirSync14, readFileSync as readFileSync23 } from "fs";
308378
- import { dirname as dirname40, join as join100 } from "path";
308513
+ import { dirname as dirname41, join as join100 } from "path";
308379
308514
  function ledgerPath(cwd2) {
308380
308515
  return join100(cwd2, ".ur", "actions.jsonl");
308381
308516
  }
@@ -308403,7 +308538,7 @@ function filesFromArgs(args) {
308403
308538
  function recordAction(cwd2, record3) {
308404
308539
  try {
308405
308540
  const file2 = ledgerPath(cwd2);
308406
- mkdirSync14(dirname40(file2), { recursive: true });
308541
+ mkdirSync14(dirname41(file2), { recursive: true });
308407
308542
  appendFileSync4(file2, JSON.stringify(record3) + `
308408
308543
  `);
308409
308544
  } catch {}
@@ -316078,7 +316213,7 @@ var init_toolSearch = __esm(() => {
316078
316213
  // src/services/vcr.ts
316079
316214
  import { createHash as createHash21, randomUUID as randomUUID24 } from "crypto";
316080
316215
  import { mkdir as mkdir23, readFile as readFile31, writeFile as writeFile24 } from "fs/promises";
316081
- import { dirname as dirname41, join as join103 } from "path";
316216
+ import { dirname as dirname42, join as join103 } from "path";
316082
316217
  function shouldUseVCR() {
316083
316218
  if (false) {}
316084
316219
  if (process.env.USER_TYPE === "ant" && isEnvTruthy(process.env.FORCE_VCR)) {
@@ -316105,7 +316240,7 @@ async function withFixture(input, fixtureName, f) {
316105
316240
  throw new Error(`Fixture missing: ${filename}. Re-run tests with VCR_RECORD=1, then commit the result.`);
316106
316241
  }
316107
316242
  const result = await f();
316108
- await mkdir23(dirname41(filename), { recursive: true });
316243
+ await mkdir23(dirname42(filename), { recursive: true });
316109
316244
  await writeFile24(filename, jsonStringify(result, null, 2), {
316110
316245
  encoding: "utf8"
316111
316246
  });
@@ -316144,7 +316279,7 @@ ${jsonStringify(dehydratedInput, null, 2)}`);
316144
316279
  if (env2.isCI && !isEnvTruthy(process.env.VCR_RECORD)) {
316145
316280
  return results;
316146
316281
  }
316147
- await mkdir23(dirname41(filename), { recursive: true });
316282
+ await mkdir23(dirname42(filename), { recursive: true });
316148
316283
  await writeFile24(filename, jsonStringify({
316149
316284
  input: dehydratedInput,
316150
316285
  output: results.map((message, index2) => mapMessage(message, dehydrateValue, index2))
@@ -318218,7 +318353,7 @@ var init_findRelevantMemories = __esm(() => {
318218
318353
 
318219
318354
  // src/utils/attachments.ts
318220
318355
  import { readdir as readdir18, stat as stat32 } from "fs/promises";
318221
- import { dirname as dirname42, parse as parse12, relative as relative23, resolve as resolve33 } from "path";
318356
+ import { dirname as dirname43, parse as parse12, relative as relative23, resolve as resolve33 } from "path";
318222
318357
  import { randomUUID as randomUUID26 } from "crypto";
318223
318358
  async function getAttachments(input, toolUseContext, ideSelection, queuedCommands, messages, querySource, options2) {
318224
318359
  if (isEnvTruthy(process.env.UR_CODE_DISABLE_ATTACHMENTS) || isEnvTruthy(process.env.UR_CODE_SIMPLE)) {
@@ -318594,21 +318729,21 @@ async function getSelectedLinesFromIDE(ideSelection, toolUseContext) {
318594
318729
  ];
318595
318730
  }
318596
318731
  function getDirectoriesToProcess(targetPath, originalCwd) {
318597
- const targetDir = dirname42(resolve33(targetPath));
318732
+ const targetDir = dirname43(resolve33(targetPath));
318598
318733
  const nestedDirs = [];
318599
318734
  let currentDir = targetDir;
318600
318735
  while (currentDir !== originalCwd && currentDir !== parse12(currentDir).root) {
318601
318736
  if (currentDir.startsWith(originalCwd)) {
318602
318737
  nestedDirs.push(currentDir);
318603
318738
  }
318604
- currentDir = dirname42(currentDir);
318739
+ currentDir = dirname43(currentDir);
318605
318740
  }
318606
318741
  nestedDirs.reverse();
318607
318742
  const cwdLevelDirs = [];
318608
318743
  currentDir = originalCwd;
318609
318744
  while (currentDir !== parse12(currentDir).root) {
318610
318745
  cwdLevelDirs.push(currentDir);
318611
- currentDir = dirname42(currentDir);
318746
+ currentDir = dirname43(currentDir);
318612
318747
  }
318613
318748
  cwdLevelDirs.reverse();
318614
318749
  return { nestedDirs, cwdLevelDirs };
@@ -319854,21 +319989,21 @@ var init_attachments2 = __esm(() => {
319854
319989
  });
319855
319990
 
319856
319991
  // src/utils/plugins/loadPluginCommands.ts
319857
- import { basename as basename28, dirname as dirname43, join as join106 } from "path";
319992
+ import { basename as basename28, dirname as dirname44, join as join106 } from "path";
319858
319993
  function isSkillFile2(filePath) {
319859
319994
  return /^skill\.md$/i.test(basename28(filePath));
319860
319995
  }
319861
319996
  function getCommandNameFromFile(filePath, baseDir, pluginName) {
319862
319997
  const isSkill = isSkillFile2(filePath);
319863
319998
  if (isSkill) {
319864
- const skillDirectory = dirname43(filePath);
319865
- const parentOfSkillDir = dirname43(skillDirectory);
319999
+ const skillDirectory = dirname44(filePath);
320000
+ const parentOfSkillDir = dirname44(skillDirectory);
319866
320001
  const commandBaseName = basename28(skillDirectory);
319867
320002
  const relativePath = parentOfSkillDir.startsWith(baseDir) ? parentOfSkillDir.slice(baseDir.length).replace(/^\//, "") : "";
319868
320003
  const namespace = relativePath ? relativePath.split("/").join(":") : "";
319869
320004
  return namespace ? `${pluginName}:${namespace}:${commandBaseName}` : `${pluginName}:${commandBaseName}`;
319870
320005
  } else {
319871
- const fileDirectory = dirname43(filePath);
320006
+ const fileDirectory = dirname44(filePath);
319872
320007
  const commandBaseName = basename28(filePath).replace(/\.md$/, "");
319873
320008
  const relativePath = fileDirectory.startsWith(baseDir) ? fileDirectory.slice(baseDir.length).replace(/^\//, "") : "";
319874
320009
  const namespace = relativePath ? relativePath.split("/").join(":") : "";
@@ -319895,7 +320030,7 @@ async function collectMarkdownFiles(dirPath, baseDir, loadedPaths) {
319895
320030
  function transformPluginSkillFiles(files) {
319896
320031
  const filesByDir = new Map;
319897
320032
  for (const file2 of files) {
319898
- const dir = dirname43(file2.filePath);
320033
+ const dir = dirname44(file2.filePath);
319899
320034
  const dirFiles = filesByDir.get(dir) ?? [];
319900
320035
  dirFiles.push(file2);
319901
320036
  filesByDir.set(dir, dirFiles);
@@ -319984,7 +320119,7 @@ function createPluginCommand(commandName, file2, sourceName, pluginManifest, plu
319984
320119
  return displayName || commandName;
319985
320120
  },
319986
320121
  async getPromptForCommand(args, context3) {
319987
- let finalContent = config2.isSkillMode ? `Base directory for this skill: ${dirname43(file2.filePath)}
320122
+ let finalContent = config2.isSkillMode ? `Base directory for this skill: ${dirname44(file2.filePath)}
319988
320123
 
319989
320124
  ${content}` : content;
319990
320125
  finalContent = substituteArguments(finalContent, args, true, argumentNames);
@@ -319996,7 +320131,7 @@ ${content}` : content;
319996
320131
  finalContent = substituteUserConfigInContent(finalContent, loadPluginOptions(sourceName), pluginManifest.userConfig);
319997
320132
  }
319998
320133
  if (config2.isSkillMode) {
319999
- const rawSkillDir = dirname43(file2.filePath);
320134
+ const rawSkillDir = dirname44(file2.filePath);
320000
320135
  const skillDir = process.platform === "win32" ? rawSkillDir.replace(/\\/g, "/") : rawSkillDir;
320001
320136
  finalContent = finalContent.replace(/\$\{UR_SKILL_DIR\}/g, skillDir);
320002
320137
  }
@@ -320056,7 +320191,7 @@ async function loadSkillsFromDirectory(skillsPath, pluginName, sourceName, plugi
320056
320191
  const skillName = `${pluginName}:${basename28(skillsPath)}`;
320057
320192
  const file2 = {
320058
320193
  filePath: directSkillPath,
320059
- baseDir: dirname43(directSkillPath),
320194
+ baseDir: dirname44(directSkillPath),
320060
320195
  frontmatter,
320061
320196
  content: markdownContent
320062
320197
  };
@@ -320105,7 +320240,7 @@ async function loadSkillsFromDirectory(skillsPath, pluginName, sourceName, plugi
320105
320240
  const skillName = `${pluginName}:${entry.name}`;
320106
320241
  const file2 = {
320107
320242
  filePath: skillFilePath,
320108
- baseDir: dirname43(skillFilePath),
320243
+ baseDir: dirname44(skillFilePath),
320109
320244
  frontmatter,
320110
320245
  content: markdownContent
320111
320246
  };
@@ -320218,7 +320353,7 @@ var init_loadPluginCommands = __esm(() => {
320218
320353
  } : frontmatter;
320219
320354
  const file2 = {
320220
320355
  filePath: commandPath,
320221
- baseDir: dirname43(commandPath),
320356
+ baseDir: dirname44(commandPath),
320222
320357
  frontmatter: finalFrontmatter,
320223
320358
  content: markdownContent
320224
320359
  };
@@ -320481,7 +320616,7 @@ import {
320481
320616
  writeFile as writeFile25
320482
320617
  } from "fs/promises";
320483
320618
  import { tmpdir as tmpdir8 } from "os";
320484
- import { basename as basename30, dirname as dirname45, join as join108 } from "path";
320619
+ import { basename as basename30, dirname as dirname46, join as join108 } from "path";
320485
320620
  function isPluginZipCacheEnabled() {
320486
320621
  return isEnvTruthy(process.env.UR_CODE_PLUGIN_USE_ZIP_CACHE);
320487
320622
  }
@@ -320544,7 +320679,7 @@ async function cleanupSessionPluginCache() {
320544
320679
  }
320545
320680
  }
320546
320681
  async function atomicWriteToZipCache(targetPath, data) {
320547
- const dir = dirname45(targetPath);
320682
+ const dir = dirname46(targetPath);
320548
320683
  await getFsImplementation().mkdir(dir);
320549
320684
  const tmpName = `.${basename30(targetPath)}.tmp.${randomBytes11(4).toString("hex")}`;
320550
320685
  const tmpPath = join108(dir, tmpName);
@@ -320641,7 +320776,7 @@ async function extractZipToDirectory(zipPath, targetDir) {
320641
320776
  continue;
320642
320777
  }
320643
320778
  const fullPath = join108(targetDir, relPath);
320644
- await getFsImplementation().mkdir(dirname45(fullPath));
320779
+ await getFsImplementation().mkdir(dirname46(fullPath));
320645
320780
  await writeFile25(fullPath, data);
320646
320781
  const mode = modes[relPath];
320647
320782
  if (mode && mode & 73) {
@@ -321137,7 +321272,7 @@ var init_marketplaceHelpers = __esm(() => {
321137
321272
 
321138
321273
  // src/utils/plugins/officialMarketplaceGcs.ts
321139
321274
  import { chmod as chmod9, mkdir as mkdir25, readFile as readFile34, rename as rename4, rm as rm7, writeFile as writeFile27 } from "fs/promises";
321140
- import { dirname as dirname46, join as join110, resolve as resolve34, sep as sep22 } from "path";
321275
+ import { dirname as dirname47, join as join110, resolve as resolve34, sep as sep22 } from "path";
321141
321276
  async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCacheDir) {
321142
321277
  if (!GCS_BASE) {
321143
321278
  return null;
@@ -321187,7 +321322,7 @@ async function fetchOfficialMarketplaceFromGcs(installLocation, marketplacesCach
321187
321322
  if (!rel || rel.endsWith("/"))
321188
321323
  continue;
321189
321324
  const dest = join110(staging, rel);
321190
- await mkdir25(dirname46(dest), { recursive: true });
321325
+ await mkdir25(dirname47(dest), { recursive: true });
321191
321326
  await writeFile27(dest, data);
321192
321327
  const mode = modes[arcPath];
321193
321328
  if (mode && mode & 73) {
@@ -321266,7 +321401,7 @@ var init_officialMarketplaceGcs = __esm(() => {
321266
321401
 
321267
321402
  // src/utils/plugins/marketplaceManager.ts
321268
321403
  import { writeFile as writeFile28 } from "fs/promises";
321269
- import { basename as basename31, dirname as dirname47, isAbsolute as isAbsolute25, join as join111, resolve as resolve35, sep as sep23 } from "path";
321404
+ import { basename as basename31, dirname as dirname48, isAbsolute as isAbsolute25, join as join111, resolve as resolve35, sep as sep23 } from "path";
321270
321405
  function getKnownMarketplacesFile() {
321271
321406
  return join111(getPluginsDirectory(), "known_marketplaces.json");
321272
321407
  }
@@ -321946,7 +322081,7 @@ async function loadAndCacheMarketplace(source, onProgress) {
321946
322081
  case "file": {
321947
322082
  const absPath = resolve35(source.path);
321948
322083
  marketplacePath = absPath;
321949
- temporaryCachePath = dirname47(dirname47(absPath));
322084
+ temporaryCachePath = dirname48(dirname48(absPath));
321950
322085
  cleanupNeeded = false;
321951
322086
  break;
321952
322087
  }
@@ -321961,7 +322096,7 @@ async function loadAndCacheMarketplace(source, onProgress) {
321961
322096
  temporaryCachePath = join111(cacheDir, source.name);
321962
322097
  marketplacePath = join111(temporaryCachePath, ".ur-plugin", "marketplace.json");
321963
322098
  cleanupNeeded = false;
321964
- await fs4.mkdir(dirname47(marketplacePath));
322099
+ await fs4.mkdir(dirname48(marketplacePath));
321965
322100
  await writeFile28(marketplacePath, jsonStringify({
321966
322101
  name: source.name,
321967
322102
  owner: source.owner ?? { name: "settings" },
@@ -322456,7 +322591,7 @@ var init_marketplaceManager = __esm(() => {
322456
322591
  });
322457
322592
 
322458
322593
  // src/utils/plugins/installedPluginsManager.ts
322459
- import { dirname as dirname48, join as join112 } from "path";
322594
+ import { dirname as dirname49, join as join112 } from "path";
322460
322595
  function getInstalledPluginsFilePath() {
322461
322596
  return join112(getPluginsDirectory(), "installed_plugins.json");
322462
322597
  }
@@ -323022,7 +323157,7 @@ var init_pluginVersioning = __esm(() => {
323022
323157
  // src/utils/plugins/pluginInstallationHelpers.ts
323023
323158
  import { randomBytes as randomBytes12 } from "crypto";
323024
323159
  import { rename as rename5, rm as rm8 } from "fs/promises";
323025
- import { dirname as dirname49, join as join113, resolve as resolve36, sep as sep24 } from "path";
323160
+ import { dirname as dirname50, join as join113, resolve as resolve36, sep as sep24 } from "path";
323026
323161
  function getCurrentTimestamp() {
323027
323162
  return new Date().toISOString();
323028
323163
  }
@@ -323046,14 +323181,14 @@ async function cacheAndRegisterPlugin(pluginId, entry, scope = "user", projectPa
323046
323181
  const versionedPath = getVersionedCachePath(pluginId, version2);
323047
323182
  let finalPath = cacheResult.path;
323048
323183
  if (cacheResult.path !== versionedPath) {
323049
- await getFsImplementation().mkdir(dirname49(versionedPath));
323184
+ await getFsImplementation().mkdir(dirname50(versionedPath));
323050
323185
  await rm8(versionedPath, { recursive: true, force: true });
323051
323186
  const normalizedCachePath = cacheResult.path.endsWith(sep24) ? cacheResult.path : cacheResult.path + sep24;
323052
323187
  const isSubdirectory = versionedPath.startsWith(normalizedCachePath);
323053
323188
  if (isSubdirectory) {
323054
- const tempPath = join113(dirname49(cacheResult.path), `.ur-plugin-temp-${Date.now()}-${randomBytes12(4).toString("hex")}`);
323189
+ const tempPath = join113(dirname50(cacheResult.path), `.ur-plugin-temp-${Date.now()}-${randomBytes12(4).toString("hex")}`);
323055
323190
  await rename5(cacheResult.path, tempPath);
323056
- await getFsImplementation().mkdir(dirname49(versionedPath));
323191
+ await getFsImplementation().mkdir(dirname50(versionedPath));
323057
323192
  await rename5(tempPath, versionedPath);
323058
323193
  } else {
323059
323194
  await rename5(cacheResult.path, versionedPath);
@@ -323282,7 +323417,7 @@ import {
323282
323417
  stat as stat35,
323283
323418
  symlink as symlink3
323284
323419
  } from "fs/promises";
323285
- import { basename as basename32, dirname as dirname50, join as join114, relative as relative24, resolve as resolve37, sep as sep25 } from "path";
323420
+ import { basename as basename32, dirname as dirname51, join as join114, relative as relative24, resolve as resolve37, sep as sep25 } from "path";
323286
323421
  function getPluginCachePath() {
323287
323422
  return join114(getPluginsDirectory(), "cache");
323288
323423
  }
@@ -323312,7 +323447,7 @@ async function probeSeedCache(pluginId, version2) {
323312
323447
  }
323313
323448
  async function probeSeedCacheAnyVersion(pluginId) {
323314
323449
  for (const seedDir of getPluginSeedDirs()) {
323315
- const pluginDir = dirname50(getVersionedCachePathIn(seedDir, pluginId, "_"));
323450
+ const pluginDir = dirname51(getVersionedCachePathIn(seedDir, pluginId, "_"));
323316
323451
  try {
323317
323452
  const versions2 = await readdir21(pluginDir);
323318
323453
  if (versions2.length !== 1)
@@ -323354,7 +323489,7 @@ async function copyDir(src, dest) {
323354
323489
  if (resolvedTarget.startsWith(srcPrefix) || resolvedTarget === resolvedSrc) {
323355
323490
  const targetRelativeToSrc = relative24(resolvedSrc, resolvedTarget);
323356
323491
  const destTargetPath = join114(dest, targetRelativeToSrc);
323357
- const relativeLinkPath = relative24(dirname50(destPath), destTargetPath);
323492
+ const relativeLinkPath = relative24(dirname51(destPath), destTargetPath);
323358
323493
  await symlink3(relativeLinkPath, destPath);
323359
323494
  } else {
323360
323495
  await symlink3(resolvedTarget, destPath);
@@ -323385,7 +323520,7 @@ async function copyPluginToVersionedCache(sourcePath, pluginId, version2, entry,
323385
323520
  logForDebugging(`Using seed cache for ${pluginId}@${version2} at ${seedPath}`);
323386
323521
  return seedPath;
323387
323522
  }
323388
- await getFsImplementation().mkdir(dirname50(cachePath));
323523
+ await getFsImplementation().mkdir(dirname51(cachePath));
323389
323524
  if (entry && typeof entry.source === "string" && marketplaceDir) {
323390
323525
  const sourceDir = validatePathWithinBase(marketplaceDir, entry.source);
323391
323526
  logForDebugging(`Copying source directory ${entry.source} for plugin ${pluginId}`);
@@ -331683,7 +331818,7 @@ __export(exports_terminalSetup, {
331683
331818
  import { randomBytes as randomBytes14 } from "crypto";
331684
331819
  import { copyFile as copyFile8, mkdir as mkdir26, readFile as readFile36, writeFile as writeFile29 } from "fs/promises";
331685
331820
  import { homedir as homedir25, platform as platform4 } from "os";
331686
- import { dirname as dirname51, join as join117 } from "path";
331821
+ import { dirname as dirname52, join as join117 } from "path";
331687
331822
  import { pathToFileURL as pathToFileURL7 } from "url";
331688
331823
  function isVSCodeRemoteSSH() {
331689
331824
  const askpassMain = process.env.VSCODE_GIT_ASKPASS_MAIN ?? "";
@@ -332005,7 +332140,7 @@ chars = "\\u001B\\r"`;
332005
332140
  return `${color("warning", theme)("Error backing up existing Alacritty config. Bailing out.")}${EOL5}${source_default.dim(`See ${formatPathLink(configPath)}`)}${EOL5}${source_default.dim(`Backup path: ${formatPathLink(backupPath)}`)}${EOL5}`;
332006
332141
  }
332007
332142
  } else {
332008
- await mkdir26(dirname51(configPath), {
332143
+ await mkdir26(dirname52(configPath), {
332009
332144
  recursive: true
332010
332145
  });
332011
332146
  }
@@ -334448,7 +334583,7 @@ var init_TextInput = __esm(() => {
334448
334583
  });
334449
334584
 
334450
334585
  // src/utils/suggestions/directoryCompletion.ts
334451
- import { basename as basename36, dirname as dirname52, join as join120, sep as sep26 } from "path";
334586
+ import { basename as basename36, dirname as dirname53, join as join120, sep as sep26 } from "path";
334452
334587
  function parsePartialPath(partialPath, basePath) {
334453
334588
  if (!partialPath) {
334454
334589
  const directory2 = basePath || getCwd2();
@@ -334458,7 +334593,7 @@ function parsePartialPath(partialPath, basePath) {
334458
334593
  if (partialPath.endsWith("/") || partialPath.endsWith(sep26)) {
334459
334594
  return { directory: resolved, prefix: "" };
334460
334595
  }
334461
- const directory = dirname52(resolved);
334596
+ const directory = dirname53(resolved);
334462
334597
  const prefix = basename36(partialPath);
334463
334598
  return { directory, prefix };
334464
334599
  }
@@ -336133,7 +336268,7 @@ function Feedback({
336133
336268
  platform: env2.platform,
336134
336269
  gitRepo: envInfo.isGit,
336135
336270
  terminal: env2.terminal,
336136
- version: "1.24.1",
336271
+ version: "1.25.1",
336137
336272
  transcript: normalizeMessagesForAPI(messages),
336138
336273
  errors: sanitizedErrors,
336139
336274
  lastApiRequest: getLastAPIRequest(),
@@ -336325,7 +336460,7 @@ function Feedback({
336325
336460
  ", ",
336326
336461
  env2.terminal,
336327
336462
  ", v",
336328
- "1.24.1"
336463
+ "1.25.1"
336329
336464
  ]
336330
336465
  }, undefined, true, undefined, this)
336331
336466
  ]
@@ -336431,7 +336566,7 @@ ${sanitizedDescription}
336431
336566
  ` + `**Environment Info**
336432
336567
  ` + `- Platform: ${env2.platform}
336433
336568
  ` + `- Terminal: ${env2.terminal}
336434
- ` + `- Version: ${"1.24.1"}
336569
+ ` + `- Version: ${"1.25.1"}
336435
336570
  ` + `- Feedback ID: ${feedbackId}
336436
336571
  ` + `
336437
336572
  **Errors**
@@ -339542,7 +339677,7 @@ function buildPrimarySection() {
339542
339677
  }, undefined, false, undefined, this);
339543
339678
  return [{
339544
339679
  label: "Version",
339545
- value: "1.24.1"
339680
+ value: "1.25.1"
339546
339681
  }, {
339547
339682
  label: "Session name",
339548
339683
  value: nameValue
@@ -342820,7 +342955,7 @@ function Config({
342820
342955
  }
342821
342956
  }, undefined, false, undefined, this)
342822
342957
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime177.jsxDEV(ChannelDowngradeDialog, {
342823
- currentVersion: "1.24.1",
342958
+ currentVersion: "1.25.1",
342824
342959
  onChoice: (choice) => {
342825
342960
  setShowSubmenu(null);
342826
342961
  setTabsHidden(false);
@@ -342832,7 +342967,7 @@ function Config({
342832
342967
  autoUpdatesChannel: "stable"
342833
342968
  };
342834
342969
  if (choice === "stay") {
342835
- newSettings.minimumVersion = "1.24.1";
342970
+ newSettings.minimumVersion = "1.25.1";
342836
342971
  }
342837
342972
  updateSettingsForSource("userSettings", newSettings);
342838
342973
  setSettingsData((prev_27) => ({
@@ -350902,7 +351037,7 @@ function HelpV2(t0) {
350902
351037
  let t6;
350903
351038
  if ($3[31] !== tabs) {
350904
351039
  t6 = /* @__PURE__ */ jsx_dev_runtime204.jsxDEV(Tabs, {
350905
- title: `UR v${"1.24.1"}`,
351040
+ title: `UR v${"1.25.1"}`,
350906
351041
  color: "professionalBlue",
350907
351042
  defaultTab: "general",
350908
351043
  children: tabs
@@ -351216,7 +351351,7 @@ var init_IdeAutoConnectDialog = __esm(() => {
351216
351351
  });
351217
351352
 
351218
351353
  // src/services/agents/ideDiffs.ts
351219
- import { existsSync as existsSync18, mkdirSync as mkdirSync15, readFileSync as readFileSync24, rmSync as rmSync3, writeFileSync as writeFileSync13 } from "fs";
351354
+ import { existsSync as existsSync18, mkdirSync as mkdirSync15, readFileSync as readFileSync24, rmSync as rmSync3, writeFileSync as writeFileSync14 } from "fs";
351220
351355
  import { join as join127 } from "path";
351221
351356
  function ideDir(cwd2) {
351222
351357
  return join127(cwd2, ".ur", "ide");
@@ -351249,7 +351384,7 @@ function loadManifest2(cwd2) {
351249
351384
  }
351250
351385
  function saveManifest2(cwd2, manifest) {
351251
351386
  ensureDirs2(cwd2);
351252
- writeFileSync13(manifestPath3(cwd2), `${JSON.stringify(manifest, null, 2)}
351387
+ writeFileSync14(manifestPath3(cwd2), `${JSON.stringify(manifest, null, 2)}
351253
351388
  `);
351254
351389
  }
351255
351390
  function nextId(manifest) {
@@ -351344,8 +351479,8 @@ async function createIdeDiffBundle(cwd2, options2 = {}) {
351344
351479
  createdAt,
351345
351480
  updatedAt: createdAt
351346
351481
  };
351347
- writeFileSync13(join127(ideDiffsDir(cwd2), patchFile), captured.diff);
351348
- writeFileSync13(join127(ideDiffsDir(cwd2), metadataFile), `${JSON.stringify(bundle, null, 2)}
351482
+ writeFileSync14(join127(ideDiffsDir(cwd2), patchFile), captured.diff);
351483
+ writeFileSync14(join127(ideDiffsDir(cwd2), metadataFile), `${JSON.stringify(bundle, null, 2)}
351349
351484
  `);
351350
351485
  manifest.diffs.push(bundle);
351351
351486
  saveManifest2(cwd2, manifest);
@@ -351372,7 +351507,7 @@ function mutate(cwd2, id, fn) {
351372
351507
  fn(bundle);
351373
351508
  bundle.updatedAt = now5();
351374
351509
  ensureDirs2(cwd2);
351375
- writeFileSync13(join127(ideDiffsDir(cwd2), bundle.metadataFile), `${JSON.stringify(bundle, null, 2)}
351510
+ writeFileSync14(join127(ideDiffsDir(cwd2), bundle.metadataFile), `${JSON.stringify(bundle, null, 2)}
351376
351511
  `);
351377
351512
  saveManifest2(cwd2, manifest);
351378
351513
  return bundle;
@@ -352647,7 +352782,7 @@ __export(exports_keybindings, {
352647
352782
  call: () => call24
352648
352783
  });
352649
352784
  import { mkdir as mkdir31, writeFile as writeFile34 } from "fs/promises";
352650
- import { dirname as dirname54 } from "path";
352785
+ import { dirname as dirname55 } from "path";
352651
352786
  async function call24() {
352652
352787
  if (!isKeybindingCustomizationEnabled()) {
352653
352788
  return {
@@ -352657,7 +352792,7 @@ async function call24() {
352657
352792
  }
352658
352793
  const keybindingsPath = getKeybindingsPath();
352659
352794
  let fileExists = false;
352660
- await mkdir31(dirname54(keybindingsPath), { recursive: true });
352795
+ await mkdir31(dirname55(keybindingsPath), { recursive: true });
352661
352796
  try {
352662
352797
  await writeFile34(keybindingsPath, generateKeybindingsTemplate(), {
352663
352798
  encoding: "utf-8",
@@ -363569,7 +363704,7 @@ var init_DiscoverPlugins = __esm(() => {
363569
363704
  });
363570
363705
 
363571
363706
  // src/services/plugins/pluginOperations.ts
363572
- import { dirname as dirname55, join as join130 } from "path";
363707
+ import { dirname as dirname56, join as join130 } from "path";
363573
363708
  function assertInstallableScope(scope) {
363574
363709
  if (!VALID_INSTALLABLE_SCOPES.includes(scope)) {
363575
363710
  throw new Error(`Invalid scope "${scope}". Must be one of: ${VALID_INSTALLABLE_SCOPES.join(", ")}`);
@@ -364046,7 +364181,7 @@ async function performPluginUpdate({
364046
364181
  }
364047
364182
  throw e;
364048
364183
  }
364049
- const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation : dirname55(marketplaceInstallLocation);
364184
+ const marketplaceDir = marketplaceStats.isDirectory() ? marketplaceInstallLocation : dirname56(marketplaceInstallLocation);
364050
364185
  sourcePath = join130(marketplaceDir, entry.source);
364051
364186
  try {
364052
364187
  await fs4.stat(sourcePath);
@@ -370884,7 +371019,7 @@ ${args ? "Additional user input: " + args : ""}
370884
371019
 
370885
371020
  // src/utils/releaseNotes.ts
370886
371021
  import { mkdir as mkdir32, readFile as readFile43, writeFile as writeFile37 } from "fs/promises";
370887
- import { dirname as dirname57, join as join134 } from "path";
371022
+ import { dirname as dirname58, join as join134 } from "path";
370888
371023
  function getChangelogCachePath() {
370889
371024
  return join134(getURConfigHomeDir(), "cache", "changelog.md");
370890
371025
  }
@@ -370895,7 +371030,7 @@ async function migrateChangelogFromConfig() {
370895
371030
  }
370896
371031
  const cachePath = getChangelogCachePath();
370897
371032
  try {
370898
- await mkdir32(dirname57(cachePath), { recursive: true });
371033
+ await mkdir32(dirname58(cachePath), { recursive: true });
370899
371034
  await writeFile37(cachePath, config3.cachedChangelog, {
370900
371035
  encoding: "utf-8",
370901
371036
  flag: "wx"
@@ -370917,7 +371052,7 @@ async function fetchAndStoreChangelog() {
370917
371052
  return;
370918
371053
  }
370919
371054
  const cachePath = getChangelogCachePath();
370920
- await mkdir32(dirname57(cachePath), { recursive: true });
371055
+ await mkdir32(dirname58(cachePath), { recursive: true });
370921
371056
  await writeFile37(cachePath, changelogContent, { encoding: "utf-8" });
370922
371057
  changelogMemoryCache = changelogContent;
370923
371058
  const changelogLastFetched = Date.now();
@@ -371004,7 +371139,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
371004
371139
  return [];
371005
371140
  }
371006
371141
  }
371007
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.24.1") {
371142
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.25.1") {
371008
371143
  if (process.env.USER_TYPE === "ant") {
371009
371144
  const changelog = "";
371010
371145
  if (changelog) {
@@ -371031,7 +371166,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.24.1")
371031
371166
  releaseNotes
371032
371167
  };
371033
371168
  }
371034
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.24.1") {
371169
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.25.1") {
371035
371170
  if (process.env.USER_TYPE === "ant") {
371036
371171
  const changelog = "";
371037
371172
  if (changelog) {
@@ -372201,7 +372336,7 @@ function getRecentActivitySync() {
372201
372336
  return cachedActivity;
372202
372337
  }
372203
372338
  function getLogoDisplayData() {
372204
- const version2 = process.env.DEMO_VERSION ?? "1.24.1";
372339
+ const version2 = process.env.DEMO_VERSION ?? "1.25.1";
372205
372340
  const serverUrl = getDirectConnectServerUrl();
372206
372341
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd2());
372207
372342
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -372990,7 +373125,7 @@ function LogoV2() {
372990
373125
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
372991
373126
  t2 = () => {
372992
373127
  const currentConfig = getGlobalConfig();
372993
- if (currentConfig.lastReleaseNotesSeen === "1.24.1") {
373128
+ if (currentConfig.lastReleaseNotesSeen === "1.25.1") {
372994
373129
  return;
372995
373130
  }
372996
373131
  saveGlobalConfig(_temp326);
@@ -373675,12 +373810,12 @@ function LogoV2() {
373675
373810
  return t41;
373676
373811
  }
373677
373812
  function _temp326(current) {
373678
- if (current.lastReleaseNotesSeen === "1.24.1") {
373813
+ if (current.lastReleaseNotesSeen === "1.25.1") {
373679
373814
  return current;
373680
373815
  }
373681
373816
  return {
373682
373817
  ...current,
373683
- lastReleaseNotesSeen: "1.24.1"
373818
+ lastReleaseNotesSeen: "1.25.1"
373684
373819
  };
373685
373820
  }
373686
373821
  function _temp243(s_0) {
@@ -387066,7 +387201,7 @@ var init_attackSurface = __esm(() => {
387066
387201
 
387067
387202
  // src/security/findings.ts
387068
387203
  import * as fs7 from "fs";
387069
- import { dirname as dirname58, join as join138 } from "path";
387204
+ import { dirname as dirname59, join as join138 } from "path";
387070
387205
  function severityRank(s) {
387071
387206
  return ORDER.indexOf(s);
387072
387207
  }
@@ -387084,7 +387219,7 @@ class FindingStore {
387084
387219
  }
387085
387220
  }
387086
387221
  persist() {
387087
- fs7.mkdirSync(dirname58(this.file), { recursive: true });
387222
+ fs7.mkdirSync(dirname59(this.file), { recursive: true });
387088
387223
  fs7.writeFileSync(this.file, JSON.stringify(this.findings, null, 2));
387089
387224
  }
387090
387225
  add(items) {
@@ -388680,18 +388815,18 @@ var init_actions2 = __esm(() => {
388680
388815
  });
388681
388816
 
388682
388817
  // src/services/agents/featureScaffolds.ts
388683
- import { existsSync as existsSync21, mkdirSync as mkdirSync20, writeFileSync as writeFileSync18 } from "fs";
388684
- import { dirname as dirname59, join as join143 } from "path";
388818
+ import { existsSync as existsSync21, mkdirSync as mkdirSync20, writeFileSync as writeFileSync19 } from "fs";
388819
+ import { dirname as dirname60, join as join143 } from "path";
388685
388820
  function writeSeedFile(root2, file2, result, force) {
388686
- const baseRoot = file2.root === "project" ? dirname59(root2) : root2;
388821
+ const baseRoot = file2.root === "project" ? dirname60(root2) : root2;
388687
388822
  const fullPath = join143(baseRoot, file2.path);
388688
388823
  const displayPath = file2.path;
388689
- mkdirSync20(dirname59(fullPath), { recursive: true });
388824
+ mkdirSync20(dirname60(fullPath), { recursive: true });
388690
388825
  if (!force && existsSync21(fullPath)) {
388691
388826
  result.skipped.push(displayPath);
388692
388827
  return;
388693
388828
  }
388694
- writeFileSync18(fullPath, file2.content);
388829
+ writeFileSync19(fullPath, file2.content);
388695
388830
  result.created.push(displayPath);
388696
388831
  }
388697
388832
  function renderAgentTemplate(template) {
@@ -389686,7 +389821,7 @@ import {
389686
389821
  mkdirSync as mkdirSync21,
389687
389822
  readFileSync as readFileSync31,
389688
389823
  readdirSync as readdirSync8,
389689
- writeFileSync as writeFileSync19
389824
+ writeFileSync as writeFileSync20
389690
389825
  } from "fs";
389691
389826
  import { join as join144 } from "path";
389692
389827
  function detectPii(text, kinds = "all") {
@@ -389909,7 +390044,7 @@ function scaffoldGuardrails(cwd2, options2 = {}) {
389909
390044
  const path22 = join144(dir, "default.json");
389910
390045
  if (existsSync22(path22) && options2.force !== true)
389911
390046
  return { path: path22, created: false };
389912
- writeFileSync19(path22, `${JSON.stringify(defaultGuardrails(), null, 2)}
390047
+ writeFileSync20(path22, `${JSON.stringify(defaultGuardrails(), null, 2)}
389913
390048
  `);
389914
390049
  return { path: path22, created: true };
389915
390050
  }
@@ -390669,7 +390804,7 @@ function buildToolUseContext(tools, readFileStateCache) {
390669
390804
  async function handleInitialize() {
390670
390805
  return {
390671
390806
  name: "ur-agent",
390672
- version: "1.24.1",
390807
+ version: "1.25.1",
390673
390808
  protocolVersion: "0.1.0"
390674
390809
  };
390675
390810
  }
@@ -391082,7 +391217,7 @@ var init_acp2 = __esm(() => {
391082
391217
 
391083
391218
  // src/services/agents/scheduler.ts
391084
391219
  import { createHash as createHash24 } from "crypto";
391085
- import { existsSync as existsSync23, mkdirSync as mkdirSync22, unlinkSync as unlinkSync3, writeFileSync as writeFileSync20 } from "fs";
391220
+ import { existsSync as existsSync23, mkdirSync as mkdirSync22, unlinkSync as unlinkSync3, writeFileSync as writeFileSync21 } from "fs";
391086
391221
  import { homedir as homedir28 } from "os";
391087
391222
  import { join as join145 } from "path";
391088
391223
  function defaultBin() {
@@ -391113,7 +391248,7 @@ function buildLaunchdPlist(config3) {
391113
391248
  const label = schedulerLabel(config3.cwd);
391114
391249
  const interval = config3.intervalSec ?? 60;
391115
391250
  const args = runDueArgs(config3);
391116
- const programArgs = args.map((arg) => ` <string>${escapeXml2(arg)}</string>`).join(`
391251
+ const programArgs = args.map((arg) => ` <string>${escapeXml3(arg)}</string>`).join(`
391117
391252
  `);
391118
391253
  const logPath = join145(config3.cwd, ".ur", "automations", "scheduler.log");
391119
391254
  return `<?xml version="1.0" encoding="UTF-8"?>
@@ -391127,20 +391262,20 @@ function buildLaunchdPlist(config3) {
391127
391262
  ${programArgs}
391128
391263
  </array>
391129
391264
  <key>WorkingDirectory</key>
391130
- <string>${escapeXml2(config3.cwd)}</string>
391265
+ <string>${escapeXml3(config3.cwd)}</string>
391131
391266
  <key>StartInterval</key>
391132
391267
  <integer>${interval}</integer>
391133
391268
  <key>RunAtLoad</key>
391134
391269
  <true/>
391135
391270
  <key>StandardOutPath</key>
391136
- <string>${escapeXml2(logPath)}</string>
391271
+ <string>${escapeXml3(logPath)}</string>
391137
391272
  <key>StandardErrorPath</key>
391138
- <string>${escapeXml2(logPath)}</string>
391273
+ <string>${escapeXml3(logPath)}</string>
391139
391274
  </dict>
391140
391275
  </plist>
391141
391276
  `;
391142
391277
  }
391143
- function escapeXml2(value) {
391278
+ function escapeXml3(value) {
391144
391279
  return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
391145
391280
  }
391146
391281
  function systemdUnitDir() {
@@ -391190,7 +391325,7 @@ function installScheduler(config3, platform5 = detectPlatform()) {
391190
391325
  if (platform5 === "launchd") {
391191
391326
  const path22 = launchdPlistPath(config3.cwd);
391192
391327
  mkdirSync22(launchAgentsDir(), { recursive: true });
391193
- writeFileSync20(path22, buildLaunchdPlist(config3));
391328
+ writeFileSync21(path22, buildLaunchdPlist(config3));
391194
391329
  return {
391195
391330
  platform: platform5,
391196
391331
  installed: true,
@@ -391207,8 +391342,8 @@ function installScheduler(config3, platform5 = detectPlatform()) {
391207
391342
  mkdirSync22(dir, { recursive: true });
391208
391343
  const servicePath = join145(dir, systemdServiceName(config3.cwd));
391209
391344
  const timerPath = join145(dir, systemdTimerName(config3.cwd));
391210
- writeFileSync20(servicePath, buildSystemdService(config3));
391211
- writeFileSync20(timerPath, buildSystemdTimer(config3));
391345
+ writeFileSync21(servicePath, buildSystemdService(config3));
391346
+ writeFileSync21(timerPath, buildSystemdTimer(config3));
391212
391347
  return {
391213
391348
  platform: platform5,
391214
391349
  installed: true,
@@ -391324,7 +391459,7 @@ import {
391324
391459
  readdirSync as readdirSync9,
391325
391460
  readFileSync as readFileSync33,
391326
391461
  unlinkSync as unlinkSync4,
391327
- writeFileSync as writeFileSync21
391462
+ writeFileSync as writeFileSync22
391328
391463
  } from "fs";
391329
391464
  import { join as join146 } from "path";
391330
391465
  function automationsDir() {
@@ -391378,7 +391513,7 @@ function listSpecs() {
391378
391513
  }
391379
391514
  function writeSpec(spec) {
391380
391515
  mkdirSync23(automationsDir(), { recursive: true });
391381
- writeFileSync21(automationPath(spec.name), `${JSON.stringify(spec, null, 2)}
391516
+ writeFileSync22(automationPath(spec.name), `${JSON.stringify(spec, null, 2)}
391382
391517
  `);
391383
391518
  }
391384
391519
  function toMs(value) {
@@ -391710,7 +391845,7 @@ __export(exports_exec, {
391710
391845
  execCommandForPrompt: () => execCommandForPrompt,
391711
391846
  call: () => call59
391712
391847
  });
391713
- import { mkdirSync as mkdirSync24, writeFileSync as writeFileSync22 } from "fs";
391848
+ import { mkdirSync as mkdirSync24, writeFileSync as writeFileSync23 } from "fs";
391714
391849
  import { join as join147 } from "path";
391715
391850
  function option6(tokens, name) {
391716
391851
  const index2 = tokens.indexOf(name);
@@ -391844,7 +391979,7 @@ async function runExecPool(prompts, opts) {
391844
391979
  function writeOutputFile(outputDir, prompt, content) {
391845
391980
  mkdirSync24(outputDir, { recursive: true });
391846
391981
  const slug2 = prompt.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 40) || "task";
391847
- writeFileSync22(join147(outputDir, `${slug2}.txt`), content);
391982
+ writeFileSync23(join147(outputDir, `${slug2}.txt`), content);
391848
391983
  }
391849
391984
  var call59 = async (args) => {
391850
391985
  const tokens = parseArguments2(args);
@@ -392023,7 +392158,7 @@ var exports_claim_ledger = {};
392023
392158
  __export(exports_claim_ledger, {
392024
392159
  call: () => call61
392025
392160
  });
392026
- import { existsSync as existsSync26, mkdirSync as mkdirSync25, readFileSync as readFileSync35, writeFileSync as writeFileSync23 } from "fs";
392161
+ import { existsSync as existsSync26, mkdirSync as mkdirSync25, readFileSync as readFileSync35, writeFileSync as writeFileSync24 } from "fs";
392027
392162
  import { join as join149 } from "path";
392028
392163
  function ledgerPath2() {
392029
392164
  return join149(getCwd2(), ".ur", "evidence", "claims.json");
@@ -392040,7 +392175,7 @@ function loadLedger() {
392040
392175
  }
392041
392176
  function saveLedger(ledger) {
392042
392177
  mkdirSync25(join149(getCwd2(), ".ur", "evidence"), { recursive: true });
392043
- writeFileSync23(ledgerPath2(), `${JSON.stringify(ledger, null, 2)}
392178
+ writeFileSync24(ledgerPath2(), `${JSON.stringify(ledger, null, 2)}
392044
392179
  `);
392045
392180
  }
392046
392181
  function parseSource(value) {
@@ -392132,7 +392267,7 @@ import {
392132
392267
  mkdirSync as mkdirSync26,
392133
392268
  readFileSync as readFileSync36,
392134
392269
  readdirSync as readdirSync11,
392135
- writeFileSync as writeFileSync24
392270
+ writeFileSync as writeFileSync25
392136
392271
  } from "fs";
392137
392272
  import { join as join150 } from "path";
392138
392273
  function slugifyWorkflowName(name) {
@@ -392334,7 +392469,7 @@ function saveWorkflow(cwd2, spec, options2 = {}) {
392334
392469
  if (existsSync27(path22) && options2.force !== true) {
392335
392470
  return { path: path22, created: false };
392336
392471
  }
392337
- writeFileSync24(path22, `${import_yaml3.stringify(spec)}`);
392472
+ writeFileSync25(path22, `${import_yaml3.stringify(spec)}`);
392338
392473
  return { path: path22, created: true };
392339
392474
  }
392340
392475
  function loadRunState(cwd2, name) {
@@ -392358,14 +392493,14 @@ function markStepComplete(cwd2, name, stepId) {
392358
392493
  state.completed.push(stepId);
392359
392494
  state.updatedAt = now7;
392360
392495
  mkdirSync26(stateDir(cwd2), { recursive: true });
392361
- writeFileSync24(statePath(cwd2, name), `${JSON.stringify(state, null, 2)}
392496
+ writeFileSync25(statePath(cwd2, name), `${JSON.stringify(state, null, 2)}
392362
392497
  `);
392363
392498
  return state;
392364
392499
  }
392365
392500
  function resetRunState(cwd2, name) {
392366
392501
  const path22 = statePath(cwd2, name);
392367
392502
  if (existsSync27(path22)) {
392368
- writeFileSync24(path22, `${JSON.stringify({
392503
+ writeFileSync25(path22, `${JSON.stringify({
392369
392504
  version: 1,
392370
392505
  name: slugifyWorkflowName(name),
392371
392506
  startedAt: new Date().toISOString(),
@@ -392489,7 +392624,7 @@ var init_workflows = __esm(() => {
392489
392624
  });
392490
392625
 
392491
392626
  // src/services/agents/patterns.ts
392492
- import { existsSync as existsSync28, mkdirSync as mkdirSync27, writeFileSync as writeFileSync25 } from "fs";
392627
+ import { existsSync as existsSync28, mkdirSync as mkdirSync27, writeFileSync as writeFileSync26 } from "fs";
392493
392628
  import { join as join151 } from "path";
392494
392629
  function listPatterns() {
392495
392630
  return AGENT_PATTERNS;
@@ -392569,7 +392704,7 @@ function scaffoldPattern(cwd2, id, options2 = {}) {
392569
392704
  if (!force && existsSync28(specPath)) {
392570
392705
  result.skipped.push(`patterns/${pattern.id}.json`);
392571
392706
  } else {
392572
- writeFileSync25(specPath, `${JSON.stringify(pattern, null, 2)}
392707
+ writeFileSync26(specPath, `${JSON.stringify(pattern, null, 2)}
392573
392708
  `);
392574
392709
  result.created.push(`patterns/${pattern.id}.json`);
392575
392710
  }
@@ -393905,7 +394040,7 @@ var init_workflow2 = __esm(() => {
393905
394040
  });
393906
394041
 
393907
394042
  // src/skills/skillSpec.ts
393908
- import { existsSync as existsSync29, mkdirSync as mkdirSync28, readFileSync as readFileSync37, readdirSync as readdirSync12, writeFileSync as writeFileSync26 } from "fs";
394043
+ import { existsSync as existsSync29, mkdirSync as mkdirSync28, readFileSync as readFileSync37, readdirSync as readdirSync12, writeFileSync as writeFileSync27 } from "fs";
393909
394044
  import { join as join152 } from "path";
393910
394045
  function readTextFile(path22) {
393911
394046
  try {
@@ -394164,16 +394299,16 @@ function initSkillDir(dir, name) {
394164
394299
  }
394165
394300
  ]
394166
394301
  };
394167
- writeFileSync26(join152(dir, SKILL_YAML_FILE), stringifySkillYaml(spec));
394168
- writeFileSync26(join152(dir, SKILL_INSTRUCTIONS_FILE), `# ${name}
394302
+ writeFileSync27(join152(dir, SKILL_YAML_FILE), stringifySkillYaml(spec));
394303
+ writeFileSync27(join152(dir, SKILL_INSTRUCTIONS_FILE), `# ${name}
394169
394304
 
394170
394305
  Executable skill for ${name}.
394171
394306
  `);
394172
- writeFileSync26(join152(dir, "checklists", "default.md"), `# Default checklist
394307
+ writeFileSync27(join152(dir, "checklists", "default.md"), `# Default checklist
394173
394308
 
394174
394309
  - [ ] Step completed successfully
394175
394310
  `);
394176
- writeFileSync26(join152(dir, "templates", "output.md"), `# Output template
394311
+ writeFileSync27(join152(dir, "templates", "output.md"), `# Output template
394177
394312
 
394178
394313
  ## Summary
394179
394314
 
@@ -394919,7 +395054,7 @@ import {
394919
395054
  readFileSync as readFileSync39,
394920
395055
  readdirSync as readdirSync13,
394921
395056
  statSync as statSync10,
394922
- writeFileSync as writeFileSync27
395057
+ writeFileSync as writeFileSync28
394923
395058
  } from "fs";
394924
395059
  import { basename as basename41, join as join154, relative as relative33, resolve as resolve44 } from "path";
394925
395060
  function knowledgeDir(cwd2) {
@@ -394943,7 +395078,7 @@ function loadSources(cwd2) {
394943
395078
  }
394944
395079
  function saveSources(cwd2, sources) {
394945
395080
  mkdirSync29(knowledgeDir(cwd2), { recursive: true });
394946
- writeFileSync27(sourcesPath(cwd2), `${JSON.stringify(sources, null, 2)}
395081
+ writeFileSync28(sourcesPath(cwd2), `${JSON.stringify(sources, null, 2)}
394947
395082
  `);
394948
395083
  }
394949
395084
  function makeSourceId(kind, ref) {
@@ -395117,7 +395252,7 @@ async function buildIndex(cwd2, options2 = {}) {
395117
395252
  chunks
395118
395253
  };
395119
395254
  mkdirSync29(join154(knowledgeDir(cwd2), "index"), { recursive: true });
395120
- writeFileSync27(indexPath2(cwd2), `${JSON.stringify(index2, null, 2)}
395255
+ writeFileSync28(indexPath2(cwd2), `${JSON.stringify(index2, null, 2)}
395121
395256
  `);
395122
395257
  return index2;
395123
395258
  }
@@ -395166,7 +395301,7 @@ function pruneKnowledge(cwd2, options2) {
395166
395301
  removedChunks = before - index2.chunks.length;
395167
395302
  index2.builtAt = new Date().toISOString();
395168
395303
  mkdirSync29(join154(knowledgeDir(cwd2), "index"), { recursive: true });
395169
- writeFileSync27(indexPath2(cwd2), `${JSON.stringify(index2, null, 2)}
395304
+ writeFileSync28(indexPath2(cwd2), `${JSON.stringify(index2, null, 2)}
395170
395305
  `);
395171
395306
  }
395172
395307
  return { removedSources, removedChunks };
@@ -395354,7 +395489,7 @@ var init_knowledge3 = __esm(() => {
395354
395489
  });
395355
395490
 
395356
395491
  // src/services/agents/crew.ts
395357
- import { existsSync as existsSync32, mkdirSync as mkdirSync30, readdirSync as readdirSync14, readFileSync as readFileSync40, unlinkSync as unlinkSync5, writeFileSync as writeFileSync28 } from "fs";
395492
+ import { existsSync as existsSync32, mkdirSync as mkdirSync30, readdirSync as readdirSync14, readFileSync as readFileSync40, unlinkSync as unlinkSync5, writeFileSync as writeFileSync29 } from "fs";
395358
395493
  import { join as join155 } from "path";
395359
395494
  function crewDir(cwd2) {
395360
395495
  return join155(cwd2, ".ur", "crew");
@@ -395383,7 +395518,7 @@ function loadCrew(cwd2, name) {
395383
395518
  }
395384
395519
  function saveCrew(cwd2, spec) {
395385
395520
  mkdirSync30(crewDir(cwd2), { recursive: true });
395386
- writeFileSync28(crewPath(cwd2, spec.name), `${JSON.stringify(spec, null, 2)}
395521
+ writeFileSync29(crewPath(cwd2, spec.name), `${JSON.stringify(spec, null, 2)}
395387
395522
  `);
395388
395523
  }
395389
395524
  function deleteCrew(cwd2, name) {
@@ -395961,7 +396096,7 @@ var init_crew3 = __esm(() => {
395961
396096
  });
395962
396097
 
395963
396098
  // src/services/agents/goals.ts
395964
- import { existsSync as existsSync33, mkdirSync as mkdirSync31, readdirSync as readdirSync15, readFileSync as readFileSync41, unlinkSync as unlinkSync6, writeFileSync as writeFileSync29 } from "fs";
396099
+ import { existsSync as existsSync33, mkdirSync as mkdirSync31, readdirSync as readdirSync15, readFileSync as readFileSync41, unlinkSync as unlinkSync6, writeFileSync as writeFileSync30 } from "fs";
395965
396100
  import { join as join156 } from "path";
395966
396101
  function goalsDir(cwd2) {
395967
396102
  return join156(cwd2, ".ur", "goals");
@@ -395990,7 +396125,7 @@ function loadGoal(cwd2, name) {
395990
396125
  }
395991
396126
  function saveGoal(cwd2, spec) {
395992
396127
  mkdirSync31(goalsDir(cwd2), { recursive: true });
395993
- writeFileSync29(goalPath(cwd2, spec.name), `${JSON.stringify(spec, null, 2)}
396128
+ writeFileSync30(goalPath(cwd2, spec.name), `${JSON.stringify(spec, null, 2)}
395994
396129
  `);
395995
396130
  }
395996
396131
  function createGoal(cwd2, name, objective, options2 = {}) {
@@ -396718,7 +396853,7 @@ import {
396718
396853
  readdirSync as readdirSync16,
396719
396854
  readFileSync as readFileSync43,
396720
396855
  rmSync as rmSync5,
396721
- writeFileSync as writeFileSync30
396856
+ writeFileSync as writeFileSync31
396722
396857
  } from "fs";
396723
396858
  import { join as join158 } from "path";
396724
396859
  function specsDir(cwd2) {
@@ -396751,7 +396886,7 @@ function loadSpec(cwd2, name) {
396751
396886
  }
396752
396887
  function saveMeta(cwd2, meta) {
396753
396888
  mkdirSync32(specDir(cwd2, meta.name), { recursive: true });
396754
- writeFileSync30(metaPath(cwd2, meta.name), `${JSON.stringify(meta, null, 2)}
396889
+ writeFileSync31(metaPath(cwd2, meta.name), `${JSON.stringify(meta, null, 2)}
396755
396890
  `);
396756
396891
  }
396757
396892
  function readPhase(cwd2, name, phase) {
@@ -396760,7 +396895,7 @@ function readPhase(cwd2, name, phase) {
396760
396895
  }
396761
396896
  function writePhase(cwd2, name, phase, body) {
396762
396897
  mkdirSync32(specDir(cwd2, name), { recursive: true });
396763
- writeFileSync30(join158(specDir(cwd2, name), phaseFile(phase)), body.endsWith(`
396898
+ writeFileSync31(join158(specDir(cwd2, name), phaseFile(phase)), body.endsWith(`
396764
396899
  `) ? body : `${body}
396765
396900
  `);
396766
396901
  }
@@ -397017,7 +397152,7 @@ var init_spec = __esm(() => {
397017
397152
  });
397018
397153
 
397019
397154
  // src/services/agents/specVerifier.ts
397020
- import { existsSync as existsSync36, mkdirSync as mkdirSync33, readFileSync as readFileSync44, writeFileSync as writeFileSync31 } from "fs";
397155
+ import { existsSync as existsSync36, mkdirSync as mkdirSync33, readFileSync as readFileSync44, writeFileSync as writeFileSync32 } from "fs";
397021
397156
  import { join as join159 } from "path";
397022
397157
  function recordPath(cwd2, name) {
397023
397158
  return join159(cwd2, ".ur", "specs", name, RECORD_FILE);
@@ -397044,7 +397179,7 @@ function listVerificationRecords(cwd2, name) {
397044
397179
  function saveVerificationRecord(cwd2, name, record3) {
397045
397180
  const path22 = recordPath(cwd2, name);
397046
397181
  mkdirSync33(join159(cwd2, ".ur", "specs", name), { recursive: true });
397047
- writeFileSync31(path22, `${JSON.stringify(record3, null, 2)}
397182
+ writeFileSync32(path22, `${JSON.stringify(record3, null, 2)}
397048
397183
  `);
397049
397184
  }
397050
397185
  function writeVerificationReport(cwd2, name, result) {
@@ -397070,7 +397205,7 @@ function writeVerificationReport(cwd2, name, result) {
397070
397205
  "```",
397071
397206
  ""
397072
397207
  ];
397073
- writeFileSync31(reportPath(cwd2, name), lines.join(`
397208
+ writeFileSync32(reportPath(cwd2, name), lines.join(`
397074
397209
  `));
397075
397210
  }
397076
397211
  async function captureDiff(cwd2) {
@@ -397496,7 +397631,7 @@ var init_spec3 = __esm(() => {
397496
397631
  });
397497
397632
 
397498
397633
  // src/services/agents/escalation.ts
397499
- import { existsSync as existsSync37, mkdirSync as mkdirSync34, readFileSync as readFileSync45, writeFileSync as writeFileSync32 } from "fs";
397634
+ import { existsSync as existsSync37, mkdirSync as mkdirSync34, readFileSync as readFileSync45, writeFileSync as writeFileSync33 } from "fs";
397500
397635
  import { join as join160 } from "path";
397501
397636
  function scoreOracle(model) {
397502
397637
  let score = (model.contextLength ?? 0) / 1000;
@@ -397678,7 +397813,7 @@ function loadPolicy(cwd2) {
397678
397813
  }
397679
397814
  function savePolicy(cwd2, policy) {
397680
397815
  mkdirSync34(join160(cwd2, ".ur"), { recursive: true });
397681
- writeFileSync32(policyPath(cwd2), `${JSON.stringify(policy, null, 2)}
397816
+ writeFileSync33(policyPath(cwd2), `${JSON.stringify(policy, null, 2)}
397682
397817
  `);
397683
397818
  }
397684
397819
  function formatPlan(plan, json2) {
@@ -397730,7 +397865,7 @@ import {
397730
397865
  mkdirSync as mkdirSync35,
397731
397866
  readFileSync as readFileSync46,
397732
397867
  rmSync as rmSync6,
397733
- writeFileSync as writeFileSync33
397868
+ writeFileSync as writeFileSync34
397734
397869
  } from "fs";
397735
397870
  import { join as join161 } from "path";
397736
397871
  function artifactsDir(cwd2) {
@@ -397748,7 +397883,7 @@ function loadManifest3(cwd2) {
397748
397883
  }
397749
397884
  function saveManifest3(cwd2, manifest) {
397750
397885
  mkdirSync35(artifactsDir(cwd2), { recursive: true });
397751
- writeFileSync33(manifestPath4(cwd2), `${JSON.stringify(manifest, null, 2)}
397886
+ writeFileSync34(manifestPath4(cwd2), `${JSON.stringify(manifest, null, 2)}
397752
397887
  `);
397753
397888
  }
397754
397889
  function nextId2(manifest) {
@@ -397767,7 +397902,7 @@ function recordArtifact(cwd2, input) {
397767
397902
  const dir = join161(artifactsDir(cwd2), "files");
397768
397903
  mkdirSync35(dir, { recursive: true });
397769
397904
  const rel = join161("files", `${id}-${slug2(input.title)}.${EXT[input.kind]}`);
397770
- writeFileSync33(join161(artifactsDir(cwd2), rel), input.body);
397905
+ writeFileSync34(join161(artifactsDir(cwd2), rel), input.body);
397771
397906
  file2 = rel;
397772
397907
  }
397773
397908
  const artifact = {
@@ -397916,7 +398051,7 @@ var init_artifacts = __esm(() => {
397916
398051
  });
397917
398052
 
397918
398053
  // src/services/agents/learning.ts
397919
- import { existsSync as existsSync39, mkdirSync as mkdirSync36, readFileSync as readFileSync47, writeFileSync as writeFileSync34 } from "fs";
398054
+ import { existsSync as existsSync39, mkdirSync as mkdirSync36, readFileSync as readFileSync47, writeFileSync as writeFileSync35 } from "fs";
397920
398055
  import { join as join162 } from "path";
397921
398056
  function emptyStats() {
397922
398057
  return {
@@ -398042,7 +398177,7 @@ function loadStats(cwd2) {
398042
398177
  }
398043
398178
  function saveStats(cwd2, stats) {
398044
398179
  mkdirSync36(learningDir(cwd2), { recursive: true });
398045
- writeFileSync34(statsPath(cwd2), `${JSON.stringify(stats, null, 2)}
398180
+ writeFileSync35(statsPath(cwd2), `${JSON.stringify(stats, null, 2)}
398046
398181
  `);
398047
398182
  }
398048
398183
  async function reflectOnFailures(input) {
@@ -398477,7 +398612,7 @@ var init_guardrails3 = __esm(() => {
398477
398612
  });
398478
398613
 
398479
398614
  // src/services/agents/execTarget.ts
398480
- import { existsSync as existsSync41, mkdirSync as mkdirSync37, readFileSync as readFileSync49, writeFileSync as writeFileSync35 } from "fs";
398615
+ import { existsSync as existsSync41, mkdirSync as mkdirSync37, readFileSync as readFileSync49, writeFileSync as writeFileSync36 } from "fs";
398481
398616
  import { join as join163 } from "path";
398482
398617
  function isContainerized(config3) {
398483
398618
  return config3.kind !== "local";
@@ -398548,7 +398683,7 @@ function scaffoldExecTarget(cwd2, options2 = {}) {
398548
398683
  mkdirSync37(join163(cwd2, ".ur"), { recursive: true });
398549
398684
  if (existsSync41(path22) && options2.force !== true)
398550
398685
  return { path: path22, created: false };
398551
- writeFileSync35(path22, `${JSON.stringify(defaultExecTargetConfig(options2.image), null, 2)}
398686
+ writeFileSync36(path22, `${JSON.stringify(defaultExecTargetConfig(options2.image), null, 2)}
398552
398687
  `);
398553
398688
  return { path: path22, created: true };
398554
398689
  }
@@ -398678,7 +398813,7 @@ import {
398678
398813
  existsSync as existsSync42,
398679
398814
  mkdirSync as mkdirSync38,
398680
398815
  rmSync as rmSync7,
398681
- writeFileSync as writeFileSync36
398816
+ writeFileSync as writeFileSync37
398682
398817
  } from "fs";
398683
398818
  import { join as join164 } from "path";
398684
398819
  function countChangedLines(diff3) {
@@ -398812,7 +398947,7 @@ Implement this fully and correctly. Make focused changes. End your reply with VE
398812
398947
  if (options2.apply && winner && winner.diff.trim() && !options2.dryRun) {
398813
398948
  const patch = join164(cwd2, ".ur", "arena", `${runId}-winner.patch`);
398814
398949
  mkdirSync38(join164(cwd2, ".ur", "arena"), { recursive: true });
398815
- writeFileSync36(patch, winner.diff);
398950
+ writeFileSync37(patch, winner.diff);
398816
398951
  const result = await git4(cwd2, ["apply", "--3way", patch]);
398817
398952
  applied = result.code === 0;
398818
398953
  if (applied)
@@ -399445,9 +399580,9 @@ var init_ci_loop2 = __esm(() => {
399445
399580
  import {
399446
399581
  mkdirSync as mkdirSync39,
399447
399582
  readFileSync as readFileSync51,
399448
- writeFileSync as writeFileSync37
399583
+ writeFileSync as writeFileSync38
399449
399584
  } from "fs";
399450
- import { dirname as dirname60, join as join165, relative as relative34 } from "path";
399585
+ import { dirname as dirname61, join as join165, relative as relative34 } from "path";
399451
399586
  function defaultTraceDir(cwd2) {
399452
399587
  return join165(cwd2, ".ur", "test-first", "traces");
399453
399588
  }
@@ -399476,7 +399611,7 @@ function writeFailureTrace(cwd2, traceDir, run, result, now7) {
399476
399611
  ""
399477
399612
  ].join(`
399478
399613
  `);
399479
- writeFileSync37(file2, body);
399614
+ writeFileSync38(file2, body);
399480
399615
  return relative34(cwd2, file2);
399481
399616
  }
399482
399617
  function readExistingVerifyConfig(path22) {
@@ -399500,7 +399635,7 @@ function mergeStringArray(existing2, additions) {
399500
399635
  }
399501
399636
  function installTestFirstGates(cwd2, stack = detectTestFirstStack(cwd2)) {
399502
399637
  const path22 = join165(cwd2, ".ur", "verify.json");
399503
- mkdirSync39(dirname60(path22), { recursive: true });
399638
+ mkdirSync39(dirname61(path22), { recursive: true });
399504
399639
  const commands = stack.commands.map((command5) => command5.command);
399505
399640
  const existing2 = readExistingVerifyConfig(path22);
399506
399641
  const next = {
@@ -399508,7 +399643,7 @@ function installTestFirstGates(cwd2, stack = detectTestFirstStack(cwd2)) {
399508
399643
  afterEdit: mergeStringArray(existing2.afterEdit, commands),
399509
399644
  timeoutMs: typeof existing2.timeoutMs === "number" && existing2.timeoutMs > 0 ? existing2.timeoutMs : 600000
399510
399645
  };
399511
- writeFileSync37(path22, `${JSON.stringify(next, null, 2)}
399646
+ writeFileSync38(path22, `${JSON.stringify(next, null, 2)}
399512
399647
  `);
399513
399648
  return { path: relative34(cwd2, path22), commands };
399514
399649
  }
@@ -400620,7 +400755,7 @@ var exports_sdk = {};
400620
400755
  __export(exports_sdk, {
400621
400756
  call: () => call85
400622
400757
  });
400623
- import { existsSync as existsSync45, mkdirSync as mkdirSync40, writeFileSync as writeFileSync38 } from "fs";
400758
+ import { existsSync as existsSync45, mkdirSync as mkdirSync40, writeFileSync as writeFileSync39 } from "fs";
400624
400759
  import { join as join166 } from "path";
400625
400760
  function infoText() {
400626
400761
  return [
@@ -400716,7 +400851,7 @@ A2A server: \`ur a2a serve\`.
400716
400851
  skipped.push(name);
400717
400852
  continue;
400718
400853
  }
400719
- writeFileSync38(path22, content);
400854
+ writeFileSync39(path22, content);
400720
400855
  created.push(name);
400721
400856
  }
400722
400857
  return {
@@ -400793,7 +400928,7 @@ import {
400793
400928
  readFileSync as readFileSync53,
400794
400929
  readdirSync as readdirSync17,
400795
400930
  rmSync as rmSync8,
400796
- writeFileSync as writeFileSync39
400931
+ writeFileSync as writeFileSync40
400797
400932
  } from "fs";
400798
400933
  import { join as join167 } from "path";
400799
400934
  function hasAnyExpectation(expect) {
@@ -401482,7 +401617,7 @@ function loadAllReliability(cwd2) {
401482
401617
  function saveReliabilityReport(cwd2, report) {
401483
401618
  mkdirSync41(resultsDir(cwd2), { recursive: true });
401484
401619
  const path22 = join167(resultsDir(cwd2), `reliability-${suiteSlug(report.name)}.json`);
401485
- writeFileSync39(path22, `${JSON.stringify(report, null, 2)}
401620
+ writeFileSync40(path22, `${JSON.stringify(report, null, 2)}
401486
401621
  `);
401487
401622
  return path22;
401488
401623
  }
@@ -401490,7 +401625,7 @@ function writeDashboard(cwd2) {
401490
401625
  const html3 = buildDashboardHtml(loadAllReports(cwd2), loadAllReliability(cwd2));
401491
401626
  mkdirSync41(evalsDir(cwd2), { recursive: true });
401492
401627
  const path22 = join167(evalsDir(cwd2), "dashboard.html");
401493
- writeFileSync39(path22, html3);
401628
+ writeFileSync40(path22, html3);
401494
401629
  return path22;
401495
401630
  }
401496
401631
  function buildLeaderboard(cwd2, reports, options2 = {}) {
@@ -401501,7 +401636,7 @@ function buildLeaderboard(cwd2, reports, options2 = {}) {
401501
401636
  const dir2 = resultsDir(cwd2);
401502
401637
  mkdirSync41(dir2, { recursive: true });
401503
401638
  const path23 = join167(dir2, "leaderboard.json");
401504
- writeFileSync39(path23, JSON.stringify({ title, generatedAt: new Date().toISOString(), reports }, null, 2) + `
401639
+ writeFileSync40(path23, JSON.stringify({ title, generatedAt: new Date().toISOString(), reports }, null, 2) + `
401505
401640
  `);
401506
401641
  if (runId) {
401507
401642
  addRunArtifact(cwd2, runId, { kind: "leaderboard", path: path23, title });
@@ -401512,7 +401647,7 @@ function buildLeaderboard(cwd2, reports, options2 = {}) {
401512
401647
  const dir2 = resultsDir(cwd2);
401513
401648
  mkdirSync41(dir2, { recursive: true });
401514
401649
  const path23 = join167(dir2, "leaderboard.md");
401515
- writeFileSync39(path23, formatLeaderboardMarkdown(title, reports));
401650
+ writeFileSync40(path23, formatLeaderboardMarkdown(title, reports));
401516
401651
  if (runId) {
401517
401652
  addRunArtifact(cwd2, runId, { kind: "leaderboard", path: path23, title });
401518
401653
  }
@@ -401522,7 +401657,7 @@ function buildLeaderboard(cwd2, reports, options2 = {}) {
401522
401657
  mkdirSync41(dir, { recursive: true });
401523
401658
  const path22 = join167(dir, "leaderboard.html");
401524
401659
  const html3 = buildDashboardHtml(reports, []);
401525
- writeFileSync39(path22, html3.replace("<title>UR Eval Dashboard</title>", `<title>${escapeHtml(title)}</title>`).replace("<h1>UR Eval Dashboard</h1>", `<h1>${escapeHtml(title)}</h1>`));
401660
+ writeFileSync40(path22, html3.replace("<title>UR Eval Dashboard</title>", `<title>${escapeHtml(title)}</title>`).replace("<h1>UR Eval Dashboard</h1>", `<h1>${escapeHtml(title)}</h1>`));
401526
401661
  if (runId) {
401527
401662
  addRunArtifact(cwd2, runId, { kind: "leaderboard", path: path22, title });
401528
401663
  }
@@ -401550,7 +401685,7 @@ function writeRunMetrics(cwd2, suiteName, caseId, metrics) {
401550
401685
  const dir = runsDir(cwd2, suiteName);
401551
401686
  mkdirSync41(dir, { recursive: true });
401552
401687
  const path22 = join167(dir, `${caseId}.json`);
401553
- writeFileSync39(path22, `${JSON.stringify(metrics, null, 2)}
401688
+ writeFileSync40(path22, `${JSON.stringify(metrics, null, 2)}
401554
401689
  `);
401555
401690
  return path22;
401556
401691
  }
@@ -401634,7 +401769,7 @@ function saveSuite(cwd2, suite, options2 = {}) {
401634
401769
  if (existsSync46(path22) && options2.force !== true) {
401635
401770
  return { path: path22, created: false };
401636
401771
  }
401637
- writeFileSync39(path22, `${JSON.stringify(suite, null, 2)}
401772
+ writeFileSync40(path22, `${JSON.stringify(suite, null, 2)}
401638
401773
  `);
401639
401774
  return { path: path22, created: true };
401640
401775
  }
@@ -401792,7 +401927,7 @@ function importBenchmarkSuite(cwd2, adapter2, file2, options2 = {}) {
401792
401927
  function saveReport(cwd2, report, options2 = {}) {
401793
401928
  mkdirSync41(resultsDir(cwd2), { recursive: true });
401794
401929
  const path22 = join167(resultsDir(cwd2), `${suiteSlug(report.name)}.json`);
401795
- writeFileSync39(path22, `${JSON.stringify(report, null, 2)}
401930
+ writeFileSync40(path22, `${JSON.stringify(report, null, 2)}
401796
401931
  `);
401797
401932
  if (options2.runId) {
401798
401933
  addRunArtifact(cwd2, options2.runId, {
@@ -401863,7 +401998,7 @@ function scaffoldEvals(cwd2, options2 = {}) {
401863
401998
  if (existsSync46(readmePath) && options2.force !== true) {
401864
401999
  result.skipped.push("evals/README.md");
401865
402000
  } else {
401866
- writeFileSync39(readmePath, EVALS_README);
402001
+ writeFileSync40(readmePath, EVALS_README);
401867
402002
  result.created.push("evals/README.md");
401868
402003
  }
401869
402004
  const saved = saveSuite(cwd2, defaultEvalSuite(), { force: options2.force });
@@ -402232,7 +402367,7 @@ var exports_eval = {};
402232
402367
  __export(exports_eval, {
402233
402368
  call: () => call86
402234
402369
  });
402235
- import { mkdirSync as mkdirSync42, writeFileSync as writeFileSync40 } from "fs";
402370
+ import { mkdirSync as mkdirSync42, writeFileSync as writeFileSync41 } from "fs";
402236
402371
  import { join as join169 } from "path";
402237
402372
  function optionValue7(tokens, flag) {
402238
402373
  const index2 = tokens.indexOf(flag);
@@ -402364,7 +402499,7 @@ Run: ur eval run ${suite2.name}`
402364
402499
  const dir = join169(evalsDir(cwd2), ".dashboards");
402365
402500
  mkdirSync42(dir, { recursive: true });
402366
402501
  const path22 = join169(dir, `${suiteSlug(report.name)}.html`);
402367
- writeFileSync40(path22, html3);
402502
+ writeFileSync41(path22, html3);
402368
402503
  return { type: "text", value: `Wrote single-suite dashboard to ${path22}` };
402369
402504
  }
402370
402505
  return { type: "text", value: formatEvalReport(report, json2) };
@@ -403166,8 +403301,8 @@ var init_project2 = __esm(() => {
403166
403301
  });
403167
403302
 
403168
403303
  // src/ur/notes.ts
403169
- import { appendFileSync as appendFileSync5, existsSync as existsSync49, mkdirSync as mkdirSync43, readFileSync as readFileSync55, writeFileSync as writeFileSync41 } from "fs";
403170
- import { dirname as dirname61, join as join171 } from "path";
403304
+ import { appendFileSync as appendFileSync5, existsSync as existsSync49, mkdirSync as mkdirSync43, readFileSync as readFileSync55, writeFileSync as writeFileSync42 } from "fs";
403305
+ import { dirname as dirname62, join as join171 } from "path";
403171
403306
  function readJsonl(file2) {
403172
403307
  if (!existsSync49(file2))
403173
403308
  return [];
@@ -403182,7 +403317,7 @@ function readJsonl(file2) {
403182
403317
  }
403183
403318
  function append2(file2, rec) {
403184
403319
  try {
403185
- mkdirSync43(dirname61(file2), { recursive: true });
403320
+ mkdirSync43(dirname62(file2), { recursive: true });
403186
403321
  appendFileSync5(file2, JSON.stringify(rec) + `
403187
403322
  `);
403188
403323
  } catch {}
@@ -403200,8 +403335,8 @@ function forget(cwd2, needle) {
403200
403335
  const removed = all4.length - kept.length;
403201
403336
  if (removed > 0) {
403202
403337
  try {
403203
- mkdirSync43(dirname61(file2), { recursive: true });
403204
- writeFileSync41(file2, kept.map((n2) => JSON.stringify(n2)).join(`
403338
+ mkdirSync43(dirname62(file2), { recursive: true });
403339
+ writeFileSync42(file2, kept.map((n2) => JSON.stringify(n2)).join(`
403205
403340
  `) + (kept.length ? `
403206
403341
  ` : ""));
403207
403342
  } catch {}
@@ -403257,9 +403392,9 @@ import {
403257
403392
  mkdirSync as mkdirSync44,
403258
403393
  readFileSync as readFileSync56,
403259
403394
  readdirSync as readdirSync19,
403260
- writeFileSync as writeFileSync42
403395
+ writeFileSync as writeFileSync43
403261
403396
  } from "fs";
403262
- import { dirname as dirname62, join as join172 } from "path";
403397
+ import { dirname as dirname63, join as join172 } from "path";
403263
403398
  function memoryDir(cwd2) {
403264
403399
  return join172(cwd2, ".ur", "memory");
403265
403400
  }
@@ -403294,8 +403429,8 @@ function saveMemoryRetentionPolicy(cwd2, patch) {
403294
403429
  decayDays: patch.decayDays === undefined ? current.decayDays : validPositive(patch.decayDays),
403295
403430
  updatedAt: new Date().toISOString()
403296
403431
  };
403297
- mkdirSync44(dirname62(policyPath2(cwd2)), { recursive: true });
403298
- writeFileSync42(policyPath2(cwd2), `${JSON.stringify(next, null, 2)}
403432
+ mkdirSync44(dirname63(policyPath2(cwd2)), { recursive: true });
403433
+ writeFileSync43(policyPath2(cwd2), `${JSON.stringify(next, null, 2)}
403299
403434
  `);
403300
403435
  return next;
403301
403436
  }
@@ -403325,7 +403460,7 @@ function readJsonl2(file2) {
403325
403460
  return records;
403326
403461
  }
403327
403462
  function writeJsonl(file2, records) {
403328
- writeFileSync42(file2, records.map((r) => JSON.stringify(r)).join(`
403463
+ writeFileSync43(file2, records.map((r) => JSON.stringify(r)).join(`
403329
403464
  `) + (records.length ? `
403330
403465
  ` : ""));
403331
403466
  }
@@ -403476,7 +403611,7 @@ var exports_semantic_memory = {};
403476
403611
  __export(exports_semantic_memory, {
403477
403612
  call: () => call94
403478
403613
  });
403479
- import { existsSync as existsSync51, mkdirSync as mkdirSync45, readdirSync as readdirSync20, readFileSync as readFileSync57, statSync as statSync11, writeFileSync as writeFileSync43 } from "fs";
403614
+ import { existsSync as existsSync51, mkdirSync as mkdirSync45, readdirSync as readdirSync20, readFileSync as readFileSync57, statSync as statSync11, writeFileSync as writeFileSync44 } from "fs";
403480
403615
  import { basename as basename42, join as join173 } from "path";
403481
403616
  function indexPath3() {
403482
403617
  return join173(getCwd2(), ".ur", "semantic-memory", "index", "index.json");
@@ -403521,7 +403656,7 @@ function buildIndex2() {
403521
403656
  entries
403522
403657
  };
403523
403658
  mkdirSync45(join173(getCwd2(), ".ur", "semantic-memory", "index"), { recursive: true });
403524
- writeFileSync43(indexPath3(), `${JSON.stringify(index2, null, 2)}
403659
+ writeFileSync44(indexPath3(), `${JSON.stringify(index2, null, 2)}
403525
403660
  `);
403526
403661
  return index2;
403527
403662
  }
@@ -572870,9 +573005,9 @@ import {
572870
573005
  readFileSync as readFileSync58,
572871
573006
  readdirSync as readdirSync21,
572872
573007
  statSync as statSync12,
572873
- writeFileSync as writeFileSync44
573008
+ writeFileSync as writeFileSync45
572874
573009
  } from "fs";
572875
- import { dirname as dirname63, extname as extname17, isAbsolute as isAbsolute27, join as join174, relative as relative36, resolve as resolve45 } from "path";
573010
+ import { dirname as dirname64, extname as extname17, isAbsolute as isAbsolute27, join as join174, relative as relative36, resolve as resolve45 } from "path";
572876
573011
  import { promisify as promisify4 } from "util";
572877
573012
  function repoEditIndexPath(root2) {
572878
573013
  return join174(root2, ".ur", "repo-edit", "index.json");
@@ -573012,8 +573147,8 @@ ${content}`),
573012
573147
  builtAt: new Date().toISOString(),
573013
573148
  files
573014
573149
  };
573015
- mkdirSync46(dirname63(repoEditIndexPath(root2)), { recursive: true });
573016
- writeFileSync44(repoEditIndexPath(root2), `${JSON.stringify(index2, null, 2)}
573150
+ mkdirSync46(dirname64(repoEditIndexPath(root2)), { recursive: true });
573151
+ writeFileSync45(repoEditIndexPath(root2), `${JSON.stringify(index2, null, 2)}
573017
573152
  `);
573018
573153
  return index2;
573019
573154
  }
@@ -573161,7 +573296,7 @@ async function runCheck(command5, cwd2) {
573161
573296
  }
573162
573297
  function rollback(root2, snapshots) {
573163
573298
  for (const [file2, content] of snapshots) {
573164
- writeFileSync44(join174(root2, file2), content);
573299
+ writeFileSync45(join174(root2, file2), content);
573165
573300
  }
573166
573301
  }
573167
573302
  async function applyRename(root2, from, to, options2 = {}) {
@@ -573174,7 +573309,7 @@ async function applyRename(root2, from, to, options2 = {}) {
573174
573309
  try {
573175
573310
  for (const file2 of plan.files) {
573176
573311
  snapshots.set(file2.file, file2.oldContent);
573177
- writeFileSync44(join174(root2, file2.file), file2.newContent);
573312
+ writeFileSync45(join174(root2, file2.file), file2.newContent);
573178
573313
  writtenFiles.push(file2.file);
573179
573314
  }
573180
573315
  const syntax = plan.files.flatMap((file2) => syntaxErrors(file2.file, file2.newContent));
@@ -573689,8 +573824,8 @@ var init_diagnostics = __esm(() => {
573689
573824
  });
573690
573825
 
573691
573826
  // src/services/repoEditing/ast/workspaceEdit.ts
573692
- import { dirname as dirname64, join as join176 } from "path";
573693
- import { existsSync as existsSync53, mkdirSync as mkdirSync47, readFileSync as readFileSync59, writeFileSync as writeFileSync45 } from "fs";
573827
+ import { dirname as dirname65, join as join176 } from "path";
573828
+ import { existsSync as existsSync53, mkdirSync as mkdirSync47, readFileSync as readFileSync59, writeFileSync as writeFileSync46 } from "fs";
573694
573829
  function groupByFile2(edits) {
573695
573830
  const groups = new Map;
573696
573831
  for (const edit2 of edits) {
@@ -573729,16 +573864,16 @@ function applyWorkspaceEdit(root2, edit2) {
573729
573864
  const newContent = applyFileEdits(oldContent, edits);
573730
573865
  snapshots.set(file2, oldContent);
573731
573866
  if (!existsSync53(abs)) {
573732
- mkdirSync47(dirname64(abs), { recursive: true });
573867
+ mkdirSync47(dirname65(abs), { recursive: true });
573733
573868
  }
573734
- writeFileSync45(abs, newContent);
573869
+ writeFileSync46(abs, newContent);
573735
573870
  writtenFiles.push(file2);
573736
573871
  }
573737
573872
  return { writtenFiles, snapshots };
573738
573873
  }
573739
573874
  function rollbackWorkspaceEdit(root2, snapshots) {
573740
573875
  for (const [file2, content] of snapshots) {
573741
- writeFileSync45(join176(root2, file2), content);
573876
+ writeFileSync46(join176(root2, file2), content);
573742
573877
  }
573743
573878
  }
573744
573879
  function formatWorkspaceEditAsPatch(root2, edit2) {
@@ -573884,7 +574019,7 @@ var init_lspEditEngine = __esm(() => {
573884
574019
  });
573885
574020
 
573886
574021
  // src/services/repoEditing/ast/typescriptEngine.ts
573887
- import { dirname as dirname65, join as join177, relative as relative37 } from "path";
574022
+ import { dirname as dirname66, join as join177, relative as relative37 } from "path";
573888
574023
  function loadProgram(root2, files) {
573889
574024
  const configPath2 = import_typescript3.default.findConfigFile(root2, import_typescript3.default.sys.fileExists, "tsconfig.json");
573890
574025
  let program;
@@ -574132,11 +574267,11 @@ function normalizePath2(value) {
574132
574267
  function resolveRelativeImport(importingFileRel, specifier) {
574133
574268
  if (!specifier.startsWith("."))
574134
574269
  return;
574135
- const base2 = normalizePath2(join177(dirname65(importingFileRel), specifier));
574270
+ const base2 = normalizePath2(join177(dirname66(importingFileRel), specifier));
574136
574271
  return stripKnownExtension(base2);
574137
574272
  }
574138
574273
  function moduleSpecifierBetween(importingFileRel, targetFileRel) {
574139
- let specifier = normalizePath2(relative37(dirname65(importingFileRel), stripKnownExtension(targetFileRel)));
574274
+ let specifier = normalizePath2(relative37(dirname66(importingFileRel), stripKnownExtension(targetFileRel)));
574140
574275
  if (!specifier.startsWith("."))
574141
574276
  specifier = `./${specifier}`;
574142
574277
  return specifier;
@@ -575107,7 +575242,7 @@ var init_cite2 = __esm(() => {
575107
575242
  });
575108
575243
 
575109
575244
  // src/ur/fileops.ts
575110
- import { existsSync as existsSync54, mkdirSync as mkdirSync48, readdirSync as readdirSync22, readFileSync as readFileSync62, statSync as statSync13, writeFileSync as writeFileSync46 } from "fs";
575245
+ import { existsSync as existsSync54, mkdirSync as mkdirSync48, readdirSync as readdirSync22, readFileSync as readFileSync62, statSync as statSync13, writeFileSync as writeFileSync47 } from "fs";
575111
575246
  import { extname as extname19, isAbsolute as isAbsolute28, join as join178, relative as relative38, resolve as resolve46 } from "path";
575112
575247
  function readFileSafe2(cwd2, target, maxBytes = 64000) {
575113
575248
  const abs = isAbsolute28(target) ? target : resolve46(cwd2, target);
@@ -575180,7 +575315,7 @@ function indexWorkspace(cwd2) {
575180
575315
  const files = [...walk(cwd2, cwd2)];
575181
575316
  try {
575182
575317
  mkdirSync48(join178(cwd2, ".ur", "index"), { recursive: true });
575183
- writeFileSync46(join178(cwd2, ".ur", "index", "files.txt"), files.join(`
575318
+ writeFileSync47(join178(cwd2, ".ur", "index", "files.txt"), files.join(`
575184
575319
  `) + `
575185
575320
  `);
575186
575321
  } catch {}
@@ -575605,7 +575740,7 @@ var exports_mode = {};
575605
575740
  __export(exports_mode, {
575606
575741
  call: () => call110
575607
575742
  });
575608
- import { existsSync as existsSync57, mkdirSync as mkdirSync49, readFileSync as readFileSync63, writeFileSync as writeFileSync47 } from "fs";
575743
+ import { existsSync as existsSync57, mkdirSync as mkdirSync49, readFileSync as readFileSync63, writeFileSync as writeFileSync48 } from "fs";
575609
575744
  import { join as join179 } from "path";
575610
575745
  var MODES, SECURITY_MODES2, file2 = (cwd2) => join179(cwd2, ".ur", "mode"), call110 = async (args) => {
575611
575746
  const want = (args ?? "").trim().toLowerCase();
@@ -575626,7 +575761,7 @@ security: ${SECURITY_MODES2.join(", ")}` };
575626
575761
  }
575627
575762
  try {
575628
575763
  mkdirSync49(join179(getCwd2(), ".ur"), { recursive: true });
575629
- writeFileSync47(f, want + `
575764
+ writeFileSync48(f, want + `
575630
575765
  `);
575631
575766
  } catch {}
575632
575767
  return { type: "text", value: `mode \u2192 ${want} (UR will favor ${want}-oriented behavior; persisted to .ur/mode)` };
@@ -575748,7 +575883,7 @@ var exports_role_mode = {};
575748
575883
  __export(exports_role_mode, {
575749
575884
  call: () => call111
575750
575885
  });
575751
- import { existsSync as existsSync58, mkdirSync as mkdirSync50, writeFileSync as writeFileSync48 } from "fs";
575886
+ import { existsSync as existsSync58, mkdirSync as mkdirSync50, writeFileSync as writeFileSync49 } from "fs";
575752
575887
  import { join as join180 } from "path";
575753
575888
  function formatList() {
575754
575889
  const lines = ["Built-in role modes:", ""];
@@ -575813,7 +575948,7 @@ var call111 = async (args) => {
575813
575948
  skipped.push(`${mode2.name} (exists; use --force to overwrite)`);
575814
575949
  continue;
575815
575950
  }
575816
- writeFileSync48(path22, renderModeAgent(mode2), { encoding: "utf-8" });
575951
+ writeFileSync49(path22, renderModeAgent(mode2), { encoding: "utf-8" });
575817
575952
  created.push(path22);
575818
575953
  }
575819
575954
  if (json2) {
@@ -575860,14 +575995,14 @@ var init_role_mode2 = __esm(() => {
575860
575995
 
575861
575996
  // src/ur/researchGraph.ts
575862
575997
  import { appendFileSync as appendFileSync6, existsSync as existsSync59, mkdirSync as mkdirSync51, readFileSync as readFileSync64 } from "fs";
575863
- import { dirname as dirname66, join as join181 } from "path";
575998
+ import { dirname as dirname67, join as join181 } from "path";
575864
575999
  function isEntity(s) {
575865
576000
  return ENTITIES.includes(s);
575866
576001
  }
575867
576002
  function addEntity(cwd2, entity, text) {
575868
576003
  try {
575869
576004
  const f = file3(cwd2, entity);
575870
- mkdirSync51(dirname66(f), { recursive: true });
576005
+ mkdirSync51(dirname67(f), { recursive: true });
575871
576006
  appendFileSync6(f, JSON.stringify({ ts: new Date().toISOString(), text }) + `
575872
576007
  `);
575873
576008
  } catch {}
@@ -575960,7 +576095,7 @@ var exports_toolsmith = {};
575960
576095
  __export(exports_toolsmith, {
575961
576096
  call: () => call113
575962
576097
  });
575963
- import { existsSync as existsSync60, mkdirSync as mkdirSync52, readdirSync as readdirSync23, writeFileSync as writeFileSync49 } from "fs";
576098
+ import { existsSync as existsSync60, mkdirSync as mkdirSync52, readdirSync as readdirSync23, writeFileSync as writeFileSync50 } from "fs";
575964
576099
  import { join as join182 } from "path";
575965
576100
  var TEMPLATES, call113 = async (args) => {
575966
576101
  const [name, langArg] = (args ?? "").trim().split(/\s+/).filter(Boolean);
@@ -575980,7 +576115,7 @@ var TEMPLATES, call113 = async (args) => {
575980
576115
  const file4 = join182(dir, `${name}.${tpl.ext}`);
575981
576116
  if (existsSync60(file4))
575982
576117
  return { type: "text", value: `already exists: .ur/tools/${name}.${tpl.ext}` };
575983
- writeFileSync49(file4, tpl.body);
576118
+ writeFileSync50(file4, tpl.body);
575984
576119
  return { type: "text", value: `created .ur/tools/${name}.${tpl.ext}
575985
576120
  Ask UR to run it \u2014 it will request approval before executing, and you can keep it as a plugin if useful.` };
575986
576121
  };
@@ -576103,7 +576238,7 @@ var init_ur_doctor2 = __esm(() => {
576103
576238
  });
576104
576239
 
576105
576240
  // src/utils/urAssets.ts
576106
- import { existsSync as existsSync62, mkdirSync as mkdirSync53, writeFileSync as writeFileSync50 } from "fs";
576241
+ import { existsSync as existsSync62, mkdirSync as mkdirSync53, writeFileSync as writeFileSync51 } from "fs";
576107
576242
  import { join as join184 } from "path";
576108
576243
  function scaffoldUrAssets(cwd2) {
576109
576244
  const root2 = join184(cwd2, ".ur");
@@ -576118,7 +576253,7 @@ function scaffoldUrAssets(cwd2) {
576118
576253
  skipped.push(file4.path);
576119
576254
  continue;
576120
576255
  }
576121
- writeFileSync50(full, file4.content);
576256
+ writeFileSync51(full, file4.content);
576122
576257
  created.push(file4.path);
576123
576258
  }
576124
576259
  return { root: root2, created, skipped };
@@ -589571,7 +589706,7 @@ var init_rewind = __esm(() => {
589571
589706
  });
589572
589707
 
589573
589708
  // src/utils/heapDumpService.ts
589574
- import { createWriteStream as createWriteStream3, writeFileSync as writeFileSync51 } from "fs";
589709
+ import { createWriteStream as createWriteStream3, writeFileSync as writeFileSync52 } from "fs";
589575
589710
  import { readdir as readdir27, readFile as readFile47, writeFile as writeFile40 } from "fs/promises";
589576
589711
  import { join as join188 } from "path";
589577
589712
  import { pipeline as pipeline2 } from "stream/promises";
@@ -589663,7 +589798,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
589663
589798
  smapsRollup,
589664
589799
  platform: process.platform,
589665
589800
  nodeVersion: process.version,
589666
- ccVersion: "1.24.1"
589801
+ ccVersion: "1.25.1"
589667
589802
  };
589668
589803
  }
589669
589804
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -589710,7 +589845,7 @@ async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
589710
589845
  }
589711
589846
  async function writeHeapSnapshot(filepath) {
589712
589847
  if (typeof Bun !== "undefined") {
589713
- writeFileSync51(filepath, Bun.generateHeapSnapshot("v8", "arraybuffer"), {
589848
+ writeFileSync52(filepath, Bun.generateHeapSnapshot("v8", "arraybuffer"), {
589714
589849
  mode: 384
589715
589850
  });
589716
589851
  Bun.gc(true);
@@ -590249,7 +590384,7 @@ var init_bridge_kick = __esm(() => {
590249
590384
  var call136 = async () => {
590250
590385
  return {
590251
590386
  type: "text",
590252
- value: "1.24.1"
590387
+ value: "1.25.1"
590253
590388
  };
590254
590389
  }, version2, version_default;
590255
590390
  var init_version = __esm(() => {
@@ -592305,7 +592440,7 @@ var init_advisor2 = __esm(() => {
592305
592440
  // src/skills/bundledSkills.ts
592306
592441
  import { constants as fsConstants5 } from "fs";
592307
592442
  import { mkdir as mkdir37, open as open13 } from "fs/promises";
592308
- import { dirname as dirname67, isAbsolute as isAbsolute31, join as join191, normalize as normalize13, sep as pathSep3 } from "path";
592443
+ import { dirname as dirname68, isAbsolute as isAbsolute31, join as join191, normalize as normalize13, sep as pathSep3 } from "path";
592309
592444
  function registerBundledSkill(definition) {
592310
592445
  const { files: files2 } = definition;
592311
592446
  let skillRoot;
@@ -592369,7 +592504,7 @@ async function writeSkillFiles(dir, files2) {
592369
592504
  const byParent = new Map;
592370
592505
  for (const [relPath, content] of Object.entries(files2)) {
592371
592506
  const target = resolveSkillFilePath(dir, relPath);
592372
- const parent2 = dirname67(target);
592507
+ const parent2 = dirname68(target);
592373
592508
  const entry = [target, content];
592374
592509
  const group = byParent.get(parent2);
592375
592510
  if (group)
@@ -594796,7 +594931,7 @@ Effort levels:
594796
594931
  - low: Quick, straightforward implementation
594797
594932
  - medium: Balanced approach with standard testing
594798
594933
  - high: Comprehensive implementation with extensive testing
594799
- - max: Maximum capability with deepest reasoning (modelO 4.6 only)
594934
+ - max: Maximum capability with deepest reasoning
594800
594935
  - auto: Use the default effort level for your model`);
594801
594936
  return;
594802
594937
  }
@@ -599341,7 +599476,7 @@ function generateHtmlReport(data, insights) {
599341
599476
  </html>`;
599342
599477
  }
599343
599478
  function buildExportData(data, insights, facets, remoteStats) {
599344
- const version3 = typeof MACRO !== "undefined" ? "1.24.1" : "unknown";
599479
+ const version3 = typeof MACRO !== "undefined" ? "1.25.1" : "unknown";
599345
599480
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
599346
599481
  const facets_summary = {
599347
599482
  total: facets.size,
@@ -600787,7 +600922,7 @@ import {
600787
600922
  unlink as unlink22,
600788
600923
  writeFile as writeFile44
600789
600924
  } from "fs/promises";
600790
- import { basename as basename44, dirname as dirname69, join as join198 } from "path";
600925
+ import { basename as basename44, dirname as dirname70, join as join198 } from "path";
600791
600926
  function isTranscriptMessage(entry) {
600792
600927
  const t = entry.type;
600793
600928
  return t === "user" || t === "assistant" || t === "attachment" || t === "system";
@@ -600833,7 +600968,7 @@ function getAgentMetadataPath(agentId) {
600833
600968
  }
600834
600969
  async function writeAgentMetadata(agentId, metadata) {
600835
600970
  const path22 = getAgentMetadataPath(agentId);
600836
- await mkdir40(dirname69(path22), { recursive: true });
600971
+ await mkdir40(dirname70(path22), { recursive: true });
600837
600972
  await writeFile44(path22, JSON.stringify(metadata));
600838
600973
  }
600839
600974
  async function readAgentMetadata(agentId) {
@@ -600856,7 +600991,7 @@ function getRemoteAgentMetadataPath(taskId) {
600856
600991
  }
600857
600992
  async function writeRemoteAgentMetadata(taskId, metadata) {
600858
600993
  const path22 = getRemoteAgentMetadataPath(taskId);
600859
- await mkdir40(dirname69(path22), { recursive: true });
600994
+ await mkdir40(dirname70(path22), { recursive: true });
600860
600995
  await writeFile44(path22, JSON.stringify(metadata));
600861
600996
  }
600862
600997
  async function readRemoteAgentMetadata(taskId) {
@@ -601045,7 +601180,7 @@ class Project {
601045
601180
  try {
601046
601181
  await fsAppendFile(filePath, data, { mode: 384 });
601047
601182
  } catch {
601048
- await mkdir40(dirname69(filePath), { recursive: true, mode: 448 });
601183
+ await mkdir40(dirname70(filePath), { recursive: true, mode: 448 });
601049
601184
  await fsAppendFile(filePath, data, { mode: 384 });
601050
601185
  }
601051
601186
  }
@@ -601645,7 +601780,7 @@ async function hydrateFromCCRv2InternalEvents(sessionId) {
601645
601780
  }
601646
601781
  for (const [agentId, entries] of byAgent) {
601647
601782
  const agentFile = getAgentTranscriptPath(asAgentId(agentId));
601648
- await mkdir40(dirname69(agentFile), { recursive: true, mode: 448 });
601783
+ await mkdir40(dirname70(agentFile), { recursive: true, mode: 448 });
601649
601784
  const agentContent = entries.map((p2) => jsonStringify(p2) + `
601650
601785
  `).join("");
601651
601786
  await writeFile44(agentFile, agentContent, {
@@ -602182,7 +602317,7 @@ function appendEntryToFile(fullPath, entry) {
602182
602317
  try {
602183
602318
  fs12.appendFileSync(fullPath, line, { mode: 384 });
602184
602319
  } catch {
602185
- fs12.mkdirSync(dirname69(fullPath), { mode: 448 });
602320
+ fs12.mkdirSync(dirname70(fullPath), { mode: 448 });
602186
602321
  fs12.appendFileSync(fullPath, line, { mode: 384 });
602187
602322
  }
602188
602323
  }
@@ -603616,7 +603751,7 @@ var init_sessionStorage = __esm(() => {
603616
603751
  init_settings2();
603617
603752
  init_slowOperations();
603618
603753
  init_uuid();
603619
- VERSION5 = typeof MACRO !== "undefined" ? "1.24.1" : "unknown";
603754
+ VERSION5 = typeof MACRO !== "undefined" ? "1.25.1" : "unknown";
603620
603755
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
603621
603756
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
603622
603757
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -604821,7 +604956,7 @@ var init_filesystem = __esm(() => {
604821
604956
  });
604822
604957
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
604823
604958
  const nonce = randomBytes18(16).toString("hex");
604824
- return join200(getURTempDir(), "bundled-skills", "1.24.1", nonce);
604959
+ return join200(getURTempDir(), "bundled-skills", "1.25.1", nonce);
604825
604960
  });
604826
604961
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
604827
604962
  });
@@ -609372,7 +609507,7 @@ import {
609372
609507
  symlink as symlink5,
609373
609508
  utimes as utimes2
609374
609509
  } from "fs/promises";
609375
- import { basename as basename46, dirname as dirname70, join as join202 } from "path";
609510
+ import { basename as basename46, dirname as dirname71, join as join202 } from "path";
609376
609511
  function validateWorktreeSlug(slug4) {
609377
609512
  if (slug4.length > MAX_WORKTREE_SLUG_LENGTH) {
609378
609513
  throw new Error(`Invalid worktree name: must be ${MAX_WORKTREE_SLUG_LENGTH} characters or fewer (got ${slug4.length})`);
@@ -609568,7 +609703,7 @@ async function copyWorktreeIncludeFiles(repoRoot, worktreePath) {
609568
609703
  const srcPath = join202(repoRoot, relativePath3);
609569
609704
  const destPath = join202(worktreePath, relativePath3);
609570
609705
  try {
609571
- await mkdir42(dirname70(destPath), { recursive: true });
609706
+ await mkdir42(dirname71(destPath), { recursive: true });
609572
609707
  await copyFile10(srcPath, destPath);
609573
609708
  copied.push(relativePath3);
609574
609709
  } catch (e) {
@@ -609585,7 +609720,7 @@ async function performPostCreationSetup(repoRoot, worktreePath) {
609585
609720
  const sourceSettingsLocal = join202(repoRoot, localSettingsRelativePath);
609586
609721
  try {
609587
609722
  const destSettingsLocal = join202(worktreePath, localSettingsRelativePath);
609588
- await mkdirRecursive(dirname70(destSettingsLocal));
609723
+ await mkdirRecursive(dirname71(destSettingsLocal));
609589
609724
  await copyFile10(sourceSettingsLocal, destSettingsLocal);
609590
609725
  logForDebugging(`Copied settings.local.json to worktree: ${destSettingsLocal}`);
609591
609726
  } catch (e) {
@@ -610372,7 +610507,7 @@ function getSessionSpecificGuidanceSection(enabledTools, skillToolCommands) {
610372
610507
  const hasAgentTool = enabledTools.has(AGENT_TOOL_NAME);
610373
610508
  const searchTools = hasEmbeddedSearchTools() ? `\`find\` or \`grep\` via the ${BASH_TOOL_NAME} tool` : `the ${GLOB_TOOL_NAME} or ${GREP_TOOL_NAME}`;
610374
610509
  const items = [
610375
- hasAskUserQuestionTool ? `When a request is ambiguous, underspecified, or could reasonably be done more than one way, ask with ${ASK_USER_QUESTION_TOOL_NAME} BEFORE doing significant or hard-to-reverse work, and use it the same way to confirm direction at key planning decisions. ALWAYS call the ${ASK_USER_QUESTION_TOOL_NAME} tool to ask such questions \u2014 NEVER write the questions and choices as plain prose in your reply, because the user can only pick options when you call the tool. Offer 2-4 concrete options per question (put any recommendation first and suffix it "(Recommended)"); the user picks with arrow keys and can always choose "Other" to type a custom answer. Don't ask what you can determine yourself, and ask no more than necessary. Also use it if you don't understand why the user denied a tool call.` : null,
610510
+ hasAskUserQuestionTool ? `When a request is ambiguous, underspecified, or could reasonably be done more than one way, ask with ${ASK_USER_QUESTION_TOOL_NAME} BEFORE doing significant or hard-to-reverse work, and use it the same way to confirm direction at key planning decisions. ALWAYS call the ${ASK_USER_QUESTION_TOOL_NAME} tool to ask such questions \u2014 NEVER write the questions and choices as plain prose in your reply, because the user can only pick options when you call the tool. Offer 2-8 concrete options per question (put any recommendation first and suffix it "(Recommended)"); the user picks with arrow keys and can always choose "Other" to type a custom answer. Don't ask what you can determine yourself, and ask no more than necessary. Also use it if you don't understand why the user denied a tool call.` : null,
610376
610511
  getIsNonInteractiveSession() ? null : `If you need the user to run a shell command themselves (e.g., an interactive login like \`gcloud auth login\`), suggest they type \`! <command>\` in the prompt \u2014 the \`!\` prefix runs the command in this session so its output lands directly in the conversation.`,
610377
610512
  hasAgentTool ? getAgentToolSection() : null,
610378
610513
  ...hasAgentTool && areExplorePlanAgentsEnabled() && !isForkSubagentEnabled() ? [
@@ -611111,7 +611246,7 @@ function computeFingerprint(messageText, version3) {
611111
611246
  }
611112
611247
  function computeFingerprintFromMessages(messages) {
611113
611248
  const firstMessageText = extractFirstMessageText(messages);
611114
- return computeFingerprint(firstMessageText, "1.24.1");
611249
+ return computeFingerprint(firstMessageText, "1.25.1");
611115
611250
  }
611116
611251
  var FINGERPRINT_SALT = "59cf53e54c78";
611117
611252
  var init_fingerprint = () => {};
@@ -612977,7 +613112,7 @@ async function sideQuery(opts) {
612977
613112
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
612978
613113
  }
612979
613114
  const messageText = extractFirstUserMessageText(messages);
612980
- const fingerprint = computeFingerprint(messageText, "1.24.1");
613115
+ const fingerprint = computeFingerprint(messageText, "1.25.1");
612981
613116
  const attributionHeader = getAttributionHeader(fingerprint);
612982
613117
  const systemBlocks = [
612983
613118
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -617714,7 +617849,7 @@ function buildSystemInitMessage(inputs) {
617714
617849
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
617715
617850
  apiKeySource: getURHQApiKeyWithSource().source,
617716
617851
  betas: getSdkBetas(),
617717
- ur_version: "1.24.1",
617852
+ ur_version: "1.25.1",
617718
617853
  output_style: outputStyle2,
617719
617854
  agents: inputs.agents.map((agent) => agent.agentType),
617720
617855
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -632342,7 +632477,7 @@ var init_useVoiceEnabled = __esm(() => {
632342
632477
  function getSemverPart(version3) {
632343
632478
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
632344
632479
  }
632345
- function useUpdateNotification(updatedVersion, initialVersion = "1.24.1") {
632480
+ function useUpdateNotification(updatedVersion, initialVersion = "1.25.1") {
632346
632481
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react224.useState(() => getSemverPart(initialVersion));
632347
632482
  if (!updatedVersion) {
632348
632483
  return null;
@@ -632391,7 +632526,7 @@ function AutoUpdater({
632391
632526
  return;
632392
632527
  }
632393
632528
  if (false) {}
632394
- const currentVersion = "1.24.1";
632529
+ const currentVersion = "1.25.1";
632395
632530
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
632396
632531
  let latestVersion = await getLatestVersion(channel);
632397
632532
  const isDisabled = isAutoUpdaterDisabled();
@@ -632620,12 +632755,12 @@ function NativeAutoUpdater({
632620
632755
  logEvent("tengu_native_auto_updater_start", {});
632621
632756
  try {
632622
632757
  const maxVersion = await getMaxVersion();
632623
- if (maxVersion && gt("1.24.1", maxVersion)) {
632758
+ if (maxVersion && gt("1.25.1", maxVersion)) {
632624
632759
  const msg = await getMaxVersionMessage();
632625
632760
  setMaxVersionIssue(msg ?? "affects your version");
632626
632761
  }
632627
632762
  const result = await installLatest(channel);
632628
- const currentVersion = "1.24.1";
632763
+ const currentVersion = "1.25.1";
632629
632764
  const latencyMs = Date.now() - startTime;
632630
632765
  if (result.lockFailed) {
632631
632766
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -632762,17 +632897,17 @@ function PackageManagerAutoUpdater(t0) {
632762
632897
  const maxVersion = await getMaxVersion();
632763
632898
  if (maxVersion && latest && gt(latest, maxVersion)) {
632764
632899
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
632765
- if (gte("1.24.1", maxVersion)) {
632766
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.24.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
632900
+ if (gte("1.25.1", maxVersion)) {
632901
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.25.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
632767
632902
  setUpdateAvailable(false);
632768
632903
  return;
632769
632904
  }
632770
632905
  latest = maxVersion;
632771
632906
  }
632772
- const hasUpdate = latest && !gte("1.24.1", latest) && !shouldSkipVersion(latest);
632907
+ const hasUpdate = latest && !gte("1.25.1", latest) && !shouldSkipVersion(latest);
632773
632908
  setUpdateAvailable(!!hasUpdate);
632774
632909
  if (hasUpdate) {
632775
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.24.1"} -> ${latest}`);
632910
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.25.1"} -> ${latest}`);
632776
632911
  }
632777
632912
  };
632778
632913
  $3[0] = t1;
@@ -632806,7 +632941,7 @@ function PackageManagerAutoUpdater(t0) {
632806
632941
  wrap: "truncate",
632807
632942
  children: [
632808
632943
  "currentVersion: ",
632809
- "1.24.1"
632944
+ "1.25.1"
632810
632945
  ]
632811
632946
  }, undefined, true, undefined, this);
632812
632947
  $3[3] = verbose;
@@ -645119,6 +645254,715 @@ var init_VimTextInput = __esm(() => {
645119
645254
  jsx_dev_runtime420 = __toESM(require_jsx_dev_runtime(), 1);
645120
645255
  });
645121
645256
 
645257
+ // src/services/providers/providerRegistry.ts
645258
+ import { spawn as spawn12 } from "child_process";
645259
+ function isProviderId(value) {
645260
+ return PROVIDER_IDS.includes(value);
645261
+ }
645262
+ function getProviderDefinition(id) {
645263
+ return PROVIDERS[id];
645264
+ }
645265
+ function getActiveProviderSettings(settings = getInitialSettings()) {
645266
+ const configured = settings.provider ?? {};
645267
+ const active = configured.active && isProviderId(configured.active) ? configured.active : "ollama";
645268
+ return {
645269
+ active,
645270
+ model: configured.model ?? settings.model,
645271
+ baseUrl: configured.baseUrl,
645272
+ commandPath: configured.commandPath,
645273
+ fallback: configured.fallback
645274
+ };
645275
+ }
645276
+ function getProviderRuntimeInfo(settings = getInitialSettings()) {
645277
+ const providerSettings = getActiveProviderSettings(settings);
645278
+ const provider = providerSettings.active ?? "ollama";
645279
+ const definition = getProviderDefinition(provider);
645280
+ return {
645281
+ provider,
645282
+ providerLabel: definition.statusBarName,
645283
+ authMode: definition.authMode,
645284
+ authLabel: authModeLabel(definition.authMode),
645285
+ model: providerSettings.model,
645286
+ baseUrl: providerSettings.baseUrl ?? definition.defaultBaseUrl,
645287
+ fallback: providerSettings.fallback
645288
+ };
645289
+ }
645290
+ function authModeLabel(mode2) {
645291
+ switch (mode2) {
645292
+ case "subscription":
645293
+ return "subscription";
645294
+ case "enterprise-login":
645295
+ return "enterprise-login";
645296
+ case "personal-login":
645297
+ return "personal-login";
645298
+ case "api":
645299
+ return "API";
645300
+ case "local":
645301
+ return "local";
645302
+ }
645303
+ }
645304
+ function listProviders() {
645305
+ return PROVIDER_IDS.map((id) => PROVIDERS[id]);
645306
+ }
645307
+ function hasSecretLikeValue(value) {
645308
+ const trimmed = value.trim();
645309
+ if (/^(sk-|sk_|sk-proj-|sk-ant-|xox[baprs]-|gh[pousr]_|AIza)/i.test(trimmed)) {
645310
+ return true;
645311
+ }
645312
+ if (/token|refresh|oauth|secret|api[_-]?key/i.test(trimmed)) {
645313
+ return true;
645314
+ }
645315
+ try {
645316
+ const url3 = new URL(trimmed);
645317
+ return Boolean(url3.username || url3.password);
645318
+ } catch {
645319
+ return false;
645320
+ }
645321
+ }
645322
+ function normalizeBaseUrl2(value) {
645323
+ const trimmed = value.trim();
645324
+ const withScheme = /^https?:\/\//i.test(trimmed) ? trimmed : `http://${trimmed}`;
645325
+ const url3 = new URL(withScheme);
645326
+ if (url3.username || url3.password) {
645327
+ throw new Error("base_url must not contain embedded credentials");
645328
+ }
645329
+ return withScheme.replace(/\/$/, "");
645330
+ }
645331
+ function setSafeProviderConfig(key, value) {
645332
+ const trimmed = value.trim();
645333
+ if (!trimmed) {
645334
+ return { ok: false, message: `Missing value for ${key}.` };
645335
+ }
645336
+ if (hasSecretLikeValue(trimmed)) {
645337
+ return {
645338
+ ok: false,
645339
+ message: "Refusing to store credential-like data. Put API keys in environment variables and select API mode explicitly."
645340
+ };
645341
+ }
645342
+ let settings;
645343
+ try {
645344
+ if (key === "provider") {
645345
+ if (!isProviderId(trimmed)) {
645346
+ return {
645347
+ ok: false,
645348
+ message: `Unknown provider "${trimmed}". Run: ur provider list`
645349
+ };
645350
+ }
645351
+ settings = { provider: { active: trimmed } };
645352
+ } else if (key === "provider.fallback") {
645353
+ if (trimmed !== "disabled" && !isProviderId(trimmed)) {
645354
+ return {
645355
+ ok: false,
645356
+ message: `Unknown fallback provider "${trimmed}". Run: ur provider list`
645357
+ };
645358
+ }
645359
+ settings = { provider: { fallback: trimmed } };
645360
+ } else if (key === "provider.command_path") {
645361
+ settings = { provider: { commandPath: trimmed } };
645362
+ } else if (key === "model") {
645363
+ settings = { provider: { model: trimmed }, model: trimmed };
645364
+ } else {
645365
+ settings = { provider: { baseUrl: normalizeBaseUrl2(trimmed) } };
645366
+ }
645367
+ } catch (error40) {
645368
+ return {
645369
+ ok: false,
645370
+ message: error40 instanceof Error ? error40.message : String(error40)
645371
+ };
645372
+ }
645373
+ const result = updateSettingsForSource("userSettings", settings);
645374
+ if (result.error) {
645375
+ return {
645376
+ ok: false,
645377
+ message: `Failed to write UR-AGENT settings: ${result.error.message}`
645378
+ };
645379
+ }
645380
+ return { ok: true, message: `Set ${key} to ${trimmed}.` };
645381
+ }
645382
+ function outputText(result) {
645383
+ return `${result.stdout}
645384
+ ${result.stderr}
645385
+ ${result.error ?? ""}`.trim();
645386
+ }
645387
+ function classifiesAsLoggedIn(text) {
645388
+ return /logged in|authenticated|signed in|active account|using chatgpt/i.test(text);
645389
+ }
645390
+ function classifiesAsNotLoggedIn(text) {
645391
+ return /not logged in|not authenticated|not signed in|login required|unauthenticated/i.test(text);
645392
+ }
645393
+ function classifyGeminiAccountSupport(text) {
645394
+ if (/personal.*unsupported|unsupported.*personal|consumer.*unsupported/i.test(text)) {
645395
+ return "personal-unsupported";
645396
+ }
645397
+ if (/enterprise|standard|code assist|workspace/i.test(text)) {
645398
+ return "enterprise-supported";
645399
+ }
645400
+ return "unknown";
645401
+ }
645402
+ async function resolveCommand(definition, settings, adapters) {
645403
+ if (settings.commandPath) {
645404
+ return settings.commandPath;
645405
+ }
645406
+ for (const candidate of definition.commandCandidates ?? []) {
645407
+ const found = await (adapters.which ?? which)(candidate);
645408
+ if (found)
645409
+ return found;
645410
+ }
645411
+ return null;
645412
+ }
645413
+ async function runCommand(file4, args, adapters) {
645414
+ if (adapters.run) {
645415
+ return adapters.run(file4, args);
645416
+ }
645417
+ return execFileNoThrow(file4, args, {
645418
+ timeout: 15000,
645419
+ preserveOutputOnError: true,
645420
+ audit: false
645421
+ });
645422
+ }
645423
+ function addFailure(result, reason, fix) {
645424
+ result.ok = false;
645425
+ result.failureReason ??= reason;
645426
+ result.suggestedFix ??= fix;
645427
+ }
645428
+ function endpointUrl(baseUrl, kind) {
645429
+ const trimmed = baseUrl.replace(/\/$/, "");
645430
+ if (kind === "ollama") {
645431
+ return `${trimmed}/api/tags`;
645432
+ }
645433
+ return `${trimmed}/models`;
645434
+ }
645435
+ function isLocalBaseUrl(value) {
645436
+ return LOCALHOST_RE.test(value);
645437
+ }
645438
+ async function checkEndpoint(definition, settings, adapters, result) {
645439
+ if (!definition.endpointKind)
645440
+ return;
645441
+ const baseUrl = settings.baseUrl ?? definition.defaultBaseUrl;
645442
+ if (!baseUrl) {
645443
+ result.checks.push({
645444
+ name: "base_url",
645445
+ status: "fail",
645446
+ message: "No base_url configured."
645447
+ });
645448
+ addFailure(result, "missing base_url", "Run: ur config set base_url <url>");
645449
+ return;
645450
+ }
645451
+ const url3 = endpointUrl(baseUrl, definition.endpointKind);
645452
+ try {
645453
+ const response = await (adapters.fetch ?? fetch)(url3, {
645454
+ method: "GET",
645455
+ headers: definition.accessType === "api" && (adapters.env ?? process.env)[definition.envKey ?? ""] ? { Authorization: `Bearer ${(adapters.env ?? process.env)[definition.envKey ?? ""]}` } : undefined
645456
+ });
645457
+ if (!response.ok) {
645458
+ result.checks.push({
645459
+ name: "endpoint",
645460
+ status: "fail",
645461
+ message: `${url3} returned HTTP ${response.status}.`
645462
+ });
645463
+ addFailure(result, `endpoint returned HTTP ${response.status}`, `Start the provider server or update base_url: ur config set base_url ${baseUrl}`);
645464
+ return;
645465
+ }
645466
+ result.checks.push({
645467
+ name: "endpoint",
645468
+ status: "pass",
645469
+ message: `${url3} is reachable.`
645470
+ });
645471
+ if (settings.model) {
645472
+ const body = await response.text().catch(() => "");
645473
+ if (body && !body.includes(settings.model)) {
645474
+ result.checks.push({
645475
+ name: "model",
645476
+ status: "warn",
645477
+ message: `Model "${settings.model}" was not found in the detectable model list.`
645478
+ });
645479
+ } else {
645480
+ result.checks.push({
645481
+ name: "model",
645482
+ status: "pass",
645483
+ message: `Model "${settings.model}" is detectable.`
645484
+ });
645485
+ }
645486
+ }
645487
+ } catch (error40) {
645488
+ result.checks.push({
645489
+ name: "endpoint",
645490
+ status: "fail",
645491
+ message: `${url3} is not reachable.`
645492
+ });
645493
+ addFailure(result, error40 instanceof Error ? error40.message : "endpoint unavailable", `Start the provider server or update base_url: ur config set base_url ${baseUrl}`);
645494
+ }
645495
+ }
645496
+ async function checkSubscriptionProvider(definition, settings, adapters, result) {
645497
+ const commandPath = await resolveCommand(definition, settings, adapters);
645498
+ if (!commandPath) {
645499
+ const command8 = definition.commandCandidates?.[0] ?? definition.id;
645500
+ result.checks.push({
645501
+ name: "cli",
645502
+ status: "fail",
645503
+ message: `${command8} is not installed or not on PATH.`
645504
+ });
645505
+ addFailure(result, "CLI missing", `Install the official ${definition.displayName} CLI, then run ur auth ${authAliasForProvider(definition.id)}.`);
645506
+ return;
645507
+ }
645508
+ result.checks.push({
645509
+ name: "cli",
645510
+ status: "pass",
645511
+ message: `${commandPath} found.`
645512
+ });
645513
+ if (definition.versionArgs) {
645514
+ const version3 = await runCommand(commandPath, definition.versionArgs, adapters);
645515
+ result.checks.push({
645516
+ name: "version",
645517
+ status: version3.code === 0 ? "pass" : "warn",
645518
+ message: outputText(version3) || `${definition.displayName} version check exited ${version3.code}.`
645519
+ });
645520
+ }
645521
+ if (definition.id === "claude-code-cli" && (adapters.env ?? process.env).ANTHROPIC_API_KEY) {
645522
+ result.checks.push({
645523
+ name: "api_key_override",
645524
+ status: "warn",
645525
+ message: "ANTHROPIC_API_KEY is set and may override Claude Code subscription login. Unset it to test subscription auth."
645526
+ });
645527
+ }
645528
+ if (definition.id === "gemini-cli") {
645529
+ const versionText = result.checks.find((check3) => check3.name === "version")?.message ?? "";
645530
+ const support = classifyGeminiAccountSupport(versionText);
645531
+ if (support === "personal-unsupported") {
645532
+ result.checks.push({
645533
+ name: "account_type",
645534
+ status: "fail",
645535
+ message: definition.unsupportedPersonalAccountMessage ?? "Unsupported account type."
645536
+ });
645537
+ addFailure(result, "unsupported account type", "Use an official Gemini Code Assist Standard/Enterprise login path.");
645538
+ } else if (support === "enterprise-supported") {
645539
+ result.checks.push({
645540
+ name: "account_type",
645541
+ status: "pass",
645542
+ message: "Gemini Code Assist Standard/Enterprise path is supported by the detected CLI output."
645543
+ });
645544
+ } else {
645545
+ result.checks.push({
645546
+ name: "account_type",
645547
+ status: "warn",
645548
+ message: "Gemini CLI status is not exposed by this CLI. UR-AGENT will only use the official Gemini CLI flow and will not support personal-account bypasses."
645549
+ });
645550
+ }
645551
+ }
645552
+ if (!definition.statusArgs) {
645553
+ result.checks.push({
645554
+ name: "login_status",
645555
+ status: "skip",
645556
+ message: "No stable official status command is configured for this provider."
645557
+ });
645558
+ return;
645559
+ }
645560
+ const status2 = await runCommand(commandPath, definition.statusArgs, adapters);
645561
+ const text = outputText(status2);
645562
+ if (status2.code === 0 && !classifiesAsNotLoggedIn(text)) {
645563
+ result.checks.push({
645564
+ name: "login_status",
645565
+ status: classifiesAsLoggedIn(text) ? "pass" : "warn",
645566
+ message: text || "Status command succeeded."
645567
+ });
645568
+ return;
645569
+ }
645570
+ result.checks.push({
645571
+ name: "login_status",
645572
+ status: "fail",
645573
+ message: text || `${definition.displayName} is not logged in.`
645574
+ });
645575
+ addFailure(result, "not logged in", `Run: ur auth ${authAliasForProvider(definition.id)}`);
645576
+ }
645577
+ async function checkApiProvider(definition, settings, adapters, result) {
645578
+ const env4 = adapters.env ?? process.env;
645579
+ const baseUrl = settings.baseUrl ?? definition.defaultBaseUrl;
645580
+ const requiresKey = definition.id !== "openai-compatible" || !baseUrl || !isLocalBaseUrl(baseUrl);
645581
+ if (definition.envKey && requiresKey) {
645582
+ if (env4[definition.envKey]) {
645583
+ result.checks.push({
645584
+ name: "api_key",
645585
+ status: "pass",
645586
+ message: `${definition.envKey} is present.`
645587
+ });
645588
+ } else {
645589
+ result.checks.push({
645590
+ name: "api_key",
645591
+ status: "fail",
645592
+ message: `${definition.envKey} is not set.`
645593
+ });
645594
+ addFailure(result, "API key missing", `Set ${definition.envKey} in your environment or choose a subscription/local provider.`);
645595
+ }
645596
+ }
645597
+ await checkEndpoint(definition, settings, adapters, result);
645598
+ }
645599
+ function fallbackResult(settings, active, ok) {
645600
+ if (ok)
645601
+ return;
645602
+ if (!settings.fallback || settings.fallback === "disabled") {
645603
+ return {
645604
+ enabled: false,
645605
+ message: "Fallback is disabled. UR-AGENT will not silently switch providers. Optional: ur config set provider.fallback ollama"
645606
+ };
645607
+ }
645608
+ if (settings.fallback === active) {
645609
+ return {
645610
+ enabled: false,
645611
+ message: "Fallback points at the selected provider and will not be used."
645612
+ };
645613
+ }
645614
+ return {
645615
+ enabled: true,
645616
+ provider: settings.fallback,
645617
+ message: `Fallback is configured as ${settings.fallback}, but UR-AGENT will ask before using it.`
645618
+ };
645619
+ }
645620
+ async function doctorProvider(provider, options2 = {}) {
645621
+ const allSettings = options2.settings ?? getInitialSettings();
645622
+ const providerSettings = getActiveProviderSettings(allSettings);
645623
+ const active = provider ?? providerSettings.active ?? "ollama";
645624
+ const definition = getProviderDefinition(active);
645625
+ const settingsForProvider = {
645626
+ ...providerSettings,
645627
+ active
645628
+ };
645629
+ const result = {
645630
+ provider: active,
645631
+ displayName: definition.displayName,
645632
+ accessType: definition.accessType,
645633
+ authMode: definition.authMode,
645634
+ selected: active === providerSettings.active,
645635
+ ok: true,
645636
+ checks: [
645637
+ {
645638
+ name: "legal_path",
645639
+ status: "pass",
645640
+ message: definition.legalPath
645641
+ }
645642
+ ]
645643
+ };
645644
+ if (definition.accessType === "subscription") {
645645
+ await checkSubscriptionProvider(definition, settingsForProvider, options2.adapters ?? {}, result);
645646
+ } else if (definition.accessType === "api") {
645647
+ await checkApiProvider(definition, settingsForProvider, options2.adapters ?? {}, result);
645648
+ } else {
645649
+ await checkEndpoint(definition, settingsForProvider, options2.adapters ?? {}, result);
645650
+ }
645651
+ result.fallback = fallbackResult(providerSettings, active, result.ok);
645652
+ return result;
645653
+ }
645654
+ function authAliasForProvider(provider) {
645655
+ switch (provider) {
645656
+ case "codex-cli":
645657
+ return "chatgpt";
645658
+ case "claude-code-cli":
645659
+ return "claude";
645660
+ case "gemini-cli":
645661
+ return "gemini";
645662
+ case "antigravity-cli":
645663
+ return "antigravity";
645664
+ default:
645665
+ return "provider";
645666
+ }
645667
+ }
645668
+ function providerForAuthAlias(alias2) {
645669
+ switch (alias2) {
645670
+ case "chatgpt":
645671
+ return "codex-cli";
645672
+ case "claude":
645673
+ return "claude-code-cli";
645674
+ case "gemini":
645675
+ return "gemini-cli";
645676
+ case "antigravity":
645677
+ return "antigravity-cli";
645678
+ default:
645679
+ return null;
645680
+ }
645681
+ }
645682
+ function buildProviderAuthCommand(provider, options2 = {}) {
645683
+ const definition = getProviderDefinition(provider);
645684
+ const command8 = definition.commandCandidates?.[0];
645685
+ if (!command8)
645686
+ return null;
645687
+ const args = options2.deviceAuth && definition.deviceLoginArgs ? definition.deviceLoginArgs : definition.loginArgs;
645688
+ if (!args)
645689
+ return null;
645690
+ if (provider === "gemini-cli") {
645691
+ return {
645692
+ command: command8,
645693
+ args,
645694
+ instructions: "The detected Gemini CLI does not expose a stable non-interactive login subcommand. Launching the official Gemini CLI is the only supported path; complete the Gemini Code Assist login flow if prompted."
645695
+ };
645696
+ }
645697
+ if (provider === "antigravity-cli") {
645698
+ return {
645699
+ command: command8,
645700
+ args,
645701
+ instructions: "UR-AGENT will only launch the official Antigravity CLI. Use its documented login flow where supported; UR-AGENT will not invent flags or reuse browser sessions."
645702
+ };
645703
+ }
645704
+ return {
645705
+ command: command8,
645706
+ args,
645707
+ instructions: `Launching ${definition.legalPath}.`
645708
+ };
645709
+ }
645710
+ async function launchProviderAuth(alias2, options2 = {}) {
645711
+ const provider = providerForAuthAlias(alias2);
645712
+ if (!provider) {
645713
+ return { ok: false, message: `Unknown auth provider "${alias2}".` };
645714
+ }
645715
+ const authCommand = buildProviderAuthCommand(provider, options2);
645716
+ if (!authCommand) {
645717
+ return {
645718
+ ok: false,
645719
+ message: `No official login command is configured for ${provider}.`
645720
+ };
645721
+ }
645722
+ const commandPath = await resolveCommand(getProviderDefinition(provider), {}, {});
645723
+ if (!commandPath) {
645724
+ return {
645725
+ ok: false,
645726
+ message: `${authCommand.command} is not installed. Install the official CLI first.`
645727
+ };
645728
+ }
645729
+ const printable = [authCommand.command, ...authCommand.args].join(" ");
645730
+ if (options2.dryRun || !process.stdin.isTTY || !process.stdout.isTTY) {
645731
+ return {
645732
+ ok: true,
645733
+ message: `${authCommand.instructions}
645734
+ Run: ${printable}`,
645735
+ command: printable
645736
+ };
645737
+ }
645738
+ await new Promise((resolve49, reject2) => {
645739
+ const child = spawn12(commandPath, authCommand.args, {
645740
+ stdio: "inherit",
645741
+ env: process.env
645742
+ });
645743
+ child.on("error", reject2);
645744
+ child.on("exit", (code) => {
645745
+ if (code === 0)
645746
+ resolve49();
645747
+ else
645748
+ reject2(new Error(`${printable} exited with code ${code ?? 1}`));
645749
+ });
645750
+ });
645751
+ return { ok: true, message: `Completed: ${printable}`, command: printable };
645752
+ }
645753
+ function formatProviderList(json2 = false) {
645754
+ const providers = listProviders().map((provider) => ({
645755
+ id: provider.id,
645756
+ name: provider.displayName,
645757
+ accessType: provider.accessType,
645758
+ authMode: provider.authMode,
645759
+ legalPath: provider.legalPath
645760
+ }));
645761
+ if (json2) {
645762
+ return JSON.stringify(providers, null, 2);
645763
+ }
645764
+ return [
645765
+ "Provider Access type Legal path",
645766
+ "---------------------------------------------------------",
645767
+ ...providers.map((provider) => `${provider.name.padEnd(20)} ${provider.accessType.padEnd(17)} ${provider.legalPath}`)
645768
+ ].join(`
645769
+ `);
645770
+ }
645771
+ function formatProviderDoctor(result, json2 = false) {
645772
+ if (json2) {
645773
+ return JSON.stringify(result, null, 2);
645774
+ }
645775
+ const lines = [
645776
+ `Provider: ${result.displayName} (${result.provider})`,
645777
+ `Auth: ${authModeLabel(result.authMode)}`,
645778
+ `Status: ${result.ok ? "ready" : "not ready"}`
645779
+ ];
645780
+ for (const check3 of result.checks) {
645781
+ lines.push(`- ${check3.status.toUpperCase()} ${check3.name}: ${check3.message}`);
645782
+ }
645783
+ if (result.failureReason) {
645784
+ lines.push(`Failure reason: ${result.failureReason}`);
645785
+ }
645786
+ if (result.suggestedFix) {
645787
+ lines.push(`Suggested fix: ${result.suggestedFix}`);
645788
+ }
645789
+ if (result.fallback) {
645790
+ lines.push(`Fallback: ${result.fallback.message}`);
645791
+ }
645792
+ return lines.join(`
645793
+ `);
645794
+ }
645795
+ function formatProviderStatus(result, json2 = false) {
645796
+ if (json2) {
645797
+ return JSON.stringify(result, null, 2);
645798
+ }
645799
+ const failure = result.failureReason ? `
645800
+ Failure reason: ${result.failureReason}` : "";
645801
+ const fix = result.suggestedFix ? `
645802
+ Suggested fix: ${result.suggestedFix}` : "";
645803
+ return `Selected provider: ${result.displayName} (${result.provider})
645804
+ Auth mode: ${authModeLabel(result.authMode)}
645805
+ Ready: ${result.ok ? "yes" : "no"}${failure}${fix}`;
645806
+ }
645807
+ var PROVIDER_IDS, LOCALHOST_RE, PROVIDERS;
645808
+ var init_providerRegistry = __esm(() => {
645809
+ init_execFileNoThrow();
645810
+ init_settings2();
645811
+ init_which();
645812
+ PROVIDER_IDS = [
645813
+ "codex-cli",
645814
+ "claude-code-cli",
645815
+ "gemini-cli",
645816
+ "antigravity-cli",
645817
+ "openai-api",
645818
+ "anthropic-api",
645819
+ "gemini-api",
645820
+ "openrouter",
645821
+ "openai-compatible",
645822
+ "ollama",
645823
+ "lmstudio",
645824
+ "llama.cpp",
645825
+ "vllm"
645826
+ ];
645827
+ LOCALHOST_RE = /^(https?:\/\/)?(localhost|127\.0\.0\.1|\[::1\]|::1)(:\d+)?(\/|$)/i;
645828
+ PROVIDERS = {
645829
+ "codex-cli": {
645830
+ id: "codex-cli",
645831
+ displayName: "ChatGPT/Codex",
645832
+ statusBarName: "ChatGPT/Codex",
645833
+ accessType: "subscription",
645834
+ authMode: "subscription",
645835
+ legalPath: "official Codex CLI login",
645836
+ commandCandidates: ["codex"],
645837
+ versionArgs: ["--version"],
645838
+ statusArgs: ["login", "status"],
645839
+ loginArgs: ["login"],
645840
+ deviceLoginArgs: ["login", "--device-auth"]
645841
+ },
645842
+ "claude-code-cli": {
645843
+ id: "claude-code-cli",
645844
+ displayName: "Claude Code",
645845
+ statusBarName: "Claude Code",
645846
+ accessType: "subscription",
645847
+ authMode: "subscription",
645848
+ legalPath: "official Claude Code CLI login",
645849
+ commandCandidates: ["claude"],
645850
+ versionArgs: ["--version"],
645851
+ statusArgs: ["auth", "status"],
645852
+ loginArgs: ["auth", "login"]
645853
+ },
645854
+ "gemini-cli": {
645855
+ id: "gemini-cli",
645856
+ displayName: "Gemini CLI",
645857
+ statusBarName: "Gemini CLI",
645858
+ accessType: "subscription",
645859
+ authMode: "enterprise-login",
645860
+ legalPath: "official Gemini Code Assist login",
645861
+ commandCandidates: ["gemini"],
645862
+ versionArgs: ["--version"],
645863
+ loginArgs: [],
645864
+ unsupportedPersonalAccountMessage: "Personal Google account login is not enabled by UR-AGENT. Use an official Gemini Code Assist Standard/Enterprise path if your Gemini CLI supports it."
645865
+ },
645866
+ "antigravity-cli": {
645867
+ id: "antigravity-cli",
645868
+ displayName: "Antigravity",
645869
+ statusBarName: "Antigravity",
645870
+ accessType: "subscription",
645871
+ authMode: "personal-login",
645872
+ legalPath: "official Antigravity CLI login, where supported",
645873
+ commandCandidates: ["antigravity", "google-antigravity", "ag"],
645874
+ versionArgs: ["--version"],
645875
+ loginArgs: []
645876
+ },
645877
+ "openai-api": {
645878
+ id: "openai-api",
645879
+ displayName: "OpenAI API",
645880
+ statusBarName: "OpenAI",
645881
+ accessType: "api",
645882
+ authMode: "api",
645883
+ legalPath: "OPENAI_API_KEY",
645884
+ envKey: "OPENAI_API_KEY"
645885
+ },
645886
+ "anthropic-api": {
645887
+ id: "anthropic-api",
645888
+ displayName: "Anthropic Claude API",
645889
+ statusBarName: "Anthropic",
645890
+ accessType: "api",
645891
+ authMode: "api",
645892
+ legalPath: "ANTHROPIC_API_KEY",
645893
+ envKey: "ANTHROPIC_API_KEY"
645894
+ },
645895
+ "gemini-api": {
645896
+ id: "gemini-api",
645897
+ displayName: "Gemini API",
645898
+ statusBarName: "Gemini API",
645899
+ accessType: "api",
645900
+ authMode: "api",
645901
+ legalPath: "GEMINI_API_KEY",
645902
+ envKey: "GEMINI_API_KEY"
645903
+ },
645904
+ openrouter: {
645905
+ id: "openrouter",
645906
+ displayName: "OpenRouter",
645907
+ statusBarName: "OpenRouter",
645908
+ accessType: "api",
645909
+ authMode: "api",
645910
+ legalPath: "OPENROUTER_API_KEY",
645911
+ envKey: "OPENROUTER_API_KEY"
645912
+ },
645913
+ "openai-compatible": {
645914
+ id: "openai-compatible",
645915
+ displayName: "OpenAI-compatible",
645916
+ statusBarName: "OpenAI-compatible",
645917
+ accessType: "api",
645918
+ authMode: "api",
645919
+ legalPath: "user-selected OpenAI-compatible base URL with API key only when required by that endpoint",
645920
+ envKey: "OPENAI_API_KEY",
645921
+ endpointKind: "openai-compatible"
645922
+ },
645923
+ ollama: {
645924
+ id: "ollama",
645925
+ displayName: "Ollama",
645926
+ statusBarName: "Ollama",
645927
+ accessType: "local",
645928
+ authMode: "local",
645929
+ legalPath: "localhost Ollama runtime",
645930
+ defaultBaseUrl: "http://localhost:11434",
645931
+ endpointKind: "ollama"
645932
+ },
645933
+ lmstudio: {
645934
+ id: "lmstudio",
645935
+ displayName: "LM Studio",
645936
+ statusBarName: "LM Studio",
645937
+ accessType: "local",
645938
+ authMode: "local",
645939
+ legalPath: "local OpenAI-compatible server",
645940
+ defaultBaseUrl: "http://localhost:1234/v1",
645941
+ endpointKind: "openai-compatible"
645942
+ },
645943
+ "llama.cpp": {
645944
+ id: "llama.cpp",
645945
+ displayName: "llama.cpp",
645946
+ statusBarName: "llama.cpp",
645947
+ accessType: "local",
645948
+ authMode: "local",
645949
+ legalPath: "local OpenAI-compatible server",
645950
+ defaultBaseUrl: "http://localhost:8080/v1",
645951
+ endpointKind: "openai-compatible"
645952
+ },
645953
+ vllm: {
645954
+ id: "vllm",
645955
+ displayName: "vLLM",
645956
+ statusBarName: "vLLM",
645957
+ accessType: "local",
645958
+ authMode: "local",
645959
+ legalPath: "OpenAI-compatible server",
645960
+ defaultBaseUrl: "http://localhost:8000/v1",
645961
+ endpointKind: "openai-compatible"
645962
+ }
645963
+ };
645964
+ });
645965
+
645122
645966
  // src/utils/statusBar.ts
645123
645967
  function statusBarShouldDisplay({
645124
645968
  settingsStatusLineConfigured,
@@ -645141,6 +645985,8 @@ function statusBarShouldDisplay({
645141
645985
  }
645142
645986
  function buildDefaultStatusBar({
645143
645987
  version: version3,
645988
+ providerLabel,
645989
+ authMode,
645144
645990
  model,
645145
645991
  mode: mode2,
645146
645992
  branch: branch2,
@@ -645151,6 +645997,12 @@ function buildDefaultStatusBar({
645151
645997
  isCheckingUpdate
645152
645998
  }) {
645153
645999
  const parts = [`UR-AGENT v${version3}`];
646000
+ if (providerLabel) {
646001
+ parts.push(`Provider: ${providerLabel}`);
646002
+ }
646003
+ if (authMode) {
646004
+ parts.push(`Auth: ${authMode}`);
646005
+ }
645154
646006
  if (model) {
645155
646007
  parts.push(`model: ${model}`);
645156
646008
  }
@@ -645200,6 +646052,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
645200
646052
  mainLoopModel,
645201
646053
  exceeds200kTokens
645202
646054
  });
646055
+ const providerRuntime = getProviderRuntimeInfo(settings);
645203
646056
  const outputStyleName = settings?.outputStyle || DEFAULT_OUTPUT_STYLE_NAME;
645204
646057
  const currentUsage = getCurrentUsage(messages);
645205
646058
  const contextWindowSize = getContextWindowForModel(runtimeModel, getSdkBetas());
@@ -645230,12 +646083,20 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
645230
646083
  id: runtimeModel,
645231
646084
  display_name: renderModelName(runtimeModel)
645232
646085
  },
646086
+ provider: {
646087
+ id: providerRuntime.provider,
646088
+ display_name: providerRuntime.providerLabel,
646089
+ auth_mode: providerRuntime.authLabel,
646090
+ model: providerRuntime.model,
646091
+ base_url: providerRuntime.baseUrl,
646092
+ fallback: providerRuntime.fallback
646093
+ },
645233
646094
  workspace: {
645234
646095
  current_dir: getCwd2(),
645235
646096
  project_dir: getOriginalCwd(),
645236
646097
  added_dirs: addedDirs
645237
646098
  },
645238
- version: "1.24.1",
646099
+ version: "1.25.1",
645239
646100
  output_style: {
645240
646101
  name: outputStyleName
645241
646102
  },
@@ -645306,11 +646167,14 @@ function StatusLineInner({
645306
646167
  addNotification
645307
646168
  } = useNotifications();
645308
646169
  const mainLoopModel = useMainLoopModel();
646170
+ const providerRuntime = getProviderRuntimeInfo(settings);
645309
646171
  const taskValues = Object.values(tasks2);
645310
646172
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
645311
646173
  const defaultStatusLineText = buildDefaultStatusBar({
645312
- version: "1.24.1",
645313
- model: renderModelName(mainLoopModel),
646174
+ version: "1.25.1",
646175
+ providerLabel: providerRuntime.providerLabel,
646176
+ authMode: providerRuntime.authLabel,
646177
+ model: providerRuntime.model ?? renderModelName(mainLoopModel),
645314
646178
  mode: permissionMode,
645315
646179
  branch: branch2,
645316
646180
  taskRunningCount,
@@ -645474,6 +646338,7 @@ function StatusLineInner({
645474
646338
  var import_react248, jsx_dev_runtime421, StatusLine;
645475
646339
  var init_StatusLine = __esm(() => {
645476
646340
  init_analytics();
646341
+ init_providerRegistry();
645477
646342
  init_AppState();
645478
646343
  init_state();
645479
646344
  init_outputStyles();
@@ -655146,7 +656011,7 @@ __export(exports_asciicast, {
655146
656011
  _resetRecordingStateForTesting: () => _resetRecordingStateForTesting
655147
656012
  });
655148
656013
  import { appendFile as appendFile7, rename as rename10 } from "fs/promises";
655149
- import { basename as basename59, dirname as dirname71, join as join208 } from "path";
656014
+ import { basename as basename59, dirname as dirname72, join as join208 } from "path";
655150
656015
  function getRecordFilePath() {
655151
656016
  if (recordingState.filePath !== null) {
655152
656017
  return recordingState.filePath;
@@ -655228,7 +656093,7 @@ function installAsciicastRecorder() {
655228
656093
  }
655229
656094
  });
655230
656095
  try {
655231
- getFsImplementation().mkdirSync(dirname71(filePath));
656096
+ getFsImplementation().mkdirSync(dirname72(filePath));
655232
656097
  } catch {}
655233
656098
  getFsImplementation().appendFileSync(filePath, header + `
655234
656099
  `, { mode: 384 });
@@ -655297,7 +656162,7 @@ var init_asciicast = __esm(() => {
655297
656162
  });
655298
656163
 
655299
656164
  // src/utils/sessionRestore.ts
655300
- import { dirname as dirname72 } from "path";
656165
+ import { dirname as dirname73 } from "path";
655301
656166
  function extractTodosFromTranscript(messages) {
655302
656167
  for (let i3 = messages.length - 1;i3 >= 0; i3--) {
655303
656168
  const msg = messages[i3];
@@ -655422,7 +656287,7 @@ async function processResumedConversation(result, opts, context4) {
655422
656287
  if (!opts.forkSession) {
655423
656288
  const sid = opts.sessionIdOverride ?? result.sessionId;
655424
656289
  if (sid) {
655425
- switchSession(asSessionId(sid), opts.transcriptPath ? dirname72(opts.transcriptPath) : null);
656290
+ switchSession(asSessionId(sid), opts.transcriptPath ? dirname73(opts.transcriptPath) : null);
655426
656291
  await renameRecordingForSession();
655427
656292
  await resetSessionFilePointer();
655428
656293
  restoreCostStateForSession(sid);
@@ -656792,7 +657657,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
656792
657657
  } catch {}
656793
657658
  const data = {
656794
657659
  trigger: trigger2,
656795
- version: "1.24.1",
657660
+ version: "1.25.1",
656796
657661
  platform: process.platform,
656797
657662
  transcript,
656798
657663
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -664051,7 +664916,7 @@ var exports_REPL = {};
664051
664916
  __export(exports_REPL, {
664052
664917
  REPL: () => REPL
664053
664918
  });
664054
- import { dirname as dirname73, join as join211 } from "path";
664919
+ import { dirname as dirname74, join as join211 } from "path";
664055
664920
  import { tmpdir as tmpdir13 } from "os";
664056
664921
  import { writeFile as writeFile47 } from "fs/promises";
664057
664922
  import { randomUUID as randomUUID51 } from "crypto";
@@ -664991,7 +665856,7 @@ function REPL({
664991
665856
  const targetSessionCosts = getStoredSessionCosts(sessionId);
664992
665857
  saveCurrentSessionCosts();
664993
665858
  resetCostState();
664994
- switchSession(asSessionId(sessionId), log2.fullPath ? dirname73(log2.fullPath) : null);
665859
+ switchSession(asSessionId(sessionId), log2.fullPath ? dirname74(log2.fullPath) : null);
664995
665860
  const {
664996
665861
  renameRecordingForSession: renameRecordingForSession2
664997
665862
  } = await Promise.resolve().then(() => (init_asciicast(), exports_asciicast));
@@ -668309,7 +669174,7 @@ async function checkEndpoints() {
668309
669174
  const oauthConfig = getOauthConfig();
668310
669175
  const tokenUrl = new URL(oauthConfig.TOKEN_URL);
668311
669176
  const endpoints = [`${oauthConfig.BASE_API_URL}/api/hello`, `${tokenUrl.origin}/v1/oauth/hello`];
668312
- const checkEndpoint = async (url3) => {
669177
+ const checkEndpoint2 = async (url3) => {
668313
669178
  try {
668314
669179
  const response = await axios_default.get(url3, {
668315
669180
  headers: {
@@ -668336,7 +669201,7 @@ async function checkEndpoints() {
668336
669201
  };
668337
669202
  }
668338
669203
  };
668339
- const results = await Promise.all(endpoints.map(checkEndpoint));
669204
+ const results = await Promise.all(endpoints.map(checkEndpoint2));
668340
669205
  const failedResult = results.find((result) => !result.success);
668341
669206
  if (failedResult) {
668342
669207
  logEvent("tengu_preflight_check_failed", {
@@ -668674,7 +669539,7 @@ function WelcomeV2() {
668674
669539
  dimColor: true,
668675
669540
  children: [
668676
669541
  "v",
668677
- "1.24.1"
669542
+ "1.25.1"
668678
669543
  ]
668679
669544
  }, undefined, true, undefined, this)
668680
669545
  ]
@@ -669934,7 +670799,7 @@ function completeOnboarding() {
669934
670799
  saveGlobalConfig((current) => ({
669935
670800
  ...current,
669936
670801
  hasCompletedOnboarding: true,
669937
- lastOnboardingVersion: "1.24.1"
670802
+ lastOnboardingVersion: "1.25.1"
669938
670803
  }));
669939
670804
  }
669940
670805
  function showDialog(root2, renderer) {
@@ -671078,7 +671943,7 @@ var exports_ResumeConversation = {};
671078
671943
  __export(exports_ResumeConversation, {
671079
671944
  ResumeConversation: () => ResumeConversation
671080
671945
  });
671081
- import { dirname as dirname74 } from "path";
671946
+ import { dirname as dirname75 } from "path";
671082
671947
  function parsePrIdentifier(value) {
671083
671948
  const directNumber = parseInt(value, 10);
671084
671949
  if (!isNaN(directNumber) && directNumber > 0) {
@@ -671210,7 +672075,7 @@ function ResumeConversation({
671210
672075
  }
671211
672076
  if (false) {}
671212
672077
  if (result_3.sessionId && !forkSession) {
671213
- switchSession(asSessionId(result_3.sessionId), log_0.fullPath ? dirname74(log_0.fullPath) : null);
672078
+ switchSession(asSessionId(result_3.sessionId), log_0.fullPath ? dirname75(log_0.fullPath) : null);
671214
672079
  await renameRecordingForSession();
671215
672080
  await resetSessionFilePointer();
671216
672081
  restoreCostStateForSession(result_3.sessionId);
@@ -674986,7 +675851,7 @@ var init_createDirectConnectSession = __esm(() => {
674986
675851
  });
674987
675852
 
674988
675853
  // src/utils/errorLogSink.ts
674989
- import { dirname as dirname75, join as join212 } from "path";
675854
+ import { dirname as dirname76, join as join212 } from "path";
674990
675855
  function getErrorsPath() {
674991
675856
  return join212(CACHE_PATHS.errors(), DATE + ".jsonl");
674992
675857
  }
@@ -675007,7 +675872,7 @@ function createJsonlWriter(options2) {
675007
675872
  function getLogWriter(path24) {
675008
675873
  let writer = logWriters.get(path24);
675009
675874
  if (!writer) {
675010
- const dir = dirname75(path24);
675875
+ const dir = dirname76(path24);
675011
675876
  writer = createJsonlWriter({
675012
675877
  writeFn: (content) => {
675013
675878
  try {
@@ -675035,7 +675900,7 @@ function appendToLog(path24, message) {
675035
675900
  cwd: getFsImplementation().cwd(),
675036
675901
  userType: process.env.USER_TYPE,
675037
675902
  sessionId: getSessionId(),
675038
- version: "1.24.1"
675903
+ version: "1.25.1"
675039
675904
  };
675040
675905
  getLogWriter(path24).write(messageWithTimestamp);
675041
675906
  }
@@ -679129,8 +679994,8 @@ async function getEnvLessBridgeConfig() {
679129
679994
  }
679130
679995
  async function checkEnvLessBridgeMinVersion() {
679131
679996
  const cfg = await getEnvLessBridgeConfig();
679132
- if (cfg.min_version && lt("1.24.1", cfg.min_version)) {
679133
- return `Your version of UR (${"1.24.1"}) is too old for Remote Control.
679997
+ if (cfg.min_version && lt("1.25.1", cfg.min_version)) {
679998
+ return `Your version of UR (${"1.25.1"}) is too old for Remote Control.
679134
679999
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
679135
680000
  }
679136
680001
  return null;
@@ -679458,14 +680323,14 @@ __export(exports_bridgePointer, {
679458
680323
  BRIDGE_POINTER_TTL_MS: () => BRIDGE_POINTER_TTL_MS
679459
680324
  });
679460
680325
  import { mkdir as mkdir46, readFile as readFile55, stat as stat50, unlink as unlink26, writeFile as writeFile50 } from "fs/promises";
679461
- import { dirname as dirname76, join as join216 } from "path";
680326
+ import { dirname as dirname77, join as join216 } from "path";
679462
680327
  function getBridgePointerPath(dir) {
679463
680328
  return join216(getProjectsDir(), sanitizePath2(dir), "bridge-pointer.json");
679464
680329
  }
679465
680330
  async function writeBridgePointer(dir, pointer) {
679466
680331
  const path24 = getBridgePointerPath(dir);
679467
680332
  try {
679468
- await mkdir46(dirname76(path24), { recursive: true });
680333
+ await mkdir46(dirname77(path24), { recursive: true });
679469
680334
  await writeFile50(path24, jsonStringify(pointer), "utf8");
679470
680335
  logForDebugging(`[bridge:pointer] wrote ${path24}`);
679471
680336
  } catch (err2) {
@@ -679604,7 +680469,7 @@ async function initBridgeCore(params) {
679604
680469
  const rawApi = createBridgeApiClient({
679605
680470
  baseUrl,
679606
680471
  getAccessToken,
679607
- runnerVersion: "1.24.1",
680472
+ runnerVersion: "1.25.1",
679608
680473
  onDebug: logForDebugging,
679609
680474
  onAuth401,
679610
680475
  getTrustedDeviceToken
@@ -681469,7 +682334,7 @@ __export(exports_print, {
681469
682334
  canBatchWith: () => canBatchWith
681470
682335
  });
681471
682336
  import { readFile as readFile56, stat as stat51, writeFile as writeFile51 } from "fs/promises";
681472
- import { dirname as dirname77 } from "path";
682337
+ import { dirname as dirname78 } from "path";
681473
682338
  import { cwd as cwd2 } from "process";
681474
682339
  import { randomUUID as randomUUID57 } from "crypto";
681475
682340
  function trackReceivedMessageUuid(uuid3) {
@@ -683922,7 +684787,7 @@ async function loadInitialMessages(setAppState, options2) {
683922
684787
  if (false) {}
683923
684788
  if (!options2.forkSession) {
683924
684789
  if (result.sessionId) {
683925
- switchSession(asSessionId(result.sessionId), result.fullPath ? dirname77(result.fullPath) : null);
684790
+ switchSession(asSessionId(result.sessionId), result.fullPath ? dirname78(result.fullPath) : null);
683926
684791
  if (persistSession) {
683927
684792
  await resetSessionFilePointer();
683928
684793
  }
@@ -684020,7 +684885,7 @@ async function loadInitialMessages(setAppState, options2) {
684020
684885
  }
684021
684886
  if (false) {}
684022
684887
  if (!options2.forkSession && result.sessionId) {
684023
- switchSession(asSessionId(result.sessionId), result.fullPath ? dirname77(result.fullPath) : null);
684888
+ switchSession(asSessionId(result.sessionId), result.fullPath ? dirname78(result.fullPath) : null);
684024
684889
  if (persistSession) {
684025
684890
  await resetSessionFilePointer();
684026
684891
  }
@@ -685285,7 +686150,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
685285
686150
  setCwd(cwd3);
685286
686151
  const server2 = new Server({
685287
686152
  name: "ur/tengu",
685288
- version: "1.24.1"
686153
+ version: "1.25.1"
685289
686154
  }, {
685290
686155
  capabilities: {
685291
686156
  tools: {}
@@ -685821,6 +686686,84 @@ var init_mcp5 = __esm(() => {
685821
686686
  jsx_dev_runtime487 = __toESM(require_jsx_dev_runtime(), 1);
685822
686687
  });
685823
686688
 
686689
+ // src/cli/handlers/providers.ts
686690
+ var exports_providers = {};
686691
+ __export(exports_providers, {
686692
+ providerStatusHandler: () => providerStatusHandler,
686693
+ providerListHandler: () => providerListHandler,
686694
+ providerDoctorHandler: () => providerDoctorHandler,
686695
+ providerAuthHandler: () => providerAuthHandler,
686696
+ configSetHandler: () => configSetHandler
686697
+ });
686698
+ function writeOutput(text) {
686699
+ process.stdout.write(text.endsWith(`
686700
+ `) ? text : `${text}
686701
+ `);
686702
+ }
686703
+ function writeError(text) {
686704
+ process.stderr.write(text.endsWith(`
686705
+ `) ? text : `${text}
686706
+ `);
686707
+ }
686708
+ async function providerListHandler(options2 = {}) {
686709
+ writeOutput(formatProviderList(Boolean(options2.json)));
686710
+ process.exit(0);
686711
+ }
686712
+ async function providerStatusHandler(options2 = {}) {
686713
+ const settings = getInitialSettings();
686714
+ const active = getActiveProviderSettings(settings).active ?? "ollama";
686715
+ const result = await doctorProvider(active, { settings });
686716
+ writeOutput(formatProviderStatus(result, Boolean(options2.json)));
686717
+ process.exit(result.ok ? 0 : 1);
686718
+ }
686719
+ async function providerDoctorHandler(providerArg, options2 = {}) {
686720
+ let provider;
686721
+ if (providerArg) {
686722
+ if (!isProviderId(providerArg)) {
686723
+ writeError(`Unknown provider "${providerArg}". Run: ur provider list`);
686724
+ process.exit(1);
686725
+ }
686726
+ provider = providerArg;
686727
+ }
686728
+ const settings = getInitialSettings();
686729
+ const active = getActiveProviderSettings(settings).active ?? "ollama";
686730
+ const result = await doctorProvider(provider ?? active, { settings });
686731
+ writeOutput(formatProviderDoctor(result, Boolean(options2.json)));
686732
+ process.exit(result.ok ? 0 : 1);
686733
+ }
686734
+ async function providerAuthHandler(alias2, options2 = {}) {
686735
+ const result = await launchProviderAuth(alias2, {
686736
+ deviceAuth: options2.deviceAuth,
686737
+ dryRun: options2.dryRun
686738
+ });
686739
+ if (options2.json) {
686740
+ writeOutput(JSON.stringify(result, null, 2));
686741
+ } else if (result.ok) {
686742
+ writeOutput(result.message);
686743
+ } else {
686744
+ writeError(result.message);
686745
+ }
686746
+ process.exit(result.ok ? 0 : 1);
686747
+ }
686748
+ async function configSetHandler(key, values2) {
686749
+ const value = Array.isArray(values2) ? values2.join(" ") : values2;
686750
+ if (key !== "provider" && key !== "provider.fallback" && key !== "provider.command_path" && key !== "model" && key !== "base_url") {
686751
+ writeError(`Unsupported config key "${key}". Supported: provider, provider.fallback, provider.command_path, model, base_url`);
686752
+ process.exit(1);
686753
+ }
686754
+ const result = setSafeProviderConfig(key, value);
686755
+ if (result.ok) {
686756
+ writeOutput(result.message);
686757
+ process.exit(0);
686758
+ }
686759
+ writeError(result.message);
686760
+ process.exit(1);
686761
+ }
686762
+ var init_providers = __esm(() => {
686763
+ init_providerRegistry();
686764
+ init_settings2();
686765
+ });
686766
+
685824
686767
  // src/cli/handlers/plugins.ts
685825
686768
  var exports_plugins = {};
685826
686769
  __export(exports_plugins, {
@@ -685839,7 +686782,7 @@ __export(exports_plugins, {
685839
686782
  VALID_UPDATE_SCOPES: () => VALID_UPDATE_SCOPES,
685840
686783
  VALID_INSTALLABLE_SCOPES: () => VALID_INSTALLABLE_SCOPES
685841
686784
  });
685842
- import { basename as basename61, dirname as dirname78 } from "path";
686785
+ import { basename as basename61, dirname as dirname79 } from "path";
685843
686786
  function handleMarketplaceError(error40, action3) {
685844
686787
  logError2(error40);
685845
686788
  cliError(`${figures_default.cross} Failed to ${action3}: ${errorMessage2(error40)}`);
@@ -685872,9 +686815,9 @@ async function pluginValidateHandler(manifestPath5, options2) {
685872
686815
  printValidationResult(result);
685873
686816
  let contentResults = [];
685874
686817
  if (result.fileType === "plugin") {
685875
- const manifestDir = dirname78(result.filePath);
686818
+ const manifestDir = dirname79(result.filePath);
685876
686819
  if (basename61(manifestDir) === ".ur-plugin") {
685877
- contentResults = await validatePluginContents(dirname78(manifestDir));
686820
+ contentResults = await validatePluginContents(dirname79(manifestDir));
685878
686821
  for (const r of contentResults) {
685879
686822
  console.log(`Validating ${r.fileType}: ${r.filePath}
685880
686823
  `);
@@ -686988,7 +687931,7 @@ async function update() {
686988
687931
  logEvent("tengu_update_check", {});
686989
687932
  const diagnostic = await getDoctorDiagnostic();
686990
687933
  const result = await checkUpgradeStatus({
686991
- currentVersion: "1.24.1",
687934
+ currentVersion: "1.25.1",
686992
687935
  packageName: UR_AGENT_PACKAGE_NAME,
686993
687936
  installationType: diagnostic.installationType,
686994
687937
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -688234,7 +689177,7 @@ ${customInstructions}` : customInstructions;
688234
689177
  }
688235
689178
  }
688236
689179
  logForDiagnosticsNoPII("info", "started", {
688237
- version: "1.24.1",
689180
+ version: "1.25.1",
688238
689181
  is_native_binary: isInBundledMode()
688239
689182
  });
688240
689183
  registerCleanup(async () => {
@@ -689018,7 +689961,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
689018
689961
  pendingHookMessages
689019
689962
  }, renderAndRun);
689020
689963
  }
689021
- }).version("1.24.1 (UR-AGENT)", "-v, --version", "Output the version number");
689964
+ }).version("1.25.1 (UR-AGENT)", "-v, --version", "Output the version number");
689022
689965
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
689023
689966
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
689024
689967
  if (canUserConfigureAdvisor()) {
@@ -689138,6 +690081,56 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
689138
690081
  } = await Promise.resolve().then(() => (init_auth6(), exports_auth2));
689139
690082
  await authLogout2();
689140
690083
  });
690084
+ auth2.command("chatgpt").description("Sign in through the official Codex CLI for ChatGPT subscription access").option("--device-auth", "Use Codex CLI device authorization when supported").option("--dry-run", "Show the official command without launching it").option("--json", "Output as JSON").action(async (options2) => {
690085
+ const {
690086
+ providerAuthHandler: providerAuthHandler2
690087
+ } = await Promise.resolve().then(() => (init_providers(), exports_providers));
690088
+ await providerAuthHandler2("chatgpt", options2);
690089
+ });
690090
+ auth2.command("claude").description("Sign in through the official Claude Code CLI subscription login").option("--dry-run", "Show the official command without launching it").option("--json", "Output as JSON").action(async (options2) => {
690091
+ const {
690092
+ providerAuthHandler: providerAuthHandler2
690093
+ } = await Promise.resolve().then(() => (init_providers(), exports_providers));
690094
+ await providerAuthHandler2("claude", options2);
690095
+ });
690096
+ auth2.command("gemini").description("Use the official Gemini CLI login flow where supported").option("--dry-run", "Show the official command without launching it").option("--json", "Output as JSON").action(async (options2) => {
690097
+ const {
690098
+ providerAuthHandler: providerAuthHandler2
690099
+ } = await Promise.resolve().then(() => (init_providers(), exports_providers));
690100
+ await providerAuthHandler2("gemini", options2);
690101
+ });
690102
+ auth2.command("antigravity").description("Use the official Antigravity CLI login flow where supported").option("--dry-run", "Show the official command without launching it").option("--json", "Output as JSON").action(async (options2) => {
690103
+ const {
690104
+ providerAuthHandler: providerAuthHandler2
690105
+ } = await Promise.resolve().then(() => (init_providers(), exports_providers));
690106
+ await providerAuthHandler2("antigravity", options2);
690107
+ });
690108
+ const provider = program2.command("provider").description("Manage legal model providers").configureHelp(createSortedHelpConfig());
690109
+ provider.command("list").description("List supported provider adapters and legal access paths").option("--json", "Output as JSON").action(async (options2) => {
690110
+ const {
690111
+ providerListHandler: providerListHandler2
690112
+ } = await Promise.resolve().then(() => (init_providers(), exports_providers));
690113
+ await providerListHandler2(options2);
690114
+ });
690115
+ provider.command("status").description("Show selected provider readiness").option("--json", "Output as JSON").action(async (options2) => {
690116
+ const {
690117
+ providerStatusHandler: providerStatusHandler2
690118
+ } = await Promise.resolve().then(() => (init_providers(), exports_providers));
690119
+ await providerStatusHandler2(options2);
690120
+ });
690121
+ provider.command("doctor [provider]").description("Check a provider without reading hidden credential files").option("--json", "Output as JSON").action(async (providerArg, options2) => {
690122
+ const {
690123
+ providerDoctorHandler: providerDoctorHandler2
690124
+ } = await Promise.resolve().then(() => (init_providers(), exports_providers));
690125
+ await providerDoctorHandler2(providerArg, options2);
690126
+ });
690127
+ const configCmd = program2.command("config").description("Manage safe UR-AGENT settings").configureHelp(createSortedHelpConfig());
690128
+ configCmd.command("set <key> <value...>").description("Set a safe non-secret setting: provider, provider.fallback, provider.command_path, model, or base_url").action(async (key, value) => {
690129
+ const {
690130
+ configSetHandler: configSetHandler2
690131
+ } = await Promise.resolve().then(() => (init_providers(), exports_providers));
690132
+ await configSetHandler2(key, value);
690133
+ });
689141
690134
  const coworkOption = () => new Option("--cowork", "Use cowork_plugins directory").hideHelp();
689142
690135
  const pluginCmd = program2.command("plugin").alias("plugins").description("Manage UR plugins").configureHelp(createSortedHelpConfig());
689143
690136
  pluginCmd.command("validate <path>").description("Validate a plugin or marketplace manifest").addOption(coworkOption()).action(async (manifestPath5, options2) => {
@@ -689845,7 +690838,7 @@ if (false) {}
689845
690838
  async function main2() {
689846
690839
  const args = process.argv.slice(2);
689847
690840
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
689848
- console.log(`${"1.24.1"} (UR-AGENT)`);
690841
+ console.log(`${"1.25.1"} (UR-AGENT)`);
689849
690842
  return;
689850
690843
  }
689851
690844
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {