@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
package/dist/docs/advanced-ai.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
##
|
|
1
|
+
## Advanced AI Features
|
|
2
2
|
|
|
3
3
|
### AI Session Reuse
|
|
4
4
|
Use `reuse_ai_session` on checks to continue conversation context with the AI across steps. This improves follow‑ups and consistency for follow‑on analysis and chat‑style flows.
|
|
@@ -26,6 +26,7 @@ steps:
|
|
|
26
26
|
depends_on: [security-remediation]
|
|
27
27
|
reuse_ai_session: true
|
|
28
28
|
session_mode: append # Share history - sees full conversation
|
|
29
|
+
```
|
|
29
30
|
|
|
30
31
|
#### Reusing your own session: `reuse_ai_session: self`
|
|
31
32
|
|
|
@@ -84,8 +85,7 @@ The corresponding testable example lives at:
|
|
|
84
85
|
|
|
85
86
|
- `examples/session-reuse-self.yaml`
|
|
86
87
|
|
|
87
|
-
This keeps the configuration small but shows how to wire `reuse_ai_session: self` and `session_mode: append` without touching higher
|
|
88
|
-
```
|
|
88
|
+
This keeps the configuration small but shows how to wire `reuse_ai_session: self` and `session_mode: append` without touching higher-level workflows like `tyk-assistant`.
|
|
89
89
|
|
|
90
90
|
**When to use each mode:**
|
|
91
91
|
- Use **`clone`** (default) when you want parallel follow-ups that don't interfere with each other
|
|
@@ -99,61 +99,67 @@ For PR events, Visor provides comprehensive code review context:
|
|
|
99
99
|
|
|
100
100
|
```xml
|
|
101
101
|
<pull_request>
|
|
102
|
+
<!-- Core pull request metadata including identification, branches, and change statistics -->
|
|
102
103
|
<metadata>
|
|
103
|
-
<number>123</number>
|
|
104
|
-
<title>Add user authentication</title>
|
|
105
|
-
<author>developer</author>
|
|
106
|
-
<base_branch>main</base_branch>
|
|
107
|
-
<target_branch>feature-auth</target_branch>
|
|
108
|
-
<total_additions>250</total_additions>
|
|
109
|
-
<total_deletions>50</total_deletions>
|
|
110
|
-
<files_changed_count>3</files_changed_count>
|
|
104
|
+
<number>123</number>
|
|
105
|
+
<title>Add user authentication</title>
|
|
106
|
+
<author>developer</author>
|
|
107
|
+
<base_branch>main</base_branch>
|
|
108
|
+
<target_branch>feature-auth</target_branch>
|
|
109
|
+
<total_additions>250</total_additions>
|
|
110
|
+
<total_deletions>50</total_deletions>
|
|
111
|
+
<files_changed_count>3</files_changed_count>
|
|
111
112
|
</metadata>
|
|
112
113
|
|
|
114
|
+
<!-- Raw diff header snippet for compatibility -->
|
|
115
|
+
<raw_diff_header>
|
|
116
|
+
diff --git a/src/auth.ts b/src/auth.ts
|
|
117
|
+
</raw_diff_header>
|
|
118
|
+
|
|
119
|
+
<!-- Full pull request description provided by the author -->
|
|
113
120
|
<description>
|
|
114
|
-
|
|
115
|
-
This PR implements JWT-based authentication with refresh token support
|
|
121
|
+
This PR implements JWT-based authentication with refresh token support
|
|
116
122
|
</description>
|
|
117
123
|
|
|
124
|
+
<!-- Complete unified diff showing all changes (processed with outline-diff) -->
|
|
118
125
|
<full_diff>
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
...
|
|
126
|
+
--- src/auth.ts
|
|
127
|
+
+++ src/auth.ts
|
|
128
|
+
@@ -1,3 +1,10 @@
|
|
129
|
+
+import jwt from 'jsonwebtoken';
|
|
130
|
+
...
|
|
125
131
|
</full_diff>
|
|
126
132
|
|
|
133
|
+
<!-- Diff of only the latest commit for incremental analysis (only present for pr_updated events) -->
|
|
127
134
|
<commit_diff>
|
|
128
|
-
|
|
129
|
-
<!-- Contains diff of just the latest commit pushed -->
|
|
135
|
+
<!-- Contains diff of just the latest commit pushed -->
|
|
130
136
|
</commit_diff>
|
|
131
137
|
|
|
138
|
+
<!-- Summary of all files changed with statistics -->
|
|
132
139
|
<files_summary>
|
|
133
|
-
|
|
134
|
-
<file index="1">
|
|
140
|
+
<file>
|
|
135
141
|
<filename>src/auth.ts</filename>
|
|
136
|
-
<status>modified</status>
|
|
137
|
-
<additions>120</additions>
|
|
138
|
-
<deletions>10</deletions>
|
|
142
|
+
<status>modified</status>
|
|
143
|
+
<additions>120</additions>
|
|
144
|
+
<deletions>10</deletions>
|
|
139
145
|
</file>
|
|
140
146
|
</files_summary>
|
|
141
147
|
|
|
142
|
-
<!--
|
|
148
|
+
<!-- The comment that triggered this analysis (only present for issue_comment events) -->
|
|
143
149
|
<triggering_comment>
|
|
144
150
|
<author>reviewer1</author>
|
|
145
151
|
<created_at>2024-01-16T15:30:00Z</created_at>
|
|
146
152
|
<body>/review --check security</body>
|
|
147
153
|
</triggering_comment>
|
|
148
154
|
|
|
149
|
-
<!--
|
|
155
|
+
<!-- Previous comments in chronological order (excluding triggering comment) -->
|
|
150
156
|
<comment_history>
|
|
151
|
-
<comment
|
|
157
|
+
<comment>
|
|
152
158
|
<author>reviewer2</author>
|
|
153
159
|
<created_at>2024-01-15T11:00:00Z</created_at>
|
|
154
160
|
<body>Please add unit tests for the authentication logic</body>
|
|
155
161
|
</comment>
|
|
156
|
-
<comment
|
|
162
|
+
<comment>
|
|
157
163
|
<author>developer</author>
|
|
158
164
|
<created_at>2024-01-15T14:30:00Z</created_at>
|
|
159
165
|
<body>Tests added in latest commit</body>
|
|
@@ -167,56 +173,57 @@ For issue events, Visor provides issue-specific context for intelligent assistan
|
|
|
167
173
|
|
|
168
174
|
```xml
|
|
169
175
|
<issue>
|
|
176
|
+
<!-- Core issue metadata including identification, status, and timeline information -->
|
|
170
177
|
<metadata>
|
|
171
|
-
<number>456</number>
|
|
172
|
-
<title>Feature request: Add dark mode</title>
|
|
173
|
-
<author>user123</author>
|
|
174
|
-
<state>open</state>
|
|
175
|
-
<created_at>2024-01-15T10:30:00Z</created_at>
|
|
176
|
-
<updated_at>2024-01-16T14:20:00Z</updated_at>
|
|
177
|
-
<comments_count>5</comments_count>
|
|
178
|
+
<number>456</number>
|
|
179
|
+
<title>Feature request: Add dark mode</title>
|
|
180
|
+
<author>user123</author>
|
|
181
|
+
<state>open</state>
|
|
182
|
+
<created_at>2024-01-15T10:30:00Z</created_at>
|
|
183
|
+
<updated_at>2024-01-16T14:20:00Z</updated_at>
|
|
184
|
+
<comments_count>5</comments_count>
|
|
178
185
|
</metadata>
|
|
179
186
|
|
|
187
|
+
<!-- Full issue description and body text provided by the issue author -->
|
|
180
188
|
<description>
|
|
181
|
-
|
|
182
|
-
I would like to request a dark mode feature for better accessibility...
|
|
189
|
+
I would like to request a dark mode feature for better accessibility...
|
|
183
190
|
</description>
|
|
184
191
|
|
|
192
|
+
<!-- Applied labels for issue categorization and organization -->
|
|
185
193
|
<labels>
|
|
186
|
-
<!-- GitHub labels applied to categorize the issue -->
|
|
187
194
|
<label>enhancement</label>
|
|
188
195
|
<label>good first issue</label>
|
|
189
196
|
<label>ui/ux</label>
|
|
190
197
|
</labels>
|
|
191
198
|
|
|
199
|
+
<!-- Users assigned to work on this issue -->
|
|
192
200
|
<assignees>
|
|
193
|
-
<!-- Users assigned to work on this issue -->
|
|
194
201
|
<assignee>developer1</assignee>
|
|
195
202
|
<assignee>developer2</assignee>
|
|
196
203
|
</assignees>
|
|
197
204
|
|
|
205
|
+
<!-- Associated project milestone information -->
|
|
198
206
|
<milestone>
|
|
199
|
-
<!-- Project milestone this issue is part of (if any) -->
|
|
200
207
|
<title>v2.0 Release</title>
|
|
201
|
-
<state>open</state>
|
|
202
|
-
<due_on>2024-03-01T00:00:00Z</due_on>
|
|
208
|
+
<state>open</state>
|
|
209
|
+
<due_on>2024-03-01T00:00:00Z</due_on>
|
|
203
210
|
</milestone>
|
|
204
211
|
|
|
205
|
-
<!--
|
|
212
|
+
<!-- The comment that triggered this analysis (only present for issue_comment events) -->
|
|
206
213
|
<triggering_comment>
|
|
207
|
-
<author>user456</author>
|
|
208
|
-
<created_at>2024-01-16T15:30:00Z</created_at>
|
|
209
|
-
<body>/review security --focus authentication</body>
|
|
214
|
+
<author>user456</author>
|
|
215
|
+
<created_at>2024-01-16T15:30:00Z</created_at>
|
|
216
|
+
<body>/review security --focus authentication</body>
|
|
210
217
|
</triggering_comment>
|
|
211
218
|
|
|
212
|
-
<!--
|
|
219
|
+
<!-- Previous comments in chronological order (excluding triggering comment) -->
|
|
213
220
|
<comment_history>
|
|
214
|
-
<comment
|
|
221
|
+
<comment>
|
|
215
222
|
<author>developer1</author>
|
|
216
223
|
<created_at>2024-01-15T11:00:00Z</created_at>
|
|
217
224
|
<body>This is a great idea! I'll start working on it.</body>
|
|
218
225
|
</comment>
|
|
219
|
-
<comment
|
|
226
|
+
<comment>
|
|
220
227
|
<author>user123</author>
|
|
221
228
|
<created_at>2024-01-15T14:30:00Z</created_at>
|
|
222
229
|
<body>Thanks! Please consider accessibility standards.</body>
|
|
@@ -7,8 +7,8 @@ Visor supports multiple AI providers. Configure one via environment variables.
|
|
|
7
7
|
| Provider | Env Var | Example Models |
|
|
8
8
|
|----------|---------|----------------|
|
|
9
9
|
| Google Gemini | `GOOGLE_API_KEY` | `gemini-2.0-flash-exp`, `gemini-1.5-pro` |
|
|
10
|
-
| Anthropic Claude | `ANTHROPIC_API_KEY` | `claude-3-
|
|
11
|
-
| OpenAI GPT | `OPENAI_API_KEY` | `gpt-
|
|
10
|
+
| Anthropic Claude | `ANTHROPIC_API_KEY` | `claude-3-5-sonnet-latest`, `claude-3-opus-latest` |
|
|
11
|
+
| OpenAI GPT | `OPENAI_API_KEY` | `gpt-4o`, `gpt-4-turbo`, `gpt-4` |
|
|
12
12
|
| AWS Bedrock | AWS credentials (see below) | `anthropic.claude-sonnet-4-20250514-v1:0` (default) |
|
|
13
13
|
|
|
14
14
|
### GitHub Actions Setup
|
|
@@ -122,10 +122,12 @@ Visor exposes Probe’s prompt controls to adjust the agent’s behavior for a g
|
|
|
122
122
|
Accepted keys
|
|
123
123
|
- Under `ai:`
|
|
124
124
|
- `prompt_type`: string — Probe persona/family, e.g., `engineer`, `code-review`, `architect`.
|
|
125
|
-
- `
|
|
125
|
+
- `system_prompt`: string — Baseline/system prompt prepended by the SDK (preferred).
|
|
126
|
+
- `custom_prompt`: string — Alias for `system_prompt` (deprecated, use `system_prompt` instead).
|
|
126
127
|
- At the check level (aliases if you prefer not to nest):
|
|
127
128
|
- `ai_prompt_type`: string
|
|
128
|
-
- `
|
|
129
|
+
- `ai_system_prompt`: string (preferred)
|
|
130
|
+
- `ai_custom_prompt`: string (deprecated alias for `ai_system_prompt`)
|
|
129
131
|
- `ai_persona`: string — optional hint we prepend as a first line: `Persona: <value>`.
|
|
130
132
|
|
|
131
133
|
Examples
|
|
@@ -138,7 +140,7 @@ steps:
|
|
|
138
140
|
provider: anthropic
|
|
139
141
|
model: claude-3-5-sonnet-latest
|
|
140
142
|
prompt_type: engineer
|
|
141
|
-
|
|
143
|
+
system_prompt: |
|
|
142
144
|
You are a specialist in analyzing security vulnerabilities.
|
|
143
145
|
Focus on injection, authn/z, crypto, and data exposure.
|
|
144
146
|
schema: code-review
|
|
@@ -148,14 +150,13 @@ steps:
|
|
|
148
150
|
quick-architect-check:
|
|
149
151
|
type: ai
|
|
150
152
|
ai_prompt_type: architect # check-level alias
|
|
151
|
-
|
|
153
|
+
ai_system_prompt: "Favor modular boundaries and low coupling."
|
|
152
154
|
prompt: "Assess high-level design risks in the diff"
|
|
153
155
|
```
|
|
154
156
|
|
|
155
157
|
Notes
|
|
156
158
|
- If `prompt_type` is omitted and a `schema` is provided, Visor defaults to `code-review`.
|
|
157
159
|
- `ai_persona` is a lightweight hint added as a first line; prefer `prompt_type` when integrating with Probe personas.
|
|
158
|
-
```
|
|
159
160
|
|
|
160
161
|
#### AWS Bedrock Specific Configuration
|
|
161
162
|
|
|
@@ -280,7 +281,7 @@ steps:
|
|
|
280
281
|
prompt: "Fix the security vulnerabilities found in the code"
|
|
281
282
|
ai:
|
|
282
283
|
provider: anthropic
|
|
283
|
-
model: claude-3-opus
|
|
284
|
+
model: claude-3-opus-latest
|
|
284
285
|
allowEdit: true # Enable Edit and Create tools
|
|
285
286
|
|
|
286
287
|
read-only-review:
|
|
@@ -394,7 +395,7 @@ steps:
|
|
|
394
395
|
- Cryptographic weaknesses
|
|
395
396
|
ai:
|
|
396
397
|
provider: anthropic
|
|
397
|
-
model: claude-3-opus
|
|
398
|
+
model: claude-3-opus-latest
|
|
398
399
|
enableDelegate: true # Enable task delegation to subagents
|
|
399
400
|
|
|
400
401
|
focused-sql-injection-check:
|
|
@@ -434,7 +435,7 @@ steps:
|
|
|
434
435
|
prompt: "Analyze the project structure and git status"
|
|
435
436
|
ai:
|
|
436
437
|
provider: anthropic
|
|
437
|
-
model: claude-3-opus
|
|
438
|
+
model: claude-3-opus-latest
|
|
438
439
|
allowBash: true # Simple one-line enable
|
|
439
440
|
```
|
|
440
441
|
|
|
@@ -527,9 +528,96 @@ steps:
|
|
|
527
528
|
|
|
528
529
|
**Security Note:** Bash command execution respects existing security boundaries and permissions. Commands run with the same privileges as the Visor process. Always review and test bash configurations before deploying to production environments.
|
|
529
530
|
|
|
531
|
+
#### Retry Configuration (`retry`)
|
|
532
|
+
|
|
533
|
+
Configure automatic retries for AI provider calls when transient errors occur:
|
|
534
|
+
|
|
535
|
+
```yaml
|
|
536
|
+
steps:
|
|
537
|
+
resilient-review:
|
|
538
|
+
type: ai
|
|
539
|
+
prompt: "Analyze code for security vulnerabilities"
|
|
540
|
+
ai:
|
|
541
|
+
provider: anthropic
|
|
542
|
+
retry:
|
|
543
|
+
maxRetries: 3 # Maximum retry attempts (0-50)
|
|
544
|
+
initialDelay: 1000 # Initial delay in ms (0-60000)
|
|
545
|
+
maxDelay: 30000 # Maximum delay cap in ms (0-300000)
|
|
546
|
+
backoffFactor: 2 # Exponential backoff multiplier (1-10)
|
|
547
|
+
retryableErrors: # Custom error patterns to retry on
|
|
548
|
+
- "rate limit"
|
|
549
|
+
- "timeout"
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
**Configuration Options:**
|
|
553
|
+
|
|
554
|
+
- **`maxRetries`** (number): Maximum retry attempts. Default varies by provider.
|
|
555
|
+
- **`initialDelay`** (number): Initial delay between retries in milliseconds.
|
|
556
|
+
- **`maxDelay`** (number): Maximum delay cap to prevent excessive waits.
|
|
557
|
+
- **`backoffFactor`** (number): Multiplier for exponential backoff between retries.
|
|
558
|
+
- **`retryableErrors`** (string[]): Custom error message patterns that should trigger retries.
|
|
559
|
+
|
|
560
|
+
#### Fallback Configuration (`fallback`)
|
|
561
|
+
|
|
562
|
+
Configure fallback providers when the primary AI provider fails:
|
|
563
|
+
|
|
564
|
+
```yaml
|
|
565
|
+
steps:
|
|
566
|
+
fault-tolerant-review:
|
|
567
|
+
type: ai
|
|
568
|
+
prompt: "Review code for quality issues"
|
|
569
|
+
ai:
|
|
570
|
+
provider: anthropic
|
|
571
|
+
model: claude-3-5-sonnet-latest
|
|
572
|
+
fallback:
|
|
573
|
+
strategy: custom # 'same-model', 'same-provider', 'any', or 'custom'
|
|
574
|
+
maxTotalAttempts: 5 # Maximum attempts across all providers
|
|
575
|
+
auto: true # Auto-detect fallbacks from available env vars
|
|
576
|
+
providers: # Custom fallback chain
|
|
577
|
+
- provider: openai
|
|
578
|
+
model: gpt-4o
|
|
579
|
+
- provider: google
|
|
580
|
+
model: gemini-2.0-flash-exp
|
|
581
|
+
```
|
|
582
|
+
|
|
583
|
+
**Configuration Options:**
|
|
584
|
+
|
|
585
|
+
- **`strategy`** (string): Fallback strategy:
|
|
586
|
+
- `same-model`: Retry with the same model
|
|
587
|
+
- `same-provider`: Try different models from the same provider
|
|
588
|
+
- `any`: Try any available provider
|
|
589
|
+
- `custom`: Use the specified providers list
|
|
590
|
+
- **`providers`** (array): Array of fallback provider configurations
|
|
591
|
+
- **`maxTotalAttempts`** (number): Maximum total attempts across all providers
|
|
592
|
+
- **`auto`** (boolean): Automatically detect and use fallback providers from environment variables
|
|
593
|
+
|
|
594
|
+
#### Completion Prompt (`completion_prompt`)
|
|
595
|
+
|
|
596
|
+
Run a validation or review prompt after the AI completes its primary task:
|
|
597
|
+
|
|
598
|
+
```yaml
|
|
599
|
+
steps:
|
|
600
|
+
validated-review:
|
|
601
|
+
type: ai
|
|
602
|
+
prompt: "Analyze the codebase for security issues"
|
|
603
|
+
ai:
|
|
604
|
+
provider: anthropic
|
|
605
|
+
completion_prompt: |
|
|
606
|
+
Review your analysis above. Verify that:
|
|
607
|
+
1. All findings have specific file and line references
|
|
608
|
+
2. Severity levels are appropriate
|
|
609
|
+
3. Recommendations are actionable
|
|
610
|
+
If any issues are found, revise your response.
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
**When to use completion prompts:**
|
|
614
|
+
- Validate AI output meets quality standards
|
|
615
|
+
- Self-review for accuracy and completeness
|
|
616
|
+
- Ensure proper formatting of responses
|
|
617
|
+
|
|
530
618
|
### Fallback Behavior
|
|
531
619
|
|
|
532
620
|
If no key is configured, Visor falls back to fast, heuristic checks (simple patterns, basic style/perf). For best results, set a provider.
|
|
533
621
|
|
|
534
622
|
### MCP (Tools) Support
|
|
535
|
-
See
|
|
623
|
+
See [mcp.md](./mcp.md) for adding MCP servers (Probe, Jira, Filesystem, etc.).
|
|
@@ -2,8 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
## TL;DR
|
|
4
4
|
|
|
5
|
-
You can expose custom shell-based tools to AI
|
|
5
|
+
You can expose custom shell-based tools to AI using one of two methods:
|
|
6
6
|
|
|
7
|
+
**Method 1: Using `ai_custom_tools` (Recommended)**
|
|
8
|
+
```yaml
|
|
9
|
+
tools:
|
|
10
|
+
grep-pattern:
|
|
11
|
+
name: grep-pattern
|
|
12
|
+
exec: 'grep -rn "{{ args.pattern }}" *.ts'
|
|
13
|
+
inputSchema:
|
|
14
|
+
type: object
|
|
15
|
+
properties:
|
|
16
|
+
pattern: {type: string}
|
|
17
|
+
required: [pattern]
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
security-scan:
|
|
21
|
+
type: ai
|
|
22
|
+
prompt: Use grep-pattern to find security issues.
|
|
23
|
+
ai_custom_tools: [grep-pattern] # Simple and explicit
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Method 2: Using `tools:` within `ai_mcp_servers`**
|
|
7
27
|
```yaml
|
|
8
28
|
tools:
|
|
9
29
|
grep-pattern:
|
|
@@ -21,14 +41,14 @@ steps:
|
|
|
21
41
|
prompt: Use grep-pattern to find security issues.
|
|
22
42
|
ai_mcp_servers:
|
|
23
43
|
custom-tools:
|
|
24
|
-
tools: [grep-pattern] #
|
|
44
|
+
tools: [grep-pattern] # Creates ephemeral SSE MCP server
|
|
25
45
|
```
|
|
26
46
|
|
|
27
47
|
## How It Works
|
|
28
48
|
|
|
29
|
-
When you
|
|
49
|
+
When you use either `ai_custom_tools` or `tools: [...]` within an MCP server config:
|
|
30
50
|
|
|
31
|
-
1. **Automatic Detection**: Visor detects you're referencing custom tools
|
|
51
|
+
1. **Automatic Detection**: Visor detects you're referencing custom tools defined in the global `tools:` section
|
|
32
52
|
2. **Server Startup**: Creates an ephemeral SSE MCP server on an available port
|
|
33
53
|
3. **Tool Exposure**: Your custom tools become available to the AI via MCP protocol
|
|
34
54
|
4. **Auto Cleanup**: Server stops automatically when the AI check completes
|
|
@@ -51,9 +71,7 @@ steps:
|
|
|
51
71
|
security-review:
|
|
52
72
|
type: ai
|
|
53
73
|
prompt: Use check-secrets to find hardcoded credentials.
|
|
54
|
-
|
|
55
|
-
security-tools:
|
|
56
|
-
tools: [check-secrets]
|
|
74
|
+
ai_custom_tools: [check-secrets]
|
|
57
75
|
```
|
|
58
76
|
|
|
59
77
|
### Example 2: Multiple Custom Tools
|
|
@@ -82,9 +100,7 @@ steps:
|
|
|
82
100
|
prompt: |
|
|
83
101
|
Use grep-pattern to find console.log statements.
|
|
84
102
|
Use count-todos to count pending work items.
|
|
85
|
-
|
|
86
|
-
custom-tools:
|
|
87
|
-
tools: [grep-pattern, count-todos]
|
|
103
|
+
ai_custom_tools: [grep-pattern, count-todos]
|
|
88
104
|
```
|
|
89
105
|
|
|
90
106
|
### Example 3: Combining Custom Tools with External MCP Servers
|
|
@@ -96,11 +112,10 @@ steps:
|
|
|
96
112
|
prompt: |
|
|
97
113
|
You have both custom tools and external MCP servers.
|
|
98
114
|
Use them for a comprehensive review.
|
|
115
|
+
# Custom tools via ai_custom_tools
|
|
116
|
+
ai_custom_tools: [grep-pattern, check-secrets]
|
|
117
|
+
# External MCP servers
|
|
99
118
|
ai_mcp_servers:
|
|
100
|
-
# Custom tools via ephemeral SSE server
|
|
101
|
-
my-tools:
|
|
102
|
-
tools: [grep-pattern, check-secrets]
|
|
103
|
-
# External MCP server via stdio
|
|
104
119
|
filesystem:
|
|
105
120
|
command: npx
|
|
106
121
|
args: ["-y", "@modelcontextprotocol/server-filesystem", "."]
|
|
@@ -108,7 +123,22 @@ steps:
|
|
|
108
123
|
|
|
109
124
|
## Configuration Format
|
|
110
125
|
|
|
111
|
-
###
|
|
126
|
+
### Method 1: ai_custom_tools (Recommended)
|
|
127
|
+
|
|
128
|
+
```yaml
|
|
129
|
+
steps:
|
|
130
|
+
my-check:
|
|
131
|
+
type: ai
|
|
132
|
+
ai_custom_tools: [tool-name-1, tool-name-2, ...]
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Key points:**
|
|
136
|
+
- Simple and explicit configuration
|
|
137
|
+
- Tools must be defined in global `tools:` section
|
|
138
|
+
- Automatically creates SSE server on ephemeral port
|
|
139
|
+
- Can be combined with `ai_mcp_servers` for external servers
|
|
140
|
+
|
|
141
|
+
### Method 2: tools: within ai_mcp_servers
|
|
112
142
|
|
|
113
143
|
```yaml
|
|
114
144
|
ai_mcp_servers:
|
|
@@ -117,12 +147,12 @@ ai_mcp_servers:
|
|
|
117
147
|
```
|
|
118
148
|
|
|
119
149
|
**Key points:**
|
|
120
|
-
- Server name can be anything (e.g., `custom-tools`, `my-tools
|
|
150
|
+
- Server name can be anything (e.g., `custom-tools`, `my-tools`)
|
|
121
151
|
- Tools must be defined in global `tools:` section
|
|
122
152
|
- Automatically creates SSE server on ephemeral port
|
|
123
153
|
- No command/URL needed - handled automatically
|
|
124
154
|
|
|
125
|
-
### External MCP Server (
|
|
155
|
+
### External MCP Server (for comparison)
|
|
126
156
|
|
|
127
157
|
```yaml
|
|
128
158
|
ai_mcp_servers:
|
|
@@ -136,22 +166,32 @@ ai_mcp_servers:
|
|
|
136
166
|
- Uses stdio transport by default
|
|
137
167
|
- Can also use SSE/HTTP with `url:` and `transport:`
|
|
138
168
|
|
|
139
|
-
##
|
|
169
|
+
## Both Methods Work
|
|
140
170
|
|
|
141
|
-
|
|
171
|
+
Both configuration methods are fully supported:
|
|
142
172
|
|
|
143
173
|
```yaml
|
|
144
174
|
steps:
|
|
145
|
-
|
|
175
|
+
# Method 1: ai_custom_tools (recommended for simplicity)
|
|
176
|
+
check-with-custom-tools:
|
|
177
|
+
type: ai
|
|
178
|
+
ai_custom_tools: [tool1, tool2]
|
|
179
|
+
|
|
180
|
+
# Method 2: tools: in ai_mcp_servers (useful for naming)
|
|
181
|
+
check-with-mcp-tools:
|
|
146
182
|
type: ai
|
|
147
|
-
|
|
183
|
+
ai_mcp_servers:
|
|
184
|
+
my-security-tools:
|
|
185
|
+
tools: [tool1, tool2]
|
|
148
186
|
```
|
|
149
187
|
|
|
150
|
-
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
|
|
154
|
-
|
|
188
|
+
**Choose `ai_custom_tools` when:**
|
|
189
|
+
- You want simple, explicit configuration
|
|
190
|
+
- You're combining custom tools with external MCP servers
|
|
191
|
+
|
|
192
|
+
**Choose `tools:` in `ai_mcp_servers` when:**
|
|
193
|
+
- You want to name your tool server
|
|
194
|
+
- You prefer all MCP configuration in one place
|
|
155
195
|
|
|
156
196
|
## Complete Example
|
|
157
197
|
|
|
@@ -200,9 +240,7 @@ steps:
|
|
|
200
240
|
1. Use grep-security to find eval(), exec(), or dangerous patterns
|
|
201
241
|
2. Use scan-dependencies to check for outdated packages
|
|
202
242
|
3. Report findings with severity levels
|
|
203
|
-
|
|
204
|
-
security-tools:
|
|
205
|
-
tools: [grep-security, scan-dependencies]
|
|
243
|
+
ai_custom_tools: [grep-security, scan-dependencies]
|
|
206
244
|
ai:
|
|
207
245
|
provider: anthropic
|
|
208
246
|
model: claude-3-5-sonnet-20241022
|
|
@@ -213,9 +251,7 @@ steps:
|
|
|
213
251
|
Analyze code metrics:
|
|
214
252
|
- Use count-lines to measure TypeScript code
|
|
215
253
|
- Provide insights on code size and complexity
|
|
216
|
-
|
|
217
|
-
metrics-tools:
|
|
218
|
-
tools: [count-lines]
|
|
254
|
+
ai_custom_tools: [count-lines]
|
|
219
255
|
ai:
|
|
220
256
|
provider: anthropic
|
|
221
257
|
model: claude-3-5-sonnet-20241022
|
|
@@ -250,7 +286,8 @@ output:
|
|
|
250
286
|
**Problem**: AI says it doesn't have access to tools
|
|
251
287
|
|
|
252
288
|
**Solutions**:
|
|
253
|
-
- Verify `
|
|
289
|
+
- Verify `ai_custom_tools:` syntax (not `ai_custom_tool` singular)
|
|
290
|
+
- If using `ai_mcp_servers`, verify `tools:` field (not `tool` singular)
|
|
254
291
|
- Check tool names match exactly (case-sensitive)
|
|
255
292
|
- Enable debug logging to see server startup
|
|
256
293
|
|