ur-agent 1.85.0 → 1.85.1

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.
@@ -172,6 +172,22 @@ Anthropic's supported cache-control shape. Streaming requests also set
172
172
  arrive as Claude generates them instead of waiting for server-side buffering.
173
173
  Both behaviors use Anthropic's documented native fields and require no setting.
174
174
 
175
+ An Anthropic identity-linked API key can act across more than one workspace and
176
+ requires `anthropic-workspace-id` on every API call. Set its non-secret Console
177
+ workspace ID once:
178
+
179
+ ```sh
180
+ ur config set anthropic.workspace_id wrkspc_...
181
+ # environment-only alternative
182
+ export ANTHROPIC_WORKSPACE_ID=wrkspc_...
183
+ ```
184
+
185
+ The selected ID is applied consistently to `/v1/models`, `/v1/messages`,
186
+ streaming messages, `/v1/messages/count_tokens`, and provider diagnostics.
187
+ Workspace-scoped keys need no extra setting. Clear the saved value with
188
+ `ur config set anthropic.workspace_id auto`. When adding a key and workspace
189
+ together, use `ur connect anthropic-api --workspace-id wrkspc_...`.
190
+
175
191
  Anthropic fast mode is a separate, premium research-preview tier. It is off by
176
192
  default and can be requested explicitly:
177
193
 
@@ -273,6 +289,7 @@ it in the environment when you explicitly choose API mode:
273
289
  OPENAI_API_KEY=...
274
290
  OPENAI_COMPATIBLE_API_KEY=...
275
291
  ANTHROPIC_API_KEY=...
292
+ ANTHROPIC_WORKSPACE_ID=wrkspc_... # identity-linked Anthropic keys only
276
293
  GEMINI_API_KEY=...
277
294
  OPENROUTER_API_KEY=...
278
295
  NVIDIA_API_KEY=...
@@ -335,6 +352,11 @@ opaque compacted window, set `UR_OPENAI_RESPONSES_STATE_KEY` to exactly 32
335
352
  bytes encoded as 64 hexadecimal characters or base64. Without that key UR
336
353
  refuses to persist compacted context.
337
354
 
355
+ HTTP 429 remains retryable for real transient rate limits. Machine-readable
356
+ account, billing, and exhausted-quota failures such as `billing_not_active` and
357
+ `insufficient_quota` are permanent for the unchanged request, so UR reports
358
+ them immediately instead of spending the retry window in `requesting`.
359
+
338
360
  ### Reconfiguring the Ollama host
339
361
 
340
362
  The endpoint can be changed from UR in four ways, in order of precedence:
@@ -211,6 +211,35 @@ from `OPENAI_API_KEY`. NVIDIA Agentic/Special use one key stored with
211
211
  `ur connect nvidia-nim` or `ur connect nvidia-special`; Agentic keeps any
212
212
  custom `base_url` scoped to that provider.
213
213
 
214
+ ### Anthropic says `anthropic-workspace-id is required`
215
+
216
+ - Cause: the API key is identity-linked and can act across workspaces. Anthropic
217
+ requires the target workspace on model discovery and every runtime request.
218
+ - Fix: copy the `wrkspc_...` ID from Claude Console → Settings → Workspaces,
219
+ then configure it and re-run doctor. The workspace ID is not the API key.
220
+
221
+ ```sh
222
+ ur config set anthropic.workspace_id wrkspc_...
223
+ ur provider doctor anthropic-api
224
+ ```
225
+
226
+ `ANTHROPIC_WORKSPACE_ID` is the environment-only alternative. If the key was
227
+ created inside one workspace and is already workspace-scoped, no header is
228
+ needed. `auto` clears an incorrect saved selection. UR cannot safely infer the
229
+ Default Workspace ID because Anthropic omits that workspace from its list API.
230
+
231
+ ### OpenAI stays on `requesting` and then reports a billing 429
232
+
233
+ - Cause: older retry classification treated every HTTP 429 as a temporary rate
234
+ limit. OpenAI also uses 429 for permanent request-state failures such as
235
+ `billing_not_active` and `insufficient_quota`.
236
+ - Current behavior: UR reads the machine error code, reports permanent account
237
+ or billing failures immediately, and still retries genuine transient rate
238
+ limits. The same rule applies to Chat Completions and Responses.
239
+ - Fix for `billing_not_active`: activate API billing for the project/account or
240
+ connect a key belonging to an active billed project. Changing models or
241
+ transports cannot activate the account.
242
+
214
243
  ### NVIDIA lists a model but inference returns `Function … Not found for account`
215
244
 
216
245
  - Cause: the card is documented by NVIDIA, but its backing function is not
package/docs/USAGE.md CHANGED
@@ -186,6 +186,7 @@ ur config set openrouter.preferred_min_throughput 40
186
186
  ur config set openrouter.preferred_max_latency 3
187
187
  ur config set openrouter.service_tier priority
188
188
  ur config set openrouter.speed fast
189
+ ur config set anthropic.workspace_id wrkspc_...
189
190
  ```
190
191
 
191
192
  `auto` is the recommended default. `priority`/`fast` are optional paid upstream
@@ -195,6 +196,17 @@ throughput-, price-, or tool-quality-first virtual route.
195
196
 
196
197
  Direct Anthropic sessions preserve prompt-cache breakpoints and stream large
197
198
  tool arguments with Anthropic's per-tool `eager_input_streaming` control.
199
+ If Anthropic identifies the key as identity-linked, select the Console
200
+ workspace before refreshing models or sending a turn:
201
+
202
+ ```sh
203
+ ur config set anthropic.workspace_id wrkspc_...
204
+ # or: export ANTHROPIC_WORKSPACE_ID=wrkspc_...
205
+ ```
206
+
207
+ The selection is shared by discovery, doctor, inference, streaming, and token
208
+ counting. Workspace-scoped keys require no extra value; use
209
+ `ur config set anthropic.workspace_id auto` to clear it.
198
210
  Accounts admitted to Anthropic's premium fast-mode research preview can opt in
199
211
  for its supported Opus models:
200
212
 
@@ -216,6 +228,9 @@ background/poll/cancel support, WebSocket continuation, server compaction, and
216
228
  deferred tool search. Remote storage is off by default. Local state contains
217
229
  only bounded identifiers/status/cursors unless a 32-byte
218
230
  `UR_OPENAI_RESPONSES_STATE_KEY` is supplied for AES-256-GCM compacted context.
231
+ Permanent billing/account 429s are shown immediately on both OpenAI transports;
232
+ UR retries only responses that can plausibly succeed without configuration or
233
+ billing changes.
219
234
 
220
235
  In the interactive app, `/model` chooses a provider first and then a model from
221
236
  that provider only. The saved pair controls the runtime backend for the next
@@ -249,7 +264,9 @@ and `antigravity-cli` (`agy`) are subscription CLI providers.
249
264
  API modes are explicit. Keys are read from a key stored via
250
265
  `ur connect <provider>` (OS keychain) or from the environment variables
251
266
  `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GEMINI_API_KEY`,
252
- `OPENROUTER_API_KEY`, `NVIDIA_API_KEY`, and `UNSLOTH_API_KEY`. Subscription CLIs are optional, never required
267
+ `OPENROUTER_API_KEY`, `NVIDIA_API_KEY`, and `UNSLOTH_API_KEY`.
268
+ `ANTHROPIC_WORKSPACE_ID` selects a workspace for identity-linked Anthropic
269
+ keys. Subscription CLIs are optional, never required
253
270
  dependencies, and never used as a silent fallback. UR-Nexus never scrapes
254
271
  browser sessions, extracts OAuth tokens, or bypasses provider restrictions.
255
272
  OpenAI-compatible local or cloud endpoints use `base_url` plus `model`.
@@ -19,7 +19,7 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.85.0 (UR-Nexus)"
22
+ # expected for this release: "1.85.1 (UR-Nexus)"
23
23
  ```
24
24
 
25
25
  ### 0.0 Redteam mode and Reverse Skills (1.81.0)
@@ -136,6 +136,18 @@ Opus 5/4.8 must receive `speed="fast"` and
136
136
  Opus versions must receive neither. A non-stream response must retain
137
137
  `usage.speed`.
138
138
 
139
+ With an identity-linked test key, first omit the workspace. Discovery and
140
+ doctor must preserve Anthropic's `anthropic-workspace-id is required` detail
141
+ and show the `anthropic.workspace_id` fix. Then configure a `wrkspc_...` value
142
+ and verify the same header on model pagination, streaming/non-streaming
143
+ Messages, and token counting. A workspace-scoped key must remain valid with no
144
+ workspace setting.
145
+
146
+ For OpenAI retry classification, mock a 429 `billing_not_active` streaming body
147
+ and verify exactly one transport call plus the provider's actionable message.
148
+ A 429 `rate_limit_exceeded` fixture must remain retryable. The deterministic
149
+ coverage is in `test/providerReliability.test.ts`.
150
+
139
151
  Deterministic coverage:
140
152
 
141
153
  ```sh
package/docs/providers.md CHANGED
@@ -34,7 +34,7 @@ multimodal input, external CLI boundary, and sandbox scope:
34
34
  | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
35
35
  | Subscription | subscription | subscription-placeholder | no | no | no | n/a | n/a (no runtime) | `subscription:unconfigured` | independent subscription runtime only |
36
36
  | OpenAI API | API | UR-native | no | yes | yes | yes | UR Bash/File sandbox | `api:openai` | `OPENAI_API_KEY` |
37
- | Claude API | API | UR-native | no | yes | yes | yes | UR Bash/File sandbox | `api:anthropic` | `ANTHROPIC_API_KEY` |
37
+ | Claude API | API | UR-native | no | yes | yes | yes | UR Bash/File sandbox | `api:anthropic` | `ANTHROPIC_API_KEY`; identity-linked keys also select `ANTHROPIC_WORKSPACE_ID` |
38
38
  | Gemini API | API | UR-native | no | yes | yes | yes | UR Bash/File sandbox | `api:gemini` | `GEMINI_API_KEY` |
39
39
  | OpenRouter | API/router | UR-native | no | yes | yes | yes | UR Bash/File sandbox | `api:openrouter` | `OPENROUTER_API_KEY` |
40
40
  | NVIDIA Agentic | hosted/server API | UR-native | no | yes | yes | model-dependent | UR Bash/File sandbox | `api:nvidia-nim` | `NVIDIA_API_KEY`; public per-card endpoints or configurable NIM gateway |
@@ -173,6 +173,8 @@ explicit opt-in to the native Responses adapter; it defaults to `store=false`
173
173
  and supports semantic streaming, background polling/cancellation, WebSocket
174
174
  continuation, server compaction, and deferred tool search. It does not change
175
175
  OpenAI-compatible, OpenRouter, local, or subscription-CLI providers.
176
+ Both transports fail immediately for machine-readable permanent account or
177
+ billing 429s; ordinary transient rate limits still honor provider retry timing.
176
178
 
177
179
  ## Provider-scoped model selection
178
180
 
@@ -281,7 +283,18 @@ remain authoritative. See OpenRouter's
281
283
  Direct Anthropic requests retain supported prompt-cache breakpoints and enable
282
284
  per-tool `eager_input_streaming` on streaming turns. This reduces repeated
283
285
  prefill work and avoids waiting for a complete large tool argument before its
284
- deltas arrive. Anthropic's premium fast tier remains explicit:
286
+ deltas arrive.
287
+
288
+ Identity-linked Anthropic keys additionally need a workspace selection. UR
289
+ accepts `provider.anthropic.workspaceId` through
290
+ `ur config set anthropic.workspace_id wrkspc_...` or
291
+ `ANTHROPIC_WORKSPACE_ID`, validates the `wrkspc_` resource ID, partitions the
292
+ model cache by workspace, and sends `anthropic-workspace-id` on model
293
+ discovery, doctor, message, streaming, and token-count requests. A provider
294
+ 400 that names this requirement is preserved with the exact configuration fix
295
+ instead of being reduced to an unverifiable model-list failure.
296
+
297
+ Anthropic's premium fast tier remains explicit:
285
298
 
286
299
  ```sh
287
300
  ur config set anthropic.speed fast
@@ -291,6 +304,8 @@ UR sends `speed: "fast"` with the `fast-mode-2026-02-01` beta only for Claude
291
304
  Opus 5 and Opus 4.8, and retains `usage.speed` so accounting can distinguish the
292
305
  tier actually served. Enabled account access is still required. Unsupported
293
306
  models stay on standard speed. See Anthropic's
307
+ [authentication](https://platform.claude.com/docs/en/manage-claude/authentication),
308
+ [workspace management](https://platform.claude.com/docs/en/manage-claude/workspaces),
294
309
  [prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching),
295
310
  [fine-grained tool streaming](https://platform.claude.com/docs/en/agents-and-tools/tool-use/fine-grained-tool-streaming),
296
311
  and [fast mode](https://platform.claude.com/docs/en/build-with-claude/fast-mode).
@@ -480,7 +495,8 @@ provider's successful live catalog remains authoritative for that account.
480
495
 
481
496
  **API providers** require environment variable with API key:
482
497
  - `openai-api` — requires `OPENAI_API_KEY`
483
- - `anthropic-api` — requires `ANTHROPIC_API_KEY`
498
+ - `anthropic-api` — requires `ANTHROPIC_API_KEY`; identity-linked keys also
499
+ select `ANTHROPIC_WORKSPACE_ID` (or saved `anthropic.workspace_id`)
484
500
  - `gemini-api` — requires `GEMINI_API_KEY`
485
501
  - `openrouter` — requires `OPENROUTER_API_KEY`
486
502
  - `nvidia-nim` / `nvidia-special` — share `NVIDIA_API_KEY`; Agentic's enterprise endpoint is configurable, while Special routes each public model to its card-specific contract
@@ -656,6 +672,7 @@ API providers require explicit user selection and environment keys:
656
672
  OPENAI_API_KEY=...
657
673
  OPENAI_COMPATIBLE_API_KEY=...
658
674
  ANTHROPIC_API_KEY=...
675
+ ANTHROPIC_WORKSPACE_ID=wrkspc_... # identity-linked Anthropic keys only
659
676
  GEMINI_API_KEY=...
660
677
  OPENROUTER_API_KEY=...
661
678
  NVIDIA_API_KEY=...
@@ -803,7 +820,7 @@ Required variables:
803
820
  | NVIDIA Agentic | `NVIDIA_API_KEY`, `NVIDIA_MODEL` | `NVIDIA_BASE_URL` (defaults to `https://integrate.api.nvidia.com/v1`) |
804
821
  | OpenAI | `OPENAI_API_KEY`, `OPENAI_MODEL` | `OPENAI_BASE_URL` |
805
822
  | OpenRouter | `OPENROUTER_API_KEY`, `OPENROUTER_MODEL` | `OPENROUTER_BASE_URL` |
806
- | Anthropic | `ANTHROPIC_API_KEY`, `ANTHROPIC_MODEL` | `ANTHROPIC_BASE_URL` |
823
+ | Anthropic | `ANTHROPIC_API_KEY`, `ANTHROPIC_MODEL` | `ANTHROPIC_BASE_URL`; `ANTHROPIC_WORKSPACE_ID` for identity-linked keys |
807
824
  | Gemini | `GEMINI_API_KEY`, `GEMINI_MODEL` | `GEMINI_BASE_URL` |
808
825
  | Ollama | `OLLAMA_MODEL` | `OLLAMA_BASE_URL` or `OLLAMA_HOST`; `OLLAMA_API_KEY` when required |
809
826
  | LM Studio | `LMSTUDIO_BASE_URL`, `LMSTUDIO_MODEL` | `LMSTUDIO_API_KEY` |
@@ -45,7 +45,7 @@
45
45
  <main id="content" class="content">
46
46
  <header class="topbar">
47
47
  <div>
48
- <p class="eyebrow">Version 1.85.0</p>
48
+ <p class="eyebrow">Version 1.85.1</p>
49
49
  <h1>UR-Nexus Documentation</h1>
50
50
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
51
51
  </div>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.85.0"
10
+ version = "1.85.1"
11
11
 
12
12
  repositories {
13
13
  mavenCentral()
@@ -2,7 +2,7 @@
2
2
  "name": "ur-inline-diffs",
3
3
  "displayName": "UR Inline Diffs",
4
4
  "description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
5
- "version": "1.85.0",
5
+ "version": "1.85.1",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.85.0",
3
+ "version": "1.85.1",
4
4
  "description": "UR-Nexus — autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",