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/CHANGELOG.md +7 -1
- package/README.md +55 -4
- package/dist/cli.js +1326 -333
- package/docs/CODE_FEATURE_INVENTORY.md +2 -1
- package/docs/CONFIGURATION.md +38 -2
- package/docs/USAGE.md +27 -3
- package/docs/VALIDATION.md +1 -1
- package/docs/providers.md +104 -0
- package/extensions/vscode-ur-inline-diffs/package.json +1 -1
- package/package.json +1 -1
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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 ===
|
|
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, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
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
|
-
|
|
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
|
|
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(
|
|
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.
|
|
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.
|
|
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.
|
|
237650
|
+
if (versionConfig.minVersion && lt("1.25.1", versionConfig.minVersion)) {
|
|
237516
237651
|
console.error(`
|
|
237517
|
-
It looks like your version of UR (${"1.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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 =
|
|
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(
|
|
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.
|
|
239213
|
-
logForDebugging(`Native installer: current version ${"1.
|
|
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.
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
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 =
|
|
281784
|
-
const parentOfSkillDir =
|
|
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 =
|
|
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 ?
|
|
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 =
|
|
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 =
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
293791
|
+
writeFileSync13(repoIndexPath(options2.root), `${JSON.stringify(repo, null, 2)}
|
|
293657
293792
|
`);
|
|
293658
|
-
|
|
293793
|
+
writeFileSync13(symbolIndexPath(options2.root), `${JSON.stringify(symbols, null, 2)}
|
|
293659
293794
|
`);
|
|
293660
|
-
|
|
293795
|
+
writeFileSync13(callIndexPath(options2.root), `${JSON.stringify(calls, null, 2)}
|
|
293661
293796
|
`);
|
|
293662
|
-
|
|
293797
|
+
writeFileSync13(testIndexPath(options2.root), `${JSON.stringify(tests, null, 2)}
|
|
293663
293798
|
`);
|
|
293664
|
-
|
|
293799
|
+
writeFileSync13(docIndexPath(options2.root), `${JSON.stringify(docs, null, 2)}
|
|
293665
293800
|
`);
|
|
293666
|
-
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
319865
|
-
const parentOfSkillDir =
|
|
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 =
|
|
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 =
|
|
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: ${
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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 =
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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 =
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
|
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(
|
|
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
|
|
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 =
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
351348
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
|
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 :
|
|
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
|
|
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(
|
|
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(
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
373813
|
+
if (current.lastReleaseNotesSeen === "1.25.1") {
|
|
373679
373814
|
return current;
|
|
373680
373815
|
}
|
|
373681
373816
|
return {
|
|
373682
373817
|
...current,
|
|
373683
|
-
lastReleaseNotesSeen: "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
|
|
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(
|
|
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
|
|
388684
|
-
import { dirname as
|
|
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" ?
|
|
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(
|
|
388824
|
+
mkdirSync20(dirname60(fullPath), { recursive: true });
|
|
388690
388825
|
if (!force && existsSync21(fullPath)) {
|
|
388691
388826
|
result.skipped.push(displayPath);
|
|
388692
388827
|
return;
|
|
388693
388828
|
}
|
|
388694
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
|
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>${
|
|
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>${
|
|
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>${
|
|
391271
|
+
<string>${escapeXml3(logPath)}</string>
|
|
391137
391272
|
<key>StandardErrorPath</key>
|
|
391138
|
-
<string>${
|
|
391273
|
+
<string>${escapeXml3(logPath)}</string>
|
|
391139
391274
|
</dict>
|
|
391140
391275
|
</plist>
|
|
391141
391276
|
`;
|
|
391142
391277
|
}
|
|
391143
|
-
function
|
|
391278
|
+
function escapeXml3(value) {
|
|
391144
391279
|
return value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">");
|
|
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
|
-
|
|
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
|
-
|
|
391211
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
394168
|
-
|
|
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
|
-
|
|
394307
|
+
writeFileSync27(join152(dir, "checklists", "default.md"), `# Default checklist
|
|
394173
394308
|
|
|
394174
394309
|
- [ ] Step completed successfully
|
|
394175
394310
|
`);
|
|
394176
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
399583
|
+
writeFileSync as writeFileSync38
|
|
399449
399584
|
} from "fs";
|
|
399450
|
-
import { dirname as
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
403170
|
-
import { dirname as
|
|
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(
|
|
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(
|
|
403204
|
-
|
|
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
|
|
403395
|
+
writeFileSync as writeFileSync43
|
|
403261
403396
|
} from "fs";
|
|
403262
|
-
import { dirname as
|
|
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(
|
|
403298
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
573008
|
+
writeFileSync as writeFileSync45
|
|
572874
573009
|
} from "fs";
|
|
572875
|
-
import { dirname as
|
|
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(
|
|
573016
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
573693
|
-
import { existsSync as existsSync53, mkdirSync as mkdirSync47, readFileSync as readFileSync59, writeFileSync as
|
|
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(
|
|
573867
|
+
mkdirSync47(dirname65(abs), { recursive: true });
|
|
573733
573868
|
}
|
|
573734
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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
|
|
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 =
|
|
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
|
|
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.
|
|
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
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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.
|
|
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.
|
|
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
|
|
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(
|
|
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(
|
|
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-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
632766
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
645313
|
-
|
|
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
|
|
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(
|
|
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
|
|
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 ?
|
|
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.
|
|
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
|
|
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 ?
|
|
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
|
|
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(
|
|
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.
|
|
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.
|
|
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
|
|
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 ?
|
|
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
|
|
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 =
|
|
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.
|
|
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.
|
|
679133
|
-
return `Your version of UR (${"1.
|
|
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
|
|
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(
|
|
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.
|
|
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
|
|
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 ?
|
|
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 ?
|
|
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.
|
|
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
|
|
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 =
|
|
686818
|
+
const manifestDir = dirname79(result.filePath);
|
|
685876
686819
|
if (basename61(manifestDir) === ".ur-plugin") {
|
|
685877
|
-
contentResults = await validatePluginContents(
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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")) {
|