@probelabs/visor 0.1.106 → 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 (530) hide show
  1. package/README.md +71 -2
  2. package/action.yml +1 -1
  3. package/defaults/code-refiner.yaml +114 -0
  4. package/defaults/{.visor.yaml → code-review.yaml} +35 -226
  5. package/defaults/override.yaml +52 -0
  6. package/defaults/task-refinement.yaml +624 -0
  7. package/defaults/visor.tests.yaml +685 -0
  8. package/defaults/visor.yaml +483 -0
  9. package/dist/action-cli-bridge.d.ts +11 -82
  10. package/dist/action-cli-bridge.d.ts.map +1 -1
  11. package/dist/ai-review-service.d.ts +28 -9
  12. package/dist/ai-review-service.d.ts.map +1 -1
  13. package/dist/check-execution-engine.d.ts +19 -331
  14. package/dist/check-execution-engine.d.ts.map +1 -1
  15. package/dist/cli-main.d.ts.map +1 -1
  16. package/dist/cli.d.ts +0 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/config.d.ts +16 -0
  19. package/dist/config.d.ts.map +1 -1
  20. package/dist/cron-scheduler.d.ts +3 -3
  21. package/dist/cron-scheduler.d.ts.map +1 -1
  22. package/dist/debug-visualizer/ws-server.d.ts +7 -1
  23. package/dist/debug-visualizer/ws-server.d.ts.map +1 -1
  24. package/dist/defaults/code-refiner.yaml +114 -0
  25. package/dist/defaults/{.visor.yaml → code-review.yaml} +35 -226
  26. package/dist/defaults/override.yaml +52 -0
  27. package/dist/defaults/task-refinement.yaml +624 -0
  28. package/dist/defaults/visor.tests.yaml +685 -0
  29. package/dist/defaults/visor.yaml +483 -0
  30. package/dist/docs/DEPLOYMENT.md +118 -0
  31. package/dist/docs/GITHUB_CHECKS.md +280 -0
  32. package/dist/docs/NPM_USAGE.md +208 -0
  33. package/dist/docs/action-reference.md +19 -0
  34. package/dist/docs/advanced-ai.md +237 -0
  35. package/dist/docs/ai-configuration.md +535 -0
  36. package/dist/docs/ai-custom-tools-usage.md +261 -0
  37. package/dist/docs/ai-custom-tools.md +392 -0
  38. package/dist/docs/author-permissions.md +610 -0
  39. package/dist/docs/bot-transports-rfc.md +23 -0
  40. package/dist/docs/ci-cli-mode.md +34 -0
  41. package/dist/docs/claude-code.md +74 -0
  42. package/dist/docs/command-provider.md +559 -0
  43. package/dist/docs/commands.md +8 -0
  44. package/dist/docs/configuration.md +324 -0
  45. package/dist/docs/custom-tools.md +424 -0
  46. package/dist/docs/dashboards/README.md +23 -0
  47. package/dist/docs/dashboards/grafana-visor-diagrams.json +20 -0
  48. package/dist/docs/dashboards/grafana-visor-overview.json +33 -0
  49. package/dist/docs/debug-visualizer-progress.md +572 -0
  50. package/dist/docs/debug-visualizer-rfc.md +691 -0
  51. package/dist/docs/debug-visualizer.md +114 -0
  52. package/dist/docs/debugging.md +636 -0
  53. package/dist/docs/default-output-schema.md +28 -0
  54. package/dist/docs/dependencies.md +369 -0
  55. package/dist/docs/dev-playbook.md +9 -0
  56. package/dist/docs/engine-pause-resume-rfc.md +192 -0
  57. package/dist/docs/engine-state-machine-plan.md +333 -0
  58. package/dist/docs/event-driven-github-integration-rfc.md +743 -0
  59. package/dist/docs/event-triggers.md +292 -0
  60. package/dist/docs/execution-statistics-rfc.md +290 -0
  61. package/dist/docs/fact-validator-gap-analysis.md +178 -0
  62. package/dist/docs/fact-validator-implementation-plan.md +1235 -0
  63. package/dist/docs/fail-if.md +95 -0
  64. package/dist/docs/failure-conditions-implementation.md +271 -0
  65. package/dist/docs/failure-conditions-schema.md +173 -0
  66. package/dist/docs/failure-routing-rfc.md +193 -0
  67. package/dist/docs/failure-routing.md +507 -0
  68. package/dist/docs/foreach-dependency-propagation.md +473 -0
  69. package/dist/docs/github-ops.md +89 -0
  70. package/dist/docs/goto-forward-run-plan.md +113 -0
  71. package/dist/docs/guides/criticality-modes.md +332 -0
  72. package/dist/docs/guides/fault-management-and-contracts.md +738 -0
  73. package/dist/docs/guides/workflow-style-guide.md +224 -0
  74. package/dist/docs/http.md +299 -0
  75. package/dist/docs/human-input-provider.md +372 -0
  76. package/dist/docs/lifecycle-hooks.md +253 -0
  77. package/dist/docs/limits.md +64 -0
  78. package/dist/docs/liquid-templates.md +490 -0
  79. package/dist/docs/loop-routing-refactor.md +89 -0
  80. package/dist/docs/mcp-provider.md +557 -0
  81. package/dist/docs/mcp.md +124 -0
  82. package/dist/docs/memory.md +903 -0
  83. package/dist/docs/observability.md +12 -0
  84. package/dist/docs/output-formats.md +20 -0
  85. package/dist/docs/output-formatting.md +29 -0
  86. package/dist/docs/output-history.md +383 -0
  87. package/dist/docs/performance.md +6 -0
  88. package/dist/docs/pluggable.md +124 -0
  89. package/dist/docs/proposals/snapshot-scope-execution.md +236 -0
  90. package/dist/docs/providers/git-checkout.md +589 -0
  91. package/dist/docs/recipes.md +474 -0
  92. package/dist/docs/rfc/git-checkout-step.md +601 -0
  93. package/dist/docs/rfc/on_init-hook.md +1294 -0
  94. package/dist/docs/rfc/workspace-isolation.md +216 -0
  95. package/dist/docs/roadmap/criticality-implementation-tasks.md +92 -0
  96. package/dist/docs/router-patterns.md +339 -0
  97. package/dist/docs/schema-next-pr.md +10 -0
  98. package/dist/docs/schema-templates.md +68 -0
  99. package/dist/docs/script.md +34 -0
  100. package/dist/docs/sdk.md +222 -0
  101. package/dist/docs/security.md +7 -0
  102. package/dist/docs/suppressions.md +89 -0
  103. package/dist/docs/tag-filtering.md +258 -0
  104. package/dist/docs/telemetry-setup.md +119 -0
  105. package/dist/docs/telemetry-tracing-rfc.md +275 -0
  106. package/dist/docs/test-framework-rfc.md +680 -0
  107. package/dist/docs/testing/assertions.md +85 -0
  108. package/dist/docs/testing/ci.md +44 -0
  109. package/dist/docs/testing/cli.md +41 -0
  110. package/dist/docs/testing/cookbook.md +172 -0
  111. package/dist/docs/testing/dsl-reference.md +199 -0
  112. package/dist/docs/testing/fixtures-and-mocks.md +91 -0
  113. package/dist/docs/testing/flows.md +92 -0
  114. package/dist/docs/testing/getting-started.md +93 -0
  115. package/dist/docs/testing/troubleshooting.md +55 -0
  116. package/dist/docs/timeouts.md +50 -0
  117. package/dist/docs/troubleshooting.md +7 -0
  118. package/dist/docs/visor-sdk-rfc.md +186 -0
  119. package/dist/docs/workflows.md +569 -0
  120. package/dist/engine/on-finish/orchestrator.d.ts +19 -0
  121. package/dist/engine/on-finish/orchestrator.d.ts.map +1 -0
  122. package/dist/engine/on-finish/utils.d.ts +44 -0
  123. package/dist/engine/on-finish/utils.d.ts.map +1 -0
  124. package/dist/event-bus/event-bus.d.ts +13 -0
  125. package/dist/event-bus/event-bus.d.ts.map +1 -0
  126. package/dist/event-bus/types.d.ts +71 -0
  127. package/dist/event-bus/types.d.ts.map +1 -0
  128. package/dist/examples/.claude/agents/code-reviewer.md +69 -0
  129. package/dist/examples/.mcp.json +34 -0
  130. package/dist/examples/CALCULATOR-SDK.md +364 -0
  131. package/dist/examples/README.md +384 -0
  132. package/dist/examples/ai-custom-tools-example.yaml +206 -0
  133. package/dist/examples/ai-custom-tools-simple.yaml +76 -0
  134. package/dist/examples/ai-retry-fallback-config.yaml +180 -0
  135. package/dist/examples/ai-with-bash.yaml +126 -0
  136. package/dist/examples/ai-with-mcp.yaml +82 -0
  137. package/dist/examples/basic-human-input.yaml +15 -0
  138. package/dist/examples/bedrock-config.yaml +77 -0
  139. package/dist/examples/calculator-config.yaml +133 -0
  140. package/dist/examples/calculator-json-output-guide.md +311 -0
  141. package/dist/examples/calculator-sdk-automated.ts +340 -0
  142. package/dist/examples/calculator-sdk-example.ts +275 -0
  143. package/dist/examples/calculator-sdk-json.ts +331 -0
  144. package/dist/examples/calculator-sdk-real.ts +374 -0
  145. package/dist/examples/calculator-sdk-test.ts +148 -0
  146. package/dist/examples/claude-code-config.yaml +191 -0
  147. package/dist/examples/cron-webhook-config.yaml +215 -0
  148. package/dist/examples/custom-template.liquid +57 -0
  149. package/dist/examples/custom-tools-example.yaml +281 -0
  150. package/dist/examples/enhanced-config.yaml +165 -0
  151. package/dist/examples/environments/visor.base.yaml +92 -0
  152. package/dist/examples/environments/visor.dev.yaml +33 -0
  153. package/dist/examples/environments/visor.prod.yaml +95 -0
  154. package/dist/examples/environments/visor.staging.yaml +46 -0
  155. package/dist/examples/fact-validator.yaml +361 -0
  156. package/dist/examples/fail-if-simple.yaml +90 -0
  157. package/dist/examples/failure-conditions-advanced.yaml +136 -0
  158. package/dist/examples/failure-conditions-basic.yaml +48 -0
  159. package/dist/examples/failure-conditions-github-style.yaml +119 -0
  160. package/dist/examples/failure-conditions-migration.yaml +74 -0
  161. package/dist/examples/for-loop-example.yaml +176 -0
  162. package/dist/examples/forEach-example.yaml +120 -0
  163. package/dist/examples/git-checkout-basic.yaml +32 -0
  164. package/dist/examples/git-checkout-compare.yaml +59 -0
  165. package/dist/examples/git-checkout-cross-repo.yaml +76 -0
  166. package/dist/examples/github-workflow-with-tags.yml +163 -0
  167. package/dist/examples/http-integration-config.yaml +240 -0
  168. package/dist/examples/https-server-config.yaml +209 -0
  169. package/dist/examples/human-input-example.yaml +63 -0
  170. package/dist/examples/if-conditions.yaml +173 -0
  171. package/dist/examples/jira-simple-example.yaml +56 -0
  172. package/dist/examples/jira-single-issue-workflow.yaml +166 -0
  173. package/dist/examples/jira-workflow-mcp.yaml +182 -0
  174. package/dist/examples/mcp/analyzer.py +119 -0
  175. package/dist/examples/mcp-provider-example.yaml +301 -0
  176. package/dist/examples/memory-counter.yaml +99 -0
  177. package/dist/examples/memory-error-collection.yaml +104 -0
  178. package/dist/examples/memory-exec-js.yaml +247 -0
  179. package/dist/examples/memory-namespace-isolation.yaml +184 -0
  180. package/dist/examples/memory-retry-counter.yaml +65 -0
  181. package/dist/examples/memory-state-machine.yaml +170 -0
  182. package/dist/examples/on-init-import-demo.yaml +179 -0
  183. package/dist/examples/outputs-raw-basic.yaml +26 -0
  184. package/dist/examples/project-with-tools.yaml +174 -0
  185. package/dist/examples/prompts/architecture-analysis.liquid +116 -0
  186. package/dist/examples/prompts/security-comprehensive.liquid +107 -0
  187. package/dist/examples/quick-start-tags.yaml +53 -0
  188. package/dist/examples/reusable-tools.yaml +92 -0
  189. package/dist/examples/reusable-workflows.yaml +88 -0
  190. package/dist/examples/routing-basic.yaml +35 -0
  191. package/dist/examples/routing-dynamic-js.yaml +46 -0
  192. package/dist/examples/routing-foreach.yaml +34 -0
  193. package/dist/examples/routing-goto-event.yaml +34 -0
  194. package/dist/examples/routing-on-success.yaml +25 -0
  195. package/dist/examples/run-calculator-demo.sh +71 -0
  196. package/dist/examples/sdk-basic.mjs +10 -0
  197. package/dist/examples/sdk-cjs.cjs +10 -0
  198. package/dist/examples/sdk-comprehensive.mjs +175 -0
  199. package/dist/examples/sdk-manual-config.mjs +65 -0
  200. package/dist/examples/sdk-typescript.js +81 -0
  201. package/dist/examples/sdk-typescript.ts +92 -0
  202. package/dist/examples/session-reuse-config.yaml +151 -0
  203. package/dist/examples/session-reuse-self.yaml +81 -0
  204. package/dist/examples/slack-simple-chat.yaml +775 -0
  205. package/dist/examples/templates/security-report.liquid +137 -0
  206. package/dist/examples/tools-library.yaml +281 -0
  207. package/dist/examples/transform-example.yaml +199 -0
  208. package/dist/examples/visor-with-tags.yaml +198 -0
  209. package/dist/examples/webhook-pipeline-config.yaml +218 -0
  210. package/dist/examples/workflows/calculator-workflow.yaml +163 -0
  211. package/dist/examples/workflows/code-quality.yaml +222 -0
  212. package/dist/examples/workflows/quick-pr-check.yaml +90 -0
  213. package/dist/examples/workflows/workflow-composition-example.yaml +130 -0
  214. package/dist/failure-condition-evaluator.d.ts +3 -0
  215. package/dist/failure-condition-evaluator.d.ts.map +1 -1
  216. package/dist/frontends/github-frontend.d.ts +58 -0
  217. package/dist/frontends/github-frontend.d.ts.map +1 -0
  218. package/dist/frontends/host.d.ts +47 -0
  219. package/dist/frontends/host.d.ts.map +1 -0
  220. package/dist/frontends/ndjson-sink.d.ts +12 -0
  221. package/dist/frontends/ndjson-sink.d.ts.map +1 -0
  222. package/dist/frontends/slack-frontend.d.ts +58 -0
  223. package/dist/frontends/slack-frontend.d.ts.map +1 -0
  224. package/dist/generated/config-schema.d.ts +967 -57
  225. package/dist/generated/config-schema.d.ts.map +1 -1
  226. package/dist/generated/config-schema.json +1033 -56
  227. package/dist/github-check-service.d.ts +4 -6
  228. package/dist/github-check-service.d.ts.map +1 -1
  229. package/dist/github-comments.d.ts +2 -4
  230. package/dist/github-comments.d.ts.map +1 -1
  231. package/dist/index.d.ts.map +1 -1
  232. package/dist/index.js +134327 -99004
  233. package/dist/liquid-extensions.d.ts.map +1 -1
  234. package/dist/logger.d.ts +2 -0
  235. package/dist/logger.d.ts.map +1 -1
  236. package/dist/memory-store.d.ts +6 -0
  237. package/dist/memory-store.d.ts.map +1 -1
  238. package/dist/output/assistant-json/template.liquid +0 -0
  239. package/dist/output/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
  240. package/dist/output/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  241. package/dist/output-formatters.d.ts +1 -1
  242. package/dist/output-formatters.d.ts.map +1 -1
  243. package/dist/providers/ai-check-provider.d.ts +12 -0
  244. package/dist/providers/ai-check-provider.d.ts.map +1 -1
  245. package/dist/providers/check-provider-registry.d.ts +6 -0
  246. package/dist/providers/check-provider-registry.d.ts.map +1 -1
  247. package/dist/providers/check-provider.interface.d.ts +43 -1
  248. package/dist/providers/check-provider.interface.d.ts.map +1 -1
  249. package/dist/providers/claude-code-check-provider.d.ts.map +1 -1
  250. package/dist/providers/command-check-provider.d.ts +1 -1
  251. package/dist/providers/command-check-provider.d.ts.map +1 -1
  252. package/dist/providers/custom-tool-executor.d.ts +61 -0
  253. package/dist/providers/custom-tool-executor.d.ts.map +1 -0
  254. package/dist/providers/git-checkout-provider.d.ts +25 -0
  255. package/dist/providers/git-checkout-provider.d.ts.map +1 -0
  256. package/dist/providers/github-ops-provider.d.ts.map +1 -1
  257. package/dist/providers/http-client-provider.d.ts +4 -4
  258. package/dist/providers/http-client-provider.d.ts.map +1 -1
  259. package/dist/providers/human-input-check-provider.d.ts +5 -0
  260. package/dist/providers/human-input-check-provider.d.ts.map +1 -1
  261. package/dist/providers/index.d.ts +1 -0
  262. package/dist/providers/index.d.ts.map +1 -1
  263. package/dist/providers/log-check-provider.d.ts +2 -5
  264. package/dist/providers/log-check-provider.d.ts.map +1 -1
  265. package/dist/providers/mcp-check-provider.d.ts +10 -4
  266. package/dist/providers/mcp-check-provider.d.ts.map +1 -1
  267. package/dist/providers/mcp-custom-sse-server.d.ts +66 -0
  268. package/dist/providers/mcp-custom-sse-server.d.ts.map +1 -0
  269. package/dist/providers/memory-check-provider.d.ts +2 -8
  270. package/dist/providers/memory-check-provider.d.ts.map +1 -1
  271. package/dist/providers/script-check-provider.d.ts +25 -0
  272. package/dist/providers/script-check-provider.d.ts.map +1 -0
  273. package/dist/providers/workflow-check-provider.d.ts +56 -0
  274. package/dist/providers/workflow-check-provider.d.ts.map +1 -0
  275. package/dist/reviewer.d.ts +2 -1
  276. package/dist/reviewer.d.ts.map +1 -1
  277. package/dist/sdk/check-provider-registry-534KL5HT.mjs +27 -0
  278. package/dist/sdk/chunk-23L3QRYX.mjs +16872 -0
  279. package/dist/sdk/chunk-23L3QRYX.mjs.map +1 -0
  280. package/dist/sdk/{chunk-TUTOLSFV.mjs → chunk-3OMWVM6J.mjs} +11 -1
  281. package/dist/sdk/chunk-3OMWVM6J.mjs.map +1 -0
  282. package/dist/sdk/chunk-7UK3NIIT.mjs +482 -0
  283. package/dist/sdk/chunk-7UK3NIIT.mjs.map +1 -0
  284. package/dist/sdk/chunk-AGIZJ4UZ.mjs +173 -0
  285. package/dist/sdk/chunk-AGIZJ4UZ.mjs.map +1 -0
  286. package/dist/sdk/chunk-AIVFBIS4.mjs +1371 -0
  287. package/dist/sdk/chunk-AIVFBIS4.mjs.map +1 -0
  288. package/dist/sdk/chunk-AK6BVWIT.mjs +426 -0
  289. package/dist/sdk/chunk-AK6BVWIT.mjs.map +1 -0
  290. package/dist/sdk/chunk-AUT26LHW.mjs +139 -0
  291. package/dist/sdk/chunk-AUT26LHW.mjs.map +1 -0
  292. package/dist/sdk/chunk-BOVFH3LI.mjs +232 -0
  293. package/dist/sdk/chunk-BOVFH3LI.mjs.map +1 -0
  294. package/dist/sdk/chunk-CNX7V5JK.mjs +89 -0
  295. package/dist/sdk/chunk-CNX7V5JK.mjs.map +1 -0
  296. package/dist/sdk/chunk-HTOKWMPO.mjs +157 -0
  297. package/dist/sdk/chunk-HTOKWMPO.mjs.map +1 -0
  298. package/dist/sdk/chunk-NAW3DB3I.mjs +197 -0
  299. package/dist/sdk/chunk-NAW3DB3I.mjs.map +1 -0
  300. package/dist/sdk/chunk-O5EZDNYL.mjs +274 -0
  301. package/dist/sdk/chunk-O5EZDNYL.mjs.map +1 -0
  302. package/dist/sdk/chunk-QR7MOMJH.mjs +558 -0
  303. package/dist/sdk/chunk-QR7MOMJH.mjs.map +1 -0
  304. package/dist/sdk/chunk-QY2XYPEV.mjs +3556 -0
  305. package/dist/sdk/chunk-QY2XYPEV.mjs.map +1 -0
  306. package/dist/sdk/chunk-S2RUE2RG.mjs +145 -0
  307. package/dist/sdk/chunk-S2RUE2RG.mjs.map +1 -0
  308. package/dist/sdk/chunk-SIWNBRTK.mjs +800 -0
  309. package/dist/sdk/chunk-SIWNBRTK.mjs.map +1 -0
  310. package/dist/sdk/chunk-YSN4G6CI.mjs +146 -0
  311. package/dist/sdk/chunk-YSN4G6CI.mjs.map +1 -0
  312. package/dist/sdk/chunk-ZYAUYXSW.mjs +206 -0
  313. package/dist/sdk/chunk-ZYAUYXSW.mjs.map +1 -0
  314. package/dist/sdk/command-executor-TYUV6HUS.mjs +14 -0
  315. package/dist/sdk/config-YNC2EOOT.mjs +16 -0
  316. package/dist/sdk/config-merger-PX3WIT57.mjs +10 -0
  317. package/dist/sdk/event-bus-5BEVPQ6T.mjs +35 -0
  318. package/dist/sdk/event-bus-5BEVPQ6T.mjs.map +1 -0
  319. package/dist/sdk/failure-condition-evaluator-YGTF2GHG.mjs +17 -0
  320. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs +458 -0
  321. package/dist/sdk/git-repository-analyzer-HJC4MYW4.mjs.map +1 -0
  322. package/dist/sdk/github-frontend-SIAEOCON.mjs +1420 -0
  323. package/dist/sdk/github-frontend-SIAEOCON.mjs.map +1 -0
  324. package/dist/sdk/host-DXUYTNMU.mjs +52 -0
  325. package/dist/sdk/host-DXUYTNMU.mjs.map +1 -0
  326. package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs → liquid-extensions-PKWCKK7E.mjs} +8 -2
  327. package/dist/sdk/memory-store-XGBB7LX7.mjs +12 -0
  328. package/dist/sdk/memory-store-XGBB7LX7.mjs.map +1 -0
  329. package/dist/sdk/metrics-7PP3EJUH.mjs +29 -0
  330. package/dist/sdk/metrics-7PP3EJUH.mjs.map +1 -0
  331. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs +44 -0
  332. package/dist/sdk/ndjson-sink-B4V4NTAQ.mjs.map +1 -0
  333. package/dist/sdk/prompt-state-YRJY6QAL.mjs +16 -0
  334. package/dist/sdk/prompt-state-YRJY6QAL.mjs.map +1 -0
  335. package/dist/sdk/renderer-schema-LPKN5UJS.mjs +51 -0
  336. package/dist/sdk/renderer-schema-LPKN5UJS.mjs.map +1 -0
  337. package/dist/sdk/routing-6N45MJ4F.mjs +24 -0
  338. package/dist/sdk/routing-6N45MJ4F.mjs.map +1 -0
  339. package/dist/sdk/sdk.d.mts +541 -22
  340. package/dist/sdk/sdk.d.ts +541 -22
  341. package/dist/sdk/sdk.js +27963 -16505
  342. package/dist/sdk/sdk.js.map +1 -1
  343. package/dist/sdk/sdk.mjs +1116 -2169
  344. package/dist/sdk/sdk.mjs.map +1 -1
  345. package/dist/sdk/session-registry-4E6YRQ77.mjs +10 -0
  346. package/dist/sdk/session-registry-4E6YRQ77.mjs.map +1 -0
  347. package/dist/sdk/slack-frontend-BVKW3GD5.mjs +735 -0
  348. package/dist/sdk/slack-frontend-BVKW3GD5.mjs.map +1 -0
  349. package/dist/sdk/trace-helpers-VP6QYVBX.mjs +23 -0
  350. package/dist/sdk/trace-helpers-VP6QYVBX.mjs.map +1 -0
  351. package/dist/sdk/{tracer-init-WC75N5NW.mjs → tracer-init-GSLPPLCD.mjs} +2 -2
  352. package/dist/sdk/tracer-init-GSLPPLCD.mjs.map +1 -0
  353. package/dist/sdk/workflow-registry-R6KSACFR.mjs +12 -0
  354. package/dist/sdk/workflow-registry-R6KSACFR.mjs.map +1 -0
  355. package/dist/sdk.d.ts.map +1 -1
  356. package/dist/slack/adapter.d.ts +36 -0
  357. package/dist/slack/adapter.d.ts.map +1 -0
  358. package/dist/slack/cache-prewarmer.d.ts +31 -0
  359. package/dist/slack/cache-prewarmer.d.ts.map +1 -0
  360. package/dist/slack/client.d.ts +77 -0
  361. package/dist/slack/client.d.ts.map +1 -0
  362. package/dist/slack/markdown.d.ts +45 -0
  363. package/dist/slack/markdown.d.ts.map +1 -0
  364. package/dist/slack/prompt-state.d.ts +33 -0
  365. package/dist/slack/prompt-state.d.ts.map +1 -0
  366. package/dist/slack/rate-limiter.d.ts +56 -0
  367. package/dist/slack/rate-limiter.d.ts.map +1 -0
  368. package/dist/slack/signature.d.ts +2 -0
  369. package/dist/slack/signature.d.ts.map +1 -0
  370. package/dist/slack/socket-runner.d.ts +42 -0
  371. package/dist/slack/socket-runner.d.ts.map +1 -0
  372. package/dist/slack/thread-cache.d.ts +51 -0
  373. package/dist/slack/thread-cache.d.ts.map +1 -0
  374. package/dist/snapshot-store.d.ts +59 -0
  375. package/dist/snapshot-store.d.ts.map +1 -0
  376. package/dist/state-machine/context/build-engine-context.d.ts +17 -0
  377. package/dist/state-machine/context/build-engine-context.d.ts.map +1 -0
  378. package/dist/state-machine/dispatch/dependency-gating.d.ts +12 -0
  379. package/dist/state-machine/dispatch/dependency-gating.d.ts.map +1 -0
  380. package/dist/state-machine/dispatch/execution-invoker.d.ts +14 -0
  381. package/dist/state-machine/dispatch/execution-invoker.d.ts.map +1 -0
  382. package/dist/state-machine/dispatch/foreach-processor.d.ts +8 -0
  383. package/dist/state-machine/dispatch/foreach-processor.d.ts.map +1 -0
  384. package/dist/state-machine/dispatch/history-snapshot.d.ts +8 -0
  385. package/dist/state-machine/dispatch/history-snapshot.d.ts.map +1 -0
  386. package/dist/state-machine/dispatch/on-init-handlers.d.ts +43 -0
  387. package/dist/state-machine/dispatch/on-init-handlers.d.ts.map +1 -0
  388. package/dist/state-machine/dispatch/renderer-schema.d.ts +8 -0
  389. package/dist/state-machine/dispatch/renderer-schema.d.ts.map +1 -0
  390. package/dist/state-machine/dispatch/stats-manager.d.ts +15 -0
  391. package/dist/state-machine/dispatch/stats-manager.d.ts.map +1 -0
  392. package/dist/state-machine/dispatch/template-renderer.d.ts +7 -0
  393. package/dist/state-machine/dispatch/template-renderer.d.ts.map +1 -0
  394. package/dist/state-machine/execution/summary.d.ts +8 -0
  395. package/dist/state-machine/execution/summary.d.ts.map +1 -0
  396. package/dist/state-machine/runner.d.ts +79 -0
  397. package/dist/state-machine/runner.d.ts.map +1 -0
  398. package/dist/state-machine/states/check-running.d.ts +14 -0
  399. package/dist/state-machine/states/check-running.d.ts.map +1 -0
  400. package/dist/state-machine/states/completed.d.ts +12 -0
  401. package/dist/state-machine/states/completed.d.ts.map +1 -0
  402. package/dist/state-machine/states/error.d.ts +11 -0
  403. package/dist/state-machine/states/error.d.ts.map +1 -0
  404. package/dist/state-machine/states/init.d.ts +11 -0
  405. package/dist/state-machine/states/init.d.ts.map +1 -0
  406. package/dist/state-machine/states/level-dispatch.d.ts +17 -0
  407. package/dist/state-machine/states/level-dispatch.d.ts.map +1 -0
  408. package/dist/state-machine/states/plan-ready.d.ts +12 -0
  409. package/dist/state-machine/states/plan-ready.d.ts.map +1 -0
  410. package/dist/state-machine/states/routing.d.ts +52 -0
  411. package/dist/state-machine/states/routing.d.ts.map +1 -0
  412. package/dist/state-machine/states/wave-planning.d.ts +14 -0
  413. package/dist/state-machine/states/wave-planning.d.ts.map +1 -0
  414. package/dist/state-machine/workflow-projection.d.ts +47 -0
  415. package/dist/state-machine/workflow-projection.d.ts.map +1 -0
  416. package/dist/state-machine-execution-engine.d.ts +159 -0
  417. package/dist/state-machine-execution-engine.d.ts.map +1 -0
  418. package/dist/telemetry/opentelemetry.d.ts.map +1 -1
  419. package/dist/telemetry/state-capture.d.ts +5 -0
  420. package/dist/telemetry/state-capture.d.ts.map +1 -1
  421. package/dist/test-runner/assertions.d.ts +59 -0
  422. package/dist/test-runner/assertions.d.ts.map +1 -0
  423. package/dist/test-runner/core/environment.d.ts +8 -0
  424. package/dist/test-runner/core/environment.d.ts.map +1 -0
  425. package/dist/test-runner/core/fixture.d.ts +3 -0
  426. package/dist/test-runner/core/fixture.d.ts.map +1 -0
  427. package/dist/test-runner/core/flow-stage.d.ts +32 -0
  428. package/dist/test-runner/core/flow-stage.d.ts.map +1 -0
  429. package/dist/test-runner/core/mocks.d.ts +8 -0
  430. package/dist/test-runner/core/mocks.d.ts.map +1 -0
  431. package/dist/test-runner/core/test-execution-wrapper.d.ts +18 -0
  432. package/dist/test-runner/core/test-execution-wrapper.d.ts.map +1 -0
  433. package/dist/test-runner/evaluators.d.ts +45 -0
  434. package/dist/test-runner/evaluators.d.ts.map +1 -0
  435. package/dist/test-runner/fixture-loader.d.ts +30 -0
  436. package/dist/test-runner/fixture-loader.d.ts.map +1 -0
  437. package/dist/test-runner/index.d.ts +127 -0
  438. package/dist/test-runner/index.d.ts.map +1 -0
  439. package/dist/test-runner/recorders/github-recorder.d.ts +23 -0
  440. package/dist/test-runner/recorders/github-recorder.d.ts.map +1 -0
  441. package/dist/test-runner/recorders/global-recorder.d.ts +4 -0
  442. package/dist/test-runner/recorders/global-recorder.d.ts.map +1 -0
  443. package/dist/test-runner/recorders/slack-recorder.d.ts +17 -0
  444. package/dist/test-runner/recorders/slack-recorder.d.ts.map +1 -0
  445. package/dist/test-runner/utils/selectors.d.ts +2 -0
  446. package/dist/test-runner/utils/selectors.d.ts.map +1 -0
  447. package/dist/test-runner/validator.d.ts +8 -0
  448. package/dist/test-runner/validator.d.ts.map +1 -0
  449. package/dist/traces/run-2026-01-20T19-22-58-043Z.ndjson +138 -0
  450. package/dist/traces/run-2026-01-20T19-23-52-175Z.ndjson +1067 -0
  451. package/dist/types/bot.d.ts +109 -0
  452. package/dist/types/bot.d.ts.map +1 -0
  453. package/dist/types/cli.d.ts +8 -1
  454. package/dist/types/cli.d.ts.map +1 -1
  455. package/dist/types/config.d.ts +459 -9
  456. package/dist/types/config.d.ts.map +1 -1
  457. package/dist/types/engine.d.ts +177 -0
  458. package/dist/types/engine.d.ts.map +1 -0
  459. package/dist/types/execution.d.ts +73 -0
  460. package/dist/types/execution.d.ts.map +1 -0
  461. package/dist/types/git-checkout.d.ts +76 -0
  462. package/dist/types/git-checkout.d.ts.map +1 -0
  463. package/dist/types/github.d.ts +51 -0
  464. package/dist/types/github.d.ts.map +1 -0
  465. package/dist/types/workflow.d.ts +237 -0
  466. package/dist/types/workflow.d.ts.map +1 -0
  467. package/dist/utils/command-executor.d.ts +43 -0
  468. package/dist/utils/command-executor.d.ts.map +1 -0
  469. package/dist/utils/comment-metadata.d.ts +21 -0
  470. package/dist/utils/comment-metadata.d.ts.map +1 -0
  471. package/dist/utils/config-loader.d.ts.map +1 -1
  472. package/dist/utils/config-merger.d.ts.map +1 -1
  473. package/dist/utils/env-exposure.d.ts +3 -0
  474. package/dist/utils/env-exposure.d.ts.map +1 -0
  475. package/dist/utils/file-exclusion.d.ts.map +1 -1
  476. package/dist/utils/interactive-prompt.d.ts +1 -1
  477. package/dist/utils/interactive-prompt.d.ts.map +1 -1
  478. package/dist/utils/json-text-extractor.d.ts +17 -0
  479. package/dist/utils/json-text-extractor.d.ts.map +1 -0
  480. package/dist/utils/sandbox.d.ts +10 -0
  481. package/dist/utils/sandbox.d.ts.map +1 -1
  482. package/dist/utils/script-memory-ops.d.ts +21 -0
  483. package/dist/utils/script-memory-ops.d.ts.map +1 -0
  484. package/dist/utils/template-context.d.ts +8 -0
  485. package/dist/utils/template-context.d.ts.map +1 -0
  486. package/dist/utils/tracer-init.d.ts.map +1 -1
  487. package/dist/utils/workspace-manager.d.ts +118 -0
  488. package/dist/utils/workspace-manager.d.ts.map +1 -0
  489. package/dist/utils/worktree-cleanup.d.ts +33 -0
  490. package/dist/utils/worktree-cleanup.d.ts.map +1 -0
  491. package/dist/utils/worktree-manager.d.ts +153 -0
  492. package/dist/utils/worktree-manager.d.ts.map +1 -0
  493. package/dist/webhook-server.d.ts +3 -3
  494. package/dist/webhook-server.d.ts.map +1 -1
  495. package/dist/workflow-executor.d.ts +81 -0
  496. package/dist/workflow-executor.d.ts.map +1 -0
  497. package/dist/workflow-registry.d.ts +79 -0
  498. package/dist/workflow-registry.d.ts.map +1 -0
  499. package/package.json +12 -5
  500. package/dist/output/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  501. package/dist/sdk/check-execution-engine-2YYKUUSH.mjs +0 -11
  502. package/dist/sdk/check-execution-engine-6QJXYYON.mjs +0 -11
  503. package/dist/sdk/check-execution-engine-PJZ4ZOKG.mjs +0 -11
  504. package/dist/sdk/chunk-33QVZ2D4.mjs +0 -316
  505. package/dist/sdk/chunk-33QVZ2D4.mjs.map +0 -1
  506. package/dist/sdk/chunk-B5QBV2QJ.mjs +0 -752
  507. package/dist/sdk/chunk-B5QBV2QJ.mjs.map +0 -1
  508. package/dist/sdk/chunk-BVFNRCHT.mjs +0 -14129
  509. package/dist/sdk/chunk-BVFNRCHT.mjs.map +0 -1
  510. package/dist/sdk/chunk-KWZW23FG.mjs +0 -14129
  511. package/dist/sdk/chunk-KWZW23FG.mjs.map +0 -1
  512. package/dist/sdk/chunk-O4RP4BRH.mjs +0 -14092
  513. package/dist/sdk/chunk-O4RP4BRH.mjs.map +0 -1
  514. package/dist/sdk/chunk-TUTOLSFV.mjs.map +0 -1
  515. package/dist/sdk/chunk-U5D2LY66.mjs +0 -245
  516. package/dist/sdk/chunk-U5D2LY66.mjs.map +0 -1
  517. package/dist/sdk/chunk-U7X54EMV.mjs +0 -331
  518. package/dist/sdk/chunk-U7X54EMV.mjs.map +0 -1
  519. package/dist/sdk/config-merger-TWUBWFC2.mjs +0 -8
  520. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs +0 -61
  521. package/dist/sdk/mermaid-telemetry-SN6A2TKW.mjs.map +0 -1
  522. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs +0 -61
  523. package/dist/sdk/mermaid-telemetry-YCTIG76M.mjs.map +0 -1
  524. package/dist/traces/run-2025-10-22T18-22-56-873Z.ndjson +0 -218
  525. /package/dist/sdk/{check-execution-engine-2YYKUUSH.mjs.map → check-provider-registry-534KL5HT.mjs.map} +0 -0
  526. /package/dist/sdk/{check-execution-engine-6QJXYYON.mjs.map → command-executor-TYUV6HUS.mjs.map} +0 -0
  527. /package/dist/sdk/{check-execution-engine-PJZ4ZOKG.mjs.map → config-YNC2EOOT.mjs.map} +0 -0
  528. /package/dist/sdk/{config-merger-TWUBWFC2.mjs.map → config-merger-PX3WIT57.mjs.map} +0 -0
  529. /package/dist/sdk/{liquid-extensions-KVL4MKRH.mjs.map → failure-condition-evaluator-YGTF2GHG.mjs.map} +0 -0
  530. /package/dist/sdk/{tracer-init-WC75N5NW.mjs.map → liquid-extensions-PKWCKK7E.mjs.map} +0 -0
@@ -0,0 +1,624 @@
1
+ version: "1.0"
2
+
3
+ # Slack integration config (schema version marker for Socket Mode/Webhook helpers)
4
+ slack:
5
+ version: "v1"
6
+
7
+ # Simple agent: task-refinement
8
+ # - Collects user input, refines it with AI (skip code context), and loops until refined.
9
+ # - Returns final refined text via the `finish` step output.
10
+
11
+ steps:
12
+ ask:
13
+ type: human-input
14
+ group: task-refinement
15
+ # Allow multiple turns in the refinement loop; do not guard with an `if`
16
+ # No explicit event trigger; run in CLI by default but guard via if
17
+ prompt: |
18
+ {% assign last_refine = outputs_history.refine | last %}
19
+ {% if last_refine and last_refine.refined == false %}
20
+ {{ last_refine.text }}
21
+ {% else %}
22
+ Provide the task you want to accomplish. Be specific about constraints
23
+ (inputs, outputs, environment, success criteria).
24
+ {% endif %}
25
+ multiline: false
26
+ allow_empty: false
27
+ # No on_success.goto required — refine depends_on ask
28
+
29
+ refine:
30
+ type: ai
31
+ group: task-refinement
32
+ # Run only after 'ask' — dependency drives ordering
33
+ depends_on: [ask]
34
+ # Allow re-execution in loop turns (no if guard)
35
+ ai:
36
+ skip_code_context: true
37
+ disableTools: true
38
+ system_prompt: |
39
+ You are a helpful, precise task refinement assistant (role: requirements-analyst).
40
+ Your goal is to get to an agreed, testable task definition and clear acceptance criteria.
41
+ - Refine the user's task into an unambiguous, executable description with minimal assumptions.
42
+ - Define how correctness will be validated (objective success criteria and measurables).
43
+ - If information is missing, set refined=false and ask_user=true and put a single, specific
44
+ clarification question in the "text" field (one question at a time).
45
+ - If everything is sufficient, set refined=true and put the final refined wording in "text".
46
+ - Be succinct and concrete. Prefer measurable outcomes over vague phrasing.
47
+ - You can't mark plan as refined until explicit user confirmation/agreement is implied.
48
+ # Schema ensures the agent either finalizes or asks to clarify
49
+ schema:
50
+ type: object
51
+ additionalProperties: false
52
+ properties:
53
+ refined: { type: boolean, description: "true if the task is fully specified and accepted" }
54
+ text: { type: string, description: "final refined task or question to user" }
55
+ required: [refined, text]
56
+ prompt: |
57
+ <history>
58
+ {% assign umsgs = outputs_history.ask | default: [] %}
59
+ {% assign amsgs = outputs_history.refine | default: [] %}
60
+ {% assign merged = umsgs | concat: amsgs | sort: 'ts' %}
61
+ {% for m in merged %}
62
+ {% if m.refined != nil %}
63
+ <assistant>{{ m.text }}</assistant>
64
+ {% else %}
65
+ <user>{{ m.text }}</user>
66
+ {% endif %}
67
+ {% endfor %}
68
+ </history>
69
+
70
+ <input>
71
+ {{ outputs['ask'].text }}
72
+ </input>
73
+
74
+ # Loop control using fail_if + on_fail (no goto_js)
75
+ fail_if: "output['refined'] !== true"
76
+ on_fail:
77
+ goto: ask
78
+
79
+ plan-commands:
80
+ type: ai
81
+ group: task-refinement
82
+ depends_on: [refine]
83
+ reuse_ai_session: refine
84
+ session_mode: clone
85
+ ai:
86
+ # Allow tools so the model can inspect the repo context if needed
87
+ disableTools: false
88
+ skip_code_context: true
89
+ system_prompt: |
90
+ You are a Task Validation Planner.
91
+ Produce a deterministic, minimal list of shell commands that, when executed in order,
92
+ validate that the refined task is complete for THIS repository/local env.
93
+ Constraints:
94
+ - Commands must be safe and non-destructive. Do not delete files or push to remotes.
95
+ - Prefer read-only checks and standard project commands (build, lint, test) when present.
96
+ - Each item is a single shell line; you may use && or || inside a line if necessary.
97
+ - Favor idempotent commands. Avoid interactive prompts.
98
+ - Detect package manager/tooling pragmatically (npm/pnpm/yarn/bun, eslint/biome, jest/vitest, etc.).
99
+ Return JSON with an array of strings under "commands" and optional "notes".
100
+ schema:
101
+ type: object
102
+ additionalProperties: false
103
+ properties:
104
+ commands:
105
+ type: array
106
+ minItems: 1
107
+ items: { type: string, minLength: 1 }
108
+ notes: { type: string }
109
+ required: [commands]
110
+ prompt: |
111
+ Refined task:
112
+ {{ outputs['refine'].text }}
113
+
114
+ If the repository has build/lint/test, include them. Otherwise propose basic checks that still
115
+ demonstrate completion (e.g., typecheck, compile, format verification, smoke run).
116
+
117
+ {% assign prev_conf_hist = outputs_history['confirm-interpret'] | default: [] %}
118
+ {% assign prev_run_hist = outputs_history['run-commands'] | default: [] %}
119
+ {% assign last_failed = nil %}
120
+ {% for r in prev_run_hist %}
121
+ {% if r.failed and r.failed > 0 %}
122
+ {% assign last_failed = r %}
123
+ {% endif %}
124
+ {% endfor %}
125
+ {% assign last_conf = prev_conf_hist | last %}
126
+ {% assign prev_run_count = prev_run_hist | size %}
127
+ {% assign last_run = prev_run_hist | last %}
128
+ {% if last_failed or prev_run_count > 0 %}
129
+ Previous attempt failed. Here are the details to learn from:
130
+ - Previous commands: {{ last_conf.commands | to_json }}
131
+ - Run results: {{ last_failed | default: last_run | to_json }}
132
+ Please revise the commands to address failures. Keep the list minimal and deterministic.
133
+ {% endif %}
134
+
135
+ Output strictly JSON per schema. No prose around it.
136
+ # No on_success routing needed; dependents naturally follow in the DAG
137
+
138
+ ask-confirm:
139
+ type: human-input
140
+ group: task-refinement
141
+ depends_on: [plan-commands]
142
+ prompt: |
143
+ Here is the proposed validation command list (to run sequentially):
144
+ {% for c in outputs['plan-commands'].commands %}
145
+ {{ forloop.index }}. {{ c }}
146
+ {% endfor %}
147
+
148
+ Confirm running these? Reply "yes" to accept, or provide edits:
149
+ - JSON array of commands, e.g. ["npm ci", "npm test"], or
150
+ - Plain text with one command per line.
151
+ placeholder: "yes | or paste modified list..."
152
+ multiline: true
153
+ allow_empty: true
154
+ default: "yes"
155
+
156
+ confirm-interpret:
157
+ type: ai
158
+ group: task-refinement
159
+ depends_on: [plan-commands, ask-confirm]
160
+ ai:
161
+ skip_code_context: true
162
+ disableTools: true
163
+ system_prompt: |
164
+ You are a confirmation interpreter. Given the planned command list and the user's reply,
165
+ decide whether to proceed to execution with a normalized list of shell commands, or
166
+ return for replanning.
167
+ - If the user says yes/approve, set proceed=true and provide commands as-is.
168
+ - If the user supplied edits (JSON array or one per line), parse, trim, dedupe, and set proceed=true with commands.
169
+ - If the reply indicates high-level changes (not runnable commands), set proceed=false and include a short reason.
170
+ Output strictly JSON per schema.
171
+ schema:
172
+ type: object
173
+ additionalProperties: false
174
+ properties:
175
+ proceed: { type: boolean }
176
+ commands:
177
+ type: array
178
+ items: { type: string, minLength: 1 }
179
+ reason: { type: string }
180
+ required: [proceed]
181
+ prompt: |
182
+ Planned commands:
183
+ {{ outputs['plan-commands'].commands | to_json }}
184
+
185
+ User reply:
186
+ {{ outputs['ask-confirm'].text }}
187
+
188
+ Return JSON per schema. If proceed=true, commands must be a non-empty array of shell lines.
189
+ fail_if: "output && output.proceed !== true"
190
+ on_fail:
191
+ goto: plan-commands
192
+
193
+ run-commands:
194
+ type: command
195
+ criticality: internal
196
+ group: task-refinement
197
+ depends_on: [confirm-interpret]
198
+ assume:
199
+ - "outputs['confirm-interpret']?.proceed === true"
200
+ - "(outputs['confirm-interpret']?.commands?.length ?? 0) > 0"
201
+ exec: |
202
+ node <<'NODE'
203
+ const { spawn } = require('child_process');
204
+ const cmds = {{ outputs['confirm-interpret'] | to_json }}.commands || [];
205
+ const results = [];
206
+ const runOne = (cmd) => new Promise((resolve) => {
207
+ const child = spawn('bash', ['-lc', cmd], { stdio: ['ignore', 'pipe', 'pipe'] });
208
+ let out = '', err = '';
209
+ const started = Date.now();
210
+ child.stdout.on('data', d => (out += d.toString()));
211
+ child.stderr.on('data', d => (err += d.toString()));
212
+ child.on('close', code => {
213
+ results.push({ cmd, code, stdout: out, stderr: err, durationMs: Date.now() - started });
214
+ resolve();
215
+ });
216
+ });
217
+ (async () => {
218
+ for (const c of cmds) { await runOne(c); }
219
+ const failed = results.filter(r => Number(r.code||0) !== 0).length;
220
+ process.stdout.write(JSON.stringify({ failed, results }));
221
+ })().catch(e => { process.stdout.write(JSON.stringify({ failed: 1, error: String(e) })); process.exit(0); });
222
+ NODE
223
+ output_format: json
224
+ schema:
225
+ type: object
226
+ additionalProperties: true
227
+ properties:
228
+ failed: { type: number }
229
+ results:
230
+ type: array
231
+ items:
232
+ type: object
233
+ additionalProperties: true
234
+ properties:
235
+ cmd: { type: string }
236
+ code: {}
237
+ stdout: { type: string }
238
+ stderr: { type: string }
239
+ durationMs: { type: number }
240
+ required: [cmd, code]
241
+ required: [failed]
242
+ fail_if: "output && Number(output.failed||0) > 0"
243
+ on_fail:
244
+ goto: plan-commands
245
+
246
+ finish:
247
+ type: log
248
+ group: task-refinement
249
+ depends_on: [run-commands]
250
+ if: "(outputs && outputs['run-commands'] && Number((outputs['run-commands'].failed||0)) === 0) && !(outputs && outputs['finish'])"
251
+ message: |
252
+ ✅ Refined Task:
253
+ {{ outputs['refine'].text }}
254
+
255
+ ✅ Validation commands (final):
256
+ {% for c in outputs['confirm-interpret'].commands %}
257
+ - {{ c }}
258
+ {% endfor %}
259
+ level: info
260
+ include_pr_context: false
261
+ include_dependencies: false
262
+ include_metadata: false
263
+
264
+ tests:
265
+ defaults:
266
+ strict: true
267
+ ai_provider: mock
268
+ cases:
269
+ - name: one-pass-refinement
270
+ description: Single turn; AI is happy and returns refined text.
271
+ event: manual
272
+ fixture: local.minimal
273
+ mocks:
274
+ ask: "Build a small Node CLI that prints \"hello\""
275
+ refine:
276
+ refined: true
277
+ text: "Create a Node.js CLI (using Node >=18) that prints 'hello' when run; include usage example and exit code 0."
278
+ plan-commands:
279
+ commands: ["echo hello-build", "echo hello-lint", "echo hello-test"]
280
+ ask-confirm: "yes"
281
+ confirm-interpret:
282
+ proceed: true
283
+ commands: ["echo hello-build","echo hello-lint","echo hello-test"]
284
+ run-commands:
285
+ stdout: '{"failed":0,"results":[{"cmd":"echo hello-build","code":0},{"cmd":"echo hello-lint","code":0},{"cmd":"echo hello-test","code":0}]}'
286
+ expect:
287
+ calls:
288
+ - step: plan-commands
289
+ exactly: 1
290
+ - step: ask-confirm
291
+ exactly: 1
292
+ - step: confirm-interpret
293
+ exactly: 1
294
+ - step: run-commands
295
+ exactly: 1
296
+ - step: ask
297
+ exactly: 1
298
+ - step: refine
299
+ exactly: 1
300
+ - step: finish
301
+ exactly: 1
302
+ outputs:
303
+ - step: run-commands
304
+ path: failed
305
+ equals: 0
306
+
307
+ - name: multi-turn-refinement-loop
308
+ description: Two clarifying turns followed by a final refinement; manual-only chat.
309
+ event: manual
310
+ fixture: local.minimal
311
+ mocks:
312
+ ask[]:
313
+ - "Create a CI job"
314
+ - "GitHub Actions; run on push to main"
315
+ - "Use Node 18 and npm ci + npm test"
316
+ refine[]:
317
+ - { refined: false, ask_user: true, text: "Which CI platform and trigger conditions?" }
318
+ - { refined: false, ask_user: true, text: "What Node version and commands should run?" }
319
+ - { refined: true, text: "Set up GitHub Actions workflow: on push to main, use Node 18.x, cache npm, run npm ci && npm test." }
320
+ plan-commands:
321
+ commands: ["echo build", "echo lint", "echo test"]
322
+ ask-confirm: "yes"
323
+ confirm-interpret:
324
+ proceed: true
325
+ commands: ["echo build","echo lint","echo test"]
326
+ run-commands:
327
+ stdout: '{"failed":0,"results":[{"cmd":"echo build","code":0},{"cmd":"echo lint","code":0},{"cmd":"echo test","code":0}]}'
328
+ expect:
329
+ calls:
330
+ - step: ask
331
+ exactly: 3
332
+ - step: refine
333
+ exactly: 3
334
+ - step: plan-commands
335
+ exactly: 1
336
+ - step: ask-confirm
337
+ exactly: 1
338
+ - step: confirm-interpret
339
+ exactly: 1
340
+ - step: run-commands
341
+ exactly: 1
342
+ - step: finish
343
+ exactly: 1
344
+ prompts:
345
+ # Ask prompt should surface the last refine clarification
346
+ - step: ask
347
+ index: 1
348
+ contains:
349
+ - "Which CI platform and trigger conditions?"
350
+ - step: ask
351
+ index: last
352
+ contains:
353
+ - "What Node version and commands should run?"
354
+ - step: refine
355
+ index: last
356
+ contains:
357
+ - "Which CI platform and trigger conditions?"
358
+ - "Use Node 18 and npm ci + npm test"
359
+ - "What Node version and commands should run?"
360
+ # Keep prompt assertions resilient to minor formatting changes by using 'contains'
361
+ # instead of a single large regex.
362
+ outputs:
363
+ # Ensure the final successful refinement carries a timestamp and expected text
364
+ - step: refine
365
+ where: { path: refined, equals: true }
366
+ path: ts
367
+ matches: "^\\d{10,}$"
368
+ - step: refine
369
+ where: { path: refined, equals: true }
370
+ path: text
371
+ matches: "(?is).*GitHub Actions.*Node 18.*npm ci.*npm test.*"
372
+ - step: run-commands
373
+ path: failed
374
+ equals: 0
375
+
376
+ - name: plan-and-run-success
377
+ description: Plans commands, user confirms, runs successfully, finishes.
378
+ event: manual
379
+ fixture: local.minimal
380
+ mocks:
381
+ ask: "Add CI to run build, lint, and tests"
382
+ refine:
383
+ refined: true
384
+ text: "Ensure project builds, lints, and tests pass via CI"
385
+ plan-commands:
386
+ commands: ["echo build", "echo lint", "echo test"]
387
+ ask-confirm: "yes"
388
+ confirm-interpret:
389
+ proceed: true
390
+ commands: ["echo build","echo lint","echo test"]
391
+ run-commands:
392
+ stdout: '{"failed":0,"results":[{"cmd":"echo build","code":0},{"cmd":"echo lint","code":0},{"cmd":"echo test","code":0}]}'
393
+ expect:
394
+ calls:
395
+ - step: ask
396
+ exactly: 1
397
+ - step: refine
398
+ exactly: 1
399
+ - step: plan-commands
400
+ exactly: 1
401
+ - step: ask-confirm
402
+ exactly: 1
403
+ - step: confirm-interpret
404
+ exactly: 1
405
+ - step: run-commands
406
+ exactly: 1
407
+ - step: finish
408
+ exactly: 1
409
+ outputs:
410
+ - step: run-commands
411
+ path: failed
412
+ equals: 0
413
+
414
+ - name: plan-run-fail-then-refine
415
+ description: First run fails, planner adjusts, second run passes, finish.
416
+ event: manual
417
+ fixture: local.minimal
418
+ mocks:
419
+ ask: "Verify app passes tests"
420
+ refine:
421
+ refined: true
422
+ text: "Run tests to verify app correctness"
423
+ plan-commands[]:
424
+ - { commands: ["node -e \"process.exit(1)\""] }
425
+ - { commands: ["node -e \"process.exit(0)\""] }
426
+ ask-confirm[]:
427
+ - "yes"
428
+ - "yes"
429
+ confirm-interpret:
430
+ proceed: true
431
+ commands: ["node -e \"process.exit(1)\""]
432
+ run-commands[]:
433
+ - { stdout: '{"failed":1,"results":[{"cmd":"node -e \\"process.exit(1)\\"","code":1,"stderr":"fail"}]}' , exit_code: 1 }
434
+ - { stdout: '{"failed":0,"results":[{"cmd":"node -e \\"process.exit(0)\\"","code":0}]}' }
435
+ expect:
436
+ calls:
437
+ - step: ask
438
+ at_least: 1
439
+ - step: refine
440
+ at_least: 1
441
+ - step: plan-commands
442
+ exactly: 2
443
+ - step: ask-confirm
444
+ exactly: 2
445
+ - step: confirm-interpret
446
+ exactly: 2
447
+ - step: run-commands
448
+ exactly: 2
449
+ - step: finish
450
+ exactly: 1
451
+ prompts:
452
+ - step: plan-commands
453
+ index: last
454
+ contains:
455
+ - "Previous attempt failed"
456
+ - "Run results"
457
+
458
+ - name: confirm-amend-json
459
+ description: User pastes JSON array of edited commands; interpreter parses and proceeds.
460
+ event: manual
461
+ fixture: local.minimal
462
+ mocks:
463
+ ask: "Make sure project installs deps and runs tests"
464
+ refine:
465
+ refined: true
466
+ text: "Install dependencies and run tests"
467
+ plan-commands:
468
+ commands: ["npm test"]
469
+ ask-confirm: '["npm ci","npm test"]'
470
+ confirm-interpret:
471
+ proceed: true
472
+ commands: ["npm ci","npm test"]
473
+ run-commands:
474
+ stdout: '{"failed":0,"results":[{"cmd":"npm ci","code":0},{"cmd":"npm test","code":0}]}'
475
+ expect:
476
+ calls:
477
+ - step: ask
478
+ exactly: 1
479
+ - step: refine
480
+ exactly: 1
481
+ - step: plan-commands
482
+ exactly: 1
483
+ - step: ask-confirm
484
+ exactly: 1
485
+ - step: confirm-interpret
486
+ exactly: 1
487
+ - step: run-commands
488
+ exactly: 1
489
+ - step: finish
490
+ exactly: 1
491
+ outputs:
492
+ - step: confirm-interpret
493
+ path: proceed
494
+ equals: true
495
+ - step: confirm-interpret
496
+ path: commands.length
497
+ equals: 2
498
+
499
+ - name: confirm-amend-lines
500
+ description: User pastes multi-line commands with duplicates; interpreter dedupes and proceeds.
501
+ event: manual
502
+ fixture: local.minimal
503
+ mocks:
504
+ ask: "Run lint and tests"
505
+ refine:
506
+ refined: true
507
+ text: "Run lint and tests"
508
+ plan-commands:
509
+ commands: ["npm run lint","npm test"]
510
+ ask-confirm: |
511
+ npm test\nnpm test\n npm run lint
512
+ confirm-interpret:
513
+ proceed: true
514
+ commands: ["npm test","npm run lint"]
515
+ run-commands:
516
+ stdout: '{"failed":0,"results":[{"cmd":"npm test","code":0},{"cmd":"npm run lint","code":0}]}'
517
+ expect:
518
+ calls:
519
+ - step: ask
520
+ exactly: 1
521
+ - step: refine
522
+ exactly: 1
523
+ - step: plan-commands
524
+ exactly: 1
525
+ - step: ask-confirm
526
+ exactly: 1
527
+ - step: confirm-interpret
528
+ exactly: 1
529
+ - step: run-commands
530
+ exactly: 1
531
+ - step: finish
532
+ exactly: 1
533
+ outputs:
534
+ - step: confirm-interpret
535
+ path: proceed
536
+ equals: true
537
+ - step: confirm-interpret
538
+ path: commands.length
539
+ equals: 2
540
+
541
+ - name: user-declines-replan-then-accept
542
+ description: User declines; interpreter routes to replan; user then accepts; run succeeds.
543
+ event: manual
544
+ fixture: local.minimal
545
+ mocks:
546
+ ask: "Set up lint and test checks"
547
+ refine:
548
+ refined: true
549
+ text: "Ensure lint and tests run"
550
+ plan-commands[]:
551
+ - { commands: ["npm test"] }
552
+ - { commands: ["npm run lint","npm test"] }
553
+ ask-confirm[]:
554
+ - "No, add lint too"
555
+ - "yes"
556
+ confirm-interpret[]:
557
+ - { proceed: false, reason: "needs lint" }
558
+ - { proceed: true, commands: ["npm run lint","npm test"] }
559
+ run-commands:
560
+ stdout: '{"failed":0,"results":[{"cmd":"npm run lint","code":0},{"cmd":"npm test","code":0}]}'
561
+ expect:
562
+ calls:
563
+ - step: ask
564
+ at_least: 1
565
+ - step: refine
566
+ at_least: 1
567
+ - step: plan-commands
568
+ exactly: 2
569
+ - step: ask-confirm
570
+ exactly: 2
571
+ - step: confirm-interpret
572
+ exactly: 2
573
+ - step: run-commands
574
+ exactly: 1
575
+ - step: finish
576
+ exactly: 1
577
+ outputs:
578
+ - step: confirm-interpret
579
+ index: last
580
+ path: proceed
581
+ equals: true
582
+
583
+ - name: run-fail-then-success-loop
584
+ description: First run fails; planner sees history; second run succeeds; prompt shows failure context.
585
+ event: manual
586
+ strict: false
587
+ fixture: local.minimal
588
+ mocks:
589
+ ask: "Verify app tests pass"
590
+ refine:
591
+ refined: true
592
+ text: "Run tests to verify app correctness"
593
+ plan-commands[]:
594
+ - { commands: ["node -e \"process.exit(1)\""] }
595
+ - { commands: ["echo ok"] }
596
+ ask-confirm[]:
597
+ - "yes"
598
+ - "yes"
599
+ confirm-interpret[]:
600
+ - { proceed: true, commands: ["node -e \"process.exit(1)\""] }
601
+ - { proceed: true, commands: ["echo ok"] }
602
+ run-commands[]:
603
+ - { stdout: '{"failed":1,"results":[{"cmd":"node -e \\"process.exit(1)\\"","code":1,"stderr":"fail"}]}' , exit_code: 1 }
604
+ - { stdout: '{"failed":0,"results":[{"cmd":"echo ok","code":0}]}' }
605
+ expect:
606
+ calls:
607
+ - step: ask
608
+ at_least: 1
609
+ - step: refine
610
+ at_least: 1
611
+ - step: plan-commands
612
+ exactly: 2
613
+ - step: ask-confirm
614
+ exactly: 2
615
+ - step: confirm-interpret
616
+ exactly: 2
617
+ - step: run-commands
618
+ exactly: 2
619
+ prompts:
620
+ - step: plan-commands
621
+ index: last
622
+ contains:
623
+ - "Previous attempt failed"
624
+ - "Run results"