ur-agent 1.65.9 → 1.65.11

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.
@@ -19,7 +19,7 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.65.9 (UR-Nexus)"
22
+ # expected for this release: "1.65.11 (UR-Nexus)"
23
23
  ```
24
24
 
25
25
  ## 0.1 First-workspace model selection (1.45.4)
@@ -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.65.9</p>
48
+ <p class="eyebrow">Version 1.65.11</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>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.65.9"
10
+ version = "1.65.11"
11
11
 
12
12
  repositories {
13
13
  mavenCentral()
@@ -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.65.9",
5
+ "version": "1.65.11",
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.65.9",
3
+ "version": "1.65.11",
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",
@@ -61,6 +61,54 @@ only after `EnterPlanMode` (or `/plan`) has successfully made the active mode
61
61
  `plan`. Plan approval may change that mode before permission-edited input is
62
62
  revalidated; the executor labels that second validation as post-permission so
63
63
  the already-validated exit can finish, while new out-of-mode calls still fail.
64
+ `ExitPlanMode` is exempt from the implementation task-list gate because it is
65
+ the approval/control transition that precedes implementation. Its own plan-mode
66
+ validation remains authoritative, so the exemption does not make a stale
67
+ second exit valid.
68
+
69
+ For non-trivial work, the task list uses one record per cohesive outcome with
70
+ an observable done check rather than one omnibus record. Genuine single-outcome
71
+ work remains one task; files, commands, and tiny mechanical steps are not
72
+ artificial task boundaries. Dependency edges represent only real ordering
73
+ constraints. Mutually independent tasks with no conflicting shared mutations
74
+ can be delegated together, while dependent or conflicting work stays
75
+ sequential.
76
+
77
+ Task IDs remain strings in storage and tool output. Model inputs for
78
+ `TaskCreate` dependencies and `TaskGet`/`TaskUpdate` identifiers may also use a
79
+ positive safe-integer JSON number; the tool boundary normalizes it to the
80
+ canonical decimal string. Zero, negative, fractional, non-finite, Boolean, and
81
+ precision-losing numeric IDs are rejected.
82
+
83
+ Task-gate recovery names the tracking surface that is actually present:
84
+ interactive Task V2 sessions use `TaskCreate`, while default headless sessions
85
+ use `TodoWrite`. It never instructs a model to recover by calling a tool absent
86
+ from that runtime. Runtime inspection tracks actionable and total user tasks
87
+ separately: an all-terminal list is reported truthfully and the model is told
88
+ to reopen or create the cohesive remaining task. Real Edit/Bash mutations stay
89
+ gated. One simple `open <loopback-http(s)-URL>` Bash preview is exempt only
90
+ from the task-list gate; remote/file URLs, flags, shell composition, expansion,
91
+ redirection, backgrounding, sandbox overrides, and permission-time rewrites to
92
+ mutating commands fail closed. The preview command remains a Bash side effect
93
+ and still follows normal permission, sandbox, and plan-worker rules.
94
+
95
+ `AskUserQuestion` exposes a request-only model schema: one top-level
96
+ `questions` array with 1–4 complete question objects, each containing
97
+ `question`, a header of at most 12 characters, and 2–8 labeled choices.
98
+ Descriptions are optional and are never fabricated from labels. The runtime
99
+ accepts only lossless compatibility forms such as string choices and recognized
100
+ question-text aliases; it does not turn arbitrary prose or flat option rows into
101
+ invented questions. More than four blocking decisions are asked in later
102
+ rounds.
103
+
104
+ Answers and annotations are not model input fields. They are accepted only
105
+ during post-permission validation after the interactive UI has returned one
106
+ non-empty answer for every question; an unchanged generic approval cannot
107
+ produce a successful “user answered” result. The UI uses prototype-safe records,
108
+ provides a real custom `Other` path for both ordinary and preview questions,
109
+ and does not count selecting `Other` itself as an answer. HTML-configured
110
+ previews are escaped into an inert preformatted-text wrapper rather than
111
+ executed as model-provided markup.
64
112
 
65
113
  ## Multi-agent tools
66
114
 
@@ -124,3 +172,18 @@ File Edit/Write/NotebookEdit require the exact content snapshot the model read,
124
172
  not only a modification timestamp. Full and ranged reads are compared at the
125
173
  final write boundary, preventing same-timestamp external replacements from
126
174
  being overwritten.
175
+
176
+ `Write` requires `file_path` and the complete literal `content` in the same
177
+ structured call. Prose outside the call is never treated as file content, and a
178
+ missing-content failure states that no file was written instead of fabricating
179
+ the intended file.
180
+
181
+ `Edit` remains fail-closed rather than applying a fuzzy replacement to similar
182
+ code. When an exact contiguous `old_string` is absent, its bounded error points
183
+ to a verified matching line when one exists and tells the model to re-read that
184
+ region, use a smaller current 2–4-line anchor, split distant HTML/CSS/JavaScript
185
+ sections, and never retry the unchanged call. One narrow idempotent case returns
186
+ success without writing: a non-`replace_all` deletion-only edit whose
187
+ `new_string` is already present uniquely and whose larger `old_string` is
188
+ absent. General stale, fuzzy, empty-replacement, and ambiguous matches still
189
+ fail.
@@ -15,7 +15,31 @@ The main agent can spawn subagents. Built-in agent types
15
15
  | `verification` | verifies a change actually works (used by `/verify`) |
16
16
  | `statusline-setup` | configures the status line |
17
17
  | `ur-code-guide` | answers UR/SDK/API questions |
18
- | `Explore`, `Plan` | read-only search and planning agents, available only in builds compiled with `BUILTIN_EXPLORE_PLAN_AGENTS` and when their runtime gate is enabled; the standard npm bundle does not compile that feature |
18
+ | `Explore`, `Plan` | built-in read-only search and planning agents; registered in the standard npm bundle so plan-mode instructions never advertise missing worker types |
19
+
20
+ Ordinary `Agent` subagents do not require experimental Teams/swarm mode.
21
+ Approved-plan handoff checks the actual tool pool, agent-type allowlist, live
22
+ `Agent(type)` deny rules, and active built-in definitions. It can fan out
23
+ independent ready tasks only when a selectable implementation worker remains.
24
+ The Teams gate applies only to named teammates, team files/mailboxes, and
25
+ `TeamCreate`/`TeamDelete`.
26
+
27
+ While the parent is in plan mode, only the exact active built-in `Explore` and
28
+ `Plan` definitions may pass the task-list gate as read-only delegations.
29
+ Plan prompts apply the same type allowlist and live deny rules as the eventual
30
+ `Agent` call, so they do not advertise a planning worker that policy will
31
+ reject.
32
+ Custom agents reusing those names, generic agents, teammates, background
33
+ launches, custom working directories, and worktree launches remain mutating and
34
+ task-gated. `TeamCreate` and `TeamDelete` also reject plan mode explicitly;
35
+ team lifecycle state starts only after the plan is approved.
36
+
37
+ In the standard bundle, `Explore` and `Plan` receive only `Glob`, `Grep`, and
38
+ `Read`, use `dontAsk` permission mode, and have a second runtime boundary that
39
+ rejects any operation classified as mutating even if an actionable task or
40
+ inherited allow rule exists. Ant-native embedded-search builds substitute
41
+ read-only Bash `find`/`grep` access for the dedicated search tools; the same
42
+ runtime mutation boundary remains in force.
19
43
 
20
44
  Custom agents:
21
45
  - `/agents` — interactive management UI.
@@ -30,7 +54,7 @@ Custom agents:
30
54
  `/role-mode install architect|code|debug|ask` installs the four classic role modes as
31
55
  scoped agents.
32
56
 
33
- When present, read-only `Explore`/`Plan` agents omit the UR.md hierarchy only
57
+ Read-only `Explore`/`Plan` agents omit the UR.md hierarchy only
34
58
  when the default-on `tengu_slim_subagent_agentmd` gate remains enabled and the
35
59
  caller did not explicitly provide user context (token saving; see
36
60
  `loadAgentsDir.ts`).
@@ -105,6 +129,21 @@ Interactive sessions use the canonical Task V2 tools. Print/headless sessions
105
129
  use legacy `TodoWrite` by default, or Task V2 when
106
130
  `UR_CODE_ENABLE_TASKS=1`. Both feed the same mutation gate:
107
131
 
132
+ - Approved non-trivial plans are translated into a complete task graph before
133
+ workspace changes: one task record per cohesive outcome with its own
134
+ observable completion check. Separate deliverables are not hidden in one
135
+ umbrella item, while files, tool calls, and tiny mechanical steps are not
136
+ artificial task boundaries.
137
+ - Independent Task V2 records are created together (up to the eight-call
138
+ prompt batch limit), then real dependency edges are added once task IDs are
139
+ known. Default headless sessions instead write the complete outcome list
140
+ through `TodoWrite`; approval handoff detects this capability rather than
141
+ naming unavailable Task V2 tools. When an actual built-in implementation
142
+ worker is active, ready tasks without conflicting shared mutations launch in
143
+ waves of up to eight with bounded scope, acceptance checks, and dependency
144
+ inputs. Dependent or conflicting writes stay sequential, and the lead
145
+ verifies worker evidence before completion. An exposed `Agent` tool with no
146
+ selectable implementation worker is not advertised as delegation support.
108
147
  - Task IDs are ordered numerically (`1, 2, 10`), with non-numeric external IDs
109
148
  sorted stably after numeric IDs.
110
149
  - Dependencies block transition or claim until prerequisites are complete.
@@ -113,6 +152,9 @@ use legacy `TodoWrite` by default, or Task V2 when
113
152
  - Reads remain unrestricted. Ordinary mutations have a default allowance of
114
153
  three preceding tool calls, counted by tool call rather than message.
115
154
  Delegation and child mutations always require an actionable parent task.
155
+ The sole delegation exception is a foreground built-in `Explore` or `Plan`
156
+ call during live plan mode; those agents omit workspace-editing and nested
157
+ delegation tools and remain subject to their child permission checks.
116
158
  - An unreadable task store fails closed. Task create/update/list/get tools stay
117
159
  exempt so the agent can repair the plan.
118
160
  - Creating or updating the exact current-session plan-mode Markdown file is
@@ -124,10 +166,12 @@ use legacy `TodoWrite` by default, or Task V2 when
124
166
  - Configure the behavior at
125
167
  `tasks.requireBeforeChanges.{enabled,freeReads}`.
126
168
 
127
- The prompt contract tells the model to update each task after observing its
128
- tool result. Runtime dependencies and mutation gating enforce ordering and
169
+ The prompt contract, plan-file structure, plan-agent output, approval handoff,
170
+ task-tool result, and gate recovery text all reinforce the same decomposition
171
+ and worker rules. Runtime dependencies and mutation gating enforce ordering and
129
172
  plan presence; they cannot prove that an arbitrary natural-language task is
130
- semantically complete. Workflows and crews add stricter verdict rules where a
173
+ semantically complete, so the gate deliberately does not require a fake
174
+ minimum task count. Workflows and crews add stricter verdict rules where a
131
175
  machine-checkable execution boundary exists.
132
176
 
133
177
  ## Task routing
@@ -222,6 +266,9 @@ to false.
222
266
  `TeamDelete`, `SendMessage`, `InProcessTeammateTask`, and the
223
267
  `TeammateIdle` hook. `--agent-teams` is registered only in ant builds, so it
224
268
  is not a supported external CLI flag.
269
+ - Team creation and deletion are unavailable while plan mode is active. Use the
270
+ standard read-only `Explore`/`Plan` subagents for parallel planning, then
271
+ create an implementation team after approval.
225
272
  - Coordinator mode (`UR_CODE_COORDINATOR_MODE=1`) is additionally behind the
226
273
  compile-time `COORDINATOR_MODE` feature. The standard npm bundle does not
227
274
  include it; setting the environment variable there has no effect.
@@ -38,6 +38,23 @@ feature. Its AI-classified `auto` mode is therefore source-only. The accepted
38
38
  `permissions.classifierPermissionsEnabled` schema field is not read by a
39
39
  shipped enforcement path and must not be treated as an active control.
40
40
 
41
+ Tools that require user interaction are semantically validated again after the
42
+ permission decision even when their input signature did not change. This keeps
43
+ an unchanged generic approval or hook allow-result from being mistaken for the
44
+ interaction result.
45
+ For `AskUserQuestion`, model requests cannot supply `answers` or `annotations`;
46
+ post-permission execution requires an exact, complete, non-empty answer map.
47
+ Question-keyed UI state uses null-prototype records and own-property checks, so
48
+ model-controlled names such as `constructor` or `__proto__` cannot become
49
+ inherited answers or mutate the record prototype. The tool rejects those
50
+ reserved question names at its outer schema as an additional boundary.
51
+
52
+ Model-provided Ask previews are never trusted as executable HTML. When an SDK
53
+ selects the HTML preview format, the runtime escapes raw input into one inert
54
+ `<pre data-ur-preview="text">…</pre>` wrapper and validates that wrapper before
55
+ interaction. Scripts, event handlers, URL attributes, style injection, and
56
+ closing-tag escapes remain text rather than active markup.
57
+
41
58
  Bash adds command parsing, command-injection checks, dangerous-pattern
42
59
  classification, project safety policy, path validation, and sandbox-aware
43
60
  permission decisions. `UR_CODE_DISABLE_COMMAND_INJECTION_CHECK` weakens one of
@@ -1,6 +1,6 @@
1
1
  # UR-Nexus — Technical Specifications
2
2
 
3
- > Audited against the executable source and tests for `ur-agent` v1.65.9.
3
+ > Audited against the executable source and tests for `ur-agent` v1.65.11.
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/`