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.
- package/CHANGELOG.md +69 -0
- package/QUALITY.md +8 -3
- package/README.md +67 -13
- package/RELEASE.md +9 -6
- package/dist/cli.js +73656 -36080
- package/docs/A2A.md +180 -0
- package/docs/ACP.md +69 -17
- package/docs/AGENT_FEATURES.md +64 -7
- package/docs/AGENT_TRENDS.md +91 -26
- package/docs/AG_UI.md +132 -0
- package/docs/CONFIGURATION.md +123 -3
- package/docs/DEVELOPMENT.md +1 -0
- package/docs/IDE.md +20 -17
- package/docs/TROUBLESHOOTING.md +5 -3
- package/docs/USAGE.md +34 -4
- package/docs/VALIDATION.md +31 -1
- package/docs/providers.md +15 -1
- package/documentation/app.js +18 -6
- package/documentation/index.html +27 -8
- package/examples/agent_features.md +18 -0
- package/examples/agent_trends.md +5 -0
- package/examples/mcp.md +4 -0
- package/examples/memory.md +5 -2
- package/extensions/jetbrains-ur/README.md +12 -5
- package/extensions/jetbrains-ur/build.gradle.kts +22 -6
- package/extensions/jetbrains-ur/gradle.properties +1 -0
- package/extensions/jetbrains-ur/settings.gradle.kts +4 -0
- package/extensions/jetbrains-ur/src/main/kotlin/dev/urnexus/SendSelectionAction.kt +39 -5
- package/extensions/jetbrains-ur/src/main/kotlin/dev/urnexus/UrAcpClient.kt +52 -20
- package/extensions/jetbrains-ur/src/main/kotlin/dev/urnexus/UrToolWindowFactory.kt +7 -4
- package/extensions/jetbrains-ur/src/main/resources/META-INF/plugin.xml +1 -1
- package/extensions/vscode-ur-inline-diffs/README.md +6 -2
- package/extensions/vscode-ur-inline-diffs/out/extension.js +328 -157
- package/extensions/vscode-ur-inline-diffs/package.json +33 -5
- package/package.json +70 -56
- package/plugins/core/engineering-discipline/skills/reproducible-release/SKILL.md +2 -1
- package/plugins/core/github/skills/github-workflow/SKILL.md +2 -1
- package/plugins/core/gitlab/skills/gitlab-workflow/SKILL.md +2 -1
- package/plugins/core/huggingface/skills/huggingface-workflow/SKILL.md +2 -1
- package/plugins/core/miro/skills/miro-workflow/SKILL.md +2 -1
- package/plugins/core/obsidian/skills/second-brain/SKILL.md +2 -1
- package/plugins/core/powerpoint/skills/deck-craft/SKILL.md +2 -1
- package/plugins/core/skill-forge/skills/skill-authoring/SKILL.md +2 -1
- 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)
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -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` —
|
|
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
|
|
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
|
|
package/docs/DEVELOPMENT.md
CHANGED
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`) —
|
|
17
|
-
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
|
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
|
|
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
|
|
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 "
|
|
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>`.
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -208,12 +208,14 @@ ur plugin list
|
|
|
208
208
|
|
|
209
209
|
### ACP / editor connection issues
|
|
210
210
|
|
|
211
|
-
- Likely cause: the
|
|
212
|
-
|
|
213
|
-
- Fix:
|
|
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
|
|
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
|
|
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
|
|
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
|
package/docs/VALIDATION.md
CHANGED
|
@@ -19,7 +19,7 @@ You need:
|
|
|
19
19
|
|
|
20
20
|
```sh
|
|
21
21
|
ur --version
|
|
22
|
-
# expected for this release: "1.
|
|
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
|
|
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`.
|