ur-agent 1.68.16 → 1.68.17
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 +15 -0
- package/dist/cli.js +154 -85
- 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/technical/01-architecture.md +3 -1
- package/technical/04-tools.md +11 -0
- package/technical/README.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.68.17
|
|
4
|
+
|
|
5
|
+
- Fixed false `TaskListRequired` failures for observational Bash capability
|
|
6
|
+
checks. Task tracking now has a classification distinct from permission
|
|
7
|
+
auto-approval, so an executable probe can remain permission- and
|
|
8
|
+
sandbox-sensitive without being mislabeled as a workspace change.
|
|
9
|
+
- The Bash classification is category-based rather than tailored to one
|
|
10
|
+
module: known reads, exact help/version checks, command-presence checks, and
|
|
11
|
+
import-only Python probes for any module can run without reopening a
|
|
12
|
+
completed task. Arbitrary interpreter code, output writes, background
|
|
13
|
+
execution, sandbox overrides, and unknown commands remain task-gated.
|
|
14
|
+
- Both the initial call and its final post-permission input are classified.
|
|
15
|
+
Hooks or permission handlers therefore cannot rewrite an observational probe
|
|
16
|
+
into an untracked mutation.
|
|
17
|
+
|
|
3
18
|
## 1.68.16
|
|
4
19
|
|
|
5
20
|
- First pieces of the UR Nexus visual identity, as terminal primitives rather
|
package/dist/cli.js
CHANGED
|
@@ -75717,7 +75717,7 @@ var init_auth = __esm(() => {
|
|
|
75717
75717
|
|
|
75718
75718
|
// src/utils/userAgent.ts
|
|
75719
75719
|
function getURCodeUserAgent() {
|
|
75720
|
-
return `ur/${"1.68.
|
|
75720
|
+
return `ur/${"1.68.17"}`;
|
|
75721
75721
|
}
|
|
75722
75722
|
|
|
75723
75723
|
// src/utils/workloadContext.ts
|
|
@@ -75739,7 +75739,7 @@ function getUserAgent() {
|
|
|
75739
75739
|
const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
|
|
75740
75740
|
const workload = getWorkload();
|
|
75741
75741
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
75742
|
-
return `ur-cli/${"1.68.
|
|
75742
|
+
return `ur-cli/${"1.68.17"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
75743
75743
|
}
|
|
75744
75744
|
function getMCPUserAgent() {
|
|
75745
75745
|
const parts = [];
|
|
@@ -75753,7 +75753,7 @@ function getMCPUserAgent() {
|
|
|
75753
75753
|
parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
|
|
75754
75754
|
}
|
|
75755
75755
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
75756
|
-
return `ur/${"1.68.
|
|
75756
|
+
return `ur/${"1.68.17"}${suffix}`;
|
|
75757
75757
|
}
|
|
75758
75758
|
function getWebFetchUserAgent() {
|
|
75759
75759
|
return `UR-User (${getURCodeUserAgent()})`;
|
|
@@ -75891,7 +75891,7 @@ var init_user = __esm(() => {
|
|
|
75891
75891
|
deviceId,
|
|
75892
75892
|
sessionId: getSessionId(),
|
|
75893
75893
|
email: getEmail(),
|
|
75894
|
-
appVersion: "1.68.
|
|
75894
|
+
appVersion: "1.68.17",
|
|
75895
75895
|
platform: getHostPlatformForAnalytics(),
|
|
75896
75896
|
organizationUuid,
|
|
75897
75897
|
accountUuid,
|
|
@@ -84091,7 +84091,7 @@ var init_metadata = __esm(() => {
|
|
|
84091
84091
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
84092
84092
|
WHITESPACE_REGEX = /\s+/;
|
|
84093
84093
|
getVersionBase = memoize_default(() => {
|
|
84094
|
-
const match = "1.68.
|
|
84094
|
+
const match = "1.68.17".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
84095
84095
|
return match ? match[0] : undefined;
|
|
84096
84096
|
});
|
|
84097
84097
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -84131,7 +84131,7 @@ var init_metadata = __esm(() => {
|
|
|
84131
84131
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
84132
84132
|
isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
|
|
84133
84133
|
isURAiAuth: isURAISubscriber(),
|
|
84134
|
-
version: "1.68.
|
|
84134
|
+
version: "1.68.17",
|
|
84135
84135
|
versionBase: getVersionBase(),
|
|
84136
84136
|
buildTime: "",
|
|
84137
84137
|
deploymentEnvironment: env2.detectDeploymentEnvironment(),
|
|
@@ -84801,7 +84801,7 @@ function initialize1PEventLogging() {
|
|
|
84801
84801
|
const platform2 = getPlatform();
|
|
84802
84802
|
const attributes = {
|
|
84803
84803
|
[import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
|
|
84804
|
-
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.68.
|
|
84804
|
+
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.68.17"
|
|
84805
84805
|
};
|
|
84806
84806
|
if (platform2 === "wsl") {
|
|
84807
84807
|
const wslVersion = getWslVersion();
|
|
@@ -84829,7 +84829,7 @@ function initialize1PEventLogging() {
|
|
|
84829
84829
|
})
|
|
84830
84830
|
]
|
|
84831
84831
|
});
|
|
84832
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.68.
|
|
84832
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.68.17");
|
|
84833
84833
|
}
|
|
84834
84834
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
84835
84835
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -94717,7 +94717,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
|
|
|
94717
94717
|
function formatA2AAgentCard(options = {}, pretty = true) {
|
|
94718
94718
|
return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
|
|
94719
94719
|
}
|
|
94720
|
-
var urVersion = "1.68.
|
|
94720
|
+
var urVersion = "1.68.17", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
|
|
94721
94721
|
var init_trends = __esm(() => {
|
|
94722
94722
|
init_a2aCardSignature();
|
|
94723
94723
|
coverage = [
|
|
@@ -97520,7 +97520,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
97520
97520
|
if (!isAttributionHeaderEnabled()) {
|
|
97521
97521
|
return "";
|
|
97522
97522
|
}
|
|
97523
|
-
const version2 = `${"1.68.
|
|
97523
|
+
const version2 = `${"1.68.17"}.${fingerprint}`;
|
|
97524
97524
|
const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
|
|
97525
97525
|
const cch = "";
|
|
97526
97526
|
const workload = getWorkload();
|
|
@@ -155398,7 +155398,7 @@ var init_projectSafety = __esm(() => {
|
|
|
155398
155398
|
function getInstruments() {
|
|
155399
155399
|
if (instruments)
|
|
155400
155400
|
return instruments;
|
|
155401
|
-
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.68.
|
|
155401
|
+
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.68.17");
|
|
155402
155402
|
instruments = {
|
|
155403
155403
|
operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
|
|
155404
155404
|
description: "GenAI operation duration.",
|
|
@@ -155496,7 +155496,7 @@ function genAiAgentAttributes() {
|
|
|
155496
155496
|
"gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
|
|
155497
155497
|
"gen_ai.provider.name": "ur",
|
|
155498
155498
|
"gen_ai.agent.name": "UR-Nexus",
|
|
155499
|
-
"gen_ai.agent.version": "1.68.
|
|
155499
|
+
"gen_ai.agent.version": "1.68.17"
|
|
155500
155500
|
};
|
|
155501
155501
|
}
|
|
155502
155502
|
function genAiWorkflowAttributes(workflowName) {
|
|
@@ -155512,7 +155512,7 @@ function genAiWorkflowAttributes(workflowName) {
|
|
|
155512
155512
|
function startGenAiWorkflowSpan(workflowName) {
|
|
155513
155513
|
const attributes = genAiWorkflowAttributes(workflowName);
|
|
155514
155514
|
const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
|
|
155515
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.
|
|
155515
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.17").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
155516
155516
|
}
|
|
155517
155517
|
function endGenAiWorkflowSpan(span, options2 = {}) {
|
|
155518
155518
|
try {
|
|
@@ -155550,7 +155550,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
|
|
|
155550
155550
|
if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
|
|
155551
155551
|
attributes["gen_ai.memory.record.count"] = options2.recordCount;
|
|
155552
155552
|
}
|
|
155553
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.
|
|
155553
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.17").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
155554
155554
|
}
|
|
155555
155555
|
function endGenAiMemorySpan(span, options2 = {}) {
|
|
155556
155556
|
try {
|
|
@@ -249033,7 +249033,7 @@ function getTelemetryAttributes() {
|
|
|
249033
249033
|
attributes["session.id"] = sessionId;
|
|
249034
249034
|
}
|
|
249035
249035
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
249036
|
-
attributes["app.version"] = "1.68.
|
|
249036
|
+
attributes["app.version"] = "1.68.17";
|
|
249037
249037
|
}
|
|
249038
249038
|
const oauthAccount = getOauthAccountInfo();
|
|
249039
249039
|
if (oauthAccount) {
|
|
@@ -295513,7 +295513,7 @@ function getInstallationEnv() {
|
|
|
295513
295513
|
return;
|
|
295514
295514
|
}
|
|
295515
295515
|
function getURCodeVersion() {
|
|
295516
|
-
return "1.68.
|
|
295516
|
+
return "1.68.17";
|
|
295517
295517
|
}
|
|
295518
295518
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
295519
295519
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -302844,7 +302844,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
302844
302844
|
const client2 = new Client({
|
|
302845
302845
|
name: "ur",
|
|
302846
302846
|
title: "UR",
|
|
302847
|
-
version: "1.68.
|
|
302847
|
+
version: "1.68.17",
|
|
302848
302848
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
302849
302849
|
websiteUrl: PRODUCT_URL
|
|
302850
302850
|
}, {
|
|
@@ -303204,7 +303204,7 @@ var init_client5 = __esm(() => {
|
|
|
303204
303204
|
const client2 = new Client({
|
|
303205
303205
|
name: "ur",
|
|
303206
303206
|
title: "UR",
|
|
303207
|
-
version: "1.68.
|
|
303207
|
+
version: "1.68.17",
|
|
303208
303208
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
303209
303209
|
websiteUrl: PRODUCT_URL
|
|
303210
303210
|
}, {
|
|
@@ -315743,7 +315743,7 @@ async function createRuntime() {
|
|
|
315743
315743
|
bootstrapTelemetry();
|
|
315744
315744
|
const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
|
|
315745
315745
|
[import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
|
|
315746
|
-
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.68.
|
|
315746
|
+
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.68.17"
|
|
315747
315747
|
}));
|
|
315748
315748
|
const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
|
|
315749
315749
|
resource,
|
|
@@ -315776,11 +315776,11 @@ async function createRuntime() {
|
|
|
315776
315776
|
setMeterProvider(meterProvider);
|
|
315777
315777
|
setLoggerProvider(loggerProvider);
|
|
315778
315778
|
if (meterProvider) {
|
|
315779
|
-
const meter = meterProvider.getMeter("ur-agent", "1.68.
|
|
315779
|
+
const meter = meterProvider.getMeter("ur-agent", "1.68.17");
|
|
315780
315780
|
setMeter(meter, (name, options2) => meter.createCounter(name, options2));
|
|
315781
315781
|
}
|
|
315782
315782
|
if (loggerProvider) {
|
|
315783
|
-
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.68.
|
|
315783
|
+
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.68.17"));
|
|
315784
315784
|
}
|
|
315785
315785
|
if (!cleanupRegistered2) {
|
|
315786
315786
|
cleanupRegistered2 = true;
|
|
@@ -316442,9 +316442,9 @@ async function assertMinVersion() {
|
|
|
316442
316442
|
if (false) {}
|
|
316443
316443
|
try {
|
|
316444
316444
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
316445
|
-
if (versionConfig.minVersion && lt("1.68.
|
|
316445
|
+
if (versionConfig.minVersion && lt("1.68.17", versionConfig.minVersion)) {
|
|
316446
316446
|
console.error(`
|
|
316447
|
-
It looks like your version of UR (${"1.68.
|
|
316447
|
+
It looks like your version of UR (${"1.68.17"}) needs an update.
|
|
316448
316448
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
316449
316449
|
|
|
316450
316450
|
To update, please run:
|
|
@@ -316660,7 +316660,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
316660
316660
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
316661
316661
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
316662
316662
|
pid: process.pid,
|
|
316663
|
-
currentVersion: "1.68.
|
|
316663
|
+
currentVersion: "1.68.17"
|
|
316664
316664
|
});
|
|
316665
316665
|
return "in_progress";
|
|
316666
316666
|
}
|
|
@@ -316669,7 +316669,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
316669
316669
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
316670
316670
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
316671
316671
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
316672
|
-
currentVersion: "1.68.
|
|
316672
|
+
currentVersion: "1.68.17"
|
|
316673
316673
|
});
|
|
316674
316674
|
console.error(`
|
|
316675
316675
|
Error: Windows NPM detected in WSL
|
|
@@ -317204,7 +317204,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
317204
317204
|
}
|
|
317205
317205
|
async function getDoctorDiagnostic() {
|
|
317206
317206
|
const installationType = await getCurrentInstallationType();
|
|
317207
|
-
const version2 = typeof MACRO !== "undefined" ? "1.68.
|
|
317207
|
+
const version2 = typeof MACRO !== "undefined" ? "1.68.17" : "unknown";
|
|
317208
317208
|
const installationPath = await getInstallationPath();
|
|
317209
317209
|
const invokedBinary = getInvokedBinary();
|
|
317210
317210
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -318139,8 +318139,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
318139
318139
|
const maxVersion = await getMaxVersion();
|
|
318140
318140
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
318141
318141
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
318142
|
-
if (gte("1.68.
|
|
318143
|
-
logForDebugging(`Native installer: current version ${"1.68.
|
|
318142
|
+
if (gte("1.68.17", maxVersion)) {
|
|
318143
|
+
logForDebugging(`Native installer: current version ${"1.68.17"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
318144
318144
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
318145
318145
|
latency_ms: Date.now() - startTime,
|
|
318146
318146
|
max_version: maxVersion,
|
|
@@ -318151,7 +318151,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
318151
318151
|
version2 = maxVersion;
|
|
318152
318152
|
}
|
|
318153
318153
|
}
|
|
318154
|
-
if (!forceReinstall && version2 === "1.68.
|
|
318154
|
+
if (!forceReinstall && version2 === "1.68.17" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
318155
318155
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
318156
318156
|
logEvent("tengu_native_update_complete", {
|
|
318157
318157
|
latency_ms: Date.now() - startTime,
|
|
@@ -385637,6 +385637,59 @@ var init_prompt22 = __esm(() => {
|
|
|
385637
385637
|
init_prompt2();
|
|
385638
385638
|
});
|
|
385639
385639
|
|
|
385640
|
+
// src/tools/BashTool/taskListReadOnly.ts
|
|
385641
|
+
function isPurePythonImportScript(script) {
|
|
385642
|
+
const statements = script.split(";").map((statement) => statement.trim()).filter(Boolean);
|
|
385643
|
+
return statements.length > 0 && statements.every((statement) => IMPORT_STATEMENT.test(statement) || FROM_IMPORT_STATEMENT.test(statement));
|
|
385644
|
+
}
|
|
385645
|
+
function isCapabilityProbeCommand(command) {
|
|
385646
|
+
const parsed = tryParseShellCommand(command);
|
|
385647
|
+
if (!parsed.success || parsed.tokens.some((token) => typeof token !== "string")) {
|
|
385648
|
+
return false;
|
|
385649
|
+
}
|
|
385650
|
+
const argv = parsed.tokens;
|
|
385651
|
+
if (argv.length === 2) {
|
|
385652
|
+
const [executable2, flag] = argv;
|
|
385653
|
+
if (executable2 && /^[A-Za-z0-9_./+-]+$/.test(executable2) && ["--help", "--version", "-h", "-V", "-v"].includes(flag ?? "")) {
|
|
385654
|
+
return true;
|
|
385655
|
+
}
|
|
385656
|
+
}
|
|
385657
|
+
if (argv.length >= 3 && argv[0] === "command" && (argv[1] === "-v" || argv[1] === "-V") && argv.slice(2).every((name) => /^[A-Za-z0-9_.+-]+$/.test(name))) {
|
|
385658
|
+
return true;
|
|
385659
|
+
}
|
|
385660
|
+
if (argv.length !== 3 || argv[1] !== "-c")
|
|
385661
|
+
return false;
|
|
385662
|
+
const executable = argv[0]?.split("/").pop();
|
|
385663
|
+
return Boolean(executable && /^python(?:\d+(?:\.\d+)*)?$/.test(executable) && isPurePythonImportScript(argv[2] ?? ""));
|
|
385664
|
+
}
|
|
385665
|
+
function isBashTaskListReadOnly(input) {
|
|
385666
|
+
if (typeof input.command !== "string" || input.command.trim() === "" || input.run_in_background === true || input.dangerouslyDisableSandbox === true || input._simulatedSedEdit !== undefined || /[\0\r\n]/.test(input.command)) {
|
|
385667
|
+
return false;
|
|
385668
|
+
}
|
|
385669
|
+
const output = extractOutputRedirections(input.command);
|
|
385670
|
+
if (output.hasDangerousRedirection || output.redirections.some(({ target }) => target !== "/dev/null")) {
|
|
385671
|
+
return false;
|
|
385672
|
+
}
|
|
385673
|
+
const subcommands = splitCommand_DEPRECATED(input.command);
|
|
385674
|
+
if (subcommands.length === 0)
|
|
385675
|
+
return false;
|
|
385676
|
+
return subcommands.every((command) => {
|
|
385677
|
+
const readOnly = checkReadOnlyConstraints({ command }, false);
|
|
385678
|
+
return readOnly.behavior === "allow" || isCapabilityProbeCommand(command);
|
|
385679
|
+
});
|
|
385680
|
+
}
|
|
385681
|
+
var IDENTIFIER = "[A-Za-z_][A-Za-z0-9_]*", DOTTED_NAME, IMPORT_ITEM, FROM_IMPORT_ITEM, IMPORT_STATEMENT, FROM_IMPORT_STATEMENT;
|
|
385682
|
+
var init_taskListReadOnly = __esm(() => {
|
|
385683
|
+
init_commands();
|
|
385684
|
+
init_shellQuote();
|
|
385685
|
+
init_readOnlyValidation();
|
|
385686
|
+
DOTTED_NAME = `${IDENTIFIER}(?:\\.${IDENTIFIER})*`;
|
|
385687
|
+
IMPORT_ITEM = `${DOTTED_NAME}(?:[ \\t]+as[ \\t]+${IDENTIFIER})?`;
|
|
385688
|
+
FROM_IMPORT_ITEM = `(?:${IDENTIFIER}|\\*)(?:[ \\t]+as[ \\t]+${IDENTIFIER})?`;
|
|
385689
|
+
IMPORT_STATEMENT = new RegExp(`^import[ \\t]+${IMPORT_ITEM}(?:[ \\t]*,[ \\t]*${IMPORT_ITEM})*$`);
|
|
385690
|
+
FROM_IMPORT_STATEMENT = new RegExp(`^from[ \\t]+${DOTTED_NAME}[ \\t]+import[ \\t]+` + `(?:${FROM_IMPORT_ITEM}(?:[ \\t]*,[ \\t]*${FROM_IMPORT_ITEM})*|` + `\\([ \\t]*${FROM_IMPORT_ITEM}` + `(?:[ \\t]*,[ \\t]*${FROM_IMPORT_ITEM})*[ \\t]*\\))$`);
|
|
385691
|
+
});
|
|
385692
|
+
|
|
385640
385693
|
// src/tools/BashTool/BashTool.tsx
|
|
385641
385694
|
import { copyFile as copyFile6, stat as fsStat2, truncate as fsTruncate2, link as link5 } from "fs/promises";
|
|
385642
385695
|
function isSearchOrReadBashCommand(command) {
|
|
@@ -386082,6 +386135,7 @@ var init_BashTool = __esm(() => {
|
|
|
386082
386135
|
init_readOnlyValidation();
|
|
386083
386136
|
init_sedEditParser();
|
|
386084
386137
|
init_shouldUseSandbox();
|
|
386138
|
+
init_taskListReadOnly();
|
|
386085
386139
|
init_UI6();
|
|
386086
386140
|
init_utils9();
|
|
386087
386141
|
jsx_dev_runtime154 = __toESM(require_jsx_dev_runtime(), 1);
|
|
@@ -386181,6 +386235,9 @@ For commands that are harder to parse at a glance (piped commands, obscure flags
|
|
|
386181
386235
|
const result = checkReadOnlyConstraints(input, compoundCommandHasCd);
|
|
386182
386236
|
return result.behavior === "allow";
|
|
386183
386237
|
},
|
|
386238
|
+
isTaskListReadOnly(input) {
|
|
386239
|
+
return isBashTaskListReadOnly(input);
|
|
386240
|
+
},
|
|
386184
386241
|
toAutoClassifierInput(input) {
|
|
386185
386242
|
return input.command;
|
|
386186
386243
|
},
|
|
@@ -388362,7 +388419,7 @@ function isAnyTracingEnabled() {
|
|
|
388362
388419
|
return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
|
|
388363
388420
|
}
|
|
388364
388421
|
function getTracer() {
|
|
388365
|
-
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.68.
|
|
388422
|
+
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.68.17");
|
|
388366
388423
|
}
|
|
388367
388424
|
function createSpanAttributes(spanType, customAttributes = {}) {
|
|
388368
388425
|
const baseAttributes = getTelemetryAttributes();
|
|
@@ -391011,10 +391068,16 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
391011
391068
|
isMutating = true;
|
|
391012
391069
|
}
|
|
391013
391070
|
const isPlanArtifactMutation = isCurrentPlanArtifactMutation(tool.name, parsedInput.data, toolUseContext);
|
|
391071
|
+
let isTaskListReadOnly = false;
|
|
391072
|
+
try {
|
|
391073
|
+
isTaskListReadOnly = Boolean(tool.isTaskListReadOnly?.(parsedInput.data));
|
|
391074
|
+
} catch {
|
|
391075
|
+
isTaskListReadOnly = false;
|
|
391076
|
+
}
|
|
391014
391077
|
const isTaskListGatedMutation = isMutationRequiringTaskList({
|
|
391015
391078
|
toolName: tool.name,
|
|
391016
391079
|
toolInput: parsedInput.data,
|
|
391017
|
-
isMutating
|
|
391080
|
+
isMutating: isMutating && !isTaskListReadOnly
|
|
391018
391081
|
});
|
|
391019
391082
|
if (isMutating && isBuiltInReadOnlyPlanningSubagent(toolUseContext)) {
|
|
391020
391083
|
recordCallFailure(callSig);
|
|
@@ -391398,10 +391461,16 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
391398
391461
|
finalIsMutating = true;
|
|
391399
391462
|
}
|
|
391400
391463
|
const finalIsPlanArtifactMutation = isCurrentPlanArtifactMutation(tool.name, finalParsedInput.data, toolUseContext);
|
|
391464
|
+
let finalIsTaskListReadOnly = false;
|
|
391465
|
+
try {
|
|
391466
|
+
finalIsTaskListReadOnly = Boolean(tool.isTaskListReadOnly?.(finalParsedInput.data));
|
|
391467
|
+
} catch {
|
|
391468
|
+
finalIsTaskListReadOnly = false;
|
|
391469
|
+
}
|
|
391401
391470
|
const finalIsTaskListGatedMutation = isMutationRequiringTaskList({
|
|
391402
391471
|
toolName: tool.name,
|
|
391403
391472
|
toolInput: finalParsedInput.data,
|
|
391404
|
-
isMutating: finalIsMutating
|
|
391473
|
+
isMutating: finalIsMutating && !finalIsTaskListReadOnly
|
|
391405
391474
|
});
|
|
391406
391475
|
if (finalIsMutating && isBuiltInReadOnlyPlanningSubagent(toolUseContext)) {
|
|
391407
391476
|
recordCallFailure(callSig);
|
|
@@ -419606,7 +419675,7 @@ function Feedback({
|
|
|
419606
419675
|
platform: env2.platform,
|
|
419607
419676
|
gitRepo: envInfo.isGit,
|
|
419608
419677
|
terminal: env2.terminal,
|
|
419609
|
-
version: "1.68.
|
|
419678
|
+
version: "1.68.17",
|
|
419610
419679
|
transcript: normalizeMessagesForAPI(messages),
|
|
419611
419680
|
errors: sanitizedErrors,
|
|
419612
419681
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -419798,7 +419867,7 @@ function Feedback({
|
|
|
419798
419867
|
", ",
|
|
419799
419868
|
env2.terminal,
|
|
419800
419869
|
", v",
|
|
419801
|
-
"1.68.
|
|
419870
|
+
"1.68.17"
|
|
419802
419871
|
]
|
|
419803
419872
|
}, undefined, true, undefined, this)
|
|
419804
419873
|
]
|
|
@@ -419904,7 +419973,7 @@ ${sanitizedDescription}
|
|
|
419904
419973
|
` + `**Environment Info**
|
|
419905
419974
|
` + `- Platform: ${env2.platform}
|
|
419906
419975
|
` + `- Terminal: ${env2.terminal}
|
|
419907
|
-
` + `- Version: ${"1.68.
|
|
419976
|
+
` + `- Version: ${"1.68.17"}
|
|
419908
419977
|
` + `- Feedback ID: ${feedbackId}
|
|
419909
419978
|
` + `
|
|
419910
419979
|
**Errors**
|
|
@@ -423014,7 +423083,7 @@ function buildPrimarySection() {
|
|
|
423014
423083
|
}, undefined, false, undefined, this);
|
|
423015
423084
|
return [{
|
|
423016
423085
|
label: "Version",
|
|
423017
|
-
value: "1.68.
|
|
423086
|
+
value: "1.68.17"
|
|
423018
423087
|
}, {
|
|
423019
423088
|
label: "Session name",
|
|
423020
423089
|
value: nameValue
|
|
@@ -426344,7 +426413,7 @@ function Config({
|
|
|
426344
426413
|
}
|
|
426345
426414
|
}, undefined, false, undefined, this)
|
|
426346
426415
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
426347
|
-
currentVersion: "1.68.
|
|
426416
|
+
currentVersion: "1.68.17",
|
|
426348
426417
|
onChoice: (choice) => {
|
|
426349
426418
|
setShowSubmenu(null);
|
|
426350
426419
|
setTabsHidden(false);
|
|
@@ -426356,7 +426425,7 @@ function Config({
|
|
|
426356
426425
|
autoUpdatesChannel: "stable"
|
|
426357
426426
|
};
|
|
426358
426427
|
if (choice === "stay") {
|
|
426359
|
-
newSettings.minimumVersion = "1.68.
|
|
426428
|
+
newSettings.minimumVersion = "1.68.17";
|
|
426360
426429
|
}
|
|
426361
426430
|
updateSettingsForSource("userSettings", newSettings);
|
|
426362
426431
|
setSettingsData((prev_27) => ({
|
|
@@ -434430,7 +434499,7 @@ function HelpV2(t0) {
|
|
|
434430
434499
|
let t6;
|
|
434431
434500
|
if ($2[31] !== tabs) {
|
|
434432
434501
|
t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
|
|
434433
|
-
title: `UR v${"1.68.
|
|
434502
|
+
title: `UR v${"1.68.17"}`,
|
|
434434
434503
|
color: "professionalBlue",
|
|
434435
434504
|
defaultTab: "general",
|
|
434436
434505
|
children: tabs
|
|
@@ -435363,7 +435432,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
|
|
|
435363
435432
|
async function handleInitialize(options2) {
|
|
435364
435433
|
return {
|
|
435365
435434
|
name: "UR",
|
|
435366
|
-
version: "1.68.
|
|
435435
|
+
version: "1.68.17",
|
|
435367
435436
|
protocolVersion: "0.1.0",
|
|
435368
435437
|
workspaceRoot: options2.cwd,
|
|
435369
435438
|
capabilities: {
|
|
@@ -452471,7 +452540,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
452471
452540
|
return [];
|
|
452472
452541
|
}
|
|
452473
452542
|
}
|
|
452474
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.68.
|
|
452543
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.68.17") {
|
|
452475
452544
|
if (process.env.USER_TYPE === "ant") {
|
|
452476
452545
|
const changelog = "";
|
|
452477
452546
|
if (changelog) {
|
|
@@ -452498,7 +452567,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.68.16")
|
|
|
452498
452567
|
releaseNotes
|
|
452499
452568
|
};
|
|
452500
452569
|
}
|
|
452501
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.68.
|
|
452570
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.68.17") {
|
|
452502
452571
|
if (process.env.USER_TYPE === "ant") {
|
|
452503
452572
|
const changelog = "";
|
|
452504
452573
|
if (changelog) {
|
|
@@ -455364,7 +455433,7 @@ function getRecentActivitySync() {
|
|
|
455364
455433
|
return cachedActivity;
|
|
455365
455434
|
}
|
|
455366
455435
|
function getLogoDisplayData() {
|
|
455367
|
-
const version2 = process.env.DEMO_VERSION ?? "1.68.
|
|
455436
|
+
const version2 = process.env.DEMO_VERSION ?? "1.68.17";
|
|
455368
455437
|
const serverUrl = getDirectConnectServerUrl();
|
|
455369
455438
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
|
|
455370
455439
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -456231,7 +456300,7 @@ function LogoV2() {
|
|
|
456231
456300
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
456232
456301
|
t2 = () => {
|
|
456233
456302
|
const currentConfig2 = getGlobalConfig();
|
|
456234
|
-
if (currentConfig2.lastReleaseNotesSeen === "1.68.
|
|
456303
|
+
if (currentConfig2.lastReleaseNotesSeen === "1.68.17") {
|
|
456235
456304
|
return;
|
|
456236
456305
|
}
|
|
456237
456306
|
saveGlobalConfig(_temp325);
|
|
@@ -456916,12 +456985,12 @@ function LogoV2() {
|
|
|
456916
456985
|
return t41;
|
|
456917
456986
|
}
|
|
456918
456987
|
function _temp325(current) {
|
|
456919
|
-
if (current.lastReleaseNotesSeen === "1.68.
|
|
456988
|
+
if (current.lastReleaseNotesSeen === "1.68.17") {
|
|
456920
456989
|
return current;
|
|
456921
456990
|
}
|
|
456922
456991
|
return {
|
|
456923
456992
|
...current,
|
|
456924
|
-
lastReleaseNotesSeen: "1.68.
|
|
456993
|
+
lastReleaseNotesSeen: "1.68.17"
|
|
456925
456994
|
};
|
|
456926
456995
|
}
|
|
456927
456996
|
function _temp241(s_0) {
|
|
@@ -473867,7 +473936,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
|
|
|
473867
473936
|
if (spec.name !== specName) {
|
|
473868
473937
|
throw new Error("Agentic CI workflow spec name does not match");
|
|
473869
473938
|
}
|
|
473870
|
-
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.68.
|
|
473939
|
+
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.68.17" : "1.68.17");
|
|
473871
473940
|
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
|
|
473872
473941
|
throw new Error("invalid ur-agent package version");
|
|
473873
473942
|
}
|
|
@@ -474860,7 +474929,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
|
|
|
474860
474929
|
path: ".github/workflows/ur.yml",
|
|
474861
474930
|
root: "project",
|
|
474862
474931
|
content: compileAgenticCiWorkflow("default", {
|
|
474863
|
-
packageVersion: typeof MACRO !== "undefined" ? "1.68.
|
|
474932
|
+
packageVersion: typeof MACRO !== "undefined" ? "1.68.17" : "1.68.17"
|
|
474864
474933
|
})
|
|
474865
474934
|
},
|
|
474866
474935
|
{
|
|
@@ -474930,7 +474999,7 @@ function value(tokens, flag) {
|
|
|
474930
474999
|
return index2 >= 0 ? tokens[index2 + 1] : undefined;
|
|
474931
475000
|
}
|
|
474932
475001
|
function cliVersion() {
|
|
474933
|
-
return typeof MACRO !== "undefined" ? "1.68.
|
|
475002
|
+
return typeof MACRO !== "undefined" ? "1.68.17" : "1.68.17";
|
|
474934
475003
|
}
|
|
474935
475004
|
function workflowPath(cwd2) {
|
|
474936
475005
|
return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
|
|
@@ -480795,7 +480864,7 @@ function createAcpStdioApp(deps) {
|
|
|
480795
480864
|
}
|
|
480796
480865
|
},
|
|
480797
480866
|
authMethods: [],
|
|
480798
|
-
agentInfo: { name: "UR-Nexus", version: "1.68.
|
|
480867
|
+
agentInfo: { name: "UR-Nexus", version: "1.68.17" }
|
|
480799
480868
|
})).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
|
|
480800
480869
|
const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
|
|
480801
480870
|
await runtime2.announce({
|
|
@@ -480892,7 +480961,7 @@ function createAcpStdioAgent(deps) {
|
|
|
480892
480961
|
}
|
|
480893
480962
|
},
|
|
480894
480963
|
authMethods: [],
|
|
480895
|
-
agentInfo: { name: "UR-Nexus", version: "1.68.
|
|
480964
|
+
agentInfo: { name: "UR-Nexus", version: "1.68.17" }
|
|
480896
480965
|
});
|
|
480897
480966
|
return;
|
|
480898
480967
|
case "authenticate":
|
|
@@ -692052,7 +692121,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
692052
692121
|
smapsRollup,
|
|
692053
692122
|
platform: process.platform,
|
|
692054
692123
|
nodeVersion: process.version,
|
|
692055
|
-
ccVersion: "1.68.
|
|
692124
|
+
ccVersion: "1.68.17"
|
|
692056
692125
|
};
|
|
692057
692126
|
}
|
|
692058
692127
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -692632,7 +692701,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
692632
692701
|
var call153 = async () => {
|
|
692633
692702
|
return {
|
|
692634
692703
|
type: "text",
|
|
692635
|
-
value: "1.68.
|
|
692704
|
+
value: "1.68.17"
|
|
692636
692705
|
};
|
|
692637
692706
|
}, version2, version_default;
|
|
692638
692707
|
var init_version = __esm(() => {
|
|
@@ -703812,7 +703881,7 @@ function generateHtmlReport(data, insights) {
|
|
|
703812
703881
|
</html>`;
|
|
703813
703882
|
}
|
|
703814
703883
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
703815
|
-
const version3 = typeof MACRO !== "undefined" ? "1.68.
|
|
703884
|
+
const version3 = typeof MACRO !== "undefined" ? "1.68.17" : "unknown";
|
|
703816
703885
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
703817
703886
|
const facets_summary = {
|
|
703818
703887
|
total: facets.size,
|
|
@@ -708139,7 +708208,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
708139
708208
|
init_settings2();
|
|
708140
708209
|
init_slowOperations();
|
|
708141
708210
|
init_uuid();
|
|
708142
|
-
VERSION7 = typeof MACRO !== "undefined" ? "1.68.
|
|
708211
|
+
VERSION7 = typeof MACRO !== "undefined" ? "1.68.17" : "unknown";
|
|
708143
708212
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
708144
708213
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
708145
708214
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -709356,7 +709425,7 @@ var init_filesystem = __esm(() => {
|
|
|
709356
709425
|
});
|
|
709357
709426
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
709358
709427
|
const nonce = randomBytes20(16).toString("hex");
|
|
709359
|
-
return join230(getURTempDir(), "bundled-skills", "1.68.
|
|
709428
|
+
return join230(getURTempDir(), "bundled-skills", "1.68.17", nonce);
|
|
709360
709429
|
});
|
|
709361
709430
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
709362
709431
|
});
|
|
@@ -715662,7 +715731,7 @@ function computeFingerprint(messageText2, version3) {
|
|
|
715662
715731
|
}
|
|
715663
715732
|
function computeFingerprintFromMessages(messages) {
|
|
715664
715733
|
const firstMessageText = extractFirstMessageText(messages);
|
|
715665
|
-
return computeFingerprint(firstMessageText, "1.68.
|
|
715734
|
+
return computeFingerprint(firstMessageText, "1.68.17");
|
|
715666
715735
|
}
|
|
715667
715736
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
715668
715737
|
var init_fingerprint = () => {};
|
|
@@ -717561,7 +717630,7 @@ async function sideQuery(opts) {
|
|
|
717561
717630
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
717562
717631
|
}
|
|
717563
717632
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
717564
|
-
const fingerprint2 = computeFingerprint(messageText2, "1.68.
|
|
717633
|
+
const fingerprint2 = computeFingerprint(messageText2, "1.68.17");
|
|
717565
717634
|
const attributionHeader = getAttributionHeader(fingerprint2);
|
|
717566
717635
|
const systemBlocks = [
|
|
717567
717636
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -722348,7 +722417,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
722348
722417
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
722349
722418
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
722350
722419
|
betas: getSdkBetas(),
|
|
722351
|
-
ur_version: "1.68.
|
|
722420
|
+
ur_version: "1.68.17",
|
|
722352
722421
|
output_style: outputStyle2,
|
|
722353
722422
|
agents: inputs.agents.map((agent2) => agent2.agentType),
|
|
722354
722423
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -736299,7 +736368,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
736299
736368
|
function getSemverPart(version3) {
|
|
736300
736369
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
736301
736370
|
}
|
|
736302
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.68.
|
|
736371
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.68.17") {
|
|
736303
736372
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react222.useState(() => getSemverPart(initialVersion));
|
|
736304
736373
|
if (!updatedVersion) {
|
|
736305
736374
|
return null;
|
|
@@ -736348,7 +736417,7 @@ function AutoUpdater({
|
|
|
736348
736417
|
return;
|
|
736349
736418
|
}
|
|
736350
736419
|
if (false) {}
|
|
736351
|
-
const currentVersion = "1.68.
|
|
736420
|
+
const currentVersion = "1.68.17";
|
|
736352
736421
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
736353
736422
|
let latestVersion = await getLatestVersion(channel);
|
|
736354
736423
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -736577,12 +736646,12 @@ function NativeAutoUpdater({
|
|
|
736577
736646
|
logEvent("tengu_native_auto_updater_start", {});
|
|
736578
736647
|
try {
|
|
736579
736648
|
const maxVersion = await getMaxVersion();
|
|
736580
|
-
if (maxVersion && gt("1.68.
|
|
736649
|
+
if (maxVersion && gt("1.68.17", maxVersion)) {
|
|
736581
736650
|
const msg = await getMaxVersionMessage();
|
|
736582
736651
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
736583
736652
|
}
|
|
736584
736653
|
const result = await installLatest(channel);
|
|
736585
|
-
const currentVersion = "1.68.
|
|
736654
|
+
const currentVersion = "1.68.17";
|
|
736586
736655
|
const latencyMs = Date.now() - startTime;
|
|
736587
736656
|
if (result.lockFailed) {
|
|
736588
736657
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -736719,17 +736788,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
736719
736788
|
const maxVersion = await getMaxVersion();
|
|
736720
736789
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
736721
736790
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
736722
|
-
if (gte("1.68.
|
|
736723
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.68.
|
|
736791
|
+
if (gte("1.68.17", maxVersion)) {
|
|
736792
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.68.17"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
736724
736793
|
setUpdateAvailable(false);
|
|
736725
736794
|
return;
|
|
736726
736795
|
}
|
|
736727
736796
|
latest = maxVersion;
|
|
736728
736797
|
}
|
|
736729
|
-
const hasUpdate = latest && !gte("1.68.
|
|
736798
|
+
const hasUpdate = latest && !gte("1.68.17", latest) && !shouldSkipVersion(latest);
|
|
736730
736799
|
setUpdateAvailable(!!hasUpdate);
|
|
736731
736800
|
if (hasUpdate) {
|
|
736732
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.68.
|
|
736801
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.68.17"} -> ${latest}`);
|
|
736733
736802
|
}
|
|
736734
736803
|
};
|
|
736735
736804
|
$2[0] = t1;
|
|
@@ -736763,7 +736832,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
736763
736832
|
wrap: "truncate",
|
|
736764
736833
|
children: [
|
|
736765
736834
|
"currentVersion: ",
|
|
736766
|
-
"1.68.
|
|
736835
|
+
"1.68.17"
|
|
736767
736836
|
]
|
|
736768
736837
|
}, undefined, true, undefined, this);
|
|
736769
736838
|
$2[3] = verbose;
|
|
@@ -747473,7 +747542,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
747473
747542
|
project_dir: getOriginalCwd(),
|
|
747474
747543
|
added_dirs: addedDirs
|
|
747475
747544
|
},
|
|
747476
|
-
version: "1.68.
|
|
747545
|
+
version: "1.68.17",
|
|
747477
747546
|
output_style: {
|
|
747478
747547
|
name: outputStyleName
|
|
747479
747548
|
},
|
|
@@ -747552,7 +747621,7 @@ function StatusLineInner({
|
|
|
747552
747621
|
const taskRunningCount = countActiveBackgroundTasks(taskValues);
|
|
747553
747622
|
const agentRunningCount = countActiveForegroundAgents(taskValues);
|
|
747554
747623
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
747555
|
-
version: "1.68.
|
|
747624
|
+
version: "1.68.17",
|
|
747556
747625
|
providerLabel: providerRuntime.providerLabel,
|
|
747557
747626
|
authMode: providerRuntime.authLabel,
|
|
747558
747627
|
model: renderModelName(mainLoopModel) || providerRuntime.model || "",
|
|
@@ -759733,7 +759802,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
759733
759802
|
} catch {}
|
|
759734
759803
|
const data = {
|
|
759735
759804
|
trigger: trigger2,
|
|
759736
|
-
version: "1.68.
|
|
759805
|
+
version: "1.68.17",
|
|
759737
759806
|
platform: process.platform,
|
|
759738
759807
|
transcript,
|
|
759739
759808
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -772101,7 +772170,7 @@ function WelcomeV2() {
|
|
|
772101
772170
|
dimColor: true,
|
|
772102
772171
|
children: [
|
|
772103
772172
|
"v",
|
|
772104
|
-
"1.68.
|
|
772173
|
+
"1.68.17"
|
|
772105
772174
|
]
|
|
772106
772175
|
}, undefined, true, undefined, this)
|
|
772107
772176
|
]
|
|
@@ -773361,7 +773430,7 @@ function completeOnboarding() {
|
|
|
773361
773430
|
saveGlobalConfig((current) => ({
|
|
773362
773431
|
...current,
|
|
773363
773432
|
hasCompletedOnboarding: true,
|
|
773364
|
-
lastOnboardingVersion: "1.68.
|
|
773433
|
+
lastOnboardingVersion: "1.68.17"
|
|
773365
773434
|
}));
|
|
773366
773435
|
}
|
|
773367
773436
|
function showDialog(root2, renderer) {
|
|
@@ -778405,7 +778474,7 @@ function appendToLog(path24, message) {
|
|
|
778405
778474
|
cwd: getFsImplementation().cwd(),
|
|
778406
778475
|
userType: process.env.USER_TYPE,
|
|
778407
778476
|
sessionId: getSessionId(),
|
|
778408
|
-
version: "1.68.
|
|
778477
|
+
version: "1.68.17"
|
|
778409
778478
|
};
|
|
778410
778479
|
getLogWriter(path24).write(messageWithTimestamp);
|
|
778411
778480
|
}
|
|
@@ -782569,8 +782638,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
782569
782638
|
}
|
|
782570
782639
|
async function checkEnvLessBridgeMinVersion() {
|
|
782571
782640
|
const cfg = await getEnvLessBridgeConfig();
|
|
782572
|
-
if (cfg.min_version && lt("1.68.
|
|
782573
|
-
return `Your version of UR (${"1.68.
|
|
782641
|
+
if (cfg.min_version && lt("1.68.17", cfg.min_version)) {
|
|
782642
|
+
return `Your version of UR (${"1.68.17"}) is too old for Remote Control.
|
|
782574
782643
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
782575
782644
|
}
|
|
782576
782645
|
return null;
|
|
@@ -783044,7 +783113,7 @@ async function initBridgeCore(params) {
|
|
|
783044
783113
|
const rawApi = createBridgeApiClient({
|
|
783045
783114
|
baseUrl,
|
|
783046
783115
|
getAccessToken,
|
|
783047
|
-
runnerVersion: "1.68.
|
|
783116
|
+
runnerVersion: "1.68.17",
|
|
783048
783117
|
onDebug: logForDebugging,
|
|
783049
783118
|
onAuth401,
|
|
783050
783119
|
getTrustedDeviceToken
|
|
@@ -792517,7 +792586,7 @@ function getAgUiCapabilities() {
|
|
|
792517
792586
|
name: "UR-Nexus",
|
|
792518
792587
|
type: "ur-nexus",
|
|
792519
792588
|
description: "Provider-flexible, local-first autonomous engineering workflow agent.",
|
|
792520
|
-
version: "1.68.
|
|
792589
|
+
version: "1.68.17",
|
|
792521
792590
|
provider: "UR",
|
|
792522
792591
|
documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
|
|
792523
792592
|
},
|
|
@@ -793657,7 +793726,7 @@ function createMCPServer(cwd4, debug2, verbose) {
|
|
|
793657
793726
|
};
|
|
793658
793727
|
const server2 = new Server({
|
|
793659
793728
|
name: "ur-nexus",
|
|
793660
|
-
version: "1.68.
|
|
793729
|
+
version: "1.68.17"
|
|
793661
793730
|
}, {
|
|
793662
793731
|
capabilities: {
|
|
793663
793732
|
tools: {}
|
|
@@ -794815,7 +794884,7 @@ function thrownResponse(error40) {
|
|
|
794815
794884
|
}
|
|
794816
794885
|
async function createUrMcp2026Runtime(options4) {
|
|
794817
794886
|
const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
|
|
794818
|
-
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.68.
|
|
794887
|
+
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.68.17" }, { capabilities: {} });
|
|
794819
794888
|
const [clientTransport, serverTransport] = createLinkedTransportPair();
|
|
794820
794889
|
try {
|
|
794821
794890
|
await server2.connect(serverTransport);
|
|
@@ -794826,7 +794895,7 @@ async function createUrMcp2026Runtime(options4) {
|
|
|
794826
794895
|
}
|
|
794827
794896
|
const runtime2 = new Mcp2026Runtime({
|
|
794828
794897
|
cwd: options4.cwd,
|
|
794829
|
-
version: "1.68.
|
|
794898
|
+
version: "1.68.17",
|
|
794830
794899
|
backend: {
|
|
794831
794900
|
listTools: async () => {
|
|
794832
794901
|
const listed = await client2.listTools();
|
|
@@ -796959,7 +797028,7 @@ async function update() {
|
|
|
796959
797028
|
logEvent("tengu_update_check", {});
|
|
796960
797029
|
const diagnostic2 = await getDoctorDiagnostic();
|
|
796961
797030
|
const result = await checkUpgradeStatus({
|
|
796962
|
-
currentVersion: "1.68.
|
|
797031
|
+
currentVersion: "1.68.17",
|
|
796963
797032
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
796964
797033
|
installationType: diagnostic2.installationType,
|
|
796965
797034
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -798275,7 +798344,7 @@ ${customInstructions}` : customInstructions;
|
|
|
798275
798344
|
}
|
|
798276
798345
|
}
|
|
798277
798346
|
logForDiagnosticsNoPII("info", "started", {
|
|
798278
|
-
version: "1.68.
|
|
798347
|
+
version: "1.68.17",
|
|
798279
798348
|
is_native_binary: isInBundledMode()
|
|
798280
798349
|
});
|
|
798281
798350
|
registerCleanup(async () => {
|
|
@@ -799061,7 +799130,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
799061
799130
|
pendingHookMessages
|
|
799062
799131
|
}, renderAndRun);
|
|
799063
799132
|
}
|
|
799064
|
-
}).version("1.68.
|
|
799133
|
+
}).version("1.68.17 (UR-Nexus)", "-v, --version", "Output the version number");
|
|
799065
799134
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
799066
799135
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
799067
799136
|
if (canUserConfigureAdvisor()) {
|
|
@@ -800120,7 +800189,7 @@ if (false) {}
|
|
|
800120
800189
|
async function main2() {
|
|
800121
800190
|
const args = process.argv.slice(2);
|
|
800122
800191
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
800123
|
-
console.log(`${"1.68.
|
|
800192
|
+
console.log(`${"1.68.17"} (UR-Nexus)`);
|
|
800124
800193
|
return;
|
|
800125
800194
|
}
|
|
800126
800195
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
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.68.
|
|
48
|
+
<p class="eyebrow">Version 1.68.17</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.68.
|
|
5
|
+
"version": "1.68.17",
|
|
6
6
|
"publisher": "ur-nexus",
|
|
7
7
|
"engines": {
|
|
8
8
|
"vscode": "^1.92.0"
|
package/package.json
CHANGED
|
@@ -60,7 +60,9 @@ This is enforced beyond prompt wording:
|
|
|
60
60
|
|
|
61
61
|
- `src/services/tools/taskListGate.ts` blocks state-changing calls once the initial
|
|
62
62
|
lightweight allowance is consumed unless an actionable task exists. Delegation and
|
|
63
|
-
subagent mutations always require a parent task. Reads remain unrestricted.
|
|
63
|
+
subagent mutations always require a parent task. Reads remain unrestricted. Tool
|
|
64
|
+
implementations can classify task-only observation separately from stricter
|
|
65
|
+
permission auto-approval; both classifications are re-evaluated after rewrites.
|
|
64
66
|
- `src/services/tools/repeatedFailureGuard.ts` tracks canonicalized failing calls, refuses
|
|
65
67
|
repeated identical failures, then aborts the stuck turn at a bounded threshold.
|
|
66
68
|
- the tool execution boundary revalidates the final input after hook rewrites; a hook cannot
|
package/technical/04-tools.md
CHANGED
|
@@ -140,6 +140,17 @@ expansion, backgrounding, sandbox overrides, and permission-time rewrites do
|
|
|
140
140
|
not qualify. Node remains non-read-only for Bash permission and sandbox
|
|
141
141
|
purposes, so this compatibility path cannot become a general execution bypass.
|
|
142
142
|
|
|
143
|
+
Task tracking no longer equates "not safe to auto-approve" with "changes the
|
|
144
|
+
workspace." Tools may expose a separate `isTaskListReadOnly` classification;
|
|
145
|
+
permissions, sandboxing, concurrency, and read-only planning agents still use
|
|
146
|
+
the stricter `isReadOnly` result. Bash uses the task-only classification for
|
|
147
|
+
known read commands and generic capability inspection: exact help/version
|
|
148
|
+
queries, `command -v`/`which`-style presence checks, and import-only Python
|
|
149
|
+
probes for any syntactically valid module name. This is category-based rather
|
|
150
|
+
than a module allowlist. Arbitrary interpreter statements, output redirects
|
|
151
|
+
outside `/dev/null`, background execution, sandbox overrides, simulated edits,
|
|
152
|
+
unknown commands, and permission-time rewrites to mutations remain gated.
|
|
153
|
+
|
|
143
154
|
Task completion also protects that lifecycle boundary. When the final
|
|
144
155
|
actionable `in_progress` task has a successful `Write`/`Edit`/`MultiEdit`/
|
|
145
156
|
`NotebookEdit` after its recorded start but no later successful inspection,
|
package/technical/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UR-Nexus — Technical Specifications
|
|
2
2
|
|
|
3
|
-
> Audited against the executable source and tests for `ur-agent` v1.68.
|
|
3
|
+
> Audited against the executable source and tests for `ur-agent` v1.68.17.
|
|
4
4
|
> Command, tool, flag, provider, and setting claims are checked against the
|
|
5
5
|
> implementation rather than copied from product prose. Release validation
|
|
6
6
|
> keeps this version synchronized and packages the complete `technical/`
|