ur-agent 1.84.3 → 1.84.4

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.
@@ -143,6 +143,27 @@ ur config set base_url <url>
143
143
  ur config set base_url <provider> <url>
144
144
  ```
145
145
 
146
+ OpenRouter's default `auto` policy keeps its current Auto Exacto ordering for
147
+ tool turns and prioritizes end-to-end throughput for ordinary text turns.
148
+ Every performance choice is explicit and editable:
149
+
150
+ ```sh
151
+ ur config set openrouter.routing auto # auto | throughput | latency | price
152
+ ur config set openrouter.allow_fallbacks true # true | false | auto
153
+ ur config set openrouter.require_parameters true # true | false | auto
154
+ ur config set openrouter.preferred_min_throughput 40
155
+ ur config set openrouter.preferred_max_latency 3
156
+ ur config set openrouter.service_tier priority # auto | default | flex | priority | fast
157
+ ur config set openrouter.speed fast # standard | fast
158
+ ur config set model <openrouter-model>:nitro # or :floor / :exacto
159
+ ```
160
+
161
+ Thresholds are preferences, not exclusions. `priority` and `fast` can increase
162
+ price and apply only where OpenRouter advertises upstream support; their
163
+ default `auto`/`standard` values add no premium request. Explicit request-level
164
+ provider preferences still win. Set either performance threshold to `auto` to
165
+ remove it and return to OpenRouter's own routing data.
166
+
146
167
  `provider.fallback` is diagnostic recovery metadata, not automatic routing.
147
168
  When the active provider fails, `ur provider doctor` shows the configured
148
169
  recovery command; changing providers remains an explicit user action.
@@ -242,7 +263,10 @@ UNSLOTH_API_KEY=...
242
263
 
243
264
  NVIDIA NIM defaults to `https://integrate.api.nvidia.com/v1`, discovers the
244
265
  connected account's models live, and accepts a provider-scoped override for an
245
- enterprise or self-hosted NIM. Generic `openai-compatible` authentication is
266
+ enterprise or self-hosted NIM. On NVIDIA's hosted endpoint, UR intersects the
267
+ broad `/v1/models` feed with the key's ACTIVE NVCF function inventory and omits
268
+ non-agent utility endpoints; a configured NIM gateway uses its own model feed
269
+ without contacting NVIDIA's hosted control plane. Generic `openai-compatible` authentication is
246
270
  optional: `ur connect openai-compatible` or the picker's `K` key stores a
247
271
  credential when the chosen gateway needs one, without breaking anonymous
248
272
  local endpoints.
@@ -210,6 +210,39 @@ press `K` on its `/model` screen; the key is optional and stored separately
210
210
  from `OPENAI_API_KEY`. NVIDIA NIM uses `ur connect nvidia-nim` and keeps any
211
211
  custom `base_url` scoped to that provider.
212
212
 
213
+ ### NVIDIA lists a model but inference returns `Function … Not found for account`
214
+
215
+ - Cause: NVIDIA's hosted `/v1/models` feed can contain a function that is no
216
+ longer ACTIVE for the connected account.
217
+ - Fix: upgrade UR, run `ur provider doctor nvidia-nim`, then open `/model` and
218
+ press `Ctrl+R`. Hosted discovery now intersects `/v1/models` with NVIDIA's
219
+ authenticated ACTIVE function inventory and excludes non-agent utility
220
+ endpoints. A definitive runtime 404 also removes that model from the current
221
+ endpoint-scoped session catalog.
222
+ - Privacy: UR does not display or retain the internal NVIDIA function UUID and
223
+ account identifier from this error response.
224
+
225
+ If `account_models` fails, reconnect a current build.nvidia.com key with
226
+ `ur connect nvidia-nim`. A configured enterprise/self-hosted NIM endpoint is
227
+ validated only against that gateway and does not use NVIDIA's hosted inventory.
228
+
229
+ ### `The provider reported that model … reached its per-response output boundary`
230
+
231
+ This is not an input-context overflow and does not mean UR counted the text
232
+ incorrectly. The provider ended the generation with its `max_tokens`/`length`
233
+ finish reason on a response chunk whose boundary was the displayed value. The
234
+ normal query loop silently continues from the exact cutoff with no fixed total
235
+ continuation ceiling while every capped response adds novel work. It stops only
236
+ after two consecutive empty or replayed capped responses, which indicates a
237
+ stalled model loop rather than a long task.
238
+
239
+ `UR_CODE_MAX_OUTPUT_TOKENS` changes only the per-response chunk, up to the
240
+ model's discovered limit; it does not impose or remove a total task limit.
241
+ Cloud requests use a practical chunk so routers retain fast endpoint choices,
242
+ and local runtimes use a smaller reservation to avoid unnecessary KV-memory
243
+ allocation. If the stalled-loop message appears, inspect the prompt/model for
244
+ repetition before retrying.
245
+
213
246
  ### Unsloth is selected but unavailable
214
247
 
215
248
  - Likely cause: Studio is not running, no model is loaded, its generated API
package/docs/USAGE.md CHANGED
@@ -173,6 +173,23 @@ ur config set responses.compact_threshold 20000
173
173
  ur config set responses.tool_search hosted
174
174
  ```
175
175
 
176
+ For OpenRouter, UR preserves Auto Exacto on tool turns and uses throughput
177
+ routing on non-tool turns. Tune that provider without hardcoded endpoints or
178
+ request patches:
179
+
180
+ ```sh
181
+ ur config set openrouter.routing auto
182
+ ur config set openrouter.preferred_min_throughput 40
183
+ ur config set openrouter.preferred_max_latency 3
184
+ ur config set openrouter.service_tier priority
185
+ ur config set openrouter.speed fast
186
+ ```
187
+
188
+ `auto` is the recommended default. `priority`/`fast` are optional paid upstream
189
+ features and are effective only for models that OpenRouter supports. Append
190
+ `:nitro`, `:floor`, or `:exacto` to an OpenRouter model ID for its native
191
+ throughput-, price-, or tool-quality-first virtual route.
192
+
176
193
  `provider.fallback` only controls the recovery suggestion printed by provider
177
194
  diagnostics. UR does not switch or retry across providers automatically; use
178
195
  `ur config set provider <id>` after reviewing the failure.
@@ -240,7 +257,11 @@ API-key access, and an API key does not grant subscription CLI access.
240
257
  NVIDIA NIM uses the build.nvidia.com key and hosted
241
258
  `https://integrate.api.nvidia.com/v1` endpoint by default. Connect it with
242
259
  `ur connect nvidia-nim`; use `ur config set base_url nvidia-nim <url>` for a
243
- different NIM deployment. On the `/model` model screen, `K` adds or replaces a
260
+ different NIM deployment. For the hosted endpoint, `/model` shows only models
261
+ that occur in both NVIDIA's `/v1/models` feed and the connected account's
262
+ ACTIVE function inventory; utility endpoints such as embeddings, guards, and
263
+ parsers are excluded. A custom NIM gateway retains its own independent catalog.
264
+ On the `/model` model screen, `K` adds or replaces a
244
265
  provider API key and `E` edits its endpoint. This also makes optional
245
266
  authentication practical for generic OpenAI-compatible gateways.
246
267
 
@@ -19,7 +19,7 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.84.3 (UR-Nexus)"
22
+ # expected for this release: "1.84.4 (UR-Nexus)"
23
23
  ```
24
24
 
25
25
  ### 0.0 Redteam mode and Reverse Skills (1.81.0)
@@ -72,7 +72,7 @@ changes must remain blocked. The deterministic regressions are:
72
72
  bun test test/taskListGate.test.ts test/toolExecutionFinalInput.test.ts
73
73
  ```
74
74
 
75
- ### 0.0.0 OpenRouter research routing and provider UI (1.81.3; Ultra mapping updated 1.83.1)
75
+ ### 0.0.0 OpenRouter research routing and provider UI (routing updated 1.84.4)
76
76
 
77
77
  Connect OpenRouter, run `/model`, select OpenRouter, and verify that its model
78
78
  step shows catalog freshness plus pricing/context/tool/reasoning details. Focus
@@ -100,15 +100,58 @@ the auxiliary request stays on the active OpenRouter model, no `modelH` error
100
100
  appears, a real provider search count is shown, and a response that did not
101
101
  perform a search fails clearly instead of saying `Did 0 searches`.
102
102
 
103
+ Inspect the OpenRouter request body. A turn containing tools must not contain a
104
+ default `provider.sort`, leaving Auto Exacto active; a text-only request must
105
+ contain `provider.sort="throughput"`. Both retain the stable `session_id`.
106
+ Then verify explicit controls and native virtual variants:
107
+
108
+ ```sh
109
+ ur config set openrouter.routing latency
110
+ ur config set openrouter.allow_fallbacks true
111
+ ur config set openrouter.require_parameters true
112
+ ur config set openrouter.preferred_min_throughput 40
113
+ ur config set openrouter.preferred_max_latency 3
114
+ ur config set openrouter.service_tier priority
115
+ ur config set openrouter.speed fast
116
+ ur config set model <discovered-openrouter-model>:nitro
117
+ ```
118
+
119
+ The forced routing value must appear on both tool and non-tool requests;
120
+ fallback/threshold settings must use OpenRouter's snake-case wire keys;
121
+ `priority`/`fast` must appear only when explicitly selected. `:nitro` must
122
+ validate against the discovered base model and inherit its context, output,
123
+ tool, and reasoning metadata.
124
+
103
125
  Deterministic coverage:
104
126
 
105
127
  ```sh
106
128
  bun test test/providerPickerPresentation.test.ts \
107
129
  test/openRouterEffort.test.ts test/providerModelDiscovery.test.ts \
108
130
  test/secondaryModelFallback.test.ts test/providerToolCalls.test.ts \
131
+ test/providerContextWindow.test.ts test/outputLimitRecovery.test.ts \
109
132
  test/usageAccounting.test.ts test/providerRouting.test.ts
110
133
  ```
111
134
 
135
+ ### 0.0.0a Provider output-boundary continuation (1.84.4)
136
+
137
+ Use a provider fixture that returns `max_tokens`/`length` after non-empty
138
+ partial output. UR must withhold the intermediate API error, add a continuation
139
+ turn that requests only novel work from the exact cutoff, and continue for more
140
+ than three responses while every response progresses. The original prompt,
141
+ tool state, and completed output remain in context. Two consecutive empty or
142
+ exact-replay capped responses must stop with the stalled-loop diagnostic.
143
+
144
+ The per-request `max_tokens` value remains bounded by live/static model
145
+ metadata. A model with a 128K advertised output ceiling uses a practical 32K
146
+ default response chunk; `UR_CODE_MAX_OUTPUT_TOKENS` may raise that chunk to
147
+ 128K, but neither value creates a total task-output ceiling. Local/user-hosted
148
+ runtimes use their conservative 4K reservation and the same continuation path.
149
+
150
+ ```sh
151
+ bun test test/outputLimitRecovery.test.ts \
152
+ test/providerRequestTuning.test.ts test/providerContextWindow.test.ts
153
+ ```
154
+
112
155
  ### 0.0.1 Unavailable Ollama tools recover (1.80.7)
113
156
 
114
157
  With an Ollama model, ask for research that mentions WebSearch. If WebSearch is
@@ -198,8 +241,11 @@ NVIDIA NIM, Ollama, LM Studio, llama.cpp, vLLM, Unsloth, and generic OpenAI-comp
198
241
  request shapes.
199
242
 
200
243
  The NVIDIA fixture also verifies hosted/default and overridden endpoints,
201
- Bearer discovery, native dispatch, documented effort aliases, and no Ultra on
202
- an unknown model. In `/model`, select `openai-compatible` and verify `K` can
244
+ Bearer discovery, intersection with account-active NVCF functions, removal of
245
+ retired and non-agent models, selected-model doctor diagnostics, redaction of
246
+ internal NVIDIA account/function IDs, endpoint-scoped invalidation, native
247
+ dispatch, documented effort aliases, and no Ultra on an unknown model. In
248
+ `/model`, select `openai-compatible` and verify `K` can
203
249
  add or replace its optional key while `E` continues to edit only its endpoint.
204
250
 
205
251
  ## 0.2 Permission safety and context pack (1.19.0)
package/docs/providers.md CHANGED
@@ -263,10 +263,17 @@ shows pricing tier, context size, tool capability, reasoning capability, and
263
263
  the full, untruncated model ID immediately below the focused entry. Opening the
264
264
  OpenRouter catalog reuses its endpoint-scoped five-minute cache; Ctrl+R forces
265
265
  the current `/models` endpoint and never substitutes a cached list when that
266
- forced refresh fails. Interactive requests default to OpenRouter's latency
267
- sorting, promote UR's stable session ID for sticky routing, and preserve safe
268
- provider prompt-cache markers. Explicit routing preferences and the `:nitro`,
269
- `:floor`, and `:exacto` model variants remain authoritative. API-key entry for
266
+ forced refresh fails. Tool requests preserve OpenRouter Auto Exacto so its live
267
+ throughput, tool-call reliability, and benchmark signals choose the route;
268
+ non-tool requests default to throughput sorting rather than TTFT-only latency
269
+ sorting. UR promotes its stable session ID for prompt-cache affinity while
270
+ retaining router fallback. Explicit request preferences, the `openrouter.*`
271
+ configuration controls, and the `:nitro`, `:floor`, and `:exacto` model variants
272
+ remain authoritative. See OpenRouter's
273
+ [provider routing](https://openrouter.ai/docs/guides/routing/provider-selection),
274
+ [Auto Exacto](https://openrouter.ai/docs/guides/routing/auto-exacto), and
275
+ [prompt caching](https://openrouter.ai/docs/guides/best-practices/prompt-caching).
276
+ API-key entry for
270
277
  OpenAI, Claude, Gemini, OpenRouter, NVIDIA NIM, and authenticated compatible
271
278
  endpoints is a single aligned masked row; the key is stored in the OS keychain
272
279
  flow and is never written to settings. On the model screen, `K` adds or
@@ -420,7 +427,7 @@ ur config set provider anthropic-api
420
427
  | --- | --- | --- |
421
428
  | API providers (openai-api, anthropic-api, gemini-api) | Live discovery from the provider's `/models` endpoint using your connected key (curated fallback until connected) | live |
422
429
  | OpenRouter | Live `/models` discovery with an endpoint-scoped five-minute cache; Ctrl+R forces a fresh request with no stale fallback | live/cache |
423
- | NVIDIA NIM | Live `/models` discovery from the hosted or configured NIM endpoint; no stale offline model catalog | live |
430
+ | NVIDIA NIM | Hosted: live `/models` intersected with the connected account's ACTIVE NVCF functions, then restricted to agent/chat endpoints. Configured NIM gateway: its own live `/models` catalog | live |
424
431
  | Local/server providers (ollama, lmstudio, llama.cpp, vllm, unsloth) | Dynamic discovery from the selected provider endpoint | live |
425
432
  | OpenAI-compatible | Dynamic discovery from configured endpoint | live |
426
433
  | Subscription CLIs (codex-cli, claude-code-cli, gemini-cli, antigravity-cli) | Curated list (the official CLIs expose no models API); first-class in `/model`, dispatched via the official CLI. External CLI behavior depends on the vendor CLI. Log in with `ur auth <provider>` | static |
@@ -657,15 +664,28 @@ ur provider doctor nvidia-nim
657
664
  ur config set base_url nvidia-nim https://nim-gateway.example/v1
658
665
  ```
659
666
 
660
- The default is `https://integrate.api.nvidia.com/v1`. UR calls `/models`,
661
- `/chat/completions`, and, when available, `/messages/count_tokens`; native
667
+ The default is `https://integrate.api.nvidia.com/v1`. NVIDIA's hosted
668
+ `/v1/models` response can be broader than the functions that the connected
669
+ account can actually invoke. UR therefore intersects it with the authenticated
670
+ NVCF `GET /v2/nvcf/functions` inventory, keeps only `ACTIVE` matches, and
671
+ removes embedding, guard, parser, translation, reward, and similar non-agent
672
+ endpoints. A custom enterprise or self-hosted NIM remains independent and uses
673
+ only that configured gateway's `/models` response.
674
+
675
+ UR calls `/models`, `/chat/completions`, and, when available, `/messages/count_tokens`; native
662
676
  count failure falls back to a provider-wire estimate and never launches a
663
677
  hidden completion. Streaming, standard tool calls, and image input use the
664
678
  same OpenAI-compatible adapter. Vision and tools remain model-dependent. For
665
679
  documented Nemotron coding-agent models, UR includes NVIDIA's
666
680
  `force_nonempty_content` template option when tools are present. See NVIDIA's
667
681
  [NIM LLM API reference](https://docs.api.nvidia.com/nim/reference/llm-apis)
668
- and [NIM function-calling API](https://docs.nvidia.com/nim/large-language-models/latest/function-calling.html).
682
+ and [NVCF API scope reference](https://docs.nvidia.com/nvcf/api#scope-reference).
683
+
684
+ `ur provider doctor nvidia-nim` verifies both the hosted catalog and the
685
+ selected model against the account-active inventory. If NVIDIA retires a
686
+ function after selection, UR redacts NVIDIA's internal function/account IDs,
687
+ removes that model from the current endpoint-scoped session catalog, and asks
688
+ the user to select an active model. `Ctrl+R` explicitly retries discovery.
669
689
 
670
690
  Local/server providers use their normal endpoints:
671
691
 
@@ -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.84.3</p>
48
+ <p class="eyebrow">Version 1.84.4</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>
@@ -187,7 +187,7 @@ ur --model kimi-k3:cloud --effort high
187
187
  <h3>OpenRouter responsive routing</h3>
188
188
  <pre><code>ur config set provider openrouter
189
189
  /model # cached catalog; Ctrl+R forces live refresh</code></pre>
190
- <p>The endpoint-scoped model catalog is reused for five minutes, while forced refresh never substitutes stale data. Interactive requests prefer OpenRouter latency routing, a stable session ID, and provider-authored prompt-cache markers; explicit routing preferences and model variants still win.</p>
190
+ <p>The endpoint-scoped model catalog is reused for five minutes, while forced refresh never substitutes stale data. Tool turns preserve OpenRouter Auto Exacto for live throughput and tool-call reliability; non-tool turns prefer end-to-end throughput. Stable session affinity keeps prompt caches warm, while configurable routing preferences and the <code>:nitro</code>, <code>:floor</code>, and <code>:exacto</code> variants remain authoritative.</p>
191
191
  </article>
192
192
  <article>
193
193
  <h3>NVIDIA NIM and compatible API keys</h3>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.84.3"
10
+ version = "1.84.4"
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.84.3",
5
+ "version": "1.84.4",
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.84.3",
3
+ "version": "1.84.4",
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",