ur-agent 1.79.0 → 1.79.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 +13 -0
- package/dist/cli.js +112 -96
- package/docs/AGENT_FEATURES.md +6 -0
- package/docs/GAP_ANALYSIS_2026-08-11.md +180 -0
- package/docs/TROUBLESHOOTING.md +14 -0
- package/docs/VALIDATION.md +1 -1
- package/documentation/index.html +1 -1
- package/extensions/jetbrains-ur/build.gradle.kts +1 -1
- package/extensions/vscode-ur-inline-diffs/package.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.79.1
|
|
4
|
+
|
|
5
|
+
- Bash execution now survives external cleanup of its session task-output
|
|
6
|
+
directory. UR ensures the directory before every launch, opens stdout and
|
|
7
|
+
stderr as one recoverable pair, and recreates/retries once on `ENOENT`
|
|
8
|
+
instead of leaving every later Bash call broken until restart.
|
|
9
|
+
- Unix temp storage now defaults to the platform directory returned by
|
|
10
|
+
`os.tmpdir()` instead of assuming `/tmp` exists. This keeps task output,
|
|
11
|
+
sandbox temp files, and permission allowlists aligned on macOS systems where
|
|
12
|
+
`/tmp` is a missing or dangling compatibility symlink. A production-shell
|
|
13
|
+
regression test deletes the live task directory between commands and proves
|
|
14
|
+
that the next command completes with intact stdout, stderr, and exit status.
|
|
15
|
+
|
|
3
16
|
## 1.79.0
|
|
4
17
|
|
|
5
18
|
- Plugin discovery now searches managed, personal, workspace, implicit,
|
package/dist/cli.js
CHANGED
|
@@ -107606,7 +107606,7 @@ var init_auth = __esm(() => {
|
|
|
107606
107606
|
|
|
107607
107607
|
// src/utils/userAgent.ts
|
|
107608
107608
|
function getURCodeUserAgent() {
|
|
107609
|
-
return `ur/${"1.79.
|
|
107609
|
+
return `ur/${"1.79.1"}`;
|
|
107610
107610
|
}
|
|
107611
107611
|
|
|
107612
107612
|
// src/utils/workloadContext.ts
|
|
@@ -107628,7 +107628,7 @@ function getUserAgent() {
|
|
|
107628
107628
|
const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
|
|
107629
107629
|
const workload = getWorkload();
|
|
107630
107630
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
107631
|
-
return `ur-cli/${"1.79.
|
|
107631
|
+
return `ur-cli/${"1.79.1"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
107632
107632
|
}
|
|
107633
107633
|
function getMCPUserAgent() {
|
|
107634
107634
|
const parts = [];
|
|
@@ -107642,7 +107642,7 @@ function getMCPUserAgent() {
|
|
|
107642
107642
|
parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
|
|
107643
107643
|
}
|
|
107644
107644
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
107645
|
-
return `ur/${"1.79.
|
|
107645
|
+
return `ur/${"1.79.1"}${suffix}`;
|
|
107646
107646
|
}
|
|
107647
107647
|
function getWebFetchUserAgent() {
|
|
107648
107648
|
return `UR-User (${getURCodeUserAgent()})`;
|
|
@@ -107780,7 +107780,7 @@ var init_user = __esm(() => {
|
|
|
107780
107780
|
deviceId,
|
|
107781
107781
|
sessionId: getSessionId(),
|
|
107782
107782
|
email: getEmail(),
|
|
107783
|
-
appVersion: "1.79.
|
|
107783
|
+
appVersion: "1.79.1",
|
|
107784
107784
|
platform: getHostPlatformForAnalytics(),
|
|
107785
107785
|
organizationUuid,
|
|
107786
107786
|
accountUuid,
|
|
@@ -115667,7 +115667,7 @@ var init_metadata = __esm(() => {
|
|
|
115667
115667
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
115668
115668
|
WHITESPACE_REGEX = /\s+/;
|
|
115669
115669
|
getVersionBase = memoize_default(() => {
|
|
115670
|
-
const match = "1.79.
|
|
115670
|
+
const match = "1.79.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
115671
115671
|
return match ? match[0] : undefined;
|
|
115672
115672
|
});
|
|
115673
115673
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -115707,7 +115707,7 @@ var init_metadata = __esm(() => {
|
|
|
115707
115707
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
115708
115708
|
isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
|
|
115709
115709
|
isURAiAuth: isURAISubscriber(),
|
|
115710
|
-
version: "1.79.
|
|
115710
|
+
version: "1.79.1",
|
|
115711
115711
|
versionBase: getVersionBase(),
|
|
115712
115712
|
buildTime: "",
|
|
115713
115713
|
deploymentEnvironment: env2.detectDeploymentEnvironment(),
|
|
@@ -116377,7 +116377,7 @@ function initialize1PEventLogging() {
|
|
|
116377
116377
|
const platform2 = getPlatform();
|
|
116378
116378
|
const attributes = {
|
|
116379
116379
|
[import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
|
|
116380
|
-
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.79.
|
|
116380
|
+
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.79.1"
|
|
116381
116381
|
};
|
|
116382
116382
|
if (platform2 === "wsl") {
|
|
116383
116383
|
const wslVersion = getWslVersion();
|
|
@@ -116405,7 +116405,7 @@ function initialize1PEventLogging() {
|
|
|
116405
116405
|
})
|
|
116406
116406
|
]
|
|
116407
116407
|
});
|
|
116408
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.79.
|
|
116408
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.79.1");
|
|
116409
116409
|
}
|
|
116410
116410
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
116411
116411
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -126305,7 +126305,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
|
|
|
126305
126305
|
function formatA2AAgentCard(options = {}, pretty = true) {
|
|
126306
126306
|
return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
|
|
126307
126307
|
}
|
|
126308
|
-
var urVersion = "1.79.
|
|
126308
|
+
var urVersion = "1.79.1", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
|
|
126309
126309
|
var init_trends = __esm(() => {
|
|
126310
126310
|
init_a2aCardSignature();
|
|
126311
126311
|
coverage = [
|
|
@@ -129195,7 +129195,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
129195
129195
|
if (!isAttributionHeaderEnabled()) {
|
|
129196
129196
|
return "";
|
|
129197
129197
|
}
|
|
129198
|
-
const version2 = `${"1.79.
|
|
129198
|
+
const version2 = `${"1.79.1"}.${fingerprint}`;
|
|
129199
129199
|
const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
|
|
129200
129200
|
const cch = "";
|
|
129201
129201
|
const workload = getWorkload();
|
|
@@ -157199,7 +157199,7 @@ var init_projectSafety = __esm(() => {
|
|
|
157199
157199
|
function getInstruments() {
|
|
157200
157200
|
if (instruments)
|
|
157201
157201
|
return instruments;
|
|
157202
|
-
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.79.
|
|
157202
|
+
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.79.1");
|
|
157203
157203
|
instruments = {
|
|
157204
157204
|
operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
|
|
157205
157205
|
description: "GenAI operation duration.",
|
|
@@ -157297,7 +157297,7 @@ function genAiAgentAttributes() {
|
|
|
157297
157297
|
"gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
|
|
157298
157298
|
"gen_ai.provider.name": "ur",
|
|
157299
157299
|
"gen_ai.agent.name": "UR-Nexus",
|
|
157300
|
-
"gen_ai.agent.version": "1.79.
|
|
157300
|
+
"gen_ai.agent.version": "1.79.1"
|
|
157301
157301
|
};
|
|
157302
157302
|
}
|
|
157303
157303
|
function genAiWorkflowAttributes(workflowName) {
|
|
@@ -157313,7 +157313,7 @@ function genAiWorkflowAttributes(workflowName) {
|
|
|
157313
157313
|
function startGenAiWorkflowSpan(workflowName) {
|
|
157314
157314
|
const attributes = genAiWorkflowAttributes(workflowName);
|
|
157315
157315
|
const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
|
|
157316
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.79.
|
|
157316
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.79.1").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
157317
157317
|
}
|
|
157318
157318
|
function endGenAiWorkflowSpan(span, options2 = {}) {
|
|
157319
157319
|
try {
|
|
@@ -157351,7 +157351,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
|
|
|
157351
157351
|
if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
|
|
157352
157352
|
attributes["gen_ai.memory.record.count"] = options2.recordCount;
|
|
157353
157353
|
}
|
|
157354
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.79.
|
|
157354
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.79.1").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
157355
157355
|
}
|
|
157356
157356
|
function endGenAiMemorySpan(span, options2 = {}) {
|
|
157357
157357
|
try {
|
|
@@ -251066,7 +251066,7 @@ function getTelemetryAttributes() {
|
|
|
251066
251066
|
attributes["session.id"] = sessionId;
|
|
251067
251067
|
}
|
|
251068
251068
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
251069
|
-
attributes["app.version"] = "1.79.
|
|
251069
|
+
attributes["app.version"] = "1.79.1";
|
|
251070
251070
|
}
|
|
251071
251071
|
const oauthAccount = getOauthAccountInfo();
|
|
251072
251072
|
if (oauthAccount) {
|
|
@@ -292335,7 +292335,7 @@ function getInstallationEnv() {
|
|
|
292335
292335
|
return;
|
|
292336
292336
|
}
|
|
292337
292337
|
function getURCodeVersion() {
|
|
292338
|
-
return "1.79.
|
|
292338
|
+
return "1.79.1";
|
|
292339
292339
|
}
|
|
292340
292340
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
292341
292341
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -299666,7 +299666,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
299666
299666
|
const client2 = new Client({
|
|
299667
299667
|
name: "ur",
|
|
299668
299668
|
title: "UR",
|
|
299669
|
-
version: "1.79.
|
|
299669
|
+
version: "1.79.1",
|
|
299670
299670
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
299671
299671
|
websiteUrl: PRODUCT_URL
|
|
299672
299672
|
}, {
|
|
@@ -300026,7 +300026,7 @@ var init_client5 = __esm(() => {
|
|
|
300026
300026
|
const client2 = new Client({
|
|
300027
300027
|
name: "ur",
|
|
300028
300028
|
title: "UR",
|
|
300029
|
-
version: "1.79.
|
|
300029
|
+
version: "1.79.1",
|
|
300030
300030
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
300031
300031
|
websiteUrl: PRODUCT_URL
|
|
300032
300032
|
}, {
|
|
@@ -312747,7 +312747,7 @@ async function createRuntime() {
|
|
|
312747
312747
|
bootstrapTelemetry();
|
|
312748
312748
|
const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
|
|
312749
312749
|
[import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
|
|
312750
|
-
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.79.
|
|
312750
|
+
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.79.1"
|
|
312751
312751
|
}));
|
|
312752
312752
|
const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
|
|
312753
312753
|
resource,
|
|
@@ -312780,11 +312780,11 @@ async function createRuntime() {
|
|
|
312780
312780
|
setMeterProvider(meterProvider);
|
|
312781
312781
|
setLoggerProvider(loggerProvider);
|
|
312782
312782
|
if (meterProvider) {
|
|
312783
|
-
const meter = meterProvider.getMeter("ur-agent", "1.79.
|
|
312783
|
+
const meter = meterProvider.getMeter("ur-agent", "1.79.1");
|
|
312784
312784
|
setMeter(meter, (name, options2) => meter.createCounter(name, options2));
|
|
312785
312785
|
}
|
|
312786
312786
|
if (loggerProvider) {
|
|
312787
|
-
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.79.
|
|
312787
|
+
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.79.1"));
|
|
312788
312788
|
}
|
|
312789
312789
|
if (!cleanupRegistered2) {
|
|
312790
312790
|
cleanupRegistered2 = true;
|
|
@@ -313446,9 +313446,9 @@ async function assertMinVersion() {
|
|
|
313446
313446
|
if (false) {}
|
|
313447
313447
|
try {
|
|
313448
313448
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
313449
|
-
if (versionConfig.minVersion && lt("1.79.
|
|
313449
|
+
if (versionConfig.minVersion && lt("1.79.1", versionConfig.minVersion)) {
|
|
313450
313450
|
console.error(`
|
|
313451
|
-
It looks like your version of UR (${"1.79.
|
|
313451
|
+
It looks like your version of UR (${"1.79.1"}) needs an update.
|
|
313452
313452
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
313453
313453
|
|
|
313454
313454
|
To update, please run:
|
|
@@ -313664,7 +313664,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
313664
313664
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
313665
313665
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
313666
313666
|
pid: process.pid,
|
|
313667
|
-
currentVersion: "1.79.
|
|
313667
|
+
currentVersion: "1.79.1"
|
|
313668
313668
|
});
|
|
313669
313669
|
return "in_progress";
|
|
313670
313670
|
}
|
|
@@ -313673,7 +313673,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
313673
313673
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
313674
313674
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
313675
313675
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
313676
|
-
currentVersion: "1.79.
|
|
313676
|
+
currentVersion: "1.79.1"
|
|
313677
313677
|
});
|
|
313678
313678
|
console.error(`
|
|
313679
313679
|
Error: Windows NPM detected in WSL
|
|
@@ -314208,7 +314208,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
314208
314208
|
}
|
|
314209
314209
|
async function getDoctorDiagnostic() {
|
|
314210
314210
|
const installationType = await getCurrentInstallationType();
|
|
314211
|
-
const version2 = typeof MACRO !== "undefined" ? "1.79.
|
|
314211
|
+
const version2 = typeof MACRO !== "undefined" ? "1.79.1" : "unknown";
|
|
314212
314212
|
const installationPath = await getInstallationPath();
|
|
314213
314213
|
const invokedBinary = getInvokedBinary();
|
|
314214
314214
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -315143,8 +315143,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
315143
315143
|
const maxVersion = await getMaxVersion();
|
|
315144
315144
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
315145
315145
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
315146
|
-
if (gte("1.79.
|
|
315147
|
-
logForDebugging(`Native installer: current version ${"1.79.
|
|
315146
|
+
if (gte("1.79.1", maxVersion)) {
|
|
315147
|
+
logForDebugging(`Native installer: current version ${"1.79.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
315148
315148
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
315149
315149
|
latency_ms: Date.now() - startTime,
|
|
315150
315150
|
max_version: maxVersion,
|
|
@@ -315155,7 +315155,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
315155
315155
|
version2 = maxVersion;
|
|
315156
315156
|
}
|
|
315157
315157
|
}
|
|
315158
|
-
if (!forceReinstall && version2 === "1.79.
|
|
315158
|
+
if (!forceReinstall && version2 === "1.79.1" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
315159
315159
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
315160
315160
|
logEvent("tengu_native_update_complete", {
|
|
315161
315161
|
latency_ms: Date.now() - startTime,
|
|
@@ -349364,7 +349364,6 @@ import { execFileSync as execFileSync2, spawn as spawn9 } from "child_process";
|
|
|
349364
349364
|
import { constants as fsConstants5, readFileSync as readFileSync25, unlinkSync as unlinkSync7 } from "fs";
|
|
349365
349365
|
import { mkdir as mkdir20, open as open11, realpath as realpath10 } from "fs/promises";
|
|
349366
349366
|
import { isAbsolute as isAbsolute21, resolve as resolve32 } from "path";
|
|
349367
|
-
import { join as posixJoin3 } from "path/posix";
|
|
349368
349367
|
import { accessSync } from "fs";
|
|
349369
349368
|
function isExecutable(shellPath) {
|
|
349370
349369
|
try {
|
|
@@ -349428,13 +349427,31 @@ async function getShellConfigImpl() {
|
|
|
349428
349427
|
return { provider };
|
|
349429
349428
|
}
|
|
349430
349429
|
function ensureTaskOutputDir() {
|
|
349431
|
-
|
|
349430
|
+
return mkdir20(getTaskOutputDir(), { recursive: true, mode: 448 }).then(() => {
|
|
349432
349431
|
return;
|
|
349433
|
-
}, (error40) => {
|
|
349434
|
-
taskOutputDirReady = undefined;
|
|
349435
|
-
throw error40;
|
|
349436
349432
|
});
|
|
349437
|
-
|
|
349433
|
+
}
|
|
349434
|
+
async function openTaskOutputHandles(taskOutput) {
|
|
349435
|
+
for (let attempt = 0;attempt < 2; attempt += 1) {
|
|
349436
|
+
await ensureTaskOutputDir();
|
|
349437
|
+
let outputHandle;
|
|
349438
|
+
try {
|
|
349439
|
+
outputHandle = await open11(taskOutput.path, process.platform === "win32" ? "w" : fsConstants5.O_WRONLY | fsConstants5.O_CREAT | fsConstants5.O_APPEND | (fsConstants5.O_NOFOLLOW ?? 0));
|
|
349440
|
+
const stderrHandle = await open11(taskOutput.stderrPath, process.platform === "win32" ? "w" : fsConstants5.O_WRONLY | fsConstants5.O_CREAT | fsConstants5.O_APPEND | (fsConstants5.O_NOFOLLOW ?? 0));
|
|
349441
|
+
return { outputHandle, stderrHandle };
|
|
349442
|
+
} catch (error40) {
|
|
349443
|
+
if (outputHandle !== undefined) {
|
|
349444
|
+
try {
|
|
349445
|
+
await outputHandle.close();
|
|
349446
|
+
} catch {}
|
|
349447
|
+
}
|
|
349448
|
+
if (!isENOENT(error40) || attempt === 1) {
|
|
349449
|
+
throw error40;
|
|
349450
|
+
}
|
|
349451
|
+
logForDebugging(`Task output directory disappeared during shell launch; recreating ${getTaskOutputDir()}`);
|
|
349452
|
+
}
|
|
349453
|
+
}
|
|
349454
|
+
throw new Error("Failed to open task output files");
|
|
349438
349455
|
}
|
|
349439
349456
|
async function exec3(command, abortSignal, shellType, options2) {
|
|
349440
349457
|
const {
|
|
@@ -349448,7 +349465,7 @@ async function exec3(command, abortSignal, shellType, options2) {
|
|
|
349448
349465
|
const commandTimeout = timeout ?? DEFAULT_TIMEOUT;
|
|
349449
349466
|
const provider = await resolveProvider[shellType]();
|
|
349450
349467
|
const id = Math.floor(Math.random() * 65536).toString(16).padStart(4, "0");
|
|
349451
|
-
const sandboxTmpDir =
|
|
349468
|
+
const sandboxTmpDir = getURTempDir();
|
|
349452
349469
|
const { commandString: builtCommand, cwdFilePath } = await provider.buildExecCommand(command, {
|
|
349453
349470
|
id,
|
|
349454
349471
|
sandboxTmpDir: shouldUseSandbox ? sandboxTmpDir : undefined,
|
|
@@ -349492,13 +349509,12 @@ async function exec3(command, abortSignal, shellType, options2) {
|
|
|
349492
349509
|
const usePipeMode = !!onStdout;
|
|
349493
349510
|
const taskId = generateTaskId("local_bash");
|
|
349494
349511
|
const taskOutput = new TaskOutput(taskId, onProgress ?? null, !usePipeMode);
|
|
349495
|
-
await ensureTaskOutputDir();
|
|
349496
349512
|
let outputHandle;
|
|
349497
349513
|
let stderrHandle;
|
|
349498
349514
|
if (!usePipeMode) {
|
|
349499
|
-
const
|
|
349500
|
-
outputHandle =
|
|
349501
|
-
stderrHandle =
|
|
349515
|
+
const handles = await openTaskOutputHandles(taskOutput);
|
|
349516
|
+
outputHandle = handles.outputHandle;
|
|
349517
|
+
stderrHandle = handles.stderrHandle;
|
|
349502
349518
|
}
|
|
349503
349519
|
try {
|
|
349504
349520
|
const childProcess = spawn9(spawnBinary, shellArgs, {
|
|
@@ -349598,7 +349614,7 @@ function setCwd(path13, relativeTo) {
|
|
|
349598
349614
|
} catch (_error) {}
|
|
349599
349615
|
}
|
|
349600
349616
|
}
|
|
349601
|
-
var DEFAULT_TIMEOUT, getShellConfig, getPsProvider, resolveProvider
|
|
349617
|
+
var DEFAULT_TIMEOUT, getShellConfig, getPsProvider, resolveProvider;
|
|
349602
349618
|
var init_Shell = __esm(() => {
|
|
349603
349619
|
init_memoize();
|
|
349604
349620
|
init_analytics();
|
|
@@ -384994,7 +385010,7 @@ function isAnyTracingEnabled() {
|
|
|
384994
385010
|
return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
|
|
384995
385011
|
}
|
|
384996
385012
|
function getTracer() {
|
|
384997
|
-
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.79.
|
|
385013
|
+
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.79.1");
|
|
384998
385014
|
}
|
|
384999
385015
|
function createSpanAttributes(spanType, customAttributes = {}) {
|
|
385000
385016
|
const baseAttributes = getTelemetryAttributes();
|
|
@@ -415284,7 +415300,7 @@ function Feedback({
|
|
|
415284
415300
|
platform: env2.platform,
|
|
415285
415301
|
gitRepo: envInfo.isGit,
|
|
415286
415302
|
terminal: env2.terminal,
|
|
415287
|
-
version: "1.79.
|
|
415303
|
+
version: "1.79.1",
|
|
415288
415304
|
transcript: normalizeMessagesForAPI(messages),
|
|
415289
415305
|
errors: sanitizedErrors,
|
|
415290
415306
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -415476,7 +415492,7 @@ function Feedback({
|
|
|
415476
415492
|
", ",
|
|
415477
415493
|
env2.terminal,
|
|
415478
415494
|
", v",
|
|
415479
|
-
"1.79.
|
|
415495
|
+
"1.79.1"
|
|
415480
415496
|
]
|
|
415481
415497
|
}, undefined, true, undefined, this)
|
|
415482
415498
|
]
|
|
@@ -415582,7 +415598,7 @@ ${sanitizedDescription}
|
|
|
415582
415598
|
` + `**Environment Info**
|
|
415583
415599
|
` + `- Platform: ${env2.platform}
|
|
415584
415600
|
` + `- Terminal: ${env2.terminal}
|
|
415585
|
-
` + `- Version: ${"1.79.
|
|
415601
|
+
` + `- Version: ${"1.79.1"}
|
|
415586
415602
|
` + `- Feedback ID: ${feedbackId}
|
|
415587
415603
|
` + `
|
|
415588
415604
|
**Errors**
|
|
@@ -418692,7 +418708,7 @@ function buildPrimarySection() {
|
|
|
418692
418708
|
}, undefined, false, undefined, this);
|
|
418693
418709
|
return [{
|
|
418694
418710
|
label: "Version",
|
|
418695
|
-
value: "1.79.
|
|
418711
|
+
value: "1.79.1"
|
|
418696
418712
|
}, {
|
|
418697
418713
|
label: "Session name",
|
|
418698
418714
|
value: nameValue
|
|
@@ -422074,7 +422090,7 @@ function Config({
|
|
|
422074
422090
|
}
|
|
422075
422091
|
}, undefined, false, undefined, this)
|
|
422076
422092
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
422077
|
-
currentVersion: "1.79.
|
|
422093
|
+
currentVersion: "1.79.1",
|
|
422078
422094
|
onChoice: (choice) => {
|
|
422079
422095
|
setShowSubmenu(null);
|
|
422080
422096
|
setTabsHidden(false);
|
|
@@ -422086,7 +422102,7 @@ function Config({
|
|
|
422086
422102
|
autoUpdatesChannel: "stable"
|
|
422087
422103
|
};
|
|
422088
422104
|
if (choice === "stay") {
|
|
422089
|
-
newSettings.minimumVersion = "1.79.
|
|
422105
|
+
newSettings.minimumVersion = "1.79.1";
|
|
422090
422106
|
}
|
|
422091
422107
|
updateSettingsForSource("userSettings", newSettings);
|
|
422092
422108
|
setSettingsData((prev_27) => ({
|
|
@@ -430150,7 +430166,7 @@ function HelpV2(t0) {
|
|
|
430150
430166
|
let t6;
|
|
430151
430167
|
if ($2[31] !== tabs) {
|
|
430152
430168
|
t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
|
|
430153
|
-
title: `UR v${"1.79.
|
|
430169
|
+
title: `UR v${"1.79.1"}`,
|
|
430154
430170
|
color: "professionalBlue",
|
|
430155
430171
|
defaultTab: "general",
|
|
430156
430172
|
children: tabs
|
|
@@ -431083,7 +431099,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
|
|
|
431083
431099
|
async function handleInitialize(options2) {
|
|
431084
431100
|
return {
|
|
431085
431101
|
name: "UR",
|
|
431086
|
-
version: "1.79.
|
|
431102
|
+
version: "1.79.1",
|
|
431087
431103
|
protocolVersion: "0.1.0",
|
|
431088
431104
|
workspaceRoot: options2.cwd,
|
|
431089
431105
|
capabilities: {
|
|
@@ -448191,7 +448207,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
448191
448207
|
return [];
|
|
448192
448208
|
}
|
|
448193
448209
|
}
|
|
448194
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.79.
|
|
448210
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.79.1") {
|
|
448195
448211
|
if (process.env.USER_TYPE === "ant") {
|
|
448196
448212
|
const changelog = "";
|
|
448197
448213
|
if (changelog) {
|
|
@@ -448218,7 +448234,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.79.0")
|
|
|
448218
448234
|
releaseNotes
|
|
448219
448235
|
};
|
|
448220
448236
|
}
|
|
448221
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.79.
|
|
448237
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.79.1") {
|
|
448222
448238
|
if (process.env.USER_TYPE === "ant") {
|
|
448223
448239
|
const changelog = "";
|
|
448224
448240
|
if (changelog) {
|
|
@@ -451123,7 +451139,7 @@ function getRecentActivitySync() {
|
|
|
451123
451139
|
return cachedActivity;
|
|
451124
451140
|
}
|
|
451125
451141
|
function getLogoDisplayData() {
|
|
451126
|
-
const version2 = process.env.DEMO_VERSION ?? "1.79.
|
|
451142
|
+
const version2 = process.env.DEMO_VERSION ?? "1.79.1";
|
|
451127
451143
|
const serverUrl = getDirectConnectServerUrl();
|
|
451128
451144
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
|
|
451129
451145
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -451990,7 +452006,7 @@ function LogoV2() {
|
|
|
451990
452006
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
451991
452007
|
t2 = () => {
|
|
451992
452008
|
const currentConfig2 = getGlobalConfig();
|
|
451993
|
-
if (currentConfig2.lastReleaseNotesSeen === "1.79.
|
|
452009
|
+
if (currentConfig2.lastReleaseNotesSeen === "1.79.1") {
|
|
451994
452010
|
return;
|
|
451995
452011
|
}
|
|
451996
452012
|
saveGlobalConfig(_temp325);
|
|
@@ -452675,12 +452691,12 @@ function LogoV2() {
|
|
|
452675
452691
|
return t41;
|
|
452676
452692
|
}
|
|
452677
452693
|
function _temp325(current) {
|
|
452678
|
-
if (current.lastReleaseNotesSeen === "1.79.
|
|
452694
|
+
if (current.lastReleaseNotesSeen === "1.79.1") {
|
|
452679
452695
|
return current;
|
|
452680
452696
|
}
|
|
452681
452697
|
return {
|
|
452682
452698
|
...current,
|
|
452683
|
-
lastReleaseNotesSeen: "1.79.
|
|
452699
|
+
lastReleaseNotesSeen: "1.79.1"
|
|
452684
452700
|
};
|
|
452685
452701
|
}
|
|
452686
452702
|
function _temp241(s_0) {
|
|
@@ -469517,7 +469533,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
|
|
|
469517
469533
|
if (spec.name !== specName) {
|
|
469518
469534
|
throw new Error("Agentic CI workflow spec name does not match");
|
|
469519
469535
|
}
|
|
469520
|
-
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.79.
|
|
469536
|
+
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.79.1" : "1.79.1");
|
|
469521
469537
|
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
|
|
469522
469538
|
throw new Error("invalid ur-agent package version");
|
|
469523
469539
|
}
|
|
@@ -470510,7 +470526,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
|
|
|
470510
470526
|
path: ".github/workflows/ur.yml",
|
|
470511
470527
|
root: "project",
|
|
470512
470528
|
content: compileAgenticCiWorkflow("default", {
|
|
470513
|
-
packageVersion: typeof MACRO !== "undefined" ? "1.79.
|
|
470529
|
+
packageVersion: typeof MACRO !== "undefined" ? "1.79.1" : "1.79.1"
|
|
470514
470530
|
})
|
|
470515
470531
|
},
|
|
470516
470532
|
{
|
|
@@ -470573,7 +470589,7 @@ function value(tokens, flag) {
|
|
|
470573
470589
|
return index2 >= 0 ? tokens[index2 + 1] : undefined;
|
|
470574
470590
|
}
|
|
470575
470591
|
function cliVersion() {
|
|
470576
|
-
return typeof MACRO !== "undefined" ? "1.79.
|
|
470592
|
+
return typeof MACRO !== "undefined" ? "1.79.1" : "1.79.1";
|
|
470577
470593
|
}
|
|
470578
470594
|
function workflowPath(cwd2) {
|
|
470579
470595
|
return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
|
|
@@ -476429,7 +476445,7 @@ function createAcpStdioApp(deps) {
|
|
|
476429
476445
|
}
|
|
476430
476446
|
},
|
|
476431
476447
|
authMethods: [],
|
|
476432
|
-
agentInfo: { name: "UR-Nexus", version: "1.79.
|
|
476448
|
+
agentInfo: { name: "UR-Nexus", version: "1.79.1" }
|
|
476433
476449
|
})).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
|
|
476434
476450
|
const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
|
|
476435
476451
|
await runtime2.announce({
|
|
@@ -476526,7 +476542,7 @@ function createAcpStdioAgent(deps) {
|
|
|
476526
476542
|
}
|
|
476527
476543
|
},
|
|
476528
476544
|
authMethods: [],
|
|
476529
|
-
agentInfo: { name: "UR-Nexus", version: "1.79.
|
|
476545
|
+
agentInfo: { name: "UR-Nexus", version: "1.79.1" }
|
|
476530
476546
|
});
|
|
476531
476547
|
return;
|
|
476532
476548
|
case "authenticate":
|
|
@@ -687752,7 +687768,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
687752
687768
|
smapsRollup,
|
|
687753
687769
|
platform: process.platform,
|
|
687754
687770
|
nodeVersion: process.version,
|
|
687755
|
-
ccVersion: "1.79.
|
|
687771
|
+
ccVersion: "1.79.1"
|
|
687756
687772
|
};
|
|
687757
687773
|
}
|
|
687758
687774
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -688332,7 +688348,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
688332
688348
|
var call155 = async () => {
|
|
688333
688349
|
return {
|
|
688334
688350
|
type: "text",
|
|
688335
|
-
value: "1.79.
|
|
688351
|
+
value: "1.79.1"
|
|
688336
688352
|
};
|
|
688337
688353
|
}, version2, version_default;
|
|
688338
688354
|
var init_version = __esm(() => {
|
|
@@ -699599,7 +699615,7 @@ function generateHtmlReport(data, insights) {
|
|
|
699599
699615
|
</html>`;
|
|
699600
699616
|
}
|
|
699601
699617
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
699602
|
-
const version3 = typeof MACRO !== "undefined" ? "1.79.
|
|
699618
|
+
const version3 = typeof MACRO !== "undefined" ? "1.79.1" : "unknown";
|
|
699603
699619
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
699604
699620
|
const facets_summary = {
|
|
699605
699621
|
total: facets.size,
|
|
@@ -703915,7 +703931,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
703915
703931
|
init_settings2();
|
|
703916
703932
|
init_slowOperations();
|
|
703917
703933
|
init_uuid();
|
|
703918
|
-
VERSION7 = typeof MACRO !== "undefined" ? "1.79.
|
|
703934
|
+
VERSION7 = typeof MACRO !== "undefined" ? "1.79.1" : "unknown";
|
|
703919
703935
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
703920
703936
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
703921
703937
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -705120,7 +705136,7 @@ var init_filesystem = __esm(() => {
|
|
|
705120
705136
|
];
|
|
705121
705137
|
DIR_SEP = posix10.sep;
|
|
705122
705138
|
getURTempDir = memoize_default(function getURTempDir2() {
|
|
705123
|
-
const baseTmpDir = process.env.UR_CODE_TMPDIR ||
|
|
705139
|
+
const baseTmpDir = process.env.UR_CODE_TMPDIR || tmpdir19();
|
|
705124
705140
|
const fs12 = getFsImplementation();
|
|
705125
705141
|
let resolvedBaseTmpDir = baseTmpDir;
|
|
705126
705142
|
try {
|
|
@@ -705130,7 +705146,7 @@ var init_filesystem = __esm(() => {
|
|
|
705130
705146
|
});
|
|
705131
705147
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
705132
705148
|
const nonce = randomBytes20(16).toString("hex");
|
|
705133
|
-
return join234(getURTempDir(), "bundled-skills", "1.79.
|
|
705149
|
+
return join234(getURTempDir(), "bundled-skills", "1.79.1", nonce);
|
|
705134
705150
|
});
|
|
705135
705151
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
705136
705152
|
});
|
|
@@ -711505,7 +711521,7 @@ function computeFingerprint(messageText2, version3) {
|
|
|
711505
711521
|
}
|
|
711506
711522
|
function computeFingerprintFromMessages(messages) {
|
|
711507
711523
|
const firstMessageText = extractFirstMessageText(messages);
|
|
711508
|
-
return computeFingerprint(firstMessageText, "1.79.
|
|
711524
|
+
return computeFingerprint(firstMessageText, "1.79.1");
|
|
711509
711525
|
}
|
|
711510
711526
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
711511
711527
|
var init_fingerprint = () => {};
|
|
@@ -713427,7 +713443,7 @@ async function sideQuery(opts) {
|
|
|
713427
713443
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
713428
713444
|
}
|
|
713429
713445
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
713430
|
-
const fingerprint2 = computeFingerprint(messageText2, "1.79.
|
|
713446
|
+
const fingerprint2 = computeFingerprint(messageText2, "1.79.1");
|
|
713431
713447
|
const attributionHeader = getAttributionHeader(fingerprint2);
|
|
713432
713448
|
const systemBlocks = [
|
|
713433
713449
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -718264,7 +718280,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
718264
718280
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
718265
718281
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
718266
718282
|
betas: getSdkBetas(),
|
|
718267
|
-
ur_version: "1.79.
|
|
718283
|
+
ur_version: "1.79.1",
|
|
718268
718284
|
output_style: outputStyle2,
|
|
718269
718285
|
agents: inputs.agents.map((agent2) => agent2.agentType),
|
|
718270
718286
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -732136,7 +732152,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
732136
732152
|
function getSemverPart(version3) {
|
|
732137
732153
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
732138
732154
|
}
|
|
732139
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.79.
|
|
732155
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.79.1") {
|
|
732140
732156
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react224.useState(() => getSemverPart(initialVersion));
|
|
732141
732157
|
if (!updatedVersion) {
|
|
732142
732158
|
return null;
|
|
@@ -732185,7 +732201,7 @@ function AutoUpdater({
|
|
|
732185
732201
|
return;
|
|
732186
732202
|
}
|
|
732187
732203
|
if (false) {}
|
|
732188
|
-
const currentVersion = "1.79.
|
|
732204
|
+
const currentVersion = "1.79.1";
|
|
732189
732205
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
732190
732206
|
let latestVersion = await getLatestVersion(channel);
|
|
732191
732207
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -732414,12 +732430,12 @@ function NativeAutoUpdater({
|
|
|
732414
732430
|
logEvent("tengu_native_auto_updater_start", {});
|
|
732415
732431
|
try {
|
|
732416
732432
|
const maxVersion = await getMaxVersion();
|
|
732417
|
-
if (maxVersion && gt("1.79.
|
|
732433
|
+
if (maxVersion && gt("1.79.1", maxVersion)) {
|
|
732418
732434
|
const msg = await getMaxVersionMessage();
|
|
732419
732435
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
732420
732436
|
}
|
|
732421
732437
|
const result = await installLatest(channel);
|
|
732422
|
-
const currentVersion = "1.79.
|
|
732438
|
+
const currentVersion = "1.79.1";
|
|
732423
732439
|
const latencyMs = Date.now() - startTime;
|
|
732424
732440
|
if (result.lockFailed) {
|
|
732425
732441
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -732556,17 +732572,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
732556
732572
|
const maxVersion = await getMaxVersion();
|
|
732557
732573
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
732558
732574
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
732559
|
-
if (gte("1.79.
|
|
732560
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.79.
|
|
732575
|
+
if (gte("1.79.1", maxVersion)) {
|
|
732576
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.79.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
732561
732577
|
setUpdateAvailable(false);
|
|
732562
732578
|
return;
|
|
732563
732579
|
}
|
|
732564
732580
|
latest = maxVersion;
|
|
732565
732581
|
}
|
|
732566
|
-
const hasUpdate = latest && !gte("1.79.
|
|
732582
|
+
const hasUpdate = latest && !gte("1.79.1", latest) && !shouldSkipVersion(latest);
|
|
732567
732583
|
setUpdateAvailable(!!hasUpdate);
|
|
732568
732584
|
if (hasUpdate) {
|
|
732569
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.79.
|
|
732585
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.79.1"} -> ${latest}`);
|
|
732570
732586
|
}
|
|
732571
732587
|
};
|
|
732572
732588
|
$2[0] = t1;
|
|
@@ -732600,7 +732616,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
732600
732616
|
wrap: "truncate",
|
|
732601
732617
|
children: [
|
|
732602
732618
|
"currentVersion: ",
|
|
732603
|
-
"1.79.
|
|
732619
|
+
"1.79.1"
|
|
732604
732620
|
]
|
|
732605
732621
|
}, undefined, true, undefined, this);
|
|
732606
732622
|
$2[3] = verbose;
|
|
@@ -743400,7 +743416,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
743400
743416
|
project_dir: getOriginalCwd(),
|
|
743401
743417
|
added_dirs: addedDirs
|
|
743402
743418
|
},
|
|
743403
|
-
version: "1.79.
|
|
743419
|
+
version: "1.79.1",
|
|
743404
743420
|
output_style: {
|
|
743405
743421
|
name: outputStyleName
|
|
743406
743422
|
},
|
|
@@ -743535,7 +743551,7 @@ function StatusLineInner({
|
|
|
743535
743551
|
const attention = customStatusError ?? taskAttention;
|
|
743536
743552
|
const terminalSize = React133.useContext(TerminalSizeContext);
|
|
743537
743553
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
743538
|
-
version: "1.79.
|
|
743554
|
+
version: "1.79.1",
|
|
743539
743555
|
providerLabel: providerRuntime.providerLabel,
|
|
743540
743556
|
authMode: providerRuntime.authLabel,
|
|
743541
743557
|
model: renderModelName(mainLoopModel) || providerRuntime.model || "",
|
|
@@ -755832,7 +755848,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
755832
755848
|
} catch {}
|
|
755833
755849
|
const data = {
|
|
755834
755850
|
trigger: trigger2,
|
|
755835
|
-
version: "1.79.
|
|
755851
|
+
version: "1.79.1",
|
|
755836
755852
|
platform: process.platform,
|
|
755837
755853
|
transcript,
|
|
755838
755854
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -768212,7 +768228,7 @@ function WelcomeV2() {
|
|
|
768212
768228
|
dimColor: true,
|
|
768213
768229
|
children: [
|
|
768214
768230
|
"v",
|
|
768215
|
-
"1.79.
|
|
768231
|
+
"1.79.1"
|
|
768216
768232
|
]
|
|
768217
768233
|
}, undefined, true, undefined, this)
|
|
768218
768234
|
]
|
|
@@ -769472,7 +769488,7 @@ function completeOnboarding() {
|
|
|
769472
769488
|
saveGlobalConfig((current) => ({
|
|
769473
769489
|
...current,
|
|
769474
769490
|
hasCompletedOnboarding: true,
|
|
769475
|
-
lastOnboardingVersion: "1.79.
|
|
769491
|
+
lastOnboardingVersion: "1.79.1"
|
|
769476
769492
|
}));
|
|
769477
769493
|
}
|
|
769478
769494
|
function showDialog(root2, renderer) {
|
|
@@ -774619,7 +774635,7 @@ function appendToLog(path24, message) {
|
|
|
774619
774635
|
cwd: getFsImplementation().cwd(),
|
|
774620
774636
|
userType: process.env.USER_TYPE,
|
|
774621
774637
|
sessionId: getSessionId(),
|
|
774622
|
-
version: "1.79.
|
|
774638
|
+
version: "1.79.1"
|
|
774623
774639
|
};
|
|
774624
774640
|
getLogWriter(path24).write(messageWithTimestamp);
|
|
774625
774641
|
}
|
|
@@ -778778,8 +778794,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
778778
778794
|
}
|
|
778779
778795
|
async function checkEnvLessBridgeMinVersion() {
|
|
778780
778796
|
const cfg = await getEnvLessBridgeConfig();
|
|
778781
|
-
if (cfg.min_version && lt("1.79.
|
|
778782
|
-
return `Your version of UR (${"1.79.
|
|
778797
|
+
if (cfg.min_version && lt("1.79.1", cfg.min_version)) {
|
|
778798
|
+
return `Your version of UR (${"1.79.1"}) is too old for Remote Control.
|
|
778783
778799
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
778784
778800
|
}
|
|
778785
778801
|
return null;
|
|
@@ -779253,7 +779269,7 @@ async function initBridgeCore(params) {
|
|
|
779253
779269
|
const rawApi = createBridgeApiClient({
|
|
779254
779270
|
baseUrl,
|
|
779255
779271
|
getAccessToken,
|
|
779256
|
-
runnerVersion: "1.79.
|
|
779272
|
+
runnerVersion: "1.79.1",
|
|
779257
779273
|
onDebug: logForDebugging,
|
|
779258
779274
|
onAuth401,
|
|
779259
779275
|
getTrustedDeviceToken
|
|
@@ -788726,7 +788742,7 @@ function getAgUiCapabilities() {
|
|
|
788726
788742
|
name: "UR-Nexus",
|
|
788727
788743
|
type: "ur-nexus",
|
|
788728
788744
|
description: "Provider-flexible, local-first autonomous engineering workflow agent.",
|
|
788729
|
-
version: "1.79.
|
|
788745
|
+
version: "1.79.1",
|
|
788730
788746
|
provider: "UR",
|
|
788731
788747
|
documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
|
|
788732
788748
|
},
|
|
@@ -789857,7 +789873,7 @@ function createMCPServer(cwd4, debug2, verbose) {
|
|
|
789857
789873
|
};
|
|
789858
789874
|
const server2 = new Server({
|
|
789859
789875
|
name: "ur-nexus",
|
|
789860
|
-
version: "1.79.
|
|
789876
|
+
version: "1.79.1"
|
|
789861
789877
|
}, {
|
|
789862
789878
|
capabilities: {
|
|
789863
789879
|
tools: {}
|
|
@@ -791015,7 +791031,7 @@ function thrownResponse(error40) {
|
|
|
791015
791031
|
}
|
|
791016
791032
|
async function createUrMcp2026Runtime(options5) {
|
|
791017
791033
|
const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
|
|
791018
|
-
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.79.
|
|
791034
|
+
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.79.1" }, { capabilities: {} });
|
|
791019
791035
|
const [clientTransport, serverTransport] = createLinkedTransportPair();
|
|
791020
791036
|
try {
|
|
791021
791037
|
await server2.connect(serverTransport);
|
|
@@ -791026,7 +791042,7 @@ async function createUrMcp2026Runtime(options5) {
|
|
|
791026
791042
|
}
|
|
791027
791043
|
const runtime2 = new Mcp2026Runtime({
|
|
791028
791044
|
cwd: options5.cwd,
|
|
791029
|
-
version: "1.79.
|
|
791045
|
+
version: "1.79.1",
|
|
791030
791046
|
backend: {
|
|
791031
791047
|
listTools: async () => {
|
|
791032
791048
|
const listed = await client2.listTools();
|
|
@@ -793624,7 +793640,7 @@ async function update() {
|
|
|
793624
793640
|
logEvent("tengu_update_check", {});
|
|
793625
793641
|
const diagnostic2 = await getDoctorDiagnostic();
|
|
793626
793642
|
const result = await checkUpgradeStatus({
|
|
793627
|
-
currentVersion: "1.79.
|
|
793643
|
+
currentVersion: "1.79.1",
|
|
793628
793644
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
793629
793645
|
installationType: diagnostic2.installationType,
|
|
793630
793646
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -794940,7 +794956,7 @@ ${customInstructions}` : customInstructions;
|
|
|
794940
794956
|
}
|
|
794941
794957
|
}
|
|
794942
794958
|
logForDiagnosticsNoPII("info", "started", {
|
|
794943
|
-
version: "1.79.
|
|
794959
|
+
version: "1.79.1",
|
|
794944
794960
|
is_native_binary: isInBundledMode()
|
|
794945
794961
|
});
|
|
794946
794962
|
registerCleanup(async () => {
|
|
@@ -795726,7 +795742,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
795726
795742
|
pendingHookMessages
|
|
795727
795743
|
}, renderAndRun);
|
|
795728
795744
|
}
|
|
795729
|
-
}).version("1.79.
|
|
795745
|
+
}).version("1.79.1 (UR-Nexus)", "-v, --version", "Output the version number");
|
|
795730
795746
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
795731
795747
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
795732
795748
|
if (canUserConfigureAdvisor()) {
|
|
@@ -796798,7 +796814,7 @@ if (false) {}
|
|
|
796798
796814
|
async function main2() {
|
|
796799
796815
|
const args = process.argv.slice(2);
|
|
796800
796816
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
796801
|
-
console.log(`${"1.79.
|
|
796817
|
+
console.log(`${"1.79.1"} (UR-Nexus)`);
|
|
796802
796818
|
return;
|
|
796803
796819
|
}
|
|
796804
796820
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
package/docs/AGENT_FEATURES.md
CHANGED
|
@@ -9,6 +9,12 @@ reproducible autonomous software engineering agent: every substantial task can
|
|
|
9
9
|
be driven as `spec -> plan -> patch -> test -> report -> rollback`, with the
|
|
10
10
|
spec as the durable source of truth and command evidence as the success gate.
|
|
11
11
|
|
|
12
|
+
## v1.79.1 Addition
|
|
13
|
+
|
|
14
|
+
| Addition | Surface | What it adds |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Self-healing Bash task output | `src/utils/Shell.ts`, `src/utils/permissions/filesystem.ts`, `test/shellExecutionIntegration.test.ts` | Uses the platform temp directory instead of assuming `/tmp`, aligns sandbox and permission roots, re-ensures temporary output storage for every launch, and atomically retries stdout/stderr creation after external directory cleanup so Bash recovers without restarting UR. |
|
|
17
|
+
|
|
12
18
|
## v1.79.0 Additions
|
|
13
19
|
|
|
14
20
|
| Addition | Surface | What it adds |
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# UR Gap Analysis — 2026-08-11 Research Snapshot
|
|
2
|
+
|
|
3
|
+
Baseline: UR `ur-agent@1.79.1`, HEAD `6faed11`, 186 slash commands, 60 tools.
|
|
4
|
+
Upstream references: Claude Code 2.1.226 (2026-08-08), Codex CLI (Aug 2026),
|
|
5
|
+
Gemini CLI v0.53.0 (2026-07-28), MCP spec `2026-07-28`, A2A v1.0 (Apr 2026).
|
|
6
|
+
|
|
7
|
+
Every "missing" row below was verified absent by grep over `src/`, and every
|
|
8
|
+
"present" row by a concrete file reference. Re-check primary sources before
|
|
9
|
+
acting: prerelease standards move weekly.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. Already at parity — no action
|
|
14
|
+
|
|
15
|
+
UR is closer to the frontier than the trend doc implies. Confirmed present:
|
|
16
|
+
|
|
17
|
+
| Upstream feature | UR implementation |
|
|
18
|
+
|---|---|
|
|
19
|
+
| MCP `2026-07-28` stateless core | `src/services/mcp/mcp2026.ts` (`MCP_2026_PROTOCOL_VERSION = '2026-07-28'`) |
|
|
20
|
+
| MCP Tasks extension (`tasks/get`, `tasks/update`, `tasks/cancel`) | `src/entrypoints/mcp2026.ts`, `src/services/mcp/mcp2026.ts` |
|
|
21
|
+
| MCP Apps (sandboxed HTML UI) | `ui/initialize`, `ui/resourceUri` in `mcp2026.ts` |
|
|
22
|
+
| MCP Extensions namespacing | `io.modelcontextprotocol/protocolVersion` header + `_meta` cross-check |
|
|
23
|
+
| A2A v1.0 signed Agent Cards | `src/services/agents/a2aCardSignature.ts` (Ed25519 detached JWS), `a2aV1.ts` |
|
|
24
|
+
| ACP / AG-UI servers | `src/services/agents/acpServer.ts`, `agUi.ts` |
|
|
25
|
+
| Cross-session agent messaging | `SendMessageTool`, `ListPeersTool` |
|
|
26
|
+
| Nested subagents with depth/concurrency caps | `src/tools/AgentTool/fanOutLimits.ts`, `fanOutSettings.ts` |
|
|
27
|
+
| Self-hosted runner | `src/self-hosted-runner/main.js`, gated by `feature('SELF_HOSTED_RUNNER')` |
|
|
28
|
+
| `--teleport`-style local continuation | `src/main.tsx`, `src/assistant/sessionHistory.ts` |
|
|
29
|
+
| `AGENTS.md` interop | `src/utils/agentmd.ts`, `memoryFileDetection.ts` |
|
|
30
|
+
| OpenTelemetry instrumentation | `src/utils/telemetry/instrumentation.ts` |
|
|
31
|
+
| Headless spend cap | `--max-budget-usd` in `src/main.tsx` |
|
|
32
|
+
| Plugin marketplace + search/show | `ur plugin search|show` (1.79.0) |
|
|
33
|
+
| Codex `/plan`, `/goal`, `/fork`, `/diff`, `/review` equivalents | `src/commands/{plan,goal,diff,review}` |
|
|
34
|
+
|
|
35
|
+
Notable divergence, deliberate or not: Anthropic **removed** `ultraplan` in
|
|
36
|
+
Claude Code 2.1.222 (2026-08-04). UR still ships `/ultraplan`. Worth deciding
|
|
37
|
+
whether that is a differentiator or dead weight.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 2. Missing — ranked by value
|
|
42
|
+
|
|
43
|
+
### P0 — security correctness
|
|
44
|
+
|
|
45
|
+
**1. Sandbox credential masking / TLS-terminating egress proxy.**
|
|
46
|
+
Claude Code 2.1.221–2.1.224 added `sandbox.credentials` masking with
|
|
47
|
+
`mode: "mask"` sentinel files, `extract` regex spans, `decode: "jwt"` +
|
|
48
|
+
`maskClaims`, and `awsPairs`/`sigv4` re-signing behind `network.tlsTerminate`.
|
|
49
|
+
UR's sandbox is filesystem-scope only — `src/utils/sandbox/sandboxProfile.ts`
|
|
50
|
+
implements `denyRead`/`denyWrite` and nothing else. A sandboxed Bash command in
|
|
51
|
+
UR that can read `~/.aws/credentials` exfiltrates the real secret.
|
|
52
|
+
*Likely same bug present:* upstream patched a trailing-slash bypass where
|
|
53
|
+
`denyRead: "~/.aws/"` was silently ignorable. UR's `normalizedPaths()`
|
|
54
|
+
(`sandboxProfile.ts:51`) dedupes and calls `normalizePath()` but performs no
|
|
55
|
+
trailing-slash stripping of its own — verify `normalizePath` handles it, and add
|
|
56
|
+
a regression test for both `~/.aws` and `~/.aws/`.
|
|
57
|
+
|
|
58
|
+
**2. `sandbox.network.strictAllowlist` (partial gap).** UR *does* have a network
|
|
59
|
+
allowlist — `sandbox.network.allowedDomains`, `allowManagedDomainsOnly`,
|
|
60
|
+
`allowUnixSockets` in `src/utils/sandbox/sandbox-adapter.ts`. What's absent is
|
|
61
|
+
the strict mode: deny non-allowlisted hosts outright instead of prompting.
|
|
62
|
+
Under automation (`ur exec`, `ur bg`, agentic CI) a prompt is not an answer, so
|
|
63
|
+
today an unattended run either stalls or falls through. One settings key plus a
|
|
64
|
+
branch in the egress decision path.
|
|
65
|
+
|
|
66
|
+
**3. `Tool(param:value)` permission-rule syntax.** `permissionRuleParser.ts`
|
|
67
|
+
supports only `Tool(content)`. Upstream added input-parameter matching with
|
|
68
|
+
wildcards — e.g. `Agent(model:opus)` to block expensive subagents,
|
|
69
|
+
`Bash(timeout:*)`. Without it, policies cannot constrain *how* a tool is called,
|
|
70
|
+
only which paths it touches.
|
|
71
|
+
|
|
72
|
+
**4. Bash permission-check hardening.** Upstream shipped three separate bypass
|
|
73
|
+
fixes in Aug 2026: zsh hidden commands inside `[[ ]]` regex conditionals,
|
|
74
|
+
commands padded with tabs/invisible Unicode hiding text from the approval
|
|
75
|
+
dialog, and PowerShell paths containing quote characters. These are parser
|
|
76
|
+
classes, not one-off bugs — audit UR's command splitter against all three.
|
|
77
|
+
|
|
78
|
+
### P1 — runaway-loop containment
|
|
79
|
+
|
|
80
|
+
**5. Per-session budgets, not just per-turn limits.** UR caps subagent depth and
|
|
81
|
+
concurrency but has no session totals. Upstream added a WebSearch cap
|
|
82
|
+
(default 200, `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION`) and a subagent-spawn
|
|
83
|
+
cap, then *removed* the spawn cap once long sessions started failing — so ship
|
|
84
|
+
the search budget, and make the spawn budget advisory rather than fatal.
|
|
85
|
+
|
|
86
|
+
**6. `--forward-subagent-text` for stream-json.** UR has `--include-hook-events`
|
|
87
|
+
and `--include-partial-messages` but no way to surface subagent text/thinking in
|
|
88
|
+
headless output, including nested (depth-2+) agents keyed by spawning
|
|
89
|
+
`tool_use` id. This blocks CI observability of delegated work.
|
|
90
|
+
|
|
91
|
+
### P2 — protocol currency
|
|
92
|
+
|
|
93
|
+
**7. MCP `InputRequiredResult`.** The `2026-07-28` spec deprecates
|
|
94
|
+
server-initiated elicitation and sampling in favor of `InputRequiredResult`.
|
|
95
|
+
UR implements the old `Elicitation`/`ElicitationResult` hooks (`src/types/hooks.ts`)
|
|
96
|
+
and has zero `InputRequired` references. Ship the new shape alongside the old.
|
|
97
|
+
|
|
98
|
+
**8. MCP `roots/list` + `notifications/roots/list_changed`.** Absent entirely.
|
|
99
|
+
Deprecated in `2026-07-28` (SEP-2577), but pre-2026 servers still expect it, and
|
|
100
|
+
upstream wires additional working directories into it. Low effort, moderate
|
|
101
|
+
compatibility win.
|
|
102
|
+
|
|
103
|
+
**9. A2A gaps.** Two items: (a) `src/services/agents/trends.ts:666` advertises
|
|
104
|
+
`protocolVersion: '0.3.0'` in the Agent Card while `a2aV1.ts` implements v1.0
|
|
105
|
+
signing — the card lies about its own version; (b) no gRPC transport and no AP2
|
|
106
|
+
payments extension, both part of the v1.0 surface.
|
|
107
|
+
|
|
108
|
+
### P3 — accessibility and ergonomics
|
|
109
|
+
|
|
110
|
+
**10. Screen-reader mode.** Zero hits for `axScreenReader`/`--ax-screen-reader`.
|
|
111
|
+
Upstream shipped opt-in plain-text rendering plus per-keystroke and
|
|
112
|
+
per-deletion echo announcements. UR's Ink UI is unusable with a screen reader
|
|
113
|
+
today. This is the single largest addressable-user gap in the list.
|
|
114
|
+
|
|
115
|
+
**11. `/config key=value` from the prompt.** `src/commands/config/` exposes only
|
|
116
|
+
the interactive panel. Upstream's `/config thinking=false` works in interactive,
|
|
117
|
+
`-p`, and remote modes, with `/config --help` listing shorthand keys — the only
|
|
118
|
+
way to change a setting inside a headless run.
|
|
119
|
+
|
|
120
|
+
**12. `DirectoryAdded` hook.** UR has `CwdChanged` and `WorktreeCreate` but
|
|
121
|
+
fires nothing on `/add-dir`. Blocks per-directory setup automation.
|
|
122
|
+
|
|
123
|
+
**13. Explicit `ur session archive` / `unarchive`.** `archiveSession` exists only
|
|
124
|
+
in `src/bridge/`. Codex exposes `/archive` in the TUI and `codex archive` in the
|
|
125
|
+
CLI, with archived sessions protected from resume/fork. UR's session list grows
|
|
126
|
+
without bound.
|
|
127
|
+
|
|
128
|
+
**14. Vim insert-mode remaps.** `vimInsertModeRemaps` (e.g. `jj` → Escape) is a
|
|
129
|
+
one-setting change against UR's existing `src/vim/`.
|
|
130
|
+
|
|
131
|
+
**15. Telemetry completeness.** No `assistant_response` OTel log event, no
|
|
132
|
+
`message.uuid`/`client_request_id`/`tool_source` correlation attributes, no
|
|
133
|
+
`workflow.run_id`/`workflow.name`. UR has workflows and multi-agent runs but
|
|
134
|
+
cannot reconstruct a run from OTel data.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 3. Explicitly not recommended
|
|
139
|
+
|
|
140
|
+
- **`EndConversation` tool.** Abuse-termination for a consumer chat product;
|
|
141
|
+
irrelevant to a local terminal agent the operator already controls.
|
|
142
|
+
- **Gateway spend-limit UX.** Presupposes Anthropic's managed gateway. UR's
|
|
143
|
+
`--max-budget-usd` covers the local equivalent.
|
|
144
|
+
- **`/dataviz` skill.** Content, not capability. Ship as a plugin if wanted.
|
|
145
|
+
- **Codex `--approve-for-me`.** Routes approvals through automated review —
|
|
146
|
+
directly opposed to UR's explicit-trust-boundary stance in
|
|
147
|
+
`docs/FRONTIER_AGENT_FEATURES.md`.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 4. Suggested sequencing
|
|
152
|
+
|
|
153
|
+
1. Credential masking + strict network allowlist (#1, #2) — same subsystem.
|
|
154
|
+
2. Bash permission parser audit (#4) + `Tool(param:value)` (#3).
|
|
155
|
+
3. Screen-reader mode (#10) — self-contained in `src/ink/`.
|
|
156
|
+
4. MCP `InputRequiredResult` + `roots/list` (#7, #8); fix the A2A card version (#9a).
|
|
157
|
+
5. Session budgets (#5), `--forward-subagent-text` (#6), OTel attributes (#15).
|
|
158
|
+
6. Ergonomics batch: `/config key=value`, `DirectoryAdded`, session archive,
|
|
159
|
+
vim remaps (#11–14).
|
|
160
|
+
|
|
161
|
+
Then update `docs/AGENT_TRENDS.md` — its snapshot line still reads
|
|
162
|
+
`2026-08-10` and the coverage matrix predates the `2026-07-28` MCP final spec.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Sources
|
|
167
|
+
|
|
168
|
+
- [Claude Code changelog](https://code.claude.com/docs/en/changelog)
|
|
169
|
+
- [Enabling Claude Code to work more autonomously — Anthropic](https://www.anthropic.com/news/enabling-claude-code-to-work-more-autonomously)
|
|
170
|
+
- [The 2026-07-28 MCP Specification](https://blog.modelcontextprotocol.io/posts/2026-07-28/)
|
|
171
|
+
- [The 2026-07-28 MCP Specification Release Candidate](https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/)
|
|
172
|
+
- [The 2026 MCP Roadmap](https://blog.modelcontextprotocol.io/posts/2026-mcp-roadmap/)
|
|
173
|
+
- [MCP 2026-07-28 spec: every breaking change, with fixes](https://stacktr.ee/blog/mcp-2026-spec-changes)
|
|
174
|
+
- [Codex CLI in 2026: What's New, What's Changed](https://codex.danielvaughan.com/2026/03/27/codex-cli-in-2026-whats-new/)
|
|
175
|
+
- [Codex Slash Commands: Complete CLI Reference (2026)](https://explainx.ai/blog/codex-slash-commands-complete-reference-guide-2026)
|
|
176
|
+
- [Gemini CLI changelog v0.53.0](https://geminicli.com/docs/changelogs/latest/)
|
|
177
|
+
- [Gemini CLI `/plan` command PR #17698](https://github.com/google-gemini/gemini-cli/pull/17698)
|
|
178
|
+
- [A2A Protocol Guide 2026](https://rapidclaw.dev/blog/a2a-protocol-complete-guide-2026)
|
|
179
|
+
- [MCP vs A2A vs AG-UI: Agent Protocols Guide 2026](https://nextpj.net/blog/mcp-a2a-ag-ui-ai-agent-protocols-guide-2026)
|
|
180
|
+
- [The 2026 Guide to Coding CLI Tools: 15 AI Agents Compared](https://www.tembo.io/blog/coding-cli-tools-comparison)
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -56,6 +56,20 @@ ur config set provider ollama
|
|
|
56
56
|
ur provider status
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
+
### Every Bash call fails with `ENOENT .../tasks/<id>.output`
|
|
60
|
+
|
|
61
|
+
- Likely cause: the operating system or a cleanup process reclaimed UR's
|
|
62
|
+
session task-output directory, or the conventional Unix `/tmp` path is
|
|
63
|
+
unavailable. The command itself never started; identical failure from
|
|
64
|
+
`echo ok` distinguishes this harness failure from an application error.
|
|
65
|
+
- Fix: upgrade to UR 1.79.1 or newer. UR now uses `os.tmpdir()`, ensures the
|
|
66
|
+
output directory for every launch, and automatically recreates and retries
|
|
67
|
+
when it disappears. Restarting an older session is only a temporary
|
|
68
|
+
workaround.
|
|
69
|
+
- Verification: start a new UR session and ask it to run `echo ok` through
|
|
70
|
+
Bash. A successful result confirms the harness; `/design3d doctor` alone
|
|
71
|
+
validates the local slash command but does not exercise Bash execution.
|
|
72
|
+
|
|
59
73
|
## Providers and models
|
|
60
74
|
|
|
61
75
|
### Provider selected but the model is unavailable
|
package/docs/VALIDATION.md
CHANGED
package/documentation/index.html
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
<main id="content" class="content">
|
|
46
46
|
<header class="topbar">
|
|
47
47
|
<div>
|
|
48
|
-
<p class="eyebrow">Version 1.79.
|
|
48
|
+
<p class="eyebrow">Version 1.79.1</p>
|
|
49
49
|
<h1>UR-Nexus Documentation</h1>
|
|
50
50
|
<p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
|
|
51
51
|
</div>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "ur-inline-diffs",
|
|
3
3
|
"displayName": "UR Inline Diffs",
|
|
4
4
|
"description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
|
|
5
|
-
"version": "1.79.
|
|
5
|
+
"version": "1.79.1",
|
|
6
6
|
"publisher": "ur-nexus",
|
|
7
7
|
"engines": {
|
|
8
8
|
"vscode": "^1.92.0"
|
package/package.json
CHANGED