@probelabs/visor 0.1.107 → 0.1.111
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-20T19-22-58-043Z.ndjson} +91 -91
- package/dist/output/traces/run-2026-01-20T19-23-52-175Z.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-20T19-22-58-043Z.ndjson} +91 -91
- package/dist/traces/run-2026-01-20T19-23-52-175Z.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 +4 -2
- 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
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
version: "1.0"
|
|
2
|
+
|
|
3
|
+
# Reusable Tools Library
|
|
4
|
+
# This file defines custom tools that can be imported and reused across multiple configurations.
|
|
5
|
+
|
|
6
|
+
tools:
|
|
7
|
+
fetch-jira-issue:
|
|
8
|
+
name: fetch-jira-issue
|
|
9
|
+
description: Fetch JIRA issue details by issue key
|
|
10
|
+
inputSchema:
|
|
11
|
+
type: object
|
|
12
|
+
properties:
|
|
13
|
+
issue_key:
|
|
14
|
+
type: string
|
|
15
|
+
description: JIRA issue key (e.g., PROJ-123)
|
|
16
|
+
required: [issue_key]
|
|
17
|
+
exec: |
|
|
18
|
+
# In production, this would call JIRA API
|
|
19
|
+
# For demo, we simulate fetching issue data
|
|
20
|
+
ISSUE_KEY="{{ args.issue_key }}"
|
|
21
|
+
echo "{
|
|
22
|
+
\"key\": \"$ISSUE_KEY\",
|
|
23
|
+
\"summary\": \"Example issue for $ISSUE_KEY\",
|
|
24
|
+
\"priority\": \"high\",
|
|
25
|
+
\"assignee\": \"alice\",
|
|
26
|
+
\"status\": \"in-progress\"
|
|
27
|
+
}"
|
|
28
|
+
parseJson: true
|
|
29
|
+
timeout: 5000
|
|
30
|
+
|
|
31
|
+
fetch-external-data:
|
|
32
|
+
name: fetch-external-data
|
|
33
|
+
description: Fetch data from various external sources
|
|
34
|
+
inputSchema:
|
|
35
|
+
type: object
|
|
36
|
+
properties:
|
|
37
|
+
source:
|
|
38
|
+
type: string
|
|
39
|
+
description: Data source identifier
|
|
40
|
+
format:
|
|
41
|
+
type: string
|
|
42
|
+
enum: [json, xml, text]
|
|
43
|
+
default: json
|
|
44
|
+
required: [source]
|
|
45
|
+
exec: |
|
|
46
|
+
SOURCE="{{ args.source }}"
|
|
47
|
+
FORMAT="{{ args.format }}"
|
|
48
|
+
|
|
49
|
+
case $SOURCE in
|
|
50
|
+
"user-db")
|
|
51
|
+
echo '{"source":"user-db","data":{"users":["alice","bob"],"count":2}}'
|
|
52
|
+
;;
|
|
53
|
+
"config-service")
|
|
54
|
+
echo '{"source":"config-service","data":{"environment":"production","version":"1.2.3"}}'
|
|
55
|
+
;;
|
|
56
|
+
"metrics-api")
|
|
57
|
+
echo '{"source":"metrics-api","data":{"cpu":45,"memory":78,"requests":1523}}'
|
|
58
|
+
;;
|
|
59
|
+
*)
|
|
60
|
+
echo '{"source":"'$SOURCE'","data":"mock-data","format":"'$FORMAT'"}'
|
|
61
|
+
;;
|
|
62
|
+
esac
|
|
63
|
+
parseJson: true
|
|
64
|
+
timeout: 5000
|
|
65
|
+
|
|
66
|
+
validate-data:
|
|
67
|
+
name: validate-data
|
|
68
|
+
description: Validate data against rules
|
|
69
|
+
inputSchema:
|
|
70
|
+
type: object
|
|
71
|
+
properties:
|
|
72
|
+
data:
|
|
73
|
+
type: object
|
|
74
|
+
description: Data to validate
|
|
75
|
+
rules:
|
|
76
|
+
type: array
|
|
77
|
+
description: Validation rules
|
|
78
|
+
required: [data]
|
|
79
|
+
exec: |
|
|
80
|
+
# Simple validation check
|
|
81
|
+
DATA='{{ args.data | json }}'
|
|
82
|
+
echo "{
|
|
83
|
+
\"valid\": true,
|
|
84
|
+
\"checked_at\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",
|
|
85
|
+
\"data\": $DATA
|
|
86
|
+
}"
|
|
87
|
+
parseJson: true
|
|
88
|
+
timeout: 2000
|
|
89
|
+
|
|
90
|
+
# This file is meant to be imported via "extends:" in other configurations.
|
|
91
|
+
# No steps are defined here - only reusable tools.
|
|
92
|
+
steps: {}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
version: "1.0"
|
|
2
|
+
|
|
3
|
+
# Reusable Workflows Library
|
|
4
|
+
# This file defines workflows that can be imported and reused across multiple configurations.
|
|
5
|
+
|
|
6
|
+
workflows:
|
|
7
|
+
data-enrichment:
|
|
8
|
+
name: data-enrichment
|
|
9
|
+
description: Fetch and enrich data from multiple sources
|
|
10
|
+
steps:
|
|
11
|
+
- id: fetch-primary
|
|
12
|
+
type: command
|
|
13
|
+
exec: |
|
|
14
|
+
echo '{"primary":"data","value":42}'
|
|
15
|
+
|
|
16
|
+
- id: fetch-secondary
|
|
17
|
+
type: command
|
|
18
|
+
exec: |
|
|
19
|
+
echo '{"secondary":"metadata","timestamp":"2024-01-01"}'
|
|
20
|
+
|
|
21
|
+
- id: merge-results
|
|
22
|
+
type: command
|
|
23
|
+
exec: |
|
|
24
|
+
echo '{"enriched":true,"primary":{{ outputs["fetch-primary"] | json }},"secondary":{{ outputs["fetch-secondary"] | json }}}'
|
|
25
|
+
parseJson: true
|
|
26
|
+
|
|
27
|
+
output_mapping:
|
|
28
|
+
enriched_data: "{{ outputs['merge-results'] }}"
|
|
29
|
+
|
|
30
|
+
issue-triage:
|
|
31
|
+
name: issue-triage
|
|
32
|
+
description: Triage and categorize issues
|
|
33
|
+
steps:
|
|
34
|
+
- id: analyze-issue
|
|
35
|
+
type: command
|
|
36
|
+
exec: |
|
|
37
|
+
echo '{"category":"bug","priority":"high","labels":["security","urgent"]}'
|
|
38
|
+
parseJson: true
|
|
39
|
+
|
|
40
|
+
- id: assign-owner
|
|
41
|
+
type: command
|
|
42
|
+
exec: |
|
|
43
|
+
PRIORITY='{{ outputs["analyze-issue"].priority }}'
|
|
44
|
+
if [ "$PRIORITY" = "high" ]; then
|
|
45
|
+
echo '{"owner":"senior-dev","team":"security"}'
|
|
46
|
+
else
|
|
47
|
+
echo '{"owner":"junior-dev","team":"support"}'
|
|
48
|
+
fi
|
|
49
|
+
parseJson: true
|
|
50
|
+
|
|
51
|
+
output_mapping:
|
|
52
|
+
triage_result: "{{ outputs['analyze-issue'] }}"
|
|
53
|
+
assignment: "{{ outputs['assign-owner'] }}"
|
|
54
|
+
|
|
55
|
+
multi-step-validation:
|
|
56
|
+
name: multi-step-validation
|
|
57
|
+
description: Validate data through multiple steps
|
|
58
|
+
steps:
|
|
59
|
+
- id: schema-check
|
|
60
|
+
type: command
|
|
61
|
+
exec: |
|
|
62
|
+
echo '{"schema_valid":true,"errors":[]}'
|
|
63
|
+
parseJson: true
|
|
64
|
+
|
|
65
|
+
- id: business-rules
|
|
66
|
+
type: command
|
|
67
|
+
exec: |
|
|
68
|
+
echo '{"rules_passed":true,"warnings":["minor-issue"]}'
|
|
69
|
+
parseJson: true
|
|
70
|
+
|
|
71
|
+
- id: final-verdict
|
|
72
|
+
type: command
|
|
73
|
+
exec: |
|
|
74
|
+
SCHEMA_VALID='{{ outputs["schema-check"].schema_valid }}'
|
|
75
|
+
RULES_PASSED='{{ outputs["business-rules"].rules_passed }}'
|
|
76
|
+
if [ "$SCHEMA_VALID" = "true" ] && [ "$RULES_PASSED" = "true" ]; then
|
|
77
|
+
echo '{"valid":true,"status":"approved"}'
|
|
78
|
+
else
|
|
79
|
+
echo '{"valid":false,"status":"rejected"}'
|
|
80
|
+
fi
|
|
81
|
+
parseJson: true
|
|
82
|
+
|
|
83
|
+
output_mapping:
|
|
84
|
+
validation_result: "{{ outputs['final-verdict'] }}"
|
|
85
|
+
|
|
86
|
+
# This file is meant to be imported via "extends:" in other configurations.
|
|
87
|
+
# No steps are defined here - only reusable workflows.
|
|
88
|
+
steps: {}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
version: "2.0"
|
|
2
|
+
|
|
3
|
+
# Session reuse example: reuse_ai_session: self
|
|
4
|
+
# ---------------------------------------------
|
|
5
|
+
# This example demonstrates how a single AI step can reuse its own
|
|
6
|
+
# ProbeAgent session across multiple loops within the same engine run.
|
|
7
|
+
#
|
|
8
|
+
# Flow:
|
|
9
|
+
# seed (script) → convo (ai, reuse_ai_session: self, session_mode: append)
|
|
10
|
+
# └─ on_success.goto_js: loops back to convo up to 3 times
|
|
11
|
+
#
|
|
12
|
+
# The first time `convo` runs, it creates a new AI session. On subsequent
|
|
13
|
+
# iterations in the same run, `reuse_ai_session: self` causes the engine
|
|
14
|
+
# to reuse that same session (with `session_mode: append`), so the model
|
|
15
|
+
# keeps conversational context.
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
# Simple seed step to provide deterministic input to the AI check.
|
|
19
|
+
seed:
|
|
20
|
+
type: script
|
|
21
|
+
criticality: info
|
|
22
|
+
content: |
|
|
23
|
+
return { text: "hello from seed" };
|
|
24
|
+
|
|
25
|
+
# AI step that loops back to itself while reusing its own session.
|
|
26
|
+
convo:
|
|
27
|
+
type: ai
|
|
28
|
+
depends_on: [seed]
|
|
29
|
+
criticality: info
|
|
30
|
+
reuse_ai_session: self
|
|
31
|
+
session_mode: append
|
|
32
|
+
# Keep schema simple here – we only care about call counts in tests.
|
|
33
|
+
ai:
|
|
34
|
+
provider: mock
|
|
35
|
+
model: mock
|
|
36
|
+
disableTools: true
|
|
37
|
+
allowedTools: []
|
|
38
|
+
system_prompt: |
|
|
39
|
+
You are a tiny echo assistant.
|
|
40
|
+
Answer concisely and keep track of how the conversation evolves.
|
|
41
|
+
prompt: |
|
|
42
|
+
You are in a small internal conversation used to test AI session reuse.
|
|
43
|
+
|
|
44
|
+
Seed message: {{ outputs['seed'].text }}
|
|
45
|
+
|
|
46
|
+
Past convo outputs for this run (if any):
|
|
47
|
+
{% assign hist = outputs_history['convo'] | default: empty %}
|
|
48
|
+
{% if hist and hist.size > 0 %}
|
|
49
|
+
{% for h in hist %}
|
|
50
|
+
- Previous reply {{ forloop.index }} seen in this run.
|
|
51
|
+
{% endfor %}
|
|
52
|
+
{% else %}
|
|
53
|
+
- No previous replies yet in this run.
|
|
54
|
+
{% endif %}
|
|
55
|
+
on_success:
|
|
56
|
+
# Loop this step a few times to exercise reuse_ai_session: self.
|
|
57
|
+
goto_js: |
|
|
58
|
+
// "attempt" is the 1-based execution count for this step in this run.
|
|
59
|
+
// Run convo exactly 3 times, then stop.
|
|
60
|
+
return attempt < 3 ? 'convo' : null;
|
|
61
|
+
|
|
62
|
+
tests:
|
|
63
|
+
defaults:
|
|
64
|
+
strict: true
|
|
65
|
+
ai_provider: mock
|
|
66
|
+
|
|
67
|
+
cases:
|
|
68
|
+
- name: self-session-single-run
|
|
69
|
+
description: |
|
|
70
|
+
Basic smoke test: the workflow executes successfully and the
|
|
71
|
+
convo step runs exactly once. The config itself demonstrates
|
|
72
|
+
reuse_ai_session: self + session_mode: append for workflows
|
|
73
|
+
that route back to the same AI step.
|
|
74
|
+
event: manual
|
|
75
|
+
fixture: local.minimal
|
|
76
|
+
expect:
|
|
77
|
+
calls:
|
|
78
|
+
- step: seed
|
|
79
|
+
exactly: 1
|
|
80
|
+
- step: convo
|
|
81
|
+
exactly: 1
|