@probelabs/visor 0.1.169 → 0.1.170-ee

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +64 -7
  2. package/defaults/assistant.yaml +1 -1
  3. package/defaults/code-talk.yaml +2 -2
  4. package/dist/defaults/assistant.yaml +1 -1
  5. package/dist/defaults/code-talk.yaml +2 -2
  6. package/dist/docs/a2a-provider.md +672 -0
  7. package/dist/docs/architecture.md +174 -12
  8. package/dist/docs/commands.md +36 -0
  9. package/dist/docs/configuration.md +1 -0
  10. package/dist/docs/index.md +9 -2
  11. package/dist/docs/pluggable.md +16 -1
  12. package/dist/index.js +1842 -25
  13. package/dist/sdk/{check-provider-registry-5CMLUEFG.mjs → check-provider-registry-Q2OVYSBJ.mjs} +2 -2
  14. package/dist/sdk/{chunk-LB77GR4Q.mjs → chunk-46P7AYHG.mjs} +9 -9
  15. package/dist/sdk/{chunk-LB77GR4Q.mjs.map → chunk-46P7AYHG.mjs.map} +1 -1
  16. package/dist/sdk/{host-MHYGIPDP.mjs → host-RATJKJW5.mjs} +3 -3
  17. package/dist/sdk/knex-store-CRORFJE6.mjs +527 -0
  18. package/dist/sdk/knex-store-CRORFJE6.mjs.map +1 -0
  19. package/dist/sdk/loader-NJCF7DUS.mjs +89 -0
  20. package/dist/sdk/loader-NJCF7DUS.mjs.map +1 -0
  21. package/dist/sdk/opa-policy-engine-S2S2ULEI.mjs +655 -0
  22. package/dist/sdk/opa-policy-engine-S2S2ULEI.mjs.map +1 -0
  23. package/dist/sdk/{schedule-tool-H4G5ITNL.mjs → schedule-tool-VI5IUMEL.mjs} +2 -2
  24. package/dist/sdk/{schedule-tool-handler-UQWDPFP6.mjs → schedule-tool-handler-PIXYVVJY.mjs} +2 -2
  25. package/dist/sdk/sdk.js +1648 -274
  26. package/dist/sdk/sdk.js.map +1 -1
  27. package/dist/sdk/sdk.mjs +4 -4
  28. package/dist/sdk/validator-XTZJZZJH.mjs +134 -0
  29. package/dist/sdk/validator-XTZJZZJH.mjs.map +1 -0
  30. package/dist/sdk/{workflow-check-provider-FAO4AUGB.mjs → workflow-check-provider-W5FKQU5G.mjs} +2 -2
  31. package/package.json +1 -1
  32. package/dist/output/traces/run-2026-03-07T13-37-21-566Z.ndjson +0 -138
  33. package/dist/output/traces/run-2026-03-07T13-37-59-420Z.ndjson +0 -2266
  34. package/dist/sdk/a2a-frontend-XFCSNQR5.mjs +0 -1605
  35. package/dist/sdk/a2a-frontend-XFCSNQR5.mjs.map +0 -1
  36. package/dist/sdk/check-provider-registry-XEU5BSRJ.mjs +0 -30
  37. package/dist/sdk/chunk-HBT572VG.mjs +0 -443
  38. package/dist/sdk/chunk-HBT572VG.mjs.map +0 -1
  39. package/dist/sdk/chunk-ROMY3ZN3.mjs +0 -44771
  40. package/dist/sdk/chunk-ROMY3ZN3.mjs.map +0 -1
  41. package/dist/sdk/chunk-VPPW2TFI.mjs +0 -1502
  42. package/dist/sdk/chunk-VPPW2TFI.mjs.map +0 -1
  43. package/dist/sdk/chunk-WGZNS5IB.mjs +0 -739
  44. package/dist/sdk/chunk-WGZNS5IB.mjs.map +0 -1
  45. package/dist/sdk/failure-condition-evaluator-WYDAZT3H.mjs +0 -17
  46. package/dist/sdk/github-frontend-BVM7MHBJ.mjs +0 -1386
  47. package/dist/sdk/github-frontend-BVM7MHBJ.mjs.map +0 -1
  48. package/dist/sdk/routing-K2U7U3OO.mjs +0 -25
  49. package/dist/sdk/schedule-tool-H4G5ITNL.mjs.map +0 -1
  50. package/dist/sdk/schedule-tool-RYYNPLDH.mjs +0 -36
  51. package/dist/sdk/schedule-tool-RYYNPLDH.mjs.map +0 -1
  52. package/dist/sdk/schedule-tool-handler-NFNY6BVX.mjs +0 -40
  53. package/dist/sdk/schedule-tool-handler-NFNY6BVX.mjs.map +0 -1
  54. package/dist/sdk/schedule-tool-handler-UQWDPFP6.mjs.map +0 -1
  55. package/dist/sdk/trace-helpers-DQYOGQT5.mjs +0 -25
  56. package/dist/sdk/trace-helpers-DQYOGQT5.mjs.map +0 -1
  57. package/dist/sdk/workflow-check-provider-FAO4AUGB.mjs.map +0 -1
  58. package/dist/sdk/workflow-check-provider-OM5L5FJX.mjs +0 -30
  59. package/dist/sdk/workflow-check-provider-OM5L5FJX.mjs.map +0 -1
  60. package/dist/traces/run-2026-03-07T13-37-21-566Z.ndjson +0 -138
  61. package/dist/traces/run-2026-03-07T13-37-59-420Z.ndjson +0 -2266
  62. /package/dist/sdk/{check-provider-registry-5CMLUEFG.mjs.map → check-provider-registry-Q2OVYSBJ.mjs.map} +0 -0
  63. /package/dist/sdk/{host-MHYGIPDP.mjs.map → host-RATJKJW5.mjs.map} +0 -0
  64. /package/dist/sdk/{check-provider-registry-XEU5BSRJ.mjs.map → schedule-tool-VI5IUMEL.mjs.map} +0 -0
  65. /package/dist/sdk/{failure-condition-evaluator-WYDAZT3H.mjs.map → schedule-tool-handler-PIXYVVJY.mjs.map} +0 -0
  66. /package/dist/sdk/{routing-K2U7U3OO.mjs.map → workflow-check-provider-W5FKQU5G.mjs.map} +0 -0
@@ -27,7 +27,7 @@ This document provides a comprehensive overview of Visor's internal architecture
27
27
 
28
28
  ## System Overview
29
29
 
30
- Visor is an AI-powered workflow orchestration tool that can run as a GitHub Action, CLI tool, or Slack bot. The system uses a state machine-based execution engine to orchestrate checks (steps) with sophisticated dependency resolution, routing, and error handling.
30
+ Visor is an AI-powered workflow orchestration tool that can run as a GitHub Action, CLI tool, Slack bot, or A2A agent server. The system uses a state machine-based execution engine to orchestrate checks (steps) with sophisticated dependency resolution, routing, and error handling.
31
31
 
32
32
  ### High-Level Architecture Diagram
33
33
 
@@ -36,16 +36,16 @@ Visor is an AI-powered workflow orchestration tool that can run as a GitHub Acti
36
36
  | Entry Points |
37
37
  +------------------+
38
38
  | |
39
- +-------------+---+----------+---+-------------+
40
- | | | |
41
- v v v v
42
- +------+------+ +------+------+ +---+---+ +-----+-----+
43
- | GitHub | | CLI | | Slack | | HTTP |
44
- | Action | | (cli-main) | | Socket| | Webhook |
45
- | (index.ts) | | | | Mode | | Server |
46
- +------+------+ +------+------+ +---+---+ +-----+-----+
47
- | | | |
48
- +--------+--------+--------------+-------------+
39
+ +------+------+-----+----+--------+---+----------+
40
+ | | | | |
41
+ v v v v v
42
+ +------+------+ +---+----+ +---+---+ +--+-------+ +----+------+
43
+ | GitHub | | CLI | | Slack | | HTTP | | A2A |
44
+ | Action | | | | Socket| | Webhook | | Agent |
45
+ | (index.ts) | | | | Mode | | Server | | Server |
46
+ +------+------+ +---+----+ +---+---+ +--+-------+ +----+------+
47
+ | | | | |
48
+ +------+------+----------+--------+--------------+
49
49
  |
50
50
  v
51
51
  +----------+-----------+
@@ -82,7 +82,7 @@ Visor is an AI-powered workflow orchestration tool that can run as a GitHub Acti
82
82
 
83
83
  | Component | Description |
84
84
  |-----------|-------------|
85
- | **Entry Points** | GitHub Action, CLI, Slack Socket Mode, HTTP webhooks |
85
+ | **Entry Points** | GitHub Action, CLI, Slack Socket Mode, HTTP webhooks, A2A Agent Protocol |
86
86
  | **Configuration Manager** | Loads and validates YAML configuration |
87
87
  | **State Machine Engine** | Orchestrates check execution with wave-based scheduling |
88
88
  | **Provider Registry** | Registry of pluggable check providers |
@@ -164,6 +164,33 @@ http_server:
164
164
  transform: "{{ request.body | json }}"
165
165
  ```
166
166
 
167
+ ### A2A Agent Server (`src/agent-protocol/a2a-frontend.ts`)
168
+
169
+ The A2A (Agent-to-Agent) entry point exposes Visor workflows as standards-compliant A2A agents:
170
+
171
+ ```bash
172
+ visor --a2a --config .visor.yaml
173
+ ```
174
+
175
+ **Responsibilities:**
176
+ - Serve Agent Card at `/.well-known/agent-card.json` for discovery
177
+ - Accept tasks via `POST /message:send`
178
+ - Route incoming A2A skills to internal workflows via `skill_routing`
179
+ - Manage task lifecycle (submitted → working → completed/failed)
180
+ - Persist tasks in SQLite via `TaskStore`
181
+ - Execute workflows through the state machine engine
182
+
183
+ **Supported A2A Endpoints:**
184
+ | Method | Path | Auth | Description |
185
+ |--------|------|------|-------------|
186
+ | `GET` | `/.well-known/agent-card.json` | No | Agent Card for discovery |
187
+ | `POST` | `/message:send` | Yes | Submit a task |
188
+ | `GET` | `/tasks/{id}` | Yes | Get task status |
189
+ | `GET` | `/tasks` | Yes | List tasks |
190
+ | `POST` | `/tasks/{id}:cancel` | Yes | Cancel a task |
191
+
192
+ See [A2A Provider](./a2a-provider.md) for complete documentation.
193
+
167
194
  ---
168
195
 
169
196
  ## Core Components
@@ -264,6 +291,104 @@ checks:
264
291
  run: [aggregation-step]
265
292
  ```
266
293
 
294
+ ### Agent Protocol Layer
295
+
296
+ The A2A feature introduces a task-based execution layer that sits between external clients and the workflow engine. This is architecturally separate from the step-level state machine — it governs the lifecycle of inbound agent tasks.
297
+
298
+ ```
299
+ External A2A Client
300
+
301
+
302
+ ┌─────────────────────┐
303
+ │ A2A Frontend │ HTTP server, auth, Agent Card
304
+ │ (a2a-frontend.ts) │
305
+ └──────────┬──────────┘
306
+
307
+
308
+ ┌─────────────────────┐ ┌─────────────────────┐
309
+ │ Task Store │◄───►│ Task Queue │
310
+ │ (SQLite) │ │ (async execution) │
311
+ └──────────┬──────────┘ └──────────┬──────────┘
312
+ │ │
313
+ ▼ ▼
314
+ ┌──────────────────────────────────────────────────┐
315
+ │ State Machine Execution Engine │
316
+ │ (same engine used by CLI, GitHub Action, etc.) │
317
+ └──────────────────────────────────────────────────┘
318
+
319
+
320
+ ┌──────────────────────────────────────────────────┐
321
+ │ Provider Registry → [ai, a2a, command, ...] │
322
+ └──────────────────────────────────────────────────┘
323
+ ```
324
+
325
+ #### Task Store (`src/agent-protocol/task-store.ts`)
326
+
327
+ SQLite-backed persistence for A2A tasks:
328
+
329
+ ```sql
330
+ CREATE TABLE agent_tasks (
331
+ id TEXT PRIMARY KEY, -- UUID
332
+ context_id TEXT NOT NULL, -- Session grouping
333
+ state TEXT NOT NULL, -- Task state
334
+ created_at TEXT NOT NULL, -- ISO 8601
335
+ updated_at TEXT NOT NULL,
336
+ request_message TEXT NOT NULL, -- JSON: original message
337
+ artifacts TEXT DEFAULT '[]', -- JSON: AgentArtifact[]
338
+ history TEXT DEFAULT '[]', -- JSON: AgentMessage[]
339
+ workflow_id TEXT, -- Target workflow
340
+ run_id TEXT, -- Engine run correlation
341
+ claimed_by TEXT, -- Worker ID (queue)
342
+ claimed_at TEXT, -- Claim timestamp
343
+ ttl TEXT -- Expiration
344
+ );
345
+ ```
346
+
347
+ The store provides CRUD operations with state transition enforcement — invalid transitions (e.g., `completed` → `working`) throw `InvalidStateTransitionError`.
348
+
349
+ #### Task Queue (`src/agent-protocol/task-queue.ts`)
350
+
351
+ Manages async task execution with configurable concurrency:
352
+
353
+ - Polls the database at `poll_interval` for unclaimed `submitted` tasks
354
+ - Claims tasks using a worker ID with `stale_claim_timeout` to recover from crashed workers
355
+ - Feeds tasks to the state machine engine, limited by `max_concurrent`
356
+ - Updates task state and artifacts on completion
357
+
358
+ #### Task State Machine (`src/agent-protocol/state-transitions.ts`)
359
+
360
+ Separate from the workflow engine state machine — this governs task lifecycle:
361
+
362
+ ```
363
+ submitted ──→ working ──→ completed (terminal)
364
+ │ ├──→ failed (terminal)
365
+ │ ├──→ canceled (terminal)
366
+ │ ├──→ input_required ──→ working (resumed)
367
+ │ └──→ auth_required ──→ working (resumed)
368
+ ├──→ canceled (terminal)
369
+ └──→ rejected (terminal)
370
+ ```
371
+
372
+ Terminal states: `completed`, `failed`, `canceled`, `rejected`.
373
+
374
+ #### Agent Card & Discovery
375
+
376
+ The Agent Card is a JSON document describing the agent's capabilities:
377
+
378
+ ```typescript
379
+ interface AgentCard {
380
+ name: string;
381
+ description?: string;
382
+ version?: string;
383
+ provider?: { organization: string; url?: string };
384
+ skills?: AgentSkill[]; // Advertised capabilities
385
+ supported_interfaces?: Array<{ url: string; protocol_binding?: string }>;
386
+ capabilities?: { streaming?: boolean; push_notifications?: boolean };
387
+ }
388
+ ```
389
+
390
+ Skills are mapped to internal workflows via `skill_routing` configuration. When a client sends a message with `metadata.skill_id`, the frontend resolves the target workflow and dispatches execution.
391
+
267
392
  ---
268
393
 
269
394
  ## Provider Architecture
@@ -311,6 +436,7 @@ class CheckProviderRegistry {
311
436
 
312
437
  | Provider | Type | Description |
313
438
  |----------|------|-------------|
439
+ | `a2a` | A2A Agent | Calls external A2A-compatible agents |
314
440
  | `ai` | AI-powered | Uses Gemini, Claude, OpenAI, or Bedrock for analysis |
315
441
  | `command` | Command | Executes shell commands |
316
442
  | `script` | Script | Executes JavaScript in a sandbox |
@@ -508,6 +634,19 @@ checks:
508
634
  {{ data.message }}
509
635
  ```
510
636
 
637
+ ### A2A Protocol
638
+
639
+ External agents and orchestrators send tasks via the A2A protocol:
640
+
641
+ 1. Client fetches Agent Card from `GET /.well-known/agent-card.json`
642
+ 2. Client sends `POST /message:send` with `skill_id` in metadata
643
+ 3. A2A Frontend authenticates the request (bearer/api_key)
644
+ 4. Task created in TaskStore (state: `submitted`)
645
+ 5. Skill routing maps `skill_id` → internal workflow name
646
+ 6. Engine executes the workflow (same engine as CLI/GitHub Action)
647
+ 7. Task updated with artifacts (state: `completed`)
648
+ 8. Client receives response (blocking) or polls `GET /tasks/{id}` (async)
649
+
511
650
  ---
512
651
 
513
652
  ## Data Flow
@@ -1063,6 +1202,7 @@ Currently, Visor does not cache AI responses between runs. For expensive operati
1063
1202
  - [Security](./security.md) - Security overview and best practices
1064
1203
  - [Providers](./providers/) - Provider-specific documentation
1065
1204
  - [Custom Tools](./custom-tools.md) - Creating custom tools
1205
+ - [A2A Provider](./a2a-provider.md) - Agent-to-Agent protocol integration
1066
1206
  - [MCP Provider](./mcp-provider.md) - MCP integration details
1067
1207
  - [Command Provider](./command-provider.md) - Shell command execution
1068
1208
  - [HTTP Integration](./http.md) - HTTP server and client features
@@ -1100,6 +1240,7 @@ src/
1100
1240
  providers/
1101
1241
  check-provider.interface.ts # Provider base class
1102
1242
  check-provider-registry.ts # Provider registry
1243
+ a2a-check-provider.ts # A2A agent client provider
1103
1244
  ai-check-provider.ts # AI provider (Gemini, Claude, OpenAI)
1104
1245
  claude-code-check-provider.ts # Claude Code SDK provider
1105
1246
  command-check-provider.ts # Shell command provider
@@ -1122,6 +1263,17 @@ src/
1122
1263
  event-bus.ts # Event bus for frontends
1123
1264
  types.ts # Event envelope types
1124
1265
 
1266
+ agent-protocol/
1267
+ a2a-frontend.ts # A2A HTTP server and endpoints
1268
+ types.ts # Protocol-agnostic types and error classes
1269
+ state-transitions.ts # Task state machine validation
1270
+ task-store.ts # SQLite-backed task persistence
1271
+ task-queue.ts # Async task execution queue
1272
+ task-stream-manager.ts # SSE streaming support
1273
+ push-notification-manager.ts # Push notification delivery
1274
+ tasks-cli-handler.ts # CLI: visor tasks
1275
+ index.ts # Re-exports
1276
+
1125
1277
  frontends/
1126
1278
  host.ts # Frontend manager
1127
1279
  github/ # GitHub integration frontend
@@ -1183,6 +1335,9 @@ interface VisorConfig {
1183
1335
  // HTTP server
1184
1336
  http_server?: HttpServerConfig;
1185
1337
 
1338
+ // Agent Protocol (A2A)
1339
+ agent_protocol?: AgentProtocolConfig;
1340
+
1186
1341
  // Workflow imports
1187
1342
  imports?: string[];
1188
1343
 
@@ -1257,4 +1412,11 @@ Events that flow through the state machine:
1257
1412
  | **Scope** | Hierarchical path for nested workflow execution |
1258
1413
  | **Frontend** | Integration point (GitHub, Slack) |
1259
1414
  | **Routing** | Control flow based on check results |
1415
+ | **A2A** | Agent-to-Agent protocol — Google's open standard for agent interoperability |
1416
+ | **Agent Card** | JSON metadata describing an agent's capabilities, skills, and endpoints |
1417
+ | **Task** | A unit of work in the A2A protocol with lifecycle state (submitted → working → completed) |
1418
+ | **Skill** | A named capability advertised in an Agent Card, mapped to a Visor workflow |
1419
+ | **Skill Routing** | Configuration mapping A2A skill IDs to internal workflow names |
1420
+ | **Task Store** | SQLite-backed persistence layer for A2A tasks |
1421
+ | **Task Queue** | Async execution queue for processing A2A tasks with concurrency control |
1260
1422
  | **MCP** | Model Context Protocol - standard for AI tool integration |
@@ -113,6 +113,39 @@ visor mcp-server [options]
113
113
  - `--mcp-tool-name <name>` - Custom tool name for the MCP server
114
114
  - `--mcp-tool-description <desc>` - Custom tool description
115
115
 
116
+ #### `visor tasks`
117
+
118
+ Monitor and manage A2A agent tasks.
119
+
120
+ ```bash
121
+ visor tasks [command] [options]
122
+ ```
123
+
124
+ **Subcommands:**
125
+ - `list` (default) — List tasks with optional filters
126
+ - `stats` — Queue summary statistics
127
+ - `cancel <task-id>` — Cancel a running task
128
+ - `help` — Show usage
129
+
130
+ **Options:**
131
+ - `--state <state>` — Filter by state: `submitted`, `working`, `completed`, `failed`, `canceled`
132
+ - `--agent <workflow-id>` — Filter by workflow
133
+ - `--limit <n>` — Number of tasks to show (default: 20)
134
+ - `--output <format>` — Output format: `table` (default), `json`, `markdown`
135
+ - `--watch` — Live refresh every 2 seconds
136
+
137
+ **Examples:**
138
+ ```bash
139
+ visor tasks # List all tasks
140
+ visor tasks list --state working # Show only working tasks
141
+ visor tasks list --agent security-review # Tasks for a specific workflow
142
+ visor tasks list --output json # JSON output
143
+ visor tasks list --watch # Live monitoring
144
+ visor tasks stats # Queue summary
145
+ visor tasks stats --output json # Stats as JSON
146
+ visor tasks cancel abc123 # Cancel a task
147
+ ```
148
+
116
149
  ### Common CLI Options
117
150
 
118
151
  #### Check Selection
@@ -175,6 +208,9 @@ See [Tag Filtering](tag-filtering.md) for detailed tag filtering documentation.
175
208
 
176
209
  See [GitHub Authentication](github-auth.md) for setup guide and details.
177
210
 
211
+ #### Agent Protocol
212
+ - `--a2a` - Enable A2A Agent Protocol server mode (see [A2A Provider](a2a-provider.md))
213
+
178
214
  #### Other Options
179
215
  - `--slack` - Enable Slack Socket Mode runner
180
216
  - `--mode <mode>` - Run mode: `cli` (default) or `github-actions`
@@ -32,6 +32,7 @@ Visor supports the following check types:
32
32
 
33
33
  | Type | Description | Documentation |
34
34
  |------|-------------|---------------|
35
+ | `a2a` | Call external A2A agents | [A2A Provider](./a2a-provider.md) |
35
36
  | `ai` | AI-powered analysis using LLMs | [AI Configuration](./ai-configuration.md) |
36
37
  | `claude-code` | Claude Code SDK integration | [Claude Code](./claude-code.md) |
37
38
  | `command` | Execute shell commands | [Command Provider](./command-provider.md) |
@@ -1,6 +1,6 @@
1
1
  # Visor Documentation
2
2
 
3
- Visor is an AI-powered workflow orchestration tool for code review, automation, and CI/CD pipelines. It supports multiple AI providers, pluggable check providers, and integrates with GitHub Actions and Slack.
3
+ Visor is an AI-powered workflow orchestration tool for code review, automation, and CI/CD pipelines. It supports multiple AI providers, pluggable check providers, A2A agent interoperability, and integrates with GitHub Actions and Slack.
4
4
 
5
5
  ---
6
6
 
@@ -35,7 +35,7 @@ Visor is an AI-powered workflow orchestration tool for code review, automation,
35
35
 
36
36
  ## Providers
37
37
 
38
- Visor supports 15 provider types for different check and workflow operations.
38
+ Visor supports 16 provider types for different check and workflow operations.
39
39
 
40
40
  ### AI Providers
41
41
 
@@ -67,6 +67,12 @@ Visor supports 15 provider types for different check and workflow operations.
67
67
  | [Memory Provider](./memory.md) | Persistent key-value storage for stateful workflows |
68
68
  | [Human Input](./human-input-provider.md) | Pause workflows to collect user input via CLI, stdin, or SDK |
69
69
 
70
+ ### Agent Protocol
71
+
72
+ | Document | Description |
73
+ |----------|-------------|
74
+ | [A2A Provider](./a2a-provider.md) | Agent-to-Agent protocol: server mode, client provider, task management, and multi-agent composition |
75
+
70
76
  ### Utility Providers
71
77
 
72
78
  | Document | Description |
@@ -187,6 +193,7 @@ Internal design documents, proposals, and implementation tracking.
187
193
  | [on_init Hook](./rfc/on_init-hook.md) | Lifecycle hook for context preprocessing |
188
194
  | [Telemetry Tracing](./telemetry-tracing-rfc.md) | OpenTelemetry tracing architecture |
189
195
  | [Test Framework](./test-framework-rfc.md) | In-YAML integration test framework design |
196
+ | [A2A Protocol Support](../rfc/001-a2a-protocol-support.md) | Agent-to-Agent protocol for agent interoperability ([docs](./a2a-provider.md)) |
190
197
 
191
198
  ### Design Documents
192
199
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Visor supports multiple provider types. You can also add custom providers.
4
4
 
5
- **Built-in Providers:** ai, mcp, command, script, http, http_input, http_client, log, memory, noop, github, human-input, workflow, git-checkout, claude-code
5
+ **Built-in Providers:** a2a, ai, mcp, command, script, http, http_input, http_client, log, memory, noop, github, human-input, workflow, git-checkout, claude-code
6
6
 
7
7
  ### Custom Provider Skeleton (TypeScript)
8
8
 
@@ -18,6 +18,21 @@ class CustomCheckProvider {
18
18
 
19
19
  ### Built-in Providers
20
20
 
21
+ #### A2A Provider (`type: a2a`)
22
+ Call external A2A-compatible agents and collect their responses. Supports agent card discovery, multi-turn conversations, and JavaScript output transforms.
23
+
24
+ ```yaml
25
+ steps:
26
+ compliance-check:
27
+ type: a2a
28
+ agent_url: "http://compliance-agent:9000"
29
+ message: "Review PR #{{ pr.number }}: {{ pr.title }}"
30
+ blocking: true
31
+ timeout: 60000
32
+ ```
33
+
34
+ [Learn more](./a2a-provider.md)
35
+
21
36
  #### AI Provider (`type: ai`)
22
37
  Execute AI-powered analysis using Google Gemini, Anthropic Claude, OpenAI, or AWS Bedrock.
23
38