ur-agent 1.46.0 → 1.47.1
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 +51 -0
- package/README.md +62 -9
- package/dist/cli.js +30626 -11299
- package/docs/A2A.md +54 -17
- package/docs/ACP.md +21 -13
- package/docs/AGENT_FEATURES.md +44 -5
- package/docs/AGENT_TRENDS.md +48 -44
- package/docs/AG_UI.md +132 -0
- package/docs/CONFIGURATION.md +92 -9
- package/docs/USAGE.md +34 -4
- package/docs/VALIDATION.md +31 -1
- package/docs/providers.md +11 -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/build.gradle.kts +1 -1
- package/extensions/vscode-ur-inline-diffs/package.json +1 -1
- package/package.json +9 -2
- 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/A2A.md
CHANGED
|
@@ -5,14 +5,17 @@ surfaces:
|
|
|
5
5
|
|
|
6
6
|
| Surface | Path | Contract |
|
|
7
7
|
| --- | --- | --- |
|
|
8
|
-
| Agent Card | `/.well-known/agent-card.json` |
|
|
9
|
-
| A2A JSON-RPC | `/a2a/jsonrpc` |
|
|
8
|
+
| Agent Card | `/.well-known/agent-card.json` | Strict v1 card by default; send `A2A-Version: 0.3` for the separate v0.3 card |
|
|
9
|
+
| A2A v1 JSON-RPC | `/` or `/a2a/v1/jsonrpc` | ProtoJSON, PascalCase lifecycle methods, `A2A-Version: 1.0` |
|
|
10
|
+
| A2A v1 HTTP+JSON | `/message:send`, `/tasks`, or `/a2a/v1/...` | Versioned REST lifecycle with pagination, artifacts, references, and cancellation |
|
|
11
|
+
| A2A v0.3 JSON-RPC | `/a2a/jsonrpc` | Stable v0.3 binding implemented with the official JavaScript SDK |
|
|
10
12
|
| UR compatibility API | `/a2a/tasks` and `/a2a/tasks/:id` | UR-specific REST-style background-task controls; not an A2A REST binding |
|
|
11
13
|
|
|
12
|
-
The
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
The two protocol versions deliberately use separate schemas and handlers. The
|
|
15
|
+
stable SDK remains pinned for v0.3; UR's dependency-free v1 compatibility layer
|
|
16
|
+
translates strict v1 messages and tasks onto the same bounded durable execution
|
|
17
|
+
engine. It is covered by UR tests and the official A2A TCK, but does not claim
|
|
18
|
+
certification by the prerelease JavaScript SDK.
|
|
16
19
|
|
|
17
20
|
## Start the server
|
|
18
21
|
|
|
@@ -49,11 +52,42 @@ Inspect the live card:
|
|
|
49
52
|
curl -s http://127.0.0.1:8765/.well-known/agent-card.json
|
|
50
53
|
```
|
|
51
54
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
Without a version header, discovery returns the v1 ProtoJSON card with
|
|
56
|
+
`supportedInterfaces` for JSON-RPC, HTTP+JSON, and the legacy v0.3 binding. Use
|
|
57
|
+
`A2A-Version: 0.3` to retrieve the standalone v0.3 SDK card. Both cards report
|
|
58
|
+
the installed UR version, skills, implemented capabilities, and only the
|
|
59
|
+
authentication schemes configured for that server; responses include
|
|
60
|
+
`Vary: A2A-Version`.
|
|
55
61
|
|
|
56
|
-
Send a blocking message:
|
|
62
|
+
Send a blocking v1 message over JSON-RPC:
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
curl -s http://127.0.0.1:8765/a2a/v1/jsonrpc \
|
|
66
|
+
-H 'content-type: application/json' \
|
|
67
|
+
-H 'A2A-Version: 1.0' \
|
|
68
|
+
-H "authorization: Bearer $UR_A2A_TOKEN" \
|
|
69
|
+
-d '{
|
|
70
|
+
"jsonrpc":"2.0",
|
|
71
|
+
"id":"request-v1",
|
|
72
|
+
"method":"SendMessage",
|
|
73
|
+
"params":{
|
|
74
|
+
"configuration":{"blocking":true},
|
|
75
|
+
"message":{
|
|
76
|
+
"messageId":"message-v1",
|
|
77
|
+
"role":"ROLE_USER",
|
|
78
|
+
"parts":[{"text":"Review the current diff."}]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The v1 HTTP+JSON binding accepts `application/a2a+json` and exposes
|
|
85
|
+
`message:send`, task list/get/cancel, continuation, and artifact/reference
|
|
86
|
+
operations at the advertised transport root or under `/a2a/v1`. List cursors
|
|
87
|
+
are opaque and filter-bound. An optional tenant segment, for example
|
|
88
|
+
`/a2a/v1/acme/tasks`, requires a matching `tenant:acme` delegation scope.
|
|
89
|
+
|
|
90
|
+
Send a blocking v0.3 message:
|
|
57
91
|
|
|
58
92
|
```sh
|
|
59
93
|
curl -s http://127.0.0.1:8765/a2a/jsonrpc \
|
|
@@ -78,10 +112,10 @@ curl -s http://127.0.0.1:8765/a2a/jsonrpc \
|
|
|
78
112
|
```
|
|
79
113
|
|
|
80
114
|
Set `configuration.blocking` to `false` to receive a working task promptly,
|
|
81
|
-
then call `tasks/get`; use `tasks/cancel` for a nonterminal task. The
|
|
115
|
+
then call `tasks/get`; use `tasks/cancel` for a nonterminal task. The v0.3
|
|
82
116
|
binding supports `message/send`, `tasks/get`, and `tasks/cancel`. Streaming,
|
|
83
117
|
resubscription, push notifications, and authenticated extended cards are not
|
|
84
|
-
advertised and return protocol errors if requested.
|
|
118
|
+
advertised by either card and return protocol errors if requested.
|
|
85
119
|
|
|
86
120
|
`params.metadata.skill` selects an advertised skill; the default is
|
|
87
121
|
`coding-agent`. Requests with an unknown skill are rejected before execution.
|
|
@@ -134,10 +168,13 @@ The server bounds work with these environment variables:
|
|
|
134
168
|
- `UR_A2A_MAX_ACTIVE_TASKS_PER_OWNER`
|
|
135
169
|
- `UR_A2A_TASK_TIMEOUT_MS`
|
|
136
170
|
|
|
137
|
-
Protocol task state
|
|
138
|
-
`.ur/a2a
|
|
139
|
-
|
|
140
|
-
|
|
171
|
+
Protocol task state and v1 artifacts are persisted with owner, tenant, skill,
|
|
172
|
+
and version metadata under `.ur/a2a/` using owner-only permissions and atomic
|
|
173
|
+
writes. Retrieval, continuation, reference lookup, listing, and cancellation
|
|
174
|
+
all re-check the caller boundary. UR compatibility task state remains under the
|
|
175
|
+
same directory and links to `.ur/background/` output files.
|
|
141
176
|
|
|
142
177
|
References: [A2A v1 specification](https://a2a-protocol.org/latest/specification/),
|
|
143
|
-
[
|
|
178
|
+
[A2A v1 announcement](https://a2a-protocol.org/latest/announcing-1.0/),
|
|
179
|
+
[official JavaScript SDK](https://github.com/a2aproject/a2a-js), and
|
|
180
|
+
[official TCK](https://github.com/a2aproject/a2a-tck).
|
package/docs/ACP.md
CHANGED
|
@@ -27,8 +27,13 @@ Methods:
|
|
|
27
27
|
| `initialize` | client → agent | `{ protocolVersion, agentCapabilities, authMethods }` |
|
|
28
28
|
| `authenticate` | client → agent | `{}` (no auth required for local stdio) |
|
|
29
29
|
| `session/new` | client → agent | `{ sessionId }` |
|
|
30
|
-
| `session/
|
|
30
|
+
| `session/list` | client → agent | returns a 50-item page and opaque, filter-bound cursor |
|
|
31
|
+
| `session/load` | client → agent | restores a session and replays its exact ordered updates |
|
|
32
|
+
| `session/delete` | client → agent | deletes private metadata and history after stopping active work |
|
|
33
|
+
| `session/resume` | client → agent | restores identity without replaying history |
|
|
31
34
|
| `session/close` | client → agent | cancels active work and releases the in-process session |
|
|
35
|
+
| `session/set_mode` | client → agent | selects `default`, `acceptEdits`, or `plan` |
|
|
36
|
+
| `session/set_config_option` | client → agent | selects full tool updates or permission-only updates |
|
|
32
37
|
| `session/prompt` | client → agent | `{ stopReason }`, with streaming `session/update` notifications |
|
|
33
38
|
| `session/cancel` | client → agent (notification) | aborts the in-flight prompt |
|
|
34
39
|
| `session/request_permission` | agent → client | asks the user to allow or reject a tool call |
|
|
@@ -44,19 +49,21 @@ During `session/prompt` the agent emits `session/update` notifications:
|
|
|
44
49
|
|
|
45
50
|
`session/prompt` resolves with `{ "stopReason": "end_turn" }` (or `"cancelled"`
|
|
46
51
|
if a `session/cancel` arrived). Repeated prompts resume the underlying UR CLI
|
|
47
|
-
conversation for that ACP session.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
conversation for that ACP session. `session/resume` reconnects after an agent
|
|
53
|
+
restart without replay; `session/load` emits the bounded, exact stored update
|
|
54
|
+
sequence before current session information and available commands. UR stores
|
|
55
|
+
the ACP-to-CLI identity, working directory, modes/options, and append-only
|
|
56
|
+
history in private metadata under `~/.ur/acp/sessions/`. Writes are locked,
|
|
57
|
+
atomic, bounded, migration-aware, and fail closed on malformed state. MCP
|
|
58
|
+
credentials are never persisted there. Configure the agent with
|
|
59
|
+
`ur ide config zed`.
|
|
52
60
|
|
|
53
61
|
The stdio surface advertises text and resource-link prompt support, additional
|
|
54
|
-
workspace directories, MCP stdio/HTTP/SSE transports,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
does not replay it.
|
|
62
|
+
workspace directories, MCP stdio/HTTP/SSE transports, load/list/delete,
|
|
63
|
+
resume/close, modes, configuration options, and available commands.
|
|
64
|
+
Client-provided MCP configuration is validated, written to a mode-`0600`
|
|
65
|
+
temporary file instead of argv, and removed after each turn. Image, audio, and
|
|
66
|
+
embedded-context capabilities are not advertised.
|
|
60
67
|
|
|
61
68
|
Tool calls that require approval are bridged to the client's native ACP
|
|
62
69
|
permission UI with allow-once, reject, and (when UR supplies a durable rule)
|
|
@@ -64,7 +71,8 @@ always-allow choices. Cancellation and client errors fail closed. The prompt is
|
|
|
64
71
|
sent over stdin rather than argv. Session count, prompt size, output size, and
|
|
65
72
|
runtime are bounded by `UR_ACP_STDIO_MAX_SESSIONS`,
|
|
66
73
|
`UR_ACP_STDIO_MAX_PROMPT_CHARS`, `UR_ACP_STDIO_MAX_OUTPUT_CHARS`, and
|
|
67
|
-
`UR_ACP_STDIO_PROMPT_TIMEOUT_MS`.
|
|
74
|
+
`UR_ACP_STDIO_PROMPT_TIMEOUT_MS`. History additionally enforces per-event,
|
|
75
|
+
event-count, total-byte, and discovery-scan limits.
|
|
68
76
|
|
|
69
77
|
## HTTP JSON-RPC server
|
|
70
78
|
|
package/docs/AGENT_FEATURES.md
CHANGED
|
@@ -9,6 +9,44 @@ 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.47.0 Additions
|
|
13
|
+
|
|
14
|
+
- `ur ag-ui serve` adds a secure AG-UI HTTP/SSE boundary for user-facing
|
|
15
|
+
applications. Official schemas and encoding, truthful capability discovery,
|
|
16
|
+
full text/tool/state lifecycle events, cancellation, exact CORS, bearer
|
|
17
|
+
protection, redacted errors, and independent resource bounds are covered by
|
|
18
|
+
provider-free regression tests.
|
|
19
|
+
- A2A now runs v0.3 and v1 side by side. Strict v1 JSON-RPC and HTTP+JSON
|
|
20
|
+
bindings add version negotiation, tenant isolation, durable tasks and
|
|
21
|
+
artifacts, pagination, continuation, references, and cancellation without
|
|
22
|
+
removing the stable v0.3 SDK path.
|
|
23
|
+
- ACP stdio now implements durable list/load/delete/resume/close, bounded exact
|
|
24
|
+
history replay, modes, configuration options, and available commands in
|
|
25
|
+
addition to streaming prompts, permission requests, MCP servers, and roots.
|
|
26
|
+
- `ur mcp serve-http` exposes the opt-in stateless MCP 2026 compatibility
|
|
27
|
+
surface with Tasks and a self-contained Apps resource. It is loopback-only
|
|
28
|
+
without authentication and enforces request metadata, capability negotiation,
|
|
29
|
+
owner isolation, limits, private persistence, and corrupt-state quarantine.
|
|
30
|
+
- OpenAI users can opt into the Responses transport with
|
|
31
|
+
`ur config set openai_transport responses`. Chat Completions remains the
|
|
32
|
+
default; Responses defaults to `store=false` and supports streaming,
|
|
33
|
+
background polling/cancellation, WebSocket continuation, compaction, and
|
|
34
|
+
deferred tool search through tested provider adapters.
|
|
35
|
+
- OpenTelemetry export is explicit per signal. GenAI inference, agent,
|
|
36
|
+
workflow, tool, memory, duration, token, cache, response,
|
|
37
|
+
time-to-first-chunk, inter-output-chunk latency, and error fields follow
|
|
38
|
+
current semantic conventions, while prompts and tool/memory content stay
|
|
39
|
+
redacted unless the operator
|
|
40
|
+
separately opts in.
|
|
41
|
+
- Agent Skills receive strict open-spec validation and deterministic provenance.
|
|
42
|
+
`ur skill verify|sign|keygen` supports Ed25519 integrity manifests and trusted
|
|
43
|
+
keys; loaded skills are re-hashed immediately before execution. Native
|
|
44
|
+
`.ur/skills/` and standard cross-client `.agents/skills/` project/user roots
|
|
45
|
+
use explicit, deterministic precedence.
|
|
46
|
+
- Project task memory now has per-entry provenance, UUIDs, SHA-256 content
|
|
47
|
+
digests, an append-only hash chain, cross-process locks, private atomic writes,
|
|
48
|
+
and `ur context-pack memory verify|quarantine|rollback` recovery commands.
|
|
49
|
+
|
|
12
50
|
## v1.46.0 Additions
|
|
13
51
|
|
|
14
52
|
- Native ACP v1 stdio support now uses the official SDK and includes durable
|
|
@@ -59,6 +97,7 @@ ur automation run nightly --dry-run
|
|
|
59
97
|
ur automation run-due
|
|
60
98
|
ur model-doctor
|
|
61
99
|
ur a2a serve --dry-run
|
|
100
|
+
ur ag-ui serve --help
|
|
62
101
|
ur bg run "fix the flaky parser test" --worktree --dry-run
|
|
63
102
|
ur test-first detect
|
|
64
103
|
ur test-first --dry-run
|
|
@@ -217,8 +256,8 @@ while keeping them project-local and manifest-backed:
|
|
|
217
256
|
| --- | --- | --- |
|
|
218
257
|
| Agent | `ur`, `ur agents`, `ur crew`, `ur bg`, `ur agent-templates` | `.ur/agents/`, `AGENTS.md`, `UR.md` |
|
|
219
258
|
| Rules | `ur context-pack scan`, `ur safety`, `/guardrails`, `/hooks` | `AGENTS.md`, `UR.md`, `.cursor/rules/*.mdc`, `.cursorrules`, `.ur/safety-policy.json`, `.ur/guardrails.json`, `.ur/hooks.json` |
|
|
220
|
-
| MCP | `ur mcp`,
|
|
221
|
-
| Skills | `/skills`, `/create-skill`,
|
|
259
|
+
| MCP | `ur mcp`, stdio mode, opt-in MCP 2026 HTTP Tasks/Apps, tools/resources | `.mcp.json`, `.ur/mcp/`, plugin manifests |
|
|
260
|
+
| Skills | `/skills`, `/create-skill`, `ur skill verify\|sign\|keygen`, bundled/plugin skills | `.ur/skills/`, `.agents/skills/`, user skills, plugin skill folders, trusted key store |
|
|
222
261
|
| CLI | `ur --help`, `ur -p`, `ur exec`, `ur acp`, workflow subcommands | `package.json` scripts, `.ur/project-manifest.json`, `.ur/verify.json` |
|
|
223
262
|
| Models | `/model`, `ur model-doctor`, model router, Ollama discovery | Ollama endpoint, settings, `OLLAMA_MODEL`, model metadata cache |
|
|
224
263
|
|
|
@@ -258,7 +297,7 @@ and route model work through the local Ollama-backed UR runtime.
|
|
|
258
297
|
| Auto compaction and memory retention | `compaction.autoThreshold`, `ur memory retention` | Configurable context compaction threshold plus TTL/max/decay pruning for `.ur/memory/*.jsonl` |
|
|
259
298
|
| Code-index auto-reindex | `codeIndex.autoReindex`, `ur code-index watch` | File watcher that rebuilds the local semantic code index after source changes |
|
|
260
299
|
| 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 |
|
|
261
|
-
| Opt-in A2A + compatibility server | `ur a2a serve`, `/a2a/jsonrpc`, `/a2a/tasks` |
|
|
300
|
+
| Opt-in A2A + compatibility server | `ur a2a serve`, `/a2a/jsonrpc`, `/a2a/v1/*`, `/a2a/tasks` | Negotiated v1 JSON-RPC/HTTP+JSON and stable-SDK v0.3, plus clearly separate protected UR background-task compatibility routes |
|
|
262
301
|
| 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 |
|
|
263
302
|
| Benchmark adapters | `ur eval bench swe-bench|terminal-bench|aider-polyglot` | Imports local benchmark JSON/JSONL exports into UR eval suites without external downloads |
|
|
264
303
|
|
|
@@ -271,12 +310,12 @@ and route model work through the local Ollama-backed UR runtime.
|
|
|
271
310
|
| Model capability report | `ur model-doctor` | Local Ollama model inventory with context length, advertised capabilities, and likely vision/code readiness |
|
|
272
311
|
| Reusable agent templates | `ur agent-templates install` | Project agents for review, tests, browser QA, docs research, security, release notes, PR fixes, and memory curation |
|
|
273
312
|
| GitHub agent runner | `.github/workflows/ur.yml` scaffold | Opt-in CI entry point for manual prompts or `/ur` issue comments |
|
|
274
|
-
| A2A interoperability | `ur a2a serve` |
|
|
313
|
+
| A2A interoperability | `ur a2a serve` | Version-negotiated strict v1 JSON-RPC/HTTP+JSON plus stable-SDK v0.3, durable tenant-isolated protocol state, and a separate UR compatibility API |
|
|
275
314
|
| Semantic memory index | `ur semantic-memory build|search` | Local memory index over durable memory, docs, README, and UR instructions |
|
|
276
315
|
| Claim provenance ledger | `ur claim-ledger add|list|validate` | Maps generated claims to web, file, MCP, tool, or user sources |
|
|
277
316
|
| Browser replay evals | `ur browser-qa list|validate|run` | Validates replay fixtures and performs lightweight target smoke checks |
|
|
278
317
|
| Permission and safety policy | `ur safety status|init|check` | Project-aware shell safety checks for destructive operations, sandbox recommendations, permission classes, and secret exfiltration denial |
|
|
279
|
-
| Project context pack | `ur context-pack scan|remember|compress` | Architecture manifest,
|
|
318
|
+
| Project context pack | `ur context-pack scan|remember|memory|compress` | Architecture manifest, provenance/hash-chained task memory with verify/quarantine/rollback, and compressed context summaries |
|
|
280
319
|
|
|
281
320
|
## Design Notes
|
|
282
321
|
|
package/docs/AGENT_TRENDS.md
CHANGED
|
@@ -13,6 +13,7 @@ ur agent-trends
|
|
|
13
13
|
ur agent-trends --json
|
|
14
14
|
ur a2a card
|
|
15
15
|
ur a2a card --base-url https://example.com
|
|
16
|
+
ur ag-ui serve --help
|
|
16
17
|
ur agent-features
|
|
17
18
|
ur agent-features init
|
|
18
19
|
ur agent-templates install
|
|
@@ -70,13 +71,14 @@ Inside an interactive session:
|
|
|
70
71
|
| Trend | UR status | Current coverage | Professional next step |
|
|
71
72
|
| --- | --- | --- | --- |
|
|
72
73
|
| 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
|
|
74
|
-
| MCP Tasks and MCP Apps |
|
|
75
|
-
| A2A / Agent Card interoperability |
|
|
74
|
+
| MCP tool ecosystem | Covered | `ur mcp`, MCP OAuth/XAA/elicitation, fail-closed bounded stdio tools, and the opt-in stateless MCP 2026 HTTP adapter | Track the final 2026 spec/SDK and add independent-client fixtures before promoting the adapter |
|
|
75
|
+
| MCP Tasks and MCP Apps | Covered | Negotiated Tasks lifecycle, owner-isolated durable state, and a self-contained Apps resource through `ur mcp serve-http` | Reconcile final extension schemas and broaden client interoperability tests |
|
|
76
|
+
| A2A / Agent Card interoperability | Covered | Stable-SDK v0.3 plus strict v1 ProtoJSON JSON-RPC/HTTP+JSON, negotiated cards, tenant isolation, durable artifacts, and TCK coverage | Adopt the stable v1 SDK when released; add signed-card verification and streaming only with truthful end-to-end tests |
|
|
77
|
+
| AG-UI agent-to-frontend interoperability | Covered | Official-schema HTTP/SSE adapter, truthful capabilities, ordered state/text/tool events, cancellation, exact CORS, bounded requests/output, and loopback-or-bearer security | Add independent frontend fixtures before advertising optional interrupts, binary/WebSocket transport, or client tools |
|
|
76
78
|
| 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 |
|
|
77
79
|
| Multi-agent orchestration | Covered | built-in planning, exploration, verification, and general-purpose agents; custom agents | Document reusable team patterns and role selection |
|
|
78
|
-
| Long-term memory | Partial |
|
|
79
|
-
| Portable Agent Skills |
|
|
80
|
+
| Long-term memory | Partial | Existing memory/retrieval plus a provenance-rich SHA-256 project task-memory chain with private atomic writes, verification, quarantine, and rollback | Extend the same deletion and integrity guarantees to team, semantic, embedding, and legacy stores |
|
|
81
|
+
| Portable Agent Skills | Covered | Native and `.agents/skills/` project/user discovery, strict validation, deterministic tree/permission digests, Ed25519 signing, trusted keys, and invocation-time integrity checks | Require registry attestations and dependency review before community one-command installation |
|
|
80
82
|
| 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 |
|
|
81
83
|
| 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 |
|
|
82
84
|
| 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 |
|
|
@@ -85,7 +87,7 @@ Inside an interactive session:
|
|
|
85
87
|
| 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 |
|
|
86
88
|
| Provenance and citations | Partial | WebFetch source URLs, `/cite`, `/graph`, `/trace`, evidence ledgers | Add claim-to-source mapping for web/MCP answers |
|
|
87
89
|
| 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 |
|
|
90
|
+
| Standard GenAI telemetry | Covered | Explicit OTLP/console exporters; GenAI inference, agent/workflow, tool, memory, token, cache, response, latency, streaming time-to-first-chunk/inter-output-chunk, and error semantics; content off by default | Add trajectory policy graders and cross-provider dashboards without increasing content capture/cardinality |
|
|
89
91
|
| 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 |
|
|
90
92
|
| 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
93
|
| 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 |
|
|
@@ -96,8 +98,8 @@ Inside an interactive session:
|
|
|
96
98
|
| 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 |
|
|
97
99
|
| 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 |
|
|
98
100
|
| 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 |
|
|
100
|
-
| Provider-native durable inference |
|
|
101
|
+
| ACP / IDE agent server | Covered | Official-SDK ACP v1 with durable list/load/delete/resume/close, exact replay, modes, config options, commands, permissions, MCP, roots, streaming, and cancellation | Add editor-host interoperability fixtures before expanding optional UX capabilities |
|
|
102
|
+
| Provider-native durable inference | Covered | Chat Completions remains default; opt-in Responses adds SSE, background polling/cancel, WebSocket continuation, compaction, deferred tools, and `store=false` | Generalize explicit provider capability discovery without silently emulating native features |
|
|
101
103
|
| 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 |
|
|
102
104
|
|
|
103
105
|
## v1.13.9 Direct CLI Surfaces
|
|
@@ -118,13 +120,13 @@ ur artifacts capture-tests --command "bun test"
|
|
|
118
120
|
|
|
119
121
|
## A2A Position
|
|
120
122
|
|
|
121
|
-
`ur a2a serve`
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
123
|
+
`ur a2a serve` keeps the official stable JavaScript SDK's v0.3 JSON-RPC binding
|
|
124
|
+
at `/a2a/jsonrpc` and adds separate strict v1 ProtoJSON JSON-RPC and HTTP+JSON
|
|
125
|
+
bindings. `/.well-known/agent-card.json` returns the v1 card by default and the
|
|
126
|
+
v0.3 card for `A2A-Version: 0.3`; `Vary` prevents cache confusion. The v1
|
|
127
|
+
routes provide durable tasks/artifacts, pagination, continuation, references,
|
|
128
|
+
cancellation, and tenant isolation. Streaming and push notifications are not
|
|
129
|
+
advertised.
|
|
128
130
|
|
|
129
131
|
The existing `/a2a/tasks` submission/list/status/output/cancel routes are a
|
|
130
132
|
separate **UR compatibility API**, not an A2A REST binding. They remain useful
|
|
@@ -137,11 +139,10 @@ The server refuses unauthenticated off-loopback binds and requires
|
|
|
137
139
|
`--public-base-url` for wildcard binds so discovery never advertises
|
|
138
140
|
`0.0.0.0`. Prefer `UR_A2A_TOKEN` and `UR_A2A_DELEGATION_SECRET` over argv
|
|
139
141
|
secrets. Request size, prompt size, output size, submission rate, concurrent
|
|
140
|
-
submissions, and active tasks are bounded by `UR_A2A_*` settings.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
available, then should run both versions during a negotiated migration.
|
|
142
|
+
submissions, and active tasks are bounded by `UR_A2A_*` settings. UR's v1
|
|
143
|
+
compatibility layer is covered by the official TCK while the JavaScript SDK's
|
|
144
|
+
v1 line remains prerelease; the stable v0.3 path therefore stays available
|
|
145
|
+
during the negotiated migration.
|
|
145
146
|
|
|
146
147
|
## Model Runtime Position
|
|
147
148
|
|
|
@@ -152,28 +153,26 @@ and model selection are explicit, credentials are resolved through the
|
|
|
152
153
|
credential layer, and the optional fallback setting is diagnostic advice rather
|
|
153
154
|
than an automatic provider switch.
|
|
154
155
|
|
|
155
|
-
##
|
|
156
|
-
|
|
157
|
-
The
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
5.
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
validate provenance, constrain capabilities, quarantine suspicious writes,
|
|
176
|
-
and provide integrity snapshots and rollback.
|
|
156
|
+
## v1.47 Frontier Priorities
|
|
157
|
+
|
|
158
|
+
The `1.46.0` frontier set is implemented in `1.47.0`. A second free/open-source
|
|
159
|
+
scan after the version bump also closed AG-UI frontend interoperability,
|
|
160
|
+
cross-client `.agents/skills/` discovery, and the latest OpenTelemetry
|
|
161
|
+
`invoke_workflow`/streaming-chunk latency gap. The remaining ordered backlog keeps
|
|
162
|
+
prerelease protocols opt-in and focuses on evidence and trust:
|
|
163
|
+
|
|
164
|
+
1. Adopt final MCP 2026 and stable A2A v1 SDK artifacts when published, while
|
|
165
|
+
preserving dual-stack negotiation and independent-client fixtures.
|
|
166
|
+
2. Add A2A signed-card verification, streaming/resubscription, and push only
|
|
167
|
+
with authenticated end-to-end conformance tests.
|
|
168
|
+
3. Extend task-memory provenance, deletion proofs, quarantine, and rollback to
|
|
169
|
+
every team, semantic, embedding-backed, and legacy memory store.
|
|
170
|
+
4. Turn trajectory graders for tool choice, handoffs, policy compliance,
|
|
171
|
+
recovery, and outcome quality into versioned CI regression gates.
|
|
172
|
+
5. Require registry attestations, dependency review, revocation, and update
|
|
173
|
+
transparency before one-command community skill/plugin installation.
|
|
174
|
+
6. Enforce claim-to-source links for final web/MCP answers and complete Windows
|
|
175
|
+
OS-sandbox parity.
|
|
177
176
|
|
|
178
177
|
## Source And Trust Policy
|
|
179
178
|
|
|
@@ -199,12 +198,17 @@ Professional answer requirements:
|
|
|
199
198
|
- OpenAI agent evals: https://developers.openai.com/api/docs/guides/agent-evals
|
|
200
199
|
- Model Context Protocol: https://modelcontextprotocol.io/docs/getting-started/intro
|
|
201
200
|
- MCP 2026-07-28 release candidate: https://blog.modelcontextprotocol.io/posts/2026-07-28-release-candidate/
|
|
202
|
-
- MCP Tasks extension: https://modelcontextprotocol.io/
|
|
201
|
+
- MCP Tasks extension: https://tasks.extensions.modelcontextprotocol.io/
|
|
202
|
+
- MCP Apps extension: https://apps.extensions.modelcontextprotocol.io/
|
|
203
203
|
- ACP v1 schema: https://agentclientprotocol.com/protocol/v1/schema
|
|
204
204
|
- A2A protocol specification: https://a2a-protocol.org/latest/specification/
|
|
205
205
|
- A2A JavaScript SDK: https://github.com/a2aproject/a2a-js
|
|
206
|
-
-
|
|
206
|
+
- Agent Skills specification: https://agentskills.io/specification
|
|
207
|
+
- Agent Skills integration guide: https://agentskills.io/client-implementation/adding-skills-support
|
|
208
|
+
- AG-UI documentation: https://docs.ag-ui.com/
|
|
209
|
+
- AG-UI reference implementation: https://github.com/ag-ui-protocol/ag-ui
|
|
207
210
|
- OpenTelemetry GenAI semantic conventions: https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/
|
|
211
|
+
- OpenTelemetry GenAI metrics: https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-metrics.md
|
|
208
212
|
- OWASP AI Agent Security Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/AI_Agent_Security_Cheat_Sheet.html
|
|
209
213
|
- OWASP Agent Memory Guard: https://owasp.org/www-project-agent-memory-guard/
|
|
210
214
|
- LangGraph overview: https://docs.langchain.com/oss/python/langgraph/overview
|
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)
|