ur-agent 1.68.10 → 1.68.17
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 +126 -0
- package/dist/cli.js +170 -86
- package/docs/VALIDATION.md +1 -1
- 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/technical/01-architecture.md +3 -1
- package/technical/04-tools.md +11 -0
- package/technical/README.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,131 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.68.17
|
|
4
|
+
|
|
5
|
+
- Fixed false `TaskListRequired` failures for observational Bash capability
|
|
6
|
+
checks. Task tracking now has a classification distinct from permission
|
|
7
|
+
auto-approval, so an executable probe can remain permission- and
|
|
8
|
+
sandbox-sensitive without being mislabeled as a workspace change.
|
|
9
|
+
- The Bash classification is category-based rather than tailored to one
|
|
10
|
+
module: known reads, exact help/version checks, command-presence checks, and
|
|
11
|
+
import-only Python probes for any module can run without reopening a
|
|
12
|
+
completed task. Arbitrary interpreter code, output writes, background
|
|
13
|
+
execution, sandbox overrides, and unknown commands remain task-gated.
|
|
14
|
+
- Both the initial call and its final post-permission input are classified.
|
|
15
|
+
Hooks or permission handlers therefore cannot rewrite an observational probe
|
|
16
|
+
into an untracked mutation.
|
|
17
|
+
|
|
18
|
+
## 1.68.16
|
|
19
|
+
|
|
20
|
+
- First pieces of the UR Nexus visual identity, as terminal primitives rather
|
|
21
|
+
than artwork: `constants/urPalette.ts` (obsidian/bronze/electrum/lapis tokens
|
|
22
|
+
in true-colour, ANSI-256 and monochrome tiers, with depth detection),
|
|
23
|
+
`constants/urOrnament.ts` (frieze bands, the four border styles, the gate
|
|
24
|
+
brand mark), and `utils/statusBarItems.ts` (width-aware status-bar registry).
|
|
25
|
+
- The ornaments are thin box-drawing strokes, not solid blocks. Heavy glyphs
|
|
26
|
+
(▟▙██) were tried first and read as chunky sprites against a design built
|
|
27
|
+
from fine line-work. Everything renders on macOS Terminal, GNOME Terminal,
|
|
28
|
+
Konsole, Alacritty, foot and over SSH — no image protocol, so no user gets a
|
|
29
|
+
degraded version of the identity.
|
|
30
|
+
- Friezes tile to an exact width and truncate rather than pad: a band that
|
|
31
|
+
overshoots its column budget wraps, and a wrapped frieze reads as corruption
|
|
32
|
+
rather than decoration. The ASCII gate is cell-for-cell the same size as the
|
|
33
|
+
Unicode one so a fallback does not shift the layout.
|
|
34
|
+
- Status-bar items degrade by dropping whole items, lowest priority first,
|
|
35
|
+
after trying short forms — never by truncating the assembled string, which
|
|
36
|
+
cuts through whichever number sits at the boundary.
|
|
37
|
+
- Section 11 of the design spec lists context usage at priority 2 but its own
|
|
38
|
+
narrow-width example keeps `ctx` while dropping state and agents. The
|
|
39
|
+
examples win: at a glance the two things worth knowing are how far along the
|
|
40
|
+
work is and how much room is left. Drop order is now an explicit per-item
|
|
41
|
+
rank rather than emerging from zone position.
|
|
42
|
+
|
|
43
|
+
## 1.68.15
|
|
44
|
+
|
|
45
|
+
- Reconstructed three more stub type files, clearing 177 further errors:
|
|
46
|
+
`keybindings/types.ts` (six empty interfaces), `ink/cursor.ts`, and
|
|
47
|
+
`commands/plugin/unifiedTypes.ts`. Same defect as the MCP types in 1.68.14 —
|
|
48
|
+
an empty interface means "has no members" to TypeScript, not "shape unknown",
|
|
49
|
+
so every property access on one was an error and the consuming files carried
|
|
50
|
+
`@ts-nocheck` as a result.
|
|
51
|
+
- `KeybindingBlock.bindings` is keyed by chord string, not an array. A first
|
|
52
|
+
attempt typed it `ParsedBinding[]`, which made every entry in the default
|
|
53
|
+
binding table an error — the declaration form (`'ctrl+d': 'app:exit'`) and the
|
|
54
|
+
parsed form (chord resolved into keystrokes) are different shapes, and
|
|
55
|
+
conflating them broke a file that had been fine.
|
|
56
|
+
- `KeybindingAction` is a string rather than a union of known actions:
|
|
57
|
+
`defaultBindings.ts` assembles entries conditionally from feature flags, so a
|
|
58
|
+
value missing from a union would turn a working binding into an error.
|
|
59
|
+
- Suppression list: 140 -> 132. Eight keybinding and ink files came off.
|
|
60
|
+
- Totals for the sweep so far: 223 -> 132 files, 868 -> 563 errors, and almost
|
|
61
|
+
none of it file-by-file. Four stub files accounted for 258 errors on their
|
|
62
|
+
own.
|
|
63
|
+
|
|
64
|
+
## 1.68.14
|
|
65
|
+
|
|
66
|
+
- Gave the MCP settings types their real shapes. `components/mcp/types.ts`
|
|
67
|
+
declared seven **empty** interfaces under a "Stub: not included in leaked
|
|
68
|
+
source" comment. An empty interface does not mean "unknown shape" to
|
|
69
|
+
TypeScript, it means "has no members" — so every property access on one was an
|
|
70
|
+
error, and that single file produced ~221 of the 858 errors sitting behind
|
|
71
|
+
`@ts-nocheck`. The MCP menus were not wrong; their types were.
|
|
72
|
+
- The shapes are reconstructed from what the components actually access, with
|
|
73
|
+
`transport` as a literal discriminant so the server union narrows on
|
|
74
|
+
`transport === 'stdio'` instead of collapsing. Fields whose internals the UI
|
|
75
|
+
never inspects are `Record<string, unknown>` rather than `any`, so a consumer
|
|
76
|
+
must still narrow before reaching inside.
|
|
77
|
+
- 118 errors cleared, `MCPAgentServerMenu` off the suppression list (141 -> 140).
|
|
78
|
+
- Method note: of 42 files carrying exactly one error, nine shared one cause;
|
|
79
|
+
221 more came from this one stub. These cluster, so the productive next step
|
|
80
|
+
is grouping by error signature rather than opening files one at a time.
|
|
81
|
+
|
|
82
|
+
## 1.68.13
|
|
83
|
+
|
|
84
|
+
- Eight more files came off `@ts-nocheck` (149 -> 141) from a single fix. The
|
|
85
|
+
compiled signature of `useRegisterOverlay(id, t0)` declared two required
|
|
86
|
+
parameters while its own first statement reads
|
|
87
|
+
`const enabled = t0 === undefined ? true : t0` — the argument was optional by
|
|
88
|
+
construction and required by declaration, so every caller passing only an id
|
|
89
|
+
was a type error. Marking it optional cleared 10 errors across 10 files.
|
|
90
|
+
- That is the shape worth looking for in the rest: of 42 files carrying exactly
|
|
91
|
+
one error, nine shared this one cause. The remaining suppressed files surface
|
|
92
|
+
~858 errors, and the useful next step is grouping them by cause rather than
|
|
93
|
+
working through them file by file.
|
|
94
|
+
|
|
95
|
+
## 1.68.12
|
|
96
|
+
|
|
97
|
+
- The Ollama request path now reports where a request's bytes actually go —
|
|
98
|
+
tool definitions, system prompt, conversation — once per session in the debug
|
|
99
|
+
log. The fixed cost of tools plus system prompt is what decides whether a
|
|
100
|
+
small-context model has room left to work, and until now it had only been
|
|
101
|
+
estimated by summing prompt source. That estimate is wrong by construction:
|
|
102
|
+
these prompts are full of `condition ? longText : shortText`, and summing the
|
|
103
|
+
file counts both branches when only one is ever sent. The measurement is
|
|
104
|
+
taken from the serialized request, so it is what the server receives.
|
|
105
|
+
- Reported as a share of the whole with the tool-definition count, because
|
|
106
|
+
"system prompt is large" and "conversation is large" call for opposite fixes
|
|
107
|
+
and are indistinguishable in a single total.
|
|
108
|
+
|
|
109
|
+
## 1.68.11
|
|
110
|
+
|
|
111
|
+
- Investigated turning the task-list gate advisory by default and did not do
|
|
112
|
+
it. The friction it causes is real, but the gate is also the final
|
|
113
|
+
revalidation before a tool executes, and defaulting it off removes two
|
|
114
|
+
properties nothing else provides: a permission handler or hook that rewrites
|
|
115
|
+
a read-only call into a mutating one is re-checked *after* the rewrite, and
|
|
116
|
+
task state is re-read at execution time so a plan that disappears while
|
|
117
|
+
permission is pending cannot let the mutation through. Eight tests in
|
|
118
|
+
`toolExecutionFinalInput` fail the moment enforcement is defaulted off, all
|
|
119
|
+
on those two paths. The rule and its revalidation are not separable: the
|
|
120
|
+
re-read is how the rule is applied at execution time, so with no rule there
|
|
121
|
+
is nothing to revalidate.
|
|
122
|
+
- The friction had two causes and both are already fixed forward: the
|
|
123
|
+
allowance counted messages instead of tool calls, so the gate fired on the
|
|
124
|
+
first Write (1.65.5), and the TodoWrite prompt had lost its worked examples,
|
|
125
|
+
so smaller models stopped producing task lists at all (1.68.0). The gate is
|
|
126
|
+
reached far less often as a result. `tasks.requireBeforeChanges.enabled`
|
|
127
|
+
remains available for anyone who wants it off knowingly.
|
|
128
|
+
|
|
3
129
|
## 1.68.10
|
|
4
130
|
|
|
5
131
|
- `ToolSearchTool` no longer registers on runtimes where it cannot work. Its
|
package/dist/cli.js
CHANGED
|
@@ -57524,6 +57524,7 @@ __export(exports_ollama, {
|
|
|
57524
57524
|
getOllamaModelDefaultTimeoutMs: () => getOllamaModelDefaultTimeoutMs,
|
|
57525
57525
|
getEffectiveOllamaBaseUrl: () => getEffectiveOllamaBaseUrl,
|
|
57526
57526
|
dropStaleImagesFromRequest: () => dropStaleImagesFromRequest,
|
|
57527
|
+
describeRequestComposition: () => describeRequestComposition,
|
|
57527
57528
|
describeOversizedOllamaRequest: () => describeOversizedOllamaRequest,
|
|
57528
57529
|
describeImageRetry: () => describeImageRetry,
|
|
57529
57530
|
createOllamaURHQClient: () => createOllamaURHQClient,
|
|
@@ -57596,6 +57597,7 @@ async function fetchOllamaChat(params, stream4, controller, options, baseUrl = g
|
|
|
57596
57597
|
const textToolFallbackAllowed = (params.tools?.length ?? 0) > 0 && !modelCapabilityEnabled(capabilities, "tools");
|
|
57597
57598
|
const chatRequest = toOllamaChatRequest(params, stream4, capabilities, baseUrl);
|
|
57598
57599
|
const requestBody = JSON.stringify(chatRequest);
|
|
57600
|
+
logRequestComposition(chatRequest, requestBody.length);
|
|
57599
57601
|
let response = await fetch(`${baseUrl}/api/chat`, {
|
|
57600
57602
|
method: "POST",
|
|
57601
57603
|
headers: buildOllamaHeaders(),
|
|
@@ -57647,6 +57649,19 @@ async function fetchOllamaChat(params, stream4, controller, options, baseUrl = g
|
|
|
57647
57649
|
function isOllamaRequestTooLarge(status, message) {
|
|
57648
57650
|
return (status === 400 || status === 413) && /request body too large|payload too large|entity too large/i.test(message);
|
|
57649
57651
|
}
|
|
57652
|
+
function describeRequestComposition(request, totalBytes) {
|
|
57653
|
+
const toolBytes = request.tools ? JSON.stringify(request.tools).length : 0;
|
|
57654
|
+
const systemBytes = request.messages.filter((message) => message.role === "system").reduce((sum, message) => sum + JSON.stringify(message).length, 0);
|
|
57655
|
+
const conversationBytes = Math.max(0, totalBytes - toolBytes - systemBytes);
|
|
57656
|
+
const pct = (n2) => totalBytes > 0 ? `${Math.round(100 * n2 / totalBytes)}%` : "0%";
|
|
57657
|
+
return `request ${formatBytes(totalBytes)} = ` + `tools ${formatBytes(toolBytes)} (${pct(toolBytes)}, ` + `${request.tools?.length ?? 0} defs) + ` + `system ${formatBytes(systemBytes)} (${pct(systemBytes)}) + ` + `conversation ${formatBytes(conversationBytes)} (${pct(conversationBytes)})`;
|
|
57658
|
+
}
|
|
57659
|
+
function logRequestComposition(request, totalBytes) {
|
|
57660
|
+
if (loggedComposition)
|
|
57661
|
+
return;
|
|
57662
|
+
loggedComposition = true;
|
|
57663
|
+
logForDebugging(`[ollama] ${describeRequestComposition(request, totalBytes)}`);
|
|
57664
|
+
}
|
|
57650
57665
|
function formatBytes(bytes) {
|
|
57651
57666
|
if (bytes >= 1024 * 1024)
|
|
57652
57667
|
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
@@ -58682,7 +58697,7 @@ function parseToolInput(input) {
|
|
|
58682
58697
|
}
|
|
58683
58698
|
return normalized;
|
|
58684
58699
|
}
|
|
58685
|
-
var DEFAULT_OLLAMA_REQUEST_TIMEOUT_MS = 300000, REMOTE_OLLAMA_REQUEST_TIMEOUT_MS = 120000, CLOUD_OLLAMA_REQUEST_TIMEOUT_MS = 120000, KIMI_CLOUD_REQUEST_TIMEOUT_MS = 300000, OLLAMA_GATEWAY_TIMEOUT_MESSAGE = "Ollama gateway timed out while waiting for the model to respond. Check the selected Ollama endpoint or increase API_TIMEOUT_MS if the model needs more time.", ollamaModelCapabilitiesCache, warnedToolsUnsupportedModels, TEXT_TOOL_CALL_HINT, pendingProviderNotice = null, LEVELED_THINK_MODEL_RE;
|
|
58700
|
+
var DEFAULT_OLLAMA_REQUEST_TIMEOUT_MS = 300000, REMOTE_OLLAMA_REQUEST_TIMEOUT_MS = 120000, CLOUD_OLLAMA_REQUEST_TIMEOUT_MS = 120000, KIMI_CLOUD_REQUEST_TIMEOUT_MS = 300000, OLLAMA_GATEWAY_TIMEOUT_MESSAGE = "Ollama gateway timed out while waiting for the model to respond. Check the selected Ollama endpoint or increase API_TIMEOUT_MS if the model needs more time.", ollamaModelCapabilitiesCache, loggedComposition = false, warnedToolsUnsupportedModels, TEXT_TOOL_CALL_HINT, pendingProviderNotice = null, LEVELED_THINK_MODEL_RE;
|
|
58686
58701
|
var init_ollama = __esm(() => {
|
|
58687
58702
|
init_urhq_sdk();
|
|
58688
58703
|
init_ollamaModels();
|
|
@@ -75702,7 +75717,7 @@ var init_auth = __esm(() => {
|
|
|
75702
75717
|
|
|
75703
75718
|
// src/utils/userAgent.ts
|
|
75704
75719
|
function getURCodeUserAgent() {
|
|
75705
|
-
return `ur/${"1.68.
|
|
75720
|
+
return `ur/${"1.68.17"}`;
|
|
75706
75721
|
}
|
|
75707
75722
|
|
|
75708
75723
|
// src/utils/workloadContext.ts
|
|
@@ -75724,7 +75739,7 @@ function getUserAgent() {
|
|
|
75724
75739
|
const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
|
|
75725
75740
|
const workload = getWorkload();
|
|
75726
75741
|
const workloadSuffix = workload ? `, workload/${workload}` : "";
|
|
75727
|
-
return `ur-cli/${"1.68.
|
|
75742
|
+
return `ur-cli/${"1.68.17"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
|
|
75728
75743
|
}
|
|
75729
75744
|
function getMCPUserAgent() {
|
|
75730
75745
|
const parts = [];
|
|
@@ -75738,7 +75753,7 @@ function getMCPUserAgent() {
|
|
|
75738
75753
|
parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
|
|
75739
75754
|
}
|
|
75740
75755
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
75741
|
-
return `ur/${"1.68.
|
|
75756
|
+
return `ur/${"1.68.17"}${suffix}`;
|
|
75742
75757
|
}
|
|
75743
75758
|
function getWebFetchUserAgent() {
|
|
75744
75759
|
return `UR-User (${getURCodeUserAgent()})`;
|
|
@@ -75876,7 +75891,7 @@ var init_user = __esm(() => {
|
|
|
75876
75891
|
deviceId,
|
|
75877
75892
|
sessionId: getSessionId(),
|
|
75878
75893
|
email: getEmail(),
|
|
75879
|
-
appVersion: "1.68.
|
|
75894
|
+
appVersion: "1.68.17",
|
|
75880
75895
|
platform: getHostPlatformForAnalytics(),
|
|
75881
75896
|
organizationUuid,
|
|
75882
75897
|
accountUuid,
|
|
@@ -84076,7 +84091,7 @@ var init_metadata = __esm(() => {
|
|
|
84076
84091
|
COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
|
|
84077
84092
|
WHITESPACE_REGEX = /\s+/;
|
|
84078
84093
|
getVersionBase = memoize_default(() => {
|
|
84079
|
-
const match = "1.68.
|
|
84094
|
+
const match = "1.68.17".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
|
|
84080
84095
|
return match ? match[0] : undefined;
|
|
84081
84096
|
});
|
|
84082
84097
|
buildEnvContext = memoize_default(async () => {
|
|
@@ -84116,7 +84131,7 @@ var init_metadata = __esm(() => {
|
|
|
84116
84131
|
isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
|
|
84117
84132
|
isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
|
|
84118
84133
|
isURAiAuth: isURAISubscriber(),
|
|
84119
|
-
version: "1.68.
|
|
84134
|
+
version: "1.68.17",
|
|
84120
84135
|
versionBase: getVersionBase(),
|
|
84121
84136
|
buildTime: "",
|
|
84122
84137
|
deploymentEnvironment: env2.detectDeploymentEnvironment(),
|
|
@@ -84786,7 +84801,7 @@ function initialize1PEventLogging() {
|
|
|
84786
84801
|
const platform2 = getPlatform();
|
|
84787
84802
|
const attributes = {
|
|
84788
84803
|
[import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
|
|
84789
|
-
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.68.
|
|
84804
|
+
[import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.68.17"
|
|
84790
84805
|
};
|
|
84791
84806
|
if (platform2 === "wsl") {
|
|
84792
84807
|
const wslVersion = getWslVersion();
|
|
@@ -84814,7 +84829,7 @@ function initialize1PEventLogging() {
|
|
|
84814
84829
|
})
|
|
84815
84830
|
]
|
|
84816
84831
|
});
|
|
84817
|
-
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.68.
|
|
84832
|
+
firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.68.17");
|
|
84818
84833
|
}
|
|
84819
84834
|
async function reinitialize1PEventLoggingIfConfigChanged() {
|
|
84820
84835
|
if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
|
|
@@ -94702,7 +94717,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
|
|
|
94702
94717
|
function formatA2AAgentCard(options = {}, pretty = true) {
|
|
94703
94718
|
return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
|
|
94704
94719
|
}
|
|
94705
|
-
var urVersion = "1.68.
|
|
94720
|
+
var urVersion = "1.68.17", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
|
|
94706
94721
|
var init_trends = __esm(() => {
|
|
94707
94722
|
init_a2aCardSignature();
|
|
94708
94723
|
coverage = [
|
|
@@ -97505,7 +97520,7 @@ function getAttributionHeader(fingerprint) {
|
|
|
97505
97520
|
if (!isAttributionHeaderEnabled()) {
|
|
97506
97521
|
return "";
|
|
97507
97522
|
}
|
|
97508
|
-
const version2 = `${"1.68.
|
|
97523
|
+
const version2 = `${"1.68.17"}.${fingerprint}`;
|
|
97509
97524
|
const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
|
|
97510
97525
|
const cch = "";
|
|
97511
97526
|
const workload = getWorkload();
|
|
@@ -155383,7 +155398,7 @@ var init_projectSafety = __esm(() => {
|
|
|
155383
155398
|
function getInstruments() {
|
|
155384
155399
|
if (instruments)
|
|
155385
155400
|
return instruments;
|
|
155386
|
-
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.68.
|
|
155401
|
+
const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.68.17");
|
|
155387
155402
|
instruments = {
|
|
155388
155403
|
operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
|
|
155389
155404
|
description: "GenAI operation duration.",
|
|
@@ -155481,7 +155496,7 @@ function genAiAgentAttributes() {
|
|
|
155481
155496
|
"gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
|
|
155482
155497
|
"gen_ai.provider.name": "ur",
|
|
155483
155498
|
"gen_ai.agent.name": "UR-Nexus",
|
|
155484
|
-
"gen_ai.agent.version": "1.68.
|
|
155499
|
+
"gen_ai.agent.version": "1.68.17"
|
|
155485
155500
|
};
|
|
155486
155501
|
}
|
|
155487
155502
|
function genAiWorkflowAttributes(workflowName) {
|
|
@@ -155497,7 +155512,7 @@ function genAiWorkflowAttributes(workflowName) {
|
|
|
155497
155512
|
function startGenAiWorkflowSpan(workflowName) {
|
|
155498
155513
|
const attributes = genAiWorkflowAttributes(workflowName);
|
|
155499
155514
|
const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
|
|
155500
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.
|
|
155515
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.17").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
155501
155516
|
}
|
|
155502
155517
|
function endGenAiWorkflowSpan(span, options2 = {}) {
|
|
155503
155518
|
try {
|
|
@@ -155535,7 +155550,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
|
|
|
155535
155550
|
if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
|
|
155536
155551
|
attributes["gen_ai.memory.record.count"] = options2.recordCount;
|
|
155537
155552
|
}
|
|
155538
|
-
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.
|
|
155553
|
+
return import_api10.trace.getTracer("ur-agent.gen_ai", "1.68.17").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
|
|
155539
155554
|
}
|
|
155540
155555
|
function endGenAiMemorySpan(span, options2 = {}) {
|
|
155541
155556
|
try {
|
|
@@ -249018,7 +249033,7 @@ function getTelemetryAttributes() {
|
|
|
249018
249033
|
attributes["session.id"] = sessionId;
|
|
249019
249034
|
}
|
|
249020
249035
|
if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
|
|
249021
|
-
attributes["app.version"] = "1.68.
|
|
249036
|
+
attributes["app.version"] = "1.68.17";
|
|
249022
249037
|
}
|
|
249023
249038
|
const oauthAccount = getOauthAccountInfo();
|
|
249024
249039
|
if (oauthAccount) {
|
|
@@ -295498,7 +295513,7 @@ function getInstallationEnv() {
|
|
|
295498
295513
|
return;
|
|
295499
295514
|
}
|
|
295500
295515
|
function getURCodeVersion() {
|
|
295501
|
-
return "1.68.
|
|
295516
|
+
return "1.68.17";
|
|
295502
295517
|
}
|
|
295503
295518
|
async function getInstalledVSCodeExtensionVersion(command) {
|
|
295504
295519
|
const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
|
|
@@ -302829,7 +302844,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
302829
302844
|
const client2 = new Client({
|
|
302830
302845
|
name: "ur",
|
|
302831
302846
|
title: "UR",
|
|
302832
|
-
version: "1.68.
|
|
302847
|
+
version: "1.68.17",
|
|
302833
302848
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
302834
302849
|
websiteUrl: PRODUCT_URL
|
|
302835
302850
|
}, {
|
|
@@ -303189,7 +303204,7 @@ var init_client5 = __esm(() => {
|
|
|
303189
303204
|
const client2 = new Client({
|
|
303190
303205
|
name: "ur",
|
|
303191
303206
|
title: "UR",
|
|
303192
|
-
version: "1.68.
|
|
303207
|
+
version: "1.68.17",
|
|
303193
303208
|
description: "UR-Nexus autonomous engineering workflow engine",
|
|
303194
303209
|
websiteUrl: PRODUCT_URL
|
|
303195
303210
|
}, {
|
|
@@ -315728,7 +315743,7 @@ async function createRuntime() {
|
|
|
315728
315743
|
bootstrapTelemetry();
|
|
315729
315744
|
const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
|
|
315730
315745
|
[import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
|
|
315731
|
-
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.68.
|
|
315746
|
+
[import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.68.17"
|
|
315732
315747
|
}));
|
|
315733
315748
|
const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
|
|
315734
315749
|
resource,
|
|
@@ -315761,11 +315776,11 @@ async function createRuntime() {
|
|
|
315761
315776
|
setMeterProvider(meterProvider);
|
|
315762
315777
|
setLoggerProvider(loggerProvider);
|
|
315763
315778
|
if (meterProvider) {
|
|
315764
|
-
const meter = meterProvider.getMeter("ur-agent", "1.68.
|
|
315779
|
+
const meter = meterProvider.getMeter("ur-agent", "1.68.17");
|
|
315765
315780
|
setMeter(meter, (name, options2) => meter.createCounter(name, options2));
|
|
315766
315781
|
}
|
|
315767
315782
|
if (loggerProvider) {
|
|
315768
|
-
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.68.
|
|
315783
|
+
setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.68.17"));
|
|
315769
315784
|
}
|
|
315770
315785
|
if (!cleanupRegistered2) {
|
|
315771
315786
|
cleanupRegistered2 = true;
|
|
@@ -316427,9 +316442,9 @@ async function assertMinVersion() {
|
|
|
316427
316442
|
if (false) {}
|
|
316428
316443
|
try {
|
|
316429
316444
|
const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
|
|
316430
|
-
if (versionConfig.minVersion && lt("1.68.
|
|
316445
|
+
if (versionConfig.minVersion && lt("1.68.17", versionConfig.minVersion)) {
|
|
316431
316446
|
console.error(`
|
|
316432
|
-
It looks like your version of UR (${"1.68.
|
|
316447
|
+
It looks like your version of UR (${"1.68.17"}) needs an update.
|
|
316433
316448
|
A newer version (${versionConfig.minVersion} or higher) is required to continue.
|
|
316434
316449
|
|
|
316435
316450
|
To update, please run:
|
|
@@ -316645,7 +316660,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
316645
316660
|
logError2(new AutoUpdaterError("Another process is currently installing an update"));
|
|
316646
316661
|
logEvent("tengu_auto_updater_lock_contention", {
|
|
316647
316662
|
pid: process.pid,
|
|
316648
|
-
currentVersion: "1.68.
|
|
316663
|
+
currentVersion: "1.68.17"
|
|
316649
316664
|
});
|
|
316650
316665
|
return "in_progress";
|
|
316651
316666
|
}
|
|
@@ -316654,7 +316669,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
316654
316669
|
if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
|
|
316655
316670
|
logError2(new Error("Windows NPM detected in WSL environment"));
|
|
316656
316671
|
logEvent("tengu_auto_updater_windows_npm_in_wsl", {
|
|
316657
|
-
currentVersion: "1.68.
|
|
316672
|
+
currentVersion: "1.68.17"
|
|
316658
316673
|
});
|
|
316659
316674
|
console.error(`
|
|
316660
316675
|
Error: Windows NPM detected in WSL
|
|
@@ -317189,7 +317204,7 @@ function detectLinuxGlobPatternWarnings() {
|
|
|
317189
317204
|
}
|
|
317190
317205
|
async function getDoctorDiagnostic() {
|
|
317191
317206
|
const installationType = await getCurrentInstallationType();
|
|
317192
|
-
const version2 = typeof MACRO !== "undefined" ? "1.68.
|
|
317207
|
+
const version2 = typeof MACRO !== "undefined" ? "1.68.17" : "unknown";
|
|
317193
317208
|
const installationPath = await getInstallationPath();
|
|
317194
317209
|
const invokedBinary = getInvokedBinary();
|
|
317195
317210
|
const multipleInstallations = await detectMultipleInstallations();
|
|
@@ -318124,8 +318139,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
318124
318139
|
const maxVersion = await getMaxVersion();
|
|
318125
318140
|
if (maxVersion && gt(version2, maxVersion)) {
|
|
318126
318141
|
logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
|
|
318127
|
-
if (gte("1.68.
|
|
318128
|
-
logForDebugging(`Native installer: current version ${"1.68.
|
|
318142
|
+
if (gte("1.68.17", maxVersion)) {
|
|
318143
|
+
logForDebugging(`Native installer: current version ${"1.68.17"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
318129
318144
|
logEvent("tengu_native_update_skipped_max_version", {
|
|
318130
318145
|
latency_ms: Date.now() - startTime,
|
|
318131
318146
|
max_version: maxVersion,
|
|
@@ -318136,7 +318151,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
|
|
|
318136
318151
|
version2 = maxVersion;
|
|
318137
318152
|
}
|
|
318138
318153
|
}
|
|
318139
|
-
if (!forceReinstall && version2 === "1.68.
|
|
318154
|
+
if (!forceReinstall && version2 === "1.68.17" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
|
|
318140
318155
|
logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
|
|
318141
318156
|
logEvent("tengu_native_update_complete", {
|
|
318142
318157
|
latency_ms: Date.now() - startTime,
|
|
@@ -385622,6 +385637,59 @@ var init_prompt22 = __esm(() => {
|
|
|
385622
385637
|
init_prompt2();
|
|
385623
385638
|
});
|
|
385624
385639
|
|
|
385640
|
+
// src/tools/BashTool/taskListReadOnly.ts
|
|
385641
|
+
function isPurePythonImportScript(script) {
|
|
385642
|
+
const statements = script.split(";").map((statement) => statement.trim()).filter(Boolean);
|
|
385643
|
+
return statements.length > 0 && statements.every((statement) => IMPORT_STATEMENT.test(statement) || FROM_IMPORT_STATEMENT.test(statement));
|
|
385644
|
+
}
|
|
385645
|
+
function isCapabilityProbeCommand(command) {
|
|
385646
|
+
const parsed = tryParseShellCommand(command);
|
|
385647
|
+
if (!parsed.success || parsed.tokens.some((token) => typeof token !== "string")) {
|
|
385648
|
+
return false;
|
|
385649
|
+
}
|
|
385650
|
+
const argv = parsed.tokens;
|
|
385651
|
+
if (argv.length === 2) {
|
|
385652
|
+
const [executable2, flag] = argv;
|
|
385653
|
+
if (executable2 && /^[A-Za-z0-9_./+-]+$/.test(executable2) && ["--help", "--version", "-h", "-V", "-v"].includes(flag ?? "")) {
|
|
385654
|
+
return true;
|
|
385655
|
+
}
|
|
385656
|
+
}
|
|
385657
|
+
if (argv.length >= 3 && argv[0] === "command" && (argv[1] === "-v" || argv[1] === "-V") && argv.slice(2).every((name) => /^[A-Za-z0-9_.+-]+$/.test(name))) {
|
|
385658
|
+
return true;
|
|
385659
|
+
}
|
|
385660
|
+
if (argv.length !== 3 || argv[1] !== "-c")
|
|
385661
|
+
return false;
|
|
385662
|
+
const executable = argv[0]?.split("/").pop();
|
|
385663
|
+
return Boolean(executable && /^python(?:\d+(?:\.\d+)*)?$/.test(executable) && isPurePythonImportScript(argv[2] ?? ""));
|
|
385664
|
+
}
|
|
385665
|
+
function isBashTaskListReadOnly(input) {
|
|
385666
|
+
if (typeof input.command !== "string" || input.command.trim() === "" || input.run_in_background === true || input.dangerouslyDisableSandbox === true || input._simulatedSedEdit !== undefined || /[\0\r\n]/.test(input.command)) {
|
|
385667
|
+
return false;
|
|
385668
|
+
}
|
|
385669
|
+
const output = extractOutputRedirections(input.command);
|
|
385670
|
+
if (output.hasDangerousRedirection || output.redirections.some(({ target }) => target !== "/dev/null")) {
|
|
385671
|
+
return false;
|
|
385672
|
+
}
|
|
385673
|
+
const subcommands = splitCommand_DEPRECATED(input.command);
|
|
385674
|
+
if (subcommands.length === 0)
|
|
385675
|
+
return false;
|
|
385676
|
+
return subcommands.every((command) => {
|
|
385677
|
+
const readOnly = checkReadOnlyConstraints({ command }, false);
|
|
385678
|
+
return readOnly.behavior === "allow" || isCapabilityProbeCommand(command);
|
|
385679
|
+
});
|
|
385680
|
+
}
|
|
385681
|
+
var IDENTIFIER = "[A-Za-z_][A-Za-z0-9_]*", DOTTED_NAME, IMPORT_ITEM, FROM_IMPORT_ITEM, IMPORT_STATEMENT, FROM_IMPORT_STATEMENT;
|
|
385682
|
+
var init_taskListReadOnly = __esm(() => {
|
|
385683
|
+
init_commands();
|
|
385684
|
+
init_shellQuote();
|
|
385685
|
+
init_readOnlyValidation();
|
|
385686
|
+
DOTTED_NAME = `${IDENTIFIER}(?:\\.${IDENTIFIER})*`;
|
|
385687
|
+
IMPORT_ITEM = `${DOTTED_NAME}(?:[ \\t]+as[ \\t]+${IDENTIFIER})?`;
|
|
385688
|
+
FROM_IMPORT_ITEM = `(?:${IDENTIFIER}|\\*)(?:[ \\t]+as[ \\t]+${IDENTIFIER})?`;
|
|
385689
|
+
IMPORT_STATEMENT = new RegExp(`^import[ \\t]+${IMPORT_ITEM}(?:[ \\t]*,[ \\t]*${IMPORT_ITEM})*$`);
|
|
385690
|
+
FROM_IMPORT_STATEMENT = new RegExp(`^from[ \\t]+${DOTTED_NAME}[ \\t]+import[ \\t]+` + `(?:${FROM_IMPORT_ITEM}(?:[ \\t]*,[ \\t]*${FROM_IMPORT_ITEM})*|` + `\\([ \\t]*${FROM_IMPORT_ITEM}` + `(?:[ \\t]*,[ \\t]*${FROM_IMPORT_ITEM})*[ \\t]*\\))$`);
|
|
385691
|
+
});
|
|
385692
|
+
|
|
385625
385693
|
// src/tools/BashTool/BashTool.tsx
|
|
385626
385694
|
import { copyFile as copyFile6, stat as fsStat2, truncate as fsTruncate2, link as link5 } from "fs/promises";
|
|
385627
385695
|
function isSearchOrReadBashCommand(command) {
|
|
@@ -386067,6 +386135,7 @@ var init_BashTool = __esm(() => {
|
|
|
386067
386135
|
init_readOnlyValidation();
|
|
386068
386136
|
init_sedEditParser();
|
|
386069
386137
|
init_shouldUseSandbox();
|
|
386138
|
+
init_taskListReadOnly();
|
|
386070
386139
|
init_UI6();
|
|
386071
386140
|
init_utils9();
|
|
386072
386141
|
jsx_dev_runtime154 = __toESM(require_jsx_dev_runtime(), 1);
|
|
@@ -386166,6 +386235,9 @@ For commands that are harder to parse at a glance (piped commands, obscure flags
|
|
|
386166
386235
|
const result = checkReadOnlyConstraints(input, compoundCommandHasCd);
|
|
386167
386236
|
return result.behavior === "allow";
|
|
386168
386237
|
},
|
|
386238
|
+
isTaskListReadOnly(input) {
|
|
386239
|
+
return isBashTaskListReadOnly(input);
|
|
386240
|
+
},
|
|
386169
386241
|
toAutoClassifierInput(input) {
|
|
386170
386242
|
return input.command;
|
|
386171
386243
|
},
|
|
@@ -388347,7 +388419,7 @@ function isAnyTracingEnabled() {
|
|
|
388347
388419
|
return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
|
|
388348
388420
|
}
|
|
388349
388421
|
function getTracer() {
|
|
388350
|
-
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.68.
|
|
388422
|
+
return import_api39.trace.getTracer("ur-agent.gen_ai", "1.68.17");
|
|
388351
388423
|
}
|
|
388352
388424
|
function createSpanAttributes(spanType, customAttributes = {}) {
|
|
388353
388425
|
const baseAttributes = getTelemetryAttributes();
|
|
@@ -390996,10 +391068,16 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
390996
391068
|
isMutating = true;
|
|
390997
391069
|
}
|
|
390998
391070
|
const isPlanArtifactMutation = isCurrentPlanArtifactMutation(tool.name, parsedInput.data, toolUseContext);
|
|
391071
|
+
let isTaskListReadOnly = false;
|
|
391072
|
+
try {
|
|
391073
|
+
isTaskListReadOnly = Boolean(tool.isTaskListReadOnly?.(parsedInput.data));
|
|
391074
|
+
} catch {
|
|
391075
|
+
isTaskListReadOnly = false;
|
|
391076
|
+
}
|
|
390999
391077
|
const isTaskListGatedMutation = isMutationRequiringTaskList({
|
|
391000
391078
|
toolName: tool.name,
|
|
391001
391079
|
toolInput: parsedInput.data,
|
|
391002
|
-
isMutating
|
|
391080
|
+
isMutating: isMutating && !isTaskListReadOnly
|
|
391003
391081
|
});
|
|
391004
391082
|
if (isMutating && isBuiltInReadOnlyPlanningSubagent(toolUseContext)) {
|
|
391005
391083
|
recordCallFailure(callSig);
|
|
@@ -391383,10 +391461,16 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
|
|
|
391383
391461
|
finalIsMutating = true;
|
|
391384
391462
|
}
|
|
391385
391463
|
const finalIsPlanArtifactMutation = isCurrentPlanArtifactMutation(tool.name, finalParsedInput.data, toolUseContext);
|
|
391464
|
+
let finalIsTaskListReadOnly = false;
|
|
391465
|
+
try {
|
|
391466
|
+
finalIsTaskListReadOnly = Boolean(tool.isTaskListReadOnly?.(finalParsedInput.data));
|
|
391467
|
+
} catch {
|
|
391468
|
+
finalIsTaskListReadOnly = false;
|
|
391469
|
+
}
|
|
391386
391470
|
const finalIsTaskListGatedMutation = isMutationRequiringTaskList({
|
|
391387
391471
|
toolName: tool.name,
|
|
391388
391472
|
toolInput: finalParsedInput.data,
|
|
391389
|
-
isMutating: finalIsMutating
|
|
391473
|
+
isMutating: finalIsMutating && !finalIsTaskListReadOnly
|
|
391390
391474
|
});
|
|
391391
391475
|
if (finalIsMutating && isBuiltInReadOnlyPlanningSubagent(toolUseContext)) {
|
|
391392
391476
|
recordCallFailure(callSig);
|
|
@@ -419591,7 +419675,7 @@ function Feedback({
|
|
|
419591
419675
|
platform: env2.platform,
|
|
419592
419676
|
gitRepo: envInfo.isGit,
|
|
419593
419677
|
terminal: env2.terminal,
|
|
419594
|
-
version: "1.68.
|
|
419678
|
+
version: "1.68.17",
|
|
419595
419679
|
transcript: normalizeMessagesForAPI(messages),
|
|
419596
419680
|
errors: sanitizedErrors,
|
|
419597
419681
|
lastApiRequest: getLastAPIRequest(),
|
|
@@ -419783,7 +419867,7 @@ function Feedback({
|
|
|
419783
419867
|
", ",
|
|
419784
419868
|
env2.terminal,
|
|
419785
419869
|
", v",
|
|
419786
|
-
"1.68.
|
|
419870
|
+
"1.68.17"
|
|
419787
419871
|
]
|
|
419788
419872
|
}, undefined, true, undefined, this)
|
|
419789
419873
|
]
|
|
@@ -419889,7 +419973,7 @@ ${sanitizedDescription}
|
|
|
419889
419973
|
` + `**Environment Info**
|
|
419890
419974
|
` + `- Platform: ${env2.platform}
|
|
419891
419975
|
` + `- Terminal: ${env2.terminal}
|
|
419892
|
-
` + `- Version: ${"1.68.
|
|
419976
|
+
` + `- Version: ${"1.68.17"}
|
|
419893
419977
|
` + `- Feedback ID: ${feedbackId}
|
|
419894
419978
|
` + `
|
|
419895
419979
|
**Errors**
|
|
@@ -422999,7 +423083,7 @@ function buildPrimarySection() {
|
|
|
422999
423083
|
}, undefined, false, undefined, this);
|
|
423000
423084
|
return [{
|
|
423001
423085
|
label: "Version",
|
|
423002
|
-
value: "1.68.
|
|
423086
|
+
value: "1.68.17"
|
|
423003
423087
|
}, {
|
|
423004
423088
|
label: "Session name",
|
|
423005
423089
|
value: nameValue
|
|
@@ -426329,7 +426413,7 @@ function Config({
|
|
|
426329
426413
|
}
|
|
426330
426414
|
}, undefined, false, undefined, this)
|
|
426331
426415
|
}, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
|
|
426332
|
-
currentVersion: "1.68.
|
|
426416
|
+
currentVersion: "1.68.17",
|
|
426333
426417
|
onChoice: (choice) => {
|
|
426334
426418
|
setShowSubmenu(null);
|
|
426335
426419
|
setTabsHidden(false);
|
|
@@ -426341,7 +426425,7 @@ function Config({
|
|
|
426341
426425
|
autoUpdatesChannel: "stable"
|
|
426342
426426
|
};
|
|
426343
426427
|
if (choice === "stay") {
|
|
426344
|
-
newSettings.minimumVersion = "1.68.
|
|
426428
|
+
newSettings.minimumVersion = "1.68.17";
|
|
426345
426429
|
}
|
|
426346
426430
|
updateSettingsForSource("userSettings", newSettings);
|
|
426347
426431
|
setSettingsData((prev_27) => ({
|
|
@@ -434415,7 +434499,7 @@ function HelpV2(t0) {
|
|
|
434415
434499
|
let t6;
|
|
434416
434500
|
if ($2[31] !== tabs) {
|
|
434417
434501
|
t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
|
|
434418
|
-
title: `UR v${"1.68.
|
|
434502
|
+
title: `UR v${"1.68.17"}`,
|
|
434419
434503
|
color: "professionalBlue",
|
|
434420
434504
|
defaultTab: "general",
|
|
434421
434505
|
children: tabs
|
|
@@ -435348,7 +435432,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
|
|
|
435348
435432
|
async function handleInitialize(options2) {
|
|
435349
435433
|
return {
|
|
435350
435434
|
name: "UR",
|
|
435351
|
-
version: "1.68.
|
|
435435
|
+
version: "1.68.17",
|
|
435352
435436
|
protocolVersion: "0.1.0",
|
|
435353
435437
|
workspaceRoot: options2.cwd,
|
|
435354
435438
|
capabilities: {
|
|
@@ -452456,7 +452540,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
|
|
|
452456
452540
|
return [];
|
|
452457
452541
|
}
|
|
452458
452542
|
}
|
|
452459
|
-
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.68.
|
|
452543
|
+
async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.68.17") {
|
|
452460
452544
|
if (process.env.USER_TYPE === "ant") {
|
|
452461
452545
|
const changelog = "";
|
|
452462
452546
|
if (changelog) {
|
|
@@ -452483,7 +452567,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.68.10")
|
|
|
452483
452567
|
releaseNotes
|
|
452484
452568
|
};
|
|
452485
452569
|
}
|
|
452486
|
-
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.68.
|
|
452570
|
+
function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.68.17") {
|
|
452487
452571
|
if (process.env.USER_TYPE === "ant") {
|
|
452488
452572
|
const changelog = "";
|
|
452489
452573
|
if (changelog) {
|
|
@@ -455349,7 +455433,7 @@ function getRecentActivitySync() {
|
|
|
455349
455433
|
return cachedActivity;
|
|
455350
455434
|
}
|
|
455351
455435
|
function getLogoDisplayData() {
|
|
455352
|
-
const version2 = process.env.DEMO_VERSION ?? "1.68.
|
|
455436
|
+
const version2 = process.env.DEMO_VERSION ?? "1.68.17";
|
|
455353
455437
|
const serverUrl = getDirectConnectServerUrl();
|
|
455354
455438
|
const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
|
|
455355
455439
|
const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
|
|
@@ -456216,7 +456300,7 @@ function LogoV2() {
|
|
|
456216
456300
|
if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
456217
456301
|
t2 = () => {
|
|
456218
456302
|
const currentConfig2 = getGlobalConfig();
|
|
456219
|
-
if (currentConfig2.lastReleaseNotesSeen === "1.68.
|
|
456303
|
+
if (currentConfig2.lastReleaseNotesSeen === "1.68.17") {
|
|
456220
456304
|
return;
|
|
456221
456305
|
}
|
|
456222
456306
|
saveGlobalConfig(_temp325);
|
|
@@ -456901,12 +456985,12 @@ function LogoV2() {
|
|
|
456901
456985
|
return t41;
|
|
456902
456986
|
}
|
|
456903
456987
|
function _temp325(current) {
|
|
456904
|
-
if (current.lastReleaseNotesSeen === "1.68.
|
|
456988
|
+
if (current.lastReleaseNotesSeen === "1.68.17") {
|
|
456905
456989
|
return current;
|
|
456906
456990
|
}
|
|
456907
456991
|
return {
|
|
456908
456992
|
...current,
|
|
456909
|
-
lastReleaseNotesSeen: "1.68.
|
|
456993
|
+
lastReleaseNotesSeen: "1.68.17"
|
|
456910
456994
|
};
|
|
456911
456995
|
}
|
|
456912
456996
|
function _temp241(s_0) {
|
|
@@ -473852,7 +473936,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
|
|
|
473852
473936
|
if (spec.name !== specName) {
|
|
473853
473937
|
throw new Error("Agentic CI workflow spec name does not match");
|
|
473854
473938
|
}
|
|
473855
|
-
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.68.
|
|
473939
|
+
const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.68.17" : "1.68.17");
|
|
473856
473940
|
if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
|
|
473857
473941
|
throw new Error("invalid ur-agent package version");
|
|
473858
473942
|
}
|
|
@@ -474845,7 +474929,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
|
|
|
474845
474929
|
path: ".github/workflows/ur.yml",
|
|
474846
474930
|
root: "project",
|
|
474847
474931
|
content: compileAgenticCiWorkflow("default", {
|
|
474848
|
-
packageVersion: typeof MACRO !== "undefined" ? "1.68.
|
|
474932
|
+
packageVersion: typeof MACRO !== "undefined" ? "1.68.17" : "1.68.17"
|
|
474849
474933
|
})
|
|
474850
474934
|
},
|
|
474851
474935
|
{
|
|
@@ -474915,7 +474999,7 @@ function value(tokens, flag) {
|
|
|
474915
474999
|
return index2 >= 0 ? tokens[index2 + 1] : undefined;
|
|
474916
475000
|
}
|
|
474917
475001
|
function cliVersion() {
|
|
474918
|
-
return typeof MACRO !== "undefined" ? "1.68.
|
|
475002
|
+
return typeof MACRO !== "undefined" ? "1.68.17" : "1.68.17";
|
|
474919
475003
|
}
|
|
474920
475004
|
function workflowPath(cwd2) {
|
|
474921
475005
|
return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
|
|
@@ -480780,7 +480864,7 @@ function createAcpStdioApp(deps) {
|
|
|
480780
480864
|
}
|
|
480781
480865
|
},
|
|
480782
480866
|
authMethods: [],
|
|
480783
|
-
agentInfo: { name: "UR-Nexus", version: "1.68.
|
|
480867
|
+
agentInfo: { name: "UR-Nexus", version: "1.68.17" }
|
|
480784
480868
|
})).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
|
|
480785
480869
|
const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
|
|
480786
480870
|
await runtime2.announce({
|
|
@@ -480877,7 +480961,7 @@ function createAcpStdioAgent(deps) {
|
|
|
480877
480961
|
}
|
|
480878
480962
|
},
|
|
480879
480963
|
authMethods: [],
|
|
480880
|
-
agentInfo: { name: "UR-Nexus", version: "1.68.
|
|
480964
|
+
agentInfo: { name: "UR-Nexus", version: "1.68.17" }
|
|
480881
480965
|
});
|
|
480882
480966
|
return;
|
|
480883
480967
|
case "authenticate":
|
|
@@ -692037,7 +692121,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
|
|
|
692037
692121
|
smapsRollup,
|
|
692038
692122
|
platform: process.platform,
|
|
692039
692123
|
nodeVersion: process.version,
|
|
692040
|
-
ccVersion: "1.68.
|
|
692124
|
+
ccVersion: "1.68.17"
|
|
692041
692125
|
};
|
|
692042
692126
|
}
|
|
692043
692127
|
async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
|
|
@@ -692617,7 +692701,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
692617
692701
|
var call153 = async () => {
|
|
692618
692702
|
return {
|
|
692619
692703
|
type: "text",
|
|
692620
|
-
value: "1.68.
|
|
692704
|
+
value: "1.68.17"
|
|
692621
692705
|
};
|
|
692622
692706
|
}, version2, version_default;
|
|
692623
692707
|
var init_version = __esm(() => {
|
|
@@ -703797,7 +703881,7 @@ function generateHtmlReport(data, insights) {
|
|
|
703797
703881
|
</html>`;
|
|
703798
703882
|
}
|
|
703799
703883
|
function buildExportData(data, insights, facets, remoteStats) {
|
|
703800
|
-
const version3 = typeof MACRO !== "undefined" ? "1.68.
|
|
703884
|
+
const version3 = typeof MACRO !== "undefined" ? "1.68.17" : "unknown";
|
|
703801
703885
|
const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
|
|
703802
703886
|
const facets_summary = {
|
|
703803
703887
|
total: facets.size,
|
|
@@ -708124,7 +708208,7 @@ var init_sessionStorage = __esm(() => {
|
|
|
708124
708208
|
init_settings2();
|
|
708125
708209
|
init_slowOperations();
|
|
708126
708210
|
init_uuid();
|
|
708127
|
-
VERSION7 = typeof MACRO !== "undefined" ? "1.68.
|
|
708211
|
+
VERSION7 = typeof MACRO !== "undefined" ? "1.68.17" : "unknown";
|
|
708128
708212
|
MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
|
|
708129
708213
|
SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
|
|
708130
708214
|
EPHEMERAL_PROGRESS_TYPES = new Set([
|
|
@@ -709341,7 +709425,7 @@ var init_filesystem = __esm(() => {
|
|
|
709341
709425
|
});
|
|
709342
709426
|
getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
|
|
709343
709427
|
const nonce = randomBytes20(16).toString("hex");
|
|
709344
|
-
return join230(getURTempDir(), "bundled-skills", "1.68.
|
|
709428
|
+
return join230(getURTempDir(), "bundled-skills", "1.68.17", nonce);
|
|
709345
709429
|
});
|
|
709346
709430
|
getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
|
|
709347
709431
|
});
|
|
@@ -715647,7 +715731,7 @@ function computeFingerprint(messageText2, version3) {
|
|
|
715647
715731
|
}
|
|
715648
715732
|
function computeFingerprintFromMessages(messages) {
|
|
715649
715733
|
const firstMessageText = extractFirstMessageText(messages);
|
|
715650
|
-
return computeFingerprint(firstMessageText, "1.68.
|
|
715734
|
+
return computeFingerprint(firstMessageText, "1.68.17");
|
|
715651
715735
|
}
|
|
715652
715736
|
var FINGERPRINT_SALT = "59cf53e54c78";
|
|
715653
715737
|
var init_fingerprint = () => {};
|
|
@@ -717546,7 +717630,7 @@ async function sideQuery(opts) {
|
|
|
717546
717630
|
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
|
|
717547
717631
|
}
|
|
717548
717632
|
const messageText2 = extractFirstUserMessageText(messages);
|
|
717549
|
-
const fingerprint2 = computeFingerprint(messageText2, "1.68.
|
|
717633
|
+
const fingerprint2 = computeFingerprint(messageText2, "1.68.17");
|
|
717550
717634
|
const attributionHeader = getAttributionHeader(fingerprint2);
|
|
717551
717635
|
const systemBlocks = [
|
|
717552
717636
|
attributionHeader ? { type: "text", text: attributionHeader } : null,
|
|
@@ -722333,7 +722417,7 @@ function buildSystemInitMessage(inputs) {
|
|
|
722333
722417
|
slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
|
|
722334
722418
|
apiKeySource: getURHQApiKeyWithSource().source,
|
|
722335
722419
|
betas: getSdkBetas(),
|
|
722336
|
-
ur_version: "1.68.
|
|
722420
|
+
ur_version: "1.68.17",
|
|
722337
722421
|
output_style: outputStyle2,
|
|
722338
722422
|
agents: inputs.agents.map((agent2) => agent2.agentType),
|
|
722339
722423
|
skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
|
|
@@ -736284,7 +736368,7 @@ var init_useVoiceEnabled = __esm(() => {
|
|
|
736284
736368
|
function getSemverPart(version3) {
|
|
736285
736369
|
return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
|
|
736286
736370
|
}
|
|
736287
|
-
function useUpdateNotification(updatedVersion, initialVersion = "1.68.
|
|
736371
|
+
function useUpdateNotification(updatedVersion, initialVersion = "1.68.17") {
|
|
736288
736372
|
const [lastNotifiedSemver, setLastNotifiedSemver] = import_react222.useState(() => getSemverPart(initialVersion));
|
|
736289
736373
|
if (!updatedVersion) {
|
|
736290
736374
|
return null;
|
|
@@ -736333,7 +736417,7 @@ function AutoUpdater({
|
|
|
736333
736417
|
return;
|
|
736334
736418
|
}
|
|
736335
736419
|
if (false) {}
|
|
736336
|
-
const currentVersion = "1.68.
|
|
736420
|
+
const currentVersion = "1.68.17";
|
|
736337
736421
|
const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
|
|
736338
736422
|
let latestVersion = await getLatestVersion(channel);
|
|
736339
736423
|
const isDisabled = isAutoUpdaterDisabled();
|
|
@@ -736562,12 +736646,12 @@ function NativeAutoUpdater({
|
|
|
736562
736646
|
logEvent("tengu_native_auto_updater_start", {});
|
|
736563
736647
|
try {
|
|
736564
736648
|
const maxVersion = await getMaxVersion();
|
|
736565
|
-
if (maxVersion && gt("1.68.
|
|
736649
|
+
if (maxVersion && gt("1.68.17", maxVersion)) {
|
|
736566
736650
|
const msg = await getMaxVersionMessage();
|
|
736567
736651
|
setMaxVersionIssue(msg ?? "affects your version");
|
|
736568
736652
|
}
|
|
736569
736653
|
const result = await installLatest(channel);
|
|
736570
|
-
const currentVersion = "1.68.
|
|
736654
|
+
const currentVersion = "1.68.17";
|
|
736571
736655
|
const latencyMs = Date.now() - startTime;
|
|
736572
736656
|
if (result.lockFailed) {
|
|
736573
736657
|
logEvent("tengu_native_auto_updater_lock_contention", {
|
|
@@ -736704,17 +736788,17 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
736704
736788
|
const maxVersion = await getMaxVersion();
|
|
736705
736789
|
if (maxVersion && latest && gt(latest, maxVersion)) {
|
|
736706
736790
|
logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
|
|
736707
|
-
if (gte("1.68.
|
|
736708
|
-
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.68.
|
|
736791
|
+
if (gte("1.68.17", maxVersion)) {
|
|
736792
|
+
logForDebugging(`PackageManagerAutoUpdater: current version ${"1.68.17"} is already at or above maxVersion ${maxVersion}, skipping update`);
|
|
736709
736793
|
setUpdateAvailable(false);
|
|
736710
736794
|
return;
|
|
736711
736795
|
}
|
|
736712
736796
|
latest = maxVersion;
|
|
736713
736797
|
}
|
|
736714
|
-
const hasUpdate = latest && !gte("1.68.
|
|
736798
|
+
const hasUpdate = latest && !gte("1.68.17", latest) && !shouldSkipVersion(latest);
|
|
736715
736799
|
setUpdateAvailable(!!hasUpdate);
|
|
736716
736800
|
if (hasUpdate) {
|
|
736717
|
-
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.68.
|
|
736801
|
+
logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.68.17"} -> ${latest}`);
|
|
736718
736802
|
}
|
|
736719
736803
|
};
|
|
736720
736804
|
$2[0] = t1;
|
|
@@ -736748,7 +736832,7 @@ function PackageManagerAutoUpdater(t0) {
|
|
|
736748
736832
|
wrap: "truncate",
|
|
736749
736833
|
children: [
|
|
736750
736834
|
"currentVersion: ",
|
|
736751
|
-
"1.68.
|
|
736835
|
+
"1.68.17"
|
|
736752
736836
|
]
|
|
736753
736837
|
}, undefined, true, undefined, this);
|
|
736754
736838
|
$2[3] = verbose;
|
|
@@ -747458,7 +747542,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
|
|
|
747458
747542
|
project_dir: getOriginalCwd(),
|
|
747459
747543
|
added_dirs: addedDirs
|
|
747460
747544
|
},
|
|
747461
|
-
version: "1.68.
|
|
747545
|
+
version: "1.68.17",
|
|
747462
747546
|
output_style: {
|
|
747463
747547
|
name: outputStyleName
|
|
747464
747548
|
},
|
|
@@ -747537,7 +747621,7 @@ function StatusLineInner({
|
|
|
747537
747621
|
const taskRunningCount = countActiveBackgroundTasks(taskValues);
|
|
747538
747622
|
const agentRunningCount = countActiveForegroundAgents(taskValues);
|
|
747539
747623
|
const defaultStatusLineText = buildDefaultStatusBar({
|
|
747540
|
-
version: "1.68.
|
|
747624
|
+
version: "1.68.17",
|
|
747541
747625
|
providerLabel: providerRuntime.providerLabel,
|
|
747542
747626
|
authMode: providerRuntime.authLabel,
|
|
747543
747627
|
model: renderModelName(mainLoopModel) || providerRuntime.model || "",
|
|
@@ -759718,7 +759802,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
|
|
|
759718
759802
|
} catch {}
|
|
759719
759803
|
const data = {
|
|
759720
759804
|
trigger: trigger2,
|
|
759721
|
-
version: "1.68.
|
|
759805
|
+
version: "1.68.17",
|
|
759722
759806
|
platform: process.platform,
|
|
759723
759807
|
transcript,
|
|
759724
759808
|
subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
|
|
@@ -772086,7 +772170,7 @@ function WelcomeV2() {
|
|
|
772086
772170
|
dimColor: true,
|
|
772087
772171
|
children: [
|
|
772088
772172
|
"v",
|
|
772089
|
-
"1.68.
|
|
772173
|
+
"1.68.17"
|
|
772090
772174
|
]
|
|
772091
772175
|
}, undefined, true, undefined, this)
|
|
772092
772176
|
]
|
|
@@ -773346,7 +773430,7 @@ function completeOnboarding() {
|
|
|
773346
773430
|
saveGlobalConfig((current) => ({
|
|
773347
773431
|
...current,
|
|
773348
773432
|
hasCompletedOnboarding: true,
|
|
773349
|
-
lastOnboardingVersion: "1.68.
|
|
773433
|
+
lastOnboardingVersion: "1.68.17"
|
|
773350
773434
|
}));
|
|
773351
773435
|
}
|
|
773352
773436
|
function showDialog(root2, renderer) {
|
|
@@ -778390,7 +778474,7 @@ function appendToLog(path24, message) {
|
|
|
778390
778474
|
cwd: getFsImplementation().cwd(),
|
|
778391
778475
|
userType: process.env.USER_TYPE,
|
|
778392
778476
|
sessionId: getSessionId(),
|
|
778393
|
-
version: "1.68.
|
|
778477
|
+
version: "1.68.17"
|
|
778394
778478
|
};
|
|
778395
778479
|
getLogWriter(path24).write(messageWithTimestamp);
|
|
778396
778480
|
}
|
|
@@ -782554,8 +782638,8 @@ async function getEnvLessBridgeConfig() {
|
|
|
782554
782638
|
}
|
|
782555
782639
|
async function checkEnvLessBridgeMinVersion() {
|
|
782556
782640
|
const cfg = await getEnvLessBridgeConfig();
|
|
782557
|
-
if (cfg.min_version && lt("1.68.
|
|
782558
|
-
return `Your version of UR (${"1.68.
|
|
782641
|
+
if (cfg.min_version && lt("1.68.17", cfg.min_version)) {
|
|
782642
|
+
return `Your version of UR (${"1.68.17"}) is too old for Remote Control.
|
|
782559
782643
|
Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
|
|
782560
782644
|
}
|
|
782561
782645
|
return null;
|
|
@@ -783029,7 +783113,7 @@ async function initBridgeCore(params) {
|
|
|
783029
783113
|
const rawApi = createBridgeApiClient({
|
|
783030
783114
|
baseUrl,
|
|
783031
783115
|
getAccessToken,
|
|
783032
|
-
runnerVersion: "1.68.
|
|
783116
|
+
runnerVersion: "1.68.17",
|
|
783033
783117
|
onDebug: logForDebugging,
|
|
783034
783118
|
onAuth401,
|
|
783035
783119
|
getTrustedDeviceToken
|
|
@@ -792502,7 +792586,7 @@ function getAgUiCapabilities() {
|
|
|
792502
792586
|
name: "UR-Nexus",
|
|
792503
792587
|
type: "ur-nexus",
|
|
792504
792588
|
description: "Provider-flexible, local-first autonomous engineering workflow agent.",
|
|
792505
|
-
version: "1.68.
|
|
792589
|
+
version: "1.68.17",
|
|
792506
792590
|
provider: "UR",
|
|
792507
792591
|
documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
|
|
792508
792592
|
},
|
|
@@ -793642,7 +793726,7 @@ function createMCPServer(cwd4, debug2, verbose) {
|
|
|
793642
793726
|
};
|
|
793643
793727
|
const server2 = new Server({
|
|
793644
793728
|
name: "ur-nexus",
|
|
793645
|
-
version: "1.68.
|
|
793729
|
+
version: "1.68.17"
|
|
793646
793730
|
}, {
|
|
793647
793731
|
capabilities: {
|
|
793648
793732
|
tools: {}
|
|
@@ -794800,7 +794884,7 @@ function thrownResponse(error40) {
|
|
|
794800
794884
|
}
|
|
794801
794885
|
async function createUrMcp2026Runtime(options4) {
|
|
794802
794886
|
const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
|
|
794803
|
-
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.68.
|
|
794887
|
+
const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.68.17" }, { capabilities: {} });
|
|
794804
794888
|
const [clientTransport, serverTransport] = createLinkedTransportPair();
|
|
794805
794889
|
try {
|
|
794806
794890
|
await server2.connect(serverTransport);
|
|
@@ -794811,7 +794895,7 @@ async function createUrMcp2026Runtime(options4) {
|
|
|
794811
794895
|
}
|
|
794812
794896
|
const runtime2 = new Mcp2026Runtime({
|
|
794813
794897
|
cwd: options4.cwd,
|
|
794814
|
-
version: "1.68.
|
|
794898
|
+
version: "1.68.17",
|
|
794815
794899
|
backend: {
|
|
794816
794900
|
listTools: async () => {
|
|
794817
794901
|
const listed = await client2.listTools();
|
|
@@ -796944,7 +797028,7 @@ async function update() {
|
|
|
796944
797028
|
logEvent("tengu_update_check", {});
|
|
796945
797029
|
const diagnostic2 = await getDoctorDiagnostic();
|
|
796946
797030
|
const result = await checkUpgradeStatus({
|
|
796947
|
-
currentVersion: "1.68.
|
|
797031
|
+
currentVersion: "1.68.17",
|
|
796948
797032
|
packageName: UR_AGENT_PACKAGE_NAME,
|
|
796949
797033
|
installationType: diagnostic2.installationType,
|
|
796950
797034
|
latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
|
|
@@ -798260,7 +798344,7 @@ ${customInstructions}` : customInstructions;
|
|
|
798260
798344
|
}
|
|
798261
798345
|
}
|
|
798262
798346
|
logForDiagnosticsNoPII("info", "started", {
|
|
798263
|
-
version: "1.68.
|
|
798347
|
+
version: "1.68.17",
|
|
798264
798348
|
is_native_binary: isInBundledMode()
|
|
798265
798349
|
});
|
|
798266
798350
|
registerCleanup(async () => {
|
|
@@ -799046,7 +799130,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
799046
799130
|
pendingHookMessages
|
|
799047
799131
|
}, renderAndRun);
|
|
799048
799132
|
}
|
|
799049
|
-
}).version("1.68.
|
|
799133
|
+
}).version("1.68.17 (UR-Nexus)", "-v, --version", "Output the version number");
|
|
799050
799134
|
program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
799051
799135
|
program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
799052
799136
|
if (canUserConfigureAdvisor()) {
|
|
@@ -800105,7 +800189,7 @@ if (false) {}
|
|
|
800105
800189
|
async function main2() {
|
|
800106
800190
|
const args = process.argv.slice(2);
|
|
800107
800191
|
if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
|
|
800108
|
-
console.log(`${"1.68.
|
|
800192
|
+
console.log(`${"1.68.17"} (UR-Nexus)`);
|
|
800109
800193
|
return;
|
|
800110
800194
|
}
|
|
800111
800195
|
if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
|
package/docs/VALIDATION.md
CHANGED
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.68.
|
|
48
|
+
<p class="eyebrow">Version 1.68.17</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.68.
|
|
5
|
+
"version": "1.68.17",
|
|
6
6
|
"publisher": "ur-nexus",
|
|
7
7
|
"engines": {
|
|
8
8
|
"vscode": "^1.92.0"
|
package/package.json
CHANGED
|
@@ -60,7 +60,9 @@ This is enforced beyond prompt wording:
|
|
|
60
60
|
|
|
61
61
|
- `src/services/tools/taskListGate.ts` blocks state-changing calls once the initial
|
|
62
62
|
lightweight allowance is consumed unless an actionable task exists. Delegation and
|
|
63
|
-
subagent mutations always require a parent task. Reads remain unrestricted.
|
|
63
|
+
subagent mutations always require a parent task. Reads remain unrestricted. Tool
|
|
64
|
+
implementations can classify task-only observation separately from stricter
|
|
65
|
+
permission auto-approval; both classifications are re-evaluated after rewrites.
|
|
64
66
|
- `src/services/tools/repeatedFailureGuard.ts` tracks canonicalized failing calls, refuses
|
|
65
67
|
repeated identical failures, then aborts the stuck turn at a bounded threshold.
|
|
66
68
|
- the tool execution boundary revalidates the final input after hook rewrites; a hook cannot
|
package/technical/04-tools.md
CHANGED
|
@@ -140,6 +140,17 @@ expansion, backgrounding, sandbox overrides, and permission-time rewrites do
|
|
|
140
140
|
not qualify. Node remains non-read-only for Bash permission and sandbox
|
|
141
141
|
purposes, so this compatibility path cannot become a general execution bypass.
|
|
142
142
|
|
|
143
|
+
Task tracking no longer equates "not safe to auto-approve" with "changes the
|
|
144
|
+
workspace." Tools may expose a separate `isTaskListReadOnly` classification;
|
|
145
|
+
permissions, sandboxing, concurrency, and read-only planning agents still use
|
|
146
|
+
the stricter `isReadOnly` result. Bash uses the task-only classification for
|
|
147
|
+
known read commands and generic capability inspection: exact help/version
|
|
148
|
+
queries, `command -v`/`which`-style presence checks, and import-only Python
|
|
149
|
+
probes for any syntactically valid module name. This is category-based rather
|
|
150
|
+
than a module allowlist. Arbitrary interpreter statements, output redirects
|
|
151
|
+
outside `/dev/null`, background execution, sandbox overrides, simulated edits,
|
|
152
|
+
unknown commands, and permission-time rewrites to mutations remain gated.
|
|
153
|
+
|
|
143
154
|
Task completion also protects that lifecycle boundary. When the final
|
|
144
155
|
actionable `in_progress` task has a successful `Write`/`Edit`/`MultiEdit`/
|
|
145
156
|
`NotebookEdit` after its recorded start but no later successful inspection,
|
package/technical/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# UR-Nexus — Technical Specifications
|
|
2
2
|
|
|
3
|
-
> Audited against the executable source and tests for `ur-agent` v1.68.
|
|
3
|
+
> Audited against the executable source and tests for `ur-agent` v1.68.17.
|
|
4
4
|
> Command, tool, flag, provider, and setting claims are checked against the
|
|
5
5
|
> implementation rather than copied from product prose. Release validation
|
|
6
6
|
> keeps this version synchronized and packages the complete `technical/`
|