ur-agent 1.80.6 → 1.80.7
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 +18 -0
- package/dist/cli.js +131 -107
- package/docs/AGENT_FEATURES.md +7 -0
- package/docs/CONFIGURATION.md +5 -1
- package/docs/TROUBLESHOOTING.md +21 -4
- package/docs/USAGE.md +6 -5
- package/docs/VALIDATION.md +23 -8
- package/documentation/index.html +1 -1
- package/extensions/jetbrains-ur/build.gradle.kts +1 -1
- package/extensions/vscode-ur-inline-diffs/package.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.80.7
|
|
4
|
+
|
|
5
|
+
- Fixed Ollama runs stopping with `response returned unavailable tool
|
|
6
|
+
"WebSearch"`. Syntactically valid but unavailable native and text-form calls
|
|
7
|
+
now reach UR's guarded executor, which returns a recoverable result without
|
|
8
|
+
executing the tool and tells the model to use an available alternative or
|
|
9
|
+
return useful partial work. Identical retries are bounded; malformed names
|
|
10
|
+
and arguments still fail closed.
|
|
11
|
+
- Extended task-free read-only research beyond Plan Mode. The main session may
|
|
12
|
+
launch UR's exact shipped `Explore` and `Plan` agents before tasks exist in
|
|
13
|
+
every permission mode, and those workers are forced into plan permissions
|
|
14
|
+
even when the parent uses Accept Edits or Approve All. Custom, write-capable,
|
|
15
|
+
nested, team, and worktree agents still require an actionable parent task.
|
|
16
|
+
- Removed the global deprecated-alias fallback from tool execution. Aliases
|
|
17
|
+
continue to work for tools present in the active profile, but can no longer
|
|
18
|
+
revive a tool deliberately omitted from a worker. Approve All itself remains
|
|
19
|
+
supported and unchanged.
|
|
20
|
+
|
|
3
21
|
## 1.80.6
|
|
4
22
|
|
|
5
23
|
- Fixed Plan Mode's failed-first research delegation. UR's shipped read-only
|
package/dist/cli.js
CHANGED
|
@@ -88903,6 +88903,9 @@ function parseTextToolCalls(text, options = {}) {
|
|
|
88903
88903
|
return call;
|
|
88904
88904
|
const name = reconcileToolName(call.name, options.availableToolNames);
|
|
88905
88905
|
if (!hasTool(options.availableToolNames, name)) {
|
|
88906
|
+
if (options.preserveUnavailableToolCalls) {
|
|
88907
|
+
return name === call.name ? call : { ...call, name };
|
|
88908
|
+
}
|
|
88906
88909
|
throw new KimiToolCallParseError(`Kimi returned unavailable tool "${name}"`);
|
|
88907
88910
|
}
|
|
88908
88911
|
return name === call.name ? call : { ...call, name };
|
|
@@ -90333,7 +90336,8 @@ function ollamaResponseToURHQMessage(response, params, textToolFallbackAllowed)
|
|
|
90333
90336
|
const rawText = response.message?.content ?? "";
|
|
90334
90337
|
const parsedText = textToolFallbackAllowed ? parseTextToolCalls(rawText, {
|
|
90335
90338
|
availableToolNames,
|
|
90336
|
-
parseBareJsonToolCalls: true
|
|
90339
|
+
parseBareJsonToolCalls: true,
|
|
90340
|
+
preserveUnavailableToolCalls: true
|
|
90337
90341
|
}) : { text: rawText, toolCalls: [] };
|
|
90338
90342
|
const text = parsedText.text;
|
|
90339
90343
|
const textToolCalls = [...parsedText.toolCalls];
|
|
@@ -90423,7 +90427,7 @@ function normalizeOllamaToolUses(structured, textCalls, availableToolNames, cont
|
|
|
90423
90427
|
}
|
|
90424
90428
|
const name = reconcileToolName(rawName, availableToolNames);
|
|
90425
90429
|
if (!availableToolNames.has(name)) {
|
|
90426
|
-
|
|
90430
|
+
logForDebugging(`${context} preserved unavailable tool "${name}" for guarded rejection`, { level: "warn" });
|
|
90427
90431
|
}
|
|
90428
90432
|
const key = `${name}\x00${toolArgsKey(input)}`;
|
|
90429
90433
|
if (seen.has(key)) {
|
|
@@ -107784,7 +107788,7 @@ var init_auth = __esm(() => {
|
|
|
107784
107788
|
|
|
107785
107789
|
// src/utils/userAgent.ts
|
|
107786
107790
|
function getURCodeUserAgent() {
|
|
107787
|
-
return `ur/${"1.80.
|
|
107791
|
+
return `ur/${"1.80.7"}`;
|
|
107788
107792
|
}
|
|
107789
107793
|
|
|
107790
107794
|
// src/utils/workloadContext.ts
|
|
@@ -107806,7 +107810,7 @@ function getUserAgent() {
|
|
|
107806
107810
|
const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
|
|
107807
107811
|
const workload = getWorkload();
|
|
107808
107812
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
107809
|
-
return `ur-cli/${"1.80.
|
|
107813
|
+
return `ur-cli/${"1.80.7"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
107810
107814
|
}
|
|
107811
107815
|
function getMCPUserAgent() {
|
|
107812
107816
|
const parts = [];
|
|
@@ -107820,7 +107824,7 @@ function getMCPUserAgent() {
|
|
|
107820
107824
|
parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
|
|
107821
107825
|
}
|
|
107822
107826
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
107823
|
-
return `ur/${"1.80.
|
|
107827
|
+
return `ur/${"1.80.7"}${suffix}`;
|
|
107824
107828
|
}
|
|
107825
107829
|
function getWebFetchUserAgent() {
|
|
107826
107830
|
return `UR-User (${getURCodeUserAgent()})`;
|
|
@@ -107958,7 +107962,7 @@ var init_user = __esm(() => {
|
|
|
107958
107962
|
deviceId,
|
|
107959
107963
|
sessionId: getSessionId(),
|
|
107960
107964
|
email: getEmail(),
|
|
107961
|
-
appVersion: "1.80.
|
|
107965
|
+
appVersion: "1.80.7",
|
|
107962
107966
|
platform: getHostPlatformForAnalytics(),
|
|
107963
107967
|
organizationUuid,
|
|
107964
107968
|
accountUuid,
|
|
@@ -115845,7 +115849,7 @@ var init_metadata = __esm(() => {
|
|
|
115845
115849
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
115846
115850
|
WHITESPACE_REGEX = /\s+/;
|
|
115847
115851
|
getVersionBase = memoize_default(() => {
|
|
115848
|
-
const match = "1.80.
|
|
115852
|
+
const match = "1.80.7".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
115849
115853
|
return match ? match[0] : undefined;
|
|
115850
115854
|
});
|
|
115851
115855
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -115885,7 +115889,7 @@ var init_metadata = __esm(() => {
|
|
|
115885
115889
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
115886
115890
|
isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
|
|
115887
115891
|
isURAiAuth: isURAISubscriber(),
|
|
115888
|
-
version: "1.80.
|
|
115892
|
+
version: "1.80.7",
|
|
115889
115893
|
versionBase: getVersionBase(),
|
|
115890
115894
|
buildTime: "",
|
|
115891
115895
|
deploymentEnvironment: env2.detectDeploymentEnvironment(),
|
|
@@ -116555,7 +116559,7 @@ function initialize1PEventLogging() {
|
|
|
116555
116559
|
const platform2 = getPlatform();
|
|
116556
116560
|
const attributes = {
|
|
116557
116561
|
[import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
|
|
116558
|
-
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.
|
|
116562
|
+
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.7"
|
|
116559
116563
|
};
|
|
116560
116564
|
if (platform2 === "wsl") {
|
|
116561
116565
|
const wslVersion = getWslVersion();
|
|
@@ -116583,7 +116587,7 @@ function initialize1PEventLogging() {
|
|
|
116583
116587
|
})
|
|
116584
116588
|
]
|
|
116585
116589
|
});
|
|
116586
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.
|
|
116590
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.7");
|
|
116587
116591
|
}
|
|
116588
116592
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
116589
116593
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -126546,7 +126550,7 @@ function formatA2AAgentCard(options = {}, pretty = true) {
|
|
|
126546
126550
|
function formatA2AV1AgentCard(options = {}, pretty = true) {
|
|
126547
126551
|
return JSON.stringify(buildA2AV1AgentCard(options), null, pretty ? 2 : 0);
|
|
126548
126552
|
}
|
|
126549
|
-
var urVersion = "1.80.
|
|
126553
|
+
var urVersion = "1.80.7", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
|
|
126550
126554
|
var init_trends = __esm(() => {
|
|
126551
126555
|
init_a2aCardSignature();
|
|
126552
126556
|
coverage = [
|
|
@@ -129436,7 +129440,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
129436
129440
|
if (!isAttributionHeaderEnabled()) {
|
|
129437
129441
|
return "";
|
|
129438
129442
|
}
|
|
129439
|
-
const version2 = `${"1.80.
|
|
129443
|
+
const version2 = `${"1.80.7"}.${fingerprint}`;
|
|
129440
129444
|
const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
|
|
129441
129445
|
const cch = "";
|
|
129442
129446
|
const workload = getWorkload();
|
|
@@ -184632,7 +184636,7 @@ var init_projectSafety = __esm(() => {
|
|
|
184632
184636
|
function getInstruments() {
|
|
184633
184637
|
if (instruments)
|
|
184634
184638
|
return instruments;
|
|
184635
|
-
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.
|
|
184639
|
+
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.80.7");
|
|
184636
184640
|
instruments = {
|
|
184637
184641
|
operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
|
|
184638
184642
|
description: "GenAI operation duration.",
|
|
@@ -184730,7 +184734,7 @@ function genAiAgentAttributes() {
|
|
|
184730
184734
|
"gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
|
|
184731
184735
|
"gen_ai.provider.name": "ur",
|
|
184732
184736
|
"gen_ai.agent.name": "UR-Nexus",
|
|
184733
|
-
"gen_ai.agent.version": "1.80.
|
|
184737
|
+
"gen_ai.agent.version": "1.80.7"
|
|
184734
184738
|
};
|
|
184735
184739
|
}
|
|
184736
184740
|
function genAiWorkflowAttributes(workflowName, workflowRunId) {
|
|
@@ -184751,7 +184755,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
|
|
|
184751
184755
|
function startGenAiWorkflowSpan(workflowName, workflowRunId) {
|
|
184752
184756
|
const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
|
|
184753
184757
|
const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
|
|
184754
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.
|
|
184758
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.7").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
184755
184759
|
}
|
|
184756
184760
|
function endGenAiWorkflowSpan(span, options2 = {}) {
|
|
184757
184761
|
try {
|
|
@@ -184789,7 +184793,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
|
|
|
184789
184793
|
if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
|
|
184790
184794
|
attributes["gen_ai.memory.record.count"] = options2.recordCount;
|
|
184791
184795
|
}
|
|
184792
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.
|
|
184796
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.7").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
184793
184797
|
}
|
|
184794
184798
|
function endGenAiMemorySpan(span, options2 = {}) {
|
|
184795
184799
|
try {
|
|
@@ -278504,7 +278508,7 @@ function getTelemetryAttributes() {
|
|
|
278504
278508
|
attributes["session.id"] = sessionId;
|
|
278505
278509
|
}
|
|
278506
278510
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
278507
|
-
attributes["app.version"] = "1.80.
|
|
278511
|
+
attributes["app.version"] = "1.80.7";
|
|
278508
278512
|
}
|
|
278509
278513
|
const oauthAccount = getOauthAccountInfo();
|
|
278510
278514
|
if (oauthAccount) {
|
|
@@ -319495,7 +319499,7 @@ function getInstallationEnv() {
|
|
|
319495
319499
|
return;
|
|
319496
319500
|
}
|
|
319497
319501
|
function getURCodeVersion() {
|
|
319498
|
-
return "1.80.
|
|
319502
|
+
return "1.80.7";
|
|
319499
319503
|
}
|
|
319500
319504
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
319501
319505
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -326865,7 +326869,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
326865
326869
|
const client2 = new Client({
|
|
326866
326870
|
name: "ur",
|
|
326867
326871
|
title: "UR",
|
|
326868
|
-
version: "1.80.
|
|
326872
|
+
version: "1.80.7",
|
|
326869
326873
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
326870
326874
|
websiteUrl: PRODUCT_URL
|
|
326871
326875
|
}, {
|
|
@@ -327226,7 +327230,7 @@ var init_client5 = __esm(() => {
|
|
|
327226
327230
|
const client2 = new Client({
|
|
327227
327231
|
name: "ur",
|
|
327228
327232
|
title: "UR",
|
|
327229
|
-
version: "1.80.
|
|
327233
|
+
version: "1.80.7",
|
|
327230
327234
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
327231
327235
|
websiteUrl: PRODUCT_URL
|
|
327232
327236
|
}, {
|
|
@@ -329242,6 +329246,25 @@ var init_agentToolUtils = __esm(() => {
|
|
|
329242
329246
|
}));
|
|
329243
329247
|
});
|
|
329244
329248
|
|
|
329249
|
+
// src/tools/AgentTool/readOnlyAgents.ts
|
|
329250
|
+
function isShippedReadOnlyAgentDefinition(agent) {
|
|
329251
|
+
return SHIPPED_READ_ONLY_AGENT_TYPES.has(agent.agentType) && agent.source === "built-in" && agent.permissionMode === "plan";
|
|
329252
|
+
}
|
|
329253
|
+
function shouldApplyAgentDefinitionPermissionMode(agent, parentMode, transcriptClassifierEnabled) {
|
|
329254
|
+
if (!agent.permissionMode)
|
|
329255
|
+
return false;
|
|
329256
|
+
if (isShippedReadOnlyAgentDefinition(agent))
|
|
329257
|
+
return true;
|
|
329258
|
+
return parentMode !== "bypassPermissions" && parentMode !== "acceptEdits" && !(transcriptClassifierEnabled && parentMode === "auto");
|
|
329259
|
+
}
|
|
329260
|
+
var SHIPPED_READ_ONLY_AGENT_TYPES;
|
|
329261
|
+
var init_readOnlyAgents = __esm(() => {
|
|
329262
|
+
SHIPPED_READ_ONLY_AGENT_TYPES = new Set([
|
|
329263
|
+
"Explore",
|
|
329264
|
+
"Plan"
|
|
329265
|
+
]);
|
|
329266
|
+
});
|
|
329267
|
+
|
|
329245
329268
|
// src/components/AgentProgressLine.tsx
|
|
329246
329269
|
function getAgentProgressStatus({
|
|
329247
329270
|
isResolved,
|
|
@@ -339964,7 +339987,7 @@ async function createRuntime() {
|
|
|
339964
339987
|
bootstrapTelemetry();
|
|
339965
339988
|
const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
|
|
339966
339989
|
[import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
|
|
339967
|
-
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.
|
|
339990
|
+
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.7"
|
|
339968
339991
|
}));
|
|
339969
339992
|
const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
|
|
339970
339993
|
resource,
|
|
@@ -339997,11 +340020,11 @@ async function createRuntime() {
|
|
|
339997
340020
|
setMeterProvider(meterProvider);
|
|
339998
340021
|
setLoggerProvider(loggerProvider);
|
|
339999
340022
|
if (meterProvider) {
|
|
340000
|
-
const meter = meterProvider.getMeter("ur-agent", "1.80.
|
|
340023
|
+
const meter = meterProvider.getMeter("ur-agent", "1.80.7");
|
|
340001
340024
|
setMeter(meter, (name, options2) => meter.createCounter(name, options2));
|
|
340002
340025
|
}
|
|
340003
340026
|
if (loggerProvider) {
|
|
340004
|
-
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.
|
|
340027
|
+
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.7"));
|
|
340005
340028
|
}
|
|
340006
340029
|
if (!cleanupRegistered3) {
|
|
340007
340030
|
cleanupRegistered3 = true;
|
|
@@ -340663,9 +340686,9 @@ async function assertMinVersion() {
|
|
|
340663
340686
|
if (false) {}
|
|
340664
340687
|
try {
|
|
340665
340688
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
340666
|
-
if (versionConfig.minVersion && lt("1.80.
|
|
340689
|
+
if (versionConfig.minVersion && lt("1.80.7", versionConfig.minVersion)) {
|
|
340667
340690
|
console.error(`
|
|
340668
|
-
It looks like your version of UR (${"1.80.
|
|
340691
|
+
It looks like your version of UR (${"1.80.7"}) needs an update.
|
|
340669
340692
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
340670
340693
|
|
|
340671
340694
|
To update, please run:
|
|
@@ -340881,7 +340904,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
340881
340904
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
340882
340905
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
340883
340906
|
pid: process.pid,
|
|
340884
|
-
currentVersion: "1.80.
|
|
340907
|
+
currentVersion: "1.80.7"
|
|
340885
340908
|
});
|
|
340886
340909
|
return "in_progress";
|
|
340887
340910
|
}
|
|
@@ -340890,7 +340913,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
340890
340913
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
340891
340914
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
340892
340915
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
340893
|
-
currentVersion: "1.80.
|
|
340916
|
+
currentVersion: "1.80.7"
|
|
340894
340917
|
});
|
|
340895
340918
|
console.error(`
|
|
340896
340919
|
Error: Windows NPM detected in WSL
|
|
@@ -341425,7 +341448,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
341425
341448
|
}
|
|
341426
341449
|
async function getDoctorDiagnostic() {
|
|
341427
341450
|
const installationType = await getCurrentInstallationType();
|
|
341428
|
-
const version2 = typeof MACRO !== "undefined" ? "1.80.
|
|
341451
|
+
const version2 = typeof MACRO !== "undefined" ? "1.80.7" : "unknown";
|
|
341429
341452
|
const installationPath = await getInstallationPath();
|
|
341430
341453
|
const invokedBinary = getInvokedBinary();
|
|
341431
341454
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -342360,8 +342383,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
342360
342383
|
const maxVersion = await getMaxVersion();
|
|
342361
342384
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
342362
342385
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
342363
|
-
if (gte("1.80.
|
|
342364
|
-
logForDebugging(`Native installer: current version ${"1.80.
|
|
342386
|
+
if (gte("1.80.7", maxVersion)) {
|
|
342387
|
+
logForDebugging(`Native installer: current version ${"1.80.7"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
342365
342388
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
342366
342389
|
latency_ms: Date.now() - startTime,
|
|
342367
342390
|
max_version: maxVersion,
|
|
@@ -342372,7 +342395,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
342372
342395
|
version2 = maxVersion;
|
|
342373
342396
|
}
|
|
342374
342397
|
}
|
|
342375
|
-
if (!forceReinstall && version2 === "1.80.
|
|
342398
|
+
if (!forceReinstall && version2 === "1.80.7" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
342376
342399
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
342377
342400
|
logEvent("tengu_native_update_complete", {
|
|
342378
342401
|
latency_ms: Date.now() - startTime,
|
|
@@ -363462,7 +363485,7 @@ async function* runAgent({
|
|
|
363462
363485
|
const agentGetAppState = () => {
|
|
363463
363486
|
const state = toolUseContext.getAppState();
|
|
363464
363487
|
let toolPermissionContext = state.toolPermissionContext;
|
|
363465
|
-
if (agentPermissionMode &&
|
|
363488
|
+
if (agentPermissionMode && shouldApplyAgentDefinitionPermissionMode(agentDefinition, state.toolPermissionContext.mode, false)) {
|
|
363466
363489
|
toolPermissionContext = {
|
|
363467
363490
|
...toolPermissionContext,
|
|
363468
363491
|
mode: agentPermissionMode
|
|
@@ -363755,6 +363778,7 @@ var init_runAgent = __esm(() => {
|
|
|
363755
363778
|
init_uuid();
|
|
363756
363779
|
init_agentToolUtils();
|
|
363757
363780
|
init_loadAgentsDir();
|
|
363781
|
+
init_readOnlyAgents();
|
|
363758
363782
|
});
|
|
363759
363783
|
|
|
363760
363784
|
// src/services/AgentSummary/agentSummary.ts
|
|
@@ -396228,7 +396252,7 @@ function checkTaskListGate(input) {
|
|
|
396228
396252
|
return { allowed: true };
|
|
396229
396253
|
if (input.isPlanningArtifact === true)
|
|
396230
396254
|
return { allowed: true };
|
|
396231
|
-
if (input.
|
|
396255
|
+
if (input.isReadOnlyBuiltInDelegation === true)
|
|
396232
396256
|
return { allowed: true };
|
|
396233
396257
|
const isMutating = input.isMutating ?? isMutatingTool2(input.toolName);
|
|
396234
396258
|
if (!isMutating)
|
|
@@ -413027,7 +413051,7 @@ function isAnyTracingEnabled() {
|
|
|
413027
413051
|
return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
|
|
413028
413052
|
}
|
|
413029
413053
|
function getTracer() {
|
|
413030
|
-
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.
|
|
413054
|
+
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.7");
|
|
413031
413055
|
}
|
|
413032
413056
|
function createSpanAttributes(spanType, customAttributes = {}) {
|
|
413033
413057
|
const baseAttributes = getTelemetryAttributes();
|
|
@@ -414482,15 +414506,15 @@ function isCurrentPlanFileMutation(toolName, input, context5) {
|
|
|
414482
414506
|
return false;
|
|
414483
414507
|
}
|
|
414484
414508
|
}
|
|
414485
|
-
function
|
|
414486
|
-
if (context5.agentId ||
|
|
414509
|
+
function isReadOnlyBuiltInDelegation(toolName, input, context5) {
|
|
414510
|
+
if (context5.agentId || toolName !== AGENT_TOOL_NAME && toolName !== LEGACY_AGENT_TOOL_NAME || !input || typeof input !== "object" || Array.isArray(input)) {
|
|
414487
414511
|
return false;
|
|
414488
414512
|
}
|
|
414489
414513
|
const delegation = input;
|
|
414490
|
-
if (typeof delegation.subagent_type !== "string" ||
|
|
414514
|
+
if (typeof delegation.subagent_type !== "string" || delegation.name !== undefined || delegation.team_name !== undefined || delegation.isolation !== undefined) {
|
|
414491
414515
|
return false;
|
|
414492
414516
|
}
|
|
414493
|
-
return context5.options.agentDefinitions.activeAgents.some((agent) => agent.agentType === delegation.subagent_type && agent
|
|
414517
|
+
return context5.options.agentDefinitions.activeAgents.some((agent) => agent.agentType === delegation.subagent_type && isShippedReadOnlyAgentDefinition(agent));
|
|
414494
414518
|
}
|
|
414495
414519
|
function getStopHookInfo(attachment) {
|
|
414496
414520
|
if (typeof attachment !== "object" || attachment === null || !("command" in attachment) || typeof attachment.command !== "string" || !("durationMs" in attachment) || typeof attachment.durationMs !== "number") {
|
|
@@ -414604,13 +414628,7 @@ function getMcpServerBaseUrlFromToolName(toolName, mcpClients) {
|
|
|
414604
414628
|
}
|
|
414605
414629
|
async function* runToolUse(toolUse, assistantMessage, canUseTool, toolUseContext) {
|
|
414606
414630
|
const toolName = toolUse.name;
|
|
414607
|
-
|
|
414608
|
-
if (!tool) {
|
|
414609
|
-
const fallbackTool = findToolByName(getAllBaseTools(), toolName);
|
|
414610
|
-
if (fallbackTool && fallbackTool.aliases?.includes(toolName)) {
|
|
414611
|
-
tool = fallbackTool;
|
|
414612
|
-
}
|
|
414613
|
-
}
|
|
414631
|
+
const tool = findToolByName(toolUseContext.options.tools, toolName);
|
|
414614
414632
|
const messageId = assistantMessage.message?.id;
|
|
414615
414633
|
if (typeof messageId !== "string" || messageId.length === 0) {
|
|
414616
414634
|
throw new Error(`Cannot execute tool_use ${toolUse.id}: assistant message has no id`);
|
|
@@ -414620,7 +414638,7 @@ async function* runToolUse(toolUse, assistantMessage, canUseTool, toolUseContext
|
|
|
414620
414638
|
const mcpServerBaseUrl = getMcpServerBaseUrlFromToolName(toolName, toolUseContext.options.mcpClients);
|
|
414621
414639
|
if (!tool) {
|
|
414622
414640
|
const callSig = callSignature(toolName, toolUse.input, repeatedFailureScope(toolUseContext, messageId));
|
|
414623
|
-
const repeat2 = checkRepeatedFailure(callSig);
|
|
414641
|
+
const repeat2 = checkRepeatedFailure(callSig, UNKNOWN_TOOL_REPEAT_POLICY);
|
|
414624
414642
|
if (repeat2.action === "abort") {
|
|
414625
414643
|
throw new RepeatedToolFailureAbort(`Repeated tool failure: ${repeat2.reason}`);
|
|
414626
414644
|
}
|
|
@@ -414662,17 +414680,18 @@ async function* runToolUse(toolUse, assistantMessage, canUseTool, toolUseContext
|
|
|
414662
414680
|
},
|
|
414663
414681
|
...mcpToolDetailsForAnalytics(toolName, mcpServerType, mcpServerBaseUrl)
|
|
414664
414682
|
});
|
|
414683
|
+
const unavailableMessage = `Tool "${toolName}" is not available in this agent's active tool profile. Do not retry this tool unchanged. Continue with an available tool, or return the useful partial result so the parent agent can proceed.`;
|
|
414665
414684
|
yield {
|
|
414666
414685
|
message: createUserMessage({
|
|
414667
414686
|
content: [
|
|
414668
414687
|
{
|
|
414669
414688
|
type: "tool_result",
|
|
414670
|
-
content: `<tool_use_error>
|
|
414689
|
+
content: `<tool_use_error>UnavailableTool: ${unavailableMessage}</tool_use_error>`,
|
|
414671
414690
|
is_error: true,
|
|
414672
414691
|
tool_use_id: toolUse.id
|
|
414673
414692
|
}
|
|
414674
414693
|
],
|
|
414675
|
-
toolUseResult: `
|
|
414694
|
+
toolUseResult: `UnavailableTool: ${unavailableMessage}`,
|
|
414676
414695
|
sourceToolAssistantUUID: assistantMessage.uuid
|
|
414677
414696
|
})
|
|
414678
414697
|
};
|
|
@@ -414957,7 +414976,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
414957
414976
|
requiresTaskList: taskListRun?.requiresTaskList,
|
|
414958
414977
|
requirementReason: taskListRun?.requirementReason,
|
|
414959
414978
|
isPlanningArtifact: isCurrentPlanFileMutation(tool.name, parsedInput.data, toolUseContext),
|
|
414960
|
-
|
|
414979
|
+
isReadOnlyBuiltInDelegation: isReadOnlyBuiltInDelegation(tool.name, parsedInput.data, toolUseContext),
|
|
414961
414980
|
taskListWriterAvailable: toolUseContext.options.tools.some((candidate) => candidate.name === "TaskCreate")
|
|
414962
414981
|
});
|
|
414963
414982
|
if (gate.allowed === false) {
|
|
@@ -415319,7 +415338,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
415319
415338
|
requiresTaskList: taskListRun?.requiresTaskList,
|
|
415320
415339
|
requirementReason: taskListRun?.requirementReason,
|
|
415321
415340
|
isPlanningArtifact: isCurrentPlanFileMutation(tool.name, finalParsedInput.data, toolUseContext),
|
|
415322
|
-
|
|
415341
|
+
isReadOnlyBuiltInDelegation: isReadOnlyBuiltInDelegation(tool.name, finalParsedInput.data, toolUseContext),
|
|
415323
415342
|
taskListWriterAvailable: toolUseContext.options.tools.some((candidate) => candidate.name === "TaskCreate")
|
|
415324
415343
|
});
|
|
415325
415344
|
if (finalGate.allowed === false) {
|
|
@@ -415729,7 +415748,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
415729
415748
|
}
|
|
415730
415749
|
}
|
|
415731
415750
|
}
|
|
415732
|
-
var
|
|
415751
|
+
var UNKNOWN_TOOL_REPEAT_POLICY, HOOK_TIMING_DISPLAY_THRESHOLD_MS2 = 500, SLOW_PHASE_LOG_THRESHOLD_MS = 2000;
|
|
415733
415752
|
var init_toolExecution = __esm(() => {
|
|
415734
415753
|
init_analytics();
|
|
415735
415754
|
init_metadata();
|
|
@@ -415741,11 +415760,11 @@ var init_toolExecution = __esm(() => {
|
|
|
415741
415760
|
init_prompt();
|
|
415742
415761
|
init_bashPermissions();
|
|
415743
415762
|
init_constants2();
|
|
415763
|
+
init_readOnlyAgents();
|
|
415744
415764
|
init_prompt3();
|
|
415745
415765
|
init_prompt4();
|
|
415746
415766
|
init_gitOperationTracking();
|
|
415747
415767
|
init_prompt8();
|
|
415748
|
-
init_tools2();
|
|
415749
415768
|
init_attachments2();
|
|
415750
415769
|
init_debug();
|
|
415751
415770
|
init_errors();
|
|
@@ -415771,7 +415790,11 @@ var init_toolExecution = __esm(() => {
|
|
|
415771
415790
|
init_mcpStringUtils();
|
|
415772
415791
|
init_utils3();
|
|
415773
415792
|
init_toolHooks();
|
|
415774
|
-
|
|
415793
|
+
UNKNOWN_TOOL_REPEAT_POLICY = {
|
|
415794
|
+
enabled: true,
|
|
415795
|
+
limit: 1,
|
|
415796
|
+
abortAfter: 3
|
|
415797
|
+
};
|
|
415775
415798
|
});
|
|
415776
415799
|
|
|
415777
415800
|
// src/services/tools/StreamingToolExecutor.ts
|
|
@@ -443147,7 +443170,7 @@ function Feedback({
|
|
|
443147
443170
|
platform: env2.platform,
|
|
443148
443171
|
gitRepo: envInfo.isGit,
|
|
443149
443172
|
terminal: env2.terminal,
|
|
443150
|
-
version: "1.80.
|
|
443173
|
+
version: "1.80.7",
|
|
443151
443174
|
transcript: normalizeMessagesForAPI(messages),
|
|
443152
443175
|
errors: sanitizedErrors,
|
|
443153
443176
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -443339,7 +443362,7 @@ function Feedback({
|
|
|
443339
443362
|
", ",
|
|
443340
443363
|
env2.terminal,
|
|
443341
443364
|
", v",
|
|
443342
|
-
"1.80.
|
|
443365
|
+
"1.80.7"
|
|
443343
443366
|
]
|
|
443344
443367
|
}, undefined, true, undefined, this)
|
|
443345
443368
|
]
|
|
@@ -443445,7 +443468,7 @@ ${sanitizedDescription}
|
|
|
443445
443468
|
` + `**Environment Info**
|
|
443446
443469
|
` + `- Platform: ${env2.platform}
|
|
443447
443470
|
` + `- Terminal: ${env2.terminal}
|
|
443448
|
-
` + `- Version: ${"1.80.
|
|
443471
|
+
` + `- Version: ${"1.80.7"}
|
|
443449
443472
|
` + `- Feedback ID: ${feedbackId}
|
|
443450
443473
|
` + `
|
|
443451
443474
|
**Errors**
|
|
@@ -446555,7 +446578,7 @@ function buildPrimarySection() {
|
|
|
446555
446578
|
}, undefined, false, undefined, this);
|
|
446556
446579
|
return [{
|
|
446557
446580
|
label: "Version",
|
|
446558
|
-
value: "1.80.
|
|
446581
|
+
value: "1.80.7"
|
|
446559
446582
|
}, {
|
|
446560
446583
|
label: "Session name",
|
|
446561
446584
|
value: nameValue
|
|
@@ -449937,7 +449960,7 @@ function Config({
|
|
|
449937
449960
|
}
|
|
449938
449961
|
}, undefined, false, undefined, this)
|
|
449939
449962
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
449940
|
-
currentVersion: "1.80.
|
|
449963
|
+
currentVersion: "1.80.7",
|
|
449941
449964
|
onChoice: (choice) => {
|
|
449942
449965
|
setShowSubmenu(null);
|
|
449943
449966
|
setTabsHidden(false);
|
|
@@ -449949,7 +449972,7 @@ function Config({
|
|
|
449949
449972
|
autoUpdatesChannel: "stable"
|
|
449950
449973
|
};
|
|
449951
449974
|
if (choice === "stay") {
|
|
449952
|
-
newSettings.minimumVersion = "1.80.
|
|
449975
|
+
newSettings.minimumVersion = "1.80.7";
|
|
449953
449976
|
}
|
|
449954
449977
|
updateSettingsForSource("userSettings", newSettings);
|
|
449955
449978
|
setSettingsData((prev_27) => ({
|
|
@@ -458258,7 +458281,7 @@ function HelpV2(t0) {
|
|
|
458258
458281
|
let t6;
|
|
458259
458282
|
if ($2[31] !== tabs) {
|
|
458260
458283
|
t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
|
|
458261
|
-
title: `UR v${"1.80.
|
|
458284
|
+
title: `UR v${"1.80.7"}`,
|
|
458262
458285
|
color: "professionalBlue",
|
|
458263
458286
|
defaultTab: "general",
|
|
458264
458287
|
children: tabs
|
|
@@ -459191,7 +459214,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
|
|
|
459191
459214
|
async function handleInitialize(options2) {
|
|
459192
459215
|
return {
|
|
459193
459216
|
name: "UR",
|
|
459194
|
-
version: "1.80.
|
|
459217
|
+
version: "1.80.7",
|
|
459195
459218
|
protocolVersion: "0.1.0",
|
|
459196
459219
|
workspaceRoot: options2.cwd,
|
|
459197
459220
|
capabilities: {
|
|
@@ -476299,7 +476322,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
476299
476322
|
return [];
|
|
476300
476323
|
}
|
|
476301
476324
|
}
|
|
476302
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.
|
|
476325
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.7") {
|
|
476303
476326
|
if (process.env.USER_TYPE === "ant") {
|
|
476304
476327
|
const changelog = "";
|
|
476305
476328
|
if (changelog) {
|
|
@@ -476326,7 +476349,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.6")
|
|
|
476326
476349
|
releaseNotes
|
|
476327
476350
|
};
|
|
476328
476351
|
}
|
|
476329
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.
|
|
476352
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.7") {
|
|
476330
476353
|
if (process.env.USER_TYPE === "ant") {
|
|
476331
476354
|
const changelog = "";
|
|
476332
476355
|
if (changelog) {
|
|
@@ -479231,7 +479254,7 @@ function getRecentActivitySync() {
|
|
|
479231
479254
|
return cachedActivity;
|
|
479232
479255
|
}
|
|
479233
479256
|
function getLogoDisplayData() {
|
|
479234
|
-
const version2 = process.env.DEMO_VERSION ?? "1.80.
|
|
479257
|
+
const version2 = process.env.DEMO_VERSION ?? "1.80.7";
|
|
479235
479258
|
const serverUrl = getDirectConnectServerUrl();
|
|
479236
479259
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
|
|
479237
479260
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -480099,7 +480122,7 @@ function LogoV2() {
|
|
|
480099
480122
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
480100
480123
|
t2 = () => {
|
|
480101
480124
|
const currentConfig = getGlobalConfig();
|
|
480102
|
-
if (currentConfig.lastReleaseNotesSeen === "1.80.
|
|
480125
|
+
if (currentConfig.lastReleaseNotesSeen === "1.80.7") {
|
|
480103
480126
|
return;
|
|
480104
480127
|
}
|
|
480105
480128
|
saveGlobalConfig(_temp325);
|
|
@@ -480784,12 +480807,12 @@ function LogoV2() {
|
|
|
480784
480807
|
return t41;
|
|
480785
480808
|
}
|
|
480786
480809
|
function _temp325(current) {
|
|
480787
|
-
if (current.lastReleaseNotesSeen === "1.80.
|
|
480810
|
+
if (current.lastReleaseNotesSeen === "1.80.7") {
|
|
480788
480811
|
return current;
|
|
480789
480812
|
}
|
|
480790
480813
|
return {
|
|
480791
480814
|
...current,
|
|
480792
|
-
lastReleaseNotesSeen: "1.80.
|
|
480815
|
+
lastReleaseNotesSeen: "1.80.7"
|
|
480793
480816
|
};
|
|
480794
480817
|
}
|
|
480795
480818
|
function _temp241(s_0) {
|
|
@@ -496881,7 +496904,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
|
|
|
496881
496904
|
if (spec.name !== specName) {
|
|
496882
496905
|
throw new Error("Agentic CI workflow spec name does not match");
|
|
496883
496906
|
}
|
|
496884
|
-
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.
|
|
496907
|
+
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.7" : "1.80.7");
|
|
496885
496908
|
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
|
|
496886
496909
|
throw new Error("invalid ur-agent package version");
|
|
496887
496910
|
}
|
|
@@ -497874,7 +497897,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
|
|
|
497874
497897
|
path: ".github/workflows/ur.yml",
|
|
497875
497898
|
root: "project",
|
|
497876
497899
|
content: compileAgenticCiWorkflow("default", {
|
|
497877
|
-
packageVersion: typeof MACRO !== "undefined" ? "1.80.
|
|
497900
|
+
packageVersion: typeof MACRO !== "undefined" ? "1.80.7" : "1.80.7"
|
|
497878
497901
|
})
|
|
497879
497902
|
},
|
|
497880
497903
|
{
|
|
@@ -497937,7 +497960,7 @@ function value(tokens, flag) {
|
|
|
497937
497960
|
return index2 >= 0 ? tokens[index2 + 1] : undefined;
|
|
497938
497961
|
}
|
|
497939
497962
|
function cliVersion() {
|
|
497940
|
-
return typeof MACRO !== "undefined" ? "1.80.
|
|
497963
|
+
return typeof MACRO !== "undefined" ? "1.80.7" : "1.80.7";
|
|
497941
497964
|
}
|
|
497942
497965
|
function workflowPath(cwd2) {
|
|
497943
497966
|
return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
|
|
@@ -503793,7 +503816,7 @@ function createAcpStdioApp(deps) {
|
|
|
503793
503816
|
}
|
|
503794
503817
|
},
|
|
503795
503818
|
authMethods: [],
|
|
503796
|
-
agentInfo: { name: "UR-Nexus", version: "1.80.
|
|
503819
|
+
agentInfo: { name: "UR-Nexus", version: "1.80.7" }
|
|
503797
503820
|
})).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
|
|
503798
503821
|
const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
|
|
503799
503822
|
await runtime2.announce({
|
|
@@ -503890,7 +503913,7 @@ function createAcpStdioAgent(deps) {
|
|
|
503890
503913
|
}
|
|
503891
503914
|
},
|
|
503892
503915
|
authMethods: [],
|
|
503893
|
-
agentInfo: { name: "UR-Nexus", version: "1.80.
|
|
503916
|
+
agentInfo: { name: "UR-Nexus", version: "1.80.7" }
|
|
503894
503917
|
});
|
|
503895
503918
|
return;
|
|
503896
503919
|
case "authenticate":
|
|
@@ -715116,7 +715139,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
715116
715139
|
smapsRollup,
|
|
715117
715140
|
platform: process.platform,
|
|
715118
715141
|
nodeVersion: process.version,
|
|
715119
|
-
ccVersion: "1.80.
|
|
715142
|
+
ccVersion: "1.80.7"
|
|
715120
715143
|
};
|
|
715121
715144
|
}
|
|
715122
715145
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -715705,7 +715728,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
715705
715728
|
var call154 = async () => {
|
|
715706
715729
|
return {
|
|
715707
715730
|
type: "text",
|
|
715708
|
-
value: "1.80.
|
|
715731
|
+
value: "1.80.7"
|
|
715709
715732
|
};
|
|
715710
715733
|
}, version2, version_default;
|
|
715711
715734
|
var init_version = __esm(() => {
|
|
@@ -726948,7 +726971,7 @@ function generateHtmlReport(data, insights) {
|
|
|
726948
726971
|
</html>`;
|
|
726949
726972
|
}
|
|
726950
726973
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
726951
|
-
const version3 = typeof MACRO !== "undefined" ? "1.80.
|
|
726974
|
+
const version3 = typeof MACRO !== "undefined" ? "1.80.7" : "unknown";
|
|
726952
726975
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
726953
726976
|
const facets_summary = {
|
|
726954
726977
|
total: facets.size,
|
|
@@ -731261,7 +731284,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
731261
731284
|
init_settings2();
|
|
731262
731285
|
init_slowOperations();
|
|
731263
731286
|
init_uuid();
|
|
731264
|
-
VERSION7 = typeof MACRO !== "undefined" ? "1.80.
|
|
731287
|
+
VERSION7 = typeof MACRO !== "undefined" ? "1.80.7" : "unknown";
|
|
731265
731288
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
731266
731289
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
731267
731290
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -732476,7 +732499,7 @@ var init_filesystem = __esm(() => {
|
|
|
732476
732499
|
});
|
|
732477
732500
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
732478
732501
|
const nonce = randomBytes24(16).toString("hex");
|
|
732479
|
-
return join243(getURTempDir(), "bundled-skills", "1.80.
|
|
732502
|
+
return join243(getURTempDir(), "bundled-skills", "1.80.7", nonce);
|
|
732480
732503
|
});
|
|
732481
732504
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
732482
732505
|
});
|
|
@@ -738086,6 +738109,7 @@ function getOllamaToolDisciplineSection() {
|
|
|
738086
738109
|
return null;
|
|
738087
738110
|
const items = [
|
|
738088
738111
|
`Use the native structured tool-call interface; never substitute prose, fenced code, XML, or printed arguments for a call. Only use a text fallback when the runtime explicitly says native tools are unavailable and supplies the exact fallback format.`,
|
|
738112
|
+
`Call only tools exposed in the active tool list. If a tool result says a tool is unavailable, do not retry it unchanged: use an available alternative or continue with the useful partial result.`,
|
|
738089
738113
|
`Use ${FILE_WRITE_TOOL_NAME} or ${FILE_EDIT_TOOL_NAME} for file changes. Batch independent calls in one turn (maximum 8); keep read\u2192decide\u2192write and other dependencies sequential.`,
|
|
738090
738114
|
`Treat each call as pending until its matching result arrives. Observe that result before continuing, and never claim a file change, command, test, or other action succeeded without a successful result.`,
|
|
738091
738115
|
`Never emit an empty turn: provide a real tool call, useful user-facing text, or both.`
|
|
@@ -738095,7 +738119,7 @@ function getOllamaToolDisciplineSection() {
|
|
|
738095
738119
|
}
|
|
738096
738120
|
function getAgentToolSection() {
|
|
738097
738121
|
const launch = isForkSubagentEnabled() ? `Calling ${AGENT_TOOL_NAME} without a subagent_type creates a fork, which runs in the background and keeps its raw tool output out of your context. **If you ARE the fork**, execute your bounded assignment directly; do not re-delegate.` : `Use ${AGENT_TOOL_NAME} with the specialized agent whose description best matches each bounded assignment.`;
|
|
738098
|
-
return `${launch} For a large request, first create a bounded task list, then delegate at most one ready independent branch per agent. Launch independent read-only research, audits, or exploration together. Shared-checkout writers, unknown scopes, dependencies, and overlapping file targets must run sequentially. Parallel writers require separate worktrees based on the exact clean starting revision; if the current required state is dirty or unsnapshotted, keep those writers serial in the shared checkout. Keep tiny dependent steps with the parent when delegation overhead is larger than the work. The parent owns task status, integration, and final verification: do not duplicate delegated work, do not mark a delegated task complete from a launch acknowledgement, and do not finish until the returned result and acceptance evidence have been checked.`;
|
|
738122
|
+
return `${launch} For a large request, first create a bounded task list, then delegate at most one ready independent branch per agent. The shipped read-only Explore and Plan agents may investigate before that list exists; every custom, write-capable, nested, team, or worktree delegation requires a ready parent task. Launch independent read-only research, audits, or exploration together. Shared-checkout writers, unknown scopes, dependencies, and overlapping file targets must run sequentially. Parallel writers require separate worktrees based on the exact clean starting revision; if the current required state is dirty or unsnapshotted, keep those writers serial in the shared checkout. Keep tiny dependent steps with the parent when delegation overhead is larger than the work. The parent owns task status, integration, and final verification: do not duplicate delegated work, do not mark a delegated task complete from a launch acknowledgement, and do not finish until the returned result and acceptance evidence have been checked.`;
|
|
738099
738123
|
}
|
|
738100
738124
|
function getDiscoverSkillsGuidance() {
|
|
738101
738125
|
if (false) {}
|
|
@@ -738865,7 +738889,7 @@ function computeFingerprint(messageText2, version3) {
|
|
|
738865
738889
|
}
|
|
738866
738890
|
function computeFingerprintFromMessages(messages) {
|
|
738867
738891
|
const firstMessageText = extractFirstMessageText(messages);
|
|
738868
|
-
return computeFingerprint(firstMessageText, "1.80.
|
|
738892
|
+
return computeFingerprint(firstMessageText, "1.80.7");
|
|
738869
738893
|
}
|
|
738870
738894
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
738871
738895
|
var init_fingerprint = () => {};
|
|
@@ -740790,7 +740814,7 @@ async function sideQuery(opts) {
|
|
|
740790
740814
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
740791
740815
|
}
|
|
740792
740816
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
740793
|
-
const fingerprint2 = computeFingerprint(messageText2, "1.80.
|
|
740817
|
+
const fingerprint2 = computeFingerprint(messageText2, "1.80.7");
|
|
740794
740818
|
const attributionHeader = getAttributionHeader(fingerprint2);
|
|
740795
740819
|
const systemBlocks = [
|
|
740796
740820
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -745624,7 +745648,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
745624
745648
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
745625
745649
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
745626
745650
|
betas: getSdkBetas(),
|
|
745627
|
-
ur_version: "1.80.
|
|
745651
|
+
ur_version: "1.80.7",
|
|
745628
745652
|
output_style: outputStyle,
|
|
745629
745653
|
agents: inputs.agents.map((agent2) => agent2.agentType),
|
|
745630
745654
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -759460,7 +759484,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
759460
759484
|
function getSemverPart(version3) {
|
|
759461
759485
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
759462
759486
|
}
|
|
759463
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.80.
|
|
759487
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.80.7") {
|
|
759464
759488
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
|
|
759465
759489
|
if (!updatedVersion) {
|
|
759466
759490
|
return null;
|
|
@@ -759509,7 +759533,7 @@ function AutoUpdater({
|
|
|
759509
759533
|
return;
|
|
759510
759534
|
}
|
|
759511
759535
|
if (false) {}
|
|
759512
|
-
const currentVersion = "1.80.
|
|
759536
|
+
const currentVersion = "1.80.7";
|
|
759513
759537
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
759514
759538
|
let latestVersion = await getLatestVersion(channel);
|
|
759515
759539
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -759738,12 +759762,12 @@ function NativeAutoUpdater({
|
|
|
759738
759762
|
logEvent("tengu_native_auto_updater_start", {});
|
|
759739
759763
|
try {
|
|
759740
759764
|
const maxVersion = await getMaxVersion();
|
|
759741
|
-
if (maxVersion && gt("1.80.
|
|
759765
|
+
if (maxVersion && gt("1.80.7", maxVersion)) {
|
|
759742
759766
|
const msg = await getMaxVersionMessage();
|
|
759743
759767
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
759744
759768
|
}
|
|
759745
759769
|
const result = await installLatest(channel);
|
|
759746
|
-
const currentVersion = "1.80.
|
|
759770
|
+
const currentVersion = "1.80.7";
|
|
759747
759771
|
const latencyMs = Date.now() - startTime;
|
|
759748
759772
|
if (result.lockFailed) {
|
|
759749
759773
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -759880,17 +759904,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
759880
759904
|
const maxVersion = await getMaxVersion();
|
|
759881
759905
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
759882
759906
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
759883
|
-
if (gte("1.80.
|
|
759884
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.
|
|
759907
|
+
if (gte("1.80.7", maxVersion)) {
|
|
759908
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.7"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
759885
759909
|
setUpdateAvailable(false);
|
|
759886
759910
|
return;
|
|
759887
759911
|
}
|
|
759888
759912
|
latest = maxVersion;
|
|
759889
759913
|
}
|
|
759890
|
-
const hasUpdate = latest && !gte("1.80.
|
|
759914
|
+
const hasUpdate = latest && !gte("1.80.7", latest) && !shouldSkipVersion(latest);
|
|
759891
759915
|
setUpdateAvailable(!!hasUpdate);
|
|
759892
759916
|
if (hasUpdate) {
|
|
759893
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.
|
|
759917
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.7"} -> ${latest}`);
|
|
759894
759918
|
}
|
|
759895
759919
|
};
|
|
759896
759920
|
$2[0] = t1;
|
|
@@ -759924,7 +759948,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
759924
759948
|
wrap: "truncate",
|
|
759925
759949
|
children: [
|
|
759926
759950
|
"currentVersion: ",
|
|
759927
|
-
"1.80.
|
|
759951
|
+
"1.80.7"
|
|
759928
759952
|
]
|
|
759929
759953
|
}, undefined, true, undefined, this);
|
|
759930
759954
|
$2[3] = verbose;
|
|
@@ -770777,7 +770801,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
770777
770801
|
project_dir: getOriginalCwd(),
|
|
770778
770802
|
added_dirs: addedDirs
|
|
770779
770803
|
},
|
|
770780
|
-
version: "1.80.
|
|
770804
|
+
version: "1.80.7",
|
|
770781
770805
|
output_style: {
|
|
770782
770806
|
name: outputStyleName
|
|
770783
770807
|
},
|
|
@@ -770912,7 +770936,7 @@ function StatusLineInner({
|
|
|
770912
770936
|
const attention = customStatusError ?? taskAttention;
|
|
770913
770937
|
const terminalSize = React133.useContext(TerminalSizeContext);
|
|
770914
770938
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
770915
|
-
version: "1.80.
|
|
770939
|
+
version: "1.80.7",
|
|
770916
770940
|
providerLabel: providerRuntime.providerLabel,
|
|
770917
770941
|
authMode: providerRuntime.authLabel,
|
|
770918
770942
|
model: renderModelName(mainLoopModel) || providerRuntime.model || "",
|
|
@@ -783167,7 +783191,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
783167
783191
|
} catch {}
|
|
783168
783192
|
const data = {
|
|
783169
783193
|
trigger: trigger2,
|
|
783170
|
-
version: "1.80.
|
|
783194
|
+
version: "1.80.7",
|
|
783171
783195
|
platform: process.platform,
|
|
783172
783196
|
transcript,
|
|
783173
783197
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -795536,7 +795560,7 @@ function WelcomeV2() {
|
|
|
795536
795560
|
dimColor: true,
|
|
795537
795561
|
children: [
|
|
795538
795562
|
"v",
|
|
795539
|
-
"1.80.
|
|
795563
|
+
"1.80.7"
|
|
795540
795564
|
]
|
|
795541
795565
|
}, undefined, true, undefined, this)
|
|
795542
795566
|
]
|
|
@@ -796796,7 +796820,7 @@ function completeOnboarding() {
|
|
|
796796
796820
|
saveGlobalConfig((current) => ({
|
|
796797
796821
|
...current,
|
|
796798
796822
|
hasCompletedOnboarding: true,
|
|
796799
|
-
lastOnboardingVersion: "1.80.
|
|
796823
|
+
lastOnboardingVersion: "1.80.7"
|
|
796800
796824
|
}));
|
|
796801
796825
|
}
|
|
796802
796826
|
function showDialog(root2, renderer) {
|
|
@@ -801942,7 +801966,7 @@ function appendToLog(path28, message) {
|
|
|
801942
801966
|
cwd: getFsImplementation().cwd(),
|
|
801943
801967
|
userType: process.env.USER_TYPE,
|
|
801944
801968
|
sessionId: getSessionId(),
|
|
801945
|
-
version: "1.80.
|
|
801969
|
+
version: "1.80.7"
|
|
801946
801970
|
};
|
|
801947
801971
|
getLogWriter(path28).write(messageWithTimestamp);
|
|
801948
801972
|
}
|
|
@@ -806106,8 +806130,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
806106
806130
|
}
|
|
806107
806131
|
async function checkEnvLessBridgeMinVersion() {
|
|
806108
806132
|
const cfg = await getEnvLessBridgeConfig();
|
|
806109
|
-
if (cfg.min_version && lt("1.80.
|
|
806110
|
-
return `Your version of UR (${"1.80.
|
|
806133
|
+
if (cfg.min_version && lt("1.80.7", cfg.min_version)) {
|
|
806134
|
+
return `Your version of UR (${"1.80.7"}) is too old for Remote Control.
|
|
806111
806135
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
806112
806136
|
}
|
|
806113
806137
|
return null;
|
|
@@ -806581,7 +806605,7 @@ async function initBridgeCore(params) {
|
|
|
806581
806605
|
const rawApi = createBridgeApiClient({
|
|
806582
806606
|
baseUrl,
|
|
806583
806607
|
getAccessToken,
|
|
806584
|
-
runnerVersion: "1.80.
|
|
806608
|
+
runnerVersion: "1.80.7",
|
|
806585
806609
|
onDebug: logForDebugging,
|
|
806586
806610
|
onAuth401,
|
|
806587
806611
|
getTrustedDeviceToken
|
|
@@ -816054,7 +816078,7 @@ function getAgUiCapabilities() {
|
|
|
816054
816078
|
name: "UR-Nexus",
|
|
816055
816079
|
type: "ur-nexus",
|
|
816056
816080
|
description: "Provider-flexible, local-first autonomous engineering workflow agent.",
|
|
816057
|
-
version: "1.80.
|
|
816081
|
+
version: "1.80.7",
|
|
816058
816082
|
provider: "UR",
|
|
816059
816083
|
documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
|
|
816060
816084
|
},
|
|
@@ -817281,7 +817305,7 @@ function createMCPServer(cwd4, debug2, verbose) {
|
|
|
817281
817305
|
};
|
|
817282
817306
|
const server2 = new Server({
|
|
817283
817307
|
name: "ur-nexus",
|
|
817284
|
-
version: "1.80.
|
|
817308
|
+
version: "1.80.7"
|
|
817285
817309
|
}, {
|
|
817286
817310
|
capabilities: {
|
|
817287
817311
|
tools: {}
|
|
@@ -818485,7 +818509,7 @@ function thrownResponse(error40) {
|
|
|
818485
818509
|
}
|
|
818486
818510
|
async function createUrMcp2026Runtime(options5) {
|
|
818487
818511
|
const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
|
|
818488
|
-
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.
|
|
818512
|
+
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.7" }, { capabilities: {} });
|
|
818489
818513
|
const [clientTransport, serverTransport] = createLinkedTransportPair();
|
|
818490
818514
|
try {
|
|
818491
818515
|
await server2.connect(serverTransport);
|
|
@@ -818496,7 +818520,7 @@ async function createUrMcp2026Runtime(options5) {
|
|
|
818496
818520
|
}
|
|
818497
818521
|
const runtime2 = new Mcp2026Runtime({
|
|
818498
818522
|
cwd: options5.cwd,
|
|
818499
|
-
version: "1.80.
|
|
818523
|
+
version: "1.80.7",
|
|
818500
818524
|
backend: {
|
|
818501
818525
|
listTools: async () => {
|
|
818502
818526
|
const listed = await client2.listTools();
|
|
@@ -821231,7 +821255,7 @@ async function update() {
|
|
|
821231
821255
|
logEvent("tengu_update_check", {});
|
|
821232
821256
|
const diagnostic2 = await getDoctorDiagnostic();
|
|
821233
821257
|
const result = await checkUpgradeStatus({
|
|
821234
|
-
currentVersion: "1.80.
|
|
821258
|
+
currentVersion: "1.80.7",
|
|
821235
821259
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
821236
821260
|
installationType: diagnostic2.installationType,
|
|
821237
821261
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -822559,7 +822583,7 @@ ${customInstructions}` : customInstructions;
|
|
|
822559
822583
|
}
|
|
822560
822584
|
}
|
|
822561
822585
|
logForDiagnosticsNoPII("info", "started", {
|
|
822562
|
-
version: "1.80.
|
|
822586
|
+
version: "1.80.7",
|
|
822563
822587
|
is_native_binary: isInBundledMode()
|
|
822564
822588
|
});
|
|
822565
822589
|
registerCleanup(async () => {
|
|
@@ -823346,7 +823370,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
823346
823370
|
pendingHookMessages
|
|
823347
823371
|
}, renderAndRun);
|
|
823348
823372
|
}
|
|
823349
|
-
}).version("1.80.
|
|
823373
|
+
}).version("1.80.7 (UR-Nexus)", "-v, --version", "Output the version number");
|
|
823350
823374
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
823351
823375
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
823352
823376
|
if (canUserConfigureAdvisor()) {
|
|
@@ -824473,7 +824497,7 @@ if (false) {}
|
|
|
824473
824497
|
async function main2() {
|
|
824474
824498
|
const args = process.argv.slice(2);
|
|
824475
824499
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
824476
|
-
console.log(`${"1.80.
|
|
824500
|
+
console.log(`${"1.80.7"} (UR-Nexus)`);
|
|
824477
824501
|
return;
|
|
824478
824502
|
}
|
|
824479
824503
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
package/docs/AGENT_FEATURES.md
CHANGED
|
@@ -9,6 +9,13 @@ reproducible autonomous software engineering agent: every substantial task can
|
|
|
9
9
|
be driven as `spec -> plan -> patch -> test -> report -> rollback`, with the
|
|
10
10
|
spec as the durable source of truth and command evidence as the success gate.
|
|
11
11
|
|
|
12
|
+
## v1.80.7 Additions
|
|
13
|
+
|
|
14
|
+
| Addition | Surface | What it adds |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Recoverable local-model tool mismatch | Ollama native/text calls, streaming/non-streaming execution | Converts a valid call to a tool absent from the active profile into a safe `UnavailableTool` result instead of aborting the provider turn. Identical retries are bounded and omitted tools cannot be revived through legacy aliases. |
|
|
17
|
+
| Task-free read-only research | `Agent`, strict-hybrid task gate | Lets the main session launch the exact shipped `Explore` and `Plan` definitions before tasks exist in every parent permission mode, while forcing those children into plan permissions and keeping all custom or write-capable delegation gated. |
|
|
18
|
+
|
|
12
19
|
## v1.80.6 Addition
|
|
13
20
|
|
|
14
21
|
| Addition | Surface | What it adds |
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -56,7 +56,11 @@ never blocked.
|
|
|
56
56
|
do not carry a classified user turn; it is not a limit on investigation. Set
|
|
57
57
|
it to `0` to require a task before every mutation. Set `enabled` to `false` to
|
|
58
58
|
return to advisory task tracking. Profiles that omit `TaskCreate` are not
|
|
59
|
-
gated, because they could not satisfy the requirement.
|
|
59
|
+
gated, because they could not satisfy the requirement. The main session may
|
|
60
|
+
launch UR's shipped `Explore` and `Plan` agents before a task exists in any
|
|
61
|
+
permission mode. These exact built-in definitions are forced read-only; custom,
|
|
62
|
+
write-capable, nested, named/team, and worktree delegation still requires an
|
|
63
|
+
actionable parent task.
|
|
60
64
|
|
|
61
65
|
## Model Providers
|
|
62
66
|
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -83,14 +83,17 @@ ur provider status
|
|
|
83
83
|
different source. Timeouts, `408`, `409`, `425`, `429`, and `5xx` responses
|
|
84
84
|
remain retryable because they may be transient.
|
|
85
85
|
|
|
86
|
-
###
|
|
86
|
+
### A built-in research agent says `TaskListRequired`
|
|
87
87
|
|
|
88
88
|
- Likely cause on UR 1.80.3–1.80.5: the strict task gate treated either the
|
|
89
89
|
active plan file or early read-only research delegation as an untracked
|
|
90
90
|
project mutation, creating a circular requirement before planning finished.
|
|
91
|
-
-
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
- UR 1.80.6 fixed this inside Plan Mode. UR 1.80.7 extends the same safe rule to
|
|
92
|
+
ordinary main-session research: upgrade to 1.80.7 or newer. The exact active
|
|
93
|
+
plan file and main-thread delegation to UR's shipped read-only `Explore` and
|
|
94
|
+
`Plan` agents are allowed before tasks exist. The child is forced into plan
|
|
95
|
+
permissions even if the parent uses Accept Edits or Approve All. Approved
|
|
96
|
+
plans are synchronized into visible
|
|
94
97
|
implementation and verification tasks before the first project mutation.
|
|
95
98
|
Other files and write-capable delegation remain protected. Existing
|
|
96
99
|
actionable tasks are preserved.
|
|
@@ -100,6 +103,20 @@ ur provider status
|
|
|
100
103
|
approve the plan first. Disabling `tasks.requireBeforeChanges` is no longer
|
|
101
104
|
needed for normal plan mode.
|
|
102
105
|
|
|
106
|
+
### Ollama stops with `unavailable tool "WebSearch"`
|
|
107
|
+
|
|
108
|
+
- Cause on UR 1.80.6 and older: a local model requested a provider-hosted tool
|
|
109
|
+
that was not present in its active tool profile. The Ollama adapter treated
|
|
110
|
+
the valid but unavailable tool name as a fatal provider-response error, so
|
|
111
|
+
the parent could not receive the research agents' remaining useful results.
|
|
112
|
+
- Fix: upgrade to UR 1.80.7 or newer. UR now returns a recoverable
|
|
113
|
+
`UnavailableTool` result without executing the call. The agent is instructed
|
|
114
|
+
to use an available alternative or return its partial result, and repeated
|
|
115
|
+
identical unavailable calls are bounded. This applies to native and
|
|
116
|
+
text-form calls in streaming and non-streaming Ollama responses.
|
|
117
|
+
- `WebSearch` is still not fabricated for a model or profile that does not have
|
|
118
|
+
it. Malformed tool names and malformed arguments still fail closed.
|
|
119
|
+
|
|
103
120
|
## Providers and models
|
|
104
121
|
|
|
105
122
|
### Provider selected but the model is unavailable
|
package/docs/USAGE.md
CHANGED
|
@@ -470,11 +470,12 @@ older builds are hidden and removed at the next prompt boundary.
|
|
|
470
470
|
|
|
471
471
|
Plan mode has one narrow exception to the mutation gate: UR may write or edit
|
|
472
472
|
the exact plan file for the active session while the rest of the workspace
|
|
473
|
-
remains read-only.
|
|
474
|
-
shipped `Explore` and `Plan` agents before tasks exist. Those
|
|
475
|
-
are mechanically
|
|
476
|
-
|
|
477
|
-
|
|
473
|
+
remains read-only. In any permission mode, the main session may delegate early
|
|
474
|
+
research to UR's shipped `Explore` and `Plan` agents before tasks exist. Those
|
|
475
|
+
two definitions are mechanically forced into plan permission mode even when
|
|
476
|
+
the parent is in Accept Edits or Approve All. Custom overrides, general-purpose
|
|
477
|
+
agents, nested agents, team workers, and worktree agents still require an
|
|
478
|
+
actionable parent task. When the user approves the plan,
|
|
478
479
|
`ExitPlanMode` preserves any existing actionable board or creates a bounded set
|
|
479
480
|
of professional, deduplicated implementation tasks plus a verification task
|
|
480
481
|
that depends on them. Implementation therefore starts with visible tracking
|
package/docs/VALIDATION.md
CHANGED
|
@@ -19,22 +19,37 @@ You need:
|
|
|
19
19
|
|
|
20
20
|
```sh
|
|
21
21
|
ur --version
|
|
22
|
-
# expected for this release: "1.80.
|
|
22
|
+
# expected for this release: "1.80.7 (UR-Nexus)"
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
### 0.0
|
|
25
|
+
### 0.0 Read-only research delegation starts cleanly (1.80.7)
|
|
26
26
|
|
|
27
|
-
Start an interactive session with task enforcement enabled and ask UR to
|
|
28
|
-
change
|
|
29
|
-
`Explore` and `Plan` agent calls should initialize without
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
Start an interactive session with task enforcement enabled and ask UR to
|
|
28
|
+
research a change, both normally and from Plan Mode. Before any task exists,
|
|
29
|
+
built-in `Explore` and `Plan` agent calls should initialize without
|
|
30
|
+
`TaskListRequired`. Their workers remain read-only even when the parent uses
|
|
31
|
+
Accept Edits or Approve All. Custom or general-purpose agents should remain
|
|
32
|
+
blocked until they have an actionable parent task. The deterministic
|
|
33
|
+
regressions are:
|
|
32
34
|
|
|
33
35
|
```sh
|
|
34
36
|
bun test test/taskListGate.test.ts test/toolExecutionFinalInput.test.ts
|
|
35
37
|
```
|
|
36
38
|
|
|
37
|
-
### 0.0.1
|
|
39
|
+
### 0.0.1 Unavailable Ollama tools recover (1.80.7)
|
|
40
|
+
|
|
41
|
+
With an Ollama model, ask for research that mentions WebSearch. If WebSearch is
|
|
42
|
+
not in the active profile, UR should reject that call safely and the agent
|
|
43
|
+
should continue with available tools or its useful partial result. It must not
|
|
44
|
+
end the parent turn with `Ollama response returned unavailable tool`. Native
|
|
45
|
+
and text-form, streaming and non-streaming regressions are covered by:
|
|
46
|
+
|
|
47
|
+
```sh
|
|
48
|
+
bun test test/ollamaToolCalls.test.ts test/kimiToolCalls.test.ts \
|
|
49
|
+
test/repeatedFailureGuard.test.ts test/streamingToolExecutor.test.ts
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 0.0.2 Plan approval creates visible tasks (1.80.5)
|
|
38
53
|
|
|
39
54
|
Start an interactive session with task enforcement enabled, ask for a
|
|
40
55
|
multi-file change, and let the agent enter plan mode. Expected lifecycle:
|
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.80.
|
|
48
|
+
<p class="eyebrow">Version 1.80.7</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.80.
|
|
5
|
+
"version": "1.80.7",
|
|
6
6
|
"publisher": "ur-nexus",
|
|
7
7
|
"engines": {
|
|
8
8
|
"vscode": "^1.92.0"
|
package/package.json
CHANGED