ur-agent 1.80.7 → 1.80.9
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 +28 -0
- package/dist/cli.js +113 -87
- package/docs/AGENT_FEATURES.md +12 -0
- package/docs/CONFIGURATION.md +6 -1
- package/docs/TROUBLESHOOTING.md +11 -0
- package/docs/USAGE.md +8 -3
- package/docs/VALIDATION.md +11 -5
- 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,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.80.9
|
|
4
|
+
|
|
5
|
+
- Fixed the remaining provider-independent `TaskListRequired` failure for
|
|
6
|
+
research fan-out. Some models preserved the research/report-only brief but
|
|
7
|
+
dropped the caller's explicit “read-only” wording while still selecting
|
|
8
|
+
`general-purpose`. UR now recognizes that constrained shape and reduces it
|
|
9
|
+
to the mechanically read-only shipped `Explore` worker before task gating.
|
|
10
|
+
- Kept the boundary fail-closed for any prompt that directs implementation,
|
|
11
|
+
building, file changes, command execution, testing, installation, commits,
|
|
12
|
+
deployment, or other mutation. Custom definitions, nested workers,
|
|
13
|
+
names/teams, worktrees, and cwd overrides remain excluded. Approve All is
|
|
14
|
+
unchanged.
|
|
15
|
+
|
|
16
|
+
## 1.80.8
|
|
17
|
+
|
|
18
|
+
- Fixed provider-independent failed-first research delegation. Several model
|
|
19
|
+
families selected `general-purpose` even when their own worker brief said
|
|
20
|
+
read-only research, causing `TaskListRequired` before the research could
|
|
21
|
+
start. UR now safely downgrades that exact main-session contract to its
|
|
22
|
+
mechanically read-only shipped `Explore` agent before task gating.
|
|
23
|
+
- Strengthened the shared Agent prompt and Explore description so models choose
|
|
24
|
+
`subagent_type="Explore"` directly for task-free research. The compatibility
|
|
25
|
+
downgrade also recognizes “research task only; do not write files” wording.
|
|
26
|
+
- Kept the boundary fail-closed: implementation prompts, custom definitions,
|
|
27
|
+
nested workers, named/team agents, worktrees, cwd overrides, and every other
|
|
28
|
+
general-purpose call still require an actionable task. Permission and hook
|
|
29
|
+
rewrites are revalidated before execution. Approve All remains unchanged.
|
|
30
|
+
|
|
3
31
|
## 1.80.7
|
|
4
32
|
|
|
5
33
|
- Fixed Ollama runs stopping with `response returned unavailable tool
|
package/dist/cli.js
CHANGED
|
@@ -107788,7 +107788,7 @@ var init_auth = __esm(() => {
|
|
|
107788
107788
|
|
|
107789
107789
|
// src/utils/userAgent.ts
|
|
107790
107790
|
function getURCodeUserAgent() {
|
|
107791
|
-
return `ur/${"1.80.
|
|
107791
|
+
return `ur/${"1.80.9"}`;
|
|
107792
107792
|
}
|
|
107793
107793
|
|
|
107794
107794
|
// src/utils/workloadContext.ts
|
|
@@ -107810,7 +107810,7 @@ function getUserAgent() {
|
|
|
107810
107810
|
const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
|
|
107811
107811
|
const workload = getWorkload();
|
|
107812
107812
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
107813
|
-
return `ur-cli/${"1.80.
|
|
107813
|
+
return `ur-cli/${"1.80.9"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
107814
107814
|
}
|
|
107815
107815
|
function getMCPUserAgent() {
|
|
107816
107816
|
const parts = [];
|
|
@@ -107824,7 +107824,7 @@ function getMCPUserAgent() {
|
|
|
107824
107824
|
parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
|
|
107825
107825
|
}
|
|
107826
107826
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
107827
|
-
return `ur/${"1.80.
|
|
107827
|
+
return `ur/${"1.80.9"}${suffix}`;
|
|
107828
107828
|
}
|
|
107829
107829
|
function getWebFetchUserAgent() {
|
|
107830
107830
|
return `UR-User (${getURCodeUserAgent()})`;
|
|
@@ -107962,7 +107962,7 @@ var init_user = __esm(() => {
|
|
|
107962
107962
|
deviceId,
|
|
107963
107963
|
sessionId: getSessionId(),
|
|
107964
107964
|
email: getEmail(),
|
|
107965
|
-
appVersion: "1.80.
|
|
107965
|
+
appVersion: "1.80.9",
|
|
107966
107966
|
platform: getHostPlatformForAnalytics(),
|
|
107967
107967
|
organizationUuid,
|
|
107968
107968
|
accountUuid,
|
|
@@ -115849,7 +115849,7 @@ var init_metadata = __esm(() => {
|
|
|
115849
115849
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
115850
115850
|
WHITESPACE_REGEX = /\s+/;
|
|
115851
115851
|
getVersionBase = memoize_default(() => {
|
|
115852
|
-
const match = "1.80.
|
|
115852
|
+
const match = "1.80.9".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
115853
115853
|
return match ? match[0] : undefined;
|
|
115854
115854
|
});
|
|
115855
115855
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -115889,7 +115889,7 @@ var init_metadata = __esm(() => {
|
|
|
115889
115889
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
115890
115890
|
isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
|
|
115891
115891
|
isURAiAuth: isURAISubscriber(),
|
|
115892
|
-
version: "1.80.
|
|
115892
|
+
version: "1.80.9",
|
|
115893
115893
|
versionBase: getVersionBase(),
|
|
115894
115894
|
buildTime: "",
|
|
115895
115895
|
deploymentEnvironment: env2.detectDeploymentEnvironment(),
|
|
@@ -116559,7 +116559,7 @@ function initialize1PEventLogging() {
|
|
|
116559
116559
|
const platform2 = getPlatform();
|
|
116560
116560
|
const attributes = {
|
|
116561
116561
|
[import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
|
|
116562
|
-
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.
|
|
116562
|
+
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.80.9"
|
|
116563
116563
|
};
|
|
116564
116564
|
if (platform2 === "wsl") {
|
|
116565
116565
|
const wslVersion = getWslVersion();
|
|
@@ -116587,7 +116587,7 @@ function initialize1PEventLogging() {
|
|
|
116587
116587
|
})
|
|
116588
116588
|
]
|
|
116589
116589
|
});
|
|
116590
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.
|
|
116590
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.80.9");
|
|
116591
116591
|
}
|
|
116592
116592
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
116593
116593
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -126550,7 +126550,7 @@ function formatA2AAgentCard(options = {}, pretty = true) {
|
|
|
126550
126550
|
function formatA2AV1AgentCard(options = {}, pretty = true) {
|
|
126551
126551
|
return JSON.stringify(buildA2AV1AgentCard(options), null, pretty ? 2 : 0);
|
|
126552
126552
|
}
|
|
126553
|
-
var urVersion = "1.80.
|
|
126553
|
+
var urVersion = "1.80.9", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
|
|
126554
126554
|
var init_trends = __esm(() => {
|
|
126555
126555
|
init_a2aCardSignature();
|
|
126556
126556
|
coverage = [
|
|
@@ -129440,7 +129440,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
129440
129440
|
if (!isAttributionHeaderEnabled()) {
|
|
129441
129441
|
return "";
|
|
129442
129442
|
}
|
|
129443
|
-
const version2 = `${"1.80.
|
|
129443
|
+
const version2 = `${"1.80.9"}.${fingerprint}`;
|
|
129444
129444
|
const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
|
|
129445
129445
|
const cch = "";
|
|
129446
129446
|
const workload = getWorkload();
|
|
@@ -174270,7 +174270,7 @@ NOTE: You are meant to be a fast agent that returns output as quickly as possibl
|
|
|
174270
174270
|
|
|
174271
174271
|
Complete the user's search request efficiently and report your findings clearly.`;
|
|
174272
174272
|
}
|
|
174273
|
-
var EXPLORE_AGENT_MIN_QUERIES = 3, EXPLORE_WHEN_TO_USE = '
|
|
174273
|
+
var EXPLORE_AGENT_MIN_QUERIES = 3, EXPLORE_WHEN_TO_USE = 'Read-only research and exploration agent. Use this for external research, source gathering, audits, codebase exploration, file-pattern searches (eg. "src/components/**/*.tsx"), code searches (eg. "API endpoints"), and questions about how a repository works. Prefer this over general-purpose whenever the worker must not modify files, especially before an actionable task exists. Specify the desired thoroughness: "quick", "medium", or "very thorough".', EXPLORE_AGENT;
|
|
174274
174274
|
var init_exploreAgent = __esm(() => {
|
|
174275
174275
|
init_prompt3();
|
|
174276
174276
|
init_prompt4();
|
|
@@ -184636,7 +184636,7 @@ var init_projectSafety = __esm(() => {
|
|
|
184636
184636
|
function getInstruments() {
|
|
184637
184637
|
if (instruments)
|
|
184638
184638
|
return instruments;
|
|
184639
|
-
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.9");
|
|
184640
184640
|
instruments = {
|
|
184641
184641
|
operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
|
|
184642
184642
|
description: "GenAI operation duration.",
|
|
@@ -184734,7 +184734,7 @@ function genAiAgentAttributes() {
|
|
|
184734
184734
|
"gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
|
|
184735
184735
|
"gen_ai.provider.name": "ur",
|
|
184736
184736
|
"gen_ai.agent.name": "UR-Nexus",
|
|
184737
|
-
"gen_ai.agent.version": "1.80.
|
|
184737
|
+
"gen_ai.agent.version": "1.80.9"
|
|
184738
184738
|
};
|
|
184739
184739
|
}
|
|
184740
184740
|
function genAiWorkflowAttributes(workflowName, workflowRunId) {
|
|
@@ -184755,7 +184755,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
|
|
|
184755
184755
|
function startGenAiWorkflowSpan(workflowName, workflowRunId) {
|
|
184756
184756
|
const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
|
|
184757
184757
|
const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
|
|
184758
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.
|
|
184758
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.9").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
184759
184759
|
}
|
|
184760
184760
|
function endGenAiWorkflowSpan(span, options2 = {}) {
|
|
184761
184761
|
try {
|
|
@@ -184793,7 +184793,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
|
|
|
184793
184793
|
if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
|
|
184794
184794
|
attributes["gen_ai.memory.record.count"] = options2.recordCount;
|
|
184795
184795
|
}
|
|
184796
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.
|
|
184796
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.80.9").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
184797
184797
|
}
|
|
184798
184798
|
function endGenAiMemorySpan(span, options2 = {}) {
|
|
184799
184799
|
try {
|
|
@@ -278508,7 +278508,7 @@ function getTelemetryAttributes() {
|
|
|
278508
278508
|
attributes["session.id"] = sessionId;
|
|
278509
278509
|
}
|
|
278510
278510
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
278511
|
-
attributes["app.version"] = "1.80.
|
|
278511
|
+
attributes["app.version"] = "1.80.9";
|
|
278512
278512
|
}
|
|
278513
278513
|
const oauthAccount = getOauthAccountInfo();
|
|
278514
278514
|
if (oauthAccount) {
|
|
@@ -319499,7 +319499,7 @@ function getInstallationEnv() {
|
|
|
319499
319499
|
return;
|
|
319500
319500
|
}
|
|
319501
319501
|
function getURCodeVersion() {
|
|
319502
|
-
return "1.80.
|
|
319502
|
+
return "1.80.9";
|
|
319503
319503
|
}
|
|
319504
319504
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
319505
319505
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -326869,7 +326869,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
326869
326869
|
const client2 = new Client({
|
|
326870
326870
|
name: "ur",
|
|
326871
326871
|
title: "UR",
|
|
326872
|
-
version: "1.80.
|
|
326872
|
+
version: "1.80.9",
|
|
326873
326873
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
326874
326874
|
websiteUrl: PRODUCT_URL
|
|
326875
326875
|
}, {
|
|
@@ -327230,7 +327230,7 @@ var init_client5 = __esm(() => {
|
|
|
327230
327230
|
const client2 = new Client({
|
|
327231
327231
|
name: "ur",
|
|
327232
327232
|
title: "UR",
|
|
327233
|
-
version: "1.80.
|
|
327233
|
+
version: "1.80.9",
|
|
327234
327234
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
327235
327235
|
websiteUrl: PRODUCT_URL
|
|
327236
327236
|
}, {
|
|
@@ -329250,6 +329250,15 @@ var init_agentToolUtils = __esm(() => {
|
|
|
329250
329250
|
function isShippedReadOnlyAgentDefinition(agent) {
|
|
329251
329251
|
return SHIPPED_READ_ONLY_AGENT_TYPES.has(agent.agentType) && agent.source === "built-in" && agent.permissionMode === "plan";
|
|
329252
329252
|
}
|
|
329253
|
+
function normalizeReadOnlyResearchDelegation(input, activeAgents, isNestedAgent) {
|
|
329254
|
+
if (isNestedAgent || input.subagent_type !== "general-purpose" || input.name !== undefined || input.team_name !== undefined || input.isolation !== undefined || input.cwd !== undefined || typeof input.prompt !== "string" || !RESEARCH_INTENT_MARKER.test(input.prompt) || !READ_ONLY_RESEARCH_MARKER.test(input.prompt) && MUTATING_DELEGATION_MARKER.test(input.prompt)) {
|
|
329255
|
+
return input;
|
|
329256
|
+
}
|
|
329257
|
+
const exploreAgent = activeAgents.find((agent) => agent.agentType === "Explore" && isShippedReadOnlyAgentDefinition(agent));
|
|
329258
|
+
if (!exploreAgent)
|
|
329259
|
+
return input;
|
|
329260
|
+
return { ...input, subagent_type: exploreAgent.agentType };
|
|
329261
|
+
}
|
|
329253
329262
|
function shouldApplyAgentDefinitionPermissionMode(agent, parentMode, transcriptClassifierEnabled) {
|
|
329254
329263
|
if (!agent.permissionMode)
|
|
329255
329264
|
return false;
|
|
@@ -329257,12 +329266,19 @@ function shouldApplyAgentDefinitionPermissionMode(agent, parentMode, transcriptC
|
|
|
329257
329266
|
return true;
|
|
329258
329267
|
return parentMode !== "bypassPermissions" && parentMode !== "acceptEdits" && !(transcriptClassifierEnabled && parentMode === "auto");
|
|
329259
329268
|
}
|
|
329260
|
-
var SHIPPED_READ_ONLY_AGENT_TYPES;
|
|
329269
|
+
var SHIPPED_READ_ONLY_AGENT_TYPES, READ_ONLY_RESEARCH_MARKER, RESEARCH_INTENT_MARKER, MUTATING_ACTION = "(?:implement(?:s|ed|ing)?|build(?:s|ing)?|built|create(?:s|d|ing)?|modif(?:y|ies|ied|ying)|edit(?:s|ed|ing)?|writ(?:e|es|ten|ing)|fix(?:es|ed|ing)?|refactor(?:s|ed|ing)?|update(?:s|d|ing)?|delete(?:s|d|ing)?|remove(?:s|d|ing)?|add(?:s|ed|ing)?|install(?:s|ed|ing)?|execute(?:s|d|ing)?|run(?:s|ning)?|commit(?:s|ted|ting)?|push(?:es|ed|ing)?|deploy(?:s|ed|ing)?|generate(?:s|d|ing)?|scaffold(?:s|ed|ing)?|author(?:s|ed|ing)?|change(?:s|d|ing)?)", MUTATING_DELEGATION_MARKER;
|
|
329261
329270
|
var init_readOnlyAgents = __esm(() => {
|
|
329262
329271
|
SHIPPED_READ_ONLY_AGENT_TYPES = new Set([
|
|
329263
329272
|
"Explore",
|
|
329264
329273
|
"Plan"
|
|
329265
329274
|
]);
|
|
329275
|
+
READ_ONLY_RESEARCH_MARKER = /\bread[\s-]?only\b|\b(?:do not|don't|must not|never)\s+(?:modify|write|edit|create|change)\s+(?:any\s+)?(?:code\s+)?files?\b|\bno\s+(?:file|workspace)\s+(?:changes|modifications)\b/i;
|
|
329276
|
+
RESEARCH_INTENT_MARKER = /\b(?:research|investigat\w*|explor\w*|analy[sz]\w*|audit\w*)\b/i;
|
|
329277
|
+
MUTATING_DELEGATION_MARKER = new RegExp([
|
|
329278
|
+
`\\b(?:and|then|also)\\s+${MUTATING_ACTION}\\b`,
|
|
329279
|
+
`\\b(?:please|must|should|need(?:s)?\\s+to|you(?:'ll|\\s+will|\\s+must|\\s+should))\\s+${MUTATING_ACTION}\\b`,
|
|
329280
|
+
`(?:^|[\\n.;:!?]\\s*|[-*]\\s+)${MUTATING_ACTION}\\b`
|
|
329281
|
+
].join("|"), "i");
|
|
329266
329282
|
});
|
|
329267
329283
|
|
|
329268
329284
|
// src/components/AgentProgressLine.tsx
|
|
@@ -339987,7 +340003,7 @@ async function createRuntime() {
|
|
|
339987
340003
|
bootstrapTelemetry();
|
|
339988
340004
|
const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
|
|
339989
340005
|
[import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
|
|
339990
|
-
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.
|
|
340006
|
+
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.80.9"
|
|
339991
340007
|
}));
|
|
339992
340008
|
const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
|
|
339993
340009
|
resource,
|
|
@@ -340020,11 +340036,11 @@ async function createRuntime() {
|
|
|
340020
340036
|
setMeterProvider(meterProvider);
|
|
340021
340037
|
setLoggerProvider(loggerProvider);
|
|
340022
340038
|
if (meterProvider) {
|
|
340023
|
-
const meter = meterProvider.getMeter("ur-agent", "1.80.
|
|
340039
|
+
const meter = meterProvider.getMeter("ur-agent", "1.80.9");
|
|
340024
340040
|
setMeter(meter, (name, options2) => meter.createCounter(name, options2));
|
|
340025
340041
|
}
|
|
340026
340042
|
if (loggerProvider) {
|
|
340027
|
-
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.
|
|
340043
|
+
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.80.9"));
|
|
340028
340044
|
}
|
|
340029
340045
|
if (!cleanupRegistered3) {
|
|
340030
340046
|
cleanupRegistered3 = true;
|
|
@@ -340686,9 +340702,9 @@ async function assertMinVersion() {
|
|
|
340686
340702
|
if (false) {}
|
|
340687
340703
|
try {
|
|
340688
340704
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
340689
|
-
if (versionConfig.minVersion && lt("1.80.
|
|
340705
|
+
if (versionConfig.minVersion && lt("1.80.9", versionConfig.minVersion)) {
|
|
340690
340706
|
console.error(`
|
|
340691
|
-
It looks like your version of UR (${"1.80.
|
|
340707
|
+
It looks like your version of UR (${"1.80.9"}) needs an update.
|
|
340692
340708
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
340693
340709
|
|
|
340694
340710
|
To update, please run:
|
|
@@ -340904,7 +340920,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
340904
340920
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
340905
340921
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
340906
340922
|
pid: process.pid,
|
|
340907
|
-
currentVersion: "1.80.
|
|
340923
|
+
currentVersion: "1.80.9"
|
|
340908
340924
|
});
|
|
340909
340925
|
return "in_progress";
|
|
340910
340926
|
}
|
|
@@ -340913,7 +340929,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
340913
340929
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
340914
340930
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
340915
340931
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
340916
|
-
currentVersion: "1.80.
|
|
340932
|
+
currentVersion: "1.80.9"
|
|
340917
340933
|
});
|
|
340918
340934
|
console.error(`
|
|
340919
340935
|
Error: Windows NPM detected in WSL
|
|
@@ -341448,7 +341464,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
341448
341464
|
}
|
|
341449
341465
|
async function getDoctorDiagnostic() {
|
|
341450
341466
|
const installationType = await getCurrentInstallationType();
|
|
341451
|
-
const version2 = typeof MACRO !== "undefined" ? "1.80.
|
|
341467
|
+
const version2 = typeof MACRO !== "undefined" ? "1.80.9" : "unknown";
|
|
341452
341468
|
const installationPath = await getInstallationPath();
|
|
341453
341469
|
const invokedBinary = getInvokedBinary();
|
|
341454
341470
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -342383,8 +342399,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
342383
342399
|
const maxVersion = await getMaxVersion();
|
|
342384
342400
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
342385
342401
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
342386
|
-
if (gte("1.80.
|
|
342387
|
-
logForDebugging(`Native installer: current version ${"1.80.
|
|
342402
|
+
if (gte("1.80.9", maxVersion)) {
|
|
342403
|
+
logForDebugging(`Native installer: current version ${"1.80.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
342388
342404
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
342389
342405
|
latency_ms: Date.now() - startTime,
|
|
342390
342406
|
max_version: maxVersion,
|
|
@@ -342395,7 +342411,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
342395
342411
|
version2 = maxVersion;
|
|
342396
342412
|
}
|
|
342397
342413
|
}
|
|
342398
|
-
if (!forceReinstall && version2 === "1.80.
|
|
342414
|
+
if (!forceReinstall && version2 === "1.80.9" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
342399
342415
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
342400
342416
|
logEvent("tengu_native_update_complete", {
|
|
342401
342417
|
latency_ms: Date.now() - startTime,
|
|
@@ -406705,7 +406721,7 @@ async function getPrompt9(agentDefinitions, isCoordinator, allowedAgentTypes) {
|
|
|
406705
406721
|
## When to fork
|
|
406706
406722
|
|
|
406707
406723
|
Fork yourself (omit \`subagent_type\`) when the intermediate tool output isn't worth keeping in your context. The criterion is qualitative \u2014 "will I need this output again" \u2014 not task size.
|
|
406708
|
-
- **Research**: fork open-ended questions
|
|
406724
|
+
- **Research after tasks exist**: fork open-ended questions when inherited context is valuable. Before an actionable task exists, use the shipped \`Explore\` agent instead; a fork or general-purpose agent is write-capable and will be task-gated. If research can be broken into independent questions, launch parallel \`Explore\` agents in one message.
|
|
406709
406725
|
- **Implementation**: fork only a bounded branch with explicit file scope. Parallel implementation forks must use isolated worktrees based on the exact clean starting revision; otherwise keep shared-checkout writers sequential. Do research before jumping to implementation.
|
|
406710
406726
|
|
|
406711
406727
|
Forks are cheap because they share your prompt cache. Don't set \`model\` on a fork \u2014 a different model can't reuse the parent's cache. Pass a short \`name\` (one or two words, lowercase) so the user can see the fork in the teams panel and steer it mid-run.
|
|
@@ -413051,7 +413067,7 @@ function isAnyTracingEnabled() {
|
|
|
413051
413067
|
return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
|
|
413052
413068
|
}
|
|
413053
413069
|
function getTracer() {
|
|
413054
|
-
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.
|
|
413070
|
+
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.80.9");
|
|
413055
413071
|
}
|
|
413056
413072
|
function createSpanAttributes(spanType, customAttributes = {}) {
|
|
413057
413073
|
const baseAttributes = getTelemetryAttributes();
|
|
@@ -414843,6 +414859,16 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
414843
414859
|
}
|
|
414844
414860
|
}
|
|
414845
414861
|
}
|
|
414862
|
+
if (parsedInput.success && (tool.name === AGENT_TOOL_NAME || tool.name === LEGACY_AGENT_TOOL_NAME)) {
|
|
414863
|
+
const normalizedDelegation = normalizeReadOnlyResearchDelegation(parsedInput.data, toolUseContext.options.agentDefinitions.activeAgents, Boolean(toolUseContext.agentId));
|
|
414864
|
+
if (normalizedDelegation !== parsedInput.data) {
|
|
414865
|
+
input = normalizedDelegation;
|
|
414866
|
+
parsedInput = tool.inputSchema.safeParse(input);
|
|
414867
|
+
logEvent("tengu_agent_read_only_research_normalized", {
|
|
414868
|
+
toolName: sanitizeToolNameForAnalytics(tool.name)
|
|
414869
|
+
});
|
|
414870
|
+
}
|
|
414871
|
+
}
|
|
414846
414872
|
let callSig = callSignature(tool.name, input, repeatedFailureScope(toolUseContext, messageId));
|
|
414847
414873
|
const repeat2 = checkRepeatedFailure(callSig);
|
|
414848
414874
|
if (repeat2.action !== "allow") {
|
|
@@ -443170,7 +443196,7 @@ function Feedback({
|
|
|
443170
443196
|
platform: env2.platform,
|
|
443171
443197
|
gitRepo: envInfo.isGit,
|
|
443172
443198
|
terminal: env2.terminal,
|
|
443173
|
-
version: "1.80.
|
|
443199
|
+
version: "1.80.9",
|
|
443174
443200
|
transcript: normalizeMessagesForAPI(messages),
|
|
443175
443201
|
errors: sanitizedErrors,
|
|
443176
443202
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -443362,7 +443388,7 @@ function Feedback({
|
|
|
443362
443388
|
", ",
|
|
443363
443389
|
env2.terminal,
|
|
443364
443390
|
", v",
|
|
443365
|
-
"1.80.
|
|
443391
|
+
"1.80.9"
|
|
443366
443392
|
]
|
|
443367
443393
|
}, undefined, true, undefined, this)
|
|
443368
443394
|
]
|
|
@@ -443468,7 +443494,7 @@ ${sanitizedDescription}
|
|
|
443468
443494
|
` + `**Environment Info**
|
|
443469
443495
|
` + `- Platform: ${env2.platform}
|
|
443470
443496
|
` + `- Terminal: ${env2.terminal}
|
|
443471
|
-
` + `- Version: ${"1.80.
|
|
443497
|
+
` + `- Version: ${"1.80.9"}
|
|
443472
443498
|
` + `- Feedback ID: ${feedbackId}
|
|
443473
443499
|
` + `
|
|
443474
443500
|
**Errors**
|
|
@@ -446578,7 +446604,7 @@ function buildPrimarySection() {
|
|
|
446578
446604
|
}, undefined, false, undefined, this);
|
|
446579
446605
|
return [{
|
|
446580
446606
|
label: "Version",
|
|
446581
|
-
value: "1.80.
|
|
446607
|
+
value: "1.80.9"
|
|
446582
446608
|
}, {
|
|
446583
446609
|
label: "Session name",
|
|
446584
446610
|
value: nameValue
|
|
@@ -449960,7 +449986,7 @@ function Config({
|
|
|
449960
449986
|
}
|
|
449961
449987
|
}, undefined, false, undefined, this)
|
|
449962
449988
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
449963
|
-
currentVersion: "1.80.
|
|
449989
|
+
currentVersion: "1.80.9",
|
|
449964
449990
|
onChoice: (choice) => {
|
|
449965
449991
|
setShowSubmenu(null);
|
|
449966
449992
|
setTabsHidden(false);
|
|
@@ -449972,7 +449998,7 @@ function Config({
|
|
|
449972
449998
|
autoUpdatesChannel: "stable"
|
|
449973
449999
|
};
|
|
449974
450000
|
if (choice === "stay") {
|
|
449975
|
-
newSettings.minimumVersion = "1.80.
|
|
450001
|
+
newSettings.minimumVersion = "1.80.9";
|
|
449976
450002
|
}
|
|
449977
450003
|
updateSettingsForSource("userSettings", newSettings);
|
|
449978
450004
|
setSettingsData((prev_27) => ({
|
|
@@ -458281,7 +458307,7 @@ function HelpV2(t0) {
|
|
|
458281
458307
|
let t6;
|
|
458282
458308
|
if ($2[31] !== tabs) {
|
|
458283
458309
|
t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
|
|
458284
|
-
title: `UR v${"1.80.
|
|
458310
|
+
title: `UR v${"1.80.9"}`,
|
|
458285
458311
|
color: "professionalBlue",
|
|
458286
458312
|
defaultTab: "general",
|
|
458287
458313
|
children: tabs
|
|
@@ -459214,7 +459240,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
|
|
|
459214
459240
|
async function handleInitialize(options2) {
|
|
459215
459241
|
return {
|
|
459216
459242
|
name: "UR",
|
|
459217
|
-
version: "1.80.
|
|
459243
|
+
version: "1.80.9",
|
|
459218
459244
|
protocolVersion: "0.1.0",
|
|
459219
459245
|
workspaceRoot: options2.cwd,
|
|
459220
459246
|
capabilities: {
|
|
@@ -476322,7 +476348,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
476322
476348
|
return [];
|
|
476323
476349
|
}
|
|
476324
476350
|
}
|
|
476325
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.
|
|
476351
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.9") {
|
|
476326
476352
|
if (process.env.USER_TYPE === "ant") {
|
|
476327
476353
|
const changelog = "";
|
|
476328
476354
|
if (changelog) {
|
|
@@ -476349,7 +476375,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.80.7")
|
|
|
476349
476375
|
releaseNotes
|
|
476350
476376
|
};
|
|
476351
476377
|
}
|
|
476352
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.
|
|
476378
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.80.9") {
|
|
476353
476379
|
if (process.env.USER_TYPE === "ant") {
|
|
476354
476380
|
const changelog = "";
|
|
476355
476381
|
if (changelog) {
|
|
@@ -479254,7 +479280,7 @@ function getRecentActivitySync() {
|
|
|
479254
479280
|
return cachedActivity;
|
|
479255
479281
|
}
|
|
479256
479282
|
function getLogoDisplayData() {
|
|
479257
|
-
const version2 = process.env.DEMO_VERSION ?? "1.80.
|
|
479283
|
+
const version2 = process.env.DEMO_VERSION ?? "1.80.9";
|
|
479258
479284
|
const serverUrl = getDirectConnectServerUrl();
|
|
479259
479285
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
|
|
479260
479286
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -480122,7 +480148,7 @@ function LogoV2() {
|
|
|
480122
480148
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
480123
480149
|
t2 = () => {
|
|
480124
480150
|
const currentConfig = getGlobalConfig();
|
|
480125
|
-
if (currentConfig.lastReleaseNotesSeen === "1.80.
|
|
480151
|
+
if (currentConfig.lastReleaseNotesSeen === "1.80.9") {
|
|
480126
480152
|
return;
|
|
480127
480153
|
}
|
|
480128
480154
|
saveGlobalConfig(_temp325);
|
|
@@ -480807,12 +480833,12 @@ function LogoV2() {
|
|
|
480807
480833
|
return t41;
|
|
480808
480834
|
}
|
|
480809
480835
|
function _temp325(current) {
|
|
480810
|
-
if (current.lastReleaseNotesSeen === "1.80.
|
|
480836
|
+
if (current.lastReleaseNotesSeen === "1.80.9") {
|
|
480811
480837
|
return current;
|
|
480812
480838
|
}
|
|
480813
480839
|
return {
|
|
480814
480840
|
...current,
|
|
480815
|
-
lastReleaseNotesSeen: "1.80.
|
|
480841
|
+
lastReleaseNotesSeen: "1.80.9"
|
|
480816
480842
|
};
|
|
480817
480843
|
}
|
|
480818
480844
|
function _temp241(s_0) {
|
|
@@ -496904,7 +496930,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
|
|
|
496904
496930
|
if (spec.name !== specName) {
|
|
496905
496931
|
throw new Error("Agentic CI workflow spec name does not match");
|
|
496906
496932
|
}
|
|
496907
|
-
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.
|
|
496933
|
+
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.80.9" : "1.80.9");
|
|
496908
496934
|
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
|
|
496909
496935
|
throw new Error("invalid ur-agent package version");
|
|
496910
496936
|
}
|
|
@@ -497897,7 +497923,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
|
|
|
497897
497923
|
path: ".github/workflows/ur.yml",
|
|
497898
497924
|
root: "project",
|
|
497899
497925
|
content: compileAgenticCiWorkflow("default", {
|
|
497900
|
-
packageVersion: typeof MACRO !== "undefined" ? "1.80.
|
|
497926
|
+
packageVersion: typeof MACRO !== "undefined" ? "1.80.9" : "1.80.9"
|
|
497901
497927
|
})
|
|
497902
497928
|
},
|
|
497903
497929
|
{
|
|
@@ -497960,7 +497986,7 @@ function value(tokens, flag) {
|
|
|
497960
497986
|
return index2 >= 0 ? tokens[index2 + 1] : undefined;
|
|
497961
497987
|
}
|
|
497962
497988
|
function cliVersion() {
|
|
497963
|
-
return typeof MACRO !== "undefined" ? "1.80.
|
|
497989
|
+
return typeof MACRO !== "undefined" ? "1.80.9" : "1.80.9";
|
|
497964
497990
|
}
|
|
497965
497991
|
function workflowPath(cwd2) {
|
|
497966
497992
|
return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
|
|
@@ -503816,7 +503842,7 @@ function createAcpStdioApp(deps) {
|
|
|
503816
503842
|
}
|
|
503817
503843
|
},
|
|
503818
503844
|
authMethods: [],
|
|
503819
|
-
agentInfo: { name: "UR-Nexus", version: "1.80.
|
|
503845
|
+
agentInfo: { name: "UR-Nexus", version: "1.80.9" }
|
|
503820
503846
|
})).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
|
|
503821
503847
|
const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
|
|
503822
503848
|
await runtime2.announce({
|
|
@@ -503913,7 +503939,7 @@ function createAcpStdioAgent(deps) {
|
|
|
503913
503939
|
}
|
|
503914
503940
|
},
|
|
503915
503941
|
authMethods: [],
|
|
503916
|
-
agentInfo: { name: "UR-Nexus", version: "1.80.
|
|
503942
|
+
agentInfo: { name: "UR-Nexus", version: "1.80.9" }
|
|
503917
503943
|
});
|
|
503918
503944
|
return;
|
|
503919
503945
|
case "authenticate":
|
|
@@ -715139,7 +715165,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
715139
715165
|
smapsRollup,
|
|
715140
715166
|
platform: process.platform,
|
|
715141
715167
|
nodeVersion: process.version,
|
|
715142
|
-
ccVersion: "1.80.
|
|
715168
|
+
ccVersion: "1.80.9"
|
|
715143
715169
|
};
|
|
715144
715170
|
}
|
|
715145
715171
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -715728,7 +715754,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
715728
715754
|
var call154 = async () => {
|
|
715729
715755
|
return {
|
|
715730
715756
|
type: "text",
|
|
715731
|
-
value: "1.80.
|
|
715757
|
+
value: "1.80.9"
|
|
715732
715758
|
};
|
|
715733
715759
|
}, version2, version_default;
|
|
715734
715760
|
var init_version = __esm(() => {
|
|
@@ -726971,7 +726997,7 @@ function generateHtmlReport(data, insights) {
|
|
|
726971
726997
|
</html>`;
|
|
726972
726998
|
}
|
|
726973
726999
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
726974
|
-
const version3 = typeof MACRO !== "undefined" ? "1.80.
|
|
727000
|
+
const version3 = typeof MACRO !== "undefined" ? "1.80.9" : "unknown";
|
|
726975
727001
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
726976
727002
|
const facets_summary = {
|
|
726977
727003
|
total: facets.size,
|
|
@@ -731284,7 +731310,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
731284
731310
|
init_settings2();
|
|
731285
731311
|
init_slowOperations();
|
|
731286
731312
|
init_uuid();
|
|
731287
|
-
VERSION7 = typeof MACRO !== "undefined" ? "1.80.
|
|
731313
|
+
VERSION7 = typeof MACRO !== "undefined" ? "1.80.9" : "unknown";
|
|
731288
731314
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
731289
731315
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
731290
731316
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -732499,7 +732525,7 @@ var init_filesystem = __esm(() => {
|
|
|
732499
732525
|
});
|
|
732500
732526
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
732501
732527
|
const nonce = randomBytes24(16).toString("hex");
|
|
732502
|
-
return join243(getURTempDir(), "bundled-skills", "1.80.
|
|
732528
|
+
return join243(getURTempDir(), "bundled-skills", "1.80.9", nonce);
|
|
732503
732529
|
});
|
|
732504
732530
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
732505
732531
|
});
|
|
@@ -738119,7 +738145,7 @@ function getOllamaToolDisciplineSection() {
|
|
|
738119
738145
|
}
|
|
738120
738146
|
function getAgentToolSection() {
|
|
738121
738147
|
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.`;
|
|
738122
|
-
return `${launch} For a large request, first create a bounded task list, then delegate at most one ready independent branch per agent.
|
|
738148
|
+
return `${launch} For a large request, first create a bounded task list, then delegate at most one ready independent branch per agent. Before that list exists, read-only research, audits, and exploration MUST use subagent_type="Explore" (or "Plan" for planning); never label a read-only worker general-purpose. Every custom, general-purpose, 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.`;
|
|
738123
738149
|
}
|
|
738124
738150
|
function getDiscoverSkillsGuidance() {
|
|
738125
738151
|
if (false) {}
|
|
@@ -738889,7 +738915,7 @@ function computeFingerprint(messageText2, version3) {
|
|
|
738889
738915
|
}
|
|
738890
738916
|
function computeFingerprintFromMessages(messages) {
|
|
738891
738917
|
const firstMessageText = extractFirstMessageText(messages);
|
|
738892
|
-
return computeFingerprint(firstMessageText, "1.80.
|
|
738918
|
+
return computeFingerprint(firstMessageText, "1.80.9");
|
|
738893
738919
|
}
|
|
738894
738920
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
738895
738921
|
var init_fingerprint = () => {};
|
|
@@ -740814,7 +740840,7 @@ async function sideQuery(opts) {
|
|
|
740814
740840
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
740815
740841
|
}
|
|
740816
740842
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
740817
|
-
const fingerprint2 = computeFingerprint(messageText2, "1.80.
|
|
740843
|
+
const fingerprint2 = computeFingerprint(messageText2, "1.80.9");
|
|
740818
740844
|
const attributionHeader = getAttributionHeader(fingerprint2);
|
|
740819
740845
|
const systemBlocks = [
|
|
740820
740846
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -745648,7 +745674,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
745648
745674
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
745649
745675
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
745650
745676
|
betas: getSdkBetas(),
|
|
745651
|
-
ur_version: "1.80.
|
|
745677
|
+
ur_version: "1.80.9",
|
|
745652
745678
|
output_style: outputStyle,
|
|
745653
745679
|
agents: inputs.agents.map((agent2) => agent2.agentType),
|
|
745654
745680
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -759484,7 +759510,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
759484
759510
|
function getSemverPart(version3) {
|
|
759485
759511
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
759486
759512
|
}
|
|
759487
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.80.
|
|
759513
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.80.9") {
|
|
759488
759514
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
|
|
759489
759515
|
if (!updatedVersion) {
|
|
759490
759516
|
return null;
|
|
@@ -759533,7 +759559,7 @@ function AutoUpdater({
|
|
|
759533
759559
|
return;
|
|
759534
759560
|
}
|
|
759535
759561
|
if (false) {}
|
|
759536
|
-
const currentVersion = "1.80.
|
|
759562
|
+
const currentVersion = "1.80.9";
|
|
759537
759563
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
759538
759564
|
let latestVersion = await getLatestVersion(channel);
|
|
759539
759565
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -759762,12 +759788,12 @@ function NativeAutoUpdater({
|
|
|
759762
759788
|
logEvent("tengu_native_auto_updater_start", {});
|
|
759763
759789
|
try {
|
|
759764
759790
|
const maxVersion = await getMaxVersion();
|
|
759765
|
-
if (maxVersion && gt("1.80.
|
|
759791
|
+
if (maxVersion && gt("1.80.9", maxVersion)) {
|
|
759766
759792
|
const msg = await getMaxVersionMessage();
|
|
759767
759793
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
759768
759794
|
}
|
|
759769
759795
|
const result = await installLatest(channel);
|
|
759770
|
-
const currentVersion = "1.80.
|
|
759796
|
+
const currentVersion = "1.80.9";
|
|
759771
759797
|
const latencyMs = Date.now() - startTime;
|
|
759772
759798
|
if (result.lockFailed) {
|
|
759773
759799
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -759904,17 +759930,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
759904
759930
|
const maxVersion = await getMaxVersion();
|
|
759905
759931
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
759906
759932
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
759907
|
-
if (gte("1.80.
|
|
759908
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.
|
|
759933
|
+
if (gte("1.80.9", maxVersion)) {
|
|
759934
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.80.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
759909
759935
|
setUpdateAvailable(false);
|
|
759910
759936
|
return;
|
|
759911
759937
|
}
|
|
759912
759938
|
latest = maxVersion;
|
|
759913
759939
|
}
|
|
759914
|
-
const hasUpdate = latest && !gte("1.80.
|
|
759940
|
+
const hasUpdate = latest && !gte("1.80.9", latest) && !shouldSkipVersion(latest);
|
|
759915
759941
|
setUpdateAvailable(!!hasUpdate);
|
|
759916
759942
|
if (hasUpdate) {
|
|
759917
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.
|
|
759943
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.80.9"} -> ${latest}`);
|
|
759918
759944
|
}
|
|
759919
759945
|
};
|
|
759920
759946
|
$2[0] = t1;
|
|
@@ -759948,7 +759974,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
759948
759974
|
wrap: "truncate",
|
|
759949
759975
|
children: [
|
|
759950
759976
|
"currentVersion: ",
|
|
759951
|
-
"1.80.
|
|
759977
|
+
"1.80.9"
|
|
759952
759978
|
]
|
|
759953
759979
|
}, undefined, true, undefined, this);
|
|
759954
759980
|
$2[3] = verbose;
|
|
@@ -770801,7 +770827,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
770801
770827
|
project_dir: getOriginalCwd(),
|
|
770802
770828
|
added_dirs: addedDirs
|
|
770803
770829
|
},
|
|
770804
|
-
version: "1.80.
|
|
770830
|
+
version: "1.80.9",
|
|
770805
770831
|
output_style: {
|
|
770806
770832
|
name: outputStyleName
|
|
770807
770833
|
},
|
|
@@ -770936,7 +770962,7 @@ function StatusLineInner({
|
|
|
770936
770962
|
const attention = customStatusError ?? taskAttention;
|
|
770937
770963
|
const terminalSize = React133.useContext(TerminalSizeContext);
|
|
770938
770964
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
770939
|
-
version: "1.80.
|
|
770965
|
+
version: "1.80.9",
|
|
770940
770966
|
providerLabel: providerRuntime.providerLabel,
|
|
770941
770967
|
authMode: providerRuntime.authLabel,
|
|
770942
770968
|
model: renderModelName(mainLoopModel) || providerRuntime.model || "",
|
|
@@ -783191,7 +783217,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
783191
783217
|
} catch {}
|
|
783192
783218
|
const data = {
|
|
783193
783219
|
trigger: trigger2,
|
|
783194
|
-
version: "1.80.
|
|
783220
|
+
version: "1.80.9",
|
|
783195
783221
|
platform: process.platform,
|
|
783196
783222
|
transcript,
|
|
783197
783223
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -795560,7 +795586,7 @@ function WelcomeV2() {
|
|
|
795560
795586
|
dimColor: true,
|
|
795561
795587
|
children: [
|
|
795562
795588
|
"v",
|
|
795563
|
-
"1.80.
|
|
795589
|
+
"1.80.9"
|
|
795564
795590
|
]
|
|
795565
795591
|
}, undefined, true, undefined, this)
|
|
795566
795592
|
]
|
|
@@ -796820,7 +796846,7 @@ function completeOnboarding() {
|
|
|
796820
796846
|
saveGlobalConfig((current) => ({
|
|
796821
796847
|
...current,
|
|
796822
796848
|
hasCompletedOnboarding: true,
|
|
796823
|
-
lastOnboardingVersion: "1.80.
|
|
796849
|
+
lastOnboardingVersion: "1.80.9"
|
|
796824
796850
|
}));
|
|
796825
796851
|
}
|
|
796826
796852
|
function showDialog(root2, renderer) {
|
|
@@ -801966,7 +801992,7 @@ function appendToLog(path28, message) {
|
|
|
801966
801992
|
cwd: getFsImplementation().cwd(),
|
|
801967
801993
|
userType: process.env.USER_TYPE,
|
|
801968
801994
|
sessionId: getSessionId(),
|
|
801969
|
-
version: "1.80.
|
|
801995
|
+
version: "1.80.9"
|
|
801970
801996
|
};
|
|
801971
801997
|
getLogWriter(path28).write(messageWithTimestamp);
|
|
801972
801998
|
}
|
|
@@ -806130,8 +806156,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
806130
806156
|
}
|
|
806131
806157
|
async function checkEnvLessBridgeMinVersion() {
|
|
806132
806158
|
const cfg = await getEnvLessBridgeConfig();
|
|
806133
|
-
if (cfg.min_version && lt("1.80.
|
|
806134
|
-
return `Your version of UR (${"1.80.
|
|
806159
|
+
if (cfg.min_version && lt("1.80.9", cfg.min_version)) {
|
|
806160
|
+
return `Your version of UR (${"1.80.9"}) is too old for Remote Control.
|
|
806135
806161
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
806136
806162
|
}
|
|
806137
806163
|
return null;
|
|
@@ -806605,7 +806631,7 @@ async function initBridgeCore(params) {
|
|
|
806605
806631
|
const rawApi = createBridgeApiClient({
|
|
806606
806632
|
baseUrl,
|
|
806607
806633
|
getAccessToken,
|
|
806608
|
-
runnerVersion: "1.80.
|
|
806634
|
+
runnerVersion: "1.80.9",
|
|
806609
806635
|
onDebug: logForDebugging,
|
|
806610
806636
|
onAuth401,
|
|
806611
806637
|
getTrustedDeviceToken
|
|
@@ -816078,7 +816104,7 @@ function getAgUiCapabilities() {
|
|
|
816078
816104
|
name: "UR-Nexus",
|
|
816079
816105
|
type: "ur-nexus",
|
|
816080
816106
|
description: "Provider-flexible, local-first autonomous engineering workflow agent.",
|
|
816081
|
-
version: "1.80.
|
|
816107
|
+
version: "1.80.9",
|
|
816082
816108
|
provider: "UR",
|
|
816083
816109
|
documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
|
|
816084
816110
|
},
|
|
@@ -817305,7 +817331,7 @@ function createMCPServer(cwd4, debug2, verbose) {
|
|
|
817305
817331
|
};
|
|
817306
817332
|
const server2 = new Server({
|
|
817307
817333
|
name: "ur-nexus",
|
|
817308
|
-
version: "1.80.
|
|
817334
|
+
version: "1.80.9"
|
|
817309
817335
|
}, {
|
|
817310
817336
|
capabilities: {
|
|
817311
817337
|
tools: {}
|
|
@@ -818509,7 +818535,7 @@ function thrownResponse(error40) {
|
|
|
818509
818535
|
}
|
|
818510
818536
|
async function createUrMcp2026Runtime(options5) {
|
|
818511
818537
|
const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
|
|
818512
|
-
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.
|
|
818538
|
+
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.80.9" }, { capabilities: {} });
|
|
818513
818539
|
const [clientTransport, serverTransport] = createLinkedTransportPair();
|
|
818514
818540
|
try {
|
|
818515
818541
|
await server2.connect(serverTransport);
|
|
@@ -818520,7 +818546,7 @@ async function createUrMcp2026Runtime(options5) {
|
|
|
818520
818546
|
}
|
|
818521
818547
|
const runtime2 = new Mcp2026Runtime({
|
|
818522
818548
|
cwd: options5.cwd,
|
|
818523
|
-
version: "1.80.
|
|
818549
|
+
version: "1.80.9",
|
|
818524
818550
|
backend: {
|
|
818525
818551
|
listTools: async () => {
|
|
818526
818552
|
const listed = await client2.listTools();
|
|
@@ -821255,7 +821281,7 @@ async function update() {
|
|
|
821255
821281
|
logEvent("tengu_update_check", {});
|
|
821256
821282
|
const diagnostic2 = await getDoctorDiagnostic();
|
|
821257
821283
|
const result = await checkUpgradeStatus({
|
|
821258
|
-
currentVersion: "1.80.
|
|
821284
|
+
currentVersion: "1.80.9",
|
|
821259
821285
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
821260
821286
|
installationType: diagnostic2.installationType,
|
|
821261
821287
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -822583,7 +822609,7 @@ ${customInstructions}` : customInstructions;
|
|
|
822583
822609
|
}
|
|
822584
822610
|
}
|
|
822585
822611
|
logForDiagnosticsNoPII("info", "started", {
|
|
822586
|
-
version: "1.80.
|
|
822612
|
+
version: "1.80.9",
|
|
822587
822613
|
is_native_binary: isInBundledMode()
|
|
822588
822614
|
});
|
|
822589
822615
|
registerCleanup(async () => {
|
|
@@ -823370,7 +823396,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
823370
823396
|
pendingHookMessages
|
|
823371
823397
|
}, renderAndRun);
|
|
823372
823398
|
}
|
|
823373
|
-
}).version("1.80.
|
|
823399
|
+
}).version("1.80.9 (UR-Nexus)", "-v, --version", "Output the version number");
|
|
823374
823400
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
823375
823401
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
823376
823402
|
if (canUserConfigureAdvisor()) {
|
|
@@ -824497,7 +824523,7 @@ if (false) {}
|
|
|
824497
824523
|
async function main2() {
|
|
824498
824524
|
const args = process.argv.slice(2);
|
|
824499
824525
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
824500
|
-
console.log(`${"1.80.
|
|
824526
|
+
console.log(`${"1.80.9"} (UR-Nexus)`);
|
|
824501
824527
|
return;
|
|
824502
824528
|
}
|
|
824503
824529
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
package/docs/AGENT_FEATURES.md
CHANGED
|
@@ -9,6 +9,18 @@ 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.9 Addition
|
|
13
|
+
|
|
14
|
+
| Addition | Surface | What it adds |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Research-only intent recovery | Shared Agent execution gate | Handles providers that retain a pure research/report brief but omit the caller's “read-only” wording. The call is reduced to shipped Explore capabilities; any implementation or mutation directive remains task-gated. |
|
|
17
|
+
|
|
18
|
+
## v1.80.8 Addition
|
|
19
|
+
|
|
20
|
+
| Addition | Surface | What it adds |
|
|
21
|
+
| --- | --- | --- |
|
|
22
|
+
| Provider-independent research routing | Shared Agent prompt and execution gate | Directs every model family to use the shipped `Explore` worker for task-free read-only research. If a model still labels an explicitly read-only research brief `general-purpose`, UR reduces it to protected Explore capabilities before task gating; write-capable and custom delegation remains gated. |
|
|
23
|
+
|
|
12
24
|
## v1.80.7 Additions
|
|
13
25
|
|
|
14
26
|
| Addition | Surface | What it adds |
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -60,7 +60,12 @@ gated, because they could not satisfy the requirement. The main session may
|
|
|
60
60
|
launch UR's shipped `Explore` and `Plan` agents before a task exists in any
|
|
61
61
|
permission mode. These exact built-in definitions are forced read-only; custom,
|
|
62
62
|
write-capable, nested, named/team, and worktree delegation still requires an
|
|
63
|
-
actionable parent task.
|
|
63
|
+
actionable parent task. As provider-independent compatibility, an unnamed
|
|
64
|
+
main-session `general-purpose` call is reduced to the shipped Explore definition
|
|
65
|
+
when its brief is explicitly read-only research or is unambiguously limited to
|
|
66
|
+
research and reporting. Any implementation, test, command-execution,
|
|
67
|
+
installation, or workspace-mutation directive keeps the call gated. It never
|
|
68
|
+
receives general-purpose tools through this path.
|
|
64
69
|
|
|
65
70
|
## Model Providers
|
|
66
71
|
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -102,6 +102,17 @@ ur provider status
|
|
|
102
102
|
agents without a parent task: create the requested tasks or finish and
|
|
103
103
|
approve the plan first. Disabling `tasks.requireBeforeChanges` is no longer
|
|
104
104
|
needed for normal plan mode.
|
|
105
|
+
- If an API, local, or subscription-CLI model still returns this error for an
|
|
106
|
+
explicitly read-only research brief on 1.80.7, upgrade to 1.80.8. Some models
|
|
107
|
+
emitted `subagent_type: "general-purpose"` despite the read-only instruction.
|
|
108
|
+
UR 1.80.8 routes that narrow contract to the protected Explore worker before
|
|
109
|
+
the gate. A real general-purpose or implementation worker is still expected
|
|
110
|
+
to require a task.
|
|
111
|
+
- If the model preserved only the research/report instructions and omitted the
|
|
112
|
+
words “read-only,” upgrade to 1.80.9. UR recognizes that remaining provider
|
|
113
|
+
shape without relying on a specific model name. Prompts that also direct
|
|
114
|
+
implementation, testing, command execution, or file changes remain blocked
|
|
115
|
+
until an actionable task exists.
|
|
105
116
|
|
|
106
117
|
### Ollama stops with `unavailable tool "WebSearch"`
|
|
107
118
|
|
package/docs/USAGE.md
CHANGED
|
@@ -473,9 +473,14 @@ the exact plan file for the active session while the rest of the workspace
|
|
|
473
473
|
remains read-only. In any permission mode, the main session may delegate early
|
|
474
474
|
research to UR's shipped `Explore` and `Plan` agents before tasks exist. Those
|
|
475
475
|
two definitions are mechanically forced into plan permission mode even when
|
|
476
|
-
the parent is in Accept Edits or Approve All.
|
|
477
|
-
|
|
478
|
-
|
|
476
|
+
the parent is in Accept Edits or Approve All. Models are instructed to select
|
|
477
|
+
`subagent_type="Explore"` for this work. If a provider still labels an explicit
|
|
478
|
+
read-only brief—or an unambiguous research-and-report-only brief—
|
|
479
|
+
`general-purpose`, UR reduces that main-session call to the shipped Explore
|
|
480
|
+
definition before gating. A brief that also directs implementation, testing,
|
|
481
|
+
command execution, or workspace changes remains task-gated. Ordinary
|
|
482
|
+
general-purpose work, custom overrides, nested agents, named/team workers,
|
|
483
|
+
worktrees, and cwd overrides still require an actionable parent task. When the user approves the plan,
|
|
479
484
|
`ExitPlanMode` preserves any existing actionable board or creates a bounded set
|
|
480
485
|
of professional, deduplicated implementation tasks plus a verification task
|
|
481
486
|
that depends on them. Implementation therefore starts with visible tracking
|
package/docs/VALIDATION.md
CHANGED
|
@@ -19,18 +19,24 @@ 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.9 (UR-Nexus)"
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
### 0.0 Read-only research delegation starts cleanly (1.80.
|
|
25
|
+
### 0.0 Read-only research delegation starts cleanly (1.80.9)
|
|
26
26
|
|
|
27
27
|
Start an interactive session with task enforcement enabled and ask UR to
|
|
28
28
|
research a change, both normally and from Plan Mode. Before any task exists,
|
|
29
29
|
built-in `Explore` and `Plan` agent calls should initialize without
|
|
30
30
|
`TaskListRequired`. Their workers remain read-only even when the parent uses
|
|
31
|
-
Accept Edits or Approve All. Custom
|
|
32
|
-
blocked until they have an actionable parent task.
|
|
33
|
-
|
|
31
|
+
Accept Edits or Approve All. Custom agents and ordinary general-purpose agents
|
|
32
|
+
should remain blocked until they have an actionable parent task.
|
|
33
|
+
|
|
34
|
+
Repeat with multiple available model families. A model may correctly emit
|
|
35
|
+
`subagent_type: "Explore"`; if it instead emits `general-purpose` with an
|
|
36
|
+
explicit read-only brief or a pure research/report-only brief, UR must safely
|
|
37
|
+
reduce it to Explore and start without a failed `TaskListRequired` attempt. A
|
|
38
|
+
brief that also requests implementation, tests, command execution, or file
|
|
39
|
+
changes must remain blocked. The deterministic regressions are:
|
|
34
40
|
|
|
35
41
|
```sh
|
|
36
42
|
bun test test/taskListGate.test.ts test/toolExecutionFinalInput.test.ts
|
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.9</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.9",
|
|
6
6
|
"publisher": "ur-nexus",
|
|
7
7
|
"engines": {
|
|
8
8
|
"vscode": "^1.92.0"
|
package/package.json
CHANGED