ur-agent 1.45.6 → 1.47.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.
Files changed (44) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/QUALITY.md +8 -3
  3. package/README.md +67 -13
  4. package/RELEASE.md +9 -6
  5. package/dist/cli.js +73656 -36080
  6. package/docs/A2A.md +180 -0
  7. package/docs/ACP.md +69 -17
  8. package/docs/AGENT_FEATURES.md +64 -7
  9. package/docs/AGENT_TRENDS.md +91 -26
  10. package/docs/AG_UI.md +132 -0
  11. package/docs/CONFIGURATION.md +123 -3
  12. package/docs/DEVELOPMENT.md +1 -0
  13. package/docs/IDE.md +20 -17
  14. package/docs/TROUBLESHOOTING.md +5 -3
  15. package/docs/USAGE.md +34 -4
  16. package/docs/VALIDATION.md +31 -1
  17. package/docs/providers.md +15 -1
  18. package/documentation/app.js +18 -6
  19. package/documentation/index.html +27 -8
  20. package/examples/agent_features.md +18 -0
  21. package/examples/agent_trends.md +5 -0
  22. package/examples/mcp.md +4 -0
  23. package/examples/memory.md +5 -2
  24. package/extensions/jetbrains-ur/README.md +12 -5
  25. package/extensions/jetbrains-ur/build.gradle.kts +22 -6
  26. package/extensions/jetbrains-ur/gradle.properties +1 -0
  27. package/extensions/jetbrains-ur/settings.gradle.kts +4 -0
  28. package/extensions/jetbrains-ur/src/main/kotlin/dev/urnexus/SendSelectionAction.kt +39 -5
  29. package/extensions/jetbrains-ur/src/main/kotlin/dev/urnexus/UrAcpClient.kt +52 -20
  30. package/extensions/jetbrains-ur/src/main/kotlin/dev/urnexus/UrToolWindowFactory.kt +7 -4
  31. package/extensions/jetbrains-ur/src/main/resources/META-INF/plugin.xml +1 -1
  32. package/extensions/vscode-ur-inline-diffs/README.md +6 -2
  33. package/extensions/vscode-ur-inline-diffs/out/extension.js +328 -157
  34. package/extensions/vscode-ur-inline-diffs/package.json +33 -5
  35. package/package.json +70 -56
  36. package/plugins/core/engineering-discipline/skills/reproducible-release/SKILL.md +2 -1
  37. package/plugins/core/github/skills/github-workflow/SKILL.md +2 -1
  38. package/plugins/core/gitlab/skills/gitlab-workflow/SKILL.md +2 -1
  39. package/plugins/core/huggingface/skills/huggingface-workflow/SKILL.md +2 -1
  40. package/plugins/core/miro/skills/miro-workflow/SKILL.md +2 -1
  41. package/plugins/core/obsidian/skills/second-brain/SKILL.md +2 -1
  42. package/plugins/core/powerpoint/skills/deck-craft/SKILL.md +2 -1
  43. package/plugins/core/skill-forge/skills/skill-authoring/SKILL.md +2 -1
  44. package/plugins/core/word/skills/document-craft/SKILL.md +2 -1
package/docs/AG_UI.md ADDED
@@ -0,0 +1,132 @@
1
+ # AG-UI Integration
2
+
3
+ UR-Nexus 1.47 exposes an opt-in [AG-UI](https://docs.ag-ui.com/) HTTP adapter
4
+ for user-facing applications. It validates the official `RunAgentInput` schema
5
+ and streams official AG-UI lifecycle, text, state, step, and tool events over
6
+ Server-Sent Events (SSE).
7
+
8
+ ## Start the adapter
9
+
10
+ ```sh
11
+ ur ag-ui serve
12
+ ```
13
+
14
+ The default endpoint is `http://127.0.0.1:8977/ag-ui`. The adapter also exposes:
15
+
16
+ - `GET /ag-ui/capabilities` — machine-readable, schema-validated capabilities.
17
+ - `GET /healthz` — lightweight process health.
18
+
19
+ The default loopback binding requires no bearer token. To expose the adapter on
20
+ another interface, configure authentication in the environment:
21
+
22
+ ```sh
23
+ UR_AG_UI_TOKEN='<random-secret>' \
24
+ ur ag-ui serve --host 0.0.0.0 --port 8977
25
+ ```
26
+
27
+ UR refuses an off-loopback bind without `UR_AG_UI_TOKEN`. Put the server behind
28
+ TLS before sending a bearer token over a non-loopback network.
29
+
30
+ ## Browser clients
31
+
32
+ Browser origins are denied unless they are explicitly listed. Each value must
33
+ be an exact HTTP(S) origin, without a path, query, credentials, or wildcard:
34
+
35
+ ```sh
36
+ ur ag-ui serve \
37
+ --allow-origin https://app.example.com https://admin.example.com
38
+ ```
39
+
40
+ When authentication is configured, send `Authorization: Bearer <token>`. The
41
+ endpoint requires `Content-Type: application/json` and an `Accept` value that
42
+ allows `text/event-stream`.
43
+
44
+ ## Minimal request
45
+
46
+ ```sh
47
+ curl --no-buffer http://127.0.0.1:8977/ag-ui \
48
+ -H 'Accept: text/event-stream' \
49
+ -H 'Content-Type: application/json' \
50
+ --data-binary '{
51
+ "threadId": "thread-1",
52
+ "runId": "run-1",
53
+ "state": {},
54
+ "messages": [
55
+ {"id": "message-1", "role": "user", "content": "Review this repository."}
56
+ ],
57
+ "tools": [],
58
+ "context": [],
59
+ "forwardedProps": {}
60
+ }'
61
+ ```
62
+
63
+ The response is an ordered SSE stream beginning with `RUN_STARTED` and a
64
+ `STATE_SNAPSHOT`. UR then emits step, text, and tool events and terminates with
65
+ `RUN_FINISHED` or a redacted `RUN_ERROR`. The server validates every emitted
66
+ event through the official AG-UI schemas and uses the official SSE encoder.
67
+
68
+ ## Supported contract
69
+
70
+ This adapter deliberately advertises only behavior that is implemented end to
71
+ end:
72
+
73
+ - HTTP/SSE streaming, text input/output, state snapshots, UR-configured tools,
74
+ cancellation on disconnect, delegation, and code execution are supported.
75
+ - Client-provided tools, multimodal input, encrypted input, interrupt resume,
76
+ persistent AG-UI state, WebSocket/binary transport, push notifications,
77
+ reasoning events, and interactive human approvals are not advertised.
78
+ - Unsupported input is rejected with a structured `4xx` error; it is never
79
+ silently discarded.
80
+
81
+ Every request supplies the complete transcript, state, context, and forwarded
82
+ properties for that run. UR labels this envelope as untrusted client data so a
83
+ client-supplied system message cannot replace UR's own system or safety policy.
84
+ Adapter runs use isolated session IDs and disable child-session persistence.
85
+
86
+ ## Permissions
87
+
88
+ Select a permission mode explicitly when necessary:
89
+
90
+ ```sh
91
+ ur ag-ui serve --permission-mode plan
92
+ ur ag-ui serve --permission-mode acceptEdits
93
+ ```
94
+
95
+ The default is `default`. Because AG-UI runs have no interactive terminal
96
+ approval channel, any operation that still requires a prompt is denied. `plan`
97
+ is the safest read-oriented mode. Use `acceptEdits` only in a workspace where
98
+ the adapter is authorized to edit files; other permission checks still apply.
99
+
100
+ ## Resource controls
101
+
102
+ The following environment variables are optional. Invalid or excessive values
103
+ fall back to bounded defaults or are capped by the implementation.
104
+
105
+ | Variable | Default | Purpose |
106
+ | --- | ---: | --- |
107
+ | `UR_AG_UI_TOKEN` | unset | Required bearer secret for off-loopback binds. |
108
+ | `UR_AG_UI_MAX_REQUEST_BYTES` | `2000000` | Maximum request-body bytes. |
109
+ | `UR_AG_UI_MAX_CALLS_PER_MINUTE` | `120` | Rolling request rate per server process. |
110
+ | `UR_AG_UI_MAX_CONCURRENT_RUNS` | `8` | Concurrent active runs. |
111
+ | `UR_AG_UI_PROMPT_TIMEOUT_MS` | `1800000` | Per-run execution deadline. |
112
+ | `UR_AG_UI_MAX_OUTPUT_CHARS` | `10485760` | Maximum child stream output. |
113
+
114
+ Duplicate active `threadId`/`runId` pairs are rejected per authenticated owner.
115
+ Requests, identifiers, transcript/context data, tool payloads, output, stderr,
116
+ and stream lines are independently bounded. Error responses do not expose
117
+ provider stderr or internal exception details.
118
+
119
+ ## Cost and privacy
120
+
121
+ AG-UI and the adapter dependencies are free/open-source software. Running an
122
+ AG-UI request uses whichever model provider UR is configured to use; that
123
+ provider may have its own pricing. Select a local Ollama model when you need a
124
+ fully local path without paid API calls. The deterministic AG-UI tests use an
125
+ injected fake runner and never contact a model provider.
126
+
127
+ Protocol references:
128
+
129
+ - [AG-UI architecture](https://docs.ag-ui.com/concepts/architecture)
130
+ - [AG-UI events](https://docs.ag-ui.com/concepts/events)
131
+ - [AG-UI JavaScript types](https://docs.ag-ui.com/sdk/js/core/types)
132
+ - [AG-UI reference implementation](https://github.com/ag-ui-protocol/ag-ui)
@@ -107,6 +107,28 @@ GEMINI_API_KEY=...
107
107
  OPENROUTER_API_KEY=...
108
108
  ```
109
109
 
110
+ ### OpenAI Responses transport
111
+
112
+ OpenAI uses Chat Completions unless the Responses transport is selected
113
+ explicitly:
114
+
115
+ ```sh
116
+ ur config set openai_transport responses
117
+ ur config set responses.store false
118
+ ur config set responses.compact_threshold 20000
119
+ ur config set responses.tool_search hosted
120
+ ```
121
+
122
+ Supported safe settings are `chat-completions|responses`, boolean
123
+ `responses.store`, an integer compaction threshold of at least 1,000 tokens,
124
+ and `off|hosted` tool search. Responses defaults to `store=false`, no server
125
+ compaction, and no deferred tool search. Background and WebSocket state is kept
126
+ under `.ur/openai-responses/` with private atomic writes; identifiers, status,
127
+ model, mode, and cursors are the only plaintext durable fields. To retain an
128
+ opaque compacted window, set `UR_OPENAI_RESPONSES_STATE_KEY` to exactly 32
129
+ bytes encoded as 64 hexadecimal characters or base64. Without that key UR
130
+ refuses to persist compacted context.
131
+
110
132
  ### Reconfiguring the Ollama host
111
133
 
112
134
  The endpoint can be changed from UR in three ways, in order of precedence:
@@ -415,6 +437,9 @@ ur context-pack remember --decision "Use package scripts before ad hoc commands"
415
437
  ur context-pack remember --constraint "Do not expose secret values"
416
438
  ur context-pack remember --command "bun run typecheck"
417
439
  ur context-pack remember --diff "Safety policy wired into Bash permission checks"
440
+ ur context-pack memory verify
441
+ ur context-pack memory quarantine
442
+ ur context-pack memory rollback --to <entry-id>
418
443
  ur context-pack compress
419
444
  ```
420
445
 
@@ -425,8 +450,10 @@ Generated files:
425
450
  `.ur/safety-policy.json`, MCP config, editor settings, workflow files, and
426
451
  other manifests.
427
452
  - `.ur/context/architecture.md` — human-readable architecture summary.
428
- - `.ur/context/task-memory.jsonl` — decisions, constraints, commands, diffs,
429
- and notes.
453
+ - `.ur/context/task-memory.jsonl` — private, append-only decisions,
454
+ constraints, commands, diffs, and notes with explicit provenance, UUIDs, and
455
+ a SHA-256 content/hash chain. Legacy entries are anchored when the chain
456
+ starts rather than silently rewritten.
430
457
  - `.ur/context/compressed.md` — compressed task context summary.
431
458
 
432
459
  Two related slash commands:
@@ -447,10 +474,67 @@ ur mcp list
447
474
  ur mcp get <name>
448
475
  ur mcp add-json <name> '<json>'
449
476
  ur mcp remove <name>
477
+ ur mcp serve
478
+ UR_MCP_HTTP_TOKEN='<secret>' ur mcp serve-http --port 8976
450
479
  ```
451
480
 
452
481
  MCP servers may execute code or access external services. Only enable servers you trust, and keep credentials out of committed config.
453
482
 
483
+ When UR itself runs as an MCP server, tool requests are non-interactive:
484
+ schema validation and normal permission checks still run, and any operation
485
+ that would require an approval prompt is rejected. Resource limits can be
486
+ adjusted with `UR_MCP_MAX_CALLS_PER_MINUTE`,
487
+ `UR_MCP_MAX_CONCURRENT_CALLS`, `UR_MCP_TOOL_TIMEOUT_MS`,
488
+ `UR_MCP_MAX_INPUT_CHARS`, and `UR_MCP_MAX_OUTPUT_CHARS`.
489
+
490
+ `serve-http` is a separate, opt-in MCP 2026-07-28 compatibility surface at
491
+ `POST /mcp`. It is stateless at the transport layer and exposes capability-
492
+ negotiated Tasks and a self-contained overview App backed by UR's real MCP
493
+ tool registry. Every call must supply matching protocol/method/name metadata.
494
+ Off-loopback binds require `UR_MCP_HTTP_TOKEN`; browser clients also require an
495
+ exact `--allow-origin`. HTTP request, rate, concurrency, task-retention, and
496
+ runtime limits use the `UR_MCP_HTTP_*` prefix. Durable task state is private,
497
+ owner-isolated, bounded, atomic, and quarantined if corrupt.
498
+
499
+ ## Background Agents
500
+
501
+ Detached `ur bg` task state is stored under `.ur/background/`. Manifest updates
502
+ use a cross-process lock and atomic mode-`0600` replacement; task logs, outputs,
503
+ and steering inboxes are created mode `0600` under mode-`0700` directories.
504
+ The loader rejects corrupt, oversized, or structurally invalid manifests rather
505
+ than silently replacing them. `UR_BACKGROUND_MAX_MANIFEST_BYTES` controls the
506
+ manifest byte ceiling (16 MiB by default, capped at 64 MiB), and
507
+ `UR_BACKGROUND_MAX_TASKS` controls the retained task ceiling (5,000 by default,
508
+ capped at 20,000).
509
+
510
+ ## Agent Servers
511
+
512
+ For native editor integration, `ur acp stdio` implements stable Agent Client
513
+ Protocol v1 through the official SDK. Its resource controls use the
514
+ `UR_ACP_STDIO_*` prefix. It supports client-provided MCP stdio/HTTP/SSE
515
+ servers, additional workspace roots, native permission requests, cancellation,
516
+ and persistent list/load/delete/resume/close with exact history replay, modes,
517
+ config options, and available commands; see the [ACP Guide](ACP.md).
518
+
519
+ `ur acp serve` is a separate UR HTTP JSON-RPC API. Set `UR_ACP_TOKEN` instead
520
+ of putting its bearer token in argv. Request, task, and tool limits use the
521
+ `UR_ACP_*` prefix.
522
+
523
+ `ur a2a serve` exposes strict v1 JSON-RPC and HTTP+JSON bindings alongside the
524
+ stable official-SDK v0.3 JSON-RPC binding and a separate UR compatibility task
525
+ API. Use `UR_A2A_TOKEN` for a static operator token or
526
+ `UR_A2A_DELEGATION_SECRET` for issuer-minted skill/tenant-scoped tokens. Limits
527
+ use the `UR_A2A_*` prefix. See the [A2A Guide](A2A.md) for endpoints, protocol
528
+ negotiation, proxy setup, and isolation.
529
+
530
+ `ur ag-ui serve` exposes an opt-in AG-UI HTTP/SSE adapter at `POST /ag-ui`,
531
+ with capability discovery at `GET /ag-ui/capabilities`. It binds to loopback by
532
+ default; off-loopback binds require `UR_AG_UI_TOKEN`, and browser clients must
533
+ be listed with exact `--allow-origin` values. Request, rate, concurrency,
534
+ runtime, and output controls use the `UR_AG_UI_*` prefix. Unsupported client
535
+ tools, multimodal/encrypted input, interrupts, and unimplemented transports are
536
+ rejected rather than silently ignored. See the [AG-UI Guide](AG_UI.md).
537
+
454
538
  ## Plugins and Skills
455
539
 
456
540
  Plugins can add commands, tools, and skills:
@@ -462,7 +546,43 @@ ur plugin update <plugin>
462
546
  ur plugin disable <plugin>
463
547
  ```
464
548
 
465
- Skills can be stored in `.ur/skills/` for project-specific workflows or in `~/.ur/skills/` for personal workflows.
549
+ Skills can be stored in `.ur/skills/` for project-specific workflows or in
550
+ `~/.ur/skills/` for personal workflows. UR also discovers the cross-client
551
+ `.agents/skills/` and `~/.agents/skills/` locations from the Agent Skills
552
+ integration guide. At an equal scope, native `.ur` skills win; project skills
553
+ win over user skills, and nearer project roots win over parent roots.
554
+
555
+ Portable `SKILL.md` directories are validated against the Agent Skills
556
+ frontmatter contract and receive deterministic content and permission digests.
557
+ Inspect and sign them with:
558
+
559
+ ```sh
560
+ ur skill verify <name-or-directory> [--require-trusted] [--json]
561
+ ur skill keygen <key-id> [--out <private-key.pem>]
562
+ ur skill sign <name-or-directory> --key <private-key.pem> --key-id <key-id>
563
+ ```
564
+
565
+ Set `UR_SKILLS_STRICT_SPEC=true` to reject spec-invalid file skills and
566
+ `UR_SKILLS_REQUIRE_TRUSTED_SIGNATURE=true` to require a verified key at load
567
+ and invocation. `UR_SKILL_TRUSTED_KEYS_FILE` can override the private trusted
568
+ key store (normally under the UR config directory). Signed skills cannot
569
+ contain symlinks and are re-hashed immediately before every invocation.
570
+
571
+ ## OpenTelemetry
572
+
573
+ No telemetry exporter is enabled by default. Configure each signal with the
574
+ standard `OTEL_TRACES_EXPORTER`, `OTEL_METRICS_EXPORTER`, and
575
+ `OTEL_LOGS_EXPORTER` variables; supported values are `otlp`, `console`, or
576
+ `none`. OTLP uses HTTP/protobuf and the standard
577
+ `OTEL_EXPORTER_OTLP[_<SIGNAL>]_ENDPOINT` variables. UR validates endpoints,
578
+ protocols, and export intervals before registering providers.
579
+
580
+ GenAI spans and metrics cover inference, agent/workflow invocation, tools, memory,
581
+ duration, token/cache usage, response identity, finish reason, time to first
582
+ chunk, and bounded error type. Content is excluded unless
583
+ `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true`; use
584
+ `UR_OTEL_GENAI_PROVIDER` only when a gateway hides the provider identity.
585
+ `OTEL_SDK_DISABLED=true` disables the SDK globally.
466
586
 
467
587
  ## Secrets
468
588
 
@@ -35,6 +35,7 @@ bun run dev
35
35
  ```sh
36
36
  bun run typecheck
37
37
  bun run lint
38
+ bun run dependencies:audit
38
39
  bun test
39
40
  bun run build
40
41
  bun run smoke
package/docs/IDE.md CHANGED
@@ -13,8 +13,8 @@ stated honestly — nothing here claims support that does not exist:
13
13
  below. Ships to VS Code, Cursor, and Windsurf (one extension; Cursor and
14
14
  Windsurf are VS Code forks). This is the integration everything else on
15
15
  this page is compared against.
16
- - **Stdio ACP** (`ur acp stdio`) — the real, spec-compliant
17
- [Agent Client Protocol](ACP.md) over stdio, used by Zed and ACP-capable
16
+ - **Stdio ACP** (`ur acp stdio`) — stable ACP v1 over stdio, backed by the
17
+ official TypeScript SDK and used by Zed and ACP-capable
18
18
  Neovim clients. This remains a separate transport from the VS Code
19
19
  extension's chat bridge below; the two are independent and neither depends
20
20
  on the other.
@@ -33,14 +33,14 @@ stated honestly — nothing here claims support that does not exist:
33
33
  | Cursor | UR Inline Diffs extension (VS Code fork) | `.vscode/settings.json` | Same extension as VS Code. |
34
34
  | Windsurf | UR Inline Diffs extension (VS Code fork) | `.vscode/settings.json` | Same extension as VS Code. |
35
35
  | Zed | stdio ACP | `.zed/settings.json` | Real Agent Client Protocol over stdio. |
36
- | JetBrains | bundled experimental plugin + HTTP ACP | manual zip install | Project-scoped JSON-RPC session and Send Selection action; synchronous ACP task result, not token streaming. |
36
+ | JetBrains | bundled experimental plugin + UR HTTP JSON-RPC | manual zip install | Project-scoped JSON-RPC session and Send Selection action; synchronous task result, not streaming. |
37
37
  | Neovim | stdio ACP | snippet | Requires a third-party ACP client plugin. |
38
- | Generic ACP | stdio ACP / HTTP | snippet | `ur acp stdio` (native ACP) or `ur acp serve` (HTTP JSON-RPC; not a streaming transport see Known limitations). |
38
+ | Generic ACP | stdio ACP | snippet | `ur acp stdio` is the native ACP transport. `ur acp serve` is a separate UR-specific HTTP API. |
39
39
 
40
40
  ## Commands
41
41
 
42
42
  ```sh
43
- ur ide status # workspace, ACP server, provider/model, sandbox/verifier mode, plugin count, warnings
43
+ ur ide status # workspace, UR HTTP server, provider/model, sandbox/verifier mode, plugin count, warnings
44
44
  ur ide doctor # pass/warn/fail checks; reports missing config clearly
45
45
  ur ide config <editor> # print setup + config snippet for the chosen editor
46
46
  ur ide open # open the current project/worktree in a detected IDE
@@ -52,7 +52,7 @@ ur ide diff approve|reject <id>
52
52
  `ur ide config` targets: `vscode`, `cursor`, `windsurf`, `zed`, `jetbrains`,
53
53
  `neovim`, `generic-acp` (aliases like `nvim`, `intellij`, `code` also resolve).
54
54
 
55
- `ur ide status` reports the active workspace, whether the ACP server is
55
+ `ur ide status` reports the active workspace, whether the UR HTTP compatibility server is
56
56
  running and on which port, the active provider/model and runtime backend,
57
57
  sandbox mode, verifier mode, the number of loaded plugins, and any warnings.
58
58
  Add `--json` for machine-readable output — this is the same JSON surface the
@@ -150,9 +150,12 @@ tasks (`ur bg list --json`) together in one place, with its own refresh
150
150
  button and a clear empty state when there is nothing captured yet. Diff rows
151
151
  support the same Open/Apply/Reject/Comment actions as the Inline Diffs view
152
152
  (routed through the CLI, as described above). Background task rows are
153
- read-only in this release click one to open its log file; starting or
154
- canceling a task from the panel is not implemented yet, use
155
- `ur bg run|kill` from a terminal.
153
+ actionable: **Start Background Task** offers isolated-worktree (recommended),
154
+ offline isolated-worktree, and current-workspace modes, confirms before
155
+ launch, and never enables permission bypass or PR publishing. Active tasks
156
+ can be canceled from their context menu. Opening a task retrieves the latest
157
+ 2,000 log lines through `ur bg logs`, so the extension never trusts an
158
+ arbitrary manifest path as a file to open.
156
159
 
157
160
  ### Agent status card
158
161
 
@@ -170,7 +173,8 @@ CLI does not report renders as the literal word **unknown** — never a guess.
170
173
  action the extension exposes: New Chat, Open Chat, Explain Selection, Fix
171
174
  Selection, Generate Tests, Review Current Diff, Run Verifier, Provider
172
175
  Status, Agent Status, Agent Options, Open Settings, Open Docs, Open
173
- Artifacts, Run Spec, Run Workflow, and Refresh IDE Actions.
176
+ Artifacts, Run Spec, Run Workflow, Start Background Task, and Refresh IDE
177
+ Actions.
174
178
 
175
179
  ### Agent options panel
176
180
 
@@ -202,8 +206,9 @@ success it did not observe.
202
206
  ## Known limitations
203
207
 
204
208
  - **JetBrains integration is experimental and non-streaming.** It uses the
205
- loopback HTTP ACP server and returns the completed synchronous task output;
206
- it does not yet render token or tool-call streams.
209
+ loopback UR HTTP JSON-RPC server and returns the completed synchronous task output;
210
+ it does not yet render token or tool-call streams. Canceling the IDE progress
211
+ action does propagate to the active server-side session.
207
212
  - **The lockfile/MCP IDE bridge is Phase 2 and not part of this MVP.** The
208
213
  CLI already implements the *client* half of a lockfile-discovered MCP
209
214
  connection to a running IDE (`src/utils/ide.ts`), used by the terminal
@@ -211,20 +216,18 @@ success it did not observe.
211
216
  terminal-hosted `ur` session. The VS Code extension's chat panel does not
212
217
  use this bridge — it talks to UR entirely through the `stream-json`
213
218
  subprocess contract described above.
214
- - **The ACP HTTP server (`ur acp serve`) is not the VS Code chat streaming
215
- transport.** It is a separate, non-streaming JSON-RPC endpoint intended for
219
+ - **The UR HTTP server (`ur acp serve`) is neither an ACP binding nor the VS
220
+ Code chat streaming transport.** It is a separate, non-streaming JSON-RPC endpoint intended for
216
221
  scripts and other clients; the VS Code extension does not route chat
217
222
  through it, and `ur acp stdio` (used by Zed and ACP Neovim clients) is
218
223
  unaffected by any of the VS Code work described here.
219
- - **Background task actions are read-only** in the Actions panel — no start
220
- or cancel from the panel yet.
221
224
  - **Run Spec / Run Workflow** open chat with a prompt asking UR to list and
222
225
  run the relevant items, rather than shelling out directly — `ur spec` and
223
226
  `ur workflow` are full agentic commands, not one-shot JSON lookups.
224
227
 
225
228
  ## Troubleshooting
226
229
 
227
- - **`ur ide status` shows "ACP server: not running":** start it with
230
+ - **`ur ide status` shows "UR HTTP server: not running":** start it with
228
231
  `ur acp serve` (HTTP) or `ur acp stdio` (for ACP editors).
229
232
  - **No IDE detected:** ensure the editor is running with the UR extension/plugin
230
233
  installed, or generate config with `ur ide config <editor>`.
@@ -208,12 +208,14 @@ ur plugin list
208
208
 
209
209
  ### ACP / editor connection issues
210
210
 
211
- - Likely cause: the ACP server is not running, or the editor config block is
212
- missing.
213
- - Fix: check status, regenerate the editor config, and run the IDE doctor.
211
+ - Likely cause: the native stdio command/config is wrong, or the optional UR
212
+ HTTP server used by JetBrains is not running.
213
+ - Fix: verify the stdio command is registered, check HTTP status when relevant,
214
+ regenerate the editor config, and run the IDE doctor.
214
215
 
215
216
  ```sh
216
217
  ur acp status
218
+ ur acp stdio --help
217
219
  ur ide doctor
218
220
  ur ide config zed # or vscode, cursor, windsurf, jetbrains, neovim
219
221
  ```
package/docs/USAGE.md CHANGED
@@ -128,12 +128,23 @@ ur config set provider openai-compatible
128
128
  ur config set model <model>
129
129
  ur config set base_url <url>
130
130
  ur config set provider.fallback ollama
131
+ ur config set openai_transport responses
132
+ ur config set responses.store false
133
+ ur config set responses.compact_threshold 20000
134
+ ur config set responses.tool_search hosted
131
135
  ```
132
136
 
133
137
  `provider.fallback` only controls the recovery suggestion printed by provider
134
138
  diagnostics. UR does not switch or retry across providers automatically; use
135
139
  `ur config set provider <id>` after reviewing the failure.
136
140
 
141
+ The OpenAI API continues to use Chat Completions by default. Selecting
142
+ `openai_transport responses` opts into Responses semantic streaming,
143
+ background/poll/cancel support, WebSocket continuation, server compaction, and
144
+ deferred tool search. Remote storage is off by default. Local state contains
145
+ only bounded identifiers/status/cursors unless a 32-byte
146
+ `UR_OPENAI_RESPONSES_STATE_KEY` is supplied for AES-256-GCM compacted context.
147
+
137
148
  In the interactive app, `/model` chooses a provider first and then a model from
138
149
  that provider only. The saved pair controls the runtime backend for the next
139
150
  agent request. There is no cross-provider fallback: OpenAI API does not fall
@@ -210,9 +221,17 @@ ur context-pack remember --preference "Use bun test over jest"
210
221
  ur context-pack remember --accepted "Use p-map for bounded concurrency" --scope project
211
222
  ur context-pack remember --rejected "Switch to esbuild" --alternative-to "Keep bun bundle"
212
223
  ur context-pack remember --attempt "Tried Deno runtime" --status superseded
224
+ ur context-pack memory verify
225
+ ur context-pack memory quarantine
226
+ ur context-pack memory rollback --to <entry-id>
213
227
  ur context-pack compress
214
228
  ```
215
229
 
230
+ New entries carry explicit source provenance and form a SHA-256 hash chain.
231
+ Reads fail closed on malformed or tampered state. `quarantine` preserves the
232
+ complete original privately and restores the verified prefix; `rollback`
233
+ preserves a backup before truncating to the requested entry.
234
+
216
235
  ## Lifecycle hooks
217
236
 
218
237
  UR supports lifecycle hook events that fire around agent actions. Hooks are configured in `.ur/hooks.json` or `UR.md` frontmatter and receive JSON payloads.
@@ -244,7 +263,10 @@ UR includes slash commands and CLI subcommands for common workflows:
244
263
 
245
264
  - `/help` or `ur --help` for command discovery
246
265
  - `ur connect ...` to connect provider accounts (subscription login or stored API key)
247
- - `ur mcp ...` to configure MCP servers
266
+ - `ur mcp ...` to configure MCP servers, run the stdio server, or start the
267
+ opt-in stateless MCP 2026 Tasks/Apps adapter with `ur mcp serve-http`
268
+ - `ur ag-ui serve` to expose the secure AG-UI HTTP/SSE adapter to an explicitly
269
+ allowed user-facing application
248
270
  - `ur plugin ...` to manage plugins and marketplaces. Marketplace plugins can
249
271
  add MCP tools, commands, executable skills, templates, validators, language
250
272
  adapters, LSP servers, agents, hooks, and output styles.
@@ -257,7 +279,8 @@ UR includes slash commands and CLI subcommands for common workflows:
257
279
  - `ur context-pack ...` to summarize architecture and persist project memory (decisions, constraints, commands, diffs, architecture, preferences, attempts, accepted, rejected)
258
280
  - `ur code-index watch` to keep the local semantic code index fresh
259
281
  - `ur code-index repo build` to build a richer semantic repo index (files, symbols, calls, tests, docs, configs)
260
- - `ur skill init ...` and `ur skill run ...` for executable skill workflows
282
+ - `ur skill init|run ...` for executable skill workflows, plus
283
+ `ur skill verify|sign|keygen` for strict provenance and Ed25519 trust
261
284
  - `ur memory retention ...` to prune project-local memory by TTL, max entries, and decay
262
285
  - `ur spec ...` to scaffold requirements, design, and tasks, run a spec task list, and verify with strict proof gates
263
286
  - `ur escalate ...` to plan, run, or ask an oracle model for hard tasks
@@ -268,7 +291,9 @@ UR includes slash commands and CLI subcommands for common workflows:
268
291
  after one attempt and reports how to correct `--cwd`.
269
292
  - `ur artifacts ...` to capture reviewable diffs, test runs, notes, and feedback
270
293
  - `ur ide diff ...` to capture editor-readable inline diff bundles
271
- - `ur acp ...` to start/stop/status the Agent Communication Protocol server for IDE extensions
294
+ - `ur acp stdio` for the official-SDK ACP v1 editor transport with durable
295
+ list/load/delete/resume, modes, config options, and commands; and
296
+ `ur acp serve|stop|status` for the separate UR HTTP JSON-RPC API
272
297
  - `ur exec ...` to run prompts in non-interactive mode with optional concurrency
273
298
  - `ur eval run ...` to run a suite, grade results, and capture execution metrics
274
299
  - `ur eval report ...` to show a saved report or write a single-suite dashboard
@@ -292,7 +317,9 @@ UR includes slash commands and CLI subcommands for common workflows:
292
317
  - `ur trigger ...` to parse GitHub/Slack webhook payloads and optionally launch a headless run
293
318
  - `ur agent-templates ...`, `ur agent-task ...`, `ur agent-inspect`, `ur agent-features`, and `ur agent-trends` for agent template, PR handoff, timeline, and coverage utilities
294
319
  - `ur role-mode ...` to install built-in Architect, Code, Debug, and Ask role modes
295
- - `ur a2a ...` for Agent Card metadata, delegation tokens, and the opt-in A2A task server
320
+ - `ur a2a ...` for negotiated v1 JSON-RPC/HTTP+JSON, the stable v0.3 SDK
321
+ binding, scoped delegation tokens, durable protocol state, and separate UR
322
+ compatibility task routes
296
323
  - `ur sdk ...` to scaffold TS/Python headless SDK examples
297
324
  - `ur doctor` to inspect CLI health
298
325
  - `ur update` or `ur upgrade` to check for updates
@@ -347,6 +374,7 @@ ur test-first detect
347
374
  ur test-first --dry-run
348
375
  ur skill init security-review
349
376
  ur skill run security-review "src/auth.ts"
377
+ ur skill verify security-review --require-trusted
350
378
  ur code-index repo build
351
379
  ur code-index repo search "rate limiter"
352
380
  ur test-first install
@@ -355,7 +383,9 @@ ur safety check --command "rm -rf build"
355
383
  ur context-pack scan
356
384
  ur context-pack remember --constraint "Run command evidence before claiming success"
357
385
  ur context-pack remember --accepted "Use p-map for concurrency" --scope project
386
+ ur context-pack memory verify
358
387
  ur context-pack compress
388
+ UR_MCP_HTTP_TOKEN='<secret>' ur mcp serve-http --port 8976
359
389
  ur acp serve --port 8123
360
390
  ur exec "add tests for the parser" --concurrency 4 --json
361
391
  ur ci-loop --command "bun test" --cwd . --dry-run
@@ -19,7 +19,7 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.45.6 (UR-Nexus)"
22
+ # expected for this release: "1.47.0 (UR-Nexus)"
23
23
  ```
24
24
 
25
25
  ## 0.1 First-workspace model selection (1.45.4)
@@ -84,6 +84,8 @@ Expected:
84
84
  - `context-pack scan` writes `.ur/project-manifest.json` and
85
85
  `.ur/context/architecture.md`.
86
86
  - `remember` appends task memory entries under `.ur/context/task-memory.jsonl`.
87
+ - `ur context-pack memory verify` reports a valid integrity chain. Tamper tests
88
+ must use a disposable copy; quarantine and rollback preserve private backups.
87
89
  - `compress` writes `.ur/context/compressed.md`.
88
90
 
89
91
  ## 0.3 Test-first execution loop (1.18.0)
@@ -149,6 +151,34 @@ ur --ollama-host http://localhost:11434 -p "say hi"
149
151
  ur --settings '{"ollama":{"host":"http://localhost:11434"}}' -p "say hi"
150
152
  ```
151
153
 
154
+ ## 0.6 v1.47 protocol, provenance, and telemetry gates
155
+
156
+ These deterministic tests use local fixtures, fake transports, and mock
157
+ exporters. They do not require a paid provider account or make paid model calls:
158
+
159
+ ```sh
160
+ bun test test/acpStdio.test.ts test/a2aV1.test.ts test/mcp2026.test.ts
161
+ bun test test/openaiResponses.test.ts test/genAiTelemetry.test.ts
162
+ bun test test/agUi.test.ts test/skillCommand.test.ts
163
+ bun test test/skillProvenance.test.ts test/taskMemoryIntegrity.test.ts
164
+ ```
165
+
166
+ Expected: ACP lifecycle/replay, A2A dual-stack isolation, MCP Tasks/Apps,
167
+ Responses HTTP/SSE/WebSocket/background behavior, OpenTelemetry redaction,
168
+ AG-UI lifecycle/security, `.agents/skills/` precedence, Ed25519 skill trust,
169
+ and task-memory quarantine/rollback all pass. Then run:
170
+
171
+ ```sh
172
+ bun run typecheck
173
+ bun run lint
174
+ bun test
175
+ bun run build
176
+ bun run secrets:scan
177
+ bun run dependencies:audit
178
+ bun run release:check
179
+ bun run package:check
180
+ ```
181
+
152
182
  ## 1. Marketplace tree resolves
153
183
 
154
184
  In a fresh interactive session:
package/docs/providers.md CHANGED
@@ -105,12 +105,22 @@ ur config set model <model>
105
105
  ur provider select-model <provider> <model> --json
106
106
  ur config set base_url <url>
107
107
  ur config set provider.fallback ollama
108
+ ur config set openai_transport responses
109
+ ur config set responses.store false
110
+ ur config set responses.compact_threshold 20000
111
+ ur config set responses.tool_search hosted
108
112
  ```
109
113
 
110
114
  The fallback setting is a recovery hint for `ur provider doctor`; it does not
111
115
  route a failed request to another provider. Review the failure and use
112
116
  `ur config set provider <id>` to switch explicitly.
113
117
 
118
+ OpenAI API uses Chat Completions by default. `openai_transport responses` is an
119
+ explicit opt-in to the native Responses adapter; it defaults to `store=false`
120
+ and supports semantic streaming, background polling/cancellation, WebSocket
121
+ continuation, server compaction, and deferred tool search. It does not change
122
+ OpenAI-compatible, OpenRouter, local, or subscription-CLI providers.
123
+
114
124
  ## Provider-scoped model selection
115
125
 
116
126
  UR-Nexus shows providers first, then only models available for the selected provider. This prevents incompatible model/provider pairs and keeps API-key, local/server, subscription, and external app bridge model lists separate. The generic `subscription` entry has no models unless a real independent subscription runtime is configured; UR does not list fake subscription models.
@@ -120,7 +130,7 @@ UR-Nexus shows providers first, then only models available for the selected prov
120
130
  When you select a UR-native provider and model, every agent request is routed
121
131
  through that provider's backend:
122
132
 
123
- - **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`; Gemini uses `x-goog-api-key` against `…:generateContent`; OpenRouter uses its OpenAI-compatible chat endpoint.
133
+ - **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.
124
134
  - **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)
125
135
  - **Subscription CLI providers** (Codex CLI, Claude Code, Gemini CLI,
126
136
  Antigravity) dispatch the turn through the vendor's official CLI using your
@@ -465,4 +475,8 @@ Common knobs:
465
475
  PROVIDER_SMOKE_TIMEOUT_MS=30000
466
476
  PROVIDER_SMOKE_MAX_RETRIES=0
467
477
  PROVIDER_SMOKE_TOOL_CALLS=1
478
+ PROVIDER_SMOKE_OUTPUT=/tmp/ur-provider-smoke.json # --json only
468
479
  ```
480
+
481
+ Without `PROVIDER_SMOKE_OUTPUT`, `--json` also writes the latest report to
482
+ `diagnostics/provider-smoke/latest.json`.