stageflow 0.25.0 → 0.27.0

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 (501) hide show
  1. package/README.md +10 -3
  2. package/dist/a2a/contracts.d.ts +1 -0
  3. package/dist/a2a/contracts.js +1 -0
  4. package/dist/a2a/registry.d.ts +2 -0
  5. package/dist/a2a/registry.js +20 -1
  6. package/dist/a2a/server.d.ts +7 -0
  7. package/dist/a2a/server.js +5 -2
  8. package/dist/a2a/service.d.ts +1 -1
  9. package/dist/a2a/service.js +57 -8
  10. package/dist/a2a/store.d.ts +8 -5
  11. package/dist/a2a/store.js +24 -67
  12. package/dist/agent/activity.d.ts +3 -0
  13. package/dist/agent/bootProviderConfig.d.ts +21 -0
  14. package/dist/agent/bootProviderConfig.js +74 -0
  15. package/dist/agent/piAdapter.d.ts +9 -1
  16. package/dist/agent/piAdapter.js +58 -3
  17. package/dist/agent/piIsolatedMcp.d.ts +2 -0
  18. package/dist/agent/piIsolatedMcp.js +10 -2
  19. package/dist/agent/port.d.ts +6 -0
  20. package/dist/agent/streamLogRedact.d.ts +1 -1
  21. package/dist/agent/streamLogRedact.js +4 -11
  22. package/dist/cli/artifactCommand.js +9 -16
  23. package/dist/cli/backupCommand.d.ts +9 -0
  24. package/dist/cli/backupCommand.js +111 -0
  25. package/dist/cli/debugRunCommand.d.ts +10 -0
  26. package/dist/cli/debugRunCommand.js +109 -0
  27. package/dist/cli/doctorCommand.d.ts +32 -0
  28. package/dist/cli/doctorCommand.js +453 -0
  29. package/dist/cli/envelopeCommand.js +9 -2
  30. package/dist/cli/exportAllCommand.d.ts +55 -0
  31. package/dist/cli/exportAllCommand.js +218 -0
  32. package/dist/cli/exportRunCommand.js +23 -21
  33. package/dist/cli/hostClient.d.ts +21 -3
  34. package/dist/cli/hostClient.js +93 -12
  35. package/dist/cli/initTemplates.d.ts +1 -1
  36. package/dist/cli/initTemplates.js +8 -1
  37. package/dist/cli/resolveSafeOutPath.d.ts +2 -0
  38. package/dist/cli/resolveSafeOutPath.js +40 -0
  39. package/dist/cli/restoreCommand.d.ts +10 -0
  40. package/dist/cli/restoreCommand.js +90 -0
  41. package/dist/cli/runCommand.d.ts +3 -2
  42. package/dist/cli/runCommand.js +93 -11
  43. package/dist/cli/runOutput.d.ts +4 -0
  44. package/dist/cli/runOutput.js +33 -7
  45. package/dist/cli/runStageCommand.d.ts +1 -0
  46. package/dist/cli/runStageCommand.js +44 -25
  47. package/dist/cli/runsCommand.d.ts +1 -1
  48. package/dist/cli/runsCommand.js +162 -8
  49. package/dist/cli.js +171 -30
  50. package/dist/config/catalogRelativePath.d.ts +62 -0
  51. package/dist/config/catalogRelativePath.js +118 -0
  52. package/dist/config/configOrigin.d.ts +27 -0
  53. package/dist/config/configOrigin.js +59 -0
  54. package/dist/config/hostConfig.d.ts +55 -0
  55. package/dist/config/hostConfig.js +333 -0
  56. package/dist/config/listSkills.d.ts +26 -0
  57. package/dist/config/listSkills.js +190 -3
  58. package/dist/config/loadOutcome.d.ts +1 -1
  59. package/dist/config/loadPipeline.js +23 -2
  60. package/dist/config/loadStage.js +18 -0
  61. package/dist/config/loadTask.d.ts +2 -0
  62. package/dist/config/loadTask.js +57 -18
  63. package/dist/config/materializeStageModels.js +5 -1
  64. package/dist/config/mergePipelineIncludes.d.ts +3 -0
  65. package/dist/config/mergePipelineIncludes.js +19 -0
  66. package/dist/config/migrateYaml.js +6 -11
  67. package/dist/config/multiProjectCatalog.d.ts +30 -0
  68. package/dist/config/multiProjectCatalog.js +142 -0
  69. package/dist/config/normalizePipelineStageEntry.js +20 -1
  70. package/dist/config/pipelineStageKeys.js +2 -0
  71. package/dist/config/resolveCatalogRoots.d.ts +27 -0
  72. package/dist/config/resolveCatalogRoots.js +76 -0
  73. package/dist/config/resolveModel.d.ts +7 -1
  74. package/dist/config/resolveModel.js +11 -1
  75. package/dist/config/resolveStageMcpServers.d.ts +9 -1
  76. package/dist/config/resolveStageMcpServers.js +36 -9
  77. package/dist/config/secretFromEnvOrFile.d.ts +9 -0
  78. package/dist/config/secretFromEnvOrFile.js +34 -0
  79. package/dist/config/seededCatalog.d.ts +11 -0
  80. package/dist/config/seededCatalog.js +29 -0
  81. package/dist/config/toolRequires.d.ts +24 -0
  82. package/dist/config/toolRequires.js +115 -0
  83. package/dist/config/validateCatalog.d.ts +5 -1
  84. package/dist/config/validateCatalog.js +140 -1
  85. package/dist/diagnostics/checks.d.ts +39 -0
  86. package/dist/diagnostics/checks.js +135 -0
  87. package/dist/errors/codes.d.ts +14 -0
  88. package/dist/errors/codes.js +59 -0
  89. package/dist/git/cache.d.ts +14 -0
  90. package/dist/git/cache.js +150 -0
  91. package/dist/git/credentials.d.ts +9 -0
  92. package/dist/git/credentials.js +88 -0
  93. package/dist/git/errors.d.ts +20 -0
  94. package/dist/git/errors.js +94 -0
  95. package/dist/git/exec.d.ts +16 -0
  96. package/dist/git/exec.js +135 -0
  97. package/dist/git/operations.d.ts +29 -0
  98. package/dist/git/operations.js +153 -0
  99. package/dist/git/version.d.ts +1 -0
  100. package/dist/git/version.js +10 -0
  101. package/dist/logging/audit.d.ts +16 -0
  102. package/dist/logging/audit.js +19 -0
  103. package/dist/logging/commonWords.d.ts +2 -0
  104. package/dist/logging/commonWords.js +13 -0
  105. package/dist/logging/logger.d.ts +49 -0
  106. package/dist/logging/logger.js +193 -0
  107. package/dist/logging/namedSecrets.d.ts +6 -0
  108. package/dist/logging/namedSecrets.js +58 -0
  109. package/dist/logging/redact.d.ts +13 -0
  110. package/dist/logging/redact.js +88 -0
  111. package/dist/mcp/catalogTools.js +456 -80
  112. package/dist/mcp/checkoutTools.d.ts +52 -0
  113. package/dist/mcp/checkoutTools.js +332 -0
  114. package/dist/mcp/controlTools.js +179 -5
  115. package/dist/mcp/deps.d.ts +1 -0
  116. package/dist/mcp/getStartedTool.d.ts +3 -0
  117. package/dist/mcp/getStartedTool.js +62 -0
  118. package/dist/mcp/readArtifact.d.ts +11 -0
  119. package/dist/mcp/readArtifact.js +46 -30
  120. package/dist/mcp/server.js +1 -0
  121. package/dist/mcp/tools.js +4 -0
  122. package/dist/net/proxy.d.ts +14 -0
  123. package/dist/net/proxy.js +78 -0
  124. package/dist/package-meta.d.ts +2 -1
  125. package/dist/package-meta.js +2 -1
  126. package/dist/preflight/bash.d.ts +8 -0
  127. package/dist/preflight/bash.js +34 -0
  128. package/dist/preflight/claudeRoot.d.ts +11 -0
  129. package/dist/preflight/claudeRoot.js +23 -0
  130. package/dist/preflight/mcpCommands.d.ts +8 -0
  131. package/dist/preflight/mcpCommands.js +36 -0
  132. package/dist/preflight/pipelinePreflight.d.ts +40 -0
  133. package/dist/preflight/pipelinePreflight.js +192 -0
  134. package/dist/preflight/tls.d.ts +6 -0
  135. package/dist/preflight/tls.js +18 -0
  136. package/dist/preflight/toolchain.d.ts +45 -0
  137. package/dist/preflight/toolchain.js +219 -0
  138. package/dist/project/findProjectRoot.js +3 -4
  139. package/dist/project/globalHome.d.ts +7 -0
  140. package/dist/project/globalHome.js +63 -2
  141. package/dist/project/resolveProjectContext.js +2 -2
  142. package/dist/project/resolveStageflowContext.js +2 -2
  143. package/dist/projection/projectRun.d.ts +2 -1
  144. package/dist/projection/projectRun.js +1 -0
  145. package/dist/runstore/assertTmpdir.d.ts +1 -0
  146. package/dist/runstore/assertTmpdir.js +21 -0
  147. package/dist/runstore/backup.d.ts +52 -0
  148. package/dist/runstore/backup.js +292 -0
  149. package/dist/runstore/createStore.d.ts +18 -1
  150. package/dist/runstore/createStore.js +64 -5
  151. package/dist/runstore/debugBundle.d.ts +60 -0
  152. package/dist/runstore/debugBundle.js +143 -0
  153. package/dist/runstore/diskUsage.d.ts +50 -0
  154. package/dist/runstore/diskUsage.js +214 -0
  155. package/dist/runstore/exportRunPayload.d.ts +8 -0
  156. package/dist/runstore/exportRunPayload.js +23 -0
  157. package/dist/runstore/normalizeCatalogPath.d.ts +1 -0
  158. package/dist/runstore/normalizeCatalogPath.js +10 -0
  159. package/dist/runstore/paths.d.ts +5 -0
  160. package/dist/runstore/paths.js +145 -1
  161. package/dist/runstore/port.d.ts +111 -13
  162. package/dist/runstore/port.js +8 -1
  163. package/dist/runstore/restore.d.ts +81 -0
  164. package/dist/runstore/restore.js +355 -0
  165. package/dist/runstore/retention.d.ts +27 -0
  166. package/dist/runstore/retention.js +74 -0
  167. package/dist/runstore/runManifest.d.ts +146 -0
  168. package/dist/runstore/runManifest.js +288 -0
  169. package/dist/runstore/runProjection.d.ts +3 -1
  170. package/dist/runstore/runProjection.js +63 -1
  171. package/dist/runstore/sqlite/SqliteRunStore.d.ts +28 -3
  172. package/dist/runstore/sqlite/SqliteRunStore.js +352 -219
  173. package/dist/runstore/sqlite/applyStorePragmas.d.ts +39 -0
  174. package/dist/runstore/sqlite/applyStorePragmas.js +145 -0
  175. package/dist/runstore/sqlite/migrations/001-baseline.d.ts +7 -0
  176. package/dist/runstore/sqlite/migrations/001-baseline.js +10 -0
  177. package/dist/runstore/sqlite/migrations/002-repository-binding.d.ts +7 -0
  178. package/dist/runstore/sqlite/migrations/002-repository-binding.js +29 -0
  179. package/dist/runstore/sqlite/migrations/003-run-lifecycle.d.ts +7 -0
  180. package/dist/runstore/sqlite/migrations/003-run-lifecycle.js +28 -0
  181. package/dist/runstore/sqlite/migrations/004-auto-resume-count.d.ts +7 -0
  182. package/dist/runstore/sqlite/migrations/004-auto-resume-count.js +19 -0
  183. package/dist/runstore/sqlite/migrations/005-config-origins.d.ts +7 -0
  184. package/dist/runstore/sqlite/migrations/005-config-origins.js +19 -0
  185. package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.d.ts +7 -0
  186. package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.js +28 -0
  187. package/dist/runstore/sqlite/migrations/007-projects-registry.d.ts +7 -0
  188. package/dist/runstore/sqlite/migrations/007-projects-registry.js +31 -0
  189. package/dist/runstore/sqlite/migrations/index.d.ts +21 -0
  190. package/dist/runstore/sqlite/migrations/index.js +72 -0
  191. package/dist/runstore/sqlite/schema.d.ts +20 -1
  192. package/dist/runstore/sqlite/schema.js +277 -1
  193. package/dist/runstore/sqlite/storeOpenError.d.ts +6 -0
  194. package/dist/runstore/sqlite/storeOpenError.js +11 -0
  195. package/dist/runstore/sqlite/storeSchemaError.d.ts +5 -0
  196. package/dist/runstore/sqlite/storeSchemaError.js +8 -0
  197. package/dist/runstore/stageExecution.js +3 -0
  198. package/dist/runstore/storeFilesystem.d.ts +32 -0
  199. package/dist/runstore/storeFilesystem.js +148 -0
  200. package/dist/runstore/trackProjection.js +2 -0
  201. package/dist/runstore/workspaceLayout.d.ts +13 -0
  202. package/dist/runstore/workspaceLayout.js +76 -0
  203. package/dist/runtime/completionCheckRunner.d.ts +3 -0
  204. package/dist/runtime/completionCheckRunner.js +45 -7
  205. package/dist/runtime/containerLimits.d.ts +16 -0
  206. package/dist/runtime/containerLimits.js +84 -0
  207. package/dist/runtime/credentialMaterialisation.d.ts +28 -0
  208. package/dist/runtime/credentialMaterialisation.js +128 -0
  209. package/dist/runtime/gitCheckoutCapability.js +7 -13
  210. package/dist/runtime/pipelineRunner.d.ts +36 -1
  211. package/dist/runtime/pipelineRunner.js +178 -17
  212. package/dist/runtime/pipelineScheduler.d.ts +15 -0
  213. package/dist/runtime/pipelineScheduler.js +135 -27
  214. package/dist/runtime/reloadRunCatalog.js +6 -1
  215. package/dist/runtime/repositoryMaterialize.d.ts +47 -0
  216. package/dist/runtime/repositoryMaterialize.js +235 -0
  217. package/dist/runtime/resumeTimedOut.d.ts +1 -1
  218. package/dist/runtime/resumeTimedOut.js +5 -2
  219. package/dist/runtime/runChangeBus.js +9 -0
  220. package/dist/runtime/runDeletion.d.ts +7 -0
  221. package/dist/runtime/runDeletion.js +37 -0
  222. package/dist/runtime/runManager.d.ts +158 -4
  223. package/dist/runtime/runManager.js +1596 -79
  224. package/dist/runtime/runRetentionSweep.d.ts +31 -0
  225. package/dist/runtime/runRetentionSweep.js +328 -0
  226. package/dist/runtime/runRetryCoordinator.d.ts +2 -0
  227. package/dist/runtime/runRetryCoordinator.js +19 -2
  228. package/dist/runtime/runSkills.d.ts +40 -0
  229. package/dist/runtime/runSkills.js +173 -0
  230. package/dist/runtime/stageAttemptBootstrap.d.ts +5 -1
  231. package/dist/runtime/stageAttemptBootstrap.js +195 -24
  232. package/dist/runtime/stageCacheEnv.d.ts +6 -0
  233. package/dist/runtime/stageCacheEnv.js +34 -0
  234. package/dist/runtime/stageConcurrency.d.ts +2 -1
  235. package/dist/runtime/stageConcurrency.js +4 -2
  236. package/dist/runtime/stageEnvironment.d.ts +38 -0
  237. package/dist/runtime/stageEnvironment.js +193 -0
  238. package/dist/runtime/stageProcessLauncher.d.ts +18 -0
  239. package/dist/runtime/stageProcessLauncher.js +194 -38
  240. package/dist/runtime/stageRecovery.d.ts +3 -1
  241. package/dist/runtime/stageRecovery.js +19 -4
  242. package/dist/runtime/stageRoots.d.ts +38 -1
  243. package/dist/runtime/stageRoots.js +118 -0
  244. package/dist/runtime/stageRunner.d.ts +1 -0
  245. package/dist/runtime/stageRunner.js +3 -1
  246. package/dist/runtime/stageSecretDecl.d.ts +9 -0
  247. package/dist/runtime/stageSecretDecl.js +102 -0
  248. package/dist/runtime/stageSecrets.d.ts +40 -0
  249. package/dist/runtime/stageSecrets.js +181 -0
  250. package/dist/runtime/stageWorker.d.ts +3 -2
  251. package/dist/runtime/stageWorker.js +58 -10
  252. package/dist/runtime/stageWorkerProtocol.d.ts +5 -0
  253. package/dist/runtime/stageWorkerProtocol.js +8 -0
  254. package/dist/runtime/startPayload.d.ts +32 -0
  255. package/dist/runtime/startPayload.js +59 -0
  256. package/dist/runtime/taskInput.js +14 -5
  257. package/dist/runtime/verifiedStageExecution.d.ts +1 -0
  258. package/dist/runtime/verifiedStageExecution.js +2 -1
  259. package/dist/runtime/workspaceBinding.d.ts +20 -0
  260. package/dist/runtime/workspaceBinding.js +60 -0
  261. package/dist/server/allowedHosts.d.ts +19 -0
  262. package/dist/server/allowedHosts.js +179 -0
  263. package/dist/server/bootstrap.d.ts +36 -2
  264. package/dist/server/bootstrap.js +209 -5
  265. package/dist/server/controlToken.d.ts +47 -0
  266. package/dist/server/controlToken.js +241 -0
  267. package/dist/server/createHttpHost.d.ts +11 -2
  268. package/dist/server/createHttpHost.js +103 -10
  269. package/dist/server/ensureGlobalService.d.ts +5 -1
  270. package/dist/server/ensureGlobalService.js +35 -1
  271. package/dist/server/healthSurfaces.d.ts +6 -0
  272. package/dist/server/healthSurfaces.js +98 -0
  273. package/dist/server/http.d.ts +12 -1
  274. package/dist/server/http.js +1085 -485
  275. package/dist/server/listenHost.d.ts +5 -0
  276. package/dist/server/listenHost.js +56 -0
  277. package/dist/server/mcpHost.d.ts +10 -1
  278. package/dist/server/mcpHost.js +36 -6
  279. package/dist/server/operatorResults.d.ts +2 -2
  280. package/dist/server/operatorResults.js +40 -29
  281. package/dist/server/requestAuthContext.d.ts +12 -0
  282. package/dist/server/requestAuthContext.js +21 -0
  283. package/dist/server/shutdown.d.ts +69 -0
  284. package/dist/server/shutdown.js +219 -0
  285. package/dist/types/pipeline.d.ts +7 -0
  286. package/dist/types/stage.d.ts +8 -0
  287. package/dist/types/task.d.ts +8 -0
  288. package/dist/ui/assets/index-B6hlSXXn.js +120 -0
  289. package/dist/ui/index.html +1 -1
  290. package/examples/README.md +98 -0
  291. package/examples/archify-on-pr/README.md +213 -0
  292. package/examples/archify-on-pr/archify-on-pr.pipeline.yaml +19 -0
  293. package/examples/archify-on-pr/archify-on-pr.task.yaml +19 -0
  294. package/examples/archify-on-pr/author-diagrams.yaml +106 -0
  295. package/examples/archify-on-pr/detect-changes.yaml +89 -0
  296. package/examples/ci-validate/README.md +35 -0
  297. package/examples/ci-validate/check.yaml +13 -0
  298. package/examples/ci-validate/ci-demo.pipeline.yaml +4 -0
  299. package/examples/ci-validate/validate.sh +5 -0
  300. package/examples/compliance-review-demo/README.md +125 -0
  301. package/examples/compliance-review-demo/compliance-review-demo.pipeline.yaml +29 -0
  302. package/examples/compliance-review-demo/connect-account.yaml +47 -0
  303. package/examples/compliance-review-demo/map-to-control.yaml +123 -0
  304. package/examples/compliance-review-demo/poll-bucket-config.yaml +103 -0
  305. package/examples/compliance-review-demo/publish-report.yaml +79 -0
  306. package/examples/compliance-review-demo/review-verdict.yaml +122 -0
  307. package/examples/compliance-review-demo/run-compliance-check.yaml +96 -0
  308. package/examples/compliance-review-demo/store-evidence.yaml +143 -0
  309. package/examples/conditional-fork/README.md +89 -0
  310. package/examples/conditional-fork/branch-a.yaml +13 -0
  311. package/examples/conditional-fork/branch-b.yaml +13 -0
  312. package/examples/conditional-fork/decide.yaml +35 -0
  313. package/examples/conditional-fork/fork-demo.pipeline.yaml +20 -0
  314. package/examples/conditional-fork/fork-demo.task.yaml +8 -0
  315. package/examples/context7-mcp/README.md +42 -0
  316. package/examples/context7-mcp/context7-mcp.pipeline.yaml +15 -0
  317. package/examples/context7-mcp/context7-mcp.task.yaml +4 -0
  318. package/examples/context7-mcp/fetch-docs.yaml +52 -0
  319. package/examples/context7-mcp/resolve-library.yaml +31 -0
  320. package/examples/context7-mcp/write-brief.yaml +52 -0
  321. package/examples/feature-loop/README.md +104 -0
  322. package/examples/feature-loop/address-feedback.yaml +148 -0
  323. package/examples/feature-loop/align.yaml +116 -0
  324. package/examples/feature-loop/decompose.yaml +86 -0
  325. package/examples/feature-loop/default-model-hierarchy.task.yaml +58 -0
  326. package/examples/feature-loop/feature-loop.pipeline.yaml +140 -0
  327. package/examples/feature-loop/feature-loop.task.yaml +25 -0
  328. package/examples/feature-loop/implement.yaml +128 -0
  329. package/examples/feature-loop/plan.yaml +111 -0
  330. package/examples/feature-loop/publish.yaml +167 -0
  331. package/examples/feature-loop/review.yaml +146 -0
  332. package/examples/feature-loop/verify.yaml +106 -0
  333. package/examples/feedback-loop/README.md +72 -0
  334. package/examples/feedback-loop/VERIFY.md +208 -0
  335. package/examples/feedback-loop/continue-only.task.yaml +4 -0
  336. package/examples/feedback-loop/exhaust-require-continue.task.yaml +6 -0
  337. package/examples/feedback-loop/exhaust-wait-human.task.yaml +11 -0
  338. package/examples/feedback-loop/feedback-loop-wait-human.pipeline.yaml +23 -0
  339. package/examples/feedback-loop/feedback-loop.pipeline.yaml +23 -0
  340. package/examples/feedback-loop/feedback-loop.task.yaml +4 -0
  341. package/examples/feedback-loop/implement.yaml +14 -0
  342. package/examples/feedback-loop/plan.yaml +14 -0
  343. package/examples/feedback-loop/review.yaml +15 -0
  344. package/examples/feedback-loop/send-back-once.task.yaml +6 -0
  345. package/examples/feedback-loop/submit.yaml +12 -0
  346. package/examples/generic-fan-in/README.md +151 -0
  347. package/examples/generic-fan-in/clarify.yaml +18 -0
  348. package/examples/generic-fan-in/generic-fan-in-accepted.pipeline.yaml +19 -0
  349. package/examples/generic-fan-in/generic-fan-in-accepted.task.yaml +8 -0
  350. package/examples/generic-fan-in/generic-fan-in.pipeline.yaml +18 -0
  351. package/examples/generic-fan-in/generic-fan-in.task.yaml +9 -0
  352. package/examples/generic-fan-in/research.yaml +45 -0
  353. package/examples/generic-fan-in/synthesize.yaml +66 -0
  354. package/examples/generic-fan-in/validation.yaml +45 -0
  355. package/examples/github-release/README.md +78 -0
  356. package/examples/github-release/draft-release-notes.yaml +64 -0
  357. package/examples/github-release/github-release.pipeline.yaml +11 -0
  358. package/examples/github-release/github-release.task.yaml +13 -0
  359. package/examples/github-release/publish-github-release.yaml +64 -0
  360. package/examples/hello-world/README.md +28 -0
  361. package/examples/hello-world/hello.pipeline.yaml +4 -0
  362. package/examples/hello-world/my-task.task.yaml +6 -0
  363. package/examples/hello-world/research.yaml +18 -0
  364. package/examples/mcp-hitl-tour/README.md +113 -0
  365. package/examples/mcp-hitl-tour/draft-angle.yaml +33 -0
  366. package/examples/mcp-hitl-tour/draft-short.yaml +32 -0
  367. package/examples/mcp-hitl-tour/emit-angles.yaml +45 -0
  368. package/examples/mcp-hitl-tour/gather.yaml +31 -0
  369. package/examples/mcp-hitl-tour/intake.yaml +62 -0
  370. package/examples/mcp-hitl-tour/mcp-hitl-tour-exhaust.task.yaml +13 -0
  371. package/examples/mcp-hitl-tour/mcp-hitl-tour.pipeline.yaml +54 -0
  372. package/examples/mcp-hitl-tour/mcp-hitl-tour.task.yaml +16 -0
  373. package/examples/mcp-hitl-tour/polish.yaml +33 -0
  374. package/examples/mcp-hitl-tour/review.yaml +17 -0
  375. package/examples/mcp-hitl-tour/ship.yaml +25 -0
  376. package/examples/oss-issue-contribution/README.md +218 -0
  377. package/examples/oss-issue-contribution/oss-address-review-feedback.yaml +117 -0
  378. package/examples/oss-issue-contribution/oss-approve-contribution.yaml +181 -0
  379. package/examples/oss-issue-contribution/oss-approve-plan.yaml +111 -0
  380. package/examples/oss-issue-contribution/oss-explain-fix.yaml +108 -0
  381. package/examples/oss-issue-contribution/oss-explain-issue.yaml +114 -0
  382. package/examples/oss-issue-contribution/oss-implement-source-fix.yaml +171 -0
  383. package/examples/oss-issue-contribution/oss-investigate-area.yaml +116 -0
  384. package/examples/oss-issue-contribution/oss-issue-contribution.pipeline.yaml +125 -0
  385. package/examples/oss-issue-contribution/oss-issue-intake.yaml +106 -0
  386. package/examples/oss-issue-contribution/oss-plan-investigation.yaml +112 -0
  387. package/examples/oss-issue-contribution/oss-plan-review.yaml +109 -0
  388. package/examples/oss-issue-contribution/oss-reproduce-issue.yaml +140 -0
  389. package/examples/oss-issue-contribution/oss-review-change.yaml +107 -0
  390. package/examples/oss-issue-contribution/oss-verify-fix.yaml +130 -0
  391. package/examples/oss-issue-contribution/oss-write-regression-test.yaml +135 -0
  392. package/examples/oss-issue-contribution/pi-7629.task.yaml +79 -0
  393. package/examples/oss-issue-contribution/pi-8919.task.yaml +75 -0
  394. package/examples/oss-issue-contribution/pydantic-ai-7971.task.yaml +53 -0
  395. package/examples/oss-quick-fix/README.md +65 -0
  396. package/examples/oss-quick-fix/implement-fix.yaml +84 -0
  397. package/examples/oss-quick-fix/oss-quick-fix.pipeline.yaml +35 -0
  398. package/examples/oss-quick-fix/oss-quick-fix.task.yaml +19 -0
  399. package/examples/oss-quick-fix/ship-fix.yaml +81 -0
  400. package/examples/oss-quick-fix/understand-issue.yaml +67 -0
  401. package/examples/oss-quick-fix/verify-fix.yaml +73 -0
  402. package/examples/plan-review/README.md +37 -0
  403. package/examples/plan-review/plan-review-followup.yaml +13 -0
  404. package/examples/plan-review/plan-review.pipeline.yaml +9 -0
  405. package/examples/plan-review/plan-review.task.yaml +9 -0
  406. package/examples/plan-review/plan-review.yaml +25 -0
  407. package/examples/playwright-mcp/README.md +39 -0
  408. package/examples/playwright-mcp/playwright-mcp.pipeline.yaml +5 -0
  409. package/examples/playwright-mcp/playwright-mcp.task.yaml +4 -0
  410. package/examples/playwright-mcp/screenshot.yaml +40 -0
  411. package/examples/retry-tour/README.md +75 -0
  412. package/examples/retry-tour/retry-tour.pipeline.yaml +122 -0
  413. package/examples/retry-tour/retry-tour.task.yaml +9 -0
  414. package/examples/route-if-tour/README.md +202 -0
  415. package/examples/route-if-tour/route-if-tour.pipeline.yaml +950 -0
  416. package/examples/route-if-tour/route-if-tour.task.yaml +4 -0
  417. package/examples/route-wiring-smoke-test/01-core-routing.pipeline.yaml +168 -0
  418. package/examples/route-wiring-smoke-test/02-on-gating.pipeline.yaml +44 -0
  419. package/examples/route-wiring-smoke-test/03-two-entry-points.pipeline.yaml +28 -0
  420. package/examples/route-wiring-smoke-test/04-entry-false-equivalent-to-omitted.pipeline.yaml +27 -0
  421. package/examples/route-wiring-smoke-test/05-fork-choice.pipeline.yaml +110 -0
  422. package/examples/route-wiring-smoke-test/06-fan-out-fan-in.pipeline.yaml +82 -0
  423. package/examples/route-wiring-smoke-test/07-loop-human-decision.pipeline.yaml +82 -0
  424. package/examples/route-wiring-smoke-test/08-skip-fallback-and-multi-on-gate.pipeline.yaml +77 -0
  425. package/examples/route-wiring-smoke-test/09-multi-loop-targets.pipeline.yaml +102 -0
  426. package/examples/route-wiring-smoke-test/10-uses-dialect-fork.pipeline.yaml +23 -0
  427. package/examples/route-wiring-smoke-test/11-sequential-io-handoff.pipeline.yaml +37 -0
  428. package/examples/route-wiring-smoke-test/12-complex-io-schemas.pipeline.yaml +138 -0
  429. package/examples/route-wiring-smoke-test/13-ref-io-handoff.pipeline.yaml +84 -0
  430. package/examples/route-wiring-smoke-test/14-if-eq-gating.pipeline.yaml +50 -0
  431. package/examples/route-wiring-smoke-test/15-if-all-gated.pipeline.yaml +37 -0
  432. package/examples/route-wiring-smoke-test/16-if-composition.pipeline.yaml +65 -0
  433. package/examples/route-wiring-smoke-test/17-if-join.pipeline.yaml +80 -0
  434. package/examples/route-wiring-smoke-test/README.md +377 -0
  435. package/examples/route-wiring-smoke-test/rejected/01-reject-legacy-needs.pipeline.yaml +26 -0
  436. package/examples/route-wiring-smoke-test/rejected/02-reject-legacy-fork.pipeline.yaml +25 -0
  437. package/examples/route-wiring-smoke-test/rejected/03-reject-legacy-feedback-loop.pipeline.yaml +30 -0
  438. package/examples/route-wiring-smoke-test/rejected/04-reject-missing-entry.pipeline.yaml +24 -0
  439. package/examples/route-wiring-smoke-test/rejected/05-reject-unreachable.pipeline.yaml +35 -0
  440. package/examples/route-wiring-smoke-test/rejected/06-reject-allow-none-without-route-select.pipeline.yaml +37 -0
  441. package/examples/route-wiring-smoke-test/rejected/07-reject-cycle.pipeline.yaml +27 -0
  442. package/examples/route-wiring-smoke-test/rejected/08-reject-loop-non-ancestor.pipeline.yaml +42 -0
  443. package/examples/route-wiring-smoke-test/rejected/09-reject-route-select-leaf.pipeline.yaml +26 -0
  444. package/examples/route-wiring-smoke-test/rejected/12-reject-loop-replay-unsafe.pipeline.yaml +55 -0
  445. package/examples/route-wiring-smoke-test/rejected/13-reject-multiple-loop-entries.pipeline.yaml +51 -0
  446. package/examples/route-wiring-smoke-test/rejected/14-reject-duplicate-stage-id.pipeline.yaml +35 -0
  447. package/examples/route-wiring-smoke-test/rejected/15-reject-unknown-route-target.pipeline.yaml +15 -0
  448. package/examples/route-wiring-smoke-test/rejected/16-reject-malformed-route-item.pipeline.yaml +15 -0
  449. package/examples/route-wiring-smoke-test/rejected/17-reject-io-incompatible.pipeline.yaml +33 -0
  450. package/examples/route-wiring-smoke-test/rejected/18-reject-nested-io.pipeline.yaml +51 -0
  451. package/examples/route-wiring-smoke-test/rejected/19-reject-array-item-io.pipeline.yaml +55 -0
  452. package/examples/route-wiring-smoke-test/rejected/20-reject-closed-io.pipeline.yaml +36 -0
  453. package/examples/route-wiring-smoke-test/rejected/21-reject-ref-io.pipeline.yaml +42 -0
  454. package/examples/route-wiring-smoke-test/rejected/22-reject-if-unknown-field.pipeline.yaml +33 -0
  455. package/examples/route-wiring-smoke-test/rejected/23-reject-if-optional-field.pipeline.yaml +32 -0
  456. package/examples/route-wiring-smoke-test/rejected/24-reject-if-empty-all.pipeline.yaml +31 -0
  457. package/examples/route-wiring-smoke-test/rejected/25-reject-if-gt-on-string.pipeline.yaml +33 -0
  458. package/examples/route-wiring-smoke-test/rejected/26-reject-if-optional-nested.pipeline.yaml +36 -0
  459. package/examples/route-wiring-smoke-test/rejected/27-reject-if-on-loop.pipeline.yaml +63 -0
  460. package/examples/route-wiring-smoke-test/rejected/29-reject-if-on-failed.pipeline.yaml +46 -0
  461. package/examples/route-wiring-smoke-test/smoke-test.task.yaml +4 -0
  462. package/examples/route-wiring-smoke-test/stages/branch-a.yaml +12 -0
  463. package/examples/route-wiring-smoke-test/stages/branch-b.yaml +12 -0
  464. package/examples/route-wiring-smoke-test/stages/decide.yaml +12 -0
  465. package/examples/route-wiring-smoke-test/stages/finish.yaml +12 -0
  466. package/examples/ship-feature/README.md +190 -0
  467. package/examples/ship-feature/feat-address-feedback.yaml +119 -0
  468. package/examples/ship-feature/feat-implement.yaml +180 -0
  469. package/examples/ship-feature/feat-plan.yaml +120 -0
  470. package/examples/ship-feature/feat-review.yaml +109 -0
  471. package/examples/ship-feature/feat-ship.yaml +203 -0
  472. package/examples/ship-feature/ship-feature.pipeline.yaml +44 -0
  473. package/examples/ship-feature/ship-feature.task.yaml +78 -0
  474. package/examples/stage-mcp/README.md +144 -0
  475. package/examples/stage-mcp/echo-mcp.mjs +20 -0
  476. package/examples/stage-mcp/stage-mcp-dead.pipeline.yaml +5 -0
  477. package/examples/stage-mcp/stage-mcp-dead.task.yaml +3 -0
  478. package/examples/stage-mcp/stage-mcp-missing-var.pipeline.yaml +5 -0
  479. package/examples/stage-mcp/stage-mcp-missing-var.task.yaml +3 -0
  480. package/examples/stage-mcp/stage-mcp.pipeline.yaml +5 -0
  481. package/examples/stage-mcp/stage-mcp.task.yaml +4 -0
  482. package/examples/stage-mcp/use-echo.yaml +20 -0
  483. package/examples/verify-tour/README.md +80 -0
  484. package/examples/verify-tour/verify-tour.pipeline.yaml +162 -0
  485. package/examples/verify-tour/verify-tour.task.yaml +11 -0
  486. package/package.json +5 -1
  487. package/skills/stageflow/SKILL.md +6 -6
  488. package/skills/stageflow/references/control-surface.md +11 -5
  489. package/skills/stageflow/scripts/detect-host.mjs +14 -1
  490. package/skills/stageflow/scripts/detect-host.test.mjs +29 -1
  491. package/skills/stageflow-author/SKILL.md +4 -3
  492. package/skills/stageflow-author/references/catalog-mapping.md +16 -0
  493. package/skills/stageflow-author/references/catalog-write-conventions.md +1 -1
  494. package/skills/stageflow-run/SKILL.md +20 -12
  495. package/skills/stageflow-run/references/mcp-call.md +9 -1
  496. package/skills/stageflow-run/references/task-and-pipeline-selection.md +16 -5
  497. package/skills/stageflow-run/scripts/mcp-call.mjs +46 -6
  498. package/skills/stageflow-run/scripts/mcp-call.test.mjs +64 -0
  499. package/skills/stageflow-session-capture/references/catalog-authoring.md +2 -0
  500. package/skills/stageflow-setup/SKILL.md +40 -8
  501. package/dist/ui/assets/index-Da5EHU6M.js +0 -119
@@ -0,0 +1,102 @@
1
+ id: route-demo-multi-loop-targets
2
+ # Two DIFFERENT stages (review, qa) each declare their own loop entry back
3
+ # to the SAME ancestor (implement). review's loop point is dormant in this
4
+ # run (always continues); qa's is the one that actually fires, demonstrating
5
+ # that a loop target doesn't have to be the looping stage's immediate
6
+ # parent -- implement is two hops back from qa (implement -> review -> qa).
7
+ stages:
8
+ - id: plan
9
+ entry: true
10
+ route:
11
+ - to: implement
12
+ system_prompt: |
13
+ Draft a one-sentence plan.
14
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
15
+ model: cursor/auto
16
+ io:
17
+ input:
18
+ schema:
19
+ type: object
20
+ output:
21
+ schema:
22
+ type: object
23
+
24
+ - id: implement
25
+ route:
26
+ - to: review
27
+ system_prompt: |
28
+ Implement the plan in one sentence.
29
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
30
+ model: cursor/auto
31
+ io:
32
+ input:
33
+ schema:
34
+ type: object
35
+ output:
36
+ schema:
37
+ type: object
38
+
39
+ - id: review
40
+ route:
41
+ - to: qa
42
+ - type: loop
43
+ to: implement
44
+ max_replays: 1
45
+ on_max_replays: require_continue
46
+ replay_session: resume
47
+ system_prompt: |
48
+ Review the implementation in one or two sentences.
49
+ On success you MUST include feedback_loop in your envelope:
50
+ {"action":"continue"} or {"action":"send_back","target":"implement"}.
51
+ For this smoke test, ALWAYS continue -- never send back. This loop
52
+ point exists in the wiring but stays dormant this run; qa (below) is
53
+ the one that actually exercises a loop-back to implement.
54
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], payload: {}, and feedback_loop: {"action":"continue"}.
55
+ model: cursor/auto
56
+ io:
57
+ input:
58
+ schema:
59
+ type: object
60
+ output:
61
+ schema:
62
+ type: object
63
+
64
+ - id: qa
65
+ route:
66
+ - to: done
67
+ - type: loop
68
+ to: implement
69
+ max_replays: 1
70
+ on_max_replays: require_continue
71
+ replay_session: resume
72
+ system_prompt: |
73
+ QA the reviewed implementation in one or two sentences.
74
+ On success you MUST include feedback_loop in your envelope:
75
+ {"action":"continue"} or {"action":"send_back","target":"implement"}.
76
+ For this smoke test: on your FIRST attempt, send_back to implement.
77
+ On your SECOND attempt (after the replay), continue. This demonstrates
78
+ looping back to an ancestor two stages back (implement), independently
79
+ of review's own dormant loop point above -- both target the same
80
+ stage from different points in the chain.
81
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], payload: {}, and the matching feedback_loop action.
82
+ model: cursor/auto
83
+ io:
84
+ input:
85
+ schema:
86
+ type: object
87
+ output:
88
+ schema:
89
+ type: object
90
+
91
+ - id: done
92
+ system_prompt: |
93
+ Close out the run in one sentence.
94
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
95
+ model: cursor/auto
96
+ io:
97
+ input:
98
+ schema:
99
+ type: object
100
+ output:
101
+ schema:
102
+ type: object
@@ -0,0 +1,23 @@
1
+ id: route-demo-uses-dialect-fork
2
+ # Every other pipeline in this catalog uses inline stage bodies
3
+ # (system_prompt/model directly on the stage entry). This one uses the
4
+ # `uses:` external-stage-file dialect instead — to confirm route/entry
5
+ # work identically regardless of where the stage body lives. Both
6
+ # listed branches always run after decide succeeds.
7
+ stages:
8
+ - id: decide
9
+ entry: true
10
+ route:
11
+ - to: branch-a
12
+ - to: branch-b
13
+ uses: ./stages/decide.yaml
14
+ - id: branch-a
15
+ route:
16
+ - to: finish
17
+ uses: ./stages/branch-a.yaml
18
+ - id: branch-b
19
+ route:
20
+ - to: finish
21
+ uses: ./stages/branch-b.yaml
22
+ - id: finish
23
+ uses: ./stages/finish.yaml
@@ -0,0 +1,37 @@
1
+ id: route-demo-sequential-io
2
+ stages:
3
+ - id: draft
4
+ entry: true
5
+ route:
6
+ - to: review
7
+ system_prompt: |
8
+ Draft a titled document in one sentence.
9
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"title": "Smoke draft"}.
10
+ model: cursor/auto
11
+ io:
12
+ input:
13
+ schema:
14
+ type: object
15
+ output:
16
+ schema:
17
+ type: object
18
+ required: [title]
19
+ properties:
20
+ title:
21
+ type: string
22
+ - id: review
23
+ system_prompt: |
24
+ Review the titled document in one sentence.
25
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
26
+ model: cursor/auto
27
+ io:
28
+ input:
29
+ schema:
30
+ type: object
31
+ required: [title]
32
+ properties:
33
+ title:
34
+ type: string
35
+ output:
36
+ schema:
37
+ type: object
@@ -0,0 +1,138 @@
1
+ id: route-demo-complex-io
2
+ schemas:
3
+ finding:
4
+ type: object
5
+ required: [id, severity]
6
+ properties:
7
+ id:
8
+ type: string
9
+ minLength: 1
10
+ severity:
11
+ type: string
12
+ enum: [low, medium, high]
13
+ detail:
14
+ type: string
15
+ nullable: true
16
+ report:
17
+ type: object
18
+ required: [title, status, findings, score, metadata]
19
+ properties:
20
+ title:
21
+ type: string
22
+ minLength: 1
23
+ maxLength: 200
24
+ pattern: "^[A-Za-z0-9].+"
25
+ status:
26
+ type: string
27
+ enum: [draft, review, final]
28
+ findings:
29
+ type: array
30
+ minItems: 1
31
+ items:
32
+ $ref: "#/schemas/finding"
33
+ score:
34
+ type: integer
35
+ minimum: 0
36
+ maximum: 100
37
+ notes:
38
+ type: string
39
+ metadata:
40
+ type: object
41
+ required: [source]
42
+ properties:
43
+ source:
44
+ type: string
45
+ version:
46
+ type: integer
47
+ minimum: 1
48
+ analyzed:
49
+ type: object
50
+ required: [title, status, findings, score, metadata, summary]
51
+ properties:
52
+ title:
53
+ type: string
54
+ minLength: 1
55
+ maxLength: 200
56
+ pattern: "^[A-Za-z0-9].+"
57
+ status:
58
+ type: string
59
+ enum: [draft, review, final]
60
+ findings:
61
+ type: array
62
+ minItems: 1
63
+ items:
64
+ $ref: "#/schemas/finding"
65
+ score:
66
+ type: integer
67
+ minimum: 0
68
+ maximum: 100
69
+ notes:
70
+ type: string
71
+ metadata:
72
+ type: object
73
+ required: [source]
74
+ properties:
75
+ source:
76
+ type: string
77
+ version:
78
+ type: integer
79
+ minimum: 1
80
+ summary:
81
+ type: string
82
+ minLength: 1
83
+ stages:
84
+ - id: draft
85
+ entry: true
86
+ route:
87
+ - to: analyze
88
+ system_prompt: |
89
+ Draft a findings report in one or two sentences.
90
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and a payload matching #/schemas/report. Copy this example:
91
+ {"title":"Smoke report","status":"draft","findings":[{"id":"f1","severity":"low","detail":"none"}],"score":80,"metadata":{"source":"smoke-test"}}
92
+ model: cursor/auto
93
+ io:
94
+ input:
95
+ schema:
96
+ type: object
97
+ output:
98
+ schema:
99
+ $ref: "#/schemas/report"
100
+ - id: analyze
101
+ route:
102
+ - to: summarize
103
+ system_prompt: |
104
+ Keep the report fields and add a summary string.
105
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and a payload matching #/schemas/analyzed. Copy this example:
106
+ {"title":"Smoke report","status":"review","findings":[{"id":"f1","severity":"low","detail":"none"}],"score":80,"metadata":{"source":"smoke-test"},"summary":"One low finding; score 80."}
107
+ model: cursor/auto
108
+ io:
109
+ input:
110
+ schema:
111
+ $ref: "#/schemas/report"
112
+ output:
113
+ schema:
114
+ $ref: "#/schemas/analyzed"
115
+ - id: summarize
116
+ system_prompt: |
117
+ Summarize using title, summary, and score from the prior payload. One sentence is enough.
118
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
119
+ model: cursor/auto
120
+ io:
121
+ input:
122
+ schema:
123
+ type: object
124
+ required: [title, summary, score]
125
+ properties:
126
+ title:
127
+ type: string
128
+ minLength: 1
129
+ summary:
130
+ type: string
131
+ minLength: 1
132
+ score:
133
+ type: number
134
+ minimum: 0
135
+ maximum: 100
136
+ output:
137
+ schema:
138
+ type: object
@@ -0,0 +1,84 @@
1
+ id: route-demo-ref-io
2
+ schemas:
3
+ empty:
4
+ type: object
5
+ doc:
6
+ type: object
7
+ required: [title, body]
8
+ properties:
9
+ title:
10
+ type: string
11
+ minLength: 1
12
+ body:
13
+ type: string
14
+ extras:
15
+ type: array
16
+ items:
17
+ type: string
18
+ analyzed:
19
+ type: object
20
+ required: [title, body, verdict]
21
+ properties:
22
+ title:
23
+ type: string
24
+ minLength: 1
25
+ body:
26
+ type: string
27
+ extras:
28
+ type: array
29
+ items:
30
+ type: string
31
+ verdict:
32
+ type: string
33
+ enum: [approve, request-changes]
34
+ title-only:
35
+ type: object
36
+ required: [title]
37
+ properties:
38
+ title:
39
+ type: string
40
+ minLength: 1
41
+ done:
42
+ type: object
43
+ stages:
44
+ - id: draft
45
+ entry: true
46
+ route:
47
+ - to: review
48
+ system_prompt: |
49
+ Draft a document in one or two sentences.
50
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and a payload matching #/schemas/doc: {"title":"Smoke doc","body":"A short body."}.
51
+ model: cursor/auto
52
+ io:
53
+ input:
54
+ schema:
55
+ $ref: "#/schemas/empty"
56
+ output:
57
+ schema:
58
+ $ref: "#/schemas/doc"
59
+ - id: review
60
+ route:
61
+ - to: ship
62
+ system_prompt: |
63
+ Keep the document fields and add a verdict of approve or request-changes.
64
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and a payload matching #/schemas/analyzed: {"title":"Smoke doc","body":"A short body.","verdict":"approve"}.
65
+ model: cursor/auto
66
+ io:
67
+ input:
68
+ schema:
69
+ $ref: "#/schemas/doc"
70
+ output:
71
+ schema:
72
+ $ref: "#/schemas/analyzed"
73
+ - id: ship
74
+ system_prompt: |
75
+ Ship using title from the prior payload. One sentence is enough.
76
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
77
+ model: cursor/auto
78
+ io:
79
+ input:
80
+ schema:
81
+ $ref: "#/schemas/title-only"
82
+ output:
83
+ schema:
84
+ $ref: "#/schemas/done"
@@ -0,0 +1,50 @@
1
+ id: route-demo-if-eq
2
+ stages:
3
+ - id: triage
4
+ entry: true
5
+ route:
6
+ - to: page
7
+ if:
8
+ field: severity
9
+ op: eq
10
+ value: high
11
+ - to: notify
12
+ system_prompt: |
13
+ Triage in one sentence.
14
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"severity": "low"}.
15
+ model: cursor/auto
16
+ io:
17
+ input:
18
+ schema:
19
+ type: object
20
+ output:
21
+ schema:
22
+ type: object
23
+ required: [severity]
24
+ properties:
25
+ severity:
26
+ type: string
27
+ - id: page
28
+ system_prompt: |
29
+ Page on-call in one sentence.
30
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
31
+ model: cursor/auto
32
+ io:
33
+ input:
34
+ schema:
35
+ type: object
36
+ output:
37
+ schema:
38
+ type: object
39
+ - id: notify
40
+ system_prompt: |
41
+ Notify the team in one sentence.
42
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
43
+ model: cursor/auto
44
+ io:
45
+ input:
46
+ schema:
47
+ type: object
48
+ output:
49
+ schema:
50
+ type: object
@@ -0,0 +1,37 @@
1
+ id: route-demo-if-all-gated
2
+ stages:
3
+ - id: triage
4
+ entry: true
5
+ route:
6
+ - to: page
7
+ if:
8
+ field: severity
9
+ op: eq
10
+ value: high
11
+ system_prompt: |
12
+ Triage in one sentence.
13
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"severity": "low"}.
14
+ model: cursor/auto
15
+ io:
16
+ input:
17
+ schema:
18
+ type: object
19
+ output:
20
+ schema:
21
+ type: object
22
+ required: [severity]
23
+ properties:
24
+ severity:
25
+ type: string
26
+ - id: page
27
+ system_prompt: |
28
+ Page on-call in one sentence.
29
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
30
+ model: cursor/auto
31
+ io:
32
+ input:
33
+ schema:
34
+ type: object
35
+ output:
36
+ schema:
37
+ type: object
@@ -0,0 +1,65 @@
1
+ id: route-demo-if-composition
2
+ stages:
3
+ - id: triage
4
+ entry: true
5
+ route:
6
+ - to: page
7
+ if:
8
+ not:
9
+ all:
10
+ - field: severity
11
+ op: eq
12
+ value: low
13
+ - field: customer.tier
14
+ op: in
15
+ value: [bronze]
16
+ - to: notify
17
+ system_prompt: |
18
+ Triage in one sentence.
19
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"severity": "low", "customer": {"tier": "bronze"}}.
20
+ model: cursor/auto
21
+ io:
22
+ input:
23
+ schema:
24
+ type: object
25
+ output:
26
+ schema:
27
+ type: object
28
+ required: [severity, customer]
29
+ properties:
30
+ severity:
31
+ type: string
32
+ customer:
33
+ type: object
34
+ required: [tier]
35
+ properties:
36
+ tier:
37
+ type: string
38
+ - id: page
39
+ system_prompt: |
40
+ Page on-call in one sentence.
41
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
42
+ model: cursor/auto
43
+ io:
44
+ input:
45
+ schema:
46
+ type: object
47
+ required: [severity]
48
+ properties:
49
+ severity:
50
+ type: string
51
+ output:
52
+ schema:
53
+ type: object
54
+ - id: notify
55
+ system_prompt: |
56
+ Notify the team in one sentence.
57
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
58
+ model: cursor/auto
59
+ io:
60
+ input:
61
+ schema:
62
+ type: object
63
+ output:
64
+ schema:
65
+ type: object
@@ -0,0 +1,80 @@
1
+ id: route-demo-if-join
2
+ # Two-parent Join gated by inbound `if`s. Each parent evaluates `if` against
3
+ # its own output payload. Both match → assemble runs with both envelopes.
4
+ # Either misses → assemble is skipped; the run still succeeds.
5
+ stages:
6
+ - id: kickoff
7
+ entry: true
8
+ route:
9
+ - to: write
10
+ - to: draw
11
+ system_prompt: |
12
+ Kick off write and draw in one sentence.
13
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
14
+ model: cursor/auto
15
+ io:
16
+ input:
17
+ schema:
18
+ type: object
19
+ output:
20
+ schema:
21
+ type: object
22
+
23
+ - id: write
24
+ route:
25
+ - to: assemble
26
+ if:
27
+ field: ready
28
+ op: eq
29
+ value: true
30
+ system_prompt: |
31
+ Write the first half in one sentence.
32
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"ready": true}.
33
+ model: cursor/auto
34
+ io:
35
+ input:
36
+ schema:
37
+ type: object
38
+ output:
39
+ schema:
40
+ type: object
41
+ required: [ready]
42
+ properties:
43
+ ready:
44
+ type: boolean
45
+
46
+ - id: draw
47
+ route:
48
+ - to: assemble
49
+ if:
50
+ field: complete
51
+ op: eq
52
+ value: true
53
+ system_prompt: |
54
+ Draw the second half in one sentence.
55
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"complete": true}.
56
+ model: cursor/auto
57
+ io:
58
+ input:
59
+ schema:
60
+ type: object
61
+ output:
62
+ schema:
63
+ type: object
64
+ required: [complete]
65
+ properties:
66
+ complete:
67
+ type: boolean
68
+
69
+ - id: assemble
70
+ system_prompt: |
71
+ Combine both parents' work into one summary sentence.
72
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
73
+ model: cursor/auto
74
+ io:
75
+ input:
76
+ schema:
77
+ type: object
78
+ output:
79
+ schema:
80
+ type: object