ur-agent 1.45.5 → 1.46.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 +40 -0
- package/QUALITY.md +8 -3
- package/README.md +8 -7
- package/RELEASE.md +9 -6
- package/dist/cli.js +52668 -33877
- package/docs/A2A.md +143 -0
- package/docs/ACP.md +61 -17
- package/docs/AGENT_FEATURES.md +28 -4
- package/docs/AGENT_TRENDS.md +87 -26
- package/docs/CONFIGURATION.md +38 -1
- package/docs/DEVELOPMENT.md +1 -0
- package/docs/IDE.md +20 -17
- package/docs/TROUBLESHOOTING.md +5 -3
- package/docs/USAGE.md +6 -2
- package/docs/VALIDATION.md +8 -1
- package/docs/providers.md +4 -0
- package/documentation/index.html +3 -3
- 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 +65 -56
package/docs/A2A.md
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Agent2Agent (A2A)
|
|
2
|
+
|
|
3
|
+
UR exposes an opt-in agent-to-agent server with two deliberately distinct API
|
|
4
|
+
surfaces:
|
|
5
|
+
|
|
6
|
+
| Surface | Path | Contract |
|
|
7
|
+
| --- | --- | --- |
|
|
8
|
+
| Agent Card | `/.well-known/agent-card.json` | Public discovery metadata that exactly describes the running server |
|
|
9
|
+
| A2A JSON-RPC | `/a2a/jsonrpc` | A2A protocol v0.3, implemented with the official stable JavaScript SDK |
|
|
10
|
+
| UR compatibility API | `/a2a/tasks` and `/a2a/tasks/:id` | UR-specific REST-style background-task controls; not an A2A REST binding |
|
|
11
|
+
|
|
12
|
+
The A2A specification itself is at v1. UR does not claim v1 conformance yet:
|
|
13
|
+
the official JavaScript SDK's v1 support is prerelease, while its current
|
|
14
|
+
stable line implements v0.3. UR will migrate and run the official conformance
|
|
15
|
+
suite when a stable JavaScript v1 path is available.
|
|
16
|
+
|
|
17
|
+
## Start the server
|
|
18
|
+
|
|
19
|
+
Loopback without authentication is allowed for local development:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
ur a2a serve --port 8765
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
For authenticated use, keep secrets out of process arguments:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
UR_A2A_TOKEN='<random-secret>' ur a2a serve --port 8765
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
An off-loopback bind requires either `UR_A2A_TOKEN` or
|
|
32
|
+
`UR_A2A_DELEGATION_SECRET`. A wildcard bind also requires a reachable external
|
|
33
|
+
base URL so the Agent Card never advertises `0.0.0.0`:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
UR_A2A_TOKEN='<random-secret>' \
|
|
37
|
+
ur a2a serve --host 0.0.0.0 --port 8765 \
|
|
38
|
+
--public-base-url https://agent.example.com
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Terminate TLS at a trusted reverse proxy for non-loopback deployments; bearer
|
|
42
|
+
tokens must not travel over plaintext networks.
|
|
43
|
+
|
|
44
|
+
## Agent Card and protocol calls
|
|
45
|
+
|
|
46
|
+
Inspect the live card:
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
curl -s http://127.0.0.1:8765/.well-known/agent-card.json
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The card advertises protocol `0.3.0`, `JSONRPC`, `/a2a/jsonrpc`, unary task
|
|
53
|
+
execution, the installed UR version, skills, and only the authentication
|
|
54
|
+
schemes actually configured for that server.
|
|
55
|
+
|
|
56
|
+
Send a blocking message:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
curl -s http://127.0.0.1:8765/a2a/jsonrpc \
|
|
60
|
+
-H 'content-type: application/json' \
|
|
61
|
+
-H 'A2A-Version: 0.3' \
|
|
62
|
+
-H "authorization: Bearer $UR_A2A_TOKEN" \
|
|
63
|
+
-d '{
|
|
64
|
+
"jsonrpc":"2.0",
|
|
65
|
+
"id":"request-1",
|
|
66
|
+
"method":"message/send",
|
|
67
|
+
"params":{
|
|
68
|
+
"configuration":{"blocking":true},
|
|
69
|
+
"metadata":{"skill":"coding-agent"},
|
|
70
|
+
"message":{
|
|
71
|
+
"kind":"message",
|
|
72
|
+
"messageId":"message-1",
|
|
73
|
+
"role":"user",
|
|
74
|
+
"parts":[{"kind":"text","text":"Review the current diff."}]
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}'
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Set `configuration.blocking` to `false` to receive a working task promptly,
|
|
81
|
+
then call `tasks/get`; use `tasks/cancel` for a nonterminal task. The stable
|
|
82
|
+
binding supports `message/send`, `tasks/get`, and `tasks/cancel`. Streaming,
|
|
83
|
+
resubscription, push notifications, and authenticated extended cards are not
|
|
84
|
+
advertised and return protocol errors if requested.
|
|
85
|
+
|
|
86
|
+
`params.metadata.skill` selects an advertised skill; the default is
|
|
87
|
+
`coding-agent`. Requests with an unknown skill are rejected before execution.
|
|
88
|
+
Prompts enter the child process through stdin, and the child uses fail-closed
|
|
89
|
+
`dontAsk` permissions because this network binding has no interactive approval
|
|
90
|
+
bridge.
|
|
91
|
+
|
|
92
|
+
## Delegation tokens
|
|
93
|
+
|
|
94
|
+
UR delegation tokens are short-lived HMAC-signed capabilities bound to a
|
|
95
|
+
subject, one audience, an expiry, and explicit skill scopes:
|
|
96
|
+
|
|
97
|
+
```sh
|
|
98
|
+
export UR_A2A_DELEGATION_SECRET='<issuer-secret>'
|
|
99
|
+
TOKEN=$(ur a2a token mint --sub peer-a --aud ur-nexus \
|
|
100
|
+
--scope coding-agent --ttl 900)
|
|
101
|
+
printf '%s\n' "$TOKEN" | ur a2a token verify --token-stdin \
|
|
102
|
+
--aud ur-nexus --scope coding-agent
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
The HMAC secret belongs only to the trusted issuer. A narrower child token can
|
|
106
|
+
be minted by that issuer, but an untrusted holder cannot attenuate the token
|
|
107
|
+
without the root signing secret. Protocol and compatibility tasks are isolated
|
|
108
|
+
by both delegation subject and skill, including get, continue, reference, and
|
|
109
|
+
cancel operations.
|
|
110
|
+
|
|
111
|
+
## UR compatibility task API
|
|
112
|
+
|
|
113
|
+
The compatibility API preserves older UR-specific background options:
|
|
114
|
+
|
|
115
|
+
- `POST /a2a/tasks` — submit `{ prompt, skill, mode, worktree, model, maxTurns }`
|
|
116
|
+
- `GET /a2a/tasks` — list tasks visible to the caller
|
|
117
|
+
- `GET /a2a/tasks/:id` — status
|
|
118
|
+
- `GET /a2a/tasks/:id/output` — bounded output metadata and logs
|
|
119
|
+
- `POST /a2a/tasks/:id/cancel` or `DELETE /a2a/tasks/:id` — cancel
|
|
120
|
+
|
|
121
|
+
These routes do not use the A2A wire schema and must not be presented to A2A
|
|
122
|
+
clients as an A2A REST endpoint. `skipPermissions` additionally requires the
|
|
123
|
+
static operator token or a delegation scope of `permissions:bypass`.
|
|
124
|
+
|
|
125
|
+
## Operational limits
|
|
126
|
+
|
|
127
|
+
The server bounds work with these environment variables:
|
|
128
|
+
|
|
129
|
+
- `UR_A2A_MAX_REQUEST_BYTES` and `UR_A2A_MAX_PROMPT_CHARS`
|
|
130
|
+
- `UR_A2A_MAX_OUTPUT_BYTES`
|
|
131
|
+
- `UR_A2A_MAX_SUBMISSIONS_PER_MINUTE`
|
|
132
|
+
- `UR_A2A_MAX_CONCURRENT_SUBMISSIONS`
|
|
133
|
+
- `UR_A2A_MAX_ACTIVE_TASKS`
|
|
134
|
+
- `UR_A2A_MAX_ACTIVE_TASKS_PER_OWNER`
|
|
135
|
+
- `UR_A2A_TASK_TIMEOUT_MS`
|
|
136
|
+
|
|
137
|
+
Protocol task state is persisted with owner and skill metadata in
|
|
138
|
+
`.ur/a2a/protocol-tasks.json` using owner-only file permissions. UR
|
|
139
|
+
compatibility task state remains under the same `.ur/a2a/` directory and links
|
|
140
|
+
to `.ur/background/` output files.
|
|
141
|
+
|
|
142
|
+
References: [A2A v1 specification](https://a2a-protocol.org/latest/specification/),
|
|
143
|
+
[official JavaScript SDK](https://github.com/a2aproject/a2a-js).
|
package/docs/ACP.md
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
# Agent
|
|
1
|
+
# Agent Client Protocol (ACP)
|
|
2
2
|
|
|
3
|
-
UR exposes
|
|
3
|
+
UR exposes one native ACP transport and one separate HTTP integration surface:
|
|
4
4
|
|
|
5
|
-
1. **Stdio ACP agent** (`ur acp stdio`) —
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
2. **HTTP JSON-RPC server** (`ur acp serve`) — a
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
1. **Stdio ACP agent** (`ur acp stdio`) — the stable ACP v1 wire protocol over
|
|
6
|
+
newline-delimited JSON-RPC, implemented with the official TypeScript SDK.
|
|
7
|
+
Use this for Zed and other native ACP clients.
|
|
8
|
+
2. **UR HTTP JSON-RPC compatibility server** (`ur acp serve`) — a separate
|
|
9
|
+
loopback endpoint for scripting, the experimental JetBrains plugin, tool
|
|
10
|
+
calls, and background tasks. It is not an ACP transport binding and is not
|
|
11
|
+
advertised as one.
|
|
11
12
|
|
|
12
13
|
## Stdio ACP agent
|
|
13
14
|
|
|
@@ -16,6 +17,8 @@ ur acp stdio
|
|
|
16
17
|
```
|
|
17
18
|
|
|
18
19
|
The editor launches this process and exchanges one JSON-RPC object per line.
|
|
20
|
+
The official SDK owns wire parsing, request concurrency, notification
|
|
21
|
+
semantics, and error envelopes.
|
|
19
22
|
|
|
20
23
|
Methods:
|
|
21
24
|
|
|
@@ -24,9 +27,11 @@ Methods:
|
|
|
24
27
|
| `initialize` | client → agent | `{ protocolVersion, agentCapabilities, authMethods }` |
|
|
25
28
|
| `authenticate` | client → agent | `{}` (no auth required for local stdio) |
|
|
26
29
|
| `session/new` | client → agent | `{ sessionId }` |
|
|
30
|
+
| `session/resume` | client → agent | restores a persisted session without replaying history |
|
|
31
|
+
| `session/close` | client → agent | cancels active work and releases the in-process session |
|
|
27
32
|
| `session/prompt` | client → agent | `{ stopReason }`, with streaming `session/update` notifications |
|
|
28
33
|
| `session/cancel` | client → agent (notification) | aborts the in-flight prompt |
|
|
29
|
-
| `
|
|
34
|
+
| `session/request_permission` | agent → client | asks the user to allow or reject a tool call |
|
|
30
35
|
|
|
31
36
|
During `session/prompt` the agent emits `session/update` notifications:
|
|
32
37
|
|
|
@@ -38,22 +43,61 @@ During `session/prompt` the agent emits `session/update` notifications:
|
|
|
38
43
|
```
|
|
39
44
|
|
|
40
45
|
`session/prompt` resolves with `{ "stopReason": "end_turn" }` (or `"cancelled"`
|
|
41
|
-
if a `session/cancel` arrived).
|
|
46
|
+
if a `session/cancel` arrived). Repeated prompts resume the underlying UR CLI
|
|
47
|
+
conversation for that ACP session. Stable `session/resume` reconnects after an
|
|
48
|
+
agent restart without replaying history; UR stores only the ACP-to-CLI session
|
|
49
|
+
identity and working directory in mode-`0600` metadata under
|
|
50
|
+
`~/.ur/acp/sessions/`. MCP credentials are never written there. Configure the
|
|
51
|
+
agent with `ur ide config zed`.
|
|
52
|
+
|
|
53
|
+
The stdio surface advertises text and resource-link prompt support, additional
|
|
54
|
+
workspace directories, MCP stdio/HTTP/SSE transports, and stable resume/close
|
|
55
|
+
capabilities. Client-provided MCP configuration is validated, written to a
|
|
56
|
+
mode-`0600` temporary file instead of argv, and removed after each turn. Image,
|
|
57
|
+
audio, embedded-context, and `session/load` capabilities are not advertised;
|
|
58
|
+
`session/load` requires full history replay, while `session/resume` deliberately
|
|
59
|
+
does not replay it.
|
|
60
|
+
|
|
61
|
+
Tool calls that require approval are bridged to the client's native ACP
|
|
62
|
+
permission UI with allow-once, reject, and (when UR supplies a durable rule)
|
|
63
|
+
always-allow choices. Cancellation and client errors fail closed. The prompt is
|
|
64
|
+
sent over stdin rather than argv. Session count, prompt size, output size, and
|
|
65
|
+
runtime are bounded by `UR_ACP_STDIO_MAX_SESSIONS`,
|
|
66
|
+
`UR_ACP_STDIO_MAX_PROMPT_CHARS`, `UR_ACP_STDIO_MAX_OUTPUT_CHARS`, and
|
|
67
|
+
`UR_ACP_STDIO_PROMPT_TIMEOUT_MS`.
|
|
42
68
|
|
|
43
69
|
## HTTP JSON-RPC server
|
|
44
70
|
|
|
45
71
|
```sh
|
|
46
|
-
ur acp serve --host 127.0.0.1 --port 8123 [--
|
|
72
|
+
UR_ACP_TOKEN='<secret>' ur acp serve --host 127.0.0.1 --port 8123 [--debug]
|
|
47
73
|
ur acp status [--json]
|
|
48
74
|
ur acp stop
|
|
49
75
|
```
|
|
50
76
|
|
|
51
|
-
Binds to loopback
|
|
52
|
-
|
|
53
|
-
|
|
77
|
+
Binds to loopback by default; binding off-loopback requires a bearer token.
|
|
78
|
+
Prefer `UR_ACP_TOKEN` because command-line secrets may be visible to other
|
|
79
|
+
local processes. `--debug` logs method names and outcomes—not request params or
|
|
80
|
+
secrets—to stderr. POST JSON-RPC to `/acp`; `GET /healthz` returns `{ ok: true }`.
|
|
81
|
+
|
|
82
|
+
Tool calls are schema-validated and pass through the normal permission engine.
|
|
83
|
+
Because the HTTP API has no interactive approval channel, requests that need an
|
|
84
|
+
approval fail closed. Requests, prompts, tool I/O, task submission rate, tool
|
|
85
|
+
call rate, concurrency, retained sessions/tasks, response size, and runtime are
|
|
86
|
+
bounded. A session may select an existing subdirectory of the configured server
|
|
87
|
+
workspace, but cannot escape that root (including through symlinks). Deployments
|
|
88
|
+
can tune these defaults with `UR_ACP_MAX_REQUESTS_PER_MINUTE`,
|
|
89
|
+
`UR_ACP_MAX_CONCURRENT_REQUESTS`, `UR_ACP_MAX_REQUEST_BYTES`,
|
|
90
|
+
`UR_ACP_MAX_RESPONSE_BYTES`, `UR_ACP_MAX_ERROR_CHARS`,
|
|
91
|
+
`UR_ACP_MAX_PROMPT_CHARS`, `UR_ACP_MAX_SESSIONS`,
|
|
92
|
+
`UR_ACP_MAX_ACTIVE_TASKS`, `UR_ACP_MAX_RETAINED_TASKS`,
|
|
93
|
+
`UR_ACP_MAX_TASKS_PER_MINUTE`, `UR_ACP_MAX_CONCURRENT_TASKS`,
|
|
94
|
+
`UR_ACP_MAX_TASK_OUTPUT_BYTES`, `UR_ACP_TASK_TIMEOUT_MS`,
|
|
95
|
+
`UR_ACP_MAX_TOOL_CALLS_PER_MINUTE`, `UR_ACP_MAX_CONCURRENT_TOOL_CALLS`,
|
|
96
|
+
`UR_ACP_TOOL_TIMEOUT_MS`, `UR_ACP_MAX_TOOL_INPUT_CHARS`, and
|
|
97
|
+
`UR_ACP_MAX_TOOL_OUTPUT_CHARS` environment variables.
|
|
54
98
|
|
|
55
99
|
Methods: `initialize` (returns `capabilities` and `workspaceRoot`),
|
|
56
|
-
`session/new`, `session/prompt`, `session/cancel`, `tools/list`, `tools/call`,
|
|
100
|
+
`session/new`, `session/prompt`, `session/cancel`, `session/close`, `tools/list`, `tools/call`,
|
|
57
101
|
`tasks/send` / `tasks/get` / `tasks/cancel`, `ide/diffCapture`, `ide/select`,
|
|
58
102
|
and `shutdown` (acknowledges, then stops the server).
|
|
59
103
|
|
|
@@ -75,8 +119,8 @@ curl -s http://127.0.0.1:8123/acp \
|
|
|
75
119
|
|
|
76
120
|
## Capabilities and limitations
|
|
77
121
|
|
|
78
|
-
- The stdio agent streams via `session/update`;
|
|
79
|
-
on the active provider.
|
|
122
|
+
- The stdio agent streams text deltas via `session/update`; chunk granularity
|
|
123
|
+
depends on the active provider's stream.
|
|
80
124
|
- The HTTP server returns unary responses (`streaming: false`); use the stdio
|
|
81
125
|
agent for incremental updates.
|
|
82
126
|
- Neither surface silently falls back to another provider; dispatch failures are
|
package/docs/AGENT_FEATURES.md
CHANGED
|
@@ -9,6 +9,30 @@ reproducible autonomous software engineering agent: every substantial task can
|
|
|
9
9
|
be driven as `spec -> plan -> patch -> test -> report -> rollback`, with the
|
|
10
10
|
spec as the durable source of truth and command evidence as the success gate.
|
|
11
11
|
|
|
12
|
+
## v1.46.0 Additions
|
|
13
|
+
|
|
14
|
+
- Native ACP v1 stdio support now uses the official SDK and includes durable
|
|
15
|
+
sessions, resume/close, MCP server configuration, additional roots,
|
|
16
|
+
permission requests, cancellation, and streaming updates. The separate HTTP
|
|
17
|
+
automation API is documented as UR JSON-RPC rather than mislabelled ACP.
|
|
18
|
+
- A2A interoperability now uses the official stable JavaScript SDK for the
|
|
19
|
+
advertised v0.3 JSON-RPC binding, with authenticated discovery, scoped
|
|
20
|
+
delegation, durable tasks, cancellation, and bounded request execution.
|
|
21
|
+
- The VS Code Actions view can safely start, inspect, and cancel background
|
|
22
|
+
tasks, including isolated worktree execution. The JetBrains client now
|
|
23
|
+
propagates cancellation, rejects overlapping prompts, and closes sessions.
|
|
24
|
+
- Background-task state uses locked, atomic, private manifest writes with
|
|
25
|
+
corruption detection, structural limits, and symlink-safe artifact paths.
|
|
26
|
+
- Provider protocol handling, MCP validation, CI supply-chain controls, release
|
|
27
|
+
version checks, and secret-input paths received additional compatibility and
|
|
28
|
+
security coverage.
|
|
29
|
+
|
|
30
|
+
## v1.45.6 Additions
|
|
31
|
+
|
|
32
|
+
- Project verification approval is deduplicated per user turn. The agent asks
|
|
33
|
+
once before the final compile/test/lint commands, then respects that decision
|
|
34
|
+
without presenting the same gate again.
|
|
35
|
+
|
|
12
36
|
## v1.45.5 Additions
|
|
13
37
|
|
|
14
38
|
- Ollama Cloud requests have bounded response-header and streaming phases and
|
|
@@ -175,7 +199,7 @@ components instead of one giant prompt.
|
|
|
175
199
|
|
|
176
200
|
| Addition | Surface | What it adds |
|
|
177
201
|
| --- | --- | --- |
|
|
178
|
-
| ACP
|
|
202
|
+
| ACP and IDE transports | `ur acp stdio`; `ur acp serve\|stop\|status` | Official-SDK ACP v1 stdio agent for native ACP editors, plus a distinct UR HTTP JSON-RPC API for tools, tasks, scripts, and the experimental JetBrains plugin. |
|
|
179
203
|
| Non-interactive pool execution | `ur exec [prompts...]` | Run one or more prompts headlessly with optional concurrency, worktrees, output capture, and dry-run. |
|
|
180
204
|
| GitHub tool | `GitHub` | PR/issue/repo operations via the `gh` CLI. |
|
|
181
205
|
| API tool | `Api` | REST HTTP calls with JSON/text output. |
|
|
@@ -234,7 +258,7 @@ and route model work through the local Ollama-backed UR runtime.
|
|
|
234
258
|
| Auto compaction and memory retention | `compaction.autoThreshold`, `ur memory retention` | Configurable context compaction threshold plus TTL/max/decay pruning for `.ur/memory/*.jsonl` |
|
|
235
259
|
| Code-index auto-reindex | `codeIndex.autoReindex`, `ur code-index watch` | File watcher that rebuilds the local semantic code index after source changes |
|
|
236
260
|
| Live artifact steering | `ur artifacts comment <id> --feedback ... --task <bg_id>` | Artifact feedback is queued into the linked background task inbox and injected into active stream-json background agents as `priority: "now"` turns |
|
|
237
|
-
|
|
|
261
|
+
| Opt-in A2A + compatibility server | `ur a2a serve`, `/a2a/jsonrpc`, `/a2a/tasks` | Official-SDK A2A v0.3 JSON-RPC task lifecycle plus clearly separate token/delegation-protected UR background-task compatibility routes |
|
|
238
262
|
| IDE inline diff bundles | `ur ide diff capture|list|show|comment|schema`, `extensions/vscode-ur-inline-diffs/` | Editor-readable `.ur/ide/diffs/` manifest, metadata, patch files, comments, plus a native VS Code tree/webview review extension |
|
|
239
263
|
| Benchmark adapters | `ur eval bench swe-bench|terminal-bench|aider-polyglot` | Imports local benchmark JSON/JSONL exports into UR eval suites without external downloads |
|
|
240
264
|
|
|
@@ -247,7 +271,7 @@ and route model work through the local Ollama-backed UR runtime.
|
|
|
247
271
|
| Model capability report | `ur model-doctor` | Local Ollama model inventory with context length, advertised capabilities, and likely vision/code readiness |
|
|
248
272
|
| Reusable agent templates | `ur agent-templates install` | Project agents for review, tests, browser QA, docs research, security, release notes, PR fixes, and memory curation |
|
|
249
273
|
| GitHub agent runner | `.github/workflows/ur.yml` scaffold | Opt-in CI entry point for manual prompts or `/ur` issue comments |
|
|
250
|
-
| A2A
|
|
274
|
+
| A2A interoperability | `ur a2a serve` | Accurate Agent Card, stable A2A v0.3 JSON-RPC binding, and separate UR compatibility task API; A2A v1 waits for the official stable JS SDK |
|
|
251
275
|
| Semantic memory index | `ur semantic-memory build|search` | Local memory index over durable memory, docs, README, and UR instructions |
|
|
252
276
|
| Claim provenance ledger | `ur claim-ledger add|list|validate` | Maps generated claims to web, file, MCP, tool, or user sources |
|
|
253
277
|
| Browser replay evals | `ur browser-qa list|validate|run` | Validates replay fixtures and performs lightweight target smoke checks |
|
|
@@ -262,7 +286,7 @@ tasks, custom agents, memory files, browser workflows, evidence commands, A2A
|
|
|
262
286
|
Agent Card export, and local Ollama routing; these surfaces make those
|
|
263
287
|
capabilities easier to discover and reuse.
|
|
264
288
|
|
|
265
|
-
Network-facing behavior, such as
|
|
289
|
+
Network-facing behavior, such as the opt-in A2A server or a GitHub bot that can
|
|
266
290
|
push code, should remain explicitly opt-in because it changes the trust and
|
|
267
291
|
permission boundary.
|
|
268
292
|
|
package/docs/AGENT_TRENDS.md
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
# Agent Trend Coverage
|
|
2
2
|
|
|
3
|
-
UR is a local-first terminal coding agent. This page tracks
|
|
4
|
-
current agent
|
|
3
|
+
UR is a provider-flexible, local-first terminal coding agent. This page tracks
|
|
4
|
+
how UR maps to current agent-platform trends and where future work should go
|
|
5
|
+
next. The factual comparison below is a **2026-07-15 research snapshot**; run
|
|
6
|
+
`ur agent-trends` for the versioned machine-readable report and re-check the
|
|
7
|
+
linked primary sources before acting on prerelease standards.
|
|
5
8
|
|
|
6
9
|
## Quick Commands
|
|
7
10
|
|
|
@@ -66,12 +69,14 @@ Inside an interactive session:
|
|
|
66
69
|
|
|
67
70
|
| Trend | UR status | Current coverage | Professional next step |
|
|
68
71
|
| --- | --- | --- | --- |
|
|
69
|
-
|
|
|
70
|
-
| MCP tool ecosystem | Covered | `ur mcp`, MCP OAuth/XAA helpers, elicitation, permission checks, shared tool registry | Keep
|
|
71
|
-
|
|
|
72
|
+
| 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 |
|
|
73
|
+
| MCP tool ecosystem | Covered | `ur mcp`, MCP OAuth/XAA helpers, elicitation, fail-closed permission checks, bounded execution, shared tool registry | Keep the production v1 SDK pinned while testing the final 2026 stateless-core transition separately |
|
|
74
|
+
| MCP Tasks and MCP Apps | Adapter-ready | UR's durable task engine could back protocol tasks, but UR advertises neither experimental Tasks nor an Apps renderer | Prototype negotiated extensions; ship only against a final spec and production SDK, with context-bound task auth and cancellation |
|
|
75
|
+
| A2A / Agent Card interoperability | Partial | Official-SDK A2A v0.3 Agent Card + JSON-RPC binding at `/a2a/jsonrpc`; separate UR compatibility task routes; bearer/delegation auth | Add a negotiated v1 dual stack, signed-card verification, and official TCK coverage when the JavaScript SDK v1 line is stable |
|
|
72
76
|
| Durable workflows and checkpoints | Covered | resume, rewind, `ur bg` background runs, optional worktrees/PRs, cron/workflow internals, file restore | Publish a checkpointed workflow format for repeated automations |
|
|
73
77
|
| Multi-agent orchestration | Covered | built-in planning, exploration, verification, and general-purpose agents; custom agents | Document reusable team patterns and role selection |
|
|
74
|
-
| Long-term memory |
|
|
78
|
+
| Long-term memory | Partial | `/remember`, `/forget`, `.ur/memory`, optional local dense retrieval plus lexical fallback, semantic code search, provenance, consolidation, retention | Add scope deletion guarantees and integrity baselines, quarantine, and rollback for poisoned memory writes |
|
|
79
|
+
| Portable Agent Skills | Partial | Project/user/plugin/remote/bundled `SKILL.md` support, lazy Skill tool, creation and skillification, skill-scoped permissions | Add strict open-spec validation plus signed provenance and permission manifests before community-registry installation |
|
|
75
80
|
| Semantic codebase retrieval | Covered | local embedding-based code index (`ur code-index`), opt-in `CodeSearch` tool, incremental re-index, auto-reindex watcher, Ollama embeddings | Add richer symbol-aware ranking |
|
|
76
81
|
| Reliable repo editing | Covered | `ur repo-edit` builds a file/symbol index, performs AST-aware JS/TS identifier rename planning, previews patches before writing, and applies multi-file edits transactionally with rollback on syntax or check failure | Extend AST edits beyond identifier rename into import moves and signature-aware refactors |
|
|
77
82
|
| Permission and safety policy | Covered | `ur safety`, `.ur/safety-policy.json`, pre-Bash safety evaluation, read/write/execute/network command classes, destructive-command approval, sandbox recommendations, and secret exfiltration denial | Record sandbox attestation in every risky command's evidence trail |
|
|
@@ -79,18 +84,20 @@ Inside an interactive session:
|
|
|
79
84
|
| AGENTS.md interoperability | Covered | `AGENTS.md` loaded as runtime project context (before `UR.md`), plus imported by the `/init` command | Keep aligned as the AGENTS.md spec evolves |
|
|
80
85
|
| Browser and computer-use workflows | Covered | `/browser`, `/chrome`, Playwright-aware tasks, WebSearch, WebFetch, risky-action approval | Add more release fixtures with screenshots and replay assertions |
|
|
81
86
|
| Provenance and citations | Partial | WebFetch source URLs, `/cite`, `/graph`, `/trace`, evidence ledgers | Add claim-to-source mapping for web/MCP answers |
|
|
82
|
-
| Evals and observability |
|
|
87
|
+
| Evals and observability | Partial | verifier gates, `.ur/verify.json`, `/verify`, `/trace`, OpenTelemetry hooks, replayable evals, dashboard, benchmark adapters | Grade complete trajectories in CI and publish versioned pass rates by category |
|
|
88
|
+
| Standard GenAI telemetry | Partial | Internal interaction/model/tool/agent/hook spans and bounded Perfetto traces | Dual-emit current OpenTelemetry GenAI semantics with sensitive content redacted by default |
|
|
83
89
|
| Test-first execution | Covered | `ur test-first` detects compile/test/lint commands, stores failure traces, retries through a fix agent, and installs detected commands into `.ur/verify.json` for edit-time gates | Add per-package command plans for large monorepos |
|
|
84
|
-
| Security and prompt-injection resistance | Covered | allow/ask/deny permissions, shell safety analysis, secret scan, untrusted web-content guidance, OS-level execution sandbox (macOS Seatbelt, Linux bubblewrap) | Continuously test web/MCP injection cases |
|
|
85
|
-
| Agent identity and delegated authorization | Covered | MCP OAuth/XAA helpers, A2A bearer/delegation tokens, local trust boundaries, permission rules | Keep delegated scopes narrow and auditable |
|
|
90
|
+
| Security and prompt-injection resistance | Covered | allow/ask/deny permissions, shell safety analysis, secret scan, untrusted web-content guidance, OS-level execution sandbox (macOS Seatbelt, Linux bubblewrap) | Continuously test web/MCP/repository/skill/memory injection, confused-deputy, and tool-abuse cases |
|
|
91
|
+
| Agent identity and delegated authorization | Covered | MCP OAuth/XAA helpers, issuer-minted A2A bearer/delegation tokens, subject/audience/expiry/skill binding, local trust boundaries, permission rules | Keep delegated scopes narrow and auditable; HMAC child-token narrowing remains issuer-side |
|
|
86
92
|
| Multimodal workflows | Partial | `/image`, `/video`, `/youtube`, `/voice`, browser workflows | Add model-aware multimodal capability reporting for local Ollama setups |
|
|
87
93
|
| Spec-driven development | Covered | `ur spec` scaffolds requirements/design/tasks under `.ur/specs/`, tracks phase/approvals, and runs the Spec Kit / Kiro task list one task at a time | Add bidirectional sync with an external `specs/` directory |
|
|
88
94
|
| Capability-aware model escalation | Covered | `ur escalate` selects fast/oracle tiers from `model-doctor`, runs routine work fast, and auto-escalates hard/failed work to the strong local model | Learn per-model success rates to tune the difficulty threshold |
|
|
89
95
|
| Best-of-N agent judging | Covered | `ur arena` runs N agents per task in isolated worktrees and judges diffs with the self-review gate; winner is selectable/appliable | Add an optional model judge alongside the deterministic scorer |
|
|
90
96
|
| Self-healing CI | Covered | `ur ci-loop` reports its resolved cwd, preserves assertion/stack context, stops no-test configuration failures before invoking a fixer, and re-runs real failures with bounded retries; commits/pushes require explicit flags and are self-review gated | Wire to `ur trigger` so a failed CI webhook can explicitly launch the loop |
|
|
91
97
|
| Verifiable artifacts | Covered | `ur artifacts` records plans/diffs/test-runs with approve/reject/feedback under `.ur/artifacts/`; comments steer active background agents through stream-json inbox injection | Attach browser-QA screenshots and link artifacts to claim-ledger entries |
|
|
92
|
-
| Native IDE review | Covered | `ur ide diff`
|
|
93
|
-
| ACP / IDE agent server |
|
|
98
|
+
| Native IDE review | Covered | `ur ide diff` bundles, a VS Code tree/webview/comment surface with background task controls, and a buildable JetBrains ACP client with cancellation | Add signed marketplace packaging and keep behavior parity covered in editor-host integration tests |
|
|
99
|
+
| ACP / IDE agent server | Partial | Official-SDK ACP v1 stdio agent with permission requests, MCP stdio/HTTP/SSE, additional roots, persistent resume, close, and cancellation; separate UR HTTP JSON-RPC for scripts | Add paginated `session/list`/`session/delete`, then exact-history `session/load`; advertise config/slash capabilities only when complete |
|
|
100
|
+
| Provider-native durable inference | Partial | UR provides provider-independent background processes and local compaction, while direct OpenAI requests still use Chat Completions | Add an opt-in Responses adapter for background/WebSocket execution, server compaction, and deferred tool discovery with privacy-aware defaults |
|
|
94
101
|
| External tool integration | Covered | Built-in `GitHub`, `Api`, `Browser`, `Docker`, `TestRunner`, and `Database` tools complement existing file-system, terminal, web, and MCP tools | Add richer output parsing and error recovery |
|
|
95
102
|
|
|
96
103
|
## v1.13.9 Direct CLI Surfaces
|
|
@@ -111,18 +118,62 @@ ur artifacts capture-tests --command "bun test"
|
|
|
111
118
|
|
|
112
119
|
## A2A Position
|
|
113
120
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
121
|
+
`ur a2a serve` exposes a real A2A v0.3 JSON-RPC binding, implemented by the
|
|
122
|
+
official stable JavaScript SDK, at `/a2a/jsonrpc`. Its discoverable Agent Card
|
|
123
|
+
is served at `/.well-known/agent-card.json`; the advertised URL, transport,
|
|
124
|
+
protocol version, capabilities, and configured security schemes match the
|
|
125
|
+
running server. Protocol tasks are durable under `.ur/a2a/`, and retrieval,
|
|
126
|
+
continuation, references, and cancellation are isolated by delegation subject
|
|
127
|
+
and skill scope. Streaming and push notifications are not advertised.
|
|
128
|
+
|
|
129
|
+
The existing `/a2a/tasks` submission/list/status/output/cancel routes are a
|
|
130
|
+
separate **UR compatibility API**, not an A2A REST binding. They remain useful
|
|
131
|
+
for UR background-task options such as worktrees and bounded turns. On these
|
|
132
|
+
routes, `skipPermissions` is rejected unless the caller uses the static
|
|
133
|
+
operator token or a token that grants `permissions:bypass`; the official A2A
|
|
134
|
+
runner always uses fail-closed `dontAsk` permissions.
|
|
135
|
+
|
|
136
|
+
The server refuses unauthenticated off-loopback binds and requires
|
|
137
|
+
`--public-base-url` for wildcard binds so discovery never advertises
|
|
138
|
+
`0.0.0.0`. Prefer `UR_A2A_TOKEN` and `UR_A2A_DELEGATION_SECRET` over argv
|
|
139
|
+
secrets. Request size, prompt size, output size, submission rate, concurrent
|
|
140
|
+
submissions, and active tasks are bounded by `UR_A2A_*` settings. The current
|
|
141
|
+
A2A protocol release is v1, but the official JavaScript SDK's stable line still
|
|
142
|
+
implements v0.3 and its `next` v1 line is beta. UR deliberately stays on the
|
|
143
|
+
official stable v0.3 binding until a production v1 SDK and conformance path are
|
|
144
|
+
available, then should run both versions during a negotiated migration.
|
|
119
145
|
|
|
120
146
|
## Model Runtime Position
|
|
121
147
|
|
|
122
|
-
UR
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
148
|
+
UR is local-first, not local-only. Ollama supports private on-device execution;
|
|
149
|
+
direct adapters support OpenAI, Anthropic, Gemini, OpenRouter, and compatible
|
|
150
|
+
endpoints; subscription adapters use the provider's authenticated CLI. Provider
|
|
151
|
+
and model selection are explicit, credentials are resolved through the
|
|
152
|
+
credential layer, and the optional fallback setting is diagnostic advice rather
|
|
153
|
+
than an automatic provider switch.
|
|
154
|
+
|
|
155
|
+
## 2026-07-15 Frontier Priorities
|
|
156
|
+
|
|
157
|
+
The research conducted after the `1.46.0` version bump produced this ordered
|
|
158
|
+
backlog. Prerelease protocol work should remain behind capability flags and must
|
|
159
|
+
not replace the production path until its SDK and conformance tooling are stable.
|
|
160
|
+
|
|
161
|
+
1. Add an A2A v1 dual stack with version negotiation, signed Agent Card
|
|
162
|
+
verification, multi-tenant isolation, and official TCK coverage.
|
|
163
|
+
2. Complete ACP's durable session lifecycle with paginated `session/list` and
|
|
164
|
+
`session/delete`; implement `session/load` only with exact ordered replay.
|
|
165
|
+
3. Prepare for MCP's stateless core and negotiated Tasks/Apps extensions on a
|
|
166
|
+
compatibility branch. The announced 2026-07-28 specification is not yet the
|
|
167
|
+
production baseline for this snapshot.
|
|
168
|
+
4. Add an opt-in Responses adapter: privacy-aware background execution,
|
|
169
|
+
authenticated webhooks or bounded polling, WebSocket continuation, opaque
|
|
170
|
+
compaction preservation, and deferred tool search.
|
|
171
|
+
5. Adopt OpenTelemetry GenAI semantic conventions and trace graders as CI
|
|
172
|
+
regression gates without exporting prompts, tool arguments, retrieval
|
|
173
|
+
queries, or results by default.
|
|
174
|
+
6. Treat durable memories and installable skills as supply-chain inputs:
|
|
175
|
+
validate provenance, constrain capabilities, quarantine suspicious writes,
|
|
176
|
+
and provide integrity snapshots and rollback.
|
|
126
177
|
|
|
127
178
|
## Source And Trust Policy
|
|
128
179
|
|
|
@@ -141,13 +192,23 @@ Professional answer requirements:
|
|
|
141
192
|
|
|
142
193
|
## References
|
|
143
194
|
|
|
144
|
-
- OpenAI
|
|
145
|
-
- OpenAI
|
|
195
|
+
- OpenAI Responses background mode: https://developers.openai.com/api/docs/guides/background
|
|
196
|
+
- OpenAI Responses WebSocket mode: https://developers.openai.com/api/docs/guides/websocket-mode
|
|
197
|
+
- OpenAI Responses compaction: https://developers.openai.com/api/docs/guides/compaction
|
|
198
|
+
- OpenAI deferred tool search: https://developers.openai.com/api/docs/guides/tools-tool-search
|
|
199
|
+
- OpenAI agent evals: https://developers.openai.com/api/docs/guides/agent-evals
|
|
146
200
|
- Model Context Protocol: https://modelcontextprotocol.io/docs/getting-started/intro
|
|
147
|
-
- MCP
|
|
201
|
+
- MCP 2026-07-28 release candidate: https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/
|
|
202
|
+
- MCP Tasks extension: https://modelcontextprotocol.io/extensions/tasks/overview
|
|
203
|
+
- ACP v1 schema: https://agentclientprotocol.com/protocol/v1/schema
|
|
148
204
|
- A2A protocol specification: https://a2a-protocol.org/latest/specification/
|
|
205
|
+
- A2A JavaScript SDK: https://github.com/a2aproject/a2a-js
|
|
206
|
+
- Open Agent Skills specification: https://openagentskills.dev/docs/specification
|
|
207
|
+
- OpenTelemetry GenAI semantic conventions: https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/
|
|
208
|
+
- OWASP AI Agent Security Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/AI_Agent_Security_Cheat_Sheet.html
|
|
209
|
+
- OWASP Agent Memory Guard: https://owasp.org/www-project-agent-memory-guard/
|
|
149
210
|
- LangGraph overview: https://docs.langchain.com/oss/python/langgraph/overview
|
|
150
|
-
- OpenAI computer use guide: https://
|
|
211
|
+
- OpenAI computer use guide: https://developers.openai.com/api/docs/guides/tools-computer-use
|
|
151
212
|
- Ollama docs: https://docs.ollama.com/
|
|
152
|
-
- MCP authorization specification: https://modelcontextprotocol.io/specification/2025-
|
|
153
|
-
- MCP security best practices: https://modelcontextprotocol.io/specification/2025-
|
|
213
|
+
- MCP authorization specification: https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization
|
|
214
|
+
- MCP security best practices: https://modelcontextprotocol.io/specification/2025-11-25/basic/security_best_practices
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -311,7 +311,7 @@ Behaviour is controlled by environment variables:
|
|
|
311
311
|
```sh
|
|
312
312
|
# Overall mode (default: strict) — controls the L1 gates
|
|
313
313
|
UR_VERIFIER_MODE=strict # all L1 gates on: done-claim, loops, empty turn,
|
|
314
|
-
# project gates
|
|
314
|
+
# project gates; approval is requested once per user turn
|
|
315
315
|
UR_VERIFIER_MODE=loose # only empty-turn check + loop detector
|
|
316
316
|
UR_VERIFIER_MODE=off # disable verifier entirely
|
|
317
317
|
|
|
@@ -447,10 +447,47 @@ ur mcp list
|
|
|
447
447
|
ur mcp get <name>
|
|
448
448
|
ur mcp add-json <name> '<json>'
|
|
449
449
|
ur mcp remove <name>
|
|
450
|
+
ur mcp serve
|
|
450
451
|
```
|
|
451
452
|
|
|
452
453
|
MCP servers may execute code or access external services. Only enable servers you trust, and keep credentials out of committed config.
|
|
453
454
|
|
|
455
|
+
When UR itself runs as an MCP server, tool requests are non-interactive:
|
|
456
|
+
schema validation and normal permission checks still run, and any operation
|
|
457
|
+
that would require an approval prompt is rejected. Resource limits can be
|
|
458
|
+
adjusted with `UR_MCP_MAX_CALLS_PER_MINUTE`,
|
|
459
|
+
`UR_MCP_MAX_CONCURRENT_CALLS`, `UR_MCP_TOOL_TIMEOUT_MS`,
|
|
460
|
+
`UR_MCP_MAX_INPUT_CHARS`, and `UR_MCP_MAX_OUTPUT_CHARS`.
|
|
461
|
+
|
|
462
|
+
## Background Agents
|
|
463
|
+
|
|
464
|
+
Detached `ur bg` task state is stored under `.ur/background/`. Manifest updates
|
|
465
|
+
use a cross-process lock and atomic mode-`0600` replacement; task logs, outputs,
|
|
466
|
+
and steering inboxes are created mode `0600` under mode-`0700` directories.
|
|
467
|
+
The loader rejects corrupt, oversized, or structurally invalid manifests rather
|
|
468
|
+
than silently replacing them. `UR_BACKGROUND_MAX_MANIFEST_BYTES` controls the
|
|
469
|
+
manifest byte ceiling (16 MiB by default, capped at 64 MiB), and
|
|
470
|
+
`UR_BACKGROUND_MAX_TASKS` controls the retained task ceiling (5,000 by default,
|
|
471
|
+
capped at 20,000).
|
|
472
|
+
|
|
473
|
+
## Agent Servers
|
|
474
|
+
|
|
475
|
+
For native editor integration, `ur acp stdio` implements stable Agent Client
|
|
476
|
+
Protocol v1 through the official SDK. Its resource controls use the
|
|
477
|
+
`UR_ACP_STDIO_*` prefix. It supports client-provided MCP stdio/HTTP/SSE
|
|
478
|
+
servers, additional workspace roots, native permission requests, cancellation,
|
|
479
|
+
and persistent `session/resume`; see the [ACP Guide](ACP.md).
|
|
480
|
+
|
|
481
|
+
`ur acp serve` is a separate UR HTTP JSON-RPC API. Set `UR_ACP_TOKEN` instead
|
|
482
|
+
of putting its bearer token in argv. Request, task, and tool limits use the
|
|
483
|
+
`UR_ACP_*` prefix.
|
|
484
|
+
|
|
485
|
+
`ur a2a serve` exposes the stable official-SDK A2A v0.3 JSON-RPC binding and a
|
|
486
|
+
separate UR compatibility task API. Use `UR_A2A_TOKEN` for a static operator
|
|
487
|
+
token or `UR_A2A_DELEGATION_SECRET` for issuer-minted scoped tokens. Limits use
|
|
488
|
+
the `UR_A2A_*` prefix. See the [A2A Guide](A2A.md) for endpoints, proxy setup,
|
|
489
|
+
scope isolation, and the A2A v1 migration status.
|
|
490
|
+
|
|
454
491
|
## Plugins and Skills
|
|
455
492
|
|
|
456
493
|
Plugins can add commands, tools, and skills:
|