@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.
Files changed (235) hide show
  1. package/README.md +6 -0
  2. package/defaults/task-refinement.yaml +7 -3
  3. package/defaults/visor.tests.yaml +13 -2
  4. package/defaults/visor.yaml +1 -0
  5. package/dist/663.index.js +3 -2
  6. package/dist/80.index.js +3 -2
  7. package/dist/ai-review-service.d.ts +13 -9
  8. package/dist/ai-review-service.d.ts.map +1 -1
  9. package/dist/cli-main.d.ts.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/debug-visualizer/ws-server.d.ts +7 -1
  13. package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
  14. package/dist/defaults/task-refinement.yaml +7 -3
  15. package/dist/defaults/visor.tests.yaml +13 -2
  16. package/dist/defaults/visor.yaml +1 -0
  17. package/dist/docs/advanced-ai.md +60 -1
  18. package/dist/docs/ai-configuration.md +67 -0
  19. package/dist/docs/ai-custom-tools-usage.md +261 -0
  20. package/dist/docs/ai-custom-tools.md +392 -0
  21. package/dist/docs/bot-transports-rfc.md +23 -0
  22. package/dist/docs/configuration.md +21 -0
  23. package/dist/docs/engine-pause-resume-rfc.md +192 -0
  24. package/dist/docs/lifecycle-hooks.md +253 -0
  25. package/dist/docs/liquid-templates.md +143 -0
  26. package/dist/docs/providers/git-checkout.md +589 -0
  27. package/dist/docs/recipes.md +458 -5
  28. package/dist/docs/rfc/git-checkout-step.md +601 -0
  29. package/dist/docs/rfc/on_init-hook.md +1294 -0
  30. package/dist/docs/rfc/workspace-isolation.md +216 -0
  31. package/dist/docs/router-patterns.md +339 -0
  32. package/dist/event-bus/types.d.ts +14 -0
  33. package/dist/event-bus/types.d.ts.map +1 -1
  34. package/dist/examples/ai-custom-tools-example.yaml +206 -0
  35. package/dist/examples/ai-custom-tools-simple.yaml +76 -0
  36. package/dist/examples/git-checkout-basic.yaml +32 -0
  37. package/dist/examples/git-checkout-compare.yaml +59 -0
  38. package/dist/examples/git-checkout-cross-repo.yaml +76 -0
  39. package/dist/examples/on-init-import-demo.yaml +179 -0
  40. package/dist/examples/reusable-tools.yaml +92 -0
  41. package/dist/examples/reusable-workflows.yaml +88 -0
  42. package/dist/examples/session-reuse-self.yaml +81 -0
  43. package/dist/examples/slack-simple-chat.yaml +775 -0
  44. package/dist/failure-condition-evaluator.d.ts +2 -0
  45. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  46. package/dist/frontends/github-frontend.d.ts +20 -0
  47. package/dist/frontends/github-frontend.d.ts.map +1 -1
  48. package/dist/frontends/host.d.ts +4 -0
  49. package/dist/frontends/host.d.ts.map +1 -1
  50. package/dist/frontends/slack-frontend.d.ts +58 -0
  51. package/dist/frontends/slack-frontend.d.ts.map +1 -0
  52. package/dist/generated/config-schema.d.ts +409 -41
  53. package/dist/generated/config-schema.d.ts.map +1 -1
  54. package/dist/generated/config-schema.json +436 -47
  55. package/dist/github-comments.d.ts +2 -0
  56. package/dist/github-comments.d.ts.map +1 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +83587 -56085
  59. package/dist/liquid-extensions.d.ts.map +1 -1
  60. package/dist/logger.d.ts +1 -0
  61. package/dist/logger.d.ts.map +1 -1
  62. package/dist/output/traces/{run-2025-11-21T11-50-46-505Z.ndjson → run-2026-01-20T19-22-58-043Z.ndjson} +91 -91
  63. package/dist/output/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  64. package/dist/output-formatters.d.ts.map +1 -1
  65. package/dist/providers/ai-check-provider.d.ts +12 -0
  66. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  67. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  68. package/dist/providers/check-provider.interface.d.ts +9 -0
  69. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  70. package/dist/providers/command-check-provider.d.ts.map +1 -1
  71. package/dist/providers/custom-tool-executor.d.ts.map +1 -1
  72. package/dist/providers/git-checkout-provider.d.ts +25 -0
  73. package/dist/providers/git-checkout-provider.d.ts.map +1 -0
  74. package/dist/providers/http-client-provider.d.ts +3 -0
  75. package/dist/providers/http-client-provider.d.ts.map +1 -1
  76. package/dist/providers/human-input-check-provider.d.ts +2 -0
  77. package/dist/providers/human-input-check-provider.d.ts.map +1 -1
  78. package/dist/providers/log-check-provider.d.ts.map +1 -1
  79. package/dist/providers/mcp-check-provider.d.ts +1 -1
  80. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  81. package/dist/providers/mcp-custom-sse-server.d.ts +66 -0
  82. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -0
  83. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  84. package/dist/providers/script-check-provider.d.ts.map +1 -1
  85. package/dist/providers/workflow-check-provider.d.ts.map +1 -1
  86. package/dist/reviewer.d.ts.map +1 -1
  87. package/dist/sdk/check-provider-registry-534KL5HT.mjs +27 -0
  88. package/dist/sdk/chunk-23L3QRYX.mjs +16872 -0
  89. package/dist/sdk/chunk-23L3QRYX.mjs.map +1 -0
  90. package/dist/sdk/{chunk-OOZITMRU.mjs → chunk-3OMWVM6J.mjs} +11 -1
  91. package/dist/sdk/{chunk-OOZITMRU.mjs.map → chunk-3OMWVM6J.mjs.map} +1 -1
  92. package/dist/sdk/{chunk-37ZSCMFC.mjs → chunk-7UK3NIIT.mjs} +2 -2
  93. package/dist/sdk/{chunk-VMPLF6FT.mjs → chunk-AGIZJ4UZ.mjs} +50 -4
  94. package/dist/sdk/chunk-AGIZJ4UZ.mjs.map +1 -0
  95. package/dist/sdk/{chunk-IEO6CFLG.mjs → chunk-AIVFBIS4.mjs} +161 -5
  96. package/dist/sdk/chunk-AIVFBIS4.mjs.map +1 -0
  97. package/dist/sdk/chunk-AK6BVWIT.mjs +426 -0
  98. package/dist/sdk/chunk-AK6BVWIT.mjs.map +1 -0
  99. package/dist/sdk/chunk-AUT26LHW.mjs +139 -0
  100. package/dist/sdk/chunk-AUT26LHW.mjs.map +1 -0
  101. package/dist/sdk/chunk-BOVFH3LI.mjs +232 -0
  102. package/dist/sdk/chunk-BOVFH3LI.mjs.map +1 -0
  103. package/dist/sdk/chunk-HTOKWMPO.mjs +157 -0
  104. package/dist/sdk/chunk-HTOKWMPO.mjs.map +1 -0
  105. package/dist/sdk/{chunk-6Y4YTKCF.mjs → chunk-NAW3DB3I.mjs} +2 -2
  106. package/dist/sdk/{chunk-OWUVOILT.mjs → chunk-QR7MOMJH.mjs} +4 -3
  107. package/dist/sdk/{chunk-OWUVOILT.mjs.map → chunk-QR7MOMJH.mjs.map} +1 -1
  108. package/dist/sdk/{chunk-PTL3K3PN.mjs → chunk-QY2XYPEV.mjs} +488 -60
  109. package/dist/sdk/chunk-QY2XYPEV.mjs.map +1 -0
  110. package/dist/sdk/{chunk-OZJ263FM.mjs → chunk-SIWNBRTK.mjs} +29 -215
  111. package/dist/sdk/chunk-SIWNBRTK.mjs.map +1 -0
  112. package/dist/sdk/command-executor-TYUV6HUS.mjs +14 -0
  113. package/dist/sdk/{config-M4ZNO6NU.mjs → config-YNC2EOOT.mjs} +5 -3
  114. package/dist/sdk/{failure-condition-evaluator-NBO5YRXW.mjs → failure-condition-evaluator-YGTF2GHG.mjs} +6 -5
  115. package/dist/sdk/{github-frontend-4AWRJT7D.mjs → github-frontend-SIAEOCON.mjs} +190 -12
  116. package/dist/sdk/github-frontend-SIAEOCON.mjs.map +1 -0
  117. package/dist/sdk/{host-7GBC3S7L.mjs → host-DXUYTNMU.mjs} +5 -2
  118. package/dist/sdk/host-DXUYTNMU.mjs.map +1 -0
  119. package/dist/sdk/{liquid-extensions-C7EG3YKH.mjs → liquid-extensions-PKWCKK7E.mjs} +5 -4
  120. package/dist/sdk/memory-store-XGBB7LX7.mjs +12 -0
  121. package/dist/sdk/prompt-state-YRJY6QAL.mjs +16 -0
  122. package/dist/sdk/{renderer-schema-6RF26VUS.mjs → renderer-schema-LPKN5UJS.mjs} +3 -2
  123. package/dist/sdk/{renderer-schema-6RF26VUS.mjs.map → renderer-schema-LPKN5UJS.mjs.map} +1 -1
  124. package/dist/sdk/{routing-RP56JTV2.mjs → routing-6N45MJ4F.mjs} +7 -6
  125. package/dist/sdk/sdk.d.mts +219 -5
  126. package/dist/sdk/sdk.d.ts +219 -5
  127. package/dist/sdk/sdk.js +21329 -14908
  128. package/dist/sdk/sdk.js.map +1 -1
  129. package/dist/sdk/sdk.mjs +407 -12874
  130. package/dist/sdk/sdk.mjs.map +1 -1
  131. package/dist/sdk/{session-registry-N5FFYFTM.mjs → session-registry-4E6YRQ77.mjs} +2 -2
  132. package/dist/sdk/session-registry-4E6YRQ77.mjs.map +1 -0
  133. package/dist/sdk/slack-frontend-BVKW3GD5.mjs +735 -0
  134. package/dist/sdk/slack-frontend-BVKW3GD5.mjs.map +1 -0
  135. package/dist/sdk/{tracer-init-WP4X46IF.mjs → tracer-init-GSLPPLCD.mjs} +2 -2
  136. package/dist/sdk/tracer-init-GSLPPLCD.mjs.map +1 -0
  137. package/dist/sdk/workflow-registry-R6KSACFR.mjs +12 -0
  138. package/dist/sdk/workflow-registry-R6KSACFR.mjs.map +1 -0
  139. package/dist/slack/adapter.d.ts +36 -0
  140. package/dist/slack/adapter.d.ts.map +1 -0
  141. package/dist/slack/cache-prewarmer.d.ts +31 -0
  142. package/dist/slack/cache-prewarmer.d.ts.map +1 -0
  143. package/dist/slack/client.d.ts +77 -0
  144. package/dist/slack/client.d.ts.map +1 -0
  145. package/dist/slack/markdown.d.ts +45 -0
  146. package/dist/slack/markdown.d.ts.map +1 -0
  147. package/dist/slack/prompt-state.d.ts +33 -0
  148. package/dist/slack/prompt-state.d.ts.map +1 -0
  149. package/dist/slack/rate-limiter.d.ts +56 -0
  150. package/dist/slack/rate-limiter.d.ts.map +1 -0
  151. package/dist/slack/signature.d.ts +2 -0
  152. package/dist/slack/signature.d.ts.map +1 -0
  153. package/dist/slack/socket-runner.d.ts +42 -0
  154. package/dist/slack/socket-runner.d.ts.map +1 -0
  155. package/dist/slack/thread-cache.d.ts +51 -0
  156. package/dist/slack/thread-cache.d.ts.map +1 -0
  157. package/dist/state-machine/context/build-engine-context.d.ts +8 -0
  158. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -1
  159. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -1
  160. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -1
  161. package/dist/state-machine/dispatch/on-init-handlers.d.ts +43 -0
  162. package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -0
  163. package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -1
  164. package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -1
  165. package/dist/state-machine/runner.d.ts +6 -0
  166. package/dist/state-machine/runner.d.ts.map +1 -1
  167. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -1
  168. package/dist/state-machine/states/plan-ready.d.ts.map +1 -1
  169. package/dist/state-machine/states/routing.d.ts.map +1 -1
  170. package/dist/state-machine/states/wave-planning.d.ts.map +1 -1
  171. package/dist/state-machine/workflow-projection.d.ts.map +1 -1
  172. package/dist/state-machine-execution-engine.d.ts +21 -9
  173. package/dist/state-machine-execution-engine.d.ts.map +1 -1
  174. package/dist/telemetry/state-capture.d.ts +5 -0
  175. package/dist/telemetry/state-capture.d.ts.map +1 -1
  176. package/dist/test-runner/core/flow-stage.d.ts.map +1 -1
  177. package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -1
  178. package/dist/test-runner/evaluators.d.ts +37 -4
  179. package/dist/test-runner/evaluators.d.ts.map +1 -1
  180. package/dist/test-runner/index.d.ts +7 -0
  181. package/dist/test-runner/index.d.ts.map +1 -1
  182. package/dist/test-runner/recorders/slack-recorder.d.ts +17 -0
  183. package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -0
  184. package/dist/test-runner/validator.d.ts.map +1 -1
  185. package/dist/traces/{run-2025-11-21T11-50-46-505Z.ndjson → run-2026-01-20T19-22-58-043Z.ndjson} +91 -91
  186. package/dist/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  187. package/dist/types/bot.d.ts +109 -0
  188. package/dist/types/bot.d.ts.map +1 -0
  189. package/dist/types/cli.d.ts +4 -0
  190. package/dist/types/cli.d.ts.map +1 -1
  191. package/dist/types/config.d.ts +182 -5
  192. package/dist/types/config.d.ts.map +1 -1
  193. package/dist/types/engine.d.ts +5 -0
  194. package/dist/types/engine.d.ts.map +1 -1
  195. package/dist/types/git-checkout.d.ts +76 -0
  196. package/dist/types/git-checkout.d.ts.map +1 -0
  197. package/dist/utils/json-text-extractor.d.ts +17 -0
  198. package/dist/utils/json-text-extractor.d.ts.map +1 -0
  199. package/dist/utils/sandbox.d.ts +10 -0
  200. package/dist/utils/sandbox.d.ts.map +1 -1
  201. package/dist/utils/template-context.d.ts +1 -0
  202. package/dist/utils/template-context.d.ts.map +1 -1
  203. package/dist/utils/tracer-init.d.ts.map +1 -1
  204. package/dist/utils/workspace-manager.d.ts +118 -0
  205. package/dist/utils/workspace-manager.d.ts.map +1 -0
  206. package/dist/utils/worktree-cleanup.d.ts +33 -0
  207. package/dist/utils/worktree-cleanup.d.ts.map +1 -0
  208. package/dist/utils/worktree-manager.d.ts +153 -0
  209. package/dist/utils/worktree-manager.d.ts.map +1 -0
  210. package/dist/webhook-server.d.ts.map +1 -1
  211. package/dist/workflow-executor.d.ts.map +1 -1
  212. package/dist/workflow-registry.d.ts.map +1 -1
  213. package/package.json +4 -2
  214. package/dist/output/traces/run-2025-11-21T11-51-33-674Z.ndjson +0 -839
  215. package/dist/sdk/chunk-IEO6CFLG.mjs.map +0 -1
  216. package/dist/sdk/chunk-JEHPDJIF.mjs +0 -223
  217. package/dist/sdk/chunk-JEHPDJIF.mjs.map +0 -1
  218. package/dist/sdk/chunk-OZJ263FM.mjs.map +0 -1
  219. package/dist/sdk/chunk-PTL3K3PN.mjs.map +0 -1
  220. package/dist/sdk/chunk-VMPLF6FT.mjs.map +0 -1
  221. package/dist/sdk/github-frontend-4AWRJT7D.mjs.map +0 -1
  222. package/dist/sdk/host-7GBC3S7L.mjs.map +0 -1
  223. package/dist/sdk/memory-store-GJACZC2A.mjs +0 -11
  224. package/dist/sdk/workflow-registry-2YIIXQCK.mjs +0 -11
  225. package/dist/traces/run-2025-11-21T11-51-33-674Z.ndjson +0 -839
  226. /package/dist/sdk/{config-M4ZNO6NU.mjs.map → check-provider-registry-534KL5HT.mjs.map} +0 -0
  227. /package/dist/sdk/{chunk-37ZSCMFC.mjs.map → chunk-7UK3NIIT.mjs.map} +0 -0
  228. /package/dist/sdk/{chunk-6Y4YTKCF.mjs.map → chunk-NAW3DB3I.mjs.map} +0 -0
  229. /package/dist/sdk/{failure-condition-evaluator-NBO5YRXW.mjs.map → command-executor-TYUV6HUS.mjs.map} +0 -0
  230. /package/dist/sdk/{liquid-extensions-C7EG3YKH.mjs.map → config-YNC2EOOT.mjs.map} +0 -0
  231. /package/dist/sdk/{memory-store-GJACZC2A.mjs.map → failure-condition-evaluator-YGTF2GHG.mjs.map} +0 -0
  232. /package/dist/sdk/{routing-RP56JTV2.mjs.map → liquid-extensions-PKWCKK7E.mjs.map} +0 -0
  233. /package/dist/sdk/{session-registry-N5FFYFTM.mjs.map → memory-store-XGBB7LX7.mjs.map} +0 -0
  234. /package/dist/sdk/{tracer-init-WP4X46IF.mjs.map → prompt-state-YRJY6QAL.mjs.map} +0 -0
  235. /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