ur-agent 1.65.2 → 1.65.4
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
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.65.4
|
|
4
|
+
|
|
5
|
+
- A tool call that keeps failing identically is now stopped. A 4B model refused
|
|
6
|
+
once by the task-list gate answered by emitting `Write` with no arguments
|
|
7
|
+
repeatedly, and nothing intervened — the trajectory grader names this pattern
|
|
8
|
+
but only after a run has ended, so it could grade the wreck and never prevent
|
|
9
|
+
it. Three identical failures are refused with instructions to change course;
|
|
10
|
+
six abort the turn, because otherwise a model that ignores the refusal simply
|
|
11
|
+
loops on the refusal instead.
|
|
12
|
+
- The signature is tool name plus input, so a corrected retry is never
|
|
13
|
+
penalised — that is precisely the recovery a refusal asks for. Both the
|
|
14
|
+
task-list gate and input validation feed the counter; the observed loop was
|
|
15
|
+
rejected by validation every time, so recording only gate refusals would have
|
|
16
|
+
left the guard counting zero.
|
|
17
|
+
|
|
18
|
+
## 1.65.3
|
|
19
|
+
|
|
20
|
+
- Removed two tips for things that do not exist: `/mobile to use UR from the
|
|
21
|
+
UR app on your phone` (no such command, no such app) and a pointer to
|
|
22
|
+
`ur.ai/web` (no DNS record, same dead domain class as the `ur.com` links
|
|
23
|
+
removed earlier). Tips are the first thing a new user reads, so a tip for
|
|
24
|
+
something that is not there is the worst place to be wrong.
|
|
25
|
+
- Added short tips covering the command surface that was going unnoticed —
|
|
26
|
+
spec-driven development, compiler-accurate renames, semantic code search,
|
|
27
|
+
crews and arenas, evals, guardrails, the audit trail, the security suite,
|
|
28
|
+
research and multimodal commands, and the tools added this week. One line
|
|
29
|
+
each: the goal is recall, not documentation.
|
|
30
|
+
- Added `test/tipsAreReal.test.ts`: every command a tip names must exist in the
|
|
31
|
+
slash-command reference, and no tip may reference a domain UR does not own.
|
|
32
|
+
It also asserts the checker finds real citations, so it cannot start passing
|
|
33
|
+
vacuously on an empty match.
|
|
34
|
+
|
|
3
35
|
## 1.65.2
|
|
4
36
|
|
|
5
37
|
- Fixed `--discover-ollama` having no effect on model discovery or requests.
|
package/dist/cli.js
CHANGED
|
@@ -75238,7 +75238,7 @@ var init_auth = __esm(() => {
|
|
|
75238
75238
|
|
|
75239
75239
|
// src/utils/userAgent.ts
|
|
75240
75240
|
function getURCodeUserAgent() {
|
|
75241
|
-
return `ur/${"1.65.
|
|
75241
|
+
return `ur/${"1.65.4"}`;
|
|
75242
75242
|
}
|
|
75243
75243
|
|
|
75244
75244
|
// src/utils/workloadContext.ts
|
|
@@ -75260,7 +75260,7 @@ function getUserAgent() {
|
|
|
75260
75260
|
const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
|
|
75261
75261
|
const workload = getWorkload();
|
|
75262
75262
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
75263
|
-
return `ur-cli/${"1.65.
|
|
75263
|
+
return `ur-cli/${"1.65.4"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
75264
75264
|
}
|
|
75265
75265
|
function getMCPUserAgent() {
|
|
75266
75266
|
const parts = [];
|
|
@@ -75274,7 +75274,7 @@ function getMCPUserAgent() {
|
|
|
75274
75274
|
parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
|
|
75275
75275
|
}
|
|
75276
75276
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
75277
|
-
return `ur/${"1.65.
|
|
75277
|
+
return `ur/${"1.65.4"}${suffix}`;
|
|
75278
75278
|
}
|
|
75279
75279
|
function getWebFetchUserAgent() {
|
|
75280
75280
|
return `UR-User (${getURCodeUserAgent()})`;
|
|
@@ -75412,7 +75412,7 @@ var init_user = __esm(() => {
|
|
|
75412
75412
|
deviceId,
|
|
75413
75413
|
sessionId: getSessionId(),
|
|
75414
75414
|
email: getEmail(),
|
|
75415
|
-
appVersion: "1.65.
|
|
75415
|
+
appVersion: "1.65.4",
|
|
75416
75416
|
platform: getHostPlatformForAnalytics(),
|
|
75417
75417
|
organizationUuid,
|
|
75418
75418
|
accountUuid,
|
|
@@ -83612,7 +83612,7 @@ var init_metadata = __esm(() => {
|
|
|
83612
83612
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
83613
83613
|
WHITESPACE_REGEX = /\s+/;
|
|
83614
83614
|
getVersionBase = memoize_default(() => {
|
|
83615
|
-
const match = "1.65.
|
|
83615
|
+
const match = "1.65.4".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
83616
83616
|
return match ? match[0] : undefined;
|
|
83617
83617
|
});
|
|
83618
83618
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -83652,7 +83652,7 @@ var init_metadata = __esm(() => {
|
|
|
83652
83652
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
83653
83653
|
isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
|
|
83654
83654
|
isURAiAuth: isURAISubscriber(),
|
|
83655
|
-
version: "1.65.
|
|
83655
|
+
version: "1.65.4",
|
|
83656
83656
|
versionBase: getVersionBase(),
|
|
83657
83657
|
buildTime: "",
|
|
83658
83658
|
deploymentEnvironment: env2.detectDeploymentEnvironment(),
|
|
@@ -84322,7 +84322,7 @@ function initialize1PEventLogging() {
|
|
|
84322
84322
|
const platform2 = getPlatform();
|
|
84323
84323
|
const attributes = {
|
|
84324
84324
|
[import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
|
|
84325
|
-
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.65.
|
|
84325
|
+
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.65.4"
|
|
84326
84326
|
};
|
|
84327
84327
|
if (platform2 === "wsl") {
|
|
84328
84328
|
const wslVersion = getWslVersion();
|
|
@@ -84350,7 +84350,7 @@ function initialize1PEventLogging() {
|
|
|
84350
84350
|
})
|
|
84351
84351
|
]
|
|
84352
84352
|
});
|
|
84353
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.65.
|
|
84353
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.65.4");
|
|
84354
84354
|
}
|
|
84355
84355
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
84356
84356
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -94205,7 +94205,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
|
|
|
94205
94205
|
function formatA2AAgentCard(options = {}, pretty = true) {
|
|
94206
94206
|
return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
|
|
94207
94207
|
}
|
|
94208
|
-
var urVersion = "1.65.
|
|
94208
|
+
var urVersion = "1.65.4", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
|
|
94209
94209
|
var init_trends = __esm(() => {
|
|
94210
94210
|
init_a2aCardSignature();
|
|
94211
94211
|
coverage = [
|
|
@@ -97008,7 +97008,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
97008
97008
|
if (!isAttributionHeaderEnabled()) {
|
|
97009
97009
|
return "";
|
|
97010
97010
|
}
|
|
97011
|
-
const version2 = `${"1.65.
|
|
97011
|
+
const version2 = `${"1.65.4"}.${fingerprint}`;
|
|
97012
97012
|
const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
|
|
97013
97013
|
const cch = "";
|
|
97014
97014
|
const workload = getWorkload();
|
|
@@ -154772,7 +154772,7 @@ var init_projectSafety = __esm(() => {
|
|
|
154772
154772
|
function getInstruments() {
|
|
154773
154773
|
if (instruments)
|
|
154774
154774
|
return instruments;
|
|
154775
|
-
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.65.
|
|
154775
|
+
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.65.4");
|
|
154776
154776
|
instruments = {
|
|
154777
154777
|
operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
|
|
154778
154778
|
description: "GenAI operation duration.",
|
|
@@ -154870,7 +154870,7 @@ function genAiAgentAttributes() {
|
|
|
154870
154870
|
"gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
|
|
154871
154871
|
"gen_ai.provider.name": "ur",
|
|
154872
154872
|
"gen_ai.agent.name": "UR-Nexus",
|
|
154873
|
-
"gen_ai.agent.version": "1.65.
|
|
154873
|
+
"gen_ai.agent.version": "1.65.4"
|
|
154874
154874
|
};
|
|
154875
154875
|
}
|
|
154876
154876
|
function genAiWorkflowAttributes(workflowName) {
|
|
@@ -154886,7 +154886,7 @@ function genAiWorkflowAttributes(workflowName) {
|
|
|
154886
154886
|
function startGenAiWorkflowSpan(workflowName) {
|
|
154887
154887
|
const attributes = genAiWorkflowAttributes(workflowName);
|
|
154888
154888
|
const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
|
|
154889
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.65.
|
|
154889
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.65.4").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
154890
154890
|
}
|
|
154891
154891
|
function endGenAiWorkflowSpan(span, options2 = {}) {
|
|
154892
154892
|
try {
|
|
@@ -154924,7 +154924,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
|
|
|
154924
154924
|
if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
|
|
154925
154925
|
attributes["gen_ai.memory.record.count"] = options2.recordCount;
|
|
154926
154926
|
}
|
|
154927
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.65.
|
|
154927
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.65.4").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
154928
154928
|
}
|
|
154929
154929
|
function endGenAiMemorySpan(span, options2 = {}) {
|
|
154930
154930
|
try {
|
|
@@ -206443,7 +206443,7 @@ function getTelemetryAttributes() {
|
|
|
206443
206443
|
attributes["session.id"] = sessionId;
|
|
206444
206444
|
}
|
|
206445
206445
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
206446
|
-
attributes["app.version"] = "1.65.
|
|
206446
|
+
attributes["app.version"] = "1.65.4";
|
|
206447
206447
|
}
|
|
206448
206448
|
const oauthAccount = getOauthAccountInfo();
|
|
206449
206449
|
if (oauthAccount) {
|
|
@@ -252980,7 +252980,7 @@ function getInstallationEnv() {
|
|
|
252980
252980
|
return;
|
|
252981
252981
|
}
|
|
252982
252982
|
function getURCodeVersion() {
|
|
252983
|
-
return "1.65.
|
|
252983
|
+
return "1.65.4";
|
|
252984
252984
|
}
|
|
252985
252985
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
252986
252986
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -260311,7 +260311,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
260311
260311
|
const client2 = new Client({
|
|
260312
260312
|
name: "ur",
|
|
260313
260313
|
title: "UR",
|
|
260314
|
-
version: "1.65.
|
|
260314
|
+
version: "1.65.4",
|
|
260315
260315
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
260316
260316
|
websiteUrl: PRODUCT_URL
|
|
260317
260317
|
}, {
|
|
@@ -260671,7 +260671,7 @@ var init_client5 = __esm(() => {
|
|
|
260671
260671
|
const client2 = new Client({
|
|
260672
260672
|
name: "ur",
|
|
260673
260673
|
title: "UR",
|
|
260674
|
-
version: "1.65.
|
|
260674
|
+
version: "1.65.4",
|
|
260675
260675
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
260676
260676
|
websiteUrl: PRODUCT_URL
|
|
260677
260677
|
}, {
|
|
@@ -273272,7 +273272,7 @@ async function createRuntime() {
|
|
|
273272
273272
|
bootstrapTelemetry();
|
|
273273
273273
|
const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
|
|
273274
273274
|
[import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
|
|
273275
|
-
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.65.
|
|
273275
|
+
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.65.4"
|
|
273276
273276
|
}));
|
|
273277
273277
|
const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
|
|
273278
273278
|
resource,
|
|
@@ -273305,11 +273305,11 @@ async function createRuntime() {
|
|
|
273305
273305
|
setMeterProvider(meterProvider);
|
|
273306
273306
|
setLoggerProvider(loggerProvider);
|
|
273307
273307
|
if (meterProvider) {
|
|
273308
|
-
const meter = meterProvider.getMeter("ur-agent", "1.65.
|
|
273308
|
+
const meter = meterProvider.getMeter("ur-agent", "1.65.4");
|
|
273309
273309
|
setMeter(meter, (name, options2) => meter.createCounter(name, options2));
|
|
273310
273310
|
}
|
|
273311
273311
|
if (loggerProvider) {
|
|
273312
|
-
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.65.
|
|
273312
|
+
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.65.4"));
|
|
273313
273313
|
}
|
|
273314
273314
|
if (!cleanupRegistered2) {
|
|
273315
273315
|
cleanupRegistered2 = true;
|
|
@@ -273971,9 +273971,9 @@ async function assertMinVersion() {
|
|
|
273971
273971
|
if (false) {}
|
|
273972
273972
|
try {
|
|
273973
273973
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
273974
|
-
if (versionConfig.minVersion && lt("1.65.
|
|
273974
|
+
if (versionConfig.minVersion && lt("1.65.4", versionConfig.minVersion)) {
|
|
273975
273975
|
console.error(`
|
|
273976
|
-
It looks like your version of UR (${"1.65.
|
|
273976
|
+
It looks like your version of UR (${"1.65.4"}) needs an update.
|
|
273977
273977
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
273978
273978
|
|
|
273979
273979
|
To update, please run:
|
|
@@ -274189,7 +274189,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
274189
274189
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
274190
274190
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
274191
274191
|
pid: process.pid,
|
|
274192
|
-
currentVersion: "1.65.
|
|
274192
|
+
currentVersion: "1.65.4"
|
|
274193
274193
|
});
|
|
274194
274194
|
return "in_progress";
|
|
274195
274195
|
}
|
|
@@ -274198,7 +274198,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
274198
274198
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
274199
274199
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
274200
274200
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
274201
|
-
currentVersion: "1.65.
|
|
274201
|
+
currentVersion: "1.65.4"
|
|
274202
274202
|
});
|
|
274203
274203
|
console.error(`
|
|
274204
274204
|
Error: Windows NPM detected in WSL
|
|
@@ -274733,7 +274733,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
274733
274733
|
}
|
|
274734
274734
|
async function getDoctorDiagnostic() {
|
|
274735
274735
|
const installationType = await getCurrentInstallationType();
|
|
274736
|
-
const version2 = typeof MACRO !== "undefined" ? "1.65.
|
|
274736
|
+
const version2 = typeof MACRO !== "undefined" ? "1.65.4" : "unknown";
|
|
274737
274737
|
const installationPath = await getInstallationPath();
|
|
274738
274738
|
const invokedBinary = getInvokedBinary();
|
|
274739
274739
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -275668,8 +275668,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
275668
275668
|
const maxVersion = await getMaxVersion();
|
|
275669
275669
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
275670
275670
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
275671
|
-
if (gte("1.65.
|
|
275672
|
-
logForDebugging(`Native installer: current version ${"1.65.
|
|
275671
|
+
if (gte("1.65.4", maxVersion)) {
|
|
275672
|
+
logForDebugging(`Native installer: current version ${"1.65.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
275673
275673
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
275674
275674
|
latency_ms: Date.now() - startTime,
|
|
275675
275675
|
max_version: maxVersion,
|
|
@@ -275680,7 +275680,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
275680
275680
|
version2 = maxVersion;
|
|
275681
275681
|
}
|
|
275682
275682
|
}
|
|
275683
|
-
if (!forceReinstall && version2 === "1.65.
|
|
275683
|
+
if (!forceReinstall && version2 === "1.65.4" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
275684
275684
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
275685
275685
|
logEvent("tengu_native_update_complete", {
|
|
275686
275686
|
latency_ms: Date.now() - startTime,
|
|
@@ -345975,7 +345975,7 @@ function isAnyTracingEnabled() {
|
|
|
345975
345975
|
return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
|
|
345976
345976
|
}
|
|
345977
345977
|
function getTracer() {
|
|
345978
|
-
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.65.
|
|
345978
|
+
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.65.4");
|
|
345979
345979
|
}
|
|
345980
345980
|
function createSpanAttributes(spanType, customAttributes = {}) {
|
|
345981
345981
|
const baseAttributes = getTelemetryAttributes();
|
|
@@ -346680,6 +346680,46 @@ var init_taskListGate = __esm(() => {
|
|
|
346680
346680
|
]);
|
|
346681
346681
|
});
|
|
346682
346682
|
|
|
346683
|
+
// src/services/tools/repeatedFailureGuard.ts
|
|
346684
|
+
function callSignature(toolName, input) {
|
|
346685
|
+
let serialized;
|
|
346686
|
+
try {
|
|
346687
|
+
serialized = JSON.stringify(input, Object.keys(input ?? {}).sort());
|
|
346688
|
+
} catch {
|
|
346689
|
+
serialized = "<unserializable>";
|
|
346690
|
+
}
|
|
346691
|
+
return `${toolName}:${serialized}`;
|
|
346692
|
+
}
|
|
346693
|
+
function recordCallFailure(signature) {
|
|
346694
|
+
const next = (failureCounts.get(signature) ?? 0) + 1;
|
|
346695
|
+
failureCounts.set(signature, next);
|
|
346696
|
+
return next;
|
|
346697
|
+
}
|
|
346698
|
+
function checkRepeatedFailure(signature, config2 = REPEATED_FAILURE_DEFAULTS) {
|
|
346699
|
+
const failures = failureCounts.get(signature) ?? 0;
|
|
346700
|
+
if (failures >= config2.abortAfter) {
|
|
346701
|
+
return {
|
|
346702
|
+
action: "abort",
|
|
346703
|
+
reason: `This exact call has failed ${failures} times and is still being ` + `repeated. Stopping the turn rather than continuing to loop.`
|
|
346704
|
+
};
|
|
346705
|
+
}
|
|
346706
|
+
if (failures >= config2.limit) {
|
|
346707
|
+
return {
|
|
346708
|
+
action: "refuse",
|
|
346709
|
+
reason: `This exact call has already failed ${failures} times with the same ` + `arguments, so it will fail again. Do not retry it unchanged. Either ` + `fix the arguments, use a different tool, or tell the user what is ` + `blocking you and stop.`
|
|
346710
|
+
};
|
|
346711
|
+
}
|
|
346712
|
+
return { action: "allow" };
|
|
346713
|
+
}
|
|
346714
|
+
var REPEATED_FAILURE_DEFAULTS, failureCounts;
|
|
346715
|
+
var init_repeatedFailureGuard = __esm(() => {
|
|
346716
|
+
REPEATED_FAILURE_DEFAULTS = {
|
|
346717
|
+
limit: 3,
|
|
346718
|
+
abortAfter: 6
|
|
346719
|
+
};
|
|
346720
|
+
failureCounts = new Map;
|
|
346721
|
+
});
|
|
346722
|
+
|
|
346683
346723
|
// src/stability/types.ts
|
|
346684
346724
|
var DEFAULT_LIMITS;
|
|
346685
346725
|
var init_types12 = __esm(() => {
|
|
@@ -347710,6 +347750,32 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
347710
347750
|
}
|
|
347711
347751
|
}
|
|
347712
347752
|
}
|
|
347753
|
+
const callSig = callSignature(tool.name, input);
|
|
347754
|
+
const repeat2 = checkRepeatedFailure(callSig);
|
|
347755
|
+
if (repeat2.action !== "allow") {
|
|
347756
|
+
logEvent("tengu_repeated_failure_guard", {
|
|
347757
|
+
toolName: sanitizeToolNameForAnalytics(tool.name),
|
|
347758
|
+
action: repeat2.action
|
|
347759
|
+
});
|
|
347760
|
+
if (repeat2.action === "abort") {
|
|
347761
|
+
throw new Error(`Repeated tool failure: ${repeat2.reason}`);
|
|
347762
|
+
}
|
|
347763
|
+
return [
|
|
347764
|
+
{
|
|
347765
|
+
message: createUserMessage({
|
|
347766
|
+
content: [
|
|
347767
|
+
{
|
|
347768
|
+
type: "tool_result",
|
|
347769
|
+
content: `<tool_use_error>RepeatedFailure: ${repeat2.reason}</tool_use_error>`,
|
|
347770
|
+
is_error: true,
|
|
347771
|
+
tool_use_id: toolUseID
|
|
347772
|
+
}
|
|
347773
|
+
]
|
|
347774
|
+
}),
|
|
347775
|
+
shouldSkipPermissionCheck: false
|
|
347776
|
+
}
|
|
347777
|
+
];
|
|
347778
|
+
}
|
|
347713
347779
|
const gate = checkTaskListGate({
|
|
347714
347780
|
toolName: tool.name,
|
|
347715
347781
|
taskCount: await countTasksForGate(),
|
|
@@ -347717,6 +347783,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
347717
347783
|
isSubagent: Boolean(toolUseContext.agentId)
|
|
347718
347784
|
});
|
|
347719
347785
|
if (!gate.allowed) {
|
|
347786
|
+
recordCallFailure(callSig);
|
|
347720
347787
|
logEvent("tengu_task_list_gate_blocked", {
|
|
347721
347788
|
toolName: sanitizeToolNameForAnalytics(tool.name)
|
|
347722
347789
|
});
|
|
@@ -347737,6 +347804,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
347737
347804
|
];
|
|
347738
347805
|
}
|
|
347739
347806
|
if (!parsedInput.success) {
|
|
347807
|
+
recordCallFailure(callSig);
|
|
347740
347808
|
let errorContent = formatZodValidationError(tool.name, parsedInput.error);
|
|
347741
347809
|
const schemaHint = buildSchemaNotSentHint(tool, toolUseContext.messages, toolUseContext.options.tools);
|
|
347742
347810
|
if (schemaHint) {
|
|
@@ -348427,6 +348495,7 @@ var init_toolExecution = __esm(() => {
|
|
|
348427
348495
|
init_toolResultStorage();
|
|
348428
348496
|
init_toolSearch();
|
|
348429
348497
|
init_taskListGate();
|
|
348498
|
+
init_repeatedFailureGuard();
|
|
348430
348499
|
init_client5();
|
|
348431
348500
|
init_mcpStringUtils();
|
|
348432
348501
|
init_utils3();
|
|
@@ -375568,7 +375637,7 @@ function Feedback({
|
|
|
375568
375637
|
platform: env2.platform,
|
|
375569
375638
|
gitRepo: envInfo.isGit,
|
|
375570
375639
|
terminal: env2.terminal,
|
|
375571
|
-
version: "1.65.
|
|
375640
|
+
version: "1.65.4",
|
|
375572
375641
|
transcript: normalizeMessagesForAPI(messages),
|
|
375573
375642
|
errors: sanitizedErrors,
|
|
375574
375643
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -375760,7 +375829,7 @@ function Feedback({
|
|
|
375760
375829
|
", ",
|
|
375761
375830
|
env2.terminal,
|
|
375762
375831
|
", v",
|
|
375763
|
-
"1.65.
|
|
375832
|
+
"1.65.4"
|
|
375764
375833
|
]
|
|
375765
375834
|
}, undefined, true, undefined, this)
|
|
375766
375835
|
]
|
|
@@ -375866,7 +375935,7 @@ ${sanitizedDescription}
|
|
|
375866
375935
|
` + `**Environment Info**
|
|
375867
375936
|
` + `- Platform: ${env2.platform}
|
|
375868
375937
|
` + `- Terminal: ${env2.terminal}
|
|
375869
|
-
` + `- Version: ${"1.65.
|
|
375938
|
+
` + `- Version: ${"1.65.4"}
|
|
375870
375939
|
` + `- Feedback ID: ${feedbackId}
|
|
375871
375940
|
` + `
|
|
375872
375941
|
**Errors**
|
|
@@ -378976,7 +379045,7 @@ function buildPrimarySection() {
|
|
|
378976
379045
|
}, undefined, false, undefined, this);
|
|
378977
379046
|
return [{
|
|
378978
379047
|
label: "Version",
|
|
378979
|
-
value: "1.65.
|
|
379048
|
+
value: "1.65.4"
|
|
378980
379049
|
}, {
|
|
378981
379050
|
label: "Session name",
|
|
378982
379051
|
value: nameValue
|
|
@@ -382306,7 +382375,7 @@ function Config({
|
|
|
382306
382375
|
}
|
|
382307
382376
|
}, undefined, false, undefined, this)
|
|
382308
382377
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
382309
|
-
currentVersion: "1.65.
|
|
382378
|
+
currentVersion: "1.65.4",
|
|
382310
382379
|
onChoice: (choice) => {
|
|
382311
382380
|
setShowSubmenu(null);
|
|
382312
382381
|
setTabsHidden(false);
|
|
@@ -382318,7 +382387,7 @@ function Config({
|
|
|
382318
382387
|
autoUpdatesChannel: "stable"
|
|
382319
382388
|
};
|
|
382320
382389
|
if (choice === "stay") {
|
|
382321
|
-
newSettings.minimumVersion = "1.65.
|
|
382390
|
+
newSettings.minimumVersion = "1.65.4";
|
|
382322
382391
|
}
|
|
382323
382392
|
updateSettingsForSource("userSettings", newSettings);
|
|
382324
382393
|
setSettingsData((prev_27) => ({
|
|
@@ -390382,7 +390451,7 @@ function HelpV2(t0) {
|
|
|
390382
390451
|
let t6;
|
|
390383
390452
|
if ($2[31] !== tabs) {
|
|
390384
390453
|
t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
|
|
390385
|
-
title: `UR v${"1.65.
|
|
390454
|
+
title: `UR v${"1.65.4"}`,
|
|
390386
390455
|
color: "professionalBlue",
|
|
390387
390456
|
defaultTab: "general",
|
|
390388
390457
|
children: tabs
|
|
@@ -391299,7 +391368,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
|
|
|
391299
391368
|
async function handleInitialize(options2) {
|
|
391300
391369
|
return {
|
|
391301
391370
|
name: "UR",
|
|
391302
|
-
version: "1.65.
|
|
391371
|
+
version: "1.65.4",
|
|
391303
391372
|
protocolVersion: "0.1.0",
|
|
391304
391373
|
workspaceRoot: options2.cwd,
|
|
391305
391374
|
capabilities: {
|
|
@@ -408407,7 +408476,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
408407
408476
|
return [];
|
|
408408
408477
|
}
|
|
408409
408478
|
}
|
|
408410
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.65.
|
|
408479
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.65.4") {
|
|
408411
408480
|
if (process.env.USER_TYPE === "ant") {
|
|
408412
408481
|
const changelog = "";
|
|
408413
408482
|
if (changelog) {
|
|
@@ -408434,7 +408503,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.65.2")
|
|
|
408434
408503
|
releaseNotes
|
|
408435
408504
|
};
|
|
408436
408505
|
}
|
|
408437
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.65.
|
|
408506
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.65.4") {
|
|
408438
408507
|
if (process.env.USER_TYPE === "ant") {
|
|
408439
408508
|
const changelog = "";
|
|
408440
408509
|
if (changelog) {
|
|
@@ -411291,7 +411360,7 @@ function getRecentActivitySync() {
|
|
|
411291
411360
|
return cachedActivity;
|
|
411292
411361
|
}
|
|
411293
411362
|
function getLogoDisplayData() {
|
|
411294
|
-
const version2 = process.env.DEMO_VERSION ?? "1.65.
|
|
411363
|
+
const version2 = process.env.DEMO_VERSION ?? "1.65.4";
|
|
411295
411364
|
const serverUrl = getDirectConnectServerUrl();
|
|
411296
411365
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
|
|
411297
411366
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -412175,7 +412244,7 @@ function LogoV2() {
|
|
|
412175
412244
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
412176
412245
|
t2 = () => {
|
|
412177
412246
|
const currentConfig2 = getGlobalConfig();
|
|
412178
|
-
if (currentConfig2.lastReleaseNotesSeen === "1.65.
|
|
412247
|
+
if (currentConfig2.lastReleaseNotesSeen === "1.65.4") {
|
|
412179
412248
|
return;
|
|
412180
412249
|
}
|
|
412181
412250
|
saveGlobalConfig(_temp327);
|
|
@@ -412860,12 +412929,12 @@ function LogoV2() {
|
|
|
412860
412929
|
return t41;
|
|
412861
412930
|
}
|
|
412862
412931
|
function _temp327(current) {
|
|
412863
|
-
if (current.lastReleaseNotesSeen === "1.65.
|
|
412932
|
+
if (current.lastReleaseNotesSeen === "1.65.4") {
|
|
412864
412933
|
return current;
|
|
412865
412934
|
}
|
|
412866
412935
|
return {
|
|
412867
412936
|
...current,
|
|
412868
|
-
lastReleaseNotesSeen: "1.65.
|
|
412937
|
+
lastReleaseNotesSeen: "1.65.4"
|
|
412869
412938
|
};
|
|
412870
412939
|
}
|
|
412871
412940
|
function _temp241(s_0) {
|
|
@@ -429663,7 +429732,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
|
|
|
429663
429732
|
if (spec.name !== specName) {
|
|
429664
429733
|
throw new Error("Agentic CI workflow spec name does not match");
|
|
429665
429734
|
}
|
|
429666
|
-
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.65.
|
|
429735
|
+
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.65.4" : "1.65.4");
|
|
429667
429736
|
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
|
|
429668
429737
|
throw new Error("invalid ur-agent package version");
|
|
429669
429738
|
}
|
|
@@ -430656,7 +430725,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
|
|
|
430656
430725
|
path: ".github/workflows/ur.yml",
|
|
430657
430726
|
root: "project",
|
|
430658
430727
|
content: compileAgenticCiWorkflow("default", {
|
|
430659
|
-
packageVersion: typeof MACRO !== "undefined" ? "1.65.
|
|
430728
|
+
packageVersion: typeof MACRO !== "undefined" ? "1.65.4" : "1.65.4"
|
|
430660
430729
|
})
|
|
430661
430730
|
},
|
|
430662
430731
|
{
|
|
@@ -430719,7 +430788,7 @@ function value(tokens, flag) {
|
|
|
430719
430788
|
return index2 >= 0 ? tokens[index2 + 1] : undefined;
|
|
430720
430789
|
}
|
|
430721
430790
|
function cliVersion() {
|
|
430722
|
-
return typeof MACRO !== "undefined" ? "1.65.
|
|
430791
|
+
return typeof MACRO !== "undefined" ? "1.65.4" : "1.65.4";
|
|
430723
430792
|
}
|
|
430724
430793
|
function workflowPath(cwd2) {
|
|
430725
430794
|
return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
|
|
@@ -436575,7 +436644,7 @@ function createAcpStdioApp(deps) {
|
|
|
436575
436644
|
}
|
|
436576
436645
|
},
|
|
436577
436646
|
authMethods: [],
|
|
436578
|
-
agentInfo: { name: "UR-Nexus", version: "1.65.
|
|
436647
|
+
agentInfo: { name: "UR-Nexus", version: "1.65.4" }
|
|
436579
436648
|
})).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
|
|
436580
436649
|
const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
|
|
436581
436650
|
await runtime2.announce({
|
|
@@ -436672,7 +436741,7 @@ function createAcpStdioAgent(deps) {
|
|
|
436672
436741
|
}
|
|
436673
436742
|
},
|
|
436674
436743
|
authMethods: [],
|
|
436675
|
-
agentInfo: { name: "UR-Nexus", version: "1.65.
|
|
436744
|
+
agentInfo: { name: "UR-Nexus", version: "1.65.4" }
|
|
436676
436745
|
});
|
|
436677
436746
|
return;
|
|
436678
436747
|
case "authenticate":
|
|
@@ -534920,13 +534989,13 @@ ${lanes.join(`
|
|
|
534920
534989
|
}
|
|
534921
534990
|
function instantiateTypeWithSingleGenericCallSignature(node, type, checkMode) {
|
|
534922
534991
|
if (checkMode && checkMode & (2 | 8)) {
|
|
534923
|
-
const
|
|
534992
|
+
const callSignature2 = getSingleSignature(type, 0, true);
|
|
534924
534993
|
const constructSignature = getSingleSignature(type, 1, true);
|
|
534925
|
-
const signature =
|
|
534994
|
+
const signature = callSignature2 || constructSignature;
|
|
534926
534995
|
if (signature && signature.typeParameters) {
|
|
534927
534996
|
const contextualType = getApparentTypeOfContextualType(node, 2);
|
|
534928
534997
|
if (contextualType) {
|
|
534929
|
-
const contextualSignature = getSingleSignature(getNonNullableType(contextualType),
|
|
534998
|
+
const contextualSignature = getSingleSignature(getNonNullableType(contextualType), callSignature2 ? 0 : 1, false);
|
|
534930
534999
|
if (contextualSignature && !contextualSignature.typeParameters) {
|
|
534931
535000
|
if (checkMode & 8) {
|
|
534932
535001
|
skippedGenericFunction(node, checkMode);
|
|
@@ -645049,7 +645118,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
645049
645118
|
smapsRollup,
|
|
645050
645119
|
platform: process.platform,
|
|
645051
645120
|
nodeVersion: process.version,
|
|
645052
|
-
ccVersion: "1.65.
|
|
645121
|
+
ccVersion: "1.65.4"
|
|
645053
645122
|
};
|
|
645054
645123
|
}
|
|
645055
645124
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -645629,7 +645698,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
645629
645698
|
var call153 = async () => {
|
|
645630
645699
|
return {
|
|
645631
645700
|
type: "text",
|
|
645632
|
-
value: "1.65.
|
|
645701
|
+
value: "1.65.4"
|
|
645633
645702
|
};
|
|
645634
645703
|
}, version2, version_default;
|
|
645635
645704
|
var init_version = __esm(() => {
|
|
@@ -656700,7 +656769,7 @@ function generateHtmlReport(data, insights) {
|
|
|
656700
656769
|
</html>`;
|
|
656701
656770
|
}
|
|
656702
656771
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
656703
|
-
const version3 = typeof MACRO !== "undefined" ? "1.65.
|
|
656772
|
+
const version3 = typeof MACRO !== "undefined" ? "1.65.4" : "unknown";
|
|
656704
656773
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
656705
656774
|
const facets_summary = {
|
|
656706
656775
|
total: facets.size,
|
|
@@ -661011,7 +661080,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
661011
661080
|
init_settings2();
|
|
661012
661081
|
init_slowOperations();
|
|
661013
661082
|
init_uuid();
|
|
661014
|
-
VERSION7 = typeof MACRO !== "undefined" ? "1.65.
|
|
661083
|
+
VERSION7 = typeof MACRO !== "undefined" ? "1.65.4" : "unknown";
|
|
661015
661084
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
661016
661085
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
661017
661086
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -662226,7 +662295,7 @@ var init_filesystem = __esm(() => {
|
|
|
662226
662295
|
});
|
|
662227
662296
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
662228
662297
|
const nonce = randomBytes20(16).toString("hex");
|
|
662229
|
-
return join232(getURTempDir(), "bundled-skills", "1.65.
|
|
662298
|
+
return join232(getURTempDir(), "bundled-skills", "1.65.4", nonce);
|
|
662230
662299
|
});
|
|
662231
662300
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
662232
662301
|
});
|
|
@@ -668521,7 +668590,7 @@ function computeFingerprint(messageText2, version3) {
|
|
|
668521
668590
|
}
|
|
668522
668591
|
function computeFingerprintFromMessages(messages) {
|
|
668523
668592
|
const firstMessageText = extractFirstMessageText(messages);
|
|
668524
|
-
return computeFingerprint(firstMessageText, "1.65.
|
|
668593
|
+
return computeFingerprint(firstMessageText, "1.65.4");
|
|
668525
668594
|
}
|
|
668526
668595
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
668527
668596
|
var init_fingerprint = () => {};
|
|
@@ -670417,7 +670486,7 @@ async function sideQuery(opts) {
|
|
|
670417
670486
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
670418
670487
|
}
|
|
670419
670488
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
670420
|
-
const fingerprint2 = computeFingerprint(messageText2, "1.65.
|
|
670489
|
+
const fingerprint2 = computeFingerprint(messageText2, "1.65.4");
|
|
670421
670490
|
const attributionHeader = getAttributionHeader(fingerprint2);
|
|
670422
670491
|
const systemBlocks = [
|
|
670423
670492
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -675188,7 +675257,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
675188
675257
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
675189
675258
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
675190
675259
|
betas: getSdkBetas(),
|
|
675191
|
-
ur_version: "1.65.
|
|
675260
|
+
ur_version: "1.65.4",
|
|
675192
675261
|
output_style: outputStyle2,
|
|
675193
675262
|
agents: inputs.agents.map((agent2) => agent2.agentType),
|
|
675194
675263
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -689048,7 +689117,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
689048
689117
|
function getSemverPart(version3) {
|
|
689049
689118
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
689050
689119
|
}
|
|
689051
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.65.
|
|
689120
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.65.4") {
|
|
689052
689121
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react222.useState(() => getSemverPart(initialVersion));
|
|
689053
689122
|
if (!updatedVersion) {
|
|
689054
689123
|
return null;
|
|
@@ -689097,7 +689166,7 @@ function AutoUpdater({
|
|
|
689097
689166
|
return;
|
|
689098
689167
|
}
|
|
689099
689168
|
if (false) {}
|
|
689100
|
-
const currentVersion = "1.65.
|
|
689169
|
+
const currentVersion = "1.65.4";
|
|
689101
689170
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
689102
689171
|
let latestVersion = await getLatestVersion(channel);
|
|
689103
689172
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -689326,12 +689395,12 @@ function NativeAutoUpdater({
|
|
|
689326
689395
|
logEvent("tengu_native_auto_updater_start", {});
|
|
689327
689396
|
try {
|
|
689328
689397
|
const maxVersion = await getMaxVersion();
|
|
689329
|
-
if (maxVersion && gt("1.65.
|
|
689398
|
+
if (maxVersion && gt("1.65.4", maxVersion)) {
|
|
689330
689399
|
const msg = await getMaxVersionMessage();
|
|
689331
689400
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
689332
689401
|
}
|
|
689333
689402
|
const result = await installLatest(channel);
|
|
689334
|
-
const currentVersion = "1.65.
|
|
689403
|
+
const currentVersion = "1.65.4";
|
|
689335
689404
|
const latencyMs = Date.now() - startTime;
|
|
689336
689405
|
if (result.lockFailed) {
|
|
689337
689406
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -689468,17 +689537,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
689468
689537
|
const maxVersion = await getMaxVersion();
|
|
689469
689538
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
689470
689539
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
689471
|
-
if (gte("1.65.
|
|
689472
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.65.
|
|
689540
|
+
if (gte("1.65.4", maxVersion)) {
|
|
689541
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.65.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
689473
689542
|
setUpdateAvailable(false);
|
|
689474
689543
|
return;
|
|
689475
689544
|
}
|
|
689476
689545
|
latest = maxVersion;
|
|
689477
689546
|
}
|
|
689478
|
-
const hasUpdate = latest && !gte("1.65.
|
|
689547
|
+
const hasUpdate = latest && !gte("1.65.4", latest) && !shouldSkipVersion(latest);
|
|
689479
689548
|
setUpdateAvailable(!!hasUpdate);
|
|
689480
689549
|
if (hasUpdate) {
|
|
689481
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.65.
|
|
689550
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.65.4"} -> ${latest}`);
|
|
689482
689551
|
}
|
|
689483
689552
|
};
|
|
689484
689553
|
$2[0] = t1;
|
|
@@ -689512,7 +689581,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
689512
689581
|
wrap: "truncate",
|
|
689513
689582
|
children: [
|
|
689514
689583
|
"currentVersion: ",
|
|
689515
|
-
"1.65.
|
|
689584
|
+
"1.65.4"
|
|
689516
689585
|
]
|
|
689517
689586
|
}, undefined, true, undefined, this);
|
|
689518
689587
|
$2[3] = verbose;
|
|
@@ -700209,7 +700278,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
700209
700278
|
project_dir: getOriginalCwd(),
|
|
700210
700279
|
added_dirs: addedDirs
|
|
700211
700280
|
},
|
|
700212
|
-
version: "1.65.
|
|
700281
|
+
version: "1.65.4",
|
|
700213
700282
|
output_style: {
|
|
700214
700283
|
name: outputStyleName
|
|
700215
700284
|
},
|
|
@@ -700292,7 +700361,7 @@ function StatusLineInner({
|
|
|
700292
700361
|
const taskValues = Object.values(tasks2);
|
|
700293
700362
|
const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
|
|
700294
700363
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
700295
|
-
version: "1.65.
|
|
700364
|
+
version: "1.65.4",
|
|
700296
700365
|
providerLabel: providerRuntime.providerLabel,
|
|
700297
700366
|
authMode: providerRuntime.authLabel,
|
|
700298
700367
|
model: providerRuntime.model ?? renderModelName(mainLoopModel),
|
|
@@ -712435,7 +712504,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
712435
712504
|
} catch {}
|
|
712436
712505
|
const data = {
|
|
712437
712506
|
trigger: trigger2,
|
|
712438
|
-
version: "1.65.
|
|
712507
|
+
version: "1.65.4",
|
|
712439
712508
|
platform: process.platform,
|
|
712440
712509
|
transcript,
|
|
712441
712510
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -714679,16 +714748,101 @@ var init_tipRegistry = __esm(() => {
|
|
|
714679
714748
|
},
|
|
714680
714749
|
{
|
|
714681
714750
|
id: "web-app",
|
|
714682
|
-
content: async () => "
|
|
714751
|
+
content: async () => '/cloud run "<task>" to run a task in an isolated worktree while you keep coding',
|
|
714683
714752
|
cooldownSessions: 15,
|
|
714684
714753
|
isRelevant: async () => true
|
|
714685
714754
|
},
|
|
714686
714755
|
{
|
|
714687
|
-
id: "
|
|
714688
|
-
content: async () => "
|
|
714756
|
+
id: "model-doctor-capabilities",
|
|
714757
|
+
content: async () => "ur model-doctor shows which local models can actually use tools and vision \u2014 a model without tools will describe work instead of doing it",
|
|
714758
|
+
cooldownSessions: 12,
|
|
714759
|
+
isRelevant: async () => true
|
|
714760
|
+
},
|
|
714761
|
+
{
|
|
714762
|
+
id: "selftest-drills",
|
|
714763
|
+
content: async () => "ur selftest run checks the shipped binary end to end after an upgrade, and prints the checks that need a live model",
|
|
714764
|
+
cooldownSessions: 15,
|
|
714765
|
+
isRelevant: async () => true
|
|
714766
|
+
},
|
|
714767
|
+
{
|
|
714768
|
+
id: "sources-provenance",
|
|
714769
|
+
content: async () => '/sources lists every page and MCP result that entered this session \xB7 /sources --check "<claim>" says whether it came from one',
|
|
714770
|
+
cooldownSessions: 12,
|
|
714771
|
+
isRelevant: async () => true
|
|
714772
|
+
},
|
|
714773
|
+
{
|
|
714774
|
+
id: "agent-inspect-costs",
|
|
714775
|
+
content: async () => "ur agent-inspect --costs breaks a fan-out down per agent, labelled with what each one was doing",
|
|
714689
714776
|
cooldownSessions: 15,
|
|
714690
714777
|
isRelevant: async () => true
|
|
714691
714778
|
},
|
|
714779
|
+
{
|
|
714780
|
+
id: "memory-integrity",
|
|
714781
|
+
content: async () => "ur memory-integrity record then verify detects memory files edited, deleted, or dropped in by something other than UR",
|
|
714782
|
+
cooldownSessions: 20,
|
|
714783
|
+
isRelevant: async () => true
|
|
714784
|
+
},
|
|
714785
|
+
{
|
|
714786
|
+
id: "grade-trajectory",
|
|
714787
|
+
content: async () => "ur grade-trajectory --file <transcript.jsonl> --min-score 70 grades how a run worked, not just what it concluded, and exits non-zero to gate CI",
|
|
714788
|
+
cooldownSessions: 20,
|
|
714789
|
+
isRelevant: async () => true
|
|
714790
|
+
},
|
|
714791
|
+
{
|
|
714792
|
+
id: "ci-loop-heal",
|
|
714793
|
+
content: async () => 'ur ci-loop --command "bun test" fixes failures and reruns until green',
|
|
714794
|
+
cooldownSessions: 12,
|
|
714795
|
+
isRelevant: async () => true
|
|
714796
|
+
},
|
|
714797
|
+
...[
|
|
714798
|
+
["spec-driven", "/spec init <name> \u2014 requirements \u2192 design \u2192 tasks, run with proof gates"],
|
|
714799
|
+
["repo-edit", "/repo-edit rename <sym> --to <new> \u2014 compiler-accurate rename with rollback"],
|
|
714800
|
+
["code-index", '/code-index search "<idea>" \u2014 semantic search over your code, local embeddings'],
|
|
714801
|
+
["knowledge", "/knowledge add <file> then /knowledge search \u2014 curated notes with provenance"],
|
|
714802
|
+
["context-pack", "/context-pack \u2014 scan architecture, record decisions and constraints under .ur/"],
|
|
714803
|
+
["semantic-memory", '/semantic-memory search "<topic>" \u2014 search past memory by meaning'],
|
|
714804
|
+
["remember", "/remember <fact> \u2014 store a durable preference \xB7 /forget to remove it"],
|
|
714805
|
+
["wiki", "/wiki generate \u2014 living repo wiki plus a prompt-injected repo map"],
|
|
714806
|
+
["crew", "/crew create <name> --workers 3 \u2014 lead splits a goal, workers claim tasks"],
|
|
714807
|
+
["arena", '/arena "<task>" --agents 3 \u2014 N attempts in isolated worktrees, judged'],
|
|
714808
|
+
["pattern", '/pattern run debate "<question>" \u2014 PEER, debate, handoff and parallel patterns'],
|
|
714809
|
+
["goal", '/goal add <name> --objective "<x>" \u2014 objectives that persist across sessions'],
|
|
714810
|
+
["bg", '/bg run "<task>" \u2014 detached local agent you can steer, log and kill'],
|
|
714811
|
+
["worktree", "/task start <name> --worktree \u2014 isolated branch per task, PR handoff"],
|
|
714812
|
+
["eval", "/eval run <suite> --repeat 3 \u2014 replayable graded cases with CI gates"],
|
|
714813
|
+
["test-first", "/test-first run \u2014 detect the stack, then compile/test/lint loops"],
|
|
714814
|
+
["guardrails", '/guardrails check "<text>" \u2014 regex, PII and LLM rules with tripwires'],
|
|
714815
|
+
["audit", "/audit export --format csv \u2014 hash-chained trail with tamper verification"],
|
|
714816
|
+
["security-suite", "/security scan \u2014 secrets, threat model, dependency vulnerabilities"],
|
|
714817
|
+
["sandbox", '/sandbox eval "<command>" \u2014 see what the OS sandbox would allow'],
|
|
714818
|
+
["permission-profile", "/permission-profile use <name> \u2014 switch a named permission set"],
|
|
714819
|
+
["escalate", '/escalate run "<task>" \u2014 fast model, escalating hard steps to an oracle'],
|
|
714820
|
+
["model-route", '/model-route "<task>" \u2014 pick the model that fits the work'],
|
|
714821
|
+
["advisor", "/advisor <model> \u2014 a second model critiques the main one"],
|
|
714822
|
+
["rewind", "/rewind \u2014 restore code and conversation to an earlier checkpoint"],
|
|
714823
|
+
["undo", "/undo \u2014 revert the last file edit, including a file it created"],
|
|
714824
|
+
["diff", "/diff \u2014 uncommitted changes and per-turn diffs"],
|
|
714825
|
+
["trace", "/trace \u2014 what the last turns actually called, with results"],
|
|
714826
|
+
["research", "/research, /paper, /cite, /graph \u2014 notes, papers and a claim graph"],
|
|
714827
|
+
["multimodal", "/image, /video, /youtube, /pdf \u2014 inspect media and documents"],
|
|
714828
|
+
["browser", '/browser "<url> <task>" \u2014 drive a real browser \xB7 /browser-qa to replay'],
|
|
714829
|
+
["mcp", "/mcp \u2014 connect MCP servers \xB7 /plugin for plugins and marketplaces"],
|
|
714830
|
+
["skills", "/skill run <name> \xB7 /create-skill <name> \u2014 reusable workflows"],
|
|
714831
|
+
["toolsmith", "/toolsmith <name> python \u2014 scaffold a local helper tool UR can run"],
|
|
714832
|
+
["workflow", "/workflow run <name> \u2014 declarative steps with dependencies"],
|
|
714833
|
+
["automation", '/automation create <name> --schedule "0 3 * * *" \u2014 project-local cron'],
|
|
714834
|
+
["devcontainer", "/devcontainer exec -- <cmd> \u2014 run in a reproducible container"],
|
|
714835
|
+
["ur-doctor", "/ur-doctor \u2014 full health check: tools, Ollama, .ur, MCP, Playwright"],
|
|
714836
|
+
["dna", "/dna \u2014 detect language, package manager, build, test and lint"],
|
|
714837
|
+
["statusline", "/statusline \u2014 put model, branch and context in your prompt"],
|
|
714838
|
+
["speak", "/speak <text> \u2014 read a line aloud with the system voice"],
|
|
714839
|
+
["computer", "/computer screenshot \u2014 desktop control; changes need --yes"]
|
|
714840
|
+
].map(([id, text]) => ({
|
|
714841
|
+
id: `cmd-${id}`,
|
|
714842
|
+
content: async () => text,
|
|
714843
|
+
cooldownSessions: 25,
|
|
714844
|
+
isRelevant: async () => true
|
|
714845
|
+
})),
|
|
714692
714846
|
{
|
|
714693
714847
|
id: "modelOplan-mode-reminder",
|
|
714694
714848
|
content: async () => `Your default model setting is plan mode. Press ${getShortcutDisplay("chat:cycleMode", "Chat", "shift+tab")} twice to activate Plan Mode.`,
|
|
@@ -724715,7 +724869,7 @@ function WelcomeV2() {
|
|
|
724715
724869
|
dimColor: true,
|
|
724716
724870
|
children: [
|
|
724717
724871
|
"v",
|
|
724718
|
-
"1.65.
|
|
724872
|
+
"1.65.4"
|
|
724719
724873
|
]
|
|
724720
724874
|
}, undefined, true, undefined, this)
|
|
724721
724875
|
]
|
|
@@ -725975,7 +726129,7 @@ function completeOnboarding() {
|
|
|
725975
726129
|
saveGlobalConfig((current) => ({
|
|
725976
726130
|
...current,
|
|
725977
726131
|
hasCompletedOnboarding: true,
|
|
725978
|
-
lastOnboardingVersion: "1.65.
|
|
726132
|
+
lastOnboardingVersion: "1.65.4"
|
|
725979
726133
|
}));
|
|
725980
726134
|
}
|
|
725981
726135
|
function showDialog(root2, renderer) {
|
|
@@ -731019,7 +731173,7 @@ function appendToLog(path24, message) {
|
|
|
731019
731173
|
cwd: getFsImplementation().cwd(),
|
|
731020
731174
|
userType: process.env.USER_TYPE,
|
|
731021
731175
|
sessionId: getSessionId(),
|
|
731022
|
-
version: "1.65.
|
|
731176
|
+
version: "1.65.4"
|
|
731023
731177
|
};
|
|
731024
731178
|
getLogWriter(path24).write(messageWithTimestamp);
|
|
731025
731179
|
}
|
|
@@ -731799,7 +731953,7 @@ function createTokenRefreshScheduler({
|
|
|
731799
731953
|
refreshBufferMs = TOKEN_REFRESH_BUFFER_MS
|
|
731800
731954
|
}) {
|
|
731801
731955
|
const timers = new Map;
|
|
731802
|
-
const
|
|
731956
|
+
const failureCounts2 = new Map;
|
|
731803
731957
|
const generations = new Map;
|
|
731804
731958
|
function nextGeneration(sessionId) {
|
|
731805
731959
|
const gen = (generations.get(sessionId) ?? 0) + 1;
|
|
@@ -731850,8 +732004,8 @@ function createTokenRefreshScheduler({
|
|
|
731850
732004
|
return;
|
|
731851
732005
|
}
|
|
731852
732006
|
if (!oauthToken) {
|
|
731853
|
-
const failures = (
|
|
731854
|
-
|
|
732007
|
+
const failures = (failureCounts2.get(sessionId) ?? 0) + 1;
|
|
732008
|
+
failureCounts2.set(sessionId, failures);
|
|
731855
732009
|
logForDebugging(`[${label}:token] No OAuth token available for refresh, sessionId=${sessionId} (failure ${failures}/${MAX_REFRESH_FAILURES})`, { level: "error" });
|
|
731856
732010
|
logForDiagnosticsNoPII("error", "bridge_token_refresh_no_oauth");
|
|
731857
732011
|
if (failures < MAX_REFRESH_FAILURES) {
|
|
@@ -731860,7 +732014,7 @@ function createTokenRefreshScheduler({
|
|
|
731860
732014
|
}
|
|
731861
732015
|
return;
|
|
731862
732016
|
}
|
|
731863
|
-
|
|
732017
|
+
failureCounts2.delete(sessionId);
|
|
731864
732018
|
logForDebugging(`[${label}:token] Refreshing token for sessionId=${sessionId}: new token prefix=${oauthToken.slice(0, 15)}\u2026`);
|
|
731865
732019
|
logEvent("tengu_bridge_token_refreshed", {});
|
|
731866
732020
|
onRefresh(sessionId, oauthToken);
|
|
@@ -731875,7 +732029,7 @@ function createTokenRefreshScheduler({
|
|
|
731875
732029
|
clearTimeout(timer);
|
|
731876
732030
|
timers.delete(sessionId);
|
|
731877
732031
|
}
|
|
731878
|
-
|
|
732032
|
+
failureCounts2.delete(sessionId);
|
|
731879
732033
|
}
|
|
731880
732034
|
function cancelAll() {
|
|
731881
732035
|
for (const sessionId of generations.keys()) {
|
|
@@ -731885,7 +732039,7 @@ function createTokenRefreshScheduler({
|
|
|
731885
732039
|
clearTimeout(timer);
|
|
731886
732040
|
}
|
|
731887
732041
|
timers.clear();
|
|
731888
|
-
|
|
732042
|
+
failureCounts2.clear();
|
|
731889
732043
|
}
|
|
731890
732044
|
return { schedule: schedule2, scheduleFromExpiresIn, cancel, cancelAll };
|
|
731891
732045
|
}
|
|
@@ -735178,8 +735332,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
735178
735332
|
}
|
|
735179
735333
|
async function checkEnvLessBridgeMinVersion() {
|
|
735180
735334
|
const cfg = await getEnvLessBridgeConfig();
|
|
735181
|
-
if (cfg.min_version && lt("1.65.
|
|
735182
|
-
return `Your version of UR (${"1.65.
|
|
735335
|
+
if (cfg.min_version && lt("1.65.4", cfg.min_version)) {
|
|
735336
|
+
return `Your version of UR (${"1.65.4"}) is too old for Remote Control.
|
|
735183
735337
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
735184
735338
|
}
|
|
735185
735339
|
return null;
|
|
@@ -735653,7 +735807,7 @@ async function initBridgeCore(params) {
|
|
|
735653
735807
|
const rawApi = createBridgeApiClient({
|
|
735654
735808
|
baseUrl,
|
|
735655
735809
|
getAccessToken,
|
|
735656
|
-
runnerVersion: "1.65.
|
|
735810
|
+
runnerVersion: "1.65.4",
|
|
735657
735811
|
onDebug: logForDebugging,
|
|
735658
735812
|
onAuth401,
|
|
735659
735813
|
getTrustedDeviceToken
|
|
@@ -745126,7 +745280,7 @@ function getAgUiCapabilities() {
|
|
|
745126
745280
|
name: "UR-Nexus",
|
|
745127
745281
|
type: "ur-nexus",
|
|
745128
745282
|
description: "Provider-flexible, local-first autonomous engineering workflow agent.",
|
|
745129
|
-
version: "1.65.
|
|
745283
|
+
version: "1.65.4",
|
|
745130
745284
|
provider: "UR",
|
|
745131
745285
|
documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
|
|
745132
745286
|
},
|
|
@@ -746266,7 +746420,7 @@ function createMCPServer(cwd4, debug2, verbose) {
|
|
|
746266
746420
|
};
|
|
746267
746421
|
const server2 = new Server({
|
|
746268
746422
|
name: "ur-nexus",
|
|
746269
|
-
version: "1.65.
|
|
746423
|
+
version: "1.65.4"
|
|
746270
746424
|
}, {
|
|
746271
746425
|
capabilities: {
|
|
746272
746426
|
tools: {}
|
|
@@ -747424,7 +747578,7 @@ function thrownResponse(error40) {
|
|
|
747424
747578
|
}
|
|
747425
747579
|
async function createUrMcp2026Runtime(options4) {
|
|
747426
747580
|
const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
|
|
747427
|
-
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.65.
|
|
747581
|
+
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.65.4" }, { capabilities: {} });
|
|
747428
747582
|
const [clientTransport, serverTransport] = createLinkedTransportPair();
|
|
747429
747583
|
try {
|
|
747430
747584
|
await server2.connect(serverTransport);
|
|
@@ -747435,7 +747589,7 @@ async function createUrMcp2026Runtime(options4) {
|
|
|
747435
747589
|
}
|
|
747436
747590
|
const runtime2 = new Mcp2026Runtime({
|
|
747437
747591
|
cwd: options4.cwd,
|
|
747438
|
-
version: "1.65.
|
|
747592
|
+
version: "1.65.4",
|
|
747439
747593
|
backend: {
|
|
747440
747594
|
listTools: async () => {
|
|
747441
747595
|
const listed = await client2.listTools();
|
|
@@ -749568,7 +749722,7 @@ async function update() {
|
|
|
749568
749722
|
logEvent("tengu_update_check", {});
|
|
749569
749723
|
const diagnostic2 = await getDoctorDiagnostic();
|
|
749570
749724
|
const result = await checkUpgradeStatus({
|
|
749571
|
-
currentVersion: "1.65.
|
|
749725
|
+
currentVersion: "1.65.4",
|
|
749572
749726
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
749573
749727
|
installationType: diagnostic2.installationType,
|
|
749574
749728
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -750884,7 +751038,7 @@ ${customInstructions}` : customInstructions;
|
|
|
750884
751038
|
}
|
|
750885
751039
|
}
|
|
750886
751040
|
logForDiagnosticsNoPII("info", "started", {
|
|
750887
|
-
version: "1.65.
|
|
751041
|
+
version: "1.65.4",
|
|
750888
751042
|
is_native_binary: isInBundledMode()
|
|
750889
751043
|
});
|
|
750890
751044
|
registerCleanup(async () => {
|
|
@@ -751670,7 +751824,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
751670
751824
|
pendingHookMessages
|
|
751671
751825
|
}, renderAndRun);
|
|
751672
751826
|
}
|
|
751673
|
-
}).version("1.65.
|
|
751827
|
+
}).version("1.65.4 (UR-Nexus)", "-v, --version", "Output the version number");
|
|
751674
751828
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
751675
751829
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
751676
751830
|
if (canUserConfigureAdvisor()) {
|
|
@@ -752722,7 +752876,7 @@ if (false) {}
|
|
|
752722
752876
|
async function main2() {
|
|
752723
752877
|
const args = process.argv.slice(2);
|
|
752724
752878
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
752725
|
-
console.log(`${"1.65.
|
|
752879
|
+
console.log(`${"1.65.4"} (UR-Nexus)`);
|
|
752726
752880
|
return;
|
|
752727
752881
|
}
|
|
752728
752882
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
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.65.
|
|
48
|
+
<p class="eyebrow">Version 1.65.4</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.65.
|
|
5
|
+
"version": "1.65.4",
|
|
6
6
|
"publisher": "ur-nexus",
|
|
7
7
|
"engines": {
|
|
8
8
|
"vscode": "^1.92.0"
|
package/package.json
CHANGED