@probelabs/visor 0.1.107 → 0.1.112
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 +6 -0
- package/defaults/task-refinement.yaml +7 -3
- package/defaults/visor.tests.yaml +13 -2
- package/defaults/visor.yaml +1 -0
- package/dist/663.index.js +3 -2
- package/dist/80.index.js +3 -2
- package/dist/ai-review-service.d.ts +13 -9
- package/dist/ai-review-service.d.ts.map +1 -1
- package/dist/cli-main.d.ts.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/debug-visualizer/ws-server.d.ts +7 -1
- package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
- package/dist/defaults/task-refinement.yaml +7 -3
- package/dist/defaults/visor.tests.yaml +13 -2
- package/dist/defaults/visor.yaml +1 -0
- package/dist/docs/advanced-ai.md +60 -1
- package/dist/docs/ai-configuration.md +67 -0
- package/dist/docs/ai-custom-tools-usage.md +261 -0
- package/dist/docs/ai-custom-tools.md +392 -0
- package/dist/docs/bot-transports-rfc.md +23 -0
- package/dist/docs/configuration.md +21 -0
- package/dist/docs/engine-pause-resume-rfc.md +192 -0
- package/dist/docs/lifecycle-hooks.md +253 -0
- package/dist/docs/liquid-templates.md +143 -0
- package/dist/docs/providers/git-checkout.md +589 -0
- package/dist/docs/recipes.md +458 -5
- package/dist/docs/rfc/git-checkout-step.md +601 -0
- package/dist/docs/rfc/on_init-hook.md +1294 -0
- package/dist/docs/rfc/workspace-isolation.md +216 -0
- package/dist/docs/router-patterns.md +339 -0
- package/dist/event-bus/types.d.ts +14 -0
- package/dist/event-bus/types.d.ts.map +1 -1
- package/dist/examples/ai-custom-tools-example.yaml +206 -0
- package/dist/examples/ai-custom-tools-simple.yaml +76 -0
- package/dist/examples/git-checkout-basic.yaml +32 -0
- package/dist/examples/git-checkout-compare.yaml +59 -0
- package/dist/examples/git-checkout-cross-repo.yaml +76 -0
- package/dist/examples/on-init-import-demo.yaml +179 -0
- package/dist/examples/reusable-tools.yaml +92 -0
- package/dist/examples/reusable-workflows.yaml +88 -0
- package/dist/examples/session-reuse-self.yaml +81 -0
- package/dist/examples/slack-simple-chat.yaml +775 -0
- package/dist/failure-condition-evaluator.d.ts +2 -0
- package/dist/failure-condition-evaluator.d.ts.map +1 -1
- package/dist/frontends/github-frontend.d.ts +20 -0
- package/dist/frontends/github-frontend.d.ts.map +1 -1
- package/dist/frontends/host.d.ts +4 -0
- package/dist/frontends/host.d.ts.map +1 -1
- package/dist/frontends/slack-frontend.d.ts +58 -0
- package/dist/frontends/slack-frontend.d.ts.map +1 -0
- package/dist/generated/config-schema.d.ts +409 -41
- package/dist/generated/config-schema.d.ts.map +1 -1
- package/dist/generated/config-schema.json +436 -47
- package/dist/github-comments.d.ts +2 -0
- package/dist/github-comments.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +83587 -56085
- package/dist/liquid-extensions.d.ts.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/output/traces/{run-2025-11-21T11-50-46-505Z.ndjson → run-2026-01-21T05-37-24-446Z.ndjson} +91 -91
- package/dist/output/traces/run-2026-01-21T05-38-18-580Z.ndjson +1067 -0
- package/dist/output-formatters.d.ts.map +1 -1
- package/dist/providers/ai-check-provider.d.ts +12 -0
- package/dist/providers/ai-check-provider.d.ts.map +1 -1
- package/dist/providers/check-provider-registry.d.ts.map +1 -1
- package/dist/providers/check-provider.interface.d.ts +9 -0
- package/dist/providers/check-provider.interface.d.ts.map +1 -1
- package/dist/providers/command-check-provider.d.ts.map +1 -1
- package/dist/providers/custom-tool-executor.d.ts.map +1 -1
- package/dist/providers/git-checkout-provider.d.ts +25 -0
- package/dist/providers/git-checkout-provider.d.ts.map +1 -0
- package/dist/providers/http-client-provider.d.ts +3 -0
- package/dist/providers/http-client-provider.d.ts.map +1 -1
- package/dist/providers/human-input-check-provider.d.ts +2 -0
- package/dist/providers/human-input-check-provider.d.ts.map +1 -1
- package/dist/providers/log-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-check-provider.d.ts +1 -1
- package/dist/providers/mcp-check-provider.d.ts.map +1 -1
- package/dist/providers/mcp-custom-sse-server.d.ts +66 -0
- package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -0
- package/dist/providers/memory-check-provider.d.ts.map +1 -1
- package/dist/providers/script-check-provider.d.ts.map +1 -1
- package/dist/providers/workflow-check-provider.d.ts.map +1 -1
- package/dist/reviewer.d.ts.map +1 -1
- package/dist/sdk/check-provider-registry-534KL5HT.mjs +27 -0
- package/dist/sdk/chunk-23L3QRYX.mjs +16872 -0
- package/dist/sdk/chunk-23L3QRYX.mjs.map +1 -0
- package/dist/sdk/{chunk-OOZITMRU.mjs → chunk-3OMWVM6J.mjs} +11 -1
- package/dist/sdk/{chunk-OOZITMRU.mjs.map → chunk-3OMWVM6J.mjs.map} +1 -1
- package/dist/sdk/{chunk-37ZSCMFC.mjs → chunk-7UK3NIIT.mjs} +2 -2
- package/dist/sdk/{chunk-VMPLF6FT.mjs → chunk-AGIZJ4UZ.mjs} +50 -4
- package/dist/sdk/chunk-AGIZJ4UZ.mjs.map +1 -0
- package/dist/sdk/{chunk-IEO6CFLG.mjs → chunk-AIVFBIS4.mjs} +161 -5
- package/dist/sdk/chunk-AIVFBIS4.mjs.map +1 -0
- package/dist/sdk/chunk-AK6BVWIT.mjs +426 -0
- package/dist/sdk/chunk-AK6BVWIT.mjs.map +1 -0
- package/dist/sdk/chunk-AUT26LHW.mjs +139 -0
- package/dist/sdk/chunk-AUT26LHW.mjs.map +1 -0
- package/dist/sdk/chunk-BOVFH3LI.mjs +232 -0
- package/dist/sdk/chunk-BOVFH3LI.mjs.map +1 -0
- package/dist/sdk/chunk-HTOKWMPO.mjs +157 -0
- package/dist/sdk/chunk-HTOKWMPO.mjs.map +1 -0
- package/dist/sdk/{chunk-6Y4YTKCF.mjs → chunk-NAW3DB3I.mjs} +2 -2
- package/dist/sdk/{chunk-OWUVOILT.mjs → chunk-QR7MOMJH.mjs} +4 -3
- package/dist/sdk/{chunk-OWUVOILT.mjs.map → chunk-QR7MOMJH.mjs.map} +1 -1
- package/dist/sdk/{chunk-PTL3K3PN.mjs → chunk-QY2XYPEV.mjs} +488 -60
- package/dist/sdk/chunk-QY2XYPEV.mjs.map +1 -0
- package/dist/sdk/{chunk-OZJ263FM.mjs → chunk-SIWNBRTK.mjs} +29 -215
- package/dist/sdk/chunk-SIWNBRTK.mjs.map +1 -0
- package/dist/sdk/command-executor-TYUV6HUS.mjs +14 -0
- package/dist/sdk/{config-M4ZNO6NU.mjs → config-YNC2EOOT.mjs} +5 -3
- package/dist/sdk/{failure-condition-evaluator-NBO5YRXW.mjs → failure-condition-evaluator-YGTF2GHG.mjs} +6 -5
- package/dist/sdk/{github-frontend-4AWRJT7D.mjs → github-frontend-SIAEOCON.mjs} +190 -12
- package/dist/sdk/github-frontend-SIAEOCON.mjs.map +1 -0
- package/dist/sdk/{host-7GBC3S7L.mjs → host-DXUYTNMU.mjs} +5 -2
- package/dist/sdk/host-DXUYTNMU.mjs.map +1 -0
- package/dist/sdk/{liquid-extensions-C7EG3YKH.mjs → liquid-extensions-PKWCKK7E.mjs} +5 -4
- package/dist/sdk/memory-store-XGBB7LX7.mjs +12 -0
- package/dist/sdk/prompt-state-YRJY6QAL.mjs +16 -0
- package/dist/sdk/{renderer-schema-6RF26VUS.mjs → renderer-schema-LPKN5UJS.mjs} +3 -2
- package/dist/sdk/{renderer-schema-6RF26VUS.mjs.map → renderer-schema-LPKN5UJS.mjs.map} +1 -1
- package/dist/sdk/{routing-RP56JTV2.mjs → routing-6N45MJ4F.mjs} +7 -6
- package/dist/sdk/sdk.d.mts +219 -5
- package/dist/sdk/sdk.d.ts +219 -5
- package/dist/sdk/sdk.js +21329 -14908
- package/dist/sdk/sdk.js.map +1 -1
- package/dist/sdk/sdk.mjs +407 -12874
- package/dist/sdk/sdk.mjs.map +1 -1
- package/dist/sdk/{session-registry-N5FFYFTM.mjs → session-registry-4E6YRQ77.mjs} +2 -2
- package/dist/sdk/session-registry-4E6YRQ77.mjs.map +1 -0
- package/dist/sdk/slack-frontend-BVKW3GD5.mjs +735 -0
- package/dist/sdk/slack-frontend-BVKW3GD5.mjs.map +1 -0
- package/dist/sdk/{tracer-init-WP4X46IF.mjs → tracer-init-GSLPPLCD.mjs} +2 -2
- package/dist/sdk/tracer-init-GSLPPLCD.mjs.map +1 -0
- package/dist/sdk/workflow-registry-R6KSACFR.mjs +12 -0
- package/dist/sdk/workflow-registry-R6KSACFR.mjs.map +1 -0
- package/dist/slack/adapter.d.ts +36 -0
- package/dist/slack/adapter.d.ts.map +1 -0
- package/dist/slack/cache-prewarmer.d.ts +31 -0
- package/dist/slack/cache-prewarmer.d.ts.map +1 -0
- package/dist/slack/client.d.ts +77 -0
- package/dist/slack/client.d.ts.map +1 -0
- package/dist/slack/markdown.d.ts +45 -0
- package/dist/slack/markdown.d.ts.map +1 -0
- package/dist/slack/prompt-state.d.ts +33 -0
- package/dist/slack/prompt-state.d.ts.map +1 -0
- package/dist/slack/rate-limiter.d.ts +56 -0
- package/dist/slack/rate-limiter.d.ts.map +1 -0
- package/dist/slack/signature.d.ts +2 -0
- package/dist/slack/signature.d.ts.map +1 -0
- package/dist/slack/socket-runner.d.ts +42 -0
- package/dist/slack/socket-runner.d.ts.map +1 -0
- package/dist/slack/thread-cache.d.ts +51 -0
- package/dist/slack/thread-cache.d.ts.map +1 -0
- package/dist/state-machine/context/build-engine-context.d.ts +8 -0
- package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
- 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/on-init-handlers.d.ts +43 -0
- package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -0
- package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -1
- package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -1
- package/dist/state-machine/runner.d.ts +6 -0
- package/dist/state-machine/runner.d.ts.map +1 -1
- package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
- package/dist/state-machine/states/plan-ready.d.ts.map +1 -1
- package/dist/state-machine/states/routing.d.ts.map +1 -1
- package/dist/state-machine/states/wave-planning.d.ts.map +1 -1
- package/dist/state-machine/workflow-projection.d.ts.map +1 -1
- package/dist/state-machine-execution-engine.d.ts +21 -9
- package/dist/state-machine-execution-engine.d.ts.map +1 -1
- package/dist/telemetry/state-capture.d.ts +5 -0
- package/dist/telemetry/state-capture.d.ts.map +1 -1
- package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
- package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -1
- package/dist/test-runner/evaluators.d.ts +37 -4
- package/dist/test-runner/evaluators.d.ts.map +1 -1
- package/dist/test-runner/index.d.ts +7 -0
- package/dist/test-runner/index.d.ts.map +1 -1
- package/dist/test-runner/recorders/slack-recorder.d.ts +17 -0
- package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -0
- package/dist/test-runner/validator.d.ts.map +1 -1
- package/dist/traces/{run-2025-11-21T11-50-46-505Z.ndjson → run-2026-01-21T05-37-24-446Z.ndjson} +91 -91
- package/dist/traces/run-2026-01-21T05-38-18-580Z.ndjson +1067 -0
- package/dist/types/bot.d.ts +109 -0
- package/dist/types/bot.d.ts.map +1 -0
- package/dist/types/cli.d.ts +4 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/config.d.ts +182 -5
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/engine.d.ts +5 -0
- package/dist/types/engine.d.ts.map +1 -1
- package/dist/types/git-checkout.d.ts +76 -0
- package/dist/types/git-checkout.d.ts.map +1 -0
- package/dist/utils/json-text-extractor.d.ts +17 -0
- package/dist/utils/json-text-extractor.d.ts.map +1 -0
- package/dist/utils/sandbox.d.ts +10 -0
- package/dist/utils/sandbox.d.ts.map +1 -1
- package/dist/utils/template-context.d.ts +1 -0
- package/dist/utils/template-context.d.ts.map +1 -1
- package/dist/utils/tracer-init.d.ts.map +1 -1
- package/dist/utils/workspace-manager.d.ts +118 -0
- package/dist/utils/workspace-manager.d.ts.map +1 -0
- package/dist/utils/worktree-cleanup.d.ts +33 -0
- package/dist/utils/worktree-cleanup.d.ts.map +1 -0
- package/dist/utils/worktree-manager.d.ts +153 -0
- package/dist/utils/worktree-manager.d.ts.map +1 -0
- package/dist/webhook-server.d.ts.map +1 -1
- package/dist/workflow-executor.d.ts.map +1 -1
- package/dist/workflow-registry.d.ts.map +1 -1
- package/package.json +5 -4
- package/dist/output/traces/run-2025-11-21T11-51-33-674Z.ndjson +0 -839
- package/dist/sdk/chunk-IEO6CFLG.mjs.map +0 -1
- package/dist/sdk/chunk-JEHPDJIF.mjs +0 -223
- package/dist/sdk/chunk-JEHPDJIF.mjs.map +0 -1
- package/dist/sdk/chunk-OZJ263FM.mjs.map +0 -1
- package/dist/sdk/chunk-PTL3K3PN.mjs.map +0 -1
- package/dist/sdk/chunk-VMPLF6FT.mjs.map +0 -1
- package/dist/sdk/github-frontend-4AWRJT7D.mjs.map +0 -1
- package/dist/sdk/host-7GBC3S7L.mjs.map +0 -1
- package/dist/sdk/memory-store-GJACZC2A.mjs +0 -11
- package/dist/sdk/workflow-registry-2YIIXQCK.mjs +0 -11
- package/dist/traces/run-2025-11-21T11-51-33-674Z.ndjson +0 -839
- /package/dist/sdk/{config-M4ZNO6NU.mjs.map → check-provider-registry-534KL5HT.mjs.map} +0 -0
- /package/dist/sdk/{chunk-37ZSCMFC.mjs.map → chunk-7UK3NIIT.mjs.map} +0 -0
- /package/dist/sdk/{chunk-6Y4YTKCF.mjs.map → chunk-NAW3DB3I.mjs.map} +0 -0
- /package/dist/sdk/{failure-condition-evaluator-NBO5YRXW.mjs.map → command-executor-TYUV6HUS.mjs.map} +0 -0
- /package/dist/sdk/{liquid-extensions-C7EG3YKH.mjs.map → config-YNC2EOOT.mjs.map} +0 -0
- /package/dist/sdk/{memory-store-GJACZC2A.mjs.map → failure-condition-evaluator-YGTF2GHG.mjs.map} +0 -0
- /package/dist/sdk/{routing-RP56JTV2.mjs.map → liquid-extensions-PKWCKK7E.mjs.map} +0 -0
- /package/dist/sdk/{session-registry-N5FFYFTM.mjs.map → memory-store-XGBB7LX7.mjs.map} +0 -0
- /package/dist/sdk/{tracer-init-WP4X46IF.mjs.map → prompt-state-YRJY6QAL.mjs.map} +0 -0
- /package/dist/sdk/{workflow-registry-2YIIXQCK.mjs.map → routing-6N45MJ4F.mjs.map} +0 -0
package/README.md
CHANGED
|
@@ -534,6 +534,12 @@ steps:
|
|
|
534
534
|
session_mode: append # Shares history for full conversation
|
|
535
535
|
```
|
|
536
536
|
|
|
537
|
+
You can also reuse the **same check’s** session when it loops back to itself, using:
|
|
538
|
+
|
|
539
|
+
- `reuse_ai_session: "self"` with `session_mode: append`
|
|
540
|
+
|
|
541
|
+
See the standalone example at `examples/session-reuse-self.yaml` and the detailed guide in [docs/advanced-ai.md](docs/advanced-ai.md).
|
|
542
|
+
|
|
537
543
|
Learn more: [docs/advanced-ai.md](docs/advanced-ai.md)
|
|
538
544
|
|
|
539
545
|
## 📋 Schema-Template System
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
version: "1.0"
|
|
2
2
|
|
|
3
|
+
# Slack integration config (schema version marker for Socket Mode/Webhook helpers)
|
|
4
|
+
slack:
|
|
5
|
+
version: "v1"
|
|
6
|
+
|
|
3
7
|
# Simple agent: task-refinement
|
|
4
8
|
# - Collects user input, refines it with AI (skip code context), and loops until refined.
|
|
5
9
|
# - Returns final refined text via the `finish` step output.
|
|
@@ -77,7 +81,7 @@ steps:
|
|
|
77
81
|
group: task-refinement
|
|
78
82
|
depends_on: [refine]
|
|
79
83
|
reuse_ai_session: refine
|
|
80
|
-
session_mode:
|
|
84
|
+
session_mode: clone
|
|
81
85
|
ai:
|
|
82
86
|
# Allow tools so the model can inspect the repo context if needed
|
|
83
87
|
disableTools: false
|
|
@@ -431,9 +435,9 @@ tests:
|
|
|
431
435
|
expect:
|
|
432
436
|
calls:
|
|
433
437
|
- step: ask
|
|
434
|
-
|
|
438
|
+
at_least: 1
|
|
435
439
|
- step: refine
|
|
436
|
-
|
|
440
|
+
at_least: 1
|
|
437
441
|
- step: plan-commands
|
|
438
442
|
exactly: 2
|
|
439
443
|
- step: ask-confirm
|
|
@@ -12,8 +12,13 @@ tests:
|
|
|
12
12
|
strict: true
|
|
13
13
|
ai_provider: mock
|
|
14
14
|
fail_on_unexpected_calls: true
|
|
15
|
-
# Enable GitHub
|
|
16
|
-
|
|
15
|
+
# Enable GitHub + Slack frontends for PR stages in this suite.
|
|
16
|
+
# Slack is disabled automatically for non‑PR events in tests.
|
|
17
|
+
frontends:
|
|
18
|
+
- name: github
|
|
19
|
+
- name: slack
|
|
20
|
+
config:
|
|
21
|
+
defaultChannel: C_TEST
|
|
17
22
|
# Run GitHub-tagged checks in tests (e.g., label application)
|
|
18
23
|
tags: "github"
|
|
19
24
|
# Example: enable negative GitHub recorder for all tests
|
|
@@ -220,6 +225,10 @@ tests:
|
|
|
220
225
|
no_calls:
|
|
221
226
|
- provider: github
|
|
222
227
|
op: issues.createComment
|
|
228
|
+
- provider: slack
|
|
229
|
+
op: chat.postMessage
|
|
230
|
+
- provider: slack
|
|
231
|
+
op: chat.update
|
|
223
232
|
calls:
|
|
224
233
|
- step: comment-assistant
|
|
225
234
|
exactly: 1
|
|
@@ -426,6 +435,7 @@ tests:
|
|
|
426
435
|
issue-assistant:
|
|
427
436
|
text: "Opening issue with claim about defaults/visor.yaml"
|
|
428
437
|
intent: issue_triage
|
|
438
|
+
labels: ["bug", "triage"]
|
|
429
439
|
extract-facts:
|
|
430
440
|
- { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
|
|
431
441
|
validate-fact[]:
|
|
@@ -459,6 +469,7 @@ tests:
|
|
|
459
469
|
issue-assistant:
|
|
460
470
|
text: "Claim: max_parallelism defaults to 4"
|
|
461
471
|
intent: issue_triage
|
|
472
|
+
labels: ["bug", "triage"]
|
|
462
473
|
extract-facts:
|
|
463
474
|
- { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
|
|
464
475
|
validate-fact[]:
|
package/defaults/visor.yaml
CHANGED
|
@@ -81,6 +81,7 @@ steps:
|
|
|
81
81
|
type: ai
|
|
82
82
|
group: dynamic # New issue triage posts a standalone comment
|
|
83
83
|
on: [issue_opened]
|
|
84
|
+
schema: issue-assistant
|
|
84
85
|
prompt: |
|
|
85
86
|
You are an intelligent GitHub issue assistant for the {{ event.repository.fullName }} repository. Your role is to provide professional, knowledgeable assistance when a NEW issue is opened.
|
|
86
87
|
|
package/dist/663.index.js
CHANGED
|
@@ -212,7 +212,7 @@ function saveToken(token, projectId) {
|
|
|
212
212
|
}
|
|
213
213
|
const tokenPath = path.join(dir, "com.vercel.token", `${projectId}.json`);
|
|
214
214
|
const tokenJson = JSON.stringify(token);
|
|
215
|
-
fs.mkdirSync(path.dirname(tokenPath), { mode:
|
|
215
|
+
fs.mkdirSync(path.dirname(tokenPath), { mode: 432, recursive: true });
|
|
216
216
|
fs.writeFileSync(tokenPath, tokenJson);
|
|
217
217
|
fs.chmodSync(tokenPath, 432);
|
|
218
218
|
return;
|
|
@@ -249,8 +249,9 @@ function getTokenPayload(token) {
|
|
|
249
249
|
);
|
|
250
250
|
return JSON.parse(Buffer.from(padded, "base64").toString("utf8"));
|
|
251
251
|
}
|
|
252
|
+
const TIME_15_MINUTES_IN_MS = 15 * 60 * 1e3;
|
|
252
253
|
function isExpired(token) {
|
|
253
|
-
return token.exp * 1e3 < Date.now();
|
|
254
|
+
return token.exp * 1e3 < Date.now() + TIME_15_MINUTES_IN_MS;
|
|
254
255
|
}
|
|
255
256
|
// Annotate the CommonJS export names for ESM import in node:
|
|
256
257
|
0 && (0);
|
package/dist/80.index.js
CHANGED
|
@@ -212,7 +212,7 @@ function saveToken(token, projectId) {
|
|
|
212
212
|
}
|
|
213
213
|
const tokenPath = path.join(dir, "com.vercel.token", `${projectId}.json`);
|
|
214
214
|
const tokenJson = JSON.stringify(token);
|
|
215
|
-
fs.mkdirSync(path.dirname(tokenPath), { mode:
|
|
215
|
+
fs.mkdirSync(path.dirname(tokenPath), { mode: 432, recursive: true });
|
|
216
216
|
fs.writeFileSync(tokenPath, tokenJson);
|
|
217
217
|
fs.chmodSync(tokenPath, 432);
|
|
218
218
|
return;
|
|
@@ -249,8 +249,9 @@ function getTokenPayload(token) {
|
|
|
249
249
|
);
|
|
250
250
|
return JSON.parse(Buffer.from(padded, "base64").toString("utf8"));
|
|
251
251
|
}
|
|
252
|
+
const TIME_15_MINUTES_IN_MS = 15 * 60 * 1e3;
|
|
252
253
|
function isExpired(token) {
|
|
253
|
-
return token.exp * 1e3 < Date.now();
|
|
254
|
+
return token.exp * 1e3 < Date.now() + TIME_15_MINUTES_IN_MS;
|
|
254
255
|
}
|
|
255
256
|
// Annotate the CommonJS export names for ESM import in node:
|
|
256
257
|
0 && (0);
|
|
@@ -31,6 +31,9 @@ export interface AIReviewConfig {
|
|
|
31
31
|
disableTools?: boolean;
|
|
32
32
|
allowBash?: boolean;
|
|
33
33
|
bashConfig?: import('./types/config').BashConfig;
|
|
34
|
+
path?: string;
|
|
35
|
+
allowedFolders?: string[];
|
|
36
|
+
completionPrompt?: string;
|
|
34
37
|
}
|
|
35
38
|
export interface AIDebugInfo {
|
|
36
39
|
/** The prompt sent to the AI */
|
|
@@ -107,6 +110,16 @@ export declare class AIReviewService {
|
|
|
107
110
|
* Format PR or Issue context for the AI using XML structure
|
|
108
111
|
*/
|
|
109
112
|
private formatPRContext;
|
|
113
|
+
/**
|
|
114
|
+
* Format Slack conversation context (if attached to PRInfo) as XML
|
|
115
|
+
*/
|
|
116
|
+
private formatSlackContextFromPRInfo;
|
|
117
|
+
/**
|
|
118
|
+
* Build a normalized ConversationContext for GitHub (PR/issue + comments)
|
|
119
|
+
* using the same contract as Slack's ConversationContext. This is exposed
|
|
120
|
+
* to templates via the unified `conversation` object.
|
|
121
|
+
*/
|
|
122
|
+
private buildGitHubConversationFromPRInfo;
|
|
110
123
|
/**
|
|
111
124
|
* No longer escaping XML - returning text as-is
|
|
112
125
|
*/
|
|
@@ -127,15 +140,6 @@ export declare class AIReviewService {
|
|
|
127
140
|
* Parse AI response JSON
|
|
128
141
|
*/
|
|
129
142
|
private parseAIResponse;
|
|
130
|
-
/**
|
|
131
|
-
* Extract JSON from a response that might contain surrounding text
|
|
132
|
-
* Uses proper bracket matching to find valid JSON objects or arrays
|
|
133
|
-
*/
|
|
134
|
-
private extractJsonFromResponse;
|
|
135
|
-
/**
|
|
136
|
-
* Find JSON with proper bracket matching to avoid false positives
|
|
137
|
-
*/
|
|
138
|
-
private findJsonWithBracketMatching;
|
|
139
143
|
/**
|
|
140
144
|
* Generate mock response for testing
|
|
141
145
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/ai-review-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAe,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/ai-review-service.ts"],"names":[],"mappings":"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"}
|
package/dist/cli-main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/cli-main.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/cli-main.ts"],"names":[],"mappings":"AAEA,OAAO,eAAe,CAAC;AAkdvB;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAq+B1C"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA2B,MAAM,aAAa,CAAC;AAQlE;;GAEG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAA0D;IAG9E,OAAO,CAAC,WAAW,CAGR;;IAOX;;OAEG;IACH,OAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA2B,MAAM,aAAa,CAAC;AAQlE;;GAEG;AACH,qBAAa,GAAG;IACd,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAA0D;IAG9E,OAAO,CAAC,WAAW,CAGR;;IAOX;;OAEG;IACH,OAAO,CAAC,YAAY;IA2DpB;;OAEG;IACH,OAAO,CAAC,aAAa,CAEnB;IAEF;;OAEG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU;IAgK5C;;OAEG;IACH,OAAO,CAAC,eAAe;IAyCvB;;OAEG;IACI,WAAW,IAAI,MAAM;IAuD5B;;OAEG;IACI,UAAU,IAAI,MAAM;IAoC3B;;OAEG;IACI,eAAe,IAAI,MAAM;IAkBhC;;OAEG;IACI,QAAQ,IAAI,IAAI;IAIvB;;OAEG;IACI,WAAW,IAAI,IAAI;CAG3B"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/config.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,WAAW,EAGX,YAAY,EAIZ,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,YAAY,EAS9C,CAAC;AAEX;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAgBrB;IACF,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,kBAAkB,CAAgE;IAC1F,OAAO,CAAC,mBAAmB,CAA2D;IAEtF;;OAEG;IACU,UAAU,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,WAAW,CAAC;IAqHvB;;;OAGG;IACU,oBAAoB,CAC/B,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,EACzB,OAAO,GAAE,iBAAiB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,WAAW,CAAC;IAkDvB;;OAEG;IACU,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IA4CrF;;OAEG;YACW,qBAAqB;IAiBnC;;OAEG;IACU,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBrD;;OAEG;IACI,wBAAwB,IAAI,WAAW,GAAG,IAAI;IA0FrD;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;;OAGG;YACW,uBAAuB;IAyDrC;;OAEG;YACW,aAAa;IAsB3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,UAAU,GAAG,YAAY;IAqB9F;;OAEG;IACU,0BAA0B,IAAI,OAAO,CAAC;QACjD,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,oBAAoB,EAAE,oBAAoB,CAAC;KAC5C,CAAC;IA2BF;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,UAAQ,GAAG,IAAI;IAkLzE;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8T3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0DhC;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAmF7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6DzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA6EhC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA6B1B"}
|
|
@@ -52,9 +52,15 @@ export declare class DebugVisualizerServer {
|
|
|
52
52
|
*/
|
|
53
53
|
waitForStartSignal(): Promise<void>;
|
|
54
54
|
/**
|
|
55
|
-
* Clear spans for a new run (but keep server alive)
|
|
55
|
+
* Clear spans for a new run (but keep server alive).
|
|
56
|
+
* Note: Does NOT reset executionState - that's managed by waitForStartSignal/api/start.
|
|
56
57
|
*/
|
|
57
58
|
clearSpans(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Full reset - clear spans AND reset execution state to idle.
|
|
61
|
+
* Called by /api/reset when user wants to start fresh.
|
|
62
|
+
*/
|
|
63
|
+
reset(): void;
|
|
58
64
|
/**
|
|
59
65
|
* Store a span for HTTP polling clients
|
|
60
66
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-server.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/debug-visualizer/ws-server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,sBAAsB,CAA6B;IAC3D,OAAO,CAAC,qBAAqB,CAA+B;IAC5D,OAAO,CAAC,cAAc,CAAqD;IAC3E,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,aAAa,CAA6B;IAElD;;OAEG;IACG,KAAK,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAuD/C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCzC
|
|
1
|
+
{"version":3,"file":"ws-server.d.ts","sourceRoot":"","sources":["file:///home/runner/work/visor/visor/src/debug-visualizer/ws-server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClC,CAAC,CAAC;IACH,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,sBAAsB,CAA6B;IAC3D,OAAO,CAAC,qBAAqB,CAA+B;IAC5D,OAAO,CAAC,cAAc,CAAqD;IAC3E,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,aAAa,CAA6B;IAElD;;OAEG;IACG,KAAK,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAuD/C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCzC;;;OAGG;IACH,UAAU,IAAI,IAAI;IAelB;;;OAGG;IACH,KAAK,IAAI,IAAI;IAeb;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAWnC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI;IAK5B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAO9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkNzB;;OAEG;IACH,OAAO,CAAC,OAAO;IAgCf;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB,qCAAqC;IACrC,iBAAiB,IAAI,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS;IAI9D,4DAA4D;IACtD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAQvC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAI1F"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
version: "1.0"
|
|
2
2
|
|
|
3
|
+
# Slack integration config (schema version marker for Socket Mode/Webhook helpers)
|
|
4
|
+
slack:
|
|
5
|
+
version: "v1"
|
|
6
|
+
|
|
3
7
|
# Simple agent: task-refinement
|
|
4
8
|
# - Collects user input, refines it with AI (skip code context), and loops until refined.
|
|
5
9
|
# - Returns final refined text via the `finish` step output.
|
|
@@ -77,7 +81,7 @@ steps:
|
|
|
77
81
|
group: task-refinement
|
|
78
82
|
depends_on: [refine]
|
|
79
83
|
reuse_ai_session: refine
|
|
80
|
-
session_mode:
|
|
84
|
+
session_mode: clone
|
|
81
85
|
ai:
|
|
82
86
|
# Allow tools so the model can inspect the repo context if needed
|
|
83
87
|
disableTools: false
|
|
@@ -431,9 +435,9 @@ tests:
|
|
|
431
435
|
expect:
|
|
432
436
|
calls:
|
|
433
437
|
- step: ask
|
|
434
|
-
|
|
438
|
+
at_least: 1
|
|
435
439
|
- step: refine
|
|
436
|
-
|
|
440
|
+
at_least: 1
|
|
437
441
|
- step: plan-commands
|
|
438
442
|
exactly: 2
|
|
439
443
|
- step: ask-confirm
|
|
@@ -12,8 +12,13 @@ tests:
|
|
|
12
12
|
strict: true
|
|
13
13
|
ai_provider: mock
|
|
14
14
|
fail_on_unexpected_calls: true
|
|
15
|
-
# Enable GitHub
|
|
16
|
-
|
|
15
|
+
# Enable GitHub + Slack frontends for PR stages in this suite.
|
|
16
|
+
# Slack is disabled automatically for non‑PR events in tests.
|
|
17
|
+
frontends:
|
|
18
|
+
- name: github
|
|
19
|
+
- name: slack
|
|
20
|
+
config:
|
|
21
|
+
defaultChannel: C_TEST
|
|
17
22
|
# Run GitHub-tagged checks in tests (e.g., label application)
|
|
18
23
|
tags: "github"
|
|
19
24
|
# Example: enable negative GitHub recorder for all tests
|
|
@@ -220,6 +225,10 @@ tests:
|
|
|
220
225
|
no_calls:
|
|
221
226
|
- provider: github
|
|
222
227
|
op: issues.createComment
|
|
228
|
+
- provider: slack
|
|
229
|
+
op: chat.postMessage
|
|
230
|
+
- provider: slack
|
|
231
|
+
op: chat.update
|
|
223
232
|
calls:
|
|
224
233
|
- step: comment-assistant
|
|
225
234
|
exactly: 1
|
|
@@ -426,6 +435,7 @@ tests:
|
|
|
426
435
|
issue-assistant:
|
|
427
436
|
text: "Opening issue with claim about defaults/visor.yaml"
|
|
428
437
|
intent: issue_triage
|
|
438
|
+
labels: ["bug", "triage"]
|
|
429
439
|
extract-facts:
|
|
430
440
|
- { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
|
|
431
441
|
validate-fact[]:
|
|
@@ -459,6 +469,7 @@ tests:
|
|
|
459
469
|
issue-assistant:
|
|
460
470
|
text: "Claim: max_parallelism defaults to 4"
|
|
461
471
|
intent: issue_triage
|
|
472
|
+
labels: ["bug", "triage"]
|
|
462
473
|
extract-facts:
|
|
463
474
|
- { id: f1, category: Configuration, claim: "max_parallelism defaults to 4", verifiable: true }
|
|
464
475
|
validate-fact[]:
|
package/dist/defaults/visor.yaml
CHANGED
|
@@ -81,6 +81,7 @@ steps:
|
|
|
81
81
|
type: ai
|
|
82
82
|
group: dynamic # New issue triage posts a standalone comment
|
|
83
83
|
on: [issue_opened]
|
|
84
|
+
schema: issue-assistant
|
|
84
85
|
prompt: |
|
|
85
86
|
You are an intelligent GitHub issue assistant for the {{ event.repository.fullName }} repository. Your role is to provide professional, knowledgeable assistance when a NEW issue is opened.
|
|
86
87
|
|
package/dist/docs/advanced-ai.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
## 🧠 Advanced AI Features
|
|
2
2
|
|
|
3
3
|
### AI Session Reuse
|
|
4
|
-
Use `reuse_ai_session
|
|
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.
|
|
5
5
|
|
|
6
6
|
**Session Modes:**
|
|
7
7
|
- **`clone` (default)**: Creates a copy of the conversation history. Each check gets an independent session with the same starting context. Changes made by one check don't affect others.
|
|
@@ -26,6 +26,65 @@ steps:
|
|
|
26
26
|
depends_on: [security-remediation]
|
|
27
27
|
reuse_ai_session: true
|
|
28
28
|
session_mode: append # Share history - sees full conversation
|
|
29
|
+
|
|
30
|
+
#### Reusing your own session: `reuse_ai_session: self`
|
|
31
|
+
|
|
32
|
+
Sometimes the step you want to loop back into is the AI step itself (e.g. Slack assistants or multi‑turn internal tools). For that case you can use:
|
|
33
|
+
|
|
34
|
+
- `reuse_ai_session: "self"` – the step reuses its **own** Probe session when it runs again in the same engine run.
|
|
35
|
+
- `session_mode: append` – makes the follow‑up behave like a normal conversation turn.
|
|
36
|
+
|
|
37
|
+
On the first run of the step, Visor creates a new ProbeAgent session and registers it. If routing (`on_success.goto`, `goto_js`, etc.) later jumps back to the same step within the same run, the engine:
|
|
38
|
+
|
|
39
|
+
- Finds the last result for that step in the current run.
|
|
40
|
+
- Reads the `sessionId` stored in the result.
|
|
41
|
+
- Calls the AI provider again using `executeReviewWithSessionReuse` with that session id.
|
|
42
|
+
|
|
43
|
+
Simple example (no transport wiring, just CLI/tests):
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
version: "2.0"
|
|
47
|
+
|
|
48
|
+
steps:
|
|
49
|
+
seed:
|
|
50
|
+
type: script
|
|
51
|
+
content: |
|
|
52
|
+
return { text: "hello from seed" };
|
|
53
|
+
|
|
54
|
+
convo:
|
|
55
|
+
type: ai
|
|
56
|
+
depends_on: [seed]
|
|
57
|
+
reuse_ai_session: self
|
|
58
|
+
session_mode: append
|
|
59
|
+
ai:
|
|
60
|
+
provider: mock
|
|
61
|
+
model: mock
|
|
62
|
+
disableTools: true
|
|
63
|
+
allowedTools: []
|
|
64
|
+
system_prompt: "You are a tiny echo assistant."
|
|
65
|
+
prompt: |
|
|
66
|
+
Seed message: {{ outputs['seed'].text }}
|
|
67
|
+
|
|
68
|
+
Past convo outputs in this run:
|
|
69
|
+
{% assign hist = outputs_history['convo'] | default: empty %}
|
|
70
|
+
{% if hist and hist.size > 0 %}
|
|
71
|
+
{% for h in hist %}
|
|
72
|
+
- Previous reply {{ forloop.index }}.
|
|
73
|
+
{% endfor %}
|
|
74
|
+
{% else %}
|
|
75
|
+
- No previous replies yet.
|
|
76
|
+
{% endif %}
|
|
77
|
+
on_success:
|
|
78
|
+
goto_js: |
|
|
79
|
+
// Example: re‑enter this step up to 3 times in a single run
|
|
80
|
+
return attempt < 3 ? 'convo' : null;
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
The corresponding testable example lives at:
|
|
84
|
+
|
|
85
|
+
- `examples/session-reuse-self.yaml`
|
|
86
|
+
|
|
87
|
+
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`.
|
|
29
88
|
```
|
|
30
89
|
|
|
31
90
|
**When to use each mode:**
|
|
@@ -202,6 +202,73 @@ output:
|
|
|
202
202
|
|
|
203
203
|
### Advanced AI Configuration
|
|
204
204
|
|
|
205
|
+
#### Transport Context Controls (GitHub, Slack, etc.)
|
|
206
|
+
|
|
207
|
+
By default, Visor automatically adds transport‑specific context to AI prompts:
|
|
208
|
+
|
|
209
|
+
- **GitHub**: PR / issue metadata + diffs (as XML `<context>...</context>`).
|
|
210
|
+
- **Slack**: Slack conversation context (as XML `<slack_context>...</slack_context>`).
|
|
211
|
+
|
|
212
|
+
You can control this per step with three flags under `ai:`:
|
|
213
|
+
|
|
214
|
+
```yaml
|
|
215
|
+
steps:
|
|
216
|
+
slack-chat:
|
|
217
|
+
type: ai
|
|
218
|
+
prompt: "Chat with the user"
|
|
219
|
+
ai:
|
|
220
|
+
# Turn off ALL automatic transport context (GitHub + Slack)
|
|
221
|
+
skip_transport_context: true
|
|
222
|
+
|
|
223
|
+
github-only:
|
|
224
|
+
type: ai
|
|
225
|
+
prompt: "Review PR using GitHub context only"
|
|
226
|
+
ai:
|
|
227
|
+
skip_slack_context: true # never add Slack context
|
|
228
|
+
# keep code context on (default)
|
|
229
|
+
|
|
230
|
+
slack-only:
|
|
231
|
+
type: ai
|
|
232
|
+
prompt: "Answer based on this Slack thread"
|
|
233
|
+
ai:
|
|
234
|
+
skip_code_context: true # no PR/issue XML
|
|
235
|
+
# keep Slack context on (default)
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Semantics:
|
|
239
|
+
|
|
240
|
+
- `skip_code_context: true`
|
|
241
|
+
- Skip GitHub PR/issue XML context (diffs, metadata).
|
|
242
|
+
- `skip_slack_context: true`
|
|
243
|
+
- Skip Slack `<slack_context>` XML.
|
|
244
|
+
- `skip_transport_context: true`
|
|
245
|
+
- High‑level switch:
|
|
246
|
+
- Behaves like setting both `skip_code_context` and `skip_slack_context` to `true`,
|
|
247
|
+
**unless** those are explicitly overridden on the same step.
|
|
248
|
+
|
|
249
|
+
Even when transport XML is disabled, the **structured conversation object** is still available
|
|
250
|
+
in Liquid templates:
|
|
251
|
+
|
|
252
|
+
```liquid
|
|
253
|
+
{% if conversation %}
|
|
254
|
+
Transport: {{ conversation.transport }} {# 'slack', 'github', ... #}
|
|
255
|
+
Thread: {{ conversation.thread.id }}
|
|
256
|
+
{% for m in conversation.messages %}
|
|
257
|
+
{{ m.user }} ({{ m.role }}): {{ m.text }}
|
|
258
|
+
{% endfor %}
|
|
259
|
+
{% endif %}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
- For Slack:
|
|
263
|
+
- `conversation.transport == 'slack'`
|
|
264
|
+
- Also available via `slack.conversation`.
|
|
265
|
+
- For GitHub (PR/issue + comments):
|
|
266
|
+
- `conversation.transport == 'github'`
|
|
267
|
+
- Exposed via a normalized GitHub conversation builder.
|
|
268
|
+
|
|
269
|
+
Use these flags when you want full manual control over context, or to keep prompts lean in
|
|
270
|
+
chat‑style flows.
|
|
271
|
+
|
|
205
272
|
#### File Editing (`allowEdit`)
|
|
206
273
|
|
|
207
274
|
Enable Edit and Create tools to allow AI agents to modify files directly. This feature is disabled by default for security and requires explicit opt-in.
|