ur-agent 1.84.1 → 1.84.3

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.
@@ -80,7 +80,7 @@ Inside an interactive session:
80
80
 
81
81
  | Trend | UR status | Current coverage | Professional next step |
82
82
  | --- | --- | --- | --- |
83
- | Provider-flexible, local-first runtime | Covered | Local Ollama; direct OpenAI, Anthropic, Gemini, OpenRouter, and OpenAI-compatible APIs; authenticated subscription-CLI adapters; explicit provider selection | Normalize capability discovery across providers and make automatic per-step routing opt-in |
83
+ | Provider-flexible, local-first runtime | Covered | Local Ollama; direct OpenAI, Anthropic, Gemini, OpenRouter, NVIDIA NIM, and OpenAI-compatible APIs; authenticated subscription-CLI adapters; explicit provider selection | Normalize capability discovery across providers and make automatic per-step routing opt-in |
84
84
  | Model Context Protocol ecosystem | Covered | Stable TypeScript SDK v2 split client/server/core runtime; `ur mcp`, OAuth/XAA, fail-closed bounded tools, final `input_required` continuation, all workspace roots with change notifications, and the opt-in stateless web server | Broaden independent-client interoperability fixtures |
85
85
  | Protocol Tasks and Apps | Covered | Negotiated Tasks lifecycle, owner-isolated durable state, and a self-contained Apps resource through `ur mcp serve-web` | Broaden independent-client interoperability fixtures |
86
86
  | A2A / Agent Card interoperability | Covered | Stable official v1.1 SDK, native ProtoJSON JSON-RPC/HTTP+JSON, SSE streaming, task resubscription, authenticated push delivery with validated destinations, negotiated cards, tenant isolation, durable artifacts, and explicit v0.3 compatibility | Broaden independent-client/TCK fixtures; keep gRPC and extended cards unadvertised until deployed and tested |
@@ -168,7 +168,7 @@ compatibility transport rather than relabeling either wire schema.
168
168
  ## Model Runtime Position
169
169
 
170
170
  UR is local-first, not local-only. Ollama supports private on-device execution;
171
- direct adapters support OpenAI, Anthropic, Gemini, OpenRouter, and compatible
171
+ direct adapters support OpenAI, Anthropic, Gemini, OpenRouter, NVIDIA NIM, and compatible
172
172
  endpoints; subscription adapters use the provider's authenticated CLI. Provider
173
173
  and model selection are explicit, credentials are resolved through the
174
174
  credential layer, and the optional fallback setting is diagnostic advice rather
@@ -88,7 +88,7 @@ receives general-purpose tools through this path.
88
88
 
89
89
  UR-Nexus supports official provider access paths only:
90
90
 
91
- - Explicit API providers: OpenAI, Anthropic, Gemini, OpenRouter, and
91
+ - Explicit API providers: OpenAI, Anthropic, Gemini, OpenRouter, NVIDIA NIM, and
92
92
  OpenAI-compatible endpoints.
93
93
  - Local/server providers: Ollama, LM Studio, llama.cpp, vLLM, and Unsloth OpenAI-compatible
94
94
  server mode.
@@ -132,6 +132,7 @@ ur config set provider openai-api
132
132
  ur config set provider anthropic-api
133
133
  ur config set provider gemini-api
134
134
  ur config set provider openrouter
135
+ ur config set provider nvidia-nim
135
136
  ur config set provider openai-compatible
136
137
  ur config set provider unsloth
137
138
  ur provider doctor agy
@@ -147,7 +148,7 @@ When the active provider fails, `ur provider doctor` shows the configured
147
148
  recovery command; changing providers remains an explicit user action.
148
149
 
149
150
  Provider values accept canonical IDs and common aliases. Examples:
150
- `openai-api`, `anthropic-api`, `gemini-api`, `openrouter`, `ollama`,
151
+ `openai-api`, `anthropic-api`, `gemini-api`, `openrouter`, `nvidia-nim` (`NVIDIA Build`), `ollama`,
151
152
  `lmstudio`, `LM Studio`, `llama.cpp`, `vllm`, `unsloth` (`Unsloth Studio`), and the subscription CLI
152
153
  providers `codex-cli` (`chatgpt`), `claude-code-cli` (`claude`), `gemini-cli`
153
154
  (`gemini`), and `antigravity-cli` (`agy`). Values with spaces should be quoted
@@ -162,21 +163,22 @@ saved provider/model pair controls the runtime backend for the next agent
162
163
  request; Ollama is only used when `ollama` is the selected provider.
163
164
 
164
165
  The configured `base_url` is provider-scoped. Setting an address while vLLM is
165
- active does not replace the saved Ollama, llama.cpp, or Unsloth address;
166
+ active does not replace the saved Ollama, llama.cpp, Unsloth, or NVIDIA NIM address;
166
167
  returning to any provider restores its own URL. Legacy `provider.baseUrl`
167
168
  settings are migrated to the old active provider on the first provider switch
168
169
  or scoped base-URL write.
169
170
  To configure a provider that is not active, use
170
171
  `ur config set base_url <provider> <url>`; the success message names the target
171
172
  provider. This applies to direct API providers and gateways (OpenAI, Anthropic,
172
- Gemini, and OpenRouter) as well as local/server providers; built-in vendor URLs
173
+ Gemini, OpenRouter, and NVIDIA NIM) as well as local/server providers; built-in vendor URLs
173
174
  are fallbacks only. Discovery, doctor output, and request dispatch all resolve
174
175
  the same per-provider override. `/model` also opens an endpoint field when a
175
176
  disconnected local/server provider is selected.
176
177
 
177
178
  In the model step, Up/Down browses, Left/Right changes the focused model's
178
- supported effort level, Enter confirms, Ctrl+R refreshes the catalog, and Esc
179
- returns to providers. OpenRouter entries show pricing tier, context size,
179
+ supported effort level, Enter confirms, Ctrl+R refreshes the catalog, `E`
180
+ edits the provider endpoint, `K` adds or replaces its API key, and Esc returns
181
+ to providers. OpenRouter entries show pricing tier, context size,
180
182
  tool/reasoning capability, compact names, and the exact ID for the focused
181
183
  entry. Its endpoint-scoped catalog is reused for five minutes, while Ctrl+R
182
184
  forces an immediate live refresh; a failed forced refresh never silently
@@ -230,6 +232,7 @@ OPENAI_COMPATIBLE_API_KEY=...
230
232
  ANTHROPIC_API_KEY=...
231
233
  GEMINI_API_KEY=...
232
234
  OPENROUTER_API_KEY=...
235
+ NVIDIA_API_KEY=...
233
236
  OLLAMA_API_KEY=... # optional for authenticated Ollama gateways
234
237
  LMSTUDIO_API_KEY=... # optional when required by the endpoint
235
238
  LLAMA_CPP_API_KEY=... # optional when required by the endpoint
@@ -237,6 +240,13 @@ VLLM_API_KEY=... # optional when required by the endpoint
237
240
  UNSLOTH_API_KEY=...
238
241
  ```
239
242
 
243
+ NVIDIA NIM defaults to `https://integrate.api.nvidia.com/v1`, discovers the
244
+ connected account's models live, and accepts a provider-scoped override for an
245
+ enterprise or self-hosted NIM. Generic `openai-compatible` authentication is
246
+ optional: `ur connect openai-compatible` or the picker's `K` key stores a
247
+ credential when the chosen gateway needs one, without breaking anonymous
248
+ local endpoints.
249
+
240
250
  Unsloth is an inference-provider integration only. Start Unsloth Studio and
241
251
  load the model outside UR, connect its generated key with `ur connect unsloth`,
242
252
  then select a model discovered from `http://localhost:8888/v1` (or your
@@ -504,6 +514,15 @@ before the agent can declare the task complete. A failing command surfaces
504
514
  to the model as a structured reminder with the command name and the trimmed
505
515
  stdout/stderr.
506
516
 
517
+ ## Shell command deadlines
518
+
519
+ Set the Bash tool's `timeout` input in milliseconds for a whole-command
520
+ deadline. If a generated command uses the common Linux form `timeout 60 cmd`,
521
+ UR also makes that command work on macOS: it uses Homebrew `gtimeout` when
522
+ installed, otherwise supplies an in-process compatibility implementation with
523
+ process-group cleanup and GNU-style status 124 on expiry. No package install or
524
+ shell-profile change is required. Native Linux `timeout` remains untouched.
525
+
507
526
  ## Project Safety Policy
508
527
 
509
528
  `ur safety` exposes the project shell safety policy:
@@ -200,10 +200,16 @@ ur provider doctor <provider-id>
200
200
  curl http://localhost:11434/api/tags # Ollama
201
201
  curl http://localhost:1234/v1/models # LM Studio (llama.cpp: 8080, vLLM: 8000)
202
202
  curl -H "Authorization: Bearer $UNSLOTH_API_KEY" http://localhost:8888/v1/models
203
+ curl -H "Authorization: Bearer $NVIDIA_API_KEY" https://integrate.api.nvidia.com/v1/models
203
204
  ur connect openai-api # store an API key securely
204
205
  ur provider doctor
205
206
  ```
206
207
 
208
+ For an authenticated generic gateway, run `ur connect openai-compatible` or
209
+ press `K` on its `/model` screen; the key is optional and stored separately
210
+ from `OPENAI_API_KEY`. NVIDIA NIM uses `ur connect nvidia-nim` and keeps any
211
+ custom `base_url` scoped to that provider.
212
+
207
213
  ### Unsloth is selected but unavailable
208
214
 
209
215
  - Likely cause: Studio is not running, no model is loaded, its generated API
package/docs/USAGE.md CHANGED
@@ -207,7 +207,7 @@ Use `ur provider status` or `ur provider doctor <provider>` to see provider
207
207
  kind, external CLI usage, native tool/streaming support, and the boundary text.
208
208
 
209
209
  Provider values accept canonical IDs and common aliases. For example,
210
- `openai-api`, `anthropic-api`, `gemini-api`, `openrouter`, `ollama`,
210
+ `openai-api`, `anthropic-api`, `gemini-api`, `openrouter`, `nvidia-nim`, `ollama`,
211
211
  `lmstudio`, `llama.cpp`, `vllm`, and `unsloth` are UR-native runtime providers, and
212
212
  `codex-cli` (`chatgpt`), `claude-code-cli` (`claude`), `gemini-cli` (`gemini`),
213
213
  and `antigravity-cli` (`agy`) are subscription CLI providers.
@@ -215,7 +215,7 @@ and `antigravity-cli` (`agy`) are subscription CLI providers.
215
215
  API modes are explicit. Keys are read from a key stored via
216
216
  `ur connect <provider>` (OS keychain) or from the environment variables
217
217
  `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GEMINI_API_KEY`,
218
- `OPENROUTER_API_KEY`, and `UNSLOTH_API_KEY`. Subscription CLIs are optional, never required
218
+ `OPENROUTER_API_KEY`, `NVIDIA_API_KEY`, and `UNSLOTH_API_KEY`. Subscription CLIs are optional, never required
219
219
  dependencies, and never used as a silent fallback. UR-Nexus never scrapes
220
220
  browser sessions, extracts OAuth tokens, or bypasses provider restrictions.
221
221
  OpenAI-compatible local or cloud endpoints use `base_url` plus `model`.
@@ -224,7 +224,7 @@ and is inference-only: UR does not manage Unsloth and disables its server-side
224
224
  tools while retaining standard function calls inside UR's guarded tool loop.
225
225
 
226
226
  UR stores `base_url` per provider. You can set different addresses for
227
- Ollama, LM Studio, llama.cpp, vLLM, and Unsloth once, then switch providers without
227
+ Ollama, LM Studio, llama.cpp, vLLM, Unsloth, and NVIDIA NIM once, then switch providers without
228
228
  re-entering any of them. `ur config get base_url` reports the active provider's
229
229
  saved scoped override when one exists; use `ur provider status` or
230
230
  `ur provider doctor <provider>` to inspect the effective endpoint.
@@ -233,10 +233,17 @@ without making it active first. The `/model` picker offers the same endpoint
233
233
  entry flow for a disconnected local/server provider.
234
234
 
235
235
  Use `/model` in an interactive session to select provider first and model
236
- second. OpenAI API, Claude API, Gemini API, OpenRouter, Ollama, and
236
+ second. OpenAI API, Claude API, Gemini API, OpenRouter, NVIDIA NIM, Ollama, and
237
237
  OpenAI-compatible endpoints stay separate; a subscription login does not grant
238
238
  API-key access, and an API key does not grant subscription CLI access.
239
239
 
240
+ NVIDIA NIM uses the build.nvidia.com key and hosted
241
+ `https://integrate.api.nvidia.com/v1` endpoint by default. Connect it with
242
+ `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
244
+ provider API key and `E` edits its endpoint. This also makes optional
245
+ authentication practical for generic OpenAI-compatible gateways.
246
+
240
247
  ## Project Instructions
241
248
 
242
249
  Add a `UR.md` file to the repository root for team-shared instructions. UR loads it as project context.
@@ -19,7 +19,7 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.84.1 (UR-Nexus)"
22
+ # expected for this release: "1.84.3 (UR-Nexus)"
23
23
  ```
24
24
 
25
25
  ### 0.0 Redteam mode and Reverse Skills (1.81.0)
@@ -179,6 +179,29 @@ file. Expected: UR asks once whether to run the detected compile/test/lint
179
179
  commands. After answering, the same approval question is not shown again. A
180
180
  separate user task that edits files may ask once for its own verification.
181
181
 
182
+ ### 0.1.3 Portable deadlines and provider tool images (1.84.2)
183
+
184
+ Run the deterministic adapter and shell coverage:
185
+
186
+ ```sh
187
+ bun test test/bashCommandExecution.test.ts \
188
+ test/providerNvidiaNim.test.ts \
189
+ test/providerMultimodal.test.ts \
190
+ test/openaiResponses.test.ts \
191
+ test/ollamaToolResultImages.test.ts
192
+ ```
193
+
194
+ Expected: macOS can execute `timeout 0.1 …` without GNU coreutils and reports
195
+ 124 when the deadline expires. Image-bearing tool results retain their text and
196
+ image bytes across OpenAI Chat/Responses, Anthropic, Gemini, OpenRouter,
197
+ NVIDIA NIM, Ollama, LM Studio, llama.cpp, vLLM, Unsloth, and generic OpenAI-compatible
198
+ request shapes.
199
+
200
+ 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
203
+ add or replace its optional key while `E` continues to edit only its endpoint.
204
+
182
205
  ## 0.2 Permission safety and context pack (1.19.0)
183
206
 
184
207
  In a project checkout:
package/docs/providers.md CHANGED
@@ -37,6 +37,7 @@ multimodal input, external CLI boundary, and sandbox scope:
37
37
  | Claude API | API | UR-native | no | yes | yes | yes | UR Bash/File sandbox | `api:anthropic` | `ANTHROPIC_API_KEY` |
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
+ | NVIDIA NIM | hosted/server API | UR-native | no | yes | yes | model-dependent | UR Bash/File sandbox | `api:nvidia-nim` | `NVIDIA_API_KEY`; configurable NIM endpoint |
40
41
  | OpenAI-compatible | server/API | UR-native | no | yes | yes | endpoint-dependent | UR Bash/File sandbox | `openai-compatible` | optional `OPENAI_COMPATIBLE_API_KEY`; never reuses `OPENAI_API_KEY` |
41
42
  | Ollama | local/server | UR-native | no | yes | yes | yes* | UR Bash/File sandbox | `ollama` | configured local, LAN, or hosted endpoint; optional `OLLAMA_API_KEY` |
42
43
  | LM Studio | local/server | UR-native | no | yes | yes | yes | UR Bash/File sandbox | `openai-compatible:lmstudio` | configured endpoint; optional `LMSTUDIO_API_KEY` |
@@ -69,6 +70,17 @@ or `ollama show <model>`.
69
70
  official CLI, so image blocks are not forwarded, and UR-native tool/streaming/
70
71
  sandbox guarantees stop at UR-run tools and final UR output.
71
72
 
73
+ All UR-native adapters preserve images returned by tools without putting image
74
+ content into a wire field that rejects it. Anthropic keeps the image inside its
75
+ native `tool_result`; OpenAI Responses uses rich function-call output; Gemini
76
+ nests `inlineData` in the matching function response; Ollama uses the
77
+ following native user message; and OpenAI Chat Completions, OpenRouter, NVIDIA
78
+ NIM, LM Studio, llama.cpp, vLLM, Unsloth, and generic compatible endpoints emit the
79
+ required textual `role: tool` message followed immediately by a multimodal
80
+ `role: user` message. This preserves tool-call ordering and every image byte.
81
+ It does not turn a text-only model into a vision model: select a model whose
82
+ live provider metadata or runtime supports image input.
83
+
72
84
  Tool search (deferred tool loading) is disabled on every provider above. It
73
85
  depends on `tool_reference` content blocks being expanded into tool definitions
74
86
  by the API, which is a URHQ-native beta feature with no equivalent on a local
@@ -149,7 +161,7 @@ migrated to the previously active provider on the first provider switch or
149
161
  scoped base-URL write.
150
162
 
151
163
  The override is not limited to local runtimes. OpenAI API, Anthropic API,
152
- Gemini API, and OpenRouter can each target a separate compatible gateway using
164
+ Gemini API, OpenRouter, and NVIDIA NIM can each target a separate compatible gateway using
153
165
  the same command. Their official URLs are defaults, not hardcoded dispatch
154
166
  destinations; model discovery and inference use the selected provider's saved
155
167
  URL. Subscription CLI providers remain vendor-managed and do not accept a base
@@ -200,6 +212,12 @@ or has unknown capability metadata. Arbitrary
200
212
  labels such as `deep` still require an explicit provider alias because UR
201
213
  cannot infer their rank.
202
214
 
215
+ NVIDIA NIM is live-discovery first. UR enriches a discovered model only when
216
+ NVIDIA's current model API reference documents that exact model's
217
+ `reasoning_effort` values. Documented `none` appears as Minimal and `max`
218
+ appears as Ultra while the request preserves NVIDIA's wire values. An unknown
219
+ NIM model never inherits an invented graded ladder.
220
+
203
221
  For an unknown or newly released model, UR waits for provider-authored model
204
222
  metadata or a supported model-scoped probe before adding thinking parameters.
205
223
  If the provider does not establish support, thinking stays off for request
@@ -249,15 +267,18 @@ forced refresh fails. Interactive requests default to OpenRouter's latency
249
267
  sorting, promote UR's stable session ID for sticky routing, and preserve safe
250
268
  provider prompt-cache markers. Explicit routing preferences and the `:nitro`,
251
269
  `:floor`, and `:exacto` model variants remain authoritative. API-key entry for
252
- OpenAI, Claude, Gemini, and OpenRouter is a single aligned masked row; the key
253
- is stored in the OS keychain flow and is never written to settings.
270
+ OpenAI, Claude, Gemini, OpenRouter, NVIDIA NIM, and authenticated compatible
271
+ endpoints is a single aligned masked row; the key is stored in the OS keychain
272
+ flow and is never written to settings. On the model screen, `K` adds or
273
+ replaces the selected HTTP provider's key and `E` edits its endpoint. Generic
274
+ OpenAI-compatible endpoints may remain anonymous.
254
275
 
255
276
  ### Token counting
256
277
 
257
278
  UR uses each provider's non-generating count endpoint when one covers the full
258
279
  request: OpenAI Responses input tokens, Anthropic Messages token counting,
259
- Gemini `countTokens`, llama.cpp chat input tokens, and vLLM Messages token
260
- counting. Ollama, OpenRouter, LM Studio, Unsloth, and subscription CLIs use a
280
+ Gemini `countTokens`, llama.cpp chat input tokens, and vLLM/NVIDIA NIM Messages
281
+ token counting. Ollama, OpenRouter, LM Studio, Unsloth, and subscription CLIs use a
261
282
  provider-wire local estimate because those runtimes do not share a dependable
262
283
  preflight tokenizer for complete chat history plus tools. UR never launches a
263
284
  hidden completion for token counting. If a native count call is unavailable,
@@ -288,7 +309,7 @@ error, not a successful `Did 0 searches` result.
288
309
  When you select a UR-native provider and model, every agent request is routed
289
310
  through that provider's backend:
290
311
 
291
- - **API providers** make direct HTTP calls in each provider's native wire format: Anthropic uses `x-api-key` + `anthropic-version` against `/v1/messages`; OpenAI uses `Authorization: Bearer` against `/v1/chat/completions` by default or `/v1/responses` when explicitly selected; Gemini uses `x-goog-api-key` against `…:generateContent`; OpenRouter uses its OpenAI-compatible chat endpoint.
312
+ - **API providers** make direct HTTP calls in each provider's native wire format: Anthropic uses `x-api-key` + `anthropic-version` against `/v1/messages`; OpenAI uses `Authorization: Bearer` against `/v1/chat/completions` by default or `/v1/responses` when explicitly selected; Gemini uses `x-goog-api-key` against `…:generateContent`; OpenRouter and NVIDIA NIM use their OpenAI-compatible chat endpoints.
292
313
  - **Local/server providers** connect to the configured local or OpenAI-compatible endpoint (`/v1/chat/completions` for LM Studio, llama.cpp and vLLM; the native tags/chat API for Ollama)
293
314
  - **Subscription CLI providers** (Codex CLI, Claude Code, Gemini CLI,
294
315
  Antigravity) dispatch the turn through the vendor's official CLI using your
@@ -399,6 +420,7 @@ ur config set provider anthropic-api
399
420
  | --- | --- | --- |
400
421
  | 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 |
401
422
  | 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 |
402
424
  | Local/server providers (ollama, lmstudio, llama.cpp, vllm, unsloth) | Dynamic discovery from the selected provider endpoint | live |
403
425
  | OpenAI-compatible | Dynamic discovery from configured endpoint | live |
404
426
  | 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 |
@@ -425,6 +447,7 @@ provider's successful live catalog remains authoritative for that account.
425
447
  - `anthropic-api` — requires `ANTHROPIC_API_KEY`
426
448
  - `gemini-api` — requires `GEMINI_API_KEY`
427
449
  - `openrouter` — requires `OPENROUTER_API_KEY`
450
+ - `nvidia-nim` — requires `NVIDIA_API_KEY` for build.nvidia.com; endpoint is configurable
428
451
 
429
452
  **Local/server providers** require local runtime or endpoint:
430
453
  - `ollama` — configurable local, LAN, or hosted Ollama server
@@ -557,6 +580,7 @@ Provider config and doctor commands accept canonical IDs and common aliases:
557
580
  | `anthropic-api` | `anthropic`, `claude api` |
558
581
  | `gemini-api` | `gemini api`, `google gemini api` |
559
582
  | `openrouter` | `openrouter api` |
583
+ | `nvidia-nim` | `nvidia`, `NVIDIA Build`, `nvidia api`, `nim` |
560
584
  | `openai-compatible` | `compatible`, `openai compatible` |
561
585
  | `ollama` | `ollama local` |
562
586
  | `lmstudio` | `LM Studio`, `lm-studio` |
@@ -597,6 +621,7 @@ OPENAI_COMPATIBLE_API_KEY=...
597
621
  ANTHROPIC_API_KEY=...
598
622
  GEMINI_API_KEY=...
599
623
  OPENROUTER_API_KEY=...
624
+ NVIDIA_API_KEY=...
600
625
  OLLAMA_API_KEY=... # optional for authenticated Ollama gateways
601
626
  LMSTUDIO_API_KEY=... # optional when the endpoint requires it
602
627
  LLAMA_CPP_API_KEY=... # optional when the endpoint requires it
@@ -616,6 +641,32 @@ ur config set model local-model-name
616
641
  `OPENAI_API_KEY`; selecting an arbitrary compatible base URL never forwards
617
642
  the OpenAI credential to that host.
618
643
 
644
+ The compatible provider's key is optional and provider-scoped. Add or replace
645
+ it with `ur connect openai-compatible`, `/connect openai-compatible`, or `K`
646
+ in the `/model` model screen. Anonymous endpoints continue to work without it.
647
+
648
+ ### NVIDIA NIM / build.nvidia.com
649
+
650
+ NVIDIA NIM is a UR-native, OpenAI-compatible provider with live discovery:
651
+
652
+ ```sh
653
+ echo "$NVIDIA_API_KEY" | ur connect nvidia-nim
654
+ ur config set provider nvidia-nim
655
+ ur provider doctor nvidia-nim
656
+ # Optional self-hosted/enterprise gateway:
657
+ ur config set base_url nvidia-nim https://nim-gateway.example/v1
658
+ ```
659
+
660
+ The default is `https://integrate.api.nvidia.com/v1`. UR calls `/models`,
661
+ `/chat/completions`, and, when available, `/messages/count_tokens`; native
662
+ count failure falls back to a provider-wire estimate and never launches a
663
+ hidden completion. Streaming, standard tool calls, and image input use the
664
+ same OpenAI-compatible adapter. Vision and tools remain model-dependent. For
665
+ documented Nemotron coding-agent models, UR includes NVIDIA's
666
+ `force_nonempty_content` template option when tools are present. See NVIDIA's
667
+ [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).
669
+
619
670
  Local/server providers use their normal endpoints:
620
671
 
621
672
  - Ollama: `http://localhost:11434`
@@ -672,6 +723,7 @@ Required variables:
672
723
  | --- | --- | --- |
673
724
  | OpenAI-compatible | `OPENAI_COMPATIBLE_BASE_URL`, `OPENAI_COMPATIBLE_MODEL` | `OPENAI_COMPATIBLE_API_KEY` |
674
725
  | Unsloth | `UNSLOTH_API_KEY`, `UNSLOTH_MODEL` | `UNSLOTH_BASE_URL` (defaults to `http://localhost:8888/v1`) |
726
+ | NVIDIA NIM | `NVIDIA_API_KEY`, `NVIDIA_MODEL` | `NVIDIA_BASE_URL` (defaults to `https://integrate.api.nvidia.com/v1`) |
675
727
  | OpenAI | `OPENAI_API_KEY`, `OPENAI_MODEL` | `OPENAI_BASE_URL` |
676
728
  | OpenRouter | `OPENROUTER_API_KEY`, `OPENROUTER_MODEL` | `OPENROUTER_BASE_URL` |
677
729
  | Anthropic | `ANTHROPIC_API_KEY`, `ANTHROPIC_MODEL` | `ANTHROPIC_BASE_URL` |
@@ -68,8 +68,8 @@ const featureGroups = [
68
68
  {
69
69
  title: 'Providers and auth',
70
70
  tags: ['subscription', 'API', 'local', 'effort', 'status bar'],
71
- text: 'UR-native API/local/OpenAI-compatible runtimes, provider-scoped endpoints, provider-only Unsloth inference, capability-driven reasoning effort, responsive OpenRouter routing, first-class subscription CLI providers dispatched through the official vendor CLIs, provider doctor checks, secure API-key connect, non-secret config, fallback hints, and provider-aware status-bar output.',
72
- commands: ['ur provider list', 'ur provider status', 'ur provider doctor agy', 'ur connect status', 'ur config set provider openai-api', 'ur config set provider ollama', 'ur config set base_url llama.cpp http://localhost:9931/v1', '/effort ultra', '/thinking on'],
71
+ text: 'UR-native API/local/OpenAI-compatible runtimes, provider-scoped endpoints, live NVIDIA NIM and provider-only Unsloth inference, optional compatible-gateway keys, capability-driven reasoning effort, responsive OpenRouter routing, first-class subscription CLI providers dispatched through the official vendor CLIs, provider doctor checks, secure API-key connect, non-secret config, fallback hints, and provider-aware status-bar output.',
72
+ commands: ['ur provider list', 'ur provider status', 'ur provider doctor agy', 'ur connect status', 'ur config set provider nvidia-nim', 'ur config set provider openai-api', 'ur config set provider ollama', 'ur config set base_url llama.cpp http://localhost:9931/v1', '/effort ultra', '/thinking on'],
73
73
  },
74
74
  {
75
75
  title: 'Security and operations',
@@ -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.1</p>
48
+ <p class="eyebrow">Version 1.84.3</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>
@@ -165,6 +165,7 @@ ur provider doctor agy</code></pre>
165
165
  <h3>API and local providers</h3>
166
166
  <pre><code>ur config set provider openai-compatible
167
167
  ur config set provider openai-api
168
+ ur config set provider nvidia-nim
168
169
  ur config set base_url ollama http://localhost:11434
169
170
  ur config set base_url llama.cpp http://localhost:9931/v1
170
171
  ur config set provider unsloth
@@ -172,7 +173,7 @@ ur config set model qwen3-coder:480b-cloud
172
173
  ur config set provider.fallback ollama
173
174
  ur config set openai_transport responses
174
175
  ur config set responses.store false</code></pre>
175
- <p>API providers require explicit selection and read keys from a key stored via <code>ur connect</code> (OS keychain) or from environment variables. Each configurable provider keeps its own <code>base_url</code>, so switching among Ollama, LM Studio, llama.cpp, vLLM, Unsloth, and API gateways restores the matching address. OpenAI Responses is opt-in and privacy-first; Chat Completions remains the default. Unsloth is an authenticated inference provider only.</p>
176
+ <p>API providers require explicit selection and read keys from a key stored via <code>ur connect</code> (OS keychain) or from environment variables. Each configurable provider keeps its own <code>base_url</code>, so switching among Ollama, LM Studio, llama.cpp, vLLM, Unsloth, NVIDIA NIM, and API gateways restores the matching address. NVIDIA NIM uses live discovery from build.nvidia.com's official OpenAI-compatible API. OpenAI Responses is opt-in and privacy-first; Chat Completions remains the default. Unsloth is an authenticated inference provider only.</p>
176
177
  </article>
177
178
  <article>
178
179
  <h3>Capability-driven reasoning effort</h3>
@@ -188,6 +189,25 @@ ur --model kimi-k3:cloud --effort high
188
189
  /model # cached catalog; Ctrl+R forces live refresh</code></pre>
189
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
191
  </article>
192
+ <article>
193
+ <h3>NVIDIA NIM and compatible API keys</h3>
194
+ <pre><code>ur connect nvidia-nim
195
+ ur config set provider nvidia-nim
196
+ ur config set base_url nvidia-nim https://integrate.api.nvidia.com/v1
197
+ /model # K API key · E endpoint</code></pre>
198
+ <p>NVIDIA NIM is a UR-native provider with live models, streaming, tools, images, configurable endpoints, and only NVIDIA-documented effort ladders. Generic OpenAI-compatible endpoints can also store an optional dedicated key; anonymous endpoints remain valid.</p>
199
+ </article>
200
+ <article>
201
+ <h3>Portable shell deadlines</h3>
202
+ <pre><code>timeout 60 long-command
203
+ # or use the Bash tool timeout field in milliseconds</code></pre>
204
+ <p>Generated Linux-style timeout commands also work on macOS. UR uses Homebrew <code>gtimeout</code> when present or supplies a process-group-aware compatibility command with status 124 on expiry; it does not modify your shell profile.</p>
205
+ </article>
206
+ <article>
207
+ <h3>Tool images across providers</h3>
208
+ <pre><code>Computer screenshot → tool result → vision model</code></pre>
209
+ <p>Every UR-native provider preserves image-bearing tool output in its valid wire shape. OpenRouter, NVIDIA NIM, and other Chat-Completions backends keep the tool result textual and send the image in the next multimodal user turn; Gemini, OpenAI Responses, Anthropic, and Ollama use their native rich forms. Vision still depends on the selected model.</p>
210
+ </article>
191
211
  <article>
192
212
  <h3>Status bar and updates</h3>
193
213
  <pre><code>Ollama | llama3 | ask | main | update available</code></pre>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.84.1"
10
+ version = "1.84.3"
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.1",
5
+ "version": "1.84.3",
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.1",
3
+ "version": "1.84.3",
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",