ur-agent 1.68.18 → 1.69.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,670 +1,22 @@
1
1
  # Changelog
2
2
 
3
- ## 1.68.18
4
-
5
- - The shell is presentational and imports only ink and useTerminalSize. A first
6
- version read live state itself (settings, provider registry, app state, git),
7
- and importing it from REPL changed REPL's module graph enough to flip a
8
- command from hidden to visible caught by `commandRegistryIntegrity`, which
9
- passed with the REPL edit stashed and failed with it applied. Loading a module
10
- is not free here; some register on load. Session values now arrive as props
11
- from a caller that already holds them.
12
-
13
- - Reconstructed three more stub type files, clearing 177 further errors:
14
- `keybindings/types.ts` (six empty interfaces), `ink/cursor.ts`, and
15
- `commands/plugin/unifiedTypes.ts`. Same defect as the MCP types in 1.68.14
16
- an empty interface means "has no members" to TypeScript, not "shape unknown",
17
- so every property access on one was an error and the consuming files carried
18
- `@ts-nocheck` as a result.
19
- - `KeybindingBlock.bindings` is keyed by chord string, not an array. A first
20
- attempt typed it `ParsedBinding[]`, which made every entry in the default
21
- binding table an error — the declaration form (`'ctrl+d': 'app:exit'`) and the
22
- parsed form (chord resolved into keystrokes) are different shapes, and
23
- conflating them broke a file that had been fine.
24
- - `KeybindingAction` is a string rather than a union of known actions:
25
- `defaultBindings.ts` assembles entries conditionally from feature flags, so a
26
- value missing from a union would turn a working binding into an error.
27
- - Suppression list: 140 -> 132. Eight keybinding and ink files came off.
28
- - Totals for the sweep so far: 223 -> 132 files, 868 -> 563 errors, and almost
29
- none of it file-by-file. Four stub files accounted for 258 errors on their
30
- own.
31
-
32
- ## 1.68.17
33
-
34
-
35
- - Fixed false `TaskListRequired` failures for observational Bash capability
36
- checks. Task tracking now has a classification distinct from permission
37
- auto-approval, so an executable probe can remain permission- and
38
- sandbox-sensitive without being mislabeled as a workspace change.
39
- - The Bash classification is category-based rather than tailored to one
40
- module: known reads, exact help/version checks, command-presence checks, and
41
- import-only Python probes for any module can run without reopening a
42
- completed task. Arbitrary interpreter code, output writes, background
43
- execution, sandbox overrides, and unknown commands remain task-gated.
44
- - Both the initial call and its final post-permission input are classified.
45
- Hooks or permission handlers therefore cannot rewrite an observational probe
46
- into an untracked mutation.
47
-
48
- ## 1.68.16
49
-
50
-
51
- - First pieces of the UR Nexus visual identity, as terminal primitives rather
52
- than artwork: `constants/urPalette.ts` (obsidian/bronze/electrum/lapis tokens
53
- in true-colour, ANSI-256 and monochrome tiers, with depth detection),
54
- `constants/urOrnament.ts` (frieze bands, the four border styles, the gate
55
- brand mark), and `utils/statusBarItems.ts` (width-aware status-bar registry).
56
- - The ornaments are thin box-drawing strokes, not solid blocks. Heavy glyphs
57
- (▟▙██) were tried first and read as chunky sprites against a design built
58
- from fine line-work. Everything renders on macOS Terminal, GNOME Terminal,
59
- Konsole, Alacritty, foot and over SSH — no image protocol, so no user gets a
60
- degraded version of the identity.
61
- - Friezes tile to an exact width and truncate rather than pad: a band that
62
- overshoots its column budget wraps, and a wrapped frieze reads as corruption
63
- rather than decoration. The ASCII gate is cell-for-cell the same size as the
64
- Unicode one so a fallback does not shift the layout.
65
- - Status-bar items degrade by dropping whole items, lowest priority first,
66
- after trying short forms — never by truncating the assembled string, which
67
- cuts through whichever number sits at the boundary.
68
- - Section 11 of the design spec lists context usage at priority 2 but its own
69
- narrow-width example keeps `ctx` while dropping state and agents. The
70
- examples win: at a glance the two things worth knowing are how far along the
71
- work is and how much room is left. Drop order is now an explicit per-item
72
- rank rather than emerging from zone position.
73
-
74
- ## 1.68.15
75
-
76
-
77
- - Redesigned the fixed top shell and bottom status area. The full-width bordered
78
- banner is replaced by a three-column command deck: identity and version left,
79
- workspace and branch centre, clock right, with a single graphite separator
80
- beneath. The bright orange frame is gone, bronze is reserved for UR branding
81
- and structural accents, and lapis blue carries focus, selection and context
82
- usage. The house artwork is imported unchanged, character for character; the
83
- UR wordmark is kept but rendered at normal weight rather than as the headline.
84
- - The footer is now a two-row rail with no surrounding box. Items declare a
85
- priority, two widths and three renderings, so the rail degrades before it
86
- drops and never wraps — verified at 80x24, 100x30, 120x40 and 160x50.
87
- Mode and context usage are the last things to go.
88
- - System metrics render vertically with fixed-width labels and right-aligned
89
- values, so the column does not shift when 9% becomes 71%. Miniature bars
90
- appear only when the column affords them. CPU is sampled on a timer rather
91
- than read per render: os.cpus() reports cumulative ticks, so a single reading
92
- carries no rate, and the first reading reports `--` instead of a fabricated 0%.
93
- - Wired by composing around FullscreenLayout rather than adding a slot to it.
94
- That file is React-Compiler output with hand-numbered memo slots and
95
- @ts-nocheck; inserting a slot means renumbering the sequence, and an
96
- off-by-one there produces cached JSX rendered against changed props — a fault
97
- that neither throws nor typechecks. REPL changes by ten lines.
98
- - The deck is fullscreen-only. Inline mode writes to native scrollback, where
99
- there is no fixed viewport and a "fixed" region would scroll away with
100
- everything else. When the terminal is too short for deck, rail and a few
101
- lines of conversation, the shell steps aside and renders content alone rather
102
- than letting Ink silently shrink the fixed regions.
103
-
104
- ## 1.68.14
105
-
106
-
107
- - Gave the MCP settings types their real shapes. `components/mcp/types.ts`
108
- declared seven **empty** interfaces under a "Stub: not included in leaked
109
- source" comment. An empty interface does not mean "unknown shape" to
110
- TypeScript, it means "has no members" — so every property access on one was an
111
- error, and that single file produced ~221 of the 858 errors sitting behind
112
- `@ts-nocheck`. The MCP menus were not wrong; their types were.
113
- - The shapes are reconstructed from what the components actually access, with
114
- `transport` as a literal discriminant so the server union narrows on
115
- `transport === 'stdio'` instead of collapsing. Fields whose internals the UI
116
- never inspects are `Record<string, unknown>` rather than `any`, so a consumer
117
- must still narrow before reaching inside.
118
- - 118 errors cleared, `MCPAgentServerMenu` off the suppression list (141 -> 140).
119
- - Method note: of 42 files carrying exactly one error, nine shared one cause;
120
- 221 more came from this one stub. These cluster, so the productive next step
121
- is grouping by error signature rather than opening files one at a time.
122
-
123
- ## 1.68.13
124
-
125
-
126
- - Eight more files came off `@ts-nocheck` (149 -> 141) from a single fix. The
127
- compiled signature of `useRegisterOverlay(id, t0)` declared two required
128
- parameters while its own first statement reads
129
- `const enabled = t0 === undefined ? true : t0` — the argument was optional by
130
- construction and required by declaration, so every caller passing only an id
131
- was a type error. Marking it optional cleared 10 errors across 10 files.
132
- - That is the shape worth looking for in the rest: of 42 files carrying exactly
133
- one error, nine shared this one cause. The remaining suppressed files surface
134
- ~858 errors, and the useful next step is grouping them by cause rather than
135
- working through them file by file.
136
-
137
- ## 1.68.12
138
-
139
-
140
- - The Ollama request path now reports where a request's bytes actually go —
141
- tool definitions, system prompt, conversation — once per session in the debug
142
- log. The fixed cost of tools plus system prompt is what decides whether a
143
- small-context model has room left to work, and until now it had only been
144
- estimated by summing prompt source. That estimate is wrong by construction:
145
- these prompts are full of `condition ? longText : shortText`, and summing the
146
- file counts both branches when only one is ever sent. The measurement is
147
- taken from the serialized request, so it is what the server receives.
148
- - Reported as a share of the whole with the tool-definition count, because
149
- "system prompt is large" and "conversation is large" call for opposite fixes
150
- and are indistinguishable in a single total.
151
-
152
- ## 1.68.11
153
-
154
-
155
- - Investigated turning the task-list gate advisory by default and did not do
156
- it. The friction it causes is real, but the gate is also the final
157
- revalidation before a tool executes, and defaulting it off removes two
158
- properties nothing else provides: a permission handler or hook that rewrites
159
- a read-only call into a mutating one is re-checked *after* the rewrite, and
160
- task state is re-read at execution time so a plan that disappears while
161
- permission is pending cannot let the mutation through. Eight tests in
162
- `toolExecutionFinalInput` fail the moment enforcement is defaulted off, all
163
- on those two paths. The rule and its revalidation are not separable: the
164
- re-read is how the rule is applied at execution time, so with no rule there
165
- is nothing to revalidate.
166
- - The friction had two causes and both are already fixed forward: the
167
- allowance counted messages instead of tool calls, so the gate fired on the
168
- first Write (1.65.5), and the TodoWrite prompt had lost its worked examples,
169
- so smaller models stopped producing task lists at all (1.68.0). The gate is
170
- reached far less often as a result. `tasks.requireBeforeChanges.enabled`
171
- remains available for anyone who wants it off knowingly.
172
-
173
- ## 1.68.10
174
-
175
-
176
- - `ToolSearchTool` no longer registers on runtimes where it cannot work. Its
177
- purpose is fetching schemas for tools whose definitions were deferred, and
178
- deferral needs the runtime to expand `tool_reference` blocks — an
179
- Anthropic-native beta shape that no UR runtime supports (UR runs on Ollama,
180
- OpenAI-compatible servers and vendor CLIs). `isEnabled()` consulted only
181
- `isToolSearchEnabledOptimistic()`, which reads the mode, and the mode
182
- defaults to `'tst'` (on). The tool therefore registered on every run: its
183
- description shipped with each request, and the model was offered a tool that
184
- could not function, because nothing was ever deferred for it to fetch.
185
- - Audit note on the surface as a whole: 168 commands, of which 8 touch a
186
- feature flag that is not compiled in, and in each case the flag gates a
187
- sub-feature rather than the command. 89 of 91 flags are absent from shipped
188
- builds. Two of those (`CONTEXT_COLLAPSE`, `REACTIVE_COMPACT`) would have
189
- failed on the first turn if enabled and were fixed in 1.68.2.
190
-
191
- ## 1.68.9
192
-
193
-
194
- - Narrowed that allowlist entry from `ur.com` to `ur.com/docs`. Replacing a
195
- docs-only host with a bare domain widened what WebFetch retrieves without
196
- asking, on a list whose own header warns that broad entries are dangerous
197
- where a host may serve user-supplied content — and the domain in question
198
- does not exist yet, so whatever ends up hosted there would have inherited
199
- that trust. The matcher enforces path-segment boundaries, so `/docs-evil/x`
200
- does not match. Caught by `apiTool`, which asserted the old entry.
201
-
202
- ## 1.68.8
203
-
204
-
205
- - The bundled `ur-guide` agent no longer answers UR questions out of another
206
- product's documentation. It instructed the model to fetch
207
- `https://docs.claude.com/llms.txt` and present it to users as "UR SDK docs"
208
- and "UR API docs", including the line "Agent SDK docs are part of the UR API
209
- documentation at the same URL". Its other source, `docs.ur.dev`, was never
210
- served. Both now resolve to `https://ur.com/docs`.
211
- - Replaced the remaining 33 `docs.ur.dev` links across MCP help, the security
212
- dialog, keybindings, settings validation tips, preflight checks and the
213
- feedback survey. Two sandbox dialogs had been pointing their href at the new
214
- domain while still displaying the old one.
215
- - `docs.ur.dev` in the WebFetch preapproved-host allowlist now points at
216
- ur.com. Changed on its own: it is a hostname the fetch tool trusts, not a
217
- link.
218
- - `KNOWN_AGENTS` listed `ur-code-guide`; the registered agent type is
219
- `ur-guide`. A workflow naming the real agent was warned as unknown, while the
220
- listed name would have been accepted despite resolving to nothing.
221
- - Removed a dead `UR_CODE_DOCS_MAP_URL` export from `constants/prompts.ts` —
222
- a duplicate of the live constant, imported by nothing.
223
- - Added `test/docsUrlIntegrity.test.ts`, including a check that a link's
224
- displayed text matches where it actually goes.
225
-
226
- ## 1.68.7
227
-
228
-
229
- - Corrected the ur.ai -> ur.com replacement, which had rewritten identifiers as
230
- well as URLs. `'ur.ai'` served two roles in this codebase: a domain in links
231
- such as `https://ur.ai/settings/billing`, and a discriminant value in
232
- `authTokenSource === 'ur.ai'`, `authMethod = 'ur.ai'` and
233
- `source: 'ur.ai' as const`. A blanket replace changed both, which typechecked
234
- and looked internally consistent but altered command availability — one
235
- command that should have been hidden became visible, caught by
236
- `commandRegistryIntegrity`. The 39 URLs now point at ur.com; the 11 auth
237
- discriminants are back to their original values, which also keeps any
238
- `"ur.ai"` already persisted in a user's auth state matching.
239
-
240
- ## 1.68.6
241
-
242
-
243
- - An oversized Ollama request now recovers instead of only explaining itself.
244
- 1.68.3 reported "this request was 19.6 MB" clearly and then left the user to
245
- run /compact by hand. UR already had both halves of the fix — `isMediaSizeError`
246
- and `stripImagesFromMessages` — but both were wired to reactive compact's
247
- retry, and REACTIVE_COMPACT is not compiled into any shipped build, so neither
248
- was reachable. `isMediaSizeError` and `isMediaSizeErrorMessage` had no callers
249
- at all outside their own file.
250
- - On a body-size rejection the request is retried once with images from earlier
251
- turns removed, keeping the most recent one. Stale attachments are the usual
252
- bulk and the least valuable part of it: only the newest is normally still
253
- under discussion.
254
- - The retry is announced with both sizes and says to re-attach an earlier image
255
- if it is needed. Dropping a user's attachments silently would be the same
256
- invisible behaviour being fixed everywhere else.
257
- - No retry is attempted when there is at most one image-bearing message, since
258
- it would resend identical bytes and fail identically.
259
-
260
- ## 1.68.5
261
-
262
-
263
- - Replaced every `ur.ai` reference in `src/` with `ur.com` (202 sites, 0 left).
264
- Note what these are: most are upstream URL structures carried into the fork —
265
- `/settings/billing`, `/settings/connectors`, `/upgrade/max`, `/chrome`,
266
- `/chrome/reconnect`, `/admin-settings/usage`, and desktop auto-update
267
- redirects like `/api/desktop/darwin/universal/dmg/latest/redirect`. Changing
268
- the domain does not make those endpoints exist; it moves them to a domain UR
269
- will control. The features behind them still need a backend or removal.
270
- - `test/tipsAreReal.test.ts` still forbids `ur.ai` and `ur.com` in tips, since
271
- the domain is not serving yet. Relax that deliberately once it is.
272
- - Corrected a comment in that test which claimed both domains "have no DNS
273
- records". That came from a lookup run where `github.com` and `example.com`
274
- fail identically — the environment had no DNS — so it was never evidence.
275
-
276
- ## 1.68.4
277
-
278
-
279
- - The status line now reports subagents running in the current turn:
280
- `agents: 2 running`, separate from the existing background `tasks:` count.
281
- `isBackgroundTask()` excludes foreground entries on purpose — it was narrowed
282
- to stop stale ratios like `tasks: 0/4 active` outliving the work — but nothing
283
- counted them instead, so while subagents ran the bar said nothing at all,
284
- which is the one moment the number matters.
285
- - Counted conservatively on purpose: a pending agent is not reported as running,
286
- a backgrounded agent is not counted twice across both numbers, a foreground
287
- shell is not labelled an agent, and zero renders nothing rather than
288
- `agents: 0`. A wrong number in a status line is worse than a missing one.
289
- - No tool count was added. A `toolCount` field was drafted and then removed
290
- rather than shipped unpopulated; a meaningful count of in-flight tool calls
291
- needs hooks into tool execution, and a static "tools registered" total is
292
- noise.
293
-
294
- ## 1.68.3
295
-
296
-
297
- - `Ollama request failed (400): http: request body too large` now explains
298
- itself. That string comes from Go's `net/http` MaxBytesReader rejecting the
299
- payload on **byte size**, which is a different limit from the model's context
300
- window — so the token-based context warning added in 1.66.2 never fires for
301
- it, and a couple of screenshots can breach it while the token estimate still
302
- looks comfortable. The request body is now measured at the send site, and the
303
- error reports its actual size, names images as the usual cause (base64 adds
304
- roughly a third, and every image persists in the transcript on later turns),
305
- offers `/compact` or a fresh session, and notes that a reverse proxy in front
306
- of Ollama enforces its own limit (`client_max_body_size` for nginx) which
307
- tuning Ollama would not affect.
308
- - The classifier matches the 413 spellings a proxy returns as well as the Go
309
- 400, and is tested against unrelated 400s so it cannot replace a correct error
310
- with confident, irrelevant advice.
311
-
312
- ## 1.68.2
313
-
314
-
315
- - **Security: explicit file deny rules were not enforced.** `matchingRuleForInput`
316
- resolved which permission rule matched a path by reading `igResult.rule.pattern`
317
- from `ignore().test()`. That property does not exist — `TestResult` is
318
- `{ ignored, unignored }` — and the access sat behind an `igResult.rule` guard,
319
- so the guard was always false and the function returned `null` unconditionally.
320
- Every caller (FileWriteTool, FileEditTool, FileReadTool, PowerShell path
321
- validation, attachments, and the read/write permission checks themselves) does
322
- `const denyRule = matchingRuleForInput(path, ctx, kind, 'deny'); if (denyRule)
323
- { deny }`, so a path the user had explicitly denied was reported as matching no
324
- rule and allowed through. The comment above one call site reads "SECURITY: This
325
- must come before any allow checks ... to prevent bypassing explicit read deny
326
- rules"; the code beneath it had never run.
327
- - The library cannot report which pattern matched, so resolution now tests
328
- patterns individually after a combined fast-path check, and skips the empty
329
- pattern that `/**` reduces to — which would otherwise deny every path.
330
- - `filesystem.ts` and `toolExecution.ts` are off `@ts-nocheck` (149 files remain).
331
- The missing property was invisible to `tsc` for exactly as long as the
332
- suppression was there; this is the defect the ratchet in 1.68.0 was added for.
333
- - Added `test/denyRuleMatching.test.ts`, which asserts the negative case as well
334
- as the positive — the bug made *everything* return `null`, so "returns null for
335
- an unmatched path" proves nothing on its own.
336
-
337
- ## 1.68.1
338
-
339
-
340
- - A detected prompt-injection attempt is now reported to the user instead of
341
- being refused in silence. Consolidating the scattered prompt guidance into the
342
- execution contract was a genuine improvement, but one clause did not survive:
343
- the older text said to "flag it directly to the user", and the replacement
344
- told the model to refuse embedded directives and stopped there. So
345
- `scanForInjection` would correctly flag hostile content, annotate the model's
346
- own copy of the block, write an evidence-ledger entry — and say nothing to the
347
- person whose fetched page or issue comment was carrying the attack. The
348
- detection was never the weak part; the reporting was.
349
-
350
- ## 1.68.0
351
-
352
-
353
- - Removed `@ts-nocheck` from 73 files, putting 21,503 previously unchecked lines
354
- under `tsc`. Every one of those files produced **zero** errors once the
355
- suppression was lifted — they were not suppressed because they were broken,
356
- they were suppressed and then fixed, or never needed it. The blind spot was
357
- 33% larger than the actual debt. Typecheck remains clean at exit 0.
358
- - Added `test/typeCheckCoverage.test.ts`, a ratchet: the `@ts-nocheck` count may
359
- fall but never rise, and the budget must be lowered when files come off the
360
- list so it cannot silently stop ratcheting. It also asserts that `query.ts`,
361
- `permissions.ts`, `filesystem.ts` and `toolExecution.ts` are still suppressed
362
- — a standing reminder that the highest-consequence files are the unchecked
363
- ones, with instructions to delete the test when that stops being true.
364
- - Remaining debt, measured rather than estimated: 150 files, ~870 errors, but
365
- concentrated — 3 files hold 231 of them, while 95 files have 3 or fewer each
366
- and 135 have 10 or fewer. Of the total, 32 are dead build-constant comparisons
367
- from the fork (`'external' === 'ant'`) and 562 are property-access-on-`any`.
368
- The 95 cheap files are the next batch.
369
-
370
- - Restored the worked examples in the TodoWrite tool prompt, with their
371
- narrated tool use removed. After 1.65.5 that
372
- prompt was cut from 184 lines to 48, which removed every demonstration and
373
- left only abstract rules ("work is non-trivial when it needs planning,
374
- investigation, multiple deliverables..."). A large model infers intent from
375
- rules; a small local model pattern-matches on examples. Task lists stopped
376
- being produced, and the task-list gate was then hardened over five successive
377
- commits to force what the prompt no longer taught — which is what produced
378
- refused writes and retry loops on small models. The newer lifecycle rules are
379
- good and are kept; what returns is seven worked examples covering when to use
380
- the list, when not to, and why, including the single-file case where one Write
381
- call still warrants a plan.
382
-
383
- ### Also in this release (was staged as 1.67.0)
384
-
385
- - Two subsystems loaded behind feature flags were not merely disabled, they
386
- were broken in a way that only showed if you enabled them.
387
- `services/compact/reactiveCompact.ts` did not exist on disk at all, yet
388
- `query.ts` requires it by path and `/compact` calls two functions on it;
389
- `services/contextCollapse/index.ts` was a stub exporting four names while
390
- `query.ts` called four different ones, three of which were absent. Setting
391
- either flag would have failed on the first turn with MODULE_NOT_FOUND or
392
- "is not a function" rather than degrading to "feature off". Both modules now
393
- export the full surface their callers use, returning result-shaped objects
394
- instead of null so property access on the result cannot throw.
395
- - Neither was reachable in shipped builds — the bundler passes only VOICE_MODE
396
- and CHICAGO_MCP, and live context management runs through
397
- `services/compact/autoCompact.ts`, which is real and unaffected.
398
- - Added `test/optionalSubsystems.test.ts`, which derives the required exports
399
- from what `query.ts` actually calls rather than from a hand-written list, so
400
- a new call site cannot reintroduce the gap. It also asserts autoCompact has
401
- not itself become a stub.
402
- - Audit note: 223 files carry `@ts-nocheck` and are invisible to
403
- `tsc --noEmit`. Stripping the suppressions in a scratch copy surfaces 872
404
- errors across ~108k lines, including `query.ts`, `permissions.ts` and
405
- `filesystem.ts`. Both defects above sat inside that blind spot.
406
-
407
-
408
- - The original examples narrated tool use as prose ("* Uses the Edit tool to
409
- add a comment *", "*Executes: npm install*"), which is the exact anti-pattern
410
- the same prompt forbids in its closing paragraph — and what a small model
411
- copies when it reports a file as written without calling Write. That is why
412
- the examples were cut, and cutting them was not baseless; it just took the
413
- decision guidance with it. They now return without the narration.
414
-
415
- ## 1.66.2
416
-
417
-
418
- - A long session on Ollama now says when it has run out of context instead of
419
- quietly getting worse. Ollama truncates an oversized prompt from the front
420
- rather than returning an error, and the front of the prompt is the system
421
- prompt — so the first thing discarded is the instruction set. The model then
422
- answers with no tool guidance and no task-list requirement, which from the
423
- outside looks like the model degrading on long prompts rather than like
424
- context running out. Both numbers needed to detect this were already computed
425
- on every request; they were never compared. A near-full context now warns at
426
- 85% and a full one explains what was dropped and offers `/compact`, a fresh
427
- session, a larger-context model, or `UR_OLLAMA_NUM_CTX`.
428
- - Added `test/contextPressure.test.ts`, including that unknown sizing produces
429
- no warning — an unmeasured context is not a full one.
430
-
431
- ## 1.66.1
432
-
433
-
434
- - Corrected the warning-state result used by reactive compaction and context
435
- collapse when a custom proactive threshold is configured. Their
436
- effective-window override can no longer report that the separate proactive
437
- auto-compact trigger was crossed.
438
-
439
- ## 1.66.0
440
-
441
-
442
- - Unified proactive compaction around one model-aware threshold and one live
443
- token estimator. Small context windows now retain positive warning, error,
444
- and trigger thresholds; configured 50–95% thresholds are honored; prompt
445
- notifications, `/context`, and the SDK expose a clamped live-estimated
446
- percentage remaining until the real trigger; reactive/collapse modes do not
447
- claim a false
448
- countdown; and successful compaction clears stale warnings.
449
- - Preserved exact task execution state across full, partial, and
450
- session-memory compaction. The restored authoritative snapshot keeps Task V2
451
- IDs, statuses, owners, and dependency edges (or TodoWrite order/status),
452
- prioritizes actionable work under 64-record and estimated 6,000-token
453
- bounds, and requires `TaskList` before mutations when records were omitted.
454
- - Closed a task-gate bypass caused by compacted history. Compact boundaries
455
- now carry durable metadata that consumes the initial trivial-call allowance,
456
- including SDK serialization, so a model cannot compact and then mutate as
457
- though no earlier tool calls occurred.
458
- - Removed a competing private compaction path from in-process workers. Workers
459
- now use the normal agent query loop and therefore inherit the same feature
460
- flags, exact trigger, session-memory-first path, reactive/collapse policy,
461
- failure circuit breaker, cleanup, and compact-boundary behavior.
462
- - Brought Kimi/Ollama bare task-call recovery into parity with the live task
463
- schemas. Dependency fields, numeric task/dependency IDs, and `failed` or
464
- `skipped` terminal updates are normalized safely; invalid IDs, statuses, and
465
- unknown fields fail closed.
466
- - Audited v1.65.0 through v1.65.5 for regression-safe enhancements. Every
467
- concrete earlier technique is already present or superseded by stricter
468
- current behavior, so no legacy implementation or removed feature was copied
469
- back.
470
-
471
- ## 1.65.14
472
-
473
-
474
- - Restored the proactive task-first behavior that was present in v1.65.0 and
475
- removed a prompt/gate contradiction introduced later. For any non-trivial
476
- state change, including a feature-rich single-file build, the model is now
477
- told at system, task-tool, approved-plan, Ollama/Kimi, file, notebook,
478
- shell, and worker boundaries to complete the available task setup, inspect
479
- its result, mark the selected task `in_progress`, inspect that result, and
480
- only then mutate state.
481
- - Made the ordering unambiguous for weaker models: task setup cannot be batched
482
- with the mutation it enables, approved-plan handoffs require task calls as
483
- the next state-changing calls, terminal task lists must be reopened or
484
- extended before new work, and task guidance appears before file-tool
485
- selection guidance.
486
- - Closed planner availability and control-flow gaps across tool modes. Legacy
487
- `TodoWrite` now follows the same feature-rich/terminal-list lifecycle and is
488
- preferred when Task V2 is incomplete; bare/simple, REPL-simple, coordinator,
489
- custom-agent, and override-prompt paths all receive a usable planner and the
490
- task-state contract. Coordinator workers must be task-bound before launch;
491
- an explicitly planner-less custom tool pool now fails closed with honest
492
- configuration recovery instead of naming a missing tool.
493
- - Prevented task-gate deadlocks and false mutations in supporting tools.
494
- Team creation/deletion, shutdown/plan control messages, and emergency task
495
- stop are narrow control transitions; skill loading and desktop screenshots
496
- are read-only while downstream skill work, desktop input, and arbitrary
497
- state-changing tools remain gated.
498
-
499
- ## 1.65.13
500
-
501
-
502
- - Recovered otherwise valid `AskUserQuestion` calls whose UI header exceeds
503
- the 12-character chip width. Native structured calls, bare/wrapped JSON, and
504
- explicit-choice recovery now compact only that bounded presentation field;
505
- questions, choices, labels, descriptions, previews, metadata, and selection
506
- behavior remain unchanged, while unsafe or grossly oversized headers still
507
- fail validation.
508
- - Allowed strictly parsed syntax verification after a task-free one-shot
509
- Write. `node --check <file>` and the bounded transcript-produced HTML script
510
- checker bypass only the task-list requirement; arbitrary Node evaluation,
511
- extra commands, redirects, backgrounding, sandbox overrides, and
512
- permission-time rewrites fail closed, and normal Bash permission/sandbox
513
- checks still apply.
514
-
515
- ## 1.65.12
516
-
517
-
518
- - Forced explicit weak-model decision menus through the real
519
- `AskUserQuestion` UI. A provider-neutral end-turn guard accepts only one
520
- canonical Ask object from explicit reasoning or one complete rigid Markdown
521
- choice menu, validates it unchanged against the live tool schema, and rejects
522
- examples, ambiguity, ordinary prose, workers, and headless sessions.
523
- - Removed two task-list dead ends without weakening the mutation boundary.
524
- Live plan mode may run only the exact current plan-directory bootstrap Bash
525
- shape before tasks exist, and the last actionable task remains `in_progress`
526
- when a file mutation has no later successful observable check. The same task
527
- can then be verified or corrected instead of creating a duplicate.
528
- - Improved exact `Edit` mismatch recovery for stale HTML blocks. Diagnostics
529
- now select the most distinctive verified line near the real target, such as
530
- `<script>`, rather than an unrelated generic closing tag; edits remain
531
- fail-closed and never apply fuzzy replacements.
532
- - Raised the default Ollama Cloud timeout for the known-slow Kimi K2.7 family
533
- from 120 to 300 seconds in both streaming and permitted non-streaming paths.
534
- Explicit timeouts and the stricter remote-session ceiling still take
535
- precedence.
536
-
537
- ## 1.65.11
538
-
539
-
540
- - Hardened `AskUserQuestion` for weaker models without inventing user intent.
541
- Its model schema now exposes only a strict 1–4-question request shape with
542
- 2–8 nested choices, compact validation explains malformed flat arrays, and
543
- lossless recovery never fabricates labels, descriptions, or prose-derived
544
- questions.
545
- - Made question interaction truthful and safe. Answers are accepted only after
546
- post-permission validation has collected one real response per question,
547
- custom `Other` works in both menu layouts, question-keyed UI state is
548
- prototype-safe, and HTML-configured previews render escaped inert text
549
- instead of executable model markup.
550
- - Improved weak-model file-tool recovery. `Write` now explains that
551
- `file_path` and complete `content` must be supplied together and never treats
552
- surrounding prose as file data; a narrow deletion-only `Edit` whose desired
553
- replacement is already uniquely present reports “already up to date” without
554
- writing, while ambiguous and general stale edits still fail closed.
555
- - Corrected task-gate control flow and diagnostics. `ExitPlanMode` can reach
556
- its approval transition without an implementation task, stale out-of-mode
557
- calls remain invalid, and gate recovery distinguishes a missing plan from an
558
- all-terminal task list so unfinished Edit/Bash work is reopened rather than
559
- retried unchanged. A simple loopback browser preview bypasses only the task
560
- gate while retaining Bash permission and rewrite checks.
561
- - Kept package validation compatible with both npm 11 and npm 12
562
- `npm pack --json` output shapes, so upgrading npm does not make a valid
563
- tarball look missing during tests or release checks.
564
-
565
- ## 1.65.10
566
-
567
-
568
- - Reworked approved-plan execution into a capability-aware task graph. Plans
569
- now split separately completable outcomes, keep genuinely atomic work whole,
570
- express review-to-fix and verification dependencies, and launch only ready,
571
- non-conflicting work in parallel waves of at most eight. The handoff uses
572
- `TaskCreate`/`TaskUpdate`, `TodoWrite`, or the numbered plan according to the
573
- tools actually available, and never advertises a worker that is not active.
574
- - Made the built-in Explore and Plan agents available in the standard CLI with
575
- structurally read-only tools. Parent and child execution boundaries reject
576
- mutations even after permission-hook rewrites, custom agents cannot inherit
577
- the exemption by reusing a name, and team creation/deletion rechecks live
578
- plan mode before changing state.
579
- - Task tools now accept positive safe-integer JSON task IDs as well as strings
580
- and normalize them to canonical persisted strings, fixing smaller models
581
- that call `TaskUpdate` with `taskId: 1`.
582
- - Exact edit failures now return a bounded preview and a verified line anchor
583
- for a fresh, smaller contiguous match. Large cross-section replacements fail
584
- closed with actionable recovery instead of retrying unchanged or applying a
585
- risky fuzzy edit.
586
-
587
- ## 1.65.9
588
-
589
-
590
- - Fixed the plan-file/task-list deadlock. While plan mode is active, the exact
591
- normalized session plan file can be written before actionable tasks exist;
592
- ordinary workspace mutations still require `TaskCreate`/`TodoWrite`, and
593
- permission or hook rewrites are reclassified at the final execution boundary.
594
- - Fixed `ExitPlanMode` approval races. Permission approval can change the mode
595
- and rewrite allowed prompts or edited plan content without causing a false
596
- “not in plan mode” error, while genuinely new out-of-mode calls remain
597
- rejected. The compact execution contract now distinguishes ordered task
598
- tracking from explicit plan mode for weaker models.
599
- - Fixed Linux GitHub Actions and release validation without misrepresenting the
600
- product surface. Registry checks now use the platform-neutral
601
- 167-command/160-visible/235-token baseline and verify the supported macOS and
602
- x64 Windows `/desktop` (`/app`) delta separately.
603
-
604
- ## 1.65.8
605
-
606
-
607
- - Fixed provider API-key entry in `/model`: the masked input now uses the
608
- available terminal width, explicit cursor/focus state, and a one-line secret
609
- viewport instead of rendering one masked character per row. Narrow and
610
- invalid resize states retain a safe minimum width.
611
-
612
- ## 1.65.7
613
-
614
-
615
- - Audited all 14 technical chapters against the shipped source and generated
616
- CLI. The manual now distinguishes public runtime behavior from compile-time
617
- flags, compatibility-only state, and source helpers; it is included in the
618
- npm package and checked for valid paths, commands, configuration, and package
619
- coverage.
620
- - Reworked agent guidance into one compact, ordered execution contract plus
621
- mode-specific code, research, debug, browser, image, video, and data
622
- workflows. Structured tool calls, dependency-aware planning, bounded
623
- parallelism, failure recovery, result inspection, verification, honest
624
- completion, and prompt-injection boundaries remain explicit without unsafe
625
- package-manager guesses or examples that merely narrate fake tool calls.
626
- - Hardened task execution end to end. Both Task V2 and legacy TodoWrite plans
627
- participate in mutation and completion gates, task order is numeric and
628
- dependency-aware, failed/skipped states are rendered honestly, and the
629
- verifier refuses an overall completion while actionable work remains or task
630
- state cannot be read.
631
- - Workflow execution now checks approval before invoking a side effect,
632
- enforces verification unless explicitly advisory, records every settled
633
- parallel branch, and persists progress atomically. Resume restores bounded
634
- exact dependency outputs without replaying completed steps; missing or
635
- oversized required output fails closed and explains how to recover.
636
- - Multi-agent crews and planned `/exec` runs use bounded parallel workers,
637
- dependency fan-in, exact verdicts, cancellation-aware respawn, isolated retry
638
- worktrees, and a shared-checkout write gate. Ambiguous side effects are not
639
- replayed, per-prompt worktrees keep dependent steps together, and concurrent
640
- output files cannot overwrite one another.
641
- - Fixed false-success and argument-parsing behavior across root and slash
642
- commands. Invalid usage returns 2, failed operations return 1, child process
643
- failures propagate, previews do not mutate, and claim-ledger persistence is
644
- structurally validated, workspace-contained, private, atomic, and bounded.
645
- - Strengthened provider and tool-call interoperability for smaller/local
646
- models: streamed calls keep stable ordinals, cumulative fragments are
647
- deduplicated conservatively, malformed or rewritten inputs are revalidated,
648
- Ollama image results and session-host overrides are preserved, and OpenAI
649
- Responses transport settings now reach actual client selection.
650
- - Improved terminal task UX: live task/status displays use the selected
651
- session model, show only actionable or active background work, preserve
652
- selection as rows change, handle narrow terminals, expose blockers and every
653
- terminal status, and never advertise blocked work as the next action.
654
- - Hardened session, export, research, notes, file-operation, worktree, and
655
- sandbox paths against traversal, symlink escape, oversized/corrupt state,
656
- interrupted writes, stale replay, and misleading success. Unsupported
657
- workflow/monitor task implementations remain inspectable as history but are
658
- no longer presented as runnable.
659
- - Added a typed `ur-agent/sdk` subpath for ESM and CommonJS with validated
660
- subprocess inputs, deterministic JSON/NDJSON result parsing, environment
661
- precedence, and nonzero-exit handling. Release gates rebuild generated
662
- artifacts before publish, smoke-test both SDK module formats from the packed
663
- tarball, require the technical manual, and verify runtime dependency ranges.
3
+ ## 1.69.0
4
+
5
+ - Rolled the codebase back to the state shipped as 1.65.6. Everything released
6
+ between 1.65.7 and 1.68.19 is withdrawn from this line. The version number
7
+ moves forward rather than back so npm and existing installs upgrade cleanly.
8
+ - No functional change relative to 1.65.6. Commit history for the withdrawn
9
+ releases is retained and any part of it can be reintroduced in a later
10
+ release.
11
+ - Fixed the packaged-CLI smoke check failing on npm 11 and later. It read the
12
+ `npm pack --json` report as an array, but npm now returns an object keyed by
13
+ package name, so a successful pack was reported as "npm pack did not report a
14
+ tarball" and the release gate failed on every modern npm. Both shapes are now
15
+ accepted. The check lives in `scripts/`, which is not published, so the
16
+ released artifact is unaffected.
664
17
 
665
18
  ## 1.65.6
666
19
 
667
-
668
20
  - Remote sessions no longer reconnect forever when the server repeatedly
669
21
  accepts a WebSocket upgrade and then reports that the session is missing.
670
22
  Repeated `connect()` calls reuse the live client, malformed permission and
@@ -725,7 +77,6 @@
725
77
 
726
78
  ## 1.65.5
727
79
 
728
-
729
80
  - Syntax highlighting works again — in assistant messages, code previews and
730
81
  question dialogs. `cli-highlight` was imported by four rendering surfaces and
731
82
  declared in `package.json` by none of them, so the import threw on every run
@@ -752,7 +103,6 @@
752
103
  could leave a stale value on screen after a switch.
753
104
  ## 1.65.4
754
105
 
755
-
756
106
  - A tool call that keeps failing identically is now stopped. A 4B model refused
757
107
  once by the task-list gate answered by emitting `Write` with no arguments
758
108
  repeatedly, and nothing intervened — the trajectory grader names this pattern
@@ -768,7 +118,6 @@
768
118
 
769
119
  ## 1.65.3
770
120
 
771
-
772
121
  - Removed two tips for things that do not exist: `/mobile to use UR from the
773
122
  UR app on your phone` (no such command, no such app) and a pointer to
774
123
  `ur.ai/web` (no DNS record, same dead domain class as the `ur.com` links
@@ -786,7 +135,6 @@
786
135
 
787
136
  ## 1.65.2
788
137
 
789
-
790
138
  - Fixed `--discover-ollama` having no effect on model discovery or requests.
791
139
  `getOllamaBaseUrl` resolves the session host correctly, but three callers
792
140
  read a persisted `provider.baseUrl` *before* consulting it, so a value
@@ -825,7 +173,6 @@
825
173
 
826
174
  ## 1.65.1
827
175
 
828
-
829
176
  - Fixed `ur selftest run` reporting 0/5 anywhere but the UR repo. The drill
830
177
  runner spawned `./bin/ur.js`, a path relative to the current directory, so
831
178
  every drill failed instantly with an empty detail — which reads as five
@@ -839,7 +186,6 @@
839
186
 
840
187
  ## 1.65.0
841
188
 
842
-
843
189
  - The release gate now asks the registry whether the packed dependency ranges
844
190
  can actually be installed. This is the check that was missing when 1.61.2
845
191
  through 1.64.0 shipped uninstallable: the tarball built, the CLI started,
@@ -855,7 +201,6 @@
855
201
 
856
202
  ## 1.64.1
857
203
 
858
-
859
204
  - Fixed `npm install -g ur-agent` failing with
860
205
  `No matching version found for playwright-core@^1.64.0`. Releases 1.61.2,
861
206
  1.62.0, 1.63.0 and 1.64.0 were uninstallable: the version bump was a
@@ -873,7 +218,6 @@
873
218
 
874
219
  ## 1.64.0
875
220
 
876
-
877
221
  - Tool-result pruning now announces itself. It changed context silently, so
878
222
  there was no way to confirm it fired or to attribute a missing detail to it —
879
223
  the same defect memory suggestions had when they went to stderr. A prune now
@@ -898,7 +242,6 @@
898
242
 
899
243
  ## 1.63.0
900
244
 
901
-
902
245
  - Added size-triggered pruning of superseded tool results
903
246
  (`context.pruneToolResults`). UR already had the clearing machinery, but
904
247
  nothing external could reach it: cached microcompact is internal-only and
@@ -918,7 +261,6 @@
918
261
 
919
262
  ## 1.62.0
920
263
 
921
-
922
264
  - `ur agent-inspect --costs` now labels each row with what the agent was
923
265
  actually doing. A real 62-agent fan-out reported opaque hex ids, so you could
924
266
  see that one agent burned 810k input tokens — 14% of the session — without
@@ -930,7 +272,6 @@
930
272
 
931
273
  ## 1.61.2
932
274
 
933
-
934
275
  - Fixed `ur agent-inspect --costs` reporting nothing, always. It resolved the
935
276
  *live* session, but every `ur` invocation mints a new session id, so bare it
936
277
  pointed at a session created milliseconds earlier that had by definition
@@ -944,7 +285,6 @@
944
285
 
945
286
  ## 1.61.1
946
287
 
947
-
948
288
  - Fixed secondary model queries failing on any Ollama setup whose session model
949
289
  is not `qwen2.5-coder:7b`. `getSmallFastModel()` fell back to the compiled
950
290
  default when auto-routing was off or no model list had been discovered, so a
@@ -961,7 +301,6 @@
961
301
 
962
302
  ## 1.61.0
963
303
 
964
-
965
304
  - Added `ur selftest`, end-to-end drills for the gap that produced every
966
305
  serious defect in recent releases: a module that is correct while something
967
306
  between it and the user is not — a wire format, a CLI registration, an exit
@@ -981,7 +320,6 @@
981
320
 
982
321
  ## 1.60.1
983
322
 
984
-
985
323
  - `ur memory-integrity verify` no longer reports an empty or missing store as
986
324
  verified. It printed "verified — 0 file(s) match the recorded digests" for an
987
325
  empty directory, and that identical reassurance would have appeared for a
@@ -997,7 +335,6 @@
997
335
 
998
336
  ## 1.60.0
999
337
 
1000
-
1001
338
  - Added `ur memory-integrity`, tamper-evidence for the file-backed memory
1002
339
  stores. Project task memory was hash-chained and could prove tampering; the
1003
340
  auto-memory and team-memory directories had nothing, and their contents are
@@ -1025,7 +362,6 @@
1025
362
 
1026
363
  ## 1.59.0
1027
364
 
1028
-
1029
365
  - Added `ur sources`, a claim-to-source ledger. `wrapUntrusted` already stamped
1030
366
  every untrusted block with a nonce and a source label, but discarded both the
1031
367
  moment the block reached the model, so there was no way to audit what web or
@@ -1052,7 +388,6 @@
1052
388
 
1053
389
  ## 1.58.1
1054
390
 
1055
-
1056
391
  - Unified vision-capability detection behind
1057
392
  `src/utils/model/visionCapability.ts`. Three implementations disagreed: the
1058
393
  Ollama adapter's `modelCapabilityEnabled` returned `has(x) ?? true`, so a
@@ -1075,7 +410,6 @@
1075
410
 
1076
411
  ## 1.58.0
1077
412
 
1078
-
1079
413
  - Added per-agent cost and token attribution: `ur agent-inspect --costs`.
1080
414
  `stats.ts` already read every `{sessionId}/subagents/agent-{agentId}.jsonl`
1081
415
  transcript, but only to fold those tokens into a single total, so a fan-out
@@ -1090,7 +424,6 @@
1090
424
 
1091
425
  ## 1.57.5
1092
426
 
1093
-
1094
427
  - Fixed the release gate failing on `repoEditImports`. The gate runs
1095
428
  `bun test --timeout 120000`, but a per-test budget silently overrides that
1096
429
  global, and this test declared 15s while its body — which builds a
@@ -1102,7 +435,6 @@
1102
435
 
1103
436
  ## 1.57.4
1104
437
 
1105
-
1106
438
  - Fixed slash command arguments being silently truncated. `parseArguments`
1107
439
  kept only the string tokens shell-quote returned, but shell-quote classifies
1108
440
  `left?` and `src/*.ts` as globs and `&`, `>`, `(` as operators — so
@@ -1126,7 +458,6 @@
1126
458
 
1127
459
  ## 1.57.3
1128
460
 
1129
-
1130
461
  - Stopped a false diagnosis on failed tool calls. When a tool call failed
1131
462
  schema validation, UR appended "this tool's schema was not sent to the API"
1132
463
  and told the model to load it via `ToolSearch`. Both claims were wrong on
@@ -1143,7 +474,6 @@
1143
474
 
1144
475
  ## 1.57.2
1145
476
 
1146
-
1147
477
  - Fixed the Ollama adapter discarding images returned by tools. A tool result
1148
478
  containing an image was flattened with `contentBlockToText`, which renders an
1149
479
  image block as the literal string `[Image output omitted]` — so a `Computer`
@@ -1158,7 +488,6 @@
1158
488
 
1159
489
  ## 1.57.1
1160
490
 
1161
-
1162
491
  - Fixed the `Computer` tool returning a byte count instead of the screenshot.
1163
492
  `mapToolResultToToolResultBlockParam` dropped the captured image, so the
1164
493
  model saw only "Captured 5164460 bytes" and had to ask the user where to save
@@ -1170,7 +499,6 @@
1170
499
 
1171
500
  ## 1.57.0
1172
501
 
1173
-
1174
502
  - Connected four features that were built, tested and then left unreachable.
1175
503
  Each had passing unit tests while contributing nothing to a real session.
1176
504
  - `wrapUntrusted()` now runs on WebFetch and WebSearch results, at the
@@ -1199,7 +527,6 @@
1199
527
 
1200
528
  ## 1.56.1
1201
529
 
1202
-
1203
530
  - Documented the 1.52.0–1.56.0 features, which had reached `technical/03` as
1204
531
  command rows but nowhere else. Doc 09 now covers the fan-out limits and how
1205
532
  to run several workers at once; doc 12 covers the prompt-injection module and
@@ -1210,7 +537,6 @@
1210
537
 
1211
538
  ## 1.56.0
1212
539
 
1213
-
1214
540
  - Added a subagent fan-out governor. Agents could spawn agents with no depth or
1215
541
  concurrency bound, and `/crew`, `/arena`, `/bg fanout` and `/pattern` all
1216
542
  spawn several at once, so a single prompt could expand into an unbounded tree
@@ -1239,7 +565,6 @@
1239
565
 
1240
566
  ## 1.55.0
1241
567
 
1242
-
1243
568
  - Narrowed `APIProvider` to the two values `getAPIProvider()` can actually
1244
569
  return, `'foundry' | 'ollama'`, and let the compiler find every dead branch.
1245
570
  It surfaced 66 errors across 25 files; all are now resolved and the
@@ -1266,7 +591,6 @@
1266
591
 
1267
592
  ## 1.54.1
1268
593
 
1269
-
1270
594
  - Fixed `/speak`, `/computer`, `/memory-suggest`, `/import-session` and
1271
595
  `/permission-profile` being unreachable from the shell. They were registered
1272
596
  as slash commands but never wired into the Commander tree in `main.tsx`, so
@@ -1282,7 +606,6 @@
1282
606
 
1283
607
  ## 1.54.0
1284
608
 
1285
-
1286
609
  - Wired the 1.53.0 capability libraries into runnable commands. They were
1287
610
  verified modules but nothing invoked them; these are the execution paths.
1288
611
  - Added `/speak <text>` (alias `/say`), which drives the platform speech
@@ -1302,7 +625,6 @@
1302
625
 
1303
626
  ## 1.53.0
1304
627
 
1305
-
1306
628
  - Added automatic memory extraction (`src/memdir/extractFacts.ts`). Durable
1307
629
  preferences and project conventions are proposed from user messages, deduped
1308
630
  against stored memory by normalized key and containment, and ranked by
@@ -1333,7 +655,6 @@
1333
655
 
1334
656
  ## 1.52.0
1335
657
 
1336
-
1337
658
  - Implemented Ollama Cloud authentication. The Ollama client sent no
1338
659
  `Authorization` header at all, so the hosted API was unreachable: local
1339
660
  sessions only worked because the signed-in daemon proxies `:cloud` models on
@@ -1354,7 +675,6 @@
1354
675
 
1355
676
  ## 1.51.0
1356
677
 
1357
-
1358
678
  - Added named permission profiles. `settings.permissions.profiles` holds named
1359
679
  rule sets (allow/deny/ask plus a description) and
1360
680
  `settings.permissions.activeProfile` selects one; its rules are appended to
@@ -1373,7 +693,6 @@
1373
693
 
1374
694
  ## 1.50.6
1375
695
 
1376
-
1377
696
  - Implemented `--effort` on Ollama. The support predicate compared
1378
697
  `getAPIProvider()` against `'firstParty'` — a value it can never return — so
1379
698
  the advertised flag was silently dropped everywhere. Effort is now advertised
@@ -1409,7 +728,6 @@
1409
728
 
1410
729
  ## 1.50.5
1411
730
 
1412
-
1413
731
  - Added `.github/workflows/release.yml`. The repository had only a test
1414
732
  workflow, so tags never became production releases: 18 tags existed with no
1415
733
  GitHub Release and no automated publish. Pushing a `v*` tag now runs the full
@@ -1424,7 +742,6 @@
1424
742
 
1425
743
  ## 1.50.4
1426
744
 
1427
-
1428
745
  - Removed the `/install-github-app` command and its GitHub App setup flow,
1429
746
  along with the startup tip suggesting `@ur` be tagged from issues and pull
1430
747
  requests. The composite action at the repository root is removed with it.
@@ -1435,7 +752,6 @@
1435
752
 
1436
753
  ## 1.50.3
1437
754
 
1438
-
1439
755
  - Removed the GitHub App installation step from `/install-github-app`. UR
1440
756
  authenticates in CI with the workflow's built-in `GITHUB_TOKEN` and a
1441
757
  repository secret, so there is no app to install and no bot identity to
@@ -1451,7 +767,6 @@
1451
767
 
1452
768
  ## 1.50.2
1453
769
 
1454
-
1455
770
  - Fixed local-provider sessions showing "Not logged in · Run /login" with no
1456
771
  account to log in to, introduced in 1.50.1. Credential ownership and URHQ
1457
772
  auth applicability are separate questions: an Ollama session uses the user's
@@ -1466,7 +781,6 @@
1466
781
 
1467
782
  ## 1.50.1
1468
783
 
1469
-
1470
784
  - Fixed an always-true provider test that silently disabled a large part of the
1471
785
  command surface. `isUsing3PServices()` was derived from `getAPIProvider()`,
1472
786
  a request-shaping enum that never returns `'firstParty'`, so the comparison
@@ -1485,7 +799,6 @@
1485
799
 
1486
800
  ## 1.50.0
1487
801
 
1488
-
1489
802
  - Completed `/install-github-app` so `@ur <task>` works from GitHub. The
1490
803
  mention now triggers on issue comments, pull-request comments, inline review
1491
804
  comments, submitted reviews, and new issues; `/ur` remains accepted. Matching
@@ -1518,7 +831,6 @@
1518
831
 
1519
832
  ## 1.49.0
1520
833
 
1521
-
1522
834
  - Added cryptographically signed A2A Agent Cards: RFC 7515 detached JWS over
1523
835
  the RFC 8785 canonical form of the card, using Ed25519 (`alg: "EdDSA"`).
1524
836
  Verification recomputes the payload with `signatures` excluded, so a card can
@@ -1535,7 +847,6 @@
1535
847
 
1536
848
  ## 1.48.0
1537
849
 
1538
-
1539
850
  - Added managed cloud fan-out with durable, idempotent steering, owner-scoped
1540
851
  mobile/A2A control, explicit PASS plus safe-branch selection, and
1541
852
  cancellation-safe task transitions.
@@ -1554,7 +865,6 @@
1554
865
 
1555
866
  ## 1.47.1
1556
867
 
1557
-
1558
868
  - Hardened file downloads, filesystem permission checks, and signed skill
1559
869
  trees against traversal and chained-symlink escapes.
1560
870
  - Fixed task-memory integrity validation, prompt-plan file locking and change
@@ -1568,7 +878,6 @@
1568
878
 
1569
879
  ## 1.47.0
1570
880
 
1571
-
1572
881
  - Added a secure, opt-in AG-UI HTTP/SSE adapter with official schema/encoder
1573
882
  integration, truthful capability discovery, ordered text/tool/state events,
1574
883
  cancellation, exact CORS, bearer protection for network exposure, resource
@@ -1607,7 +916,6 @@
1607
916
 
1608
917
  ## 1.46.0
1609
918
 
1610
-
1611
919
  - Added a stable, official-SDK ACP v1 stdio agent with resumable sessions,
1612
920
  client MCP transports and additional roots, streamed updates, native
1613
921
  permission requests, cancellation, and private persisted session identity.
@@ -1639,7 +947,6 @@
1639
947
 
1640
948
  ## 1.45.6
1641
949
 
1642
-
1643
950
  - Deduplicated project verification approval so compile/test/lint commands are
1644
951
  offered at most once per user turn. The approval marker is cleared for the
1645
952
  next user task, preserving one explicit decision per task.
@@ -1649,7 +956,6 @@
1649
956
 
1650
957
  ## 1.45.5
1651
958
 
1652
-
1653
959
  - Bounded Ollama Cloud response-header and streaming phases to 120 seconds by
1654
960
  default while preserving the five-minute allowance for local Ollama models.
1655
961
  `API_TIMEOUT_MS` and per-request timeouts still take precedence.
@@ -1665,7 +971,6 @@
1665
971
 
1666
972
  ## 1.45.4
1667
973
 
1668
-
1669
974
  - Added mandatory provider-first model selection for the first interactive run
1670
975
  in every workspace that has no project-local model. The validated provider
1671
976
  and model pair is saved to `.ur/settings.local.json` before the REPL starts.
@@ -1678,7 +983,6 @@
1678
983
 
1679
984
  ## 1.45.3
1680
985
 
1681
-
1682
986
  - Made slash-command resolution deterministic across bundled skills, plugins,
1683
987
  project skills, workflows, and built-ins. Duplicate canonical tokens are
1684
988
  rejected by source priority and conflicting aliases are removed; registry
@@ -1699,7 +1003,6 @@
1699
1003
 
1700
1004
  ## 1.45.2
1701
1005
 
1702
-
1703
1006
  Correctness and containment release completing the runtime audit.
1704
1007
 
1705
1008
  - Made sandbox, security-scope, WebFetch, API, browser, database, test-runner,
@@ -1732,7 +1035,6 @@ Correctness and containment release completing the runtime audit.
1732
1035
 
1733
1036
  ## 1.45.1
1734
1037
 
1735
-
1736
1038
  Completes the three partially-delivered 1.45.0 items to 100%.
1737
1039
 
1738
1040
  - Semantic code search is now zero-config: the CodeSearch tool auto-enables
@@ -1749,7 +1051,6 @@ Completes the three partially-delivered 1.45.0 items to 100%.
1749
1051
 
1750
1052
  ## 1.45.0
1751
1053
 
1752
-
1753
1054
  Top-tier feature release — closes the gaps against 2026's leading agents.
1754
1055
 
1755
1056
  - `ur cloud` — detached best-of-N tasks (the local-first codex-cloud
@@ -1794,7 +1095,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1794
1095
 
1795
1096
  ## 1.44.10
1796
1097
 
1797
-
1798
1098
  - Render `AskUserQuestion` permission requests inside a `PermissionDialog` so
1799
1099
  multiple-choice options appear as a bordered dialog box rather than a plain
1800
1100
  list.
@@ -1807,7 +1107,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1807
1107
 
1808
1108
  ## 1.44.9
1809
1109
 
1810
-
1811
1110
  - Fix recurring "String to replace not found in file" Edit errors by adding
1812
1111
  whitespace-tolerant matching (trailing whitespace, tab/space indentation).
1813
1112
  - Fix AskUserQuestion "questions type expected as array" validation errors by
@@ -1815,7 +1114,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1815
1114
 
1816
1115
  ## 1.44.8
1817
1116
 
1818
-
1819
1117
  - Keep auto-memory and automatic learning on by default with explicit opt-outs.
1820
1118
  Automatic learning can now be disabled with `automaticLearningEnabled: false`
1821
1119
  or `UR_CODE_DISABLE_AUTO_LEARNING=1`.
@@ -1826,7 +1124,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1826
1124
 
1827
1125
  ## 1.44.7
1828
1126
 
1829
-
1830
1127
  - Add `autoApprove` permission mode for command/tool approval prompts. It
1831
1128
  auto-approves operations that would otherwise require permission approval,
1832
1129
  while preserving user-input dialogs and explicit denials.
@@ -1834,17 +1131,14 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1834
1131
 
1835
1132
  ## 1.44.6
1836
1133
 
1837
-
1838
1134
  - Internal permission-mode iteration superseded by `1.44.7`.
1839
1135
 
1840
1136
  ## 1.44.5
1841
1137
 
1842
-
1843
1138
  - Internal permission-mode iteration superseded by `1.44.6`.
1844
1139
 
1845
1140
  ## 1.44.4
1846
1141
 
1847
-
1848
1142
  - The agent now learns from every run automatically — no `/learn run` needed.
1849
1143
  ci-loop, arena, escalation, and test-first completions fold their pass/fail
1850
1144
  outcome (per task category and model) into `.ur/learning/stats.json` as a
@@ -1866,7 +1160,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1866
1160
 
1867
1161
  ## 1.44.3
1868
1162
 
1869
-
1870
1163
  - Make thinking visually distinct from answers: thinking blocks are labeled
1871
1164
  "model reasoning to itself — not the answer" (dim italic, left-bordered when
1872
1165
  expanded); answer text carries an accent-colored ⏺ marker.
@@ -1900,7 +1193,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1900
1193
 
1901
1194
  ## 1.44.2
1902
1195
 
1903
-
1904
1196
  - Fix Ollama streamed tool-call accumulation: Ollama streams each completed
1905
1197
  tool call in its own chunk, but the merge logic overwrote call N-1 with
1906
1198
  call N, collapsing multi-call turns (e.g. several `Write` calls scaffolding
@@ -1925,7 +1217,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1925
1217
 
1926
1218
  ## 1.44.1
1927
1219
 
1928
-
1929
1220
  - Fix task board rendering: finished, failed, and skipped tasks now render as
1930
1221
  checked instead of unchecked.
1931
1222
  - Deduplicate consecutive task board emissions and keep final boards clean
@@ -1933,7 +1224,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1933
1224
 
1934
1225
  ## 1.44.0
1935
1226
 
1936
-
1937
1227
  - Add `verifier.askBeforeGates` setting (default `false`). When enabled, UR asks
1938
1228
  via `AskUserQuestion` whether to run project verification commands after a
1939
1229
  task, instead of auto-running tests/typecheck/lint gates. Available in
@@ -1944,7 +1234,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1944
1234
 
1945
1235
  ## 1.43.6
1946
1236
 
1947
-
1948
1237
  - Render output from reasoning models on OpenAI-compatible providers (LM Studio,
1949
1238
  vLLM). The streaming and non-streaming parsers now read `reasoning_content`
1950
1239
  (and `reasoning`) deltas and surface them as thinking blocks. Models that emit
@@ -1953,7 +1242,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1953
1242
 
1954
1243
  ## 1.43.5
1955
1244
 
1956
-
1957
1245
  - Fix model discovery for OpenAI-compatible providers (LM Studio, llama.cpp,
1958
1246
  vLLM) when base_url omits the API version segment. Discovery and `ur provider
1959
1247
  doctor` now also try `/v1/models` when base_url is just `host:port`, so
@@ -1963,7 +1251,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1963
1251
 
1964
1252
  ## 1.43.4
1965
1253
 
1966
-
1967
1254
  - Tolerate hallucinated extra parameters on tool calls: when input validation
1968
1255
  fails only because of unrecognized keys (e.g. `title`/`description` on a
1969
1256
  `Write` call), those keys are stripped and the call is re-validated instead
@@ -1972,7 +1259,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1972
1259
 
1973
1260
  ## 1.43.3
1974
1261
 
1975
-
1976
1262
  - Bias the assistant toward the interactive arrow-key select menu: the
1977
1263
  AskUserQuestion tool guidance now instructs the model to use the selectable
1978
1264
  menu whenever it offers the user a choice, instead of asking a free-form
@@ -1980,7 +1266,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1980
1266
 
1981
1267
  ## 1.43.2
1982
1268
 
1983
-
1984
1269
  - Fix artifact pages hanging blank: diff viewer assets (diff2html,
1985
1270
  highlight.js theme) are now served locally from `/assets` via the new
1986
1271
  `diff2html` dependency instead of render-blocking CDN tags, and the viewer
@@ -1991,7 +1276,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
1991
1276
 
1992
1277
  ## 1.43.1
1993
1278
 
1994
-
1995
1279
  - Artifacts page renders diffs VS Code-style: side-by-side/inline views with
1996
1280
  syntax highlighting via diff2html (plain-text fallback when offline). New
1997
1281
  live view `/diff` shows current working-tree changes without manual capture,
@@ -2003,7 +1287,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2003
1287
 
2004
1288
  ## 1.43.0
2005
1289
 
2006
-
2007
1290
  - Add `ur artifacts serve [--port 4180]`: a local web page for artifacts.
2008
1291
  `GET /artifacts/<id>` renders one artifact (status, summary, feedback,
2009
1292
  content), `/` lists all, with `/artifacts/<id>/raw` and `/api/artifacts[/<id>]`
@@ -2011,7 +1294,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2011
1294
 
2012
1295
  ## 1.42.0
2013
1296
 
2014
-
2015
1297
  - Project safety policy no longer hard-blocks commands. Risky or deny-matched
2016
1298
  commands (package installs, destructive git operations, secret access,
2017
1299
  sandbox-required commands when the sandbox is unavailable) now surface as
@@ -2020,7 +1302,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2020
1302
 
2021
1303
  ## 1.41.1
2022
1304
 
2023
-
2024
1305
  - Harden provider tests against stored API keys in the local secure storage.
2025
1306
  - Revert sandbox default to disabled; expose `sandbox.enabled`,
2026
1307
  `sandbox.failIfUnavailable`, and `sandbox.allowUnsandboxedCommands` through
@@ -2028,7 +1309,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2028
1309
 
2029
1310
  ## 1.41.0
2030
1311
 
2031
-
2032
1312
  - Persist the model chosen through the interactive `/model` picker to settings
2033
1313
  and clear saved model state when `/model default` is used.
2034
1314
  - Enable the sandbox by default when no explicit `sandbox.enabled` setting is
@@ -2036,7 +1316,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2036
1316
 
2037
1317
  ## 1.40.1
2038
1318
 
2039
-
2040
1319
  - Pin `diff` to ^7 and OpenTelemetry packages to 2.6.1/0.214.0 to match the
2041
1320
  source API, fixing type errors from accidental dependency bumps, and rebuild
2042
1321
  the shipped bundle against these versions.
@@ -2044,13 +1323,11 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2044
1323
 
2045
1324
  ## 1.40.0
2046
1325
 
2047
-
2048
1326
  - Version bump: align package, build macro, VS Code extension, docs eyebrow, and
2049
1327
  changelog for the 1.40.0 release.
2050
1328
 
2051
1329
  ## 1.37.5
2052
1330
 
2053
-
2054
1331
  - Version bump: align package, build macro, VS Code extension, docs eyebrow, and
2055
1332
  changelog for the 1.37.5 patch release.
2056
1333
  - Rename user-facing product/package branding to UR-Nexus while preserving the
@@ -2071,13 +1348,11 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2071
1348
 
2072
1349
  ## 1.37.3
2073
1350
 
2074
-
2075
1351
  - Version bump: align package, build macro, VS Code extension, docs eyebrow, and
2076
1352
  changelog for the 1.37.3 patch release.
2077
1353
 
2078
1354
  ## 1.37.2
2079
1355
 
2080
-
2081
1356
  - Tightened provider reliability: API-provider calls now use a finite default
2082
1357
  timeout, consistent retry handling for transient network/provider failures,
2083
1358
  and safer OpenAI-compatible base URL normalization without changing streaming,
@@ -2099,7 +1374,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2099
1374
 
2100
1375
  ## 1.35.1
2101
1376
 
2102
-
2103
1377
  - Polished the bundled VS Code inline-diffs view with native toolbar icons,
2104
1378
  useful empty-state rows, clearer diff labels, and a cleaner review webview.
2105
1379
  - Fixed `ur ide status` routing so the IDE extension status action reports
@@ -2109,7 +1383,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2109
1383
 
2110
1384
  ## 1.35.0
2111
1385
 
2112
-
2113
1386
  - New `ur connect` CLI command (same implementation as the `/connect` slash
2114
1387
  command): `ur connect status`, `ur connect <provider>`,
2115
1388
  `ur connect <provider> --key <KEY>`, and `ur connect logout <provider>`.
@@ -2134,7 +1407,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2134
1407
 
2135
1408
  ## 1.34.0
2136
1409
 
2137
-
2138
1410
  - Restore the 1.30.3 subscription approach: Codex CLI, Claude Code, Gemini CLI
2139
1411
  and Antigravity are first-class in `/model` again — shown by default and
2140
1412
  usable directly (no `UR_ENABLE_EXTERNAL_APP_PROVIDERS` opt-in and no runtime
@@ -2146,7 +1418,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2146
1418
 
2147
1419
  ## 1.33.0
2148
1420
 
2149
-
2150
1421
  - Add API keys from inside UR while it is running: in `/model`, selecting an
2151
1422
  API provider (OpenAI, Anthropic, Gemini, OpenRouter) that isn't connected now
2152
1423
  shows a masked key-entry step. The key is stored in the OS keychain, then the
@@ -2157,7 +1428,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2157
1428
 
2158
1429
  ## 1.32.0
2159
1430
 
2160
-
2161
1431
  - `/model` now shows the subscription providers (Codex CLI, Claude Code, Gemini
2162
1432
  CLI, Antigravity) again. They are enabled the moment you `ur connect` them
2163
1433
  (persisted per-account opt-in) — no `UR_ENABLE_EXTERNAL_APP_PROVIDERS` env var
@@ -2173,7 +1443,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2173
1443
 
2174
1444
  ## 1.31.0
2175
1445
 
2176
-
2177
1446
  - Add in-app provider connection: `ur connect` / `/connect` connects a provider
2178
1447
  once and persists it. Subscription providers (Codex, Claude Code, Gemini,
2179
1448
  Antigravity) launch their official CLI login using your own account; API
@@ -2190,7 +1459,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2190
1459
 
2191
1460
  ## 1.30.6
2192
1461
 
2193
-
2194
1462
  - Restore a visible `subscription` access entry in provider lists without
2195
1463
  exposing provider app bridges as normal runtimes.
2196
1464
  - Keep subscription selection honest: no fake UR model IDs are listed, and the
@@ -2199,7 +1467,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2199
1467
 
2200
1468
  ## 1.30.5
2201
1469
 
2202
-
2203
1470
  - Hide external app bridge providers from normal `/model`, `/provider`, and
2204
1471
  `ur provider list` output. The default provider UX now shows only UR-native
2205
1472
  API, local, and OpenAI-compatible server runtimes.
@@ -2209,7 +1476,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2209
1476
 
2210
1477
  ## 1.30.4
2211
1478
 
2212
-
2213
1479
  - Make the default provider runtime independent of provider apps. Codex CLI,
2214
1480
  Claude Code, Gemini CLI, and Antigravity are now treated as explicit external
2215
1481
  app bridges and are blocked from normal `/model`, config save, and runtime
@@ -2220,7 +1486,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2220
1486
 
2221
1487
  ## 1.30.3
2222
1488
 
2223
-
2224
1489
  - Fix Codex CLI dispatch for real interactive terminals by inheriting terminal
2225
1490
  stdin for `codex exec`. Codex treats both `/dev/null` and closed pipes as
2226
1491
  piped stdin, so the previous `1.30.2` EOF approach still triggered
@@ -2228,7 +1493,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2228
1493
 
2229
1494
  ## 1.30.2
2230
1495
 
2231
-
2232
1496
  - Fix Codex subscription dispatch failing with `exited 1 ... Reading additional
2233
1497
  input from stdin`. `codex exec` reads stdin even when the prompt is an
2234
1498
  argument; UR now gives it a closed, empty stdin pipe (EOF) instead of
@@ -2237,7 +1501,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2237
1501
 
2238
1502
  ## 1.30.1
2239
1503
 
2240
-
2241
1504
  - Fix Codex CLI runtime dispatch by ignoring stdin when UR already passes the
2242
1505
  prompt as a command argument. This prevents `codex exec` from treating UR's
2243
1506
  closed pipe as extra stdin and exiting after `Reading additional input from
@@ -2245,7 +1508,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2245
1508
 
2246
1509
  ## 1.30.0
2247
1510
 
2248
-
2249
1511
  - IDE integration commands: `ur ide status`, `ur ide doctor`, and `ur ide config
2250
1512
  <editor>` for VS Code, Cursor, Windsurf, Zed, JetBrains, Neovim, and generic
2251
1513
  ACP clients. Status shows workspace, ACP server, provider/model, plugin count,
@@ -2266,7 +1528,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2266
1528
 
2267
1529
  ## 1.29.1
2268
1530
 
2269
-
2270
1531
  - Replace fabricated Claude Code and Gemini CLI static model names with
2271
1532
  provider-scoped CLI model aliases/names that the official CLIs can receive.
2272
1533
  - Reject stale subscription CLI selections such as `claude-code/sonnet-5` before
@@ -2276,7 +1537,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2276
1537
 
2277
1538
  ## 1.29.0
2278
1539
 
2279
-
2280
1540
  - Customer release consolidating the multi-provider selection and runtime
2281
1541
  dispatch work (1.27.5–1.28.1) into a single production line.
2282
1542
  - System-prompt identity now reflects the selected provider and runtime backend
@@ -2288,7 +1548,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2288
1548
 
2289
1549
  ## 1.28.1
2290
1550
 
2291
-
2292
1551
  - Keep the status bar synchronized with in-session provider/model changes from
2293
1552
  `/model`, `/model <model>`, and `/provider`, instead of waiting for persisted
2294
1553
  settings to reload.
@@ -2297,7 +1556,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2297
1556
 
2298
1557
  ## 1.28.0
2299
1558
 
2300
-
2301
1559
  - Subscription CLI providers (Codex, Claude Code, Gemini, Antigravity) now
2302
1560
  perform real dispatch: the official CLI is spawned in non-interactive mode with
2303
1561
  the scoped model and prompt, and its stdout becomes the response. Non-zero exit
@@ -2319,7 +1577,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2319
1577
 
2320
1578
  ## 1.27.6
2321
1579
 
2322
-
2323
1580
  - Route runtime requests through the selected provider/model pair instead of
2324
1581
  allowing stale Ollama/default-provider paths to handle non-Ollama requests.
2325
1582
  - Add runtime dispatch validation, backend labels, and focused mocked dispatch
@@ -2329,7 +1586,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2329
1586
 
2330
1587
  ## 1.27.5
2331
1588
 
2332
-
2333
1589
  - Make `/model` provider-first and provider-scoped, with clear subscription,
2334
1590
  API-key, local runtime, and OpenAI-compatible server labels.
2335
1591
  - Keep model discovery, validation, fallback, and saved config scoped to the
@@ -2340,7 +1596,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2340
1596
 
2341
1597
  ## 1.25.3
2342
1598
 
2343
-
2344
1599
  - Add provider alias resolution so `ur config set provider claude`,
2345
1600
  `ur config set provider "Claude Code"`, and `ur provider doctor agy`
2346
1601
  resolve to canonical provider IDs.
@@ -2349,7 +1604,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2349
1604
 
2350
1605
  ## 1.25.2
2351
1606
 
2352
-
2353
1607
  - Refresh public documentation so README, docs, static site, validation runbook,
2354
1608
  and code inventory all describe the current UR-Nexus feature set.
2355
1609
  - Document the recent provider auth, status bar, bundled VS Code extension,
@@ -2360,20 +1614,17 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2360
1614
 
2361
1615
  ## 1.25.1
2362
1616
 
2363
-
2364
1617
  - Fix VS Code extension installation to use the bundled UR-Nexus inline-diffs extension instead of the stale unpublished `urhq.ur` marketplace ID.
2365
1618
  - Harden AskUserQuestion normalization for description-only option objects and keep the eight-option schema in the production bundle.
2366
1619
 
2367
1620
  ## 1.25.0
2368
1621
 
2369
-
2370
1622
  - Add legal multi-provider auth/provider management for subscription CLI, API-key, and local runtime access paths.
2371
1623
  - Add provider doctor/status/config commands, provider-aware status bar display, and explicit no-token-scraping safety policy.
2372
1624
  - Relax plan-mode clarification choices so professional redesign prompts do not fail when more than four options are supplied.
2373
1625
 
2374
1626
  ## 1.24.0
2375
1627
 
2376
-
2377
1628
  ### Added
2378
1629
  - Plugin marketplace capability metadata for MCP tools, executable skills,
2379
1630
  templates, validators, language adapters, LSP servers, hooks, agents, and
@@ -2392,13 +1643,11 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2392
1643
 
2393
1644
  ## 1.23.3
2394
1645
 
2395
-
2396
1646
  ### Fixed
2397
1647
  - `repoIndex` tests failing in CI because `listIndexableFiles` silently returned `[]` when ripgrep (`rg`) was unavailable. Added a Node.js recursive file walker fallback that applies the same extension and skip-segment filters.
2398
1648
 
2399
1649
  ## 1.23.2
2400
1650
 
2401
-
2402
1651
  ### Added
2403
1652
  - **CI failure diagnostics** in `.github/workflows/test.yml`: environment-info step, verbose test reporter, captured `test-output.log`, and artifact upload on failure so the production test runner exposes which test fails without requiring admin log access.
2404
1653
 
@@ -2407,7 +1656,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2407
1656
 
2408
1657
  ## 1.23.1
2409
1658
 
2410
-
2411
1659
  ### Added
2412
1660
  - **CI agent (`ur ci-loop`)** with agent constitution: hard rules against hiding failures, deleting without approval, editing generated/vendor files, claiming tests passed without execution, and changing public API without warning.
2413
1661
  - **Plugin marketplace extensibility** for `templates`, `validators`, and `languageAdapters` alongside existing MCP tools and skills.
@@ -2417,7 +1665,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2417
1665
 
2418
1666
  ## 1.22.8
2419
1667
 
2420
-
2421
1668
  ### Added
2422
1669
  -
2423
1670
 
@@ -2429,7 +1676,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2429
1676
 
2430
1677
  ## 1.22.7
2431
1678
 
2432
-
2433
1679
  ### Added
2434
1680
  - **Benchmark mode (`ur eval`).**
2435
1681
  - `ur eval run <suite> [--model <m>] [--metrics]` runs eval suites with explicit model overrides and per-case metrics files.
@@ -2474,7 +1720,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2474
1720
 
2475
1721
  ## 1.22.6
2476
1722
 
2477
-
2478
1723
  ### Fixed
2479
1724
  - Fixed Bash tool runtime execution failing every command with
2480
1725
  `timeoutMs is not defined` by keeping the command hook timeout value in scope
@@ -2490,7 +1735,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2490
1735
 
2491
1736
  ## 1.22.5
2492
1737
 
2493
-
2494
1738
  ### Added
2495
1739
  - **Real sandbox core architecture (`ur sandbox`).** New first-class command to inspect sandbox status, run dependency checks, initialize `.ur/safety-policy.json`, and evaluate shell-command approval levels.
2496
1740
  - **Worktree-per-task (`ur task`).** New command surface to start, run, list, and hand off agent tasks in isolated git branches/worktrees: `task start <name> [--worktree]`, `task run <id>`, `task pr <id> [--create]`, `task list`, `task status <id>`.
@@ -2506,7 +1750,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2506
1750
 
2507
1751
  ## 1.22.4
2508
1752
 
2509
-
2510
1753
  ### Added
2511
1754
  - **AST-aware `ur repo-edit` (P7).** Added
2512
1755
  `src/services/repoEditing/ast/types.ts`,
@@ -2546,7 +1789,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2546
1789
 
2547
1790
  ## 1.22.3
2548
1791
 
2549
-
2550
1792
  ### Added
2551
1793
  - **Executable skill directories.** A `.ur/skills/<name>/` directory containing
2552
1794
  `skill.yaml` is now an executable skill that compiles into a `WorkflowSpec`.
@@ -2577,7 +1819,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2577
1819
 
2578
1820
  ## 1.22.2
2579
1821
 
2580
-
2581
1822
  ### Added
2582
1823
  - **Lifecycle hooks.** Added six new hook events in `src/entrypoints/sdk/coreTypes.ts`
2583
1824
  and `src/entrypoints/sdk/coreSchemas.ts`: `BeforeEdit`, `AfterEdit`,
@@ -2604,7 +1845,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2604
1845
 
2605
1846
  ## 1.22.1
2606
1847
 
2607
-
2608
1848
  ### Added
2609
1849
  - **Rich task decomposition.** `src/services/agents/decomposer.ts` splits large
2610
1850
  goals into atomic subtasks with `goal`, `filesTouched`, `risk` (low/medium/high),
@@ -2637,7 +1877,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2637
1877
 
2638
1878
  ## 1.22.0
2639
1879
 
2640
-
2641
1880
  ### Added
2642
1881
  - **Agent execution metrics in `ur eval`.** `ur eval run` now captures
2643
1882
  cost, input/output tokens, model used, API duration, files changed,
@@ -2701,7 +1940,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2701
1940
 
2702
1941
  ## 1.21.0
2703
1942
 
2704
-
2705
1943
  ### Added
2706
1944
  - **Agent skill runner (`agentSkillRunner.ts`).** Reusable helper that wraps
2707
1945
  `startBackgroundTask({ worktree: true, pr: true })`, polls the background
@@ -2731,7 +1969,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2731
1969
 
2732
1970
  ## 1.20.0
2733
1971
 
2734
-
2735
1972
  ### Added
2736
1973
  - **ACP server (`ur acp`).** Added an HTTP+JSON-RPC Agent Communication
2737
1974
  Protocol server for IDE extensions. Supports `initialize`, `tools/list`,
@@ -2767,7 +2004,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2767
2004
 
2768
2005
  ## 1.19.0
2769
2006
 
2770
-
2771
2007
  ### Added
2772
2008
  - **Permission and safety policy (`ur safety`).** Added a project shell safety
2773
2009
  evaluator that separates read, write, execute, and network command classes;
@@ -2795,7 +2031,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2795
2031
 
2796
2032
  ## 1.18.0
2797
2033
 
2798
-
2799
2034
  ### Added
2800
2035
  - **Test-first execution loop (`ur test-first`).** Added a P0 quality loop that
2801
2036
  detects the project stack, orders compile/test/lint commands, runs them as
@@ -2820,7 +2055,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2820
2055
 
2821
2056
  ## 1.17.0
2822
2057
 
2823
-
2824
2058
  ### Added
2825
2059
  - **Reliable repo editing (`ur repo-edit`).** Added a P0 repo-editing workflow
2826
2060
  with dependency-free file/symbol indexing, indexed search, AST-aware
@@ -2837,7 +2071,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2837
2071
 
2838
2072
  ## 1.16.0
2839
2073
 
2840
-
2841
2074
  ### Added
2842
2075
  - **Network Ollama discovery.** `ur --discover-ollama` scans active local subnets
2843
2076
  for Ollama servers on port 11434, verifies each via `/api/tags`, and shows an
@@ -2860,7 +2093,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2860
2093
 
2861
2094
  ## 1.15.0
2862
2095
 
2863
-
2864
2096
  ### Changed
2865
2097
  - **Version bump.** Updated from 1.14.0 to 1.15.0 across `package.json`, `bunfig.toml`, and bundled CLI.
2866
2098
 
@@ -2869,7 +2101,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2869
2101
 
2870
2102
  ## 1.14.1
2871
2103
 
2872
-
2873
2104
  ### Changed
2874
2105
  - Removed the `desktop-app` startup tip pointing to the legacy desktop URL.
2875
2106
 
@@ -2878,7 +2109,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2878
2109
 
2879
2110
  ## 1.14.0
2880
2111
 
2881
-
2882
2112
  ### Changed
2883
2113
  - **Version bump.** Updated from 1.13.9 to 1.14.0 across `package.json`, `bunfig.toml`, and bundled CLI.
2884
2114
 
@@ -2887,7 +2117,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2887
2117
 
2888
2118
  ## 1.13.9
2889
2119
 
2890
-
2891
2120
  ### Added
2892
2121
  - **Spec-driven development (`ur spec`).** Scaffolds `requirements.md ->
2893
2122
  design.md -> tasks.md` plus a phase/approval `spec.json` under `.ur/specs/`,
@@ -2923,7 +2152,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2923
2152
 
2924
2153
  ## 1.13.8
2925
2154
 
2926
-
2927
2155
  ### Fixed
2928
2156
  - **Image paste resize fallback.** Clipboard image paste now falls back to
2929
2157
  macOS `sips` when the normal Sharp/native resize path cannot process an
@@ -2939,7 +2167,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2939
2167
 
2940
2168
  ## 1.13.7
2941
2169
 
2942
-
2943
2170
  ### Added
2944
2171
  - **Explicit update notice.** Interactive sessions now show
2945
2172
  `Update available: <current> -> <latest>` when a newer published package is
@@ -2956,7 +2183,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2956
2183
 
2957
2184
  ## 1.13.6
2958
2185
 
2959
-
2960
2186
  ### Added
2961
2187
  - **Professional static documentation site.** Added `documentation/` with a
2962
2188
  full HTML/CSS/JS documentation project covering installation, architecture,
@@ -2971,7 +2197,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2971
2197
 
2972
2198
  ## 1.13.5
2973
2199
 
2974
-
2975
2200
  ### Added
2976
2201
  - **Headless agent crews.** Added `ur crew` for lead/worker task boards that
2977
2202
  split a goal into subtasks, let worker subagents claim work, and support
@@ -2996,7 +2221,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
2996
2221
 
2997
2222
  ## 1.13.4
2998
2223
 
2999
-
3000
2224
  ### Added
3001
2225
  - **Parallel workflow execution.** The declarative workflow executor now runs
3002
2226
  independent ready steps concurrently. `ur workflow run --concurrency <n>`
@@ -3029,7 +2253,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3029
2253
 
3030
2254
  ## 1.13.3
3031
2255
 
3032
-
3033
2256
  ### Added
3034
2257
  - **Checkpointed agent workflows.** Added `ur workflow` for declaring,
3035
2258
  validating, graphing, planning, resuming, and dry-running multi-step agent
@@ -3054,7 +2277,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3054
2277
 
3055
2278
  ## 1.13.2
3056
2279
 
3057
-
3058
2280
  ### Added
3059
2281
  - **Top-level code-index and role-mode commands.** `ur code-index` and
3060
2282
  `ur role-mode` are now registered in the main CLI, matching the shipped
@@ -3077,7 +2299,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3077
2299
 
3078
2300
  ## 1.13.1
3079
2301
 
3080
-
3081
2302
  ### Added
3082
2303
  - **AGENTS.md as runtime context.** UR now loads `AGENTS.md` (the cross-tool
3083
2304
  standard) from project roots at runtime, alongside `UR.md` and `.ur/rules/`.
@@ -3111,7 +2332,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3111
2332
 
3112
2333
  ## 1.12.3
3113
2334
 
3114
-
3115
2335
  ### Added
3116
2336
  - **Agent feature expansion commands.** Added `ur agent-features`,
3117
2337
  `ur agent-templates`, `ur automation`, `ur agent-task`, `ur model-doctor`,
@@ -3140,7 +2360,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3140
2360
 
3141
2361
  ## 1.12.2
3142
2362
 
3143
-
3144
2363
  ### Changed
3145
2364
  - **Ziggurat of Ur spinner.** Replaced the canoe spinner with the Ziggurat of
3146
2365
  Ur catching light: an up-pyramid whose lit face sweeps across (`△ ◭ ▲ ◮`)
@@ -3152,7 +2371,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3152
2371
 
3153
2372
  ## 1.12.1
3154
2373
 
3155
-
3156
2374
  ### Changed
3157
2375
  - **Mashoof spinner.** The activity spinner is now a Mashoof (مشحوف) — the
3158
2376
  marsh canoe — bobbing on the water. It cycles boat-hull arcs (`⌣ ⏝ ‿`) into
@@ -3161,7 +2379,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3161
2379
 
3162
2380
  ## 1.12.0
3163
2381
 
3164
-
3165
2382
  ### Added
3166
2383
  - **Agent trend coverage.** New `ur agent-trends` CLI command and
3167
2384
  `/agent-trends` slash command report how UR maps to current agent trends:
@@ -3181,7 +2398,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3181
2398
 
3182
2399
  ## 1.11.3
3183
2400
 
3184
-
3185
2401
  ### Changed
3186
2402
  - **Read-only web browsing.** `WebSearch` and `WebFetch` now run without
3187
2403
  prompting by default, while still respecting explicit deny or ask rules.
@@ -3190,7 +2406,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3190
2406
 
3191
2407
  ## 1.11.2
3192
2408
 
3193
-
3194
2409
  ### Fixed
3195
2410
  - **Clarification dialogs.** `AskUserQuestion` is now loaded without a
3196
2411
  `ToolSearch` round trip and accepts common question text aliases such as
@@ -3199,7 +2414,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3199
2414
 
3200
2415
  ## 1.11.1
3201
2416
 
3202
-
3203
2417
  ### Changed
3204
2418
  - **Npm publication docs.** README installation guidance now reflects that
3205
2419
  `ur-nexus` is published on npm, while keeping the GitHub install path for
@@ -3207,7 +2421,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3207
2421
 
3208
2422
  ## 1.11.0
3209
2423
 
3210
-
3211
2424
  ### Changed
3212
2425
  - **Ollama model selection now lets routing work by default.** The launcher no
3213
2426
  longer forces `OLLAMA_MODEL` when neither `OLLAMA_MODEL` nor `UR_MODEL` is
@@ -3238,13 +2451,11 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3238
2451
 
3239
2452
  ## 1.10.2
3240
2453
 
3241
-
3242
2454
  ### Fixed
3243
2455
  - **Clipboard image paste — the fix that actually ships.** The 1.10.1 change edited the native NSPasteboard branch, which is dead-code-eliminated from the bundle (its feature gate compiles out), so it never ran. The live path is osascript, whose `saveImage` reused a fixed temp file (`ur_cli_latest_screenshot.png`) opened `with write permission` but never truncated — so a smaller image pasted over a previously larger one kept the old trailing bytes, producing a corrupt PNG ("found in clipboard but not attached"). Added `set eof fp to 0` to truncate before writing.
3244
2456
 
3245
2457
  ## 1.10.1
3246
2458
 
3247
-
3248
2459
  ### Fixed
3249
2460
  - **Clipboard image paste.** An image the clipboard reported as present but the native reader couldn't decode was silently dropped — "found in clipboard but not attached." `getImageFromClipboard` now falls back to the osascript path instead of treating a native `null` as authoritative.
3250
2461
  - **Token truncation on Ollama Cloud models.** Cloud models (the `-cloud` / `:cloud` suffix) now default to a 128K-token context floor for both `num_ctx` and auto-compaction, instead of the small or missing value `/api/show` reports for them — so prompts are no longer silently truncated, with no env vars required. The reported value is still used when it is larger, and `UR_OLLAMA_NUM_CTX` (no longer capped to the detected value) / `OLLAMA_CONTEXT_TOKENS` still override.
@@ -3255,7 +2466,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3255
2466
 
3256
2467
  ## 1.10.0
3257
2468
 
3258
-
3259
2469
  ### Added
3260
2470
  - **`skill-forge` plugin** in the `ur-plugins-official` marketplace — have the agent author skills for you. `/forge-skill <description>` runs on the active session model: it designs the skill (name, `when_to_use` triggers, arguments, minimal `allowed-tools`, inline vs fork, and steps that each carry a success criterion), shows the `SKILL.md` for a single confirmation, then saves it to `~/.ur/skills/<name>/` (or `./.ur/skills/` with `--project`) without clobbering an existing one. `/skill-refine <name> : <change>` improves an existing skill, and a bundled `skill-authoring` skill encodes the conventions. Complements the built-in `/create-skill`, which only scaffolds an empty template.
3261
2471
 
@@ -3264,7 +2474,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3264
2474
 
3265
2475
  ## 1.9.0
3266
2476
 
3267
-
3268
2477
  ### Added
3269
2478
  - **Seven first-party integration plugins** in the `ur-plugins-official` marketplace. Each bundles an official MCP server, curated slash commands, and a methodology skill, and falls back to a CLI or local library so the commands still work before any token is configured:
3270
2479
  - **`obsidian`** — operate a vault as a second brain: `/second-brain`, `/daily-note`, `/moc`, `/backlinks`, `/vault-search`. Direct vault file edits or the Obsidian Local REST API MCP server, plus a Zettelkasten/PARA/MOC skill.
@@ -3281,7 +2490,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3281
2490
 
3282
2491
  ## 1.8.0
3283
2492
 
3284
-
3285
2493
  ### Added
3286
2494
  - **`/create-skill` command.** Scaffold a new skill without leaving the REPL: `/create-skill <name> [: <description>] [--project]` writes a ready-to-edit `SKILL.md` (with frontmatter) to `~/.ur/skills/<name>/` — or `.ur/skills/` with `--project` — refuses to clobber an existing skill, and clears caches so it shows up immediately (alias `/new-skill`).
3287
2495
  - **Game Designer mode.** A new built-in output style (`/output-style`) that makes UR reason like a game designer — core loops, player fantasy, game feel, and tunable balance constants — while it writes working code.
@@ -3292,7 +2500,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3292
2500
 
3293
2501
  ## 1.7.0
3294
2502
 
3295
-
3296
2503
  ### Added
3297
2504
  - **Adaptive model routing (Ollama).** The agent auto-selects the best installed model per tier — the strongest coder model for the main loop, the smallest fast model for light internal work (titles, classification, session search, hooks). Honors `OLLAMA_MODEL` / `OLLAMA_SMALL_FAST_MODEL`; gated by `UR_OLLAMA_AUTO_ROUTE`.
3298
2505
  - **Per-model context auto-tuning.** Each request sets `num_ctx` from the model's real context window and the prompt size (floored at 32K for agent work, bucketed so the KV cache stays warm), fixing silent truncation at Ollama's 4096 default. Override with `UR_OLLAMA_NUM_CTX`.
@@ -3304,7 +2511,6 @@ Top-tier feature release — closes the gaps against 2026's leading agents.
3304
2511
 
3305
2512
  ## 1.6.0
3306
2513
 
3307
-
3308
2514
  ### Added
3309
2515
  - **Proactive clarification & planning prompts.** The agent now uses the `AskUserQuestion` multiple-choice popup before significant or ambiguous work and at key planning decisions. Options are navigated with arrow keys and submitted; the last "Other" entry always lets you type a custom answer.
3310
2516
  - **Smarter prompt handling.** New always-on guidance makes the agent resolve ambiguity before acting, work in verifiable steps and check each step's output against the request before continuing, verify work actually runs before reporting done, report outcomes faithfully, and keep changes precisely scoped and professional.