ur-agent 1.80.5 → 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 +29 -0
- package/dist/cli.js +154 -110
- package/docs/AGENT_FEATURES.md +13 -0
- package/docs/CONFIGURATION.md +5 -1
- package/docs/TROUBLESHOOTING.md +31 -10
- package/docs/USAGE.md +11 -5
- package/docs/VALIDATION.md +29 -2
- 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,34 @@
|
|
|
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
|
+
|
|
21
|
+
## 1.80.6
|
|
22
|
+
|
|
23
|
+
- Fixed Plan Mode's failed-first research delegation. UR's shipped read-only
|
|
24
|
+
`Explore` and `Plan` agents can now run before implementation tasks exist, as
|
|
25
|
+
the plan workflow already instructs, without emitting `TaskListRequired`.
|
|
26
|
+
- Kept the exception deliberately narrow: the active definition must be the
|
|
27
|
+
built-in plan-permission agent, called by the main session without a name,
|
|
28
|
+
team, worktree, or nested parent. Custom overrides and every write-capable
|
|
29
|
+
delegation still require an actionable task, and rewritten tool inputs are
|
|
30
|
+
revalidated immediately before execution. Approve All remains unchanged.
|
|
31
|
+
|
|
3
32
|
## 1.80.5
|
|
4
33
|
|
|
5
34
|
- Fixed the plan-mode/task-tracking deadlock introduced by the strict task
|
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();
|
|
@@ -174285,6 +174289,7 @@ var init_exploreAgent = __esm(() => {
|
|
|
174285
174289
|
],
|
|
174286
174290
|
source: "built-in",
|
|
174287
174291
|
baseDir: "built-in",
|
|
174292
|
+
permissionMode: "plan",
|
|
174288
174293
|
model: process.env.USER_TYPE === "ant" ? "inherit" : "modelH",
|
|
174289
174294
|
omitAgentMd: true,
|
|
174290
174295
|
getSystemPrompt: () => getExploreSystemPrompt()
|
|
@@ -174395,6 +174400,7 @@ var init_planAgent = __esm(() => {
|
|
|
174395
174400
|
source: "built-in",
|
|
174396
174401
|
tools: EXPLORE_AGENT.tools,
|
|
174397
174402
|
baseDir: "built-in",
|
|
174403
|
+
permissionMode: "plan",
|
|
174398
174404
|
model: "inherit",
|
|
174399
174405
|
omitAgentMd: true,
|
|
174400
174406
|
getSystemPrompt: () => getPlanV2SystemPrompt()
|
|
@@ -184630,7 +184636,7 @@ var init_projectSafety = __esm(() => {
|
|
|
184630
184636
|
function getInstruments() {
|
|
184631
184637
|
if (instruments)
|
|
184632
184638
|
return instruments;
|
|
184633
|
-
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");
|
|
184634
184640
|
instruments = {
|
|
184635
184641
|
operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
|
|
184636
184642
|
description: "GenAI operation duration.",
|
|
@@ -184728,7 +184734,7 @@ function genAiAgentAttributes() {
|
|
|
184728
184734
|
"gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
|
|
184729
184735
|
"gen_ai.provider.name": "ur",
|
|
184730
184736
|
"gen_ai.agent.name": "UR-Nexus",
|
|
184731
|
-
"gen_ai.agent.version": "1.80.
|
|
184737
|
+
"gen_ai.agent.version": "1.80.7"
|
|
184732
184738
|
};
|
|
184733
184739
|
}
|
|
184734
184740
|
function genAiWorkflowAttributes(workflowName, workflowRunId) {
|
|
@@ -184749,7 +184755,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
|
|
|
184749
184755
|
function startGenAiWorkflowSpan(workflowName, workflowRunId) {
|
|
184750
184756
|
const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
|
|
184751
184757
|
const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
|
|
184752
|
-
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 });
|
|
184753
184759
|
}
|
|
184754
184760
|
function endGenAiWorkflowSpan(span, options2 = {}) {
|
|
184755
184761
|
try {
|
|
@@ -184787,7 +184793,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
|
|
|
184787
184793
|
if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
|
|
184788
184794
|
attributes["gen_ai.memory.record.count"] = options2.recordCount;
|
|
184789
184795
|
}
|
|
184790
|
-
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 });
|
|
184791
184797
|
}
|
|
184792
184798
|
function endGenAiMemorySpan(span, options2 = {}) {
|
|
184793
184799
|
try {
|
|
@@ -278502,7 +278508,7 @@ function getTelemetryAttributes() {
|
|
|
278502
278508
|
attributes["session.id"] = sessionId;
|
|
278503
278509
|
}
|
|
278504
278510
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
278505
|
-
attributes["app.version"] = "1.80.
|
|
278511
|
+
attributes["app.version"] = "1.80.7";
|
|
278506
278512
|
}
|
|
278507
278513
|
const oauthAccount = getOauthAccountInfo();
|
|
278508
278514
|
if (oauthAccount) {
|
|
@@ -319493,7 +319499,7 @@ function getInstallationEnv() {
|
|
|
319493
319499
|
return;
|
|
319494
319500
|
}
|
|
319495
319501
|
function getURCodeVersion() {
|
|
319496
|
-
return "1.80.
|
|
319502
|
+
return "1.80.7";
|
|
319497
319503
|
}
|
|
319498
319504
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
319499
319505
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -326863,7 +326869,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
326863
326869
|
const client2 = new Client({
|
|
326864
326870
|
name: "ur",
|
|
326865
326871
|
title: "UR",
|
|
326866
|
-
version: "1.80.
|
|
326872
|
+
version: "1.80.7",
|
|
326867
326873
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
326868
326874
|
websiteUrl: PRODUCT_URL
|
|
326869
326875
|
}, {
|
|
@@ -327224,7 +327230,7 @@ var init_client5 = __esm(() => {
|
|
|
327224
327230
|
const client2 = new Client({
|
|
327225
327231
|
name: "ur",
|
|
327226
327232
|
title: "UR",
|
|
327227
|
-
version: "1.80.
|
|
327233
|
+
version: "1.80.7",
|
|
327228
327234
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
327229
327235
|
websiteUrl: PRODUCT_URL
|
|
327230
327236
|
}, {
|
|
@@ -329240,6 +329246,25 @@ var init_agentToolUtils = __esm(() => {
|
|
|
329240
329246
|
}));
|
|
329241
329247
|
});
|
|
329242
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
|
+
|
|
329243
329268
|
// src/components/AgentProgressLine.tsx
|
|
329244
329269
|
function getAgentProgressStatus({
|
|
329245
329270
|
isResolved,
|
|
@@ -339962,7 +339987,7 @@ async function createRuntime() {
|
|
|
339962
339987
|
bootstrapTelemetry();
|
|
339963
339988
|
const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
|
|
339964
339989
|
[import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
|
|
339965
|
-
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.
|
|
339990
|
+
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.7"
|
|
339966
339991
|
}));
|
|
339967
339992
|
const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
|
|
339968
339993
|
resource,
|
|
@@ -339995,11 +340020,11 @@ async function createRuntime() {
|
|
|
339995
340020
|
setMeterProvider(meterProvider);
|
|
339996
340021
|
setLoggerProvider(loggerProvider);
|
|
339997
340022
|
if (meterProvider) {
|
|
339998
|
-
const meter = meterProvider.getMeter("ur-agent", "1.80.
|
|
340023
|
+
const meter = meterProvider.getMeter("ur-agent", "1.80.7");
|
|
339999
340024
|
setMeter(meter, (name, options2) => meter.createCounter(name, options2));
|
|
340000
340025
|
}
|
|
340001
340026
|
if (loggerProvider) {
|
|
340002
|
-
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.
|
|
340027
|
+
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.7"));
|
|
340003
340028
|
}
|
|
340004
340029
|
if (!cleanupRegistered3) {
|
|
340005
340030
|
cleanupRegistered3 = true;
|
|
@@ -340661,9 +340686,9 @@ async function assertMinVersion() {
|
|
|
340661
340686
|
if (false) {}
|
|
340662
340687
|
try {
|
|
340663
340688
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
340664
|
-
if (versionConfig.minVersion && lt("1.80.
|
|
340689
|
+
if (versionConfig.minVersion && lt("1.80.7", versionConfig.minVersion)) {
|
|
340665
340690
|
console.error(`
|
|
340666
|
-
It looks like your version of UR (${"1.80.
|
|
340691
|
+
It looks like your version of UR (${"1.80.7"}) needs an update.
|
|
340667
340692
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
340668
340693
|
|
|
340669
340694
|
To update, please run:
|
|
@@ -340879,7 +340904,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
340879
340904
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
340880
340905
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
340881
340906
|
pid: process.pid,
|
|
340882
|
-
currentVersion: "1.80.
|
|
340907
|
+
currentVersion: "1.80.7"
|
|
340883
340908
|
});
|
|
340884
340909
|
return "in_progress";
|
|
340885
340910
|
}
|
|
@@ -340888,7 +340913,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
340888
340913
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
340889
340914
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
340890
340915
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
340891
|
-
currentVersion: "1.80.
|
|
340916
|
+
currentVersion: "1.80.7"
|
|
340892
340917
|
});
|
|
340893
340918
|
console.error(`
|
|
340894
340919
|
Error: Windows NPM detected in WSL
|
|
@@ -341423,7 +341448,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
341423
341448
|
}
|
|
341424
341449
|
async function getDoctorDiagnostic() {
|
|
341425
341450
|
const installationType = await getCurrentInstallationType();
|
|
341426
|
-
const version2 = typeof MACRO !== "undefined" ? "1.80.
|
|
341451
|
+
const version2 = typeof MACRO !== "undefined" ? "1.80.7" : "unknown";
|
|
341427
341452
|
const installationPath = await getInstallationPath();
|
|
341428
341453
|
const invokedBinary = getInvokedBinary();
|
|
341429
341454
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -342358,8 +342383,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
342358
342383
|
const maxVersion = await getMaxVersion();
|
|
342359
342384
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
342360
342385
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
342361
|
-
if (gte("1.80.
|
|
342362
|
-
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`);
|
|
342363
342388
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
342364
342389
|
latency_ms: Date.now() - startTime,
|
|
342365
342390
|
max_version: maxVersion,
|
|
@@ -342370,7 +342395,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
342370
342395
|
version2 = maxVersion;
|
|
342371
342396
|
}
|
|
342372
342397
|
}
|
|
342373
|
-
if (!forceReinstall && version2 === "1.80.
|
|
342398
|
+
if (!forceReinstall && version2 === "1.80.7" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
342374
342399
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
342375
342400
|
logEvent("tengu_native_update_complete", {
|
|
342376
342401
|
latency_ms: Date.now() - startTime,
|
|
@@ -363460,7 +363485,7 @@ async function* runAgent({
|
|
|
363460
363485
|
const agentGetAppState = () => {
|
|
363461
363486
|
const state = toolUseContext.getAppState();
|
|
363462
363487
|
let toolPermissionContext = state.toolPermissionContext;
|
|
363463
|
-
if (agentPermissionMode &&
|
|
363488
|
+
if (agentPermissionMode && shouldApplyAgentDefinitionPermissionMode(agentDefinition, state.toolPermissionContext.mode, false)) {
|
|
363464
363489
|
toolPermissionContext = {
|
|
363465
363490
|
...toolPermissionContext,
|
|
363466
363491
|
mode: agentPermissionMode
|
|
@@ -363753,6 +363778,7 @@ var init_runAgent = __esm(() => {
|
|
|
363753
363778
|
init_uuid();
|
|
363754
363779
|
init_agentToolUtils();
|
|
363755
363780
|
init_loadAgentsDir();
|
|
363781
|
+
init_readOnlyAgents();
|
|
363756
363782
|
});
|
|
363757
363783
|
|
|
363758
363784
|
// src/services/AgentSummary/agentSummary.ts
|
|
@@ -396226,6 +396252,8 @@ function checkTaskListGate(input) {
|
|
|
396226
396252
|
return { allowed: true };
|
|
396227
396253
|
if (input.isPlanningArtifact === true)
|
|
396228
396254
|
return { allowed: true };
|
|
396255
|
+
if (input.isReadOnlyBuiltInDelegation === true)
|
|
396256
|
+
return { allowed: true };
|
|
396229
396257
|
const isMutating = input.isMutating ?? isMutatingTool2(input.toolName);
|
|
396230
396258
|
if (!isMutating)
|
|
396231
396259
|
return { allowed: true };
|
|
@@ -400519,12 +400547,13 @@ var init_prompt18 = __esm(() => {
|
|
|
400519
400547
|
|
|
400520
400548
|
In plan mode, you'll:
|
|
400521
400549
|
1. Thoroughly explore the codebase using Glob, Grep, and Read tools
|
|
400522
|
-
2.
|
|
400523
|
-
3.
|
|
400524
|
-
4.
|
|
400525
|
-
5.
|
|
400526
|
-
6. Use
|
|
400527
|
-
7.
|
|
400550
|
+
2. Delegate early research only to UR's shipped read-only Explore or Plan agents; other delegation requires an actionable parent task
|
|
400551
|
+
3. Understand existing patterns and architecture
|
|
400552
|
+
4. Design an implementation approach
|
|
400553
|
+
5. Present your plan to the user for approval
|
|
400554
|
+
6. Use ${ASK_USER_QUESTION_TOOL_NAME} if you need to clarify approaches
|
|
400555
|
+
7. Use TaskCreate for manual task decomposition when useful; plan-file writes are allowed while planning
|
|
400556
|
+
8. Exit plan mode with ExitPlanMode when ready. After approval, ExitPlanMode guarantees that visible implementation tasks exist before coding begins
|
|
400528
400557
|
|
|
400529
400558
|
`;
|
|
400530
400559
|
});
|
|
@@ -400643,7 +400672,7 @@ var init_EnterPlanModeTool = __esm(() => {
|
|
|
400643
400672
|
}));
|
|
400644
400673
|
return {
|
|
400645
400674
|
data: {
|
|
400646
|
-
message: "Entered plan mode. Explore the codebase and write the plan file. TaskCreate remains available for manual decomposition; after approval, ExitPlanMode guarantees visible implementation tasks before coding begins."
|
|
400675
|
+
message: "Entered plan mode. Explore the codebase and write the plan file. UR's shipped read-only Explore and Plan agents may assist before tasks exist; other delegation requires an actionable parent task. TaskCreate remains available for manual decomposition; after approval, ExitPlanMode guarantees visible implementation tasks before coding begins."
|
|
400647
400676
|
}
|
|
400648
400677
|
};
|
|
400649
400678
|
},
|
|
@@ -400658,8 +400687,9 @@ In plan mode, you should:
|
|
|
400658
400687
|
3. Consider multiple approaches and their trade-offs
|
|
400659
400688
|
4. Use AskUserQuestion if you need to clarify the approach
|
|
400660
400689
|
5. Design a concrete implementation strategy
|
|
400661
|
-
6.
|
|
400662
|
-
7.
|
|
400690
|
+
6. Before tasks exist, delegate only to UR's shipped read-only Explore or Plan agents; other delegation requires an actionable parent task
|
|
400691
|
+
7. If useful, use TaskCreate to decompose the work manually; plan-file writes remain allowed while planning
|
|
400692
|
+
8. When ready, use ExitPlanMode to present your plan for approval. After approval, it guarantees visible implementation tasks before coding begins
|
|
400663
400693
|
|
|
400664
400694
|
Remember: DO NOT write or edit any files yet. This is a read-only exploration and planning phase.`;
|
|
400665
400695
|
return {
|
|
@@ -413021,7 +413051,7 @@ function isAnyTracingEnabled() {
|
|
|
413021
413051
|
return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
|
|
413022
413052
|
}
|
|
413023
413053
|
function getTracer() {
|
|
413024
|
-
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.
|
|
413054
|
+
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.7");
|
|
413025
413055
|
}
|
|
413026
413056
|
function createSpanAttributes(spanType, customAttributes = {}) {
|
|
413027
413057
|
const baseAttributes = getTelemetryAttributes();
|
|
@@ -414476,6 +414506,16 @@ function isCurrentPlanFileMutation(toolName, input, context5) {
|
|
|
414476
414506
|
return false;
|
|
414477
414507
|
}
|
|
414478
414508
|
}
|
|
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)) {
|
|
414511
|
+
return false;
|
|
414512
|
+
}
|
|
414513
|
+
const delegation = input;
|
|
414514
|
+
if (typeof delegation.subagent_type !== "string" || delegation.name !== undefined || delegation.team_name !== undefined || delegation.isolation !== undefined) {
|
|
414515
|
+
return false;
|
|
414516
|
+
}
|
|
414517
|
+
return context5.options.agentDefinitions.activeAgents.some((agent) => agent.agentType === delegation.subagent_type && isShippedReadOnlyAgentDefinition(agent));
|
|
414518
|
+
}
|
|
414479
414519
|
function getStopHookInfo(attachment) {
|
|
414480
414520
|
if (typeof attachment !== "object" || attachment === null || !("command" in attachment) || typeof attachment.command !== "string" || !("durationMs" in attachment) || typeof attachment.durationMs !== "number") {
|
|
414481
414521
|
return null;
|
|
@@ -414588,13 +414628,7 @@ function getMcpServerBaseUrlFromToolName(toolName, mcpClients) {
|
|
|
414588
414628
|
}
|
|
414589
414629
|
async function* runToolUse(toolUse, assistantMessage, canUseTool, toolUseContext) {
|
|
414590
414630
|
const toolName = toolUse.name;
|
|
414591
|
-
|
|
414592
|
-
if (!tool) {
|
|
414593
|
-
const fallbackTool = findToolByName(getAllBaseTools(), toolName);
|
|
414594
|
-
if (fallbackTool && fallbackTool.aliases?.includes(toolName)) {
|
|
414595
|
-
tool = fallbackTool;
|
|
414596
|
-
}
|
|
414597
|
-
}
|
|
414631
|
+
const tool = findToolByName(toolUseContext.options.tools, toolName);
|
|
414598
414632
|
const messageId = assistantMessage.message?.id;
|
|
414599
414633
|
if (typeof messageId !== "string" || messageId.length === 0) {
|
|
414600
414634
|
throw new Error(`Cannot execute tool_use ${toolUse.id}: assistant message has no id`);
|
|
@@ -414604,7 +414638,7 @@ async function* runToolUse(toolUse, assistantMessage, canUseTool, toolUseContext
|
|
|
414604
414638
|
const mcpServerBaseUrl = getMcpServerBaseUrlFromToolName(toolName, toolUseContext.options.mcpClients);
|
|
414605
414639
|
if (!tool) {
|
|
414606
414640
|
const callSig = callSignature(toolName, toolUse.input, repeatedFailureScope(toolUseContext, messageId));
|
|
414607
|
-
const repeat2 = checkRepeatedFailure(callSig);
|
|
414641
|
+
const repeat2 = checkRepeatedFailure(callSig, UNKNOWN_TOOL_REPEAT_POLICY);
|
|
414608
414642
|
if (repeat2.action === "abort") {
|
|
414609
414643
|
throw new RepeatedToolFailureAbort(`Repeated tool failure: ${repeat2.reason}`);
|
|
414610
414644
|
}
|
|
@@ -414646,17 +414680,18 @@ async function* runToolUse(toolUse, assistantMessage, canUseTool, toolUseContext
|
|
|
414646
414680
|
},
|
|
414647
414681
|
...mcpToolDetailsForAnalytics(toolName, mcpServerType, mcpServerBaseUrl)
|
|
414648
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.`;
|
|
414649
414684
|
yield {
|
|
414650
414685
|
message: createUserMessage({
|
|
414651
414686
|
content: [
|
|
414652
414687
|
{
|
|
414653
414688
|
type: "tool_result",
|
|
414654
|
-
content: `<tool_use_error>
|
|
414689
|
+
content: `<tool_use_error>UnavailableTool: ${unavailableMessage}</tool_use_error>`,
|
|
414655
414690
|
is_error: true,
|
|
414656
414691
|
tool_use_id: toolUse.id
|
|
414657
414692
|
}
|
|
414658
414693
|
],
|
|
414659
|
-
toolUseResult: `
|
|
414694
|
+
toolUseResult: `UnavailableTool: ${unavailableMessage}`,
|
|
414660
414695
|
sourceToolAssistantUUID: assistantMessage.uuid
|
|
414661
414696
|
})
|
|
414662
414697
|
};
|
|
@@ -414941,6 +414976,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
414941
414976
|
requiresTaskList: taskListRun?.requiresTaskList,
|
|
414942
414977
|
requirementReason: taskListRun?.requirementReason,
|
|
414943
414978
|
isPlanningArtifact: isCurrentPlanFileMutation(tool.name, parsedInput.data, toolUseContext),
|
|
414979
|
+
isReadOnlyBuiltInDelegation: isReadOnlyBuiltInDelegation(tool.name, parsedInput.data, toolUseContext),
|
|
414944
414980
|
taskListWriterAvailable: toolUseContext.options.tools.some((candidate) => candidate.name === "TaskCreate")
|
|
414945
414981
|
});
|
|
414946
414982
|
if (gate.allowed === false) {
|
|
@@ -415302,6 +415338,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
415302
415338
|
requiresTaskList: taskListRun?.requiresTaskList,
|
|
415303
415339
|
requirementReason: taskListRun?.requirementReason,
|
|
415304
415340
|
isPlanningArtifact: isCurrentPlanFileMutation(tool.name, finalParsedInput.data, toolUseContext),
|
|
415341
|
+
isReadOnlyBuiltInDelegation: isReadOnlyBuiltInDelegation(tool.name, finalParsedInput.data, toolUseContext),
|
|
415305
415342
|
taskListWriterAvailable: toolUseContext.options.tools.some((candidate) => candidate.name === "TaskCreate")
|
|
415306
415343
|
});
|
|
415307
415344
|
if (finalGate.allowed === false) {
|
|
@@ -415711,7 +415748,7 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
415711
415748
|
}
|
|
415712
415749
|
}
|
|
415713
415750
|
}
|
|
415714
|
-
var HOOK_TIMING_DISPLAY_THRESHOLD_MS2 = 500, SLOW_PHASE_LOG_THRESHOLD_MS = 2000;
|
|
415751
|
+
var UNKNOWN_TOOL_REPEAT_POLICY, HOOK_TIMING_DISPLAY_THRESHOLD_MS2 = 500, SLOW_PHASE_LOG_THRESHOLD_MS = 2000;
|
|
415715
415752
|
var init_toolExecution = __esm(() => {
|
|
415716
415753
|
init_analytics();
|
|
415717
415754
|
init_metadata();
|
|
@@ -415722,11 +415759,12 @@ var init_toolExecution = __esm(() => {
|
|
|
415722
415759
|
init_AskUserQuestionTool();
|
|
415723
415760
|
init_prompt();
|
|
415724
415761
|
init_bashPermissions();
|
|
415762
|
+
init_constants2();
|
|
415763
|
+
init_readOnlyAgents();
|
|
415725
415764
|
init_prompt3();
|
|
415726
415765
|
init_prompt4();
|
|
415727
415766
|
init_gitOperationTracking();
|
|
415728
415767
|
init_prompt8();
|
|
415729
|
-
init_tools2();
|
|
415730
415768
|
init_attachments2();
|
|
415731
415769
|
init_debug();
|
|
415732
415770
|
init_errors();
|
|
@@ -415752,6 +415790,11 @@ var init_toolExecution = __esm(() => {
|
|
|
415752
415790
|
init_mcpStringUtils();
|
|
415753
415791
|
init_utils3();
|
|
415754
415792
|
init_toolHooks();
|
|
415793
|
+
UNKNOWN_TOOL_REPEAT_POLICY = {
|
|
415794
|
+
enabled: true,
|
|
415795
|
+
limit: 1,
|
|
415796
|
+
abortAfter: 3
|
|
415797
|
+
};
|
|
415755
415798
|
});
|
|
415756
415799
|
|
|
415757
415800
|
// src/services/tools/StreamingToolExecutor.ts
|
|
@@ -433403,7 +433446,7 @@ function getPlanModeV2Instructions(attachment) {
|
|
|
433403
433446
|
const agentCount = getPlanModeV2AgentCount();
|
|
433404
433447
|
const exploreAgentCount = getPlanModeV2ExploreAgentCount();
|
|
433405
433448
|
const planFileInfo = attachment.planExists ? `A plan file already exists at ${attachment.planFilePath}. You can read it and make incremental edits using the ${FileEditTool.name} tool.` : `No plan file exists yet. You should create your plan at ${attachment.planFilePath} using the ${FileWriteTool.name} tool.`;
|
|
433406
|
-
const content = `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. TaskCreate, TaskUpdate, TaskList, and TaskGet are also allowed for visible task tracking. This supercedes any other instructions you have received.
|
|
433449
|
+
const content = `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. TaskCreate, TaskUpdate, TaskList, and TaskGet are also allowed for visible task tracking. Before tasks exist, only UR's shipped read-only ${EXPLORE_AGENT.agentType} and ${PLAN_AGENT.agentType} agents may be delegated to; custom, general-purpose, nested, team, and worktree agents still require an actionable parent task. This supercedes any other instructions you have received.
|
|
433407
433450
|
|
|
433408
433451
|
## Plan File Info:
|
|
433409
433452
|
${planFileInfo}
|
|
@@ -433478,7 +433521,7 @@ function getReadOnlyToolNames() {
|
|
|
433478
433521
|
}
|
|
433479
433522
|
function getPlanModeInterviewInstructions(attachment) {
|
|
433480
433523
|
const planFileInfo = attachment.planExists ? `A plan file already exists at ${attachment.planFilePath}. You can read it and make incremental edits using the ${FileEditTool.name} tool.` : `No plan file exists yet. You should create your plan at ${attachment.planFilePath} using the ${FileWriteTool.name} tool.`;
|
|
433481
|
-
const content = `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. TaskCreate, TaskUpdate, TaskList, and TaskGet are also allowed for visible task tracking. This supercedes any other instructions you have received.
|
|
433524
|
+
const content = `Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. TaskCreate, TaskUpdate, TaskList, and TaskGet are also allowed for visible task tracking.${areExplorePlanAgentsEnabled() ? ` Before tasks exist, only UR's shipped read-only ${EXPLORE_AGENT.agentType} and ${PLAN_AGENT.agentType} agents may be delegated to; custom, general-purpose, nested, team, and worktree agents still require an actionable parent task.` : ""} This supercedes any other instructions you have received.
|
|
433482
433525
|
|
|
433483
433526
|
## Plan File Info:
|
|
433484
433527
|
${planFileInfo}
|
|
@@ -443127,7 +443170,7 @@ function Feedback({
|
|
|
443127
443170
|
platform: env2.platform,
|
|
443128
443171
|
gitRepo: envInfo.isGit,
|
|
443129
443172
|
terminal: env2.terminal,
|
|
443130
|
-
version: "1.80.
|
|
443173
|
+
version: "1.80.7",
|
|
443131
443174
|
transcript: normalizeMessagesForAPI(messages),
|
|
443132
443175
|
errors: sanitizedErrors,
|
|
443133
443176
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -443319,7 +443362,7 @@ function Feedback({
|
|
|
443319
443362
|
", ",
|
|
443320
443363
|
env2.terminal,
|
|
443321
443364
|
", v",
|
|
443322
|
-
"1.80.
|
|
443365
|
+
"1.80.7"
|
|
443323
443366
|
]
|
|
443324
443367
|
}, undefined, true, undefined, this)
|
|
443325
443368
|
]
|
|
@@ -443425,7 +443468,7 @@ ${sanitizedDescription}
|
|
|
443425
443468
|
` + `**Environment Info**
|
|
443426
443469
|
` + `- Platform: ${env2.platform}
|
|
443427
443470
|
` + `- Terminal: ${env2.terminal}
|
|
443428
|
-
` + `- Version: ${"1.80.
|
|
443471
|
+
` + `- Version: ${"1.80.7"}
|
|
443429
443472
|
` + `- Feedback ID: ${feedbackId}
|
|
443430
443473
|
` + `
|
|
443431
443474
|
**Errors**
|
|
@@ -446535,7 +446578,7 @@ function buildPrimarySection() {
|
|
|
446535
446578
|
}, undefined, false, undefined, this);
|
|
446536
446579
|
return [{
|
|
446537
446580
|
label: "Version",
|
|
446538
|
-
value: "1.80.
|
|
446581
|
+
value: "1.80.7"
|
|
446539
446582
|
}, {
|
|
446540
446583
|
label: "Session name",
|
|
446541
446584
|
value: nameValue
|
|
@@ -449917,7 +449960,7 @@ function Config({
|
|
|
449917
449960
|
}
|
|
449918
449961
|
}, undefined, false, undefined, this)
|
|
449919
449962
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
449920
|
-
currentVersion: "1.80.
|
|
449963
|
+
currentVersion: "1.80.7",
|
|
449921
449964
|
onChoice: (choice) => {
|
|
449922
449965
|
setShowSubmenu(null);
|
|
449923
449966
|
setTabsHidden(false);
|
|
@@ -449929,7 +449972,7 @@ function Config({
|
|
|
449929
449972
|
autoUpdatesChannel: "stable"
|
|
449930
449973
|
};
|
|
449931
449974
|
if (choice === "stay") {
|
|
449932
|
-
newSettings.minimumVersion = "1.80.
|
|
449975
|
+
newSettings.minimumVersion = "1.80.7";
|
|
449933
449976
|
}
|
|
449934
449977
|
updateSettingsForSource("userSettings", newSettings);
|
|
449935
449978
|
setSettingsData((prev_27) => ({
|
|
@@ -458238,7 +458281,7 @@ function HelpV2(t0) {
|
|
|
458238
458281
|
let t6;
|
|
458239
458282
|
if ($2[31] !== tabs) {
|
|
458240
458283
|
t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
|
|
458241
|
-
title: `UR v${"1.80.
|
|
458284
|
+
title: `UR v${"1.80.7"}`,
|
|
458242
458285
|
color: "professionalBlue",
|
|
458243
458286
|
defaultTab: "general",
|
|
458244
458287
|
children: tabs
|
|
@@ -459171,7 +459214,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
|
|
|
459171
459214
|
async function handleInitialize(options2) {
|
|
459172
459215
|
return {
|
|
459173
459216
|
name: "UR",
|
|
459174
|
-
version: "1.80.
|
|
459217
|
+
version: "1.80.7",
|
|
459175
459218
|
protocolVersion: "0.1.0",
|
|
459176
459219
|
workspaceRoot: options2.cwd,
|
|
459177
459220
|
capabilities: {
|
|
@@ -476279,7 +476322,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
476279
476322
|
return [];
|
|
476280
476323
|
}
|
|
476281
476324
|
}
|
|
476282
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.
|
|
476325
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.7") {
|
|
476283
476326
|
if (process.env.USER_TYPE === "ant") {
|
|
476284
476327
|
const changelog = "";
|
|
476285
476328
|
if (changelog) {
|
|
@@ -476306,7 +476349,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.5")
|
|
|
476306
476349
|
releaseNotes
|
|
476307
476350
|
};
|
|
476308
476351
|
}
|
|
476309
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.
|
|
476352
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.7") {
|
|
476310
476353
|
if (process.env.USER_TYPE === "ant") {
|
|
476311
476354
|
const changelog = "";
|
|
476312
476355
|
if (changelog) {
|
|
@@ -479211,7 +479254,7 @@ function getRecentActivitySync() {
|
|
|
479211
479254
|
return cachedActivity;
|
|
479212
479255
|
}
|
|
479213
479256
|
function getLogoDisplayData() {
|
|
479214
|
-
const version2 = process.env.DEMO_VERSION ?? "1.80.
|
|
479257
|
+
const version2 = process.env.DEMO_VERSION ?? "1.80.7";
|
|
479215
479258
|
const serverUrl = getDirectConnectServerUrl();
|
|
479216
479259
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
|
|
479217
479260
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -480079,7 +480122,7 @@ function LogoV2() {
|
|
|
480079
480122
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
480080
480123
|
t2 = () => {
|
|
480081
480124
|
const currentConfig = getGlobalConfig();
|
|
480082
|
-
if (currentConfig.lastReleaseNotesSeen === "1.80.
|
|
480125
|
+
if (currentConfig.lastReleaseNotesSeen === "1.80.7") {
|
|
480083
480126
|
return;
|
|
480084
480127
|
}
|
|
480085
480128
|
saveGlobalConfig(_temp325);
|
|
@@ -480764,12 +480807,12 @@ function LogoV2() {
|
|
|
480764
480807
|
return t41;
|
|
480765
480808
|
}
|
|
480766
480809
|
function _temp325(current) {
|
|
480767
|
-
if (current.lastReleaseNotesSeen === "1.80.
|
|
480810
|
+
if (current.lastReleaseNotesSeen === "1.80.7") {
|
|
480768
480811
|
return current;
|
|
480769
480812
|
}
|
|
480770
480813
|
return {
|
|
480771
480814
|
...current,
|
|
480772
|
-
lastReleaseNotesSeen: "1.80.
|
|
480815
|
+
lastReleaseNotesSeen: "1.80.7"
|
|
480773
480816
|
};
|
|
480774
480817
|
}
|
|
480775
480818
|
function _temp241(s_0) {
|
|
@@ -496861,7 +496904,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
|
|
|
496861
496904
|
if (spec.name !== specName) {
|
|
496862
496905
|
throw new Error("Agentic CI workflow spec name does not match");
|
|
496863
496906
|
}
|
|
496864
|
-
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.
|
|
496907
|
+
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.7" : "1.80.7");
|
|
496865
496908
|
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
|
|
496866
496909
|
throw new Error("invalid ur-agent package version");
|
|
496867
496910
|
}
|
|
@@ -497854,7 +497897,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
|
|
|
497854
497897
|
path: ".github/workflows/ur.yml",
|
|
497855
497898
|
root: "project",
|
|
497856
497899
|
content: compileAgenticCiWorkflow("default", {
|
|
497857
|
-
packageVersion: typeof MACRO !== "undefined" ? "1.80.
|
|
497900
|
+
packageVersion: typeof MACRO !== "undefined" ? "1.80.7" : "1.80.7"
|
|
497858
497901
|
})
|
|
497859
497902
|
},
|
|
497860
497903
|
{
|
|
@@ -497917,7 +497960,7 @@ function value(tokens, flag) {
|
|
|
497917
497960
|
return index2 >= 0 ? tokens[index2 + 1] : undefined;
|
|
497918
497961
|
}
|
|
497919
497962
|
function cliVersion() {
|
|
497920
|
-
return typeof MACRO !== "undefined" ? "1.80.
|
|
497963
|
+
return typeof MACRO !== "undefined" ? "1.80.7" : "1.80.7";
|
|
497921
497964
|
}
|
|
497922
497965
|
function workflowPath(cwd2) {
|
|
497923
497966
|
return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
|
|
@@ -503773,7 +503816,7 @@ function createAcpStdioApp(deps) {
|
|
|
503773
503816
|
}
|
|
503774
503817
|
},
|
|
503775
503818
|
authMethods: [],
|
|
503776
|
-
agentInfo: { name: "UR-Nexus", version: "1.80.
|
|
503819
|
+
agentInfo: { name: "UR-Nexus", version: "1.80.7" }
|
|
503777
503820
|
})).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
|
|
503778
503821
|
const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
|
|
503779
503822
|
await runtime2.announce({
|
|
@@ -503870,7 +503913,7 @@ function createAcpStdioAgent(deps) {
|
|
|
503870
503913
|
}
|
|
503871
503914
|
},
|
|
503872
503915
|
authMethods: [],
|
|
503873
|
-
agentInfo: { name: "UR-Nexus", version: "1.80.
|
|
503916
|
+
agentInfo: { name: "UR-Nexus", version: "1.80.7" }
|
|
503874
503917
|
});
|
|
503875
503918
|
return;
|
|
503876
503919
|
case "authenticate":
|
|
@@ -715096,7 +715139,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
715096
715139
|
smapsRollup,
|
|
715097
715140
|
platform: process.platform,
|
|
715098
715141
|
nodeVersion: process.version,
|
|
715099
|
-
ccVersion: "1.80.
|
|
715142
|
+
ccVersion: "1.80.7"
|
|
715100
715143
|
};
|
|
715101
715144
|
}
|
|
715102
715145
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -715685,7 +715728,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
715685
715728
|
var call154 = async () => {
|
|
715686
715729
|
return {
|
|
715687
715730
|
type: "text",
|
|
715688
|
-
value: "1.80.
|
|
715731
|
+
value: "1.80.7"
|
|
715689
715732
|
};
|
|
715690
715733
|
}, version2, version_default;
|
|
715691
715734
|
var init_version = __esm(() => {
|
|
@@ -726928,7 +726971,7 @@ function generateHtmlReport(data, insights) {
|
|
|
726928
726971
|
</html>`;
|
|
726929
726972
|
}
|
|
726930
726973
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
726931
|
-
const version3 = typeof MACRO !== "undefined" ? "1.80.
|
|
726974
|
+
const version3 = typeof MACRO !== "undefined" ? "1.80.7" : "unknown";
|
|
726932
726975
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
726933
726976
|
const facets_summary = {
|
|
726934
726977
|
total: facets.size,
|
|
@@ -731241,7 +731284,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
731241
731284
|
init_settings2();
|
|
731242
731285
|
init_slowOperations();
|
|
731243
731286
|
init_uuid();
|
|
731244
|
-
VERSION7 = typeof MACRO !== "undefined" ? "1.80.
|
|
731287
|
+
VERSION7 = typeof MACRO !== "undefined" ? "1.80.7" : "unknown";
|
|
731245
731288
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
731246
731289
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
731247
731290
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -732456,7 +732499,7 @@ var init_filesystem = __esm(() => {
|
|
|
732456
732499
|
});
|
|
732457
732500
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
732458
732501
|
const nonce = randomBytes24(16).toString("hex");
|
|
732459
|
-
return join243(getURTempDir(), "bundled-skills", "1.80.
|
|
732502
|
+
return join243(getURTempDir(), "bundled-skills", "1.80.7", nonce);
|
|
732460
732503
|
});
|
|
732461
732504
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
732462
732505
|
});
|
|
@@ -738066,6 +738109,7 @@ function getOllamaToolDisciplineSection() {
|
|
|
738066
738109
|
return null;
|
|
738067
738110
|
const items = [
|
|
738068
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.`,
|
|
738069
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.`,
|
|
738070
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.`,
|
|
738071
738115
|
`Never emit an empty turn: provide a real tool call, useful user-facing text, or both.`
|
|
@@ -738075,7 +738119,7 @@ function getOllamaToolDisciplineSection() {
|
|
|
738075
738119
|
}
|
|
738076
738120
|
function getAgentToolSection() {
|
|
738077
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.`;
|
|
738078
|
-
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.`;
|
|
738079
738123
|
}
|
|
738080
738124
|
function getDiscoverSkillsGuidance() {
|
|
738081
738125
|
if (false) {}
|
|
@@ -738845,7 +738889,7 @@ function computeFingerprint(messageText2, version3) {
|
|
|
738845
738889
|
}
|
|
738846
738890
|
function computeFingerprintFromMessages(messages) {
|
|
738847
738891
|
const firstMessageText = extractFirstMessageText(messages);
|
|
738848
|
-
return computeFingerprint(firstMessageText, "1.80.
|
|
738892
|
+
return computeFingerprint(firstMessageText, "1.80.7");
|
|
738849
738893
|
}
|
|
738850
738894
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
738851
738895
|
var init_fingerprint = () => {};
|
|
@@ -740770,7 +740814,7 @@ async function sideQuery(opts) {
|
|
|
740770
740814
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
740771
740815
|
}
|
|
740772
740816
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
740773
|
-
const fingerprint2 = computeFingerprint(messageText2, "1.80.
|
|
740817
|
+
const fingerprint2 = computeFingerprint(messageText2, "1.80.7");
|
|
740774
740818
|
const attributionHeader = getAttributionHeader(fingerprint2);
|
|
740775
740819
|
const systemBlocks = [
|
|
740776
740820
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -745604,7 +745648,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
745604
745648
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
745605
745649
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
745606
745650
|
betas: getSdkBetas(),
|
|
745607
|
-
ur_version: "1.80.
|
|
745651
|
+
ur_version: "1.80.7",
|
|
745608
745652
|
output_style: outputStyle,
|
|
745609
745653
|
agents: inputs.agents.map((agent2) => agent2.agentType),
|
|
745610
745654
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -759440,7 +759484,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
759440
759484
|
function getSemverPart(version3) {
|
|
759441
759485
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
759442
759486
|
}
|
|
759443
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.80.
|
|
759487
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.80.7") {
|
|
759444
759488
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
|
|
759445
759489
|
if (!updatedVersion) {
|
|
759446
759490
|
return null;
|
|
@@ -759489,7 +759533,7 @@ function AutoUpdater({
|
|
|
759489
759533
|
return;
|
|
759490
759534
|
}
|
|
759491
759535
|
if (false) {}
|
|
759492
|
-
const currentVersion = "1.80.
|
|
759536
|
+
const currentVersion = "1.80.7";
|
|
759493
759537
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
759494
759538
|
let latestVersion = await getLatestVersion(channel);
|
|
759495
759539
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -759718,12 +759762,12 @@ function NativeAutoUpdater({
|
|
|
759718
759762
|
logEvent("tengu_native_auto_updater_start", {});
|
|
759719
759763
|
try {
|
|
759720
759764
|
const maxVersion = await getMaxVersion();
|
|
759721
|
-
if (maxVersion && gt("1.80.
|
|
759765
|
+
if (maxVersion && gt("1.80.7", maxVersion)) {
|
|
759722
759766
|
const msg = await getMaxVersionMessage();
|
|
759723
759767
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
759724
759768
|
}
|
|
759725
759769
|
const result = await installLatest(channel);
|
|
759726
|
-
const currentVersion = "1.80.
|
|
759770
|
+
const currentVersion = "1.80.7";
|
|
759727
759771
|
const latencyMs = Date.now() - startTime;
|
|
759728
759772
|
if (result.lockFailed) {
|
|
759729
759773
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -759860,17 +759904,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
759860
759904
|
const maxVersion = await getMaxVersion();
|
|
759861
759905
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
759862
759906
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
759863
|
-
if (gte("1.80.
|
|
759864
|
-
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`);
|
|
759865
759909
|
setUpdateAvailable(false);
|
|
759866
759910
|
return;
|
|
759867
759911
|
}
|
|
759868
759912
|
latest = maxVersion;
|
|
759869
759913
|
}
|
|
759870
|
-
const hasUpdate = latest && !gte("1.80.
|
|
759914
|
+
const hasUpdate = latest && !gte("1.80.7", latest) && !shouldSkipVersion(latest);
|
|
759871
759915
|
setUpdateAvailable(!!hasUpdate);
|
|
759872
759916
|
if (hasUpdate) {
|
|
759873
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.
|
|
759917
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.7"} -> ${latest}`);
|
|
759874
759918
|
}
|
|
759875
759919
|
};
|
|
759876
759920
|
$2[0] = t1;
|
|
@@ -759904,7 +759948,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
759904
759948
|
wrap: "truncate",
|
|
759905
759949
|
children: [
|
|
759906
759950
|
"currentVersion: ",
|
|
759907
|
-
"1.80.
|
|
759951
|
+
"1.80.7"
|
|
759908
759952
|
]
|
|
759909
759953
|
}, undefined, true, undefined, this);
|
|
759910
759954
|
$2[3] = verbose;
|
|
@@ -770757,7 +770801,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
770757
770801
|
project_dir: getOriginalCwd(),
|
|
770758
770802
|
added_dirs: addedDirs
|
|
770759
770803
|
},
|
|
770760
|
-
version: "1.80.
|
|
770804
|
+
version: "1.80.7",
|
|
770761
770805
|
output_style: {
|
|
770762
770806
|
name: outputStyleName
|
|
770763
770807
|
},
|
|
@@ -770892,7 +770936,7 @@ function StatusLineInner({
|
|
|
770892
770936
|
const attention = customStatusError ?? taskAttention;
|
|
770893
770937
|
const terminalSize = React133.useContext(TerminalSizeContext);
|
|
770894
770938
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
770895
|
-
version: "1.80.
|
|
770939
|
+
version: "1.80.7",
|
|
770896
770940
|
providerLabel: providerRuntime.providerLabel,
|
|
770897
770941
|
authMode: providerRuntime.authLabel,
|
|
770898
770942
|
model: renderModelName(mainLoopModel) || providerRuntime.model || "",
|
|
@@ -783147,7 +783191,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
783147
783191
|
} catch {}
|
|
783148
783192
|
const data = {
|
|
783149
783193
|
trigger: trigger2,
|
|
783150
|
-
version: "1.80.
|
|
783194
|
+
version: "1.80.7",
|
|
783151
783195
|
platform: process.platform,
|
|
783152
783196
|
transcript,
|
|
783153
783197
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -795516,7 +795560,7 @@ function WelcomeV2() {
|
|
|
795516
795560
|
dimColor: true,
|
|
795517
795561
|
children: [
|
|
795518
795562
|
"v",
|
|
795519
|
-
"1.80.
|
|
795563
|
+
"1.80.7"
|
|
795520
795564
|
]
|
|
795521
795565
|
}, undefined, true, undefined, this)
|
|
795522
795566
|
]
|
|
@@ -796776,7 +796820,7 @@ function completeOnboarding() {
|
|
|
796776
796820
|
saveGlobalConfig((current) => ({
|
|
796777
796821
|
...current,
|
|
796778
796822
|
hasCompletedOnboarding: true,
|
|
796779
|
-
lastOnboardingVersion: "1.80.
|
|
796823
|
+
lastOnboardingVersion: "1.80.7"
|
|
796780
796824
|
}));
|
|
796781
796825
|
}
|
|
796782
796826
|
function showDialog(root2, renderer) {
|
|
@@ -801922,7 +801966,7 @@ function appendToLog(path28, message) {
|
|
|
801922
801966
|
cwd: getFsImplementation().cwd(),
|
|
801923
801967
|
userType: process.env.USER_TYPE,
|
|
801924
801968
|
sessionId: getSessionId(),
|
|
801925
|
-
version: "1.80.
|
|
801969
|
+
version: "1.80.7"
|
|
801926
801970
|
};
|
|
801927
801971
|
getLogWriter(path28).write(messageWithTimestamp);
|
|
801928
801972
|
}
|
|
@@ -806086,8 +806130,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
806086
806130
|
}
|
|
806087
806131
|
async function checkEnvLessBridgeMinVersion() {
|
|
806088
806132
|
const cfg = await getEnvLessBridgeConfig();
|
|
806089
|
-
if (cfg.min_version && lt("1.80.
|
|
806090
|
-
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.
|
|
806091
806135
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
806092
806136
|
}
|
|
806093
806137
|
return null;
|
|
@@ -806561,7 +806605,7 @@ async function initBridgeCore(params) {
|
|
|
806561
806605
|
const rawApi = createBridgeApiClient({
|
|
806562
806606
|
baseUrl,
|
|
806563
806607
|
getAccessToken,
|
|
806564
|
-
runnerVersion: "1.80.
|
|
806608
|
+
runnerVersion: "1.80.7",
|
|
806565
806609
|
onDebug: logForDebugging,
|
|
806566
806610
|
onAuth401,
|
|
806567
806611
|
getTrustedDeviceToken
|
|
@@ -816034,7 +816078,7 @@ function getAgUiCapabilities() {
|
|
|
816034
816078
|
name: "UR-Nexus",
|
|
816035
816079
|
type: "ur-nexus",
|
|
816036
816080
|
description: "Provider-flexible, local-first autonomous engineering workflow agent.",
|
|
816037
|
-
version: "1.80.
|
|
816081
|
+
version: "1.80.7",
|
|
816038
816082
|
provider: "UR",
|
|
816039
816083
|
documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
|
|
816040
816084
|
},
|
|
@@ -817261,7 +817305,7 @@ function createMCPServer(cwd4, debug2, verbose) {
|
|
|
817261
817305
|
};
|
|
817262
817306
|
const server2 = new Server({
|
|
817263
817307
|
name: "ur-nexus",
|
|
817264
|
-
version: "1.80.
|
|
817308
|
+
version: "1.80.7"
|
|
817265
817309
|
}, {
|
|
817266
817310
|
capabilities: {
|
|
817267
817311
|
tools: {}
|
|
@@ -818465,7 +818509,7 @@ function thrownResponse(error40) {
|
|
|
818465
818509
|
}
|
|
818466
818510
|
async function createUrMcp2026Runtime(options5) {
|
|
818467
818511
|
const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
|
|
818468
|
-
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: {} });
|
|
818469
818513
|
const [clientTransport, serverTransport] = createLinkedTransportPair();
|
|
818470
818514
|
try {
|
|
818471
818515
|
await server2.connect(serverTransport);
|
|
@@ -818476,7 +818520,7 @@ async function createUrMcp2026Runtime(options5) {
|
|
|
818476
818520
|
}
|
|
818477
818521
|
const runtime2 = new Mcp2026Runtime({
|
|
818478
818522
|
cwd: options5.cwd,
|
|
818479
|
-
version: "1.80.
|
|
818523
|
+
version: "1.80.7",
|
|
818480
818524
|
backend: {
|
|
818481
818525
|
listTools: async () => {
|
|
818482
818526
|
const listed = await client2.listTools();
|
|
@@ -821211,7 +821255,7 @@ async function update() {
|
|
|
821211
821255
|
logEvent("tengu_update_check", {});
|
|
821212
821256
|
const diagnostic2 = await getDoctorDiagnostic();
|
|
821213
821257
|
const result = await checkUpgradeStatus({
|
|
821214
|
-
currentVersion: "1.80.
|
|
821258
|
+
currentVersion: "1.80.7",
|
|
821215
821259
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
821216
821260
|
installationType: diagnostic2.installationType,
|
|
821217
821261
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -822539,7 +822583,7 @@ ${customInstructions}` : customInstructions;
|
|
|
822539
822583
|
}
|
|
822540
822584
|
}
|
|
822541
822585
|
logForDiagnosticsNoPII("info", "started", {
|
|
822542
|
-
version: "1.80.
|
|
822586
|
+
version: "1.80.7",
|
|
822543
822587
|
is_native_binary: isInBundledMode()
|
|
822544
822588
|
});
|
|
822545
822589
|
registerCleanup(async () => {
|
|
@@ -823326,7 +823370,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
823326
823370
|
pendingHookMessages
|
|
823327
823371
|
}, renderAndRun);
|
|
823328
823372
|
}
|
|
823329
|
-
}).version("1.80.
|
|
823373
|
+
}).version("1.80.7 (UR-Nexus)", "-v, --version", "Output the version number");
|
|
823330
823374
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
823331
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.");
|
|
823332
823376
|
if (canUserConfigureAdvisor()) {
|
|
@@ -824453,7 +824497,7 @@ if (false) {}
|
|
|
824453
824497
|
async function main2() {
|
|
824454
824498
|
const args = process.argv.slice(2);
|
|
824455
824499
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
824456
|
-
console.log(`${"1.80.
|
|
824500
|
+
console.log(`${"1.80.7"} (UR-Nexus)`);
|
|
824457
824501
|
return;
|
|
824458
824502
|
}
|
|
824459
824503
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
package/docs/AGENT_FEATURES.md
CHANGED
|
@@ -9,6 +9,19 @@ 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
|
+
|
|
19
|
+
## v1.80.6 Addition
|
|
20
|
+
|
|
21
|
+
| Addition | Surface | What it adds |
|
|
22
|
+
| --- | --- | --- |
|
|
23
|
+
| Read-only planning delegation | Plan mode, `Agent`, strict-hybrid task gate | Lets the shipped `Explore` and `Plan` agents research before implementation tasks exist, eliminating failed-first delegation while retaining plan permissions and task requirements for every custom, write-capable, nested, team, or worktree agent. |
|
|
24
|
+
|
|
12
25
|
## v1.80.5 Addition
|
|
13
26
|
|
|
14
27
|
| 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,18 +83,39 @@ 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
|
-
###
|
|
87
|
-
|
|
88
|
-
- Likely cause on UR 1.80.3–1.80.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
-
|
|
92
|
-
|
|
86
|
+
### A built-in research agent says `TaskListRequired`
|
|
87
|
+
|
|
88
|
+
- Likely cause on UR 1.80.3–1.80.5: the strict task gate treated either the
|
|
89
|
+
active plan file or early read-only research delegation as an untracked
|
|
90
|
+
project mutation, creating a circular requirement before planning finished.
|
|
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
|
|
93
97
|
implementation and verification tasks before the first project mutation.
|
|
94
|
-
Other files remain protected. Existing
|
|
98
|
+
Other files and write-capable delegation remain protected. Existing
|
|
99
|
+
actionable tasks are preserved.
|
|
95
100
|
- If the message names a project file rather than the active plan file, it is
|
|
96
|
-
expected
|
|
97
|
-
|
|
101
|
+
expected. It is also expected for custom/general-purpose/nested/team/worktree
|
|
102
|
+
agents without a parent task: create the requested tasks or finish and
|
|
103
|
+
approve the plan first. Disabling `tasks.requireBeforeChanges` is no longer
|
|
104
|
+
needed for normal plan mode.
|
|
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.
|
|
98
119
|
|
|
99
120
|
## Providers and models
|
|
100
121
|
|
package/docs/USAGE.md
CHANGED
|
@@ -470,11 +470,17 @@ 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
|
-
|
|
475
|
-
|
|
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,
|
|
479
|
+
`ExitPlanMode` preserves any existing actionable board or creates a bounded set
|
|
480
|
+
of professional, deduplicated implementation tasks plus a verification task
|
|
481
|
+
that depends on them. Implementation therefore starts with visible tracking
|
|
482
|
+
without requiring the model or user to recover from a circular
|
|
483
|
+
`TaskListRequired` error.
|
|
478
484
|
|
|
479
485
|
Independent read-only tasks can run in parallel. A task that may write to the
|
|
480
486
|
shared checkout is serialized with other possible writers, even when it comes
|
package/docs/VALIDATION.md
CHANGED
|
@@ -19,10 +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
|
+
|
|
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:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
bun test test/taskListGate.test.ts test/toolExecutionFinalInput.test.ts
|
|
37
|
+
```
|
|
38
|
+
|
|
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)
|
|
26
53
|
|
|
27
54
|
Start an interactive session with task enforcement enabled, ask for a
|
|
28
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