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