ur-agent 1.62.0 → 1.64.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.64.0
|
|
4
|
+
|
|
5
|
+
- Tool-result pruning now announces itself. It changed context silently, so
|
|
6
|
+
there was no way to confirm it fired or to attribute a missing detail to it —
|
|
7
|
+
the same defect memory suggestions had when they went to stderr. A prune now
|
|
8
|
+
prints what it removed and how many tokens that freed.
|
|
9
|
+
- Corrected the fan-out drill, which tested the wrong limit. Asking for 30
|
|
10
|
+
subagents in one turn cannot reach `agents.maxConcurrent`, because
|
|
11
|
+
`MAX_CONCURRENT_TOOLS` caps a single turn at 8 — so the run reported an
|
|
12
|
+
unrelated cap and I mistook that for the governor being unreachable. It is
|
|
13
|
+
reachable by nesting: 8 roots, each spawning more, hits 20 and fires naming
|
|
14
|
+
the setting. The drill now exercises that path.
|
|
15
|
+
- Added a manual drill for tool-result pruning. It only fires inside a live
|
|
16
|
+
query loop, so no automated drill can reach it.
|
|
17
|
+
- Added opt-in signing of the memory integrity manifest via
|
|
18
|
+
`UR_MEMORY_INTEGRITY_KEY`. Unsigned, anyone who can write a memory file can
|
|
19
|
+
rewrite the manifest to match and pass verification; the HMAC raises that to
|
|
20
|
+
needing the key. Off by default because a key stored beside the data it
|
|
21
|
+
protects is theatre.
|
|
22
|
+
- `verify` exits non-zero on an invalid signature — the first implementation
|
|
23
|
+
detected forgery and still exited 0, because a forged manifest updates the
|
|
24
|
+
digests so every tamper count reads zero. A manifest that is signed but
|
|
25
|
+
unverifiable also fails, rather than passing on an unperformed check.
|
|
26
|
+
|
|
27
|
+
## 1.63.0
|
|
28
|
+
|
|
29
|
+
- Added size-triggered pruning of superseded tool results
|
|
30
|
+
(`context.pruneToolResults`). UR already had the clearing machinery, but
|
|
31
|
+
nothing external could reach it: cached microcompact is internal-only and
|
|
32
|
+
returns unchanged messages in shipped builds, and the time-based trigger
|
|
33
|
+
needs an hour of idling *and* a GrowthBook flag that a local install never
|
|
34
|
+
receives. An active session therefore pruned nothing and ran until autocompact
|
|
35
|
+
replaced the whole history with a summary.
|
|
36
|
+
- Pruning fires only when it would free at least 20k tokens, because clearing
|
|
37
|
+
invalidates the cached prefix and a small cleanup costs more in cache misses
|
|
38
|
+
than it reclaims. Short sessions are untouched; a 40-read session frees ~64k.
|
|
39
|
+
- The most recent 8 compactable results are a protected zone and are never
|
|
40
|
+
cleared, so the model keeps the working set it is reasoning about.
|
|
41
|
+
`keepRecent` is floored at 1: clearing everything would leave no working
|
|
42
|
+
context, and `slice(-0)` would paradoxically keep all of it.
|
|
43
|
+
- Configured through settings rather than GrowthBook, so it can actually be
|
|
44
|
+
turned off or tuned.
|
|
45
|
+
|
|
3
46
|
## 1.62.0
|
|
4
47
|
|
|
5
48
|
- `ur agent-inspect --costs` now labels each row with what the agent was
|
package/dist/cli.js
CHANGED
|
@@ -75207,7 +75207,7 @@ var init_auth = __esm(() => {
|
|
|
75207
75207
|
|
|
75208
75208
|
// src/utils/userAgent.ts
|
|
75209
75209
|
function getURCodeUserAgent() {
|
|
75210
|
-
return `ur/${"1.
|
|
75210
|
+
return `ur/${"1.64.0"}`;
|
|
75211
75211
|
}
|
|
75212
75212
|
|
|
75213
75213
|
// src/utils/workloadContext.ts
|
|
@@ -75229,7 +75229,7 @@ function getUserAgent() {
|
|
|
75229
75229
|
const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
|
|
75230
75230
|
const workload = getWorkload();
|
|
75231
75231
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
75232
|
-
return `ur-cli/${"1.
|
|
75232
|
+
return `ur-cli/${"1.64.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
75233
75233
|
}
|
|
75234
75234
|
function getMCPUserAgent() {
|
|
75235
75235
|
const parts = [];
|
|
@@ -75243,7 +75243,7 @@ function getMCPUserAgent() {
|
|
|
75243
75243
|
parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
|
|
75244
75244
|
}
|
|
75245
75245
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
75246
|
-
return `ur/${"1.
|
|
75246
|
+
return `ur/${"1.64.0"}${suffix}`;
|
|
75247
75247
|
}
|
|
75248
75248
|
function getWebFetchUserAgent() {
|
|
75249
75249
|
return `UR-User (${getURCodeUserAgent()})`;
|
|
@@ -75381,7 +75381,7 @@ var init_user = __esm(() => {
|
|
|
75381
75381
|
deviceId,
|
|
75382
75382
|
sessionId: getSessionId(),
|
|
75383
75383
|
email: getEmail(),
|
|
75384
|
-
appVersion: "1.
|
|
75384
|
+
appVersion: "1.64.0",
|
|
75385
75385
|
platform: getHostPlatformForAnalytics(),
|
|
75386
75386
|
organizationUuid,
|
|
75387
75387
|
accountUuid,
|
|
@@ -83581,7 +83581,7 @@ var init_metadata = __esm(() => {
|
|
|
83581
83581
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
83582
83582
|
WHITESPACE_REGEX = /\s+/;
|
|
83583
83583
|
getVersionBase = memoize_default(() => {
|
|
83584
|
-
const match = "1.
|
|
83584
|
+
const match = "1.64.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
83585
83585
|
return match ? match[0] : undefined;
|
|
83586
83586
|
});
|
|
83587
83587
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -83621,7 +83621,7 @@ var init_metadata = __esm(() => {
|
|
|
83621
83621
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
83622
83622
|
isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
|
|
83623
83623
|
isURAiAuth: isURAISubscriber(),
|
|
83624
|
-
version: "1.
|
|
83624
|
+
version: "1.64.0",
|
|
83625
83625
|
versionBase: getVersionBase(),
|
|
83626
83626
|
buildTime: "",
|
|
83627
83627
|
deploymentEnvironment: env2.detectDeploymentEnvironment(),
|
|
@@ -84291,7 +84291,7 @@ function initialize1PEventLogging() {
|
|
|
84291
84291
|
const platform2 = getPlatform();
|
|
84292
84292
|
const attributes = {
|
|
84293
84293
|
[import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
|
|
84294
|
-
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.
|
|
84294
|
+
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.64.0"
|
|
84295
84295
|
};
|
|
84296
84296
|
if (platform2 === "wsl") {
|
|
84297
84297
|
const wslVersion = getWslVersion();
|
|
@@ -84319,7 +84319,7 @@ function initialize1PEventLogging() {
|
|
|
84319
84319
|
})
|
|
84320
84320
|
]
|
|
84321
84321
|
});
|
|
84322
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.
|
|
84322
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.64.0");
|
|
84323
84323
|
}
|
|
84324
84324
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
84325
84325
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -86838,6 +86838,13 @@ var init_types2 = __esm(() => {
|
|
|
86838
86838
|
name: exports_external.string().optional().describe("Synthesiser voice name"),
|
|
86839
86839
|
rate: exports_external.number().optional().describe("Words per minute")
|
|
86840
86840
|
}).optional().describe("Spoken output settings"),
|
|
86841
|
+
context: exports_external.object({
|
|
86842
|
+
pruneToolResults: exports_external.object({
|
|
86843
|
+
enabled: exports_external.boolean().optional(),
|
|
86844
|
+
minTokensFreed: exports_external.number().optional(),
|
|
86845
|
+
keepRecent: exports_external.number().optional()
|
|
86846
|
+
}).optional().describe("Size-triggered pruning of superseded tool results (old file reads, greps, shell output). " + "Prunes only when it would free at least minTokensFreed tokens, keeping the most recent " + "keepRecent results untouched. Less destructive than letting context fill until autocompact " + "replaces the whole history with a summary.")
|
|
86847
|
+
}).optional().describe("Context management behaviour."),
|
|
86841
86848
|
memory: exports_external.object({
|
|
86842
86849
|
suggest: exports_external.boolean().optional().describe("Propose durable facts after each turn"),
|
|
86843
86850
|
suggestMinConfidence: exports_external.number().optional().describe("Confidence floor for proposals (0-1, default 0.75)")
|
|
@@ -94158,7 +94165,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
|
|
|
94158
94165
|
function formatA2AAgentCard(options = {}, pretty = true) {
|
|
94159
94166
|
return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
|
|
94160
94167
|
}
|
|
94161
|
-
var urVersion = "1.
|
|
94168
|
+
var urVersion = "1.64.0", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
|
|
94162
94169
|
var init_trends = __esm(() => {
|
|
94163
94170
|
init_a2aCardSignature();
|
|
94164
94171
|
coverage = [
|
|
@@ -96961,7 +96968,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
96961
96968
|
if (!isAttributionHeaderEnabled()) {
|
|
96962
96969
|
return "";
|
|
96963
96970
|
}
|
|
96964
|
-
const version2 = `${"1.
|
|
96971
|
+
const version2 = `${"1.64.0"}.${fingerprint}`;
|
|
96965
96972
|
const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
|
|
96966
96973
|
const cch = "";
|
|
96967
96974
|
const workload = getWorkload();
|
|
@@ -145458,6 +145465,27 @@ var init_prompt7 = __esm(() => {
|
|
|
145458
145465
|
init_constants2();
|
|
145459
145466
|
});
|
|
145460
145467
|
|
|
145468
|
+
// src/services/compact/toolResultPruningConfig.ts
|
|
145469
|
+
function getToolResultPruningConfig() {
|
|
145470
|
+
const configured = getInitialSettings()?.context?.pruneToolResults;
|
|
145471
|
+
if (!configured)
|
|
145472
|
+
return TOOL_RESULT_PRUNING_DEFAULTS;
|
|
145473
|
+
return {
|
|
145474
|
+
enabled: typeof configured.enabled === "boolean" ? configured.enabled : TOOL_RESULT_PRUNING_DEFAULTS.enabled,
|
|
145475
|
+
minTokensFreed: typeof configured.minTokensFreed === "number" && Number.isFinite(configured.minTokensFreed) && configured.minTokensFreed >= 0 ? configured.minTokensFreed : TOOL_RESULT_PRUNING_DEFAULTS.minTokensFreed,
|
|
145476
|
+
keepRecent: typeof configured.keepRecent === "number" && Number.isInteger(configured.keepRecent) && configured.keepRecent >= 1 ? configured.keepRecent : TOOL_RESULT_PRUNING_DEFAULTS.keepRecent
|
|
145477
|
+
};
|
|
145478
|
+
}
|
|
145479
|
+
var TOOL_RESULT_PRUNING_DEFAULTS;
|
|
145480
|
+
var init_toolResultPruningConfig = __esm(() => {
|
|
145481
|
+
init_settings2();
|
|
145482
|
+
TOOL_RESULT_PRUNING_DEFAULTS = {
|
|
145483
|
+
enabled: true,
|
|
145484
|
+
minTokensFreed: 20000,
|
|
145485
|
+
keepRecent: 8
|
|
145486
|
+
};
|
|
145487
|
+
});
|
|
145488
|
+
|
|
145461
145489
|
// src/tools/PowerShellTool/toolName.ts
|
|
145462
145490
|
var POWERSHELL_TOOL_NAME = "PowerShell";
|
|
145463
145491
|
|
|
@@ -146338,6 +146366,10 @@ async function microcompactMessages(messages, toolUseContext, querySource) {
|
|
|
146338
146366
|
if (timeBasedResult) {
|
|
146339
146367
|
return timeBasedResult;
|
|
146340
146368
|
}
|
|
146369
|
+
const sizeBasedResult = maybeSizeBasedMicrocompact(messages, querySource);
|
|
146370
|
+
if (sizeBasedResult) {
|
|
146371
|
+
return sizeBasedResult;
|
|
146372
|
+
}
|
|
146341
146373
|
return { messages };
|
|
146342
146374
|
}
|
|
146343
146375
|
function evaluateTimeBasedTrigger(messages, querySource) {
|
|
@@ -146355,6 +146387,59 @@ function evaluateTimeBasedTrigger(messages, querySource) {
|
|
|
146355
146387
|
}
|
|
146356
146388
|
return { gapMinutes, config: config2 };
|
|
146357
146389
|
}
|
|
146390
|
+
function clearOldToolResults(messages, keepRecent) {
|
|
146391
|
+
const compactableIds = collectCompactableToolIds(messages);
|
|
146392
|
+
const keep = Math.max(1, keepRecent);
|
|
146393
|
+
const keepSet = new Set(compactableIds.slice(-keep));
|
|
146394
|
+
const clearSet = new Set(compactableIds.filter((id) => !keepSet.has(id)));
|
|
146395
|
+
if (clearSet.size === 0)
|
|
146396
|
+
return null;
|
|
146397
|
+
let tokensSaved = 0;
|
|
146398
|
+
const result = messages.map((message) => {
|
|
146399
|
+
if (message.type !== "user" || !Array.isArray(message.message.content)) {
|
|
146400
|
+
return message;
|
|
146401
|
+
}
|
|
146402
|
+
let touched = false;
|
|
146403
|
+
const newContent = message.message.content.map((block) => {
|
|
146404
|
+
if (block.type === "tool_result" && clearSet.has(block.tool_use_id) && block.content !== TIME_BASED_MC_CLEARED_MESSAGE) {
|
|
146405
|
+
tokensSaved += calculateToolResultTokens(block);
|
|
146406
|
+
touched = true;
|
|
146407
|
+
return { ...block, content: TIME_BASED_MC_CLEARED_MESSAGE };
|
|
146408
|
+
}
|
|
146409
|
+
return block;
|
|
146410
|
+
});
|
|
146411
|
+
if (!touched)
|
|
146412
|
+
return message;
|
|
146413
|
+
return { ...message, message: { ...message.message, content: newContent } };
|
|
146414
|
+
});
|
|
146415
|
+
if (tokensSaved === 0)
|
|
146416
|
+
return null;
|
|
146417
|
+
return { messages: result, tokensSaved, cleared: clearSet.size };
|
|
146418
|
+
}
|
|
146419
|
+
function maybeSizeBasedMicrocompact(messages, querySource) {
|
|
146420
|
+
const config2 = getToolResultPruningConfig();
|
|
146421
|
+
if (!config2.enabled || !querySource || !isMainThreadSource(querySource)) {
|
|
146422
|
+
return null;
|
|
146423
|
+
}
|
|
146424
|
+
const cleared = clearOldToolResults(messages, config2.keepRecent);
|
|
146425
|
+
if (!cleared || cleared.tokensSaved < config2.minTokensFreed) {
|
|
146426
|
+
return null;
|
|
146427
|
+
}
|
|
146428
|
+
logEvent("tengu_size_based_microcompact", {
|
|
146429
|
+
toolsCleared: cleared.cleared,
|
|
146430
|
+
keepRecent: config2.keepRecent,
|
|
146431
|
+
minTokensFreed: config2.minTokensFreed,
|
|
146432
|
+
tokensSaved: cleared.tokensSaved
|
|
146433
|
+
});
|
|
146434
|
+
logForDebugging(`[SIZE-BASED MC] cleared ${cleared.cleared} tool results (~${cleared.tokensSaved} tokens >= ${config2.minTokensFreed} threshold), kept last ${config2.keepRecent}`);
|
|
146435
|
+
suppressCompactWarning();
|
|
146436
|
+
resetMicrocompactState();
|
|
146437
|
+
if (false) {}
|
|
146438
|
+
return {
|
|
146439
|
+
messages: cleared.messages,
|
|
146440
|
+
notice: `Pruned ${cleared.cleared} superseded tool result(s), freeing about ` + `${cleared.tokensSaved.toLocaleString()} tokens. The ${config2.keepRecent} most ` + `recent are kept. Disable with context.pruneToolResults.enabled=false.`
|
|
146441
|
+
};
|
|
146442
|
+
}
|
|
146358
146443
|
function maybeTimeBasedMicrocompact(messages, querySource) {
|
|
146359
146444
|
const trigger = evaluateTimeBasedTrigger(messages, querySource);
|
|
146360
146445
|
if (!trigger) {
|
|
@@ -146408,6 +146493,7 @@ function maybeTimeBasedMicrocompact(messages, querySource) {
|
|
|
146408
146493
|
}
|
|
146409
146494
|
var TIME_BASED_MC_CLEARED_MESSAGE = "[Old tool result content cleared]", IMAGE_MAX_TOKEN_SIZE = 2000, COMPACTABLE_TOOLS, cachedMCState = null, pendingCacheEdits = null;
|
|
146410
146495
|
var init_microCompact = __esm(() => {
|
|
146496
|
+
init_toolResultPruningConfig();
|
|
146411
146497
|
init_prompt2();
|
|
146412
146498
|
init_prompt3();
|
|
146413
146499
|
init_prompt();
|
|
@@ -154550,7 +154636,7 @@ var init_projectSafety = __esm(() => {
|
|
|
154550
154636
|
function getInstruments() {
|
|
154551
154637
|
if (instruments)
|
|
154552
154638
|
return instruments;
|
|
154553
|
-
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.
|
|
154639
|
+
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.64.0");
|
|
154554
154640
|
instruments = {
|
|
154555
154641
|
operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
|
|
154556
154642
|
description: "GenAI operation duration.",
|
|
@@ -154648,7 +154734,7 @@ function genAiAgentAttributes() {
|
|
|
154648
154734
|
"gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
|
|
154649
154735
|
"gen_ai.provider.name": "ur",
|
|
154650
154736
|
"gen_ai.agent.name": "UR-Nexus",
|
|
154651
|
-
"gen_ai.agent.version": "1.
|
|
154737
|
+
"gen_ai.agent.version": "1.64.0"
|
|
154652
154738
|
};
|
|
154653
154739
|
}
|
|
154654
154740
|
function genAiWorkflowAttributes(workflowName) {
|
|
@@ -154664,7 +154750,7 @@ function genAiWorkflowAttributes(workflowName) {
|
|
|
154664
154750
|
function startGenAiWorkflowSpan(workflowName) {
|
|
154665
154751
|
const attributes = genAiWorkflowAttributes(workflowName);
|
|
154666
154752
|
const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
|
|
154667
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.
|
|
154753
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.64.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
154668
154754
|
}
|
|
154669
154755
|
function endGenAiWorkflowSpan(span, options2 = {}) {
|
|
154670
154756
|
try {
|
|
@@ -154702,7 +154788,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
|
|
|
154702
154788
|
if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
|
|
154703
154789
|
attributes["gen_ai.memory.record.count"] = options2.recordCount;
|
|
154704
154790
|
}
|
|
154705
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.
|
|
154791
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.64.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
154706
154792
|
}
|
|
154707
154793
|
function endGenAiMemorySpan(span, options2 = {}) {
|
|
154708
154794
|
try {
|
|
@@ -206221,7 +206307,7 @@ function getTelemetryAttributes() {
|
|
|
206221
206307
|
attributes["session.id"] = sessionId;
|
|
206222
206308
|
}
|
|
206223
206309
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
206224
|
-
attributes["app.version"] = "1.
|
|
206310
|
+
attributes["app.version"] = "1.64.0";
|
|
206225
206311
|
}
|
|
206226
206312
|
const oauthAccount = getOauthAccountInfo();
|
|
206227
206313
|
if (oauthAccount) {
|
|
@@ -241995,7 +242081,7 @@ function getInstallationEnv() {
|
|
|
241995
242081
|
return;
|
|
241996
242082
|
}
|
|
241997
242083
|
function getURCodeVersion() {
|
|
241998
|
-
return "1.
|
|
242084
|
+
return "1.64.0";
|
|
241999
242085
|
}
|
|
242000
242086
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
242001
242087
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -249326,7 +249412,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
249326
249412
|
const client2 = new Client({
|
|
249327
249413
|
name: "ur",
|
|
249328
249414
|
title: "UR",
|
|
249329
|
-
version: "1.
|
|
249415
|
+
version: "1.64.0",
|
|
249330
249416
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
249331
249417
|
websiteUrl: PRODUCT_URL
|
|
249332
249418
|
}, {
|
|
@@ -249686,7 +249772,7 @@ var init_client5 = __esm(() => {
|
|
|
249686
249772
|
const client2 = new Client({
|
|
249687
249773
|
name: "ur",
|
|
249688
249774
|
title: "UR",
|
|
249689
|
-
version: "1.
|
|
249775
|
+
version: "1.64.0",
|
|
249690
249776
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
249691
249777
|
websiteUrl: PRODUCT_URL
|
|
249692
249778
|
}, {
|
|
@@ -262287,7 +262373,7 @@ async function createRuntime() {
|
|
|
262287
262373
|
bootstrapTelemetry();
|
|
262288
262374
|
const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
|
|
262289
262375
|
[import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
|
|
262290
|
-
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.
|
|
262376
|
+
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.64.0"
|
|
262291
262377
|
}));
|
|
262292
262378
|
const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
|
|
262293
262379
|
resource,
|
|
@@ -262320,11 +262406,11 @@ async function createRuntime() {
|
|
|
262320
262406
|
setMeterProvider(meterProvider);
|
|
262321
262407
|
setLoggerProvider(loggerProvider);
|
|
262322
262408
|
if (meterProvider) {
|
|
262323
|
-
const meter = meterProvider.getMeter("ur-agent", "1.
|
|
262409
|
+
const meter = meterProvider.getMeter("ur-agent", "1.64.0");
|
|
262324
262410
|
setMeter(meter, (name, options2) => meter.createCounter(name, options2));
|
|
262325
262411
|
}
|
|
262326
262412
|
if (loggerProvider) {
|
|
262327
|
-
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.
|
|
262413
|
+
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.64.0"));
|
|
262328
262414
|
}
|
|
262329
262415
|
if (!cleanupRegistered2) {
|
|
262330
262416
|
cleanupRegistered2 = true;
|
|
@@ -262986,9 +263072,9 @@ async function assertMinVersion() {
|
|
|
262986
263072
|
if (false) {}
|
|
262987
263073
|
try {
|
|
262988
263074
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
262989
|
-
if (versionConfig.minVersion && lt("1.
|
|
263075
|
+
if (versionConfig.minVersion && lt("1.64.0", versionConfig.minVersion)) {
|
|
262990
263076
|
console.error(`
|
|
262991
|
-
It looks like your version of UR (${"1.
|
|
263077
|
+
It looks like your version of UR (${"1.64.0"}) needs an update.
|
|
262992
263078
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
262993
263079
|
|
|
262994
263080
|
To update, please run:
|
|
@@ -263204,7 +263290,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
263204
263290
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
263205
263291
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
263206
263292
|
pid: process.pid,
|
|
263207
|
-
currentVersion: "1.
|
|
263293
|
+
currentVersion: "1.64.0"
|
|
263208
263294
|
});
|
|
263209
263295
|
return "in_progress";
|
|
263210
263296
|
}
|
|
@@ -263213,7 +263299,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
263213
263299
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
263214
263300
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
263215
263301
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
263216
|
-
currentVersion: "1.
|
|
263302
|
+
currentVersion: "1.64.0"
|
|
263217
263303
|
});
|
|
263218
263304
|
console.error(`
|
|
263219
263305
|
Error: Windows NPM detected in WSL
|
|
@@ -263748,7 +263834,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
263748
263834
|
}
|
|
263749
263835
|
async function getDoctorDiagnostic() {
|
|
263750
263836
|
const installationType = await getCurrentInstallationType();
|
|
263751
|
-
const version2 = typeof MACRO !== "undefined" ? "1.
|
|
263837
|
+
const version2 = typeof MACRO !== "undefined" ? "1.64.0" : "unknown";
|
|
263752
263838
|
const installationPath = await getInstallationPath();
|
|
263753
263839
|
const invokedBinary = getInvokedBinary();
|
|
263754
263840
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -264683,8 +264769,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
264683
264769
|
const maxVersion = await getMaxVersion();
|
|
264684
264770
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
264685
264771
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
264686
|
-
if (gte("1.
|
|
264687
|
-
logForDebugging(`Native installer: current version ${"1.
|
|
264772
|
+
if (gte("1.64.0", maxVersion)) {
|
|
264773
|
+
logForDebugging(`Native installer: current version ${"1.64.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
264688
264774
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
264689
264775
|
latency_ms: Date.now() - startTime,
|
|
264690
264776
|
max_version: maxVersion,
|
|
@@ -264695,7 +264781,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
264695
264781
|
version2 = maxVersion;
|
|
264696
264782
|
}
|
|
264697
264783
|
}
|
|
264698
|
-
if (!forceReinstall && version2 === "1.
|
|
264784
|
+
if (!forceReinstall && version2 === "1.64.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
264699
264785
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
264700
264786
|
logEvent("tengu_native_update_complete", {
|
|
264701
264787
|
latency_ms: Date.now() - startTime,
|
|
@@ -334894,7 +334980,7 @@ function isAnyTracingEnabled() {
|
|
|
334894
334980
|
return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
|
|
334895
334981
|
}
|
|
334896
334982
|
function getTracer() {
|
|
334897
|
-
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.
|
|
334983
|
+
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.64.0");
|
|
334898
334984
|
}
|
|
334899
334985
|
function createSpanAttributes(spanType, customAttributes = {}) {
|
|
334900
334986
|
const baseAttributes = getTelemetryAttributes();
|
|
@@ -339368,6 +339454,9 @@ async function* queryLoop(params, consumedCommandUuids) {
|
|
|
339368
339454
|
queryCheckpoint("query_microcompact_start");
|
|
339369
339455
|
const microcompactResult = await deps.microcompact(messagesForQuery, toolUseContext, querySource);
|
|
339370
339456
|
messagesForQuery = microcompactResult.messages;
|
|
339457
|
+
if (microcompactResult.notice) {
|
|
339458
|
+
yield createSystemMessage(microcompactResult.notice, "info");
|
|
339459
|
+
}
|
|
339371
339460
|
const pendingCacheEdits2 = undefined;
|
|
339372
339461
|
queryCheckpoint("query_microcompact_end");
|
|
339373
339462
|
if (false) {}
|
|
@@ -364397,7 +364486,7 @@ function Feedback({
|
|
|
364397
364486
|
platform: env2.platform,
|
|
364398
364487
|
gitRepo: envInfo.isGit,
|
|
364399
364488
|
terminal: env2.terminal,
|
|
364400
|
-
version: "1.
|
|
364489
|
+
version: "1.64.0",
|
|
364401
364490
|
transcript: normalizeMessagesForAPI(messages),
|
|
364402
364491
|
errors: sanitizedErrors,
|
|
364403
364492
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -364589,7 +364678,7 @@ function Feedback({
|
|
|
364589
364678
|
", ",
|
|
364590
364679
|
env2.terminal,
|
|
364591
364680
|
", v",
|
|
364592
|
-
"1.
|
|
364681
|
+
"1.64.0"
|
|
364593
364682
|
]
|
|
364594
364683
|
}, undefined, true, undefined, this)
|
|
364595
364684
|
]
|
|
@@ -364695,7 +364784,7 @@ ${sanitizedDescription}
|
|
|
364695
364784
|
` + `**Environment Info**
|
|
364696
364785
|
` + `- Platform: ${env2.platform}
|
|
364697
364786
|
` + `- Terminal: ${env2.terminal}
|
|
364698
|
-
` + `- Version: ${"1.
|
|
364787
|
+
` + `- Version: ${"1.64.0"}
|
|
364699
364788
|
` + `- Feedback ID: ${feedbackId}
|
|
364700
364789
|
` + `
|
|
364701
364790
|
**Errors**
|
|
@@ -367805,7 +367894,7 @@ function buildPrimarySection() {
|
|
|
367805
367894
|
}, undefined, false, undefined, this);
|
|
367806
367895
|
return [{
|
|
367807
367896
|
label: "Version",
|
|
367808
|
-
value: "1.
|
|
367897
|
+
value: "1.64.0"
|
|
367809
367898
|
}, {
|
|
367810
367899
|
label: "Session name",
|
|
367811
367900
|
value: nameValue
|
|
@@ -371135,7 +371224,7 @@ function Config({
|
|
|
371135
371224
|
}
|
|
371136
371225
|
}, undefined, false, undefined, this)
|
|
371137
371226
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
371138
|
-
currentVersion: "1.
|
|
371227
|
+
currentVersion: "1.64.0",
|
|
371139
371228
|
onChoice: (choice) => {
|
|
371140
371229
|
setShowSubmenu(null);
|
|
371141
371230
|
setTabsHidden(false);
|
|
@@ -371147,7 +371236,7 @@ function Config({
|
|
|
371147
371236
|
autoUpdatesChannel: "stable"
|
|
371148
371237
|
};
|
|
371149
371238
|
if (choice === "stay") {
|
|
371150
|
-
newSettings.minimumVersion = "1.
|
|
371239
|
+
newSettings.minimumVersion = "1.64.0";
|
|
371151
371240
|
}
|
|
371152
371241
|
updateSettingsForSource("userSettings", newSettings);
|
|
371153
371242
|
setSettingsData((prev_27) => ({
|
|
@@ -379211,7 +379300,7 @@ function HelpV2(t0) {
|
|
|
379211
379300
|
let t6;
|
|
379212
379301
|
if ($2[31] !== tabs) {
|
|
379213
379302
|
t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
|
|
379214
|
-
title: `UR v${"1.
|
|
379303
|
+
title: `UR v${"1.64.0"}`,
|
|
379215
379304
|
color: "professionalBlue",
|
|
379216
379305
|
defaultTab: "general",
|
|
379217
379306
|
children: tabs
|
|
@@ -380128,7 +380217,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
|
|
|
380128
380217
|
async function handleInitialize(options2) {
|
|
380129
380218
|
return {
|
|
380130
380219
|
name: "UR",
|
|
380131
|
-
version: "1.
|
|
380220
|
+
version: "1.64.0",
|
|
380132
380221
|
protocolVersion: "0.1.0",
|
|
380133
380222
|
workspaceRoot: options2.cwd,
|
|
380134
380223
|
capabilities: {
|
|
@@ -397236,7 +397325,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
397236
397325
|
return [];
|
|
397237
397326
|
}
|
|
397238
397327
|
}
|
|
397239
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.
|
|
397328
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.64.0") {
|
|
397240
397329
|
if (process.env.USER_TYPE === "ant") {
|
|
397241
397330
|
const changelog = "";
|
|
397242
397331
|
if (changelog) {
|
|
@@ -397263,7 +397352,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.62.0")
|
|
|
397263
397352
|
releaseNotes
|
|
397264
397353
|
};
|
|
397265
397354
|
}
|
|
397266
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.
|
|
397355
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.64.0") {
|
|
397267
397356
|
if (process.env.USER_TYPE === "ant") {
|
|
397268
397357
|
const changelog = "";
|
|
397269
397358
|
if (changelog) {
|
|
@@ -400120,7 +400209,7 @@ function getRecentActivitySync() {
|
|
|
400120
400209
|
return cachedActivity;
|
|
400121
400210
|
}
|
|
400122
400211
|
function getLogoDisplayData() {
|
|
400123
|
-
const version2 = process.env.DEMO_VERSION ?? "1.
|
|
400212
|
+
const version2 = process.env.DEMO_VERSION ?? "1.64.0";
|
|
400124
400213
|
const serverUrl = getDirectConnectServerUrl();
|
|
400125
400214
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
|
|
400126
400215
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -401004,7 +401093,7 @@ function LogoV2() {
|
|
|
401004
401093
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
401005
401094
|
t2 = () => {
|
|
401006
401095
|
const currentConfig2 = getGlobalConfig();
|
|
401007
|
-
if (currentConfig2.lastReleaseNotesSeen === "1.
|
|
401096
|
+
if (currentConfig2.lastReleaseNotesSeen === "1.64.0") {
|
|
401008
401097
|
return;
|
|
401009
401098
|
}
|
|
401010
401099
|
saveGlobalConfig(_temp327);
|
|
@@ -401689,12 +401778,12 @@ function LogoV2() {
|
|
|
401689
401778
|
return t41;
|
|
401690
401779
|
}
|
|
401691
401780
|
function _temp327(current) {
|
|
401692
|
-
if (current.lastReleaseNotesSeen === "1.
|
|
401781
|
+
if (current.lastReleaseNotesSeen === "1.64.0") {
|
|
401693
401782
|
return current;
|
|
401694
401783
|
}
|
|
401695
401784
|
return {
|
|
401696
401785
|
...current,
|
|
401697
|
-
lastReleaseNotesSeen: "1.
|
|
401786
|
+
lastReleaseNotesSeen: "1.64.0"
|
|
401698
401787
|
};
|
|
401699
401788
|
}
|
|
401700
401789
|
function _temp241(s_0) {
|
|
@@ -418492,7 +418581,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
|
|
|
418492
418581
|
if (spec.name !== specName) {
|
|
418493
418582
|
throw new Error("Agentic CI workflow spec name does not match");
|
|
418494
418583
|
}
|
|
418495
|
-
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.
|
|
418584
|
+
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.64.0" : "1.64.0");
|
|
418496
418585
|
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
|
|
418497
418586
|
throw new Error("invalid ur-agent package version");
|
|
418498
418587
|
}
|
|
@@ -419485,7 +419574,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
|
|
|
419485
419574
|
path: ".github/workflows/ur.yml",
|
|
419486
419575
|
root: "project",
|
|
419487
419576
|
content: compileAgenticCiWorkflow("default", {
|
|
419488
|
-
packageVersion: typeof MACRO !== "undefined" ? "1.
|
|
419577
|
+
packageVersion: typeof MACRO !== "undefined" ? "1.64.0" : "1.64.0"
|
|
419489
419578
|
})
|
|
419490
419579
|
},
|
|
419491
419580
|
{
|
|
@@ -419548,7 +419637,7 @@ function value(tokens, flag) {
|
|
|
419548
419637
|
return index2 >= 0 ? tokens[index2 + 1] : undefined;
|
|
419549
419638
|
}
|
|
419550
419639
|
function cliVersion() {
|
|
419551
|
-
return typeof MACRO !== "undefined" ? "1.
|
|
419640
|
+
return typeof MACRO !== "undefined" ? "1.64.0" : "1.64.0";
|
|
419552
419641
|
}
|
|
419553
419642
|
function workflowPath(cwd2) {
|
|
419554
419643
|
return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
|
|
@@ -425404,7 +425493,7 @@ function createAcpStdioApp(deps) {
|
|
|
425404
425493
|
}
|
|
425405
425494
|
},
|
|
425406
425495
|
authMethods: [],
|
|
425407
|
-
agentInfo: { name: "UR-Nexus", version: "1.
|
|
425496
|
+
agentInfo: { name: "UR-Nexus", version: "1.64.0" }
|
|
425408
425497
|
})).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
|
|
425409
425498
|
const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
|
|
425410
425499
|
await runtime2.announce({
|
|
@@ -425501,7 +425590,7 @@ function createAcpStdioAgent(deps) {
|
|
|
425501
425590
|
}
|
|
425502
425591
|
},
|
|
425503
425592
|
authMethods: [],
|
|
425504
|
-
agentInfo: { name: "UR-Nexus", version: "1.
|
|
425593
|
+
agentInfo: { name: "UR-Nexus", version: "1.64.0" }
|
|
425505
425594
|
});
|
|
425506
425595
|
return;
|
|
425507
425596
|
case "authenticate":
|
|
@@ -435056,7 +435145,7 @@ var init_sources2 = __esm(() => {
|
|
|
435056
435145
|
});
|
|
435057
435146
|
|
|
435058
435147
|
// src/memdir/memoryIntegrity.ts
|
|
435059
|
-
import { createHash as createHash42 } from "crypto";
|
|
435148
|
+
import { createHash as createHash42, createHmac as createHmac2 } from "crypto";
|
|
435060
435149
|
import {
|
|
435061
435150
|
existsSync as existsSync65,
|
|
435062
435151
|
mkdirSync as mkdirSync46,
|
|
@@ -435067,6 +435156,23 @@ import {
|
|
|
435067
435156
|
writeFileSync as writeFileSync46
|
|
435068
435157
|
} from "fs";
|
|
435069
435158
|
import { join as join184, relative as relative42 } from "path";
|
|
435159
|
+
function signingKey(env4 = process.env) {
|
|
435160
|
+
const key = env4.UR_MEMORY_INTEGRITY_KEY?.trim();
|
|
435161
|
+
return key ? key : null;
|
|
435162
|
+
}
|
|
435163
|
+
function signManifest(files, key) {
|
|
435164
|
+
const canonical = Object.keys(files).sort().map((name) => `${name}:${files[name].digest}`).join(`
|
|
435165
|
+
`);
|
|
435166
|
+
return createHmac2("sha256", key).update(canonical).digest("hex");
|
|
435167
|
+
}
|
|
435168
|
+
function checkSignature(manifest, env4 = process.env) {
|
|
435169
|
+
const key = signingKey(env4);
|
|
435170
|
+
if (!manifest.signature)
|
|
435171
|
+
return "unsigned";
|
|
435172
|
+
if (!key)
|
|
435173
|
+
return "unverifiable";
|
|
435174
|
+
return signManifest(manifest.files, key) === manifest.signature ? "valid" : "invalid";
|
|
435175
|
+
}
|
|
435070
435176
|
function manifestPathFor2(dir) {
|
|
435071
435177
|
return join184(dir, MANIFEST_NAME);
|
|
435072
435178
|
}
|
|
@@ -435116,10 +435222,12 @@ function recordManifest(dir) {
|
|
|
435116
435222
|
bytes: statSync24(full).size
|
|
435117
435223
|
};
|
|
435118
435224
|
}
|
|
435225
|
+
const key = signingKey();
|
|
435119
435226
|
const manifest = {
|
|
435120
435227
|
version: 1,
|
|
435121
435228
|
updatedAt: new Date().toISOString(),
|
|
435122
|
-
files
|
|
435229
|
+
files,
|
|
435230
|
+
...key ? { signature: signManifest(files, key) } : {}
|
|
435123
435231
|
};
|
|
435124
435232
|
writeFileSync46(manifestPathFor2(dir), `${JSON.stringify(manifest, null, 2)}
|
|
435125
435233
|
`);
|
|
@@ -435166,7 +435274,8 @@ function verifyMemoryStore(dir) {
|
|
|
435166
435274
|
dir,
|
|
435167
435275
|
manifestPath: manifestPathFor2(dir),
|
|
435168
435276
|
exists: existsSync65(dir),
|
|
435169
|
-
|
|
435277
|
+
signature: manifest ? checkSignature(manifest) : "unsigned",
|
|
435278
|
+
valid: manifest !== null && checkSignature(manifest) !== "invalid" && checkSignature(manifest) !== "unverifiable" && entries.length > 0 && counts.modified === 0 && counts.untracked === 0 && counts.missing === 0,
|
|
435170
435279
|
entries,
|
|
435171
435280
|
counts
|
|
435172
435281
|
};
|
|
@@ -435198,6 +435307,17 @@ function formatMemoryIntegrity(report, json2) {
|
|
|
435198
435307
|
return `${report.dir}
|
|
435199
435308
|
` + ` no such directory \u2014 nothing was checked. If you expected memory here,
|
|
435200
435309
|
` + ` the path is wrong; verifying a path that does not exist proves nothing.`;
|
|
435310
|
+
}
|
|
435311
|
+
if (report.signature === "invalid") {
|
|
435312
|
+
return `${report.dir}
|
|
435313
|
+
` + ` SIGNATURE INVALID \u2014 the manifest does not match its signature.
|
|
435314
|
+
` + ` Someone with write access to this directory rewrote the manifest
|
|
435315
|
+
` + ` without the key. Treat every file here as untrusted.`;
|
|
435316
|
+
}
|
|
435317
|
+
if (report.signature === "unverifiable") {
|
|
435318
|
+
return `${report.dir}
|
|
435319
|
+
` + ` signed, but UR_MEMORY_INTEGRITY_KEY is not set, so the signature
|
|
435320
|
+
` + ` could not be checked. Nothing here can be vouched for without it.`;
|
|
435201
435321
|
}
|
|
435202
435322
|
if (report.entries.length === 0) {
|
|
435203
435323
|
return `${report.dir}
|
|
@@ -435288,7 +435408,7 @@ var call80 = async (args) => {
|
|
|
435288
435408
|
};
|
|
435289
435409
|
}
|
|
435290
435410
|
const reports = stores.map((dir) => verifyMemoryStore(dir));
|
|
435291
|
-
const tampered = reports.some((report) => report.counts.modified > 0 || report.counts.missing > 0 || report.counts.untracked > 0);
|
|
435411
|
+
const tampered = reports.some((report) => report.counts.modified > 0 || report.counts.missing > 0 || report.counts.untracked > 0 || report.signature === "invalid" || report.signature === "unverifiable");
|
|
435292
435412
|
if (tampered)
|
|
435293
435413
|
process.exitCode = 1;
|
|
435294
435414
|
return {
|
|
@@ -435535,9 +435655,17 @@ var init_selfTest = __esm(() => {
|
|
|
435535
435655
|
id: "fan-out-limit",
|
|
435536
435656
|
feature: "agent fan-out limits",
|
|
435537
435657
|
kind: "manual",
|
|
435538
|
-
action: '
|
|
435539
|
-
expect: "the cap
|
|
435540
|
-
rationale: "
|
|
435658
|
+
action: 'In the UR repo, ask for NESTED fan-out: "review every directory in src/tools, and have each reviewer spawn a subagent per file it finds"',
|
|
435659
|
+
expect: "once ~20 agents are live the cap fires, and the refusal names agents.maxConcurrent so you can raise it",
|
|
435660
|
+
rationale: "Asking for 30 agents in one turn does NOT test this: MAX_CONCURRENT_TOOLS caps a single turn at 8, so the 20-agent limit is only reachable by nesting. An earlier version of this drill made that mistake and reported the wrong limit firing."
|
|
435661
|
+
},
|
|
435662
|
+
{
|
|
435663
|
+
id: "tool-result-pruning",
|
|
435664
|
+
feature: "context.pruneToolResults",
|
|
435665
|
+
kind: "manual",
|
|
435666
|
+
action: 'Run a long session that reads many large files (e.g. "read every file in src/services/api and summarise each"), then watch for the prune notice and check /context',
|
|
435667
|
+
expect: "a line reporting how many tool results were pruned and roughly how many tokens that freed; context stops climbing where it previously kept filling",
|
|
435668
|
+
rationale: "Pruning only fires inside a live query loop, so no automated drill can reach it. It is on by default and changes context for every session, which makes it the least-verified thing shipped."
|
|
435541
435669
|
},
|
|
435542
435670
|
{
|
|
435543
435671
|
id: "btw-full-question",
|
|
@@ -633836,7 +633964,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
633836
633964
|
smapsRollup,
|
|
633837
633965
|
platform: process.platform,
|
|
633838
633966
|
nodeVersion: process.version,
|
|
633839
|
-
ccVersion: "1.
|
|
633967
|
+
ccVersion: "1.64.0"
|
|
633840
633968
|
};
|
|
633841
633969
|
}
|
|
633842
633970
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -634416,7 +634544,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
634416
634544
|
var call153 = async () => {
|
|
634417
634545
|
return {
|
|
634418
634546
|
type: "text",
|
|
634419
|
-
value: "1.
|
|
634547
|
+
value: "1.64.0"
|
|
634420
634548
|
};
|
|
634421
634549
|
}, version2, version_default;
|
|
634422
634550
|
var init_version = __esm(() => {
|
|
@@ -645487,7 +645615,7 @@ function generateHtmlReport(data, insights) {
|
|
|
645487
645615
|
</html>`;
|
|
645488
645616
|
}
|
|
645489
645617
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
645490
|
-
const version3 = typeof MACRO !== "undefined" ? "1.
|
|
645618
|
+
const version3 = typeof MACRO !== "undefined" ? "1.64.0" : "unknown";
|
|
645491
645619
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
645492
645620
|
const facets_summary = {
|
|
645493
645621
|
total: facets.size,
|
|
@@ -649798,7 +649926,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
649798
649926
|
init_settings2();
|
|
649799
649927
|
init_slowOperations();
|
|
649800
649928
|
init_uuid();
|
|
649801
|
-
VERSION7 = typeof MACRO !== "undefined" ? "1.
|
|
649929
|
+
VERSION7 = typeof MACRO !== "undefined" ? "1.64.0" : "unknown";
|
|
649802
649930
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
649803
649931
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
649804
649932
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -651013,7 +651141,7 @@ var init_filesystem = __esm(() => {
|
|
|
651013
651141
|
});
|
|
651014
651142
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
651015
651143
|
const nonce = randomBytes20(16).toString("hex");
|
|
651016
|
-
return join232(getURTempDir(), "bundled-skills", "1.
|
|
651144
|
+
return join232(getURTempDir(), "bundled-skills", "1.64.0", nonce);
|
|
651017
651145
|
});
|
|
651018
651146
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
651019
651147
|
});
|
|
@@ -657308,7 +657436,7 @@ function computeFingerprint(messageText2, version3) {
|
|
|
657308
657436
|
}
|
|
657309
657437
|
function computeFingerprintFromMessages(messages) {
|
|
657310
657438
|
const firstMessageText = extractFirstMessageText(messages);
|
|
657311
|
-
return computeFingerprint(firstMessageText, "1.
|
|
657439
|
+
return computeFingerprint(firstMessageText, "1.64.0");
|
|
657312
657440
|
}
|
|
657313
657441
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
657314
657442
|
var init_fingerprint = () => {};
|
|
@@ -659204,7 +659332,7 @@ async function sideQuery(opts) {
|
|
|
659204
659332
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
659205
659333
|
}
|
|
659206
659334
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
659207
|
-
const fingerprint2 = computeFingerprint(messageText2, "1.
|
|
659335
|
+
const fingerprint2 = computeFingerprint(messageText2, "1.64.0");
|
|
659208
659336
|
const attributionHeader = getAttributionHeader(fingerprint2);
|
|
659209
659337
|
const systemBlocks = [
|
|
659210
659338
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -663975,7 +664103,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
663975
664103
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
663976
664104
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
663977
664105
|
betas: getSdkBetas(),
|
|
663978
|
-
ur_version: "1.
|
|
664106
|
+
ur_version: "1.64.0",
|
|
663979
664107
|
output_style: outputStyle2,
|
|
663980
664108
|
agents: inputs.agents.map((agent2) => agent2.agentType),
|
|
663981
664109
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -677835,7 +677963,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
677835
677963
|
function getSemverPart(version3) {
|
|
677836
677964
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
677837
677965
|
}
|
|
677838
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.
|
|
677966
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.64.0") {
|
|
677839
677967
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react222.useState(() => getSemverPart(initialVersion));
|
|
677840
677968
|
if (!updatedVersion) {
|
|
677841
677969
|
return null;
|
|
@@ -677884,7 +678012,7 @@ function AutoUpdater({
|
|
|
677884
678012
|
return;
|
|
677885
678013
|
}
|
|
677886
678014
|
if (false) {}
|
|
677887
|
-
const currentVersion = "1.
|
|
678015
|
+
const currentVersion = "1.64.0";
|
|
677888
678016
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
677889
678017
|
let latestVersion = await getLatestVersion(channel);
|
|
677890
678018
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -678113,12 +678241,12 @@ function NativeAutoUpdater({
|
|
|
678113
678241
|
logEvent("tengu_native_auto_updater_start", {});
|
|
678114
678242
|
try {
|
|
678115
678243
|
const maxVersion = await getMaxVersion();
|
|
678116
|
-
if (maxVersion && gt("1.
|
|
678244
|
+
if (maxVersion && gt("1.64.0", maxVersion)) {
|
|
678117
678245
|
const msg = await getMaxVersionMessage();
|
|
678118
678246
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
678119
678247
|
}
|
|
678120
678248
|
const result = await installLatest(channel);
|
|
678121
|
-
const currentVersion = "1.
|
|
678249
|
+
const currentVersion = "1.64.0";
|
|
678122
678250
|
const latencyMs = Date.now() - startTime;
|
|
678123
678251
|
if (result.lockFailed) {
|
|
678124
678252
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -678255,17 +678383,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
678255
678383
|
const maxVersion = await getMaxVersion();
|
|
678256
678384
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
678257
678385
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
678258
|
-
if (gte("1.
|
|
678259
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.
|
|
678386
|
+
if (gte("1.64.0", maxVersion)) {
|
|
678387
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.64.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
678260
678388
|
setUpdateAvailable(false);
|
|
678261
678389
|
return;
|
|
678262
678390
|
}
|
|
678263
678391
|
latest = maxVersion;
|
|
678264
678392
|
}
|
|
678265
|
-
const hasUpdate = latest && !gte("1.
|
|
678393
|
+
const hasUpdate = latest && !gte("1.64.0", latest) && !shouldSkipVersion(latest);
|
|
678266
678394
|
setUpdateAvailable(!!hasUpdate);
|
|
678267
678395
|
if (hasUpdate) {
|
|
678268
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.
|
|
678396
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.64.0"} -> ${latest}`);
|
|
678269
678397
|
}
|
|
678270
678398
|
};
|
|
678271
678399
|
$2[0] = t1;
|
|
@@ -678299,7 +678427,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
678299
678427
|
wrap: "truncate",
|
|
678300
678428
|
children: [
|
|
678301
678429
|
"currentVersion: ",
|
|
678302
|
-
"1.
|
|
678430
|
+
"1.64.0"
|
|
678303
678431
|
]
|
|
678304
678432
|
}, undefined, true, undefined, this);
|
|
678305
678433
|
$2[3] = verbose;
|
|
@@ -688996,7 +689124,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
688996
689124
|
project_dir: getOriginalCwd(),
|
|
688997
689125
|
added_dirs: addedDirs
|
|
688998
689126
|
},
|
|
688999
|
-
version: "1.
|
|
689127
|
+
version: "1.64.0",
|
|
689000
689128
|
output_style: {
|
|
689001
689129
|
name: outputStyleName
|
|
689002
689130
|
},
|
|
@@ -689079,7 +689207,7 @@ function StatusLineInner({
|
|
|
689079
689207
|
const taskValues = Object.values(tasks2);
|
|
689080
689208
|
const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
|
|
689081
689209
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
689082
|
-
version: "1.
|
|
689210
|
+
version: "1.64.0",
|
|
689083
689211
|
providerLabel: providerRuntime.providerLabel,
|
|
689084
689212
|
authMode: providerRuntime.authLabel,
|
|
689085
689213
|
model: providerRuntime.model ?? renderModelName(mainLoopModel),
|
|
@@ -701222,7 +701350,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
701222
701350
|
} catch {}
|
|
701223
701351
|
const data = {
|
|
701224
701352
|
trigger: trigger2,
|
|
701225
|
-
version: "1.
|
|
701353
|
+
version: "1.64.0",
|
|
701226
701354
|
platform: process.platform,
|
|
701227
701355
|
transcript,
|
|
701228
701356
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -713502,7 +713630,7 @@ function WelcomeV2() {
|
|
|
713502
713630
|
dimColor: true,
|
|
713503
713631
|
children: [
|
|
713504
713632
|
"v",
|
|
713505
|
-
"1.
|
|
713633
|
+
"1.64.0"
|
|
713506
713634
|
]
|
|
713507
713635
|
}, undefined, true, undefined, this)
|
|
713508
713636
|
]
|
|
@@ -714762,7 +714890,7 @@ function completeOnboarding() {
|
|
|
714762
714890
|
saveGlobalConfig((current) => ({
|
|
714763
714891
|
...current,
|
|
714764
714892
|
hasCompletedOnboarding: true,
|
|
714765
|
-
lastOnboardingVersion: "1.
|
|
714893
|
+
lastOnboardingVersion: "1.64.0"
|
|
714766
714894
|
}));
|
|
714767
714895
|
}
|
|
714768
714896
|
function showDialog(root2, renderer) {
|
|
@@ -719806,7 +719934,7 @@ function appendToLog(path24, message) {
|
|
|
719806
719934
|
cwd: getFsImplementation().cwd(),
|
|
719807
719935
|
userType: process.env.USER_TYPE,
|
|
719808
719936
|
sessionId: getSessionId(),
|
|
719809
|
-
version: "1.
|
|
719937
|
+
version: "1.64.0"
|
|
719810
719938
|
};
|
|
719811
719939
|
getLogWriter(path24).write(messageWithTimestamp);
|
|
719812
719940
|
}
|
|
@@ -723965,8 +724093,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
723965
724093
|
}
|
|
723966
724094
|
async function checkEnvLessBridgeMinVersion() {
|
|
723967
724095
|
const cfg = await getEnvLessBridgeConfig();
|
|
723968
|
-
if (cfg.min_version && lt("1.
|
|
723969
|
-
return `Your version of UR (${"1.
|
|
724096
|
+
if (cfg.min_version && lt("1.64.0", cfg.min_version)) {
|
|
724097
|
+
return `Your version of UR (${"1.64.0"}) is too old for Remote Control.
|
|
723970
724098
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
723971
724099
|
}
|
|
723972
724100
|
return null;
|
|
@@ -724440,7 +724568,7 @@ async function initBridgeCore(params) {
|
|
|
724440
724568
|
const rawApi = createBridgeApiClient({
|
|
724441
724569
|
baseUrl,
|
|
724442
724570
|
getAccessToken,
|
|
724443
|
-
runnerVersion: "1.
|
|
724571
|
+
runnerVersion: "1.64.0",
|
|
724444
724572
|
onDebug: logForDebugging,
|
|
724445
724573
|
onAuth401,
|
|
724446
724574
|
getTrustedDeviceToken
|
|
@@ -733916,7 +734044,7 @@ function getAgUiCapabilities() {
|
|
|
733916
734044
|
name: "UR-Nexus",
|
|
733917
734045
|
type: "ur-nexus",
|
|
733918
734046
|
description: "Provider-flexible, local-first autonomous engineering workflow agent.",
|
|
733919
|
-
version: "1.
|
|
734047
|
+
version: "1.64.0",
|
|
733920
734048
|
provider: "UR",
|
|
733921
734049
|
documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
|
|
733922
734050
|
},
|
|
@@ -735056,7 +735184,7 @@ function createMCPServer(cwd4, debug2, verbose) {
|
|
|
735056
735184
|
};
|
|
735057
735185
|
const server2 = new Server({
|
|
735058
735186
|
name: "ur-nexus",
|
|
735059
|
-
version: "1.
|
|
735187
|
+
version: "1.64.0"
|
|
735060
735188
|
}, {
|
|
735061
735189
|
capabilities: {
|
|
735062
735190
|
tools: {}
|
|
@@ -736214,7 +736342,7 @@ function thrownResponse(error40) {
|
|
|
736214
736342
|
}
|
|
736215
736343
|
async function createUrMcp2026Runtime(options4) {
|
|
736216
736344
|
const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
|
|
736217
|
-
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.
|
|
736345
|
+
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.64.0" }, { capabilities: {} });
|
|
736218
736346
|
const [clientTransport, serverTransport] = createLinkedTransportPair();
|
|
736219
736347
|
try {
|
|
736220
736348
|
await server2.connect(serverTransport);
|
|
@@ -736225,7 +736353,7 @@ async function createUrMcp2026Runtime(options4) {
|
|
|
736225
736353
|
}
|
|
736226
736354
|
const runtime2 = new Mcp2026Runtime({
|
|
736227
736355
|
cwd: options4.cwd,
|
|
736228
|
-
version: "1.
|
|
736356
|
+
version: "1.64.0",
|
|
736229
736357
|
backend: {
|
|
736230
736358
|
listTools: async () => {
|
|
736231
736359
|
const listed = await client2.listTools();
|
|
@@ -738358,7 +738486,7 @@ async function update() {
|
|
|
738358
738486
|
logEvent("tengu_update_check", {});
|
|
738359
738487
|
const diagnostic2 = await getDoctorDiagnostic();
|
|
738360
738488
|
const result = await checkUpgradeStatus({
|
|
738361
|
-
currentVersion: "1.
|
|
738489
|
+
currentVersion: "1.64.0",
|
|
738362
738490
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
738363
738491
|
installationType: diagnostic2.installationType,
|
|
738364
738492
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -739674,7 +739802,7 @@ ${customInstructions}` : customInstructions;
|
|
|
739674
739802
|
}
|
|
739675
739803
|
}
|
|
739676
739804
|
logForDiagnosticsNoPII("info", "started", {
|
|
739677
|
-
version: "1.
|
|
739805
|
+
version: "1.64.0",
|
|
739678
739806
|
is_native_binary: isInBundledMode()
|
|
739679
739807
|
});
|
|
739680
739808
|
registerCleanup(async () => {
|
|
@@ -740460,7 +740588,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
740460
740588
|
pendingHookMessages
|
|
740461
740589
|
}, renderAndRun);
|
|
740462
740590
|
}
|
|
740463
|
-
}).version("1.
|
|
740591
|
+
}).version("1.64.0 (UR-Nexus)", "-v, --version", "Output the version number");
|
|
740464
740592
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
740465
740593
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
740466
740594
|
if (canUserConfigureAdvisor()) {
|
|
@@ -741512,7 +741640,7 @@ if (false) {}
|
|
|
741512
741640
|
async function main2() {
|
|
741513
741641
|
const args = process.argv.slice(2);
|
|
741514
741642
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
741515
|
-
console.log(`${"1.
|
|
741643
|
+
console.log(`${"1.64.0"} (UR-Nexus)`);
|
|
741516
741644
|
return;
|
|
741517
741645
|
}
|
|
741518
741646
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
package/documentation/index.html
CHANGED
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
<main id="content" class="content">
|
|
46
46
|
<header class="topbar">
|
|
47
47
|
<div>
|
|
48
|
-
<p class="eyebrow">Version 1.
|
|
48
|
+
<p class="eyebrow">Version 1.64.0</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.
|
|
5
|
+
"version": "1.64.0",
|
|
6
6
|
"publisher": "ur-nexus",
|
|
7
7
|
"engines": {
|
|
8
8
|
"vscode": "^1.92.0"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ur-agent",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.64.0",
|
|
4
4
|
"description": "UR-Nexus — autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "bun@1.3.14",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"@ag-ui/core": "0.0.57",
|
|
85
85
|
"@ag-ui/encoder": "0.0.57",
|
|
86
86
|
"diff2html": "^3.4.56",
|
|
87
|
-
"playwright-core": "^1.
|
|
87
|
+
"playwright-core": "^1.64.0",
|
|
88
88
|
"sharp": "^0.35.3"
|
|
89
89
|
},
|
|
90
90
|
"devDependencies": {
|