@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
package/README.md
CHANGED
|
@@ -7,19 +7,20 @@
|
|
|
7
7
|
[](https://nodejs.org/)
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
|
|
10
|
-
Orchestrate checks, MCP tools,
|
|
11
|
-
Runs as GitHub Action, CLI, Slack bot, or
|
|
10
|
+
Orchestrate checks, MCP tools, AI providers, and A2A agents with YAML-driven pipelines.
|
|
11
|
+
Runs as GitHub Action, CLI, Slack bot, HTTP API, or A2A agent server.
|
|
12
12
|
</div>
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
Visor is an open-source workflow engine that lets you define multi-step AI pipelines in YAML. Wire up shell commands, AI providers, MCP tools, HTTP calls, and custom scripts into dependency-aware DAGs — then run them from your terminal, CI, Slack,
|
|
16
|
+
Visor is an open-source workflow engine that lets you define multi-step AI pipelines in YAML. Wire up shell commands, AI providers, MCP tools, A2A agents, HTTP calls, and custom scripts into dependency-aware DAGs — then run them from your terminal, CI, Slack, an HTTP endpoint, or as a standards-compliant A2A agent server.
|
|
17
17
|
|
|
18
18
|
**What you get out of the box:**
|
|
19
19
|
|
|
20
20
|
- **YAML-driven pipelines** — define checks, transforms, routing, and AI prompts in a single config file.
|
|
21
|
-
- **
|
|
22
|
-
- **
|
|
21
|
+
- **5 runtime modes** — CLI, GitHub Action, Slack bot, HTTP server, A2A agent server — same config, any surface.
|
|
22
|
+
- **15+ provider types** — `ai`, `a2a`, `command`, `script`, `mcp`, `http`, `claude-code`, `github`, `memory`, `workflow`, and more.
|
|
23
|
+
- **Agent interoperability** — A2A protocol support: expose workflows as discoverable agents, or call external A2A agents from your pipelines.
|
|
23
24
|
- **AI orchestration** — multi-provider (Gemini, Claude, OpenAI, Bedrock), session reuse, MCP tool calling, retry & fallback.
|
|
24
25
|
- **Execution engine** — dependency DAGs, parallel waves, forEach fan-out, conditional routing, failure auto-remediation.
|
|
25
26
|
- **Built-in testing** — YAML-native integration tests with fixtures, mocks, and assertions.
|
|
@@ -34,6 +35,7 @@ Visor is an open-source workflow engine that lets you define multi-step AI pipel
|
|
|
34
35
|
- [Provider Types](#-provider-types)
|
|
35
36
|
- [Orchestration](#-orchestration)
|
|
36
37
|
- [AI & MCP](#-ai--mcp)
|
|
38
|
+
- [Agent Protocol (A2A)](#-agent-protocol-a2a)
|
|
37
39
|
- [GitHub Provider](#-github-provider)
|
|
38
40
|
- [Templating & Transforms](#-templating--transforms)
|
|
39
41
|
- [Suppressing Warnings](#-suppressing-warnings)
|
|
@@ -163,7 +165,7 @@ Learn more: [docs/assistant-workflows.md](docs/assistant-workflows.md) | Example
|
|
|
163
165
|
|
|
164
166
|
## 🖥️ Runtime Modes
|
|
165
167
|
|
|
166
|
-
Visor runs the same YAML config across
|
|
168
|
+
Visor runs the same YAML config across five surfaces:
|
|
167
169
|
|
|
168
170
|
| Mode | How to run | Best for |
|
|
169
171
|
|------|-----------|----------|
|
|
@@ -171,6 +173,7 @@ Visor runs the same YAML config across four surfaces:
|
|
|
171
173
|
| **GitHub Action** | `uses: probelabs/visor@v1` | PR reviews, issue triage, annotations |
|
|
172
174
|
| **Slack bot** | `visor --slack --config .visor.yaml` | Team assistants, ChatOps |
|
|
173
175
|
| **HTTP server** | `http_server: { enabled: true, port: 8080 }` | Webhooks, API integrations |
|
|
176
|
+
| **A2A agent** | `visor --a2a --config .visor.yaml` | Agent interoperability, multi-agent systems |
|
|
174
177
|
|
|
175
178
|
Additional modes:
|
|
176
179
|
- **TUI** — interactive chat-style terminal UI: `visor --tui`
|
|
@@ -185,6 +188,8 @@ visor --analyze-branch-diff # PR-style diff analysis
|
|
|
185
188
|
visor --event pr_updated # Simulate GitHub events
|
|
186
189
|
visor --tui --config ./workflow.yaml # Interactive TUI
|
|
187
190
|
visor --debug-server --debug-port 3456 # Live web debugger
|
|
191
|
+
visor --a2a --config workflow.yaml # A2A agent server
|
|
192
|
+
visor tasks list --watch # Monitor A2A task queue
|
|
188
193
|
visor config snapshots # Config version history
|
|
189
194
|
visor validate # Validate config
|
|
190
195
|
visor test --progress compact # Run integration tests
|
|
@@ -227,6 +232,7 @@ Learn more: [docs/commands.md](docs/commands.md)
|
|
|
227
232
|
| Provider | Description | Example use |
|
|
228
233
|
|----------|------------|------------|
|
|
229
234
|
| `ai` | Multi-provider AI (Gemini, Claude, OpenAI, Bedrock) | Code review, analysis, generation |
|
|
235
|
+
| `a2a` | Call external A2A agents | Agent delegation, multi-agent workflows |
|
|
230
236
|
| `command` | Shell commands with Liquid templating | Run tests, build, lint |
|
|
231
237
|
| `script` | JavaScript in a secure sandbox | Transform data, custom logic |
|
|
232
238
|
| `mcp` | MCP tool execution (stdio/SSE/HTTP) | External tool integration |
|
|
@@ -434,6 +440,57 @@ steps:
|
|
|
434
440
|
|
|
435
441
|
Learn more: [docs/claude-code.md](docs/claude-code.md) · [docs/mcp-provider.md](docs/mcp-provider.md) · [docs/advanced-ai.md](docs/advanced-ai.md)
|
|
436
442
|
|
|
443
|
+
## 🤝 Agent Protocol (A2A)
|
|
444
|
+
|
|
445
|
+
Visor implements the [A2A (Agent-to-Agent) protocol](https://github.com/google/A2A) for agent interoperability. Every Visor workflow can become a discoverable, standards-compliant agent — and every A2A agent in the ecosystem becomes a callable step in your workflows.
|
|
446
|
+
|
|
447
|
+
### Server: Expose Workflows as an A2A Agent
|
|
448
|
+
|
|
449
|
+
```yaml
|
|
450
|
+
agent_protocol:
|
|
451
|
+
enabled: true
|
|
452
|
+
protocol: a2a
|
|
453
|
+
port: 9000
|
|
454
|
+
agent_card_inline:
|
|
455
|
+
name: "Code Review Agent"
|
|
456
|
+
description: "AI-powered code review"
|
|
457
|
+
skills:
|
|
458
|
+
- id: security
|
|
459
|
+
name: Security Review
|
|
460
|
+
description: Analyze code for vulnerabilities
|
|
461
|
+
skill_routing:
|
|
462
|
+
security: security-review
|
|
463
|
+
default_workflow: general-review
|
|
464
|
+
auth:
|
|
465
|
+
type: bearer
|
|
466
|
+
token_env: AGENT_AUTH_TOKEN
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
```bash
|
|
470
|
+
visor --a2a --config .visor.yaml # Start A2A server on port 9000
|
|
471
|
+
visor tasks list --watch # Monitor task queue
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Client: Call External A2A Agents
|
|
475
|
+
|
|
476
|
+
```yaml
|
|
477
|
+
steps:
|
|
478
|
+
compliance-scan:
|
|
479
|
+
type: a2a
|
|
480
|
+
agent_url: "http://compliance-agent:9000"
|
|
481
|
+
message: |
|
|
482
|
+
Review PR #{{ pr.number }}: {{ pr.title }}
|
|
483
|
+
blocking: true
|
|
484
|
+
timeout: 60000
|
|
485
|
+
|
|
486
|
+
summarize:
|
|
487
|
+
type: ai
|
|
488
|
+
depends_on: [compliance-scan]
|
|
489
|
+
prompt: "Summarize: {{ outputs['compliance-scan'] | json }}"
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
Learn more: [docs/a2a-provider.md](docs/a2a-provider.md) · [RFC: A2A Protocol Support](rfc/001-a2a-protocol-support.md) · [Example config](examples/a2a-agent-example.yaml)
|
|
493
|
+
|
|
437
494
|
## 🧰 GitHub Provider
|
|
438
495
|
|
|
439
496
|
Native GitHub operations (labels, comments, checks) without shelling out to `gh`:
|
|
@@ -709,7 +766,7 @@ Learn more: [docs/enterprise-policy.md](docs/enterprise-policy.md)
|
|
|
709
766
|
[Assistant workflows](docs/assistant-workflows.md) · [CLI commands](docs/commands.md) · [Configuration](docs/configuration.md) · [AI config](docs/ai-configuration.md) · [Dependencies](docs/dependencies.md) · [forEach propagation](docs/foreach-dependency-propagation.md) · [Failure routing](docs/failure-routing.md) · [Liquid templates](docs/liquid-templates.md) · [Schema-template system](docs/schema-templates.md) · [Fail conditions](docs/fail-if.md) · [Timeouts](docs/timeouts.md) · [Execution limits](docs/limits.md) · [Output formats](docs/output-formats.md) · [Output formatting](docs/output-formatting.md) · [HTTP integration](docs/http.md) · [Scheduler](docs/scheduler.md)
|
|
710
767
|
|
|
711
768
|
**Providers:**
|
|
712
|
-
[Command](docs/command-provider.md) · [Script](docs/script.md) · [MCP](docs/mcp-provider.md) · [MCP tools for AI](docs/mcp.md) · [Claude Code](docs/claude-code.md) · [GitHub ops](docs/github-ops.md) · [Custom providers](docs/pluggable.md)
|
|
769
|
+
[A2A](docs/a2a-provider.md) · [Command](docs/command-provider.md) · [Script](docs/script.md) · [MCP](docs/mcp-provider.md) · [MCP tools for AI](docs/mcp.md) · [Claude Code](docs/claude-code.md) · [GitHub ops](docs/github-ops.md) · [Custom providers](docs/pluggable.md)
|
|
713
770
|
|
|
714
771
|
**Operations:**
|
|
715
772
|
[GitHub Action reference](docs/action-reference.md) · [Security](docs/security.md) · [Performance](docs/performance.md) · [Observability](docs/observability.md) · [Debugging](docs/debugging.md) · [Debug visualizer](docs/debug-visualizer.md) · [Troubleshooting](docs/troubleshooting.md) · [Suppressions](docs/suppressions.md) · [GitHub checks](docs/GITHUB_CHECKS.md)
|
package/defaults/assistant.yaml
CHANGED
|
@@ -766,7 +766,7 @@ steps:
|
|
|
766
766
|
# ProbeAgent resolves "*" and "!" patterns natively.
|
|
767
767
|
ai_allowed_tools_js: |
|
|
768
768
|
// Start with wildcard — allow all tools by default
|
|
769
|
-
const excluded = ['search', 'query', 'extract', 'listFiles', 'searchFiles', 'delegate'];
|
|
769
|
+
const excluded = ['search', 'query', 'extract', 'listFiles', 'searchFiles', 'delegate', 'analyze_all'];
|
|
770
770
|
const bashEnabled = outputs['build-config']?.bash_enabled === true;
|
|
771
771
|
if (!bashEnabled) {
|
|
772
772
|
excluded.push('bash');
|
package/defaults/code-talk.yaml
CHANGED
|
@@ -472,7 +472,7 @@ steps:
|
|
|
472
472
|
ai:
|
|
473
473
|
skip_code_context: true
|
|
474
474
|
enableDelegate: true
|
|
475
|
-
enableExecutePlan:
|
|
475
|
+
enableExecutePlan: false
|
|
476
476
|
max_iterations: 40
|
|
477
477
|
prompt_type: code-explorer
|
|
478
478
|
allowBash: true
|
|
@@ -524,7 +524,7 @@ steps:
|
|
|
524
524
|
- "curl:-s:*"
|
|
525
525
|
- "curl:*"
|
|
526
526
|
timeout: 60000
|
|
527
|
-
|
|
527
|
+
_completion_prompt: |
|
|
528
528
|
Before finalizing your answer, triple-check everything:
|
|
529
529
|
|
|
530
530
|
Challenge assumptions:
|
|
@@ -766,7 +766,7 @@ steps:
|
|
|
766
766
|
# ProbeAgent resolves "*" and "!" patterns natively.
|
|
767
767
|
ai_allowed_tools_js: |
|
|
768
768
|
// Start with wildcard — allow all tools by default
|
|
769
|
-
const excluded = ['search', 'query', 'extract', 'listFiles', 'searchFiles', 'delegate'];
|
|
769
|
+
const excluded = ['search', 'query', 'extract', 'listFiles', 'searchFiles', 'delegate', 'analyze_all'];
|
|
770
770
|
const bashEnabled = outputs['build-config']?.bash_enabled === true;
|
|
771
771
|
if (!bashEnabled) {
|
|
772
772
|
excluded.push('bash');
|
|
@@ -472,7 +472,7 @@ steps:
|
|
|
472
472
|
ai:
|
|
473
473
|
skip_code_context: true
|
|
474
474
|
enableDelegate: true
|
|
475
|
-
enableExecutePlan:
|
|
475
|
+
enableExecutePlan: false
|
|
476
476
|
max_iterations: 40
|
|
477
477
|
prompt_type: code-explorer
|
|
478
478
|
allowBash: true
|
|
@@ -524,7 +524,7 @@ steps:
|
|
|
524
524
|
- "curl:-s:*"
|
|
525
525
|
- "curl:*"
|
|
526
526
|
timeout: 60000
|
|
527
|
-
|
|
527
|
+
_completion_prompt: |
|
|
528
528
|
Before finalizing your answer, triple-check everything:
|
|
529
529
|
|
|
530
530
|
Challenge assumptions:
|