@probelabs/visor 0.1.124 → 0.1.126
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/dist/config.d.ts.map +1 -1
- package/dist/docs/DEPLOYMENT.md +117 -11
- package/dist/docs/GITHUB_CHECKS.md +18 -4
- package/dist/docs/NPM_USAGE.md +112 -39
- package/dist/docs/action-reference.md +63 -9
- package/dist/docs/advanced-ai.md +58 -51
- package/dist/docs/ai-configuration.md +99 -11
- package/dist/docs/ai-custom-tools-usage.md +70 -33
- package/dist/docs/ai-custom-tools.md +50 -27
- package/dist/docs/architecture.md +1232 -0
- package/dist/docs/bot-transports-rfc.md +13 -3
- package/dist/docs/ci-cli-mode.md +116 -8
- package/dist/docs/claude-code.md +111 -41
- package/dist/docs/command-provider.md +37 -15
- package/dist/docs/commands.md +252 -6
- package/dist/docs/configuration.md +138 -4
- package/dist/docs/contributing.md +737 -0
- package/dist/docs/custom-tools.md +39 -8
- package/dist/docs/dashboards/README.md +33 -19
- package/dist/docs/debug-visualizer-progress.md +14 -13
- package/dist/docs/debug-visualizer-rfc.md +14 -13
- package/dist/docs/debug-visualizer.md +30 -5
- package/dist/docs/debugging.md +73 -8
- package/dist/docs/default-output-schema.md +24 -20
- package/dist/docs/dependencies.md +75 -21
- package/dist/docs/dev-playbook.md +85 -9
- package/dist/docs/engine-pause-resume-rfc.md +11 -11
- package/dist/docs/engine-state-machine-plan.md +10 -3
- package/dist/docs/event-driven-github-integration-rfc.md +20 -11
- package/dist/docs/event-triggers.md +95 -6
- package/dist/docs/execution-statistics-rfc.md +16 -4
- package/dist/docs/fact-validator-gap-analysis.md +12 -1
- package/dist/docs/fact-validator-implementation-plan.md +19 -11
- package/dist/docs/fail-if.md +116 -11
- package/dist/docs/failure-conditions-implementation.md +40 -6
- package/dist/docs/failure-conditions-schema.md +243 -87
- package/dist/docs/failure-routing-rfc.md +43 -18
- package/dist/docs/failure-routing.md +80 -23
- package/dist/docs/faq.md +836 -0
- package/dist/docs/foreach-dependency-propagation.md +32 -15
- package/dist/docs/github-ops.md +6 -5
- package/dist/docs/glossary.md +322 -0
- package/dist/docs/goto-forward-run-plan.md +23 -10
- package/dist/docs/guides/criticality-modes.md +15 -13
- package/dist/docs/guides/fault-management-and-contracts.md +8 -5
- package/dist/docs/guides/workflow-style-guide.md +17 -8
- package/dist/docs/http.md +102 -3
- package/dist/docs/human-input-provider.md +20 -36
- package/dist/docs/index.md +206 -0
- package/dist/docs/lifecycle-hooks.md +322 -2
- package/dist/docs/limits.md +20 -5
- package/dist/docs/liquid-templates.md +86 -14
- package/dist/docs/loop-routing-refactor.md +4 -2
- package/dist/docs/mcp-provider.md +53 -19
- package/dist/docs/mcp.md +27 -1
- package/dist/docs/memory.md +7 -2
- package/dist/docs/migration.md +596 -0
- package/dist/docs/observability.md +227 -6
- package/dist/docs/output-formats.md +388 -9
- package/dist/docs/output-history.md +36 -6
- package/dist/docs/performance.md +510 -4
- package/dist/docs/pluggable.md +95 -4
- package/dist/docs/proposals/snapshot-scope-execution.md +6 -5
- package/dist/docs/providers/git-checkout.md +16 -14
- package/dist/docs/providers/noop.md +696 -0
- package/dist/docs/recipes.md +8 -9
- package/dist/docs/rfc/git-checkout-step.md +3 -1
- package/dist/docs/rfc/on_init-hook.md +18 -5
- package/dist/docs/rfc/workspace-isolation.md +16 -0
- package/dist/docs/roadmap/criticality-implementation-tasks.md +27 -27
- package/dist/docs/router-patterns.md +155 -43
- package/dist/docs/schema-templates.md +51 -15
- package/dist/docs/script.md +162 -13
- package/dist/docs/sdk.md +46 -12
- package/dist/docs/security.md +464 -5
- package/dist/docs/slack-integration.md +481 -0
- package/dist/docs/tag-filtering.md +60 -20
- package/dist/docs/telemetry-setup.md +157 -46
- package/dist/docs/test-framework-rfc.md +37 -36
- package/dist/docs/testing/assertions.md +92 -4
- package/dist/docs/testing/ci.md +56 -7
- package/dist/docs/testing/cli.md +57 -15
- package/dist/docs/testing/cookbook.md +53 -20
- package/dist/docs/testing/dsl-reference.md +110 -9
- package/dist/docs/testing/fixtures-and-mocks.md +28 -3
- package/dist/docs/testing/flows.md +59 -4
- package/dist/docs/testing/getting-started.md +14 -13
- package/dist/docs/testing/troubleshooting.md +39 -2
- package/dist/docs/timeouts.md +174 -18
- package/dist/docs/troubleshooting.md +176 -6
- package/dist/docs/workflow-creation-guide.md +101 -3
- package/dist/docs/workflows.md +138 -41
- package/dist/examples/README.md +169 -4
- package/dist/examples/ai-custom-tools-simple.yaml +2 -3
- package/dist/examples/cron-webhook-config.yaml +15 -0
- package/dist/examples/forEach-example.yaml +6 -0
- package/dist/examples/git-checkout-basic.yaml +4 -0
- package/dist/examples/git-checkout-compare.yaml +6 -0
- package/dist/examples/git-checkout-cross-repo.yaml +7 -0
- package/dist/examples/http-integration-config.yaml +30 -0
- package/dist/examples/https-server-config.yaml +15 -0
- package/dist/examples/mcp-provider-example.yaml +10 -10
- package/dist/examples/transform-example.yaml +3 -0
- package/dist/examples/webhook-pipeline-config.yaml +18 -0
- package/dist/examples/workflows/workflow-composition-example.yaml +4 -0
- package/dist/frontends/slack-frontend.d.ts +2 -0
- package/dist/frontends/slack-frontend.d.ts.map +1 -1
- package/dist/generated/config-schema.d.ts +11 -7
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +11 -7
- package/dist/index.js +3127 -974
- package/dist/output/traces/{run-2026-01-28T16-15-24-569Z.ndjson → run-2026-01-31T16-37-22-321Z.ndjson} +84 -84
- package/dist/output/traces/{run-2026-01-28T16-16-09-757Z.ndjson → run-2026-01-31T16-38-06-031Z.ndjson} +1013 -1013
- package/dist/providers/ai-check-provider.d.ts +9 -2
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/command-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts +17 -1
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -1
- package/dist/providers/workflow-check-provider.d.ts.map +1 -1
- package/dist/providers/workflow-tool-executor.d.ts +68 -0
- package/dist/providers/workflow-tool-executor.d.ts.map +1 -0
- package/dist/sdk/{check-provider-registry-AQ3JETBG.mjs → check-provider-registry-3KI5RKXT.mjs} +6 -5
- package/dist/sdk/check-provider-registry-IYILYY35.mjs +28 -0
- package/dist/sdk/chunk-2CPMMNIX.mjs +1459 -0
- package/dist/sdk/chunk-2CPMMNIX.mjs.map +1 -0
- package/dist/sdk/chunk-5LI6T4O3.mjs +3600 -0
- package/dist/sdk/chunk-5LI6T4O3.mjs.map +1 -0
- package/dist/sdk/{chunk-YLQ4UN62.mjs → chunk-A4PGHURG.mjs} +6838 -6257
- package/dist/sdk/chunk-A4PGHURG.mjs.map +1 -0
- package/dist/sdk/chunk-EXFGO4FX.mjs +147 -0
- package/dist/sdk/chunk-EXFGO4FX.mjs.map +1 -0
- package/dist/sdk/chunk-PJ7K5UFC.mjs +17732 -0
- package/dist/sdk/chunk-PJ7K5UFC.mjs.map +1 -0
- package/dist/sdk/{chunk-BHZ4CKUS.mjs → chunk-PXFIALUH.mjs} +77 -8
- package/dist/sdk/chunk-PXFIALUH.mjs.map +1 -0
- package/dist/sdk/{chunk-PVITVJ6J.mjs → chunk-RTKJXNZS.mjs} +32 -9
- package/dist/sdk/chunk-RTKJXNZS.mjs.map +1 -0
- package/dist/sdk/chunk-VW2GBXQT.mjs +606 -0
- package/dist/sdk/chunk-VW2GBXQT.mjs.map +1 -0
- package/dist/sdk/{config-RQQPMLRD.mjs → config-5AUYQFHE.mjs} +2 -2
- package/dist/sdk/config-6CUVEH7H.mjs +16 -0
- package/dist/sdk/config-6CUVEH7H.mjs.map +1 -0
- package/dist/sdk/{github-frontend-6Q4BISZX.mjs → github-frontend-BZ4N3BFZ.mjs} +7 -3
- package/dist/sdk/github-frontend-BZ4N3BFZ.mjs.map +1 -0
- package/dist/sdk/host-4MT3EW2I.mjs +52 -0
- package/dist/sdk/{host-P5NQICP7.mjs → host-NYWXLIFC.mjs} +2 -2
- package/dist/sdk/host-NYWXLIFC.mjs.map +1 -0
- package/dist/sdk/{routing-DEY2AIXM.mjs → routing-6R42GXUO.mjs} +2 -2
- package/dist/sdk/routing-6R42GXUO.mjs.map +1 -0
- package/dist/sdk/routing-7FXPULTO.mjs +24 -0
- package/dist/sdk/routing-7FXPULTO.mjs.map +1 -0
- package/dist/sdk/sdk.d.mts +3 -1
- package/dist/sdk/sdk.d.ts +3 -1
- package/dist/sdk/sdk.js +12163 -11204
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +14 -10
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/slack-frontend-JUT3TYVC.mjs +821 -0
- package/dist/sdk/slack-frontend-JUT3TYVC.mjs.map +1 -0
- package/dist/sdk/workflow-check-provider-H3CUOLUD.mjs +28 -0
- package/dist/sdk/workflow-check-provider-H3CUOLUD.mjs.map +1 -0
- package/dist/sdk/workflow-check-provider-YUNNF4KC.mjs +28 -0
- package/dist/sdk/workflow-check-provider-YUNNF4KC.mjs.map +1 -0
- package/dist/sdk/workflow-registry-KFWSDSLM.mjs +12 -0
- package/dist/sdk/workflow-registry-KFWSDSLM.mjs.map +1 -0
- package/dist/slack/socket-runner.d.ts +2 -0
- package/dist/slack/socket-runner.d.ts.map +1 -1
- package/dist/state-machine/context/workflow-inputs.d.ts +20 -0
- package/dist/state-machine/context/workflow-inputs.d.ts.map +1 -0
- package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
- package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
- package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -1
- package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
- package/dist/state-machine/states/routing.d.ts +2 -1
- package/dist/state-machine/states/routing.d.ts.map +1 -1
- package/dist/traces/{run-2026-01-28T16-15-24-569Z.ndjson → run-2026-01-31T16-37-22-321Z.ndjson} +84 -84
- package/dist/traces/{run-2026-01-28T16-16-09-757Z.ndjson → run-2026-01-31T16-38-06-031Z.ndjson} +1013 -1013
- package/dist/types/config.d.ts +3 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/human-id.d.ts +12 -0
- package/dist/utils/human-id.d.ts.map +1 -0
- package/dist/utils/worktree-manager.d.ts +3 -0
- package/dist/utils/worktree-manager.d.ts.map +1 -1
- package/dist/workflow-executor.d.ts.map +1 -1
- package/dist/workflow-registry.d.ts +1 -0
- package/dist/workflow-registry.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/sdk/chunk-BHZ4CKUS.mjs.map +0 -1
- package/dist/sdk/chunk-PVITVJ6J.mjs.map +0 -1
- package/dist/sdk/chunk-YLQ4UN62.mjs.map +0 -1
- package/dist/sdk/github-frontend-6Q4BISZX.mjs.map +0 -1
- /package/dist/sdk/{check-provider-registry-AQ3JETBG.mjs.map → check-provider-registry-3KI5RKXT.mjs.map} +0 -0
- /package/dist/sdk/{config-RQQPMLRD.mjs.map → check-provider-registry-IYILYY35.mjs.map} +0 -0
- /package/dist/sdk/{routing-DEY2AIXM.mjs.map → config-5AUYQFHE.mjs.map} +0 -0
- /package/dist/sdk/{host-P5NQICP7.mjs.map → host-4MT3EW2I.mjs.map} +0 -0
|
@@ -0,0 +1,596 @@
|
|
|
1
|
+
# Migration Guide
|
|
2
|
+
|
|
3
|
+
This guide helps you upgrade Visor between versions, documenting breaking changes and how to adapt your configurations.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Version History Overview](#version-history-overview)
|
|
8
|
+
- [Configuration Key Changes](#configuration-key-changes)
|
|
9
|
+
- [Provider Changes](#provider-changes)
|
|
10
|
+
- [Breaking Changes by Version](#breaking-changes-by-version)
|
|
11
|
+
- [Migration Steps](#migration-steps)
|
|
12
|
+
- [Deprecation Warnings](#deprecation-warnings)
|
|
13
|
+
- [Compatibility Notes](#compatibility-notes)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Version History Overview
|
|
18
|
+
|
|
19
|
+
| Version | Key Changes |
|
|
20
|
+
|---------|-------------|
|
|
21
|
+
| 0.1.x | Current stable release with state machine engine |
|
|
22
|
+
| 0.1.40+ | Workspace isolation, git-checkout provider |
|
|
23
|
+
| 0.1.30+ | Lifecycle hooks standardization (`on_init`) |
|
|
24
|
+
| 0.1.20+ | Transitions DSL, memory provider enhancements |
|
|
25
|
+
| 0.1.10+ | Routing system (`on_success`, `on_fail`, `on_finish`) |
|
|
26
|
+
| 0.1.0 | Initial release with basic check providers |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Configuration Key Changes
|
|
31
|
+
|
|
32
|
+
### `args` to `command_args` (MCP Provider)
|
|
33
|
+
|
|
34
|
+
The MCP provider renamed `args` to `command_args` for stdio transport to avoid confusion with method arguments.
|
|
35
|
+
|
|
36
|
+
**Before:**
|
|
37
|
+
```yaml
|
|
38
|
+
steps:
|
|
39
|
+
mcp-check:
|
|
40
|
+
type: mcp
|
|
41
|
+
transport: stdio
|
|
42
|
+
command: npx
|
|
43
|
+
args: ["-y", "@probelabs/probe@latest", "mcp"]
|
|
44
|
+
method: search_code
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**After:**
|
|
48
|
+
```yaml
|
|
49
|
+
steps:
|
|
50
|
+
mcp-check:
|
|
51
|
+
type: mcp
|
|
52
|
+
transport: stdio
|
|
53
|
+
command: npx
|
|
54
|
+
command_args: ["-y", "@probelabs/probe@latest", "mcp"]
|
|
55
|
+
method: search_code
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### `checks` to `steps` (Terminology)
|
|
59
|
+
|
|
60
|
+
Visor now uses `steps:` instead of `checks:` to better reflect workflow orchestration capabilities. Both keys work identically for backward compatibility.
|
|
61
|
+
|
|
62
|
+
**Before:**
|
|
63
|
+
```yaml
|
|
64
|
+
version: "1.0"
|
|
65
|
+
checks:
|
|
66
|
+
security-review:
|
|
67
|
+
type: ai
|
|
68
|
+
prompt: "Review for security issues"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**After (Recommended):**
|
|
72
|
+
```yaml
|
|
73
|
+
version: "1.0"
|
|
74
|
+
steps:
|
|
75
|
+
security-review:
|
|
76
|
+
type: ai
|
|
77
|
+
prompt: "Review for security issues"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### `custom_prompt` to `system_prompt` (AI Provider)
|
|
81
|
+
|
|
82
|
+
The AI provider renamed `custom_prompt` to `system_prompt` for clarity.
|
|
83
|
+
|
|
84
|
+
**Before:**
|
|
85
|
+
```yaml
|
|
86
|
+
steps:
|
|
87
|
+
ai-check:
|
|
88
|
+
type: ai
|
|
89
|
+
ai:
|
|
90
|
+
custom_prompt: "You are a security expert..."
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**After:**
|
|
94
|
+
```yaml
|
|
95
|
+
steps:
|
|
96
|
+
ai-check:
|
|
97
|
+
type: ai
|
|
98
|
+
ai:
|
|
99
|
+
system_prompt: "You are a security expert..."
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### `failure_conditions` to `fail_if` (Simplified)
|
|
103
|
+
|
|
104
|
+
The verbose `failure_conditions` object has been replaced with a simpler `fail_if` expression.
|
|
105
|
+
|
|
106
|
+
**Before:**
|
|
107
|
+
```yaml
|
|
108
|
+
steps:
|
|
109
|
+
quality-check:
|
|
110
|
+
type: ai
|
|
111
|
+
failure_conditions:
|
|
112
|
+
high_severity:
|
|
113
|
+
condition: "output.issues?.filter(i => i.severity === 'error').length > 0"
|
|
114
|
+
message: "Critical issues found"
|
|
115
|
+
severity: error
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**After:**
|
|
119
|
+
```yaml
|
|
120
|
+
steps:
|
|
121
|
+
quality-check:
|
|
122
|
+
type: ai
|
|
123
|
+
fail_if: "output.issues?.filter(i => i.severity === 'error').length > 0"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### `include` to `extends` (Configuration Inheritance)
|
|
127
|
+
|
|
128
|
+
The `include` key has been renamed to `extends` to better match common configuration patterns.
|
|
129
|
+
|
|
130
|
+
**Before:**
|
|
131
|
+
```yaml
|
|
132
|
+
version: "1.0"
|
|
133
|
+
include:
|
|
134
|
+
- ./base-config.yaml
|
|
135
|
+
- ./team-standards.yaml
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**After:**
|
|
139
|
+
```yaml
|
|
140
|
+
version: "1.0"
|
|
141
|
+
extends:
|
|
142
|
+
- ./base-config.yaml
|
|
143
|
+
- ./team-standards.yaml
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Provider Changes
|
|
149
|
+
|
|
150
|
+
### New Providers
|
|
151
|
+
|
|
152
|
+
The following providers have been added:
|
|
153
|
+
|
|
154
|
+
| Provider | Type | Description |
|
|
155
|
+
|----------|------|-------------|
|
|
156
|
+
| `git-checkout` | `git-checkout` | Checkout git repositories with worktree support |
|
|
157
|
+
| `workflow` | `workflow` | Invoke reusable workflows |
|
|
158
|
+
| `human-input` | `human-input` | Request user input in workflows |
|
|
159
|
+
| `script` | `script` | Execute custom JavaScript logic |
|
|
160
|
+
| `log` | `log` | Debug logging (replaces `logger`) |
|
|
161
|
+
| `github` | `github` | Native GitHub API operations |
|
|
162
|
+
|
|
163
|
+
### Provider Type Renames
|
|
164
|
+
|
|
165
|
+
| Old Type | New Type | Notes |
|
|
166
|
+
|----------|----------|-------|
|
|
167
|
+
| `webhook` | `http` | For output webhooks |
|
|
168
|
+
| (new) | `http_input` | For receiving webhooks |
|
|
169
|
+
| (new) | `http_client` | For fetching from APIs |
|
|
170
|
+
| `logger` | `log` | Debug logging |
|
|
171
|
+
|
|
172
|
+
**Before:**
|
|
173
|
+
```yaml
|
|
174
|
+
steps:
|
|
175
|
+
notify:
|
|
176
|
+
type: webhook
|
|
177
|
+
url: https://slack.webhook.url
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**After:**
|
|
181
|
+
```yaml
|
|
182
|
+
steps:
|
|
183
|
+
notify:
|
|
184
|
+
type: http
|
|
185
|
+
url: https://slack.webhook.url
|
|
186
|
+
method: POST
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### MCP Provider Transport Types
|
|
190
|
+
|
|
191
|
+
The MCP provider now supports multiple transports:
|
|
192
|
+
|
|
193
|
+
| Transport | Description |
|
|
194
|
+
|-----------|-------------|
|
|
195
|
+
| `stdio` | Local command via stdin/stdout (default) |
|
|
196
|
+
| `sse` | Server-Sent Events (legacy) |
|
|
197
|
+
| `http` | Modern Streamable HTTP |
|
|
198
|
+
| `custom` | YAML-defined tools |
|
|
199
|
+
|
|
200
|
+
**Example with explicit transport:**
|
|
201
|
+
```yaml
|
|
202
|
+
steps:
|
|
203
|
+
mcp-tool:
|
|
204
|
+
type: mcp
|
|
205
|
+
transport: stdio # Explicitly specify transport
|
|
206
|
+
command: npx
|
|
207
|
+
command_args: ["-y", "@probelabs/probe@latest", "mcp"]
|
|
208
|
+
method: search_code
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Breaking Changes by Version
|
|
214
|
+
|
|
215
|
+
### Version 0.1.40+: Workspace Isolation
|
|
216
|
+
|
|
217
|
+
**What Changed:**
|
|
218
|
+
- Introduced workspace isolation for sandboxed execution
|
|
219
|
+
- Steps now execute in isolated `/tmp/visor-workspaces/<sessionId>/` directories
|
|
220
|
+
- Main project is automatically worktree-cloned into the workspace
|
|
221
|
+
|
|
222
|
+
**Impact:**
|
|
223
|
+
- File paths in outputs may be relative to workspace, not original directory
|
|
224
|
+
- Commands should use `{{ outputs['checkout'].path }}` for checkout paths
|
|
225
|
+
|
|
226
|
+
**Migration:**
|
|
227
|
+
```yaml
|
|
228
|
+
# New workspace configuration (optional)
|
|
229
|
+
workspace:
|
|
230
|
+
enabled: true
|
|
231
|
+
base_path: /tmp/visor-workspaces
|
|
232
|
+
cleanup_on_exit: true
|
|
233
|
+
|
|
234
|
+
steps:
|
|
235
|
+
checkout:
|
|
236
|
+
type: git-checkout
|
|
237
|
+
ref: "{{ pr.head }}"
|
|
238
|
+
|
|
239
|
+
build:
|
|
240
|
+
type: command
|
|
241
|
+
depends_on: [checkout]
|
|
242
|
+
# Use workspace path from checkout output
|
|
243
|
+
exec: "cd {{ outputs.checkout.path }} && npm run build"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Version 0.1.30+: Lifecycle Hooks (`on_init`)
|
|
247
|
+
|
|
248
|
+
**What Changed:**
|
|
249
|
+
- Added `on_init` hook for preprocessing before step execution
|
|
250
|
+
- Unified invocation syntax for tools, steps, and workflows
|
|
251
|
+
- Arguments passed via `with:` directive
|
|
252
|
+
|
|
253
|
+
**Migration:**
|
|
254
|
+
If you used `depends_on` for preprocessing, consider migrating to `on_init`:
|
|
255
|
+
|
|
256
|
+
**Before:**
|
|
257
|
+
```yaml
|
|
258
|
+
steps:
|
|
259
|
+
fetch-jira:
|
|
260
|
+
type: mcp
|
|
261
|
+
method: fetch-jira
|
|
262
|
+
methodArgs:
|
|
263
|
+
issue_key: "PROJ-123"
|
|
264
|
+
|
|
265
|
+
ai-review:
|
|
266
|
+
type: ai
|
|
267
|
+
depends_on: [fetch-jira]
|
|
268
|
+
prompt: |
|
|
269
|
+
JIRA: {{ outputs['fetch-jira'] }}
|
|
270
|
+
Review the PR...
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**After:**
|
|
274
|
+
```yaml
|
|
275
|
+
tools:
|
|
276
|
+
fetch-jira:
|
|
277
|
+
exec: "curl https://jira.../issue/{{ args.issue_key }}"
|
|
278
|
+
parseJson: true
|
|
279
|
+
|
|
280
|
+
steps:
|
|
281
|
+
ai-review:
|
|
282
|
+
type: ai
|
|
283
|
+
on_init:
|
|
284
|
+
run:
|
|
285
|
+
- tool: fetch-jira
|
|
286
|
+
with:
|
|
287
|
+
issue_key: "PROJ-123"
|
|
288
|
+
as: jira-context
|
|
289
|
+
prompt: |
|
|
290
|
+
JIRA: {{ outputs['jira-context'] }}
|
|
291
|
+
Review the PR...
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Version 0.1.20+: Transitions DSL
|
|
295
|
+
|
|
296
|
+
**What Changed:**
|
|
297
|
+
- Added declarative `transitions` array as alternative to `goto_js`
|
|
298
|
+
- Transitions evaluated in order; first matching rule wins
|
|
299
|
+
- Helper functions available in `when` expressions: `any()`, `all()`, `none()`, `count()`
|
|
300
|
+
|
|
301
|
+
**Migration:**
|
|
302
|
+
Complex `goto_js` logic can be simplified with transitions:
|
|
303
|
+
|
|
304
|
+
**Before:**
|
|
305
|
+
```yaml
|
|
306
|
+
steps:
|
|
307
|
+
validate:
|
|
308
|
+
type: ai
|
|
309
|
+
on_success:
|
|
310
|
+
goto_js: |
|
|
311
|
+
if (outputs['validate'].score >= 90) return 'publish';
|
|
312
|
+
if (outputs['validate'].score >= 70) return 'review';
|
|
313
|
+
return 'reject';
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
**After:**
|
|
317
|
+
```yaml
|
|
318
|
+
steps:
|
|
319
|
+
validate:
|
|
320
|
+
type: ai
|
|
321
|
+
on_success:
|
|
322
|
+
transitions:
|
|
323
|
+
- when: "outputs['validate'].score >= 90"
|
|
324
|
+
to: publish
|
|
325
|
+
- when: "outputs['validate'].score >= 70"
|
|
326
|
+
to: review
|
|
327
|
+
- when: "true"
|
|
328
|
+
to: reject
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
### Version 0.1.10+: Routing System
|
|
332
|
+
|
|
333
|
+
**What Changed:**
|
|
334
|
+
- Introduced `on_success`, `on_fail`, `on_finish` hooks
|
|
335
|
+
- Added `routing` configuration for global defaults
|
|
336
|
+
- Retry policies with backoff (fixed/exponential)
|
|
337
|
+
- Loop protection via `max_loops`
|
|
338
|
+
|
|
339
|
+
**Migration:**
|
|
340
|
+
Add routing configuration to enable retry and routing features:
|
|
341
|
+
|
|
342
|
+
```yaml
|
|
343
|
+
version: "2.0"
|
|
344
|
+
|
|
345
|
+
routing:
|
|
346
|
+
max_loops: 10
|
|
347
|
+
defaults:
|
|
348
|
+
on_fail:
|
|
349
|
+
retry:
|
|
350
|
+
max: 2
|
|
351
|
+
backoff:
|
|
352
|
+
mode: exponential
|
|
353
|
+
delay_ms: 1000
|
|
354
|
+
|
|
355
|
+
steps:
|
|
356
|
+
flaky-step:
|
|
357
|
+
type: command
|
|
358
|
+
exec: ./sometimes-fails.sh
|
|
359
|
+
on_fail:
|
|
360
|
+
retry:
|
|
361
|
+
max: 3
|
|
362
|
+
goto: setup-step # Jump to ancestor on failure
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### Memory Provider Changes
|
|
366
|
+
|
|
367
|
+
**What Changed:**
|
|
368
|
+
- Added `script` type for complex JavaScript logic (previously part of memory provider)
|
|
369
|
+
- Memory operations now require explicit `operation` key
|
|
370
|
+
- Added `value_js` for dynamic value computation
|
|
371
|
+
|
|
372
|
+
**Migration:**
|
|
373
|
+
|
|
374
|
+
**Before (if using inline JS in memory):**
|
|
375
|
+
```yaml
|
|
376
|
+
steps:
|
|
377
|
+
complex-calc:
|
|
378
|
+
type: memory
|
|
379
|
+
key: result
|
|
380
|
+
value: |
|
|
381
|
+
// This was never valid, but some tried it
|
|
382
|
+
const x = 1 + 2;
|
|
383
|
+
return x;
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
**After:**
|
|
387
|
+
```yaml
|
|
388
|
+
steps:
|
|
389
|
+
complex-calc:
|
|
390
|
+
type: script
|
|
391
|
+
content: |
|
|
392
|
+
const x = 1 + 2;
|
|
393
|
+
memory.set('result', x);
|
|
394
|
+
return x;
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## Migration Steps
|
|
400
|
+
|
|
401
|
+
### Step 1: Update Configuration Version
|
|
402
|
+
|
|
403
|
+
If using routing features, update to version "2.0":
|
|
404
|
+
|
|
405
|
+
```yaml
|
|
406
|
+
version: "2.0" # Required for routing features
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
### Step 2: Rename Deprecated Keys
|
|
410
|
+
|
|
411
|
+
Use the following sed commands or manually update:
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
# Rename args to command_args in MCP checks
|
|
415
|
+
sed -i 's/^\(\s*\)args:/\1command_args:/' .visor.yaml
|
|
416
|
+
|
|
417
|
+
# Rename checks to steps (optional but recommended)
|
|
418
|
+
sed -i 's/^checks:/steps:/' .visor.yaml
|
|
419
|
+
|
|
420
|
+
# Rename custom_prompt to system_prompt
|
|
421
|
+
sed -i 's/custom_prompt:/system_prompt:/' .visor.yaml
|
|
422
|
+
|
|
423
|
+
# Rename include to extends
|
|
424
|
+
sed -i 's/^include:/extends:/' .visor.yaml
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
### Step 3: Validate Configuration
|
|
428
|
+
|
|
429
|
+
Run the validation command to check for errors:
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
visor validate --config .visor.yaml
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### Step 4: Update Provider Types
|
|
436
|
+
|
|
437
|
+
Replace deprecated provider types:
|
|
438
|
+
|
|
439
|
+
| Find | Replace With |
|
|
440
|
+
|------|--------------|
|
|
441
|
+
| `type: webhook` | `type: http` |
|
|
442
|
+
| `type: logger` | `type: log` |
|
|
443
|
+
|
|
444
|
+
### Step 5: Test in Dry-Run Mode
|
|
445
|
+
|
|
446
|
+
Before deploying, test your configuration:
|
|
447
|
+
|
|
448
|
+
```bash
|
|
449
|
+
# Test with debug output
|
|
450
|
+
visor --check all --debug
|
|
451
|
+
|
|
452
|
+
# Or test specific checks
|
|
453
|
+
visor --check security --debug
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
## Deprecation Warnings
|
|
459
|
+
|
|
460
|
+
### Features Scheduled for Removal
|
|
461
|
+
|
|
462
|
+
| Feature | Deprecated In | Removal Target | Alternative |
|
|
463
|
+
|---------|--------------|----------------|-------------|
|
|
464
|
+
| `checks:` key | 0.1.30 | 1.0.0 | Use `steps:` |
|
|
465
|
+
| `failure_conditions` | 0.1.20 | 1.0.0 | Use `fail_if` |
|
|
466
|
+
| `custom_prompt` | 0.1.20 | 1.0.0 | Use `system_prompt` |
|
|
467
|
+
| `include:` key | 0.1.30 | 1.0.0 | Use `extends:` |
|
|
468
|
+
| `args` in MCP stdio | 0.1.25 | 1.0.0 | Use `command_args` |
|
|
469
|
+
|
|
470
|
+
### Deprecation Messages
|
|
471
|
+
|
|
472
|
+
When using deprecated features, Visor logs warnings:
|
|
473
|
+
|
|
474
|
+
```
|
|
475
|
+
[WARN] 'checks:' is deprecated, use 'steps:' instead
|
|
476
|
+
[WARN] 'failure_conditions' is deprecated, use 'fail_if' instead
|
|
477
|
+
[WARN] 'args' in MCP stdio transport is deprecated, use 'command_args'
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
## Compatibility Notes
|
|
483
|
+
|
|
484
|
+
### GitHub Action vs CLI
|
|
485
|
+
|
|
486
|
+
Both modes share the same configuration format with minor differences:
|
|
487
|
+
|
|
488
|
+
| Feature | GitHub Action | CLI |
|
|
489
|
+
|---------|--------------|-----|
|
|
490
|
+
| Event triggers (`on:`) | Automatic from webhook | Manual or simulated |
|
|
491
|
+
| PR context | From GitHub event | From git/API |
|
|
492
|
+
| Output | PR comments, check runs | Console, file |
|
|
493
|
+
| Secrets | GitHub secrets | Environment variables |
|
|
494
|
+
|
|
495
|
+
### Node.js Version Requirements
|
|
496
|
+
|
|
497
|
+
| Visor Version | Node.js Requirement |
|
|
498
|
+
|---------------|---------------------|
|
|
499
|
+
| 0.1.x | Node.js 18+ |
|
|
500
|
+
| 1.0.0 (planned) | Node.js 20+ |
|
|
501
|
+
|
|
502
|
+
### Dependencies
|
|
503
|
+
|
|
504
|
+
Visor's core dependencies:
|
|
505
|
+
|
|
506
|
+
| Dependency | Purpose |
|
|
507
|
+
|------------|---------|
|
|
508
|
+
| `@modelcontextprotocol/sdk` | MCP protocol support |
|
|
509
|
+
| `liquidjs` | Template rendering |
|
|
510
|
+
| `js-yaml` | YAML parsing |
|
|
511
|
+
| `ajv` | JSON Schema validation |
|
|
512
|
+
|
|
513
|
+
### Environment Variables
|
|
514
|
+
|
|
515
|
+
Key environment variables for migration:
|
|
516
|
+
|
|
517
|
+
| Variable | Purpose |
|
|
518
|
+
|----------|---------|
|
|
519
|
+
| `VISOR_WORKSPACE_PATH` | Override workspace base path |
|
|
520
|
+
| `VISOR_WORKTREE_PATH` | Override git worktree cache |
|
|
521
|
+
| `VISOR_TELEMETRY_ENABLED` | Enable OpenTelemetry tracing |
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
525
|
+
## Troubleshooting
|
|
526
|
+
|
|
527
|
+
### Common Migration Issues
|
|
528
|
+
|
|
529
|
+
#### Issue: "Invalid check type" error
|
|
530
|
+
|
|
531
|
+
**Cause:** Using old provider type names.
|
|
532
|
+
|
|
533
|
+
**Solution:** Update to new type names (see [Provider Type Renames](#provider-type-renames)).
|
|
534
|
+
|
|
535
|
+
#### Issue: MCP check fails with "args not recognized"
|
|
536
|
+
|
|
537
|
+
**Cause:** Using `args` instead of `command_args` for stdio transport.
|
|
538
|
+
|
|
539
|
+
**Solution:** Rename `args` to `command_args` in MCP checks.
|
|
540
|
+
|
|
541
|
+
#### Issue: Configuration validation fails
|
|
542
|
+
|
|
543
|
+
**Cause:** Schema changes between versions.
|
|
544
|
+
|
|
545
|
+
**Solution:** Run `visor validate` and fix reported issues.
|
|
546
|
+
|
|
547
|
+
#### Issue: Outputs not available in templates
|
|
548
|
+
|
|
549
|
+
**Cause:** Using old output access patterns.
|
|
550
|
+
|
|
551
|
+
**Solution:** Use `outputs['step-name']` or `outputs.history['step-name']` for history.
|
|
552
|
+
|
|
553
|
+
### Getting Help
|
|
554
|
+
|
|
555
|
+
- [Configuration Documentation](./configuration.md)
|
|
556
|
+
- [GitHub Issues](https://github.com/probelabs/visor/issues)
|
|
557
|
+
- [Examples Directory](../examples/)
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## Quick Reference
|
|
562
|
+
|
|
563
|
+
### Configuration Changes Checklist
|
|
564
|
+
|
|
565
|
+
- [ ] Update `version:` to "2.0" if using routing
|
|
566
|
+
- [ ] Rename `checks:` to `steps:`
|
|
567
|
+
- [ ] Rename `args:` to `command_args:` in MCP stdio checks
|
|
568
|
+
- [ ] Rename `custom_prompt:` to `system_prompt:`
|
|
569
|
+
- [ ] Rename `include:` to `extends:`
|
|
570
|
+
- [ ] Replace `failure_conditions:` with `fail_if:`
|
|
571
|
+
- [ ] Update provider types (`webhook` to `http`, `logger` to `log`)
|
|
572
|
+
- [ ] Run `visor validate` to check configuration
|
|
573
|
+
|
|
574
|
+
### Version-Specific Features
|
|
575
|
+
|
|
576
|
+
```yaml
|
|
577
|
+
# Version 1.0 features
|
|
578
|
+
version: "1.0"
|
|
579
|
+
steps:
|
|
580
|
+
basic-check:
|
|
581
|
+
type: ai
|
|
582
|
+
prompt: "Review code"
|
|
583
|
+
|
|
584
|
+
# Version 2.0 features (routing)
|
|
585
|
+
version: "2.0"
|
|
586
|
+
routing:
|
|
587
|
+
max_loops: 10
|
|
588
|
+
steps:
|
|
589
|
+
with-routing:
|
|
590
|
+
type: command
|
|
591
|
+
exec: ./script.sh
|
|
592
|
+
on_fail:
|
|
593
|
+
retry:
|
|
594
|
+
max: 3
|
|
595
|
+
goto: setup
|
|
596
|
+
```
|