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/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` | 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 |
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 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.
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
- 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
+ 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 stable
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 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.
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
- [official JavaScript SDK](https://github.com/a2aproject/a2a-js).
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/resume` | client → agent | restores a persisted session without replaying history |
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. 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
+ 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, 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.
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
 
@@ -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`, built-in MCP server mode, MCP tools/resources | `.mcp.json`, `.ur/mcp/`, plugin manifests |
221
- | Skills | `/skills`, `/create-skill`, bundled skills, plugin skills | `.ur/skills/`, user skills, plugin skill folders |
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` | Official-SDK A2A v0.3 JSON-RPC task lifecycle plus clearly separate token/delegation-protected UR background-task compatibility routes |
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` | 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 |
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, durable task memory, and compressed context summaries based on manifests and instructions |
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
 
@@ -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 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 |
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 | `/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 |
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 | Partial | Internal interaction/model/tool/agent/hook spans and bounded Perfetto traces | Dual-emit current OpenTelemetry GenAI semantics with sensitive content redacted by default |
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 | 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 |
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` 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.
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. 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.
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
- ## 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.
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/extensions/tasks/overview
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
- - Open Agent Skills specification: https://openagentskills.dev/docs/specification
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)