ur-agent 1.65.13 → 1.66.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.
@@ -19,7 +19,7 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.65.13 (UR-Nexus)"
22
+ # expected for this release: "1.66.0 (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.13</p>
48
+ <p class="eyebrow">Version 1.66.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>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.65.13"
10
+ version = "1.66.0"
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.13",
5
+ "version": "1.66.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.65.13",
3
+ "version": "1.66.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",
@@ -74,12 +74,42 @@ constraints. Mutually independent tasks with no conflicting shared mutations
74
74
  can be delegated together, while dependent or conflicting work stays
75
75
  sequential.
76
76
 
77
+ The proactive model lifecycle is explicit:
78
+ `TaskCreate` → inspect successful result → `TaskUpdate(in_progress)` → inspect
79
+ successful result → `Write`/`Edit`/mutating `Bash`/worker. Task setup and its
80
+ dependent mutation are never one parallel batch. A feature-rich one-file build
81
+ is non-trivial even if implementation uses one `Write`; classification follows
82
+ the requested outcomes and verification burden, not the file or tool-call
83
+ count. Approved-plan handoffs require task creation as their next
84
+ state-changing action, and Ollama/Kimi receives the same ordered rule in its
85
+ compact tool-discipline section. If earlier tasks are all terminal, the model
86
+ must create a new cohesive outcome or reopen the relevant task before new
87
+ workspace work.
88
+
89
+ The runtime gate accepts an actionable `pending` or `in_progress` record; the
90
+ stricter model-facing sequence keeps status truthful before work begins.
91
+ `TodoWrite` is the equivalent single-call setup in legacy/headless pools, with
92
+ the selected item already `in_progress`. Partial Task V2 exposure never masks
93
+ an available `TodoWrite`. Bare/simple, REPL-simple, coordinator, custom-agent,
94
+ and override-prompt paths retain a usable planner and capability-aware task
95
+ contract, so the gate never instructs those modes to call a missing tool.
96
+ If a user explicitly filters every planner from a custom tool pool, runtime
97
+ fails closed and tells the user to enable Task V2/`TodoWrite` or explicitly
98
+ disable the gate; it never tells the model to call a tool that is absent.
99
+
77
100
  Task IDs remain strings in storage and tool output. Model inputs for
78
101
  `TaskCreate` dependencies and `TaskGet`/`TaskUpdate` identifiers may also use a
79
102
  positive safe-integer JSON number; the tool boundary normalizes it to the
80
103
  canonical decimal string. Zero, negative, fractional, non-finite, Boolean, and
81
104
  precision-losing numeric IDs are rejected.
82
105
 
106
+ The Kimi/Ollama compatibility parser applies the same task schema instead of a
107
+ smaller parallel implementation. A clearly delimited bare `TaskCreate` object
108
+ may contain `blocks`, `blockedBy`, `addBlocks`, or `addBlockedBy`; a bare
109
+ `TaskUpdate` accepts the live terminal `failed` and `skipped` statuses as well
110
+ as numeric IDs. IDs are normalized to canonical strings, while unknown fields,
111
+ invalid IDs/statuses, ambiguous prose, and unavailable tools fail closed.
112
+
83
113
  Task-gate recovery names the tracking surface that is actually present:
84
114
  interactive Task V2 sessions use `TaskCreate`, while default headless sessions
85
115
  use `TodoWrite`. It never instructs a model to recover by calling a tool absent
@@ -92,6 +122,15 @@ redirection, backgrounding, sandbox overrides, and permission-time rewrites to
92
122
  mutating commands fail closed. The preview command remains a Bash side effect
93
123
  and still follows normal permission, sandbox, and plan-worker rules.
94
124
 
125
+ Control-plane operations that establish or tear down tracking cannot depend on
126
+ an already-actionable task: `TeamCreate`, `TeamDelete`, `TaskStop`/`KillShell`,
127
+ and structured team shutdown/plan-response messages are narrow task-gate
128
+ exceptions. Their own schemas, mode checks, active-member checks, and normal
129
+ permissions remain authoritative. Loading a `Skill` and taking a desktop
130
+ screenshot are read-only wrappers; downstream skill actions, desktop
131
+ click/type, API/database/browser/MCP mutations, and future tools classified
132
+ state-changing at runtime remain task-gated.
133
+
95
134
  Syntax verification has the same task-gate-only separation. A strictly parsed
96
135
  `node --check <single-file>` or the bounded HTML checker that reads one file,
97
136
  constructs but never invokes its first `<script>` body, and prints only a fixed
@@ -105,6 +105,27 @@ Fan-out limits clamp rather than disable: out-of-range, negative and
105
105
  non-numeric values fall back to the default or the ceiling, so a settings file
106
106
  cannot switch the governor off.
107
107
 
108
+ ### Global app compaction controls
109
+
110
+ `autoCompactEnabled` and `compaction.autoThreshold` are global app controls
111
+ managed by `/config` or the `Config` tool and persisted in the global UR
112
+ configuration (`~/.ur.json`, or `.config.json` in a legacy UR config home).
113
+ They are not keys in the project `settings.json` schema.
114
+
115
+ ```text
116
+ autoCompactEnabled = true
117
+ compaction.autoThreshold = 80
118
+ ```
119
+
120
+ The threshold accepts an inclusive percentage from 50 through 95. It is
121
+ applied to the effective model context window and retains a 3,000-token manual
122
+ compaction reserve. `UR_AUTOCOMPACT_PCT_OVERRIDE` has higher precedence for
123
+ the current process; `DISABLE_AUTO_COMPACT` or `DISABLE_COMPACT` disables the
124
+ proactive trigger. `/context` and the prompt notification report an
125
+ approximate percentage left to this same resolved threshold; the active query
126
+ may free additional context through bounded pruning immediately before the
127
+ trigger.
128
+
108
129
  Rule syntax: `ToolName` (blanket) or `ToolName(specifier)` — e.g. `Bash(npm run *)`,
109
130
  `Edit(src/**)`, `mcp__server__tool`. Managed via `/permissions` UI as well.
110
131
 
@@ -104,12 +104,40 @@ rollback preserve a private copy of the full original before replacement.
104
104
  |---|---|
105
105
  | Visualize usage | `/context` (colored grid); `/files` is an ant-only command and is absent from the standard npm CLI |
106
106
  | Manual compaction | `/compact [focus instructions]` |
107
- | Auto-compaction | `src/services/compact` — triggers near the limit; `DISABLE_AUTO_COMPACT` env disables; PreCompact/PostCompact hooks fire |
107
+ | Auto-compaction | `src/services/compact` — triggers at one canonical model-aware threshold; `DISABLE_AUTO_COMPACT` env disables; PreCompact/PostCompact hooks fire |
108
108
  | Context collapse | `src/services/contextCollapse` and `CtxInspect` are behind the compile-time `CONTEXT_COLLAPSE` feature, which the standard npm bundle does not include |
109
109
  | Micro-compaction | session-memory compact (`sessionMemoryCompact.ts`): force on with `ENABLE_UR_CODE_SM_COMPACT=1`, force off with `DISABLE_UR_CODE_SM_COMPACT=1`; otherwise both `tengu_session_memory` and `tengu_sm_compact` runtime gates must be on |
110
110
  | Clear | `/clear` (aliases `/reset`, `/new`) |
111
111
  | Read caps | Read tool truncates large files/lines; `/read`, `/analyze`, `/summarize` for deliberate loads |
112
112
 
113
+ The effective context window always stays positive, including for small local
114
+ models. By default proactive compaction reserves a scaled output buffer (up to
115
+ 20,000 tokens) plus a 13,000-token compact/manual safety band. The global
116
+ `compaction.autoThreshold` setting can instead select 50–95% of the effective
117
+ window while retaining a 3,000-token manual reserve;
118
+ `UR_AUTOCOMPACT_PCT_OVERRIDE` is the explicit environment override. Trigger
119
+ logic, prompt notifications, `/context`, and the SDK all use this same
120
+ threshold and estimated live usage, including messages added after the last
121
+ provider response.
122
+
123
+ When proactive auto-compaction is active, the prompt notification and
124
+ `/context` show a clamped approximate 0–100% value remaining until the actual
125
+ trigger, with separate warning and final-error bands. The estimate uses the
126
+ same live token counter, while the query may conservatively improve it by
127
+ snipping or pruning immediately before the trigger. Reactive-compaction and
128
+ context-collapse modes own their thresholds and therefore do not display a
129
+ misleading proactive countdown. A successful compaction suppresses the stale
130
+ pre-compact warning.
131
+
132
+ Full, partial, and session-memory compaction restore the authoritative live
133
+ task state after the boundary. Task V2 snapshots retain exact IDs, statuses,
134
+ owners, and dependency edges; legacy TodoWrite snapshots retain order and
135
+ status. The snapshot is bounded to 64 actionable-first records and an
136
+ estimated 6,000-token budget. If more exist, the model is required to call
137
+ `TaskList` before task mutation rather than guessing omitted IDs. Compact
138
+ boundaries also permanently consume the task-gate's initial trivial-call
139
+ allowance so compaction cannot reopen an implementation bypass.
140
+
113
141
  ## Repo wiki & map
114
142
 
115
143
  ```
@@ -18,6 +18,13 @@ The main agent can spawn subagents. Built-in agent types
18
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
19
 
20
20
  Ordinary `Agent` subagents do not require experimental Teams/swarm mode.
21
+ Every ordinary worker launch does require successful task setup and an
22
+ `in_progress` parent task first; the exact built-in read-only `Explore`/`Plan`
23
+ plan-mode path below is the only exception. Coordinator mode exposes Task V2
24
+ tools (or `TodoWrite` in a legacy pool) instead of directing workers through an
25
+ unsatisfiable gate. Independent tasks may launch in one worker wave only after
26
+ their task records exist and the tasks actually launching are marked
27
+ `in_progress`.
21
28
  Approved-plan handoff checks the actual tool pool, agent-type allowlist, live
22
29
  `Agent(type)` deny rules, and active built-in definitions. It can fan out
23
30
  independent ready tasks only when a selectable implementation worker remains.
@@ -33,6 +40,10 @@ Custom agents reusing those names, generic agents, teammates, background
33
40
  launches, custom working directories, and worktree launches remain mutating and
34
41
  task-gated. `TeamCreate` and `TeamDelete` also reject plan mode explicitly;
35
42
  team lifecycle state starts only after the plan is approved.
43
+ Outside plan mode, team creation/deletion, structured shutdown responses, and
44
+ emergency `TaskStop` are task-control transitions exempt from the workspace
45
+ task gate so team bootstrap and teardown cannot deadlock. Their tool-specific
46
+ validation still applies, including refusing deletion while members are active.
36
47
 
37
48
  In the standard bundle, `Explore` and `Plan` receive only `Glob`, `Grep`, and
38
49
  `Read`, use `dontAsk` permission mode, and have a second runtime boundary that
@@ -173,6 +184,12 @@ use legacy `TodoWrite` by default, or Task V2 when
173
184
  alone outside live plan mode are not exempt.
174
185
  - Configure the behavior at
175
186
  `tasks.requireBeforeChanges.{enabled,freeReads}`.
187
+ - Full, partial, and session-memory compaction restore the live task board as
188
+ an authoritative bounded snapshot, including exact Task V2 IDs, statuses,
189
+ owners, and dependency edges. In-process workers do not run a second private
190
+ compaction algorithm: they use the same `runAgent` query-loop policy,
191
+ feature gates, session-memory-first behavior, threshold, circuit breaker,
192
+ and compact-boundary handling as the main agent.
176
193
 
177
194
  The prompt contract, plan-file structure, plan-agent output, approval handoff,
178
195
  task-tool result, and gate recovery text all reinforce the same decomposition
@@ -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.13.
3
+ > Audited against the executable source and tests for `ur-agent` v1.66.0.
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/`