@probelabs/visor 0.1.169 → 0.1.170
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/README.md +64 -7
- package/defaults/assistant.yaml +1 -1
- package/defaults/code-talk.yaml +2 -2
- package/dist/defaults/assistant.yaml +1 -1
- package/dist/defaults/code-talk.yaml +2 -2
- package/dist/docs/a2a-provider.md +672 -0
- package/dist/docs/architecture.md +174 -12
- package/dist/docs/commands.md +36 -0
- package/dist/docs/configuration.md +1 -0
- package/dist/docs/index.md +9 -2
- package/dist/docs/pluggable.md +16 -1
- package/dist/index.js +4 -4
- package/dist/output/traces/{run-2026-03-07T13-37-21-566Z.ndjson → run-2026-03-07T15-43-18-430Z.ndjson} +84 -84
- package/dist/output/traces/{run-2026-03-07T13-37-59-420Z.ndjson → run-2026-03-07T15-43-56-196Z.ndjson} +1818 -1818
- package/dist/sdk/{a2a-frontend-XFCSNQR5.mjs → a2a-frontend-IPLHACI6.mjs} +2 -2
- package/dist/sdk/{check-provider-registry-XEU5BSRJ.mjs → check-provider-registry-STRAOYRJ.mjs} +5 -5
- package/dist/sdk/{chunk-VPPW2TFI.mjs → chunk-47WAHGHK.mjs} +3 -3
- package/dist/sdk/{chunk-ROMY3ZN3.mjs → chunk-NYQTQYGU.mjs} +15 -15
- package/dist/sdk/{chunk-WGZNS5IB.mjs → chunk-WNLCRRQO.mjs} +2 -2
- package/dist/sdk/{chunk-HBT572VG.mjs → chunk-ZM7ALGTE.mjs} +2 -2
- package/dist/sdk/{chunk-HBT572VG.mjs.map → chunk-ZM7ALGTE.mjs.map} +1 -1
- package/dist/sdk/{failure-condition-evaluator-WYDAZT3H.mjs → failure-condition-evaluator-T67YFO2Z.mjs} +3 -3
- package/dist/sdk/{github-frontend-BVM7MHBJ.mjs → github-frontend-BAPXDLBB.mjs} +3 -3
- package/dist/sdk/{host-MHYGIPDP.mjs → host-K6IZWJG3.mjs} +3 -3
- package/dist/sdk/{routing-K2U7U3OO.mjs → routing-SAGHEUOA.mjs} +4 -4
- package/dist/sdk/{schedule-tool-RYYNPLDH.mjs → schedule-tool-TGWPINHO.mjs} +5 -5
- package/dist/sdk/{schedule-tool-handler-NFNY6BVX.mjs → schedule-tool-handler-OEBLE5AB.mjs} +5 -5
- package/dist/sdk/sdk.js +1 -1
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +4 -4
- package/dist/sdk/{trace-helpers-DQYOGQT5.mjs → trace-helpers-M7RVAZQ2.mjs} +2 -2
- package/dist/sdk/{workflow-check-provider-OM5L5FJX.mjs → workflow-check-provider-VDSZR7Y5.mjs} +5 -5
- package/dist/traces/{run-2026-03-07T13-37-21-566Z.ndjson → run-2026-03-07T15-43-18-430Z.ndjson} +84 -84
- package/dist/traces/{run-2026-03-07T13-37-59-420Z.ndjson → run-2026-03-07T15-43-56-196Z.ndjson} +1818 -1818
- package/package.json +1 -1
- /package/dist/sdk/{a2a-frontend-XFCSNQR5.mjs.map → a2a-frontend-IPLHACI6.mjs.map} +0 -0
- /package/dist/sdk/{check-provider-registry-XEU5BSRJ.mjs.map → check-provider-registry-STRAOYRJ.mjs.map} +0 -0
- /package/dist/sdk/{chunk-VPPW2TFI.mjs.map → chunk-47WAHGHK.mjs.map} +0 -0
- /package/dist/sdk/{chunk-ROMY3ZN3.mjs.map → chunk-NYQTQYGU.mjs.map} +0 -0
- /package/dist/sdk/{chunk-WGZNS5IB.mjs.map → chunk-WNLCRRQO.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-WYDAZT3H.mjs.map → failure-condition-evaluator-T67YFO2Z.mjs.map} +0 -0
- /package/dist/sdk/{github-frontend-BVM7MHBJ.mjs.map → github-frontend-BAPXDLBB.mjs.map} +0 -0
- /package/dist/sdk/{host-MHYGIPDP.mjs.map → host-K6IZWJG3.mjs.map} +0 -0
- /package/dist/sdk/{routing-K2U7U3OO.mjs.map → routing-SAGHEUOA.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-RYYNPLDH.mjs.map → schedule-tool-TGWPINHO.mjs.map} +0 -0
- /package/dist/sdk/{schedule-tool-handler-NFNY6BVX.mjs.map → schedule-tool-handler-OEBLE5AB.mjs.map} +0 -0
- /package/dist/sdk/{trace-helpers-DQYOGQT5.mjs.map → trace-helpers-M7RVAZQ2.mjs.map} +0 -0
- /package/dist/sdk/{workflow-check-provider-OM5L5FJX.mjs.map → workflow-check-provider-VDSZR7Y5.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
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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 |
|
package/dist/docs/commands.md
CHANGED
|
@@ -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) |
|
package/dist/docs/index.md
CHANGED
|
@@ -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
|
|
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
|
|
package/dist/docs/pluggable.md
CHANGED
|
@@ -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
|
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
process.env.VISOR_VERSION = '0.1.
|
|
2
|
+
process.env.VISOR_VERSION = '0.1.170';
|
|
3
3
|
process.env.PROBE_VERSION = '0.6.0-rc286';
|
|
4
|
-
process.env.VISOR_COMMIT_SHA = '
|
|
5
|
-
process.env.VISOR_COMMIT_SHORT = '
|
|
4
|
+
process.env.VISOR_COMMIT_SHA = '3e49bfdee61154013b28eba096637ac60cdd08ac';
|
|
5
|
+
process.env.VISOR_COMMIT_SHORT = '3e49bfdee';
|
|
6
6
|
/******/ (() => { // webpackBootstrap
|
|
7
7
|
/******/ var __webpack_modules__ = ({
|
|
8
8
|
|
|
@@ -398050,7 +398050,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"100":"Continue","101":"Switching Pro
|
|
|
398050
398050
|
/***/ ((module) => {
|
|
398051
398051
|
|
|
398052
398052
|
"use strict";
|
|
398053
|
-
module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.
|
|
398053
|
+
module.exports = /*#__PURE__*/JSON.parse('{"name":"@probelabs/visor","version":"0.1.170","main":"dist/index.js","bin":{"visor":"./dist/index.js"},"exports":{".":{"require":"./dist/index.js","import":"./dist/index.js"},"./sdk":{"types":"./dist/sdk/sdk.d.ts","import":"./dist/sdk/sdk.mjs","require":"./dist/sdk/sdk.js"},"./cli":{"require":"./dist/index.js"}},"files":["dist/","defaults/","action.yml","README.md","LICENSE"],"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build:cli":"ncc build src/index.ts -o dist && cp -r defaults dist/ && cp -r output dist/ && cp -r docs dist/ && cp -r examples dist/ && cp -r src/debug-visualizer/ui dist/debug-visualizer/ && node scripts/inject-version.js && echo \'#!/usr/bin/env node\' | cat - dist/index.js > temp && mv temp dist/index.js && chmod +x dist/index.js","build:sdk":"tsup src/sdk.ts --dts --sourcemap --format esm,cjs --out-dir dist/sdk","build":"./scripts/build-oss.sh","build:ee":"npm run build:cli && npm run build:sdk","test":"jest && npm run test:yaml","test:unit":"jest","prepublishOnly":"npm run build","test:watch":"jest --watch","test:coverage":"jest --coverage","test:ee":"jest --testPathPatterns=\'tests/ee\' --testPathIgnorePatterns=\'/node_modules/\' --no-coverage","test:manual:bash":"RUN_MANUAL_TESTS=true jest tests/manual/bash-config-manual.test.ts","lint":"eslint src tests --ext .ts","lint:fix":"eslint src tests --ext .ts --fix","format":"prettier --write src tests","format:check":"prettier --check src tests","clean":"","clean:traces":"node scripts/clean-traces.js","prebuild":"npm run clean && node scripts/generate-config-schema.js","pretest":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","pretest:unit":"npm run clean:traces && node scripts/generate-config-schema.js && npm run build:cli","test:with-build":"npm run build:cli && jest","test:yaml":"node dist/index.js test --progress compact","test:yaml:parallel":"node dist/index.js test --progress compact --max-parallel 4","prepare":"husky","pre-commit":"lint-staged","deploy:site":"cd site && npx wrangler pages deploy . --project-name=visor-site --commit-dirty=true","deploy:worker":"npx wrangler deploy","deploy":"npm run deploy:site && npm run deploy:worker","publish:ee":"./scripts/publish-ee.sh","release":"./scripts/release.sh","release:patch":"./scripts/release.sh patch","release:minor":"./scripts/release.sh minor","release:major":"./scripts/release.sh major","release:prerelease":"./scripts/release.sh prerelease","docs:validate":"node scripts/validate-readme-links.js","workshop:setup":"npm install -D reveal-md@6.1.2","workshop:serve":"cd workshop && reveal-md slides.md -w","workshop:export":"reveal-md workshop/slides.md --static workshop/build","workshop:pdf":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter","workshop:pdf:ci":"reveal-md workshop/slides.md --print workshop/Visor-Workshop.pdf --print-size letter --puppeteer-launch-args=\\"--no-sandbox --disable-dev-shm-usage\\"","workshop:pdf:a4":"reveal-md workshop/slides.md --print workshop/Visor-Workshop-A4.pdf --print-size A4","workshop:build":"npm run workshop:export && npm run workshop:pdf","simulate:issue":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issues --action opened --debug","simulate:comment":"TS_NODE_TRANSPILE_ONLY=1 ts-node scripts/simulate-gh-run.ts --event issue_comment --action created --debug"},"keywords":["code-review","ai","github-action","cli","pr-review","visor"],"author":"Probe Labs","license":"MIT","description":"AI workflow engine for code review, assistants, and automation — orchestrate checks, MCP tools, and AI providers with YAML-driven pipelines","repository":{"type":"git","url":"git+https://github.com/probelabs/visor.git"},"bugs":{"url":"https://github.com/probelabs/visor/issues"},"homepage":"https://github.com/probelabs/visor#readme","dependencies":{"@actions/core":"^1.11.1","@apidevtools/swagger-parser":"^12.1.0","@modelcontextprotocol/sdk":"^1.25.3","@nyariv/sandboxjs":"github:probelabs/SandboxJS#f1c13b8eee98734a8ea024061eada4aa9a9ff2e9","@octokit/action":"^8.0.2","@octokit/auth-app":"^8.1.0","@octokit/core":"^7.0.3","@octokit/rest":"^22.0.0","@opentelemetry/api":"^1.9.0","@opentelemetry/core":"^1.30.1","@opentelemetry/exporter-trace-otlp-grpc":"^0.203.0","@opentelemetry/exporter-trace-otlp-http":"^0.203.0","@opentelemetry/instrumentation":"^0.203.0","@opentelemetry/resources":"^1.30.1","@opentelemetry/sdk-metrics":"^1.30.1","@opentelemetry/sdk-node":"^0.203.0","@opentelemetry/sdk-trace-base":"^1.30.1","@opentelemetry/semantic-conventions":"^1.30.1","@probelabs/probe":"^0.6.0-rc286","@types/commander":"^2.12.0","@types/uuid":"^10.0.0","acorn":"^8.16.0","acorn-walk":"^8.3.5","ajv":"^8.17.1","ajv-formats":"^3.0.1","better-sqlite3":"^11.0.0","blessed":"^0.1.81","cli-table3":"^0.6.5","commander":"^14.0.0","deepmerge":"^4.3.1","dotenv":"^17.2.3","ignore":"^7.0.5","js-yaml":"^4.1.0","jsonpath-plus":"^10.4.0","liquidjs":"^10.21.1","minimatch":"^10.2.2","node-cron":"^3.0.3","open":"^9.1.0","simple-git":"^3.28.0","uuid":"^11.1.0","ws":"^8.18.3"},"optionalDependencies":{"@anthropic/claude-code-sdk":"npm:null@*","@open-policy-agent/opa-wasm":"^1.10.0","knex":"^3.1.0","mysql2":"^3.11.0","pg":"^8.13.0","tedious":"^19.0.0"},"devDependencies":{"@eslint/js":"^9.34.0","@kie/act-js":"^2.6.2","@kie/mock-github":"^2.0.1","@swc/core":"^1.13.2","@swc/jest":"^0.2.37","@types/better-sqlite3":"^7.6.0","@types/blessed":"^0.1.27","@types/jest":"^30.0.0","@types/js-yaml":"^4.0.9","@types/node":"^24.3.0","@types/node-cron":"^3.0.11","@types/ws":"^8.18.1","@typescript-eslint/eslint-plugin":"^8.42.0","@typescript-eslint/parser":"^8.42.0","@vercel/ncc":"^0.38.4","eslint":"^9.34.0","eslint-config-prettier":"^10.1.8","eslint-plugin-prettier":"^5.5.4","husky":"^9.1.7","jest":"^30.1.3","lint-staged":"^16.1.6","prettier":"^3.6.2","reveal-md":"^6.1.2","ts-json-schema-generator":"^1.5.1","ts-node":"^10.9.2","tsup":"^8.5.0","typescript":"^5.9.2","wrangler":"^3.0.0"},"peerDependenciesMeta":{"@anthropic/claude-code-sdk":{"optional":true}},"directories":{"test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["eslint --fix","prettier --write"],"tests/**/*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":["prettier --write"]}}');
|
|
398054
398054
|
|
|
398055
398055
|
/***/ })
|
|
398056
398056
|
|