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,4 @@
1
+ id: route-if-tour
2
+ goal: Follow each stage prompt and emit the exact JSON payload it names.
3
+ context: Route-if tour — routing is decided by those payloads, not by picking a next stage.
4
+ constraints: Docs only; no implementation code. One-sentence summaries. Use the prompt's payload verbatim. Never emit fork_choice.
@@ -0,0 +1,168 @@
1
+ id: route-demo-core
2
+ stages:
3
+ - id: plan
4
+ entry: true
5
+ route:
6
+ - to: implement
7
+ system_prompt: |
8
+ Draft a one-sentence plan.
9
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
10
+ model: cursor/auto
11
+ io:
12
+ input:
13
+ schema:
14
+ type: object
15
+ output:
16
+ schema:
17
+ type: object
18
+
19
+ - id: implement
20
+ route:
21
+ - to: review
22
+ system_prompt: |
23
+ Implement the plan in one or two sentences.
24
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
25
+ model: cursor/auto
26
+ io:
27
+ input:
28
+ schema:
29
+ type: object
30
+ output:
31
+ schema:
32
+ type: object
33
+
34
+ # Loop: continue forward to qa, or send back to implement (driven by
35
+ # the feedback_loop envelope action, independent of listed route targets).
36
+ - id: review
37
+ route:
38
+ - to: qa
39
+ - type: loop
40
+ to: implement
41
+ max_replays: 2
42
+ on_max_replays: require_continue
43
+ replay_session: resume
44
+ system_prompt: |
45
+ Review the change in one or two sentences. Prefer continue so the rest of the pipeline runs.
46
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], payload: {}, and feedback_loop: {"action":"continue"}.
47
+ To send work back instead, use feedback_loop: {"action":"send_back","target":"implement"}.
48
+ model: cursor/auto
49
+ io:
50
+ input:
51
+ schema:
52
+ type: object
53
+ output:
54
+ schema:
55
+ type: object
56
+
57
+ # Listed route targets always run after qa succeeds.
58
+ - id: qa
59
+ route:
60
+ - to: ship
61
+ - to: request-changes
62
+ system_prompt: |
63
+ Record the QA outcome in one sentence. Ship and request-changes both run next.
64
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
65
+ model: cursor/auto
66
+ io:
67
+ input:
68
+ schema:
69
+ type: object
70
+ output:
71
+ schema:
72
+ type: object
73
+
74
+ # Listed route targets always run after ship succeeds.
75
+ - id: ship
76
+ route:
77
+ - to: notify-slack
78
+ - to: notify-email
79
+ - to: update-changelog
80
+ system_prompt: |
81
+ Ship the change in one sentence. Slack, email, and changelog notifications all run next.
82
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
83
+ model: cursor/auto
84
+ io:
85
+ input:
86
+ schema:
87
+ type: object
88
+ output:
89
+ schema:
90
+ type: object
91
+
92
+ - id: request-changes
93
+ route:
94
+ - to: close
95
+ system_prompt: |
96
+ Note the requested changes in one sentence.
97
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
98
+ model: cursor/auto
99
+ io:
100
+ input:
101
+ schema:
102
+ type: object
103
+ output:
104
+ schema:
105
+ type: object
106
+
107
+ - id: notify-slack
108
+ route:
109
+ - to: close
110
+ system_prompt: |
111
+ Pretend to notify Slack in one sentence.
112
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
113
+ model: cursor/auto
114
+ io:
115
+ input:
116
+ schema:
117
+ type: object
118
+ output:
119
+ schema:
120
+ type: object
121
+
122
+ - id: notify-email
123
+ route:
124
+ - to: close
125
+ system_prompt: |
126
+ Pretend to notify email in one sentence.
127
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
128
+ model: cursor/auto
129
+ io:
130
+ input:
131
+ schema:
132
+ type: object
133
+ output:
134
+ schema:
135
+ type: object
136
+
137
+ - id: update-changelog
138
+ route:
139
+ - to: close
140
+ system_prompt: |
141
+ Pretend to update the changelog in one sentence.
142
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
143
+ model: cursor/auto
144
+ io:
145
+ input:
146
+ schema:
147
+ type: object
148
+ output:
149
+ schema:
150
+ type: object
151
+
152
+ # Fan-in of request-changes plus the three notify stages. On the happy
153
+ # path all four parents run. The join waits until every parent is
154
+ # terminal, then runs if at least one succeeded (skipped arms do not
155
+ # block; their envelopes are omitted). Stays pending if a parent failed.
156
+ # Does not run if every parent skipped.
157
+ - id: close
158
+ system_prompt: |
159
+ Close out the run in one sentence.
160
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
161
+ model: cursor/auto
162
+ io:
163
+ input:
164
+ schema:
165
+ type: object
166
+ output:
167
+ schema:
168
+ type: object
@@ -0,0 +1,44 @@
1
+ id: route-demo-on-gate
2
+ stages:
3
+ - id: run-tests
4
+ entry: true
5
+ route:
6
+ - to: ship
7
+ on: [succeeded]
8
+ - to: hotfix
9
+ on: [failed]
10
+ system_prompt: |
11
+ Run a tiny smoke-test check and succeed so ship runs next. (A failure envelope would route to hotfix instead.)
12
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
13
+ model: cursor/auto
14
+ io:
15
+ input:
16
+ schema:
17
+ type: object
18
+ output:
19
+ schema:
20
+ type: object
21
+ - id: ship
22
+ system_prompt: |
23
+ Ship the release in one sentence.
24
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
25
+ model: cursor/auto
26
+ io:
27
+ input:
28
+ schema:
29
+ type: object
30
+ output:
31
+ schema:
32
+ type: object
33
+ - id: hotfix
34
+ system_prompt: |
35
+ Apply a hotfix in one sentence.
36
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
37
+ model: cursor/auto
38
+ io:
39
+ input:
40
+ schema:
41
+ type: object
42
+ output:
43
+ schema:
44
+ type: object
@@ -0,0 +1,28 @@
1
+ id: route-demo-two-entries
2
+ stages:
3
+ - id: news-digest
4
+ entry: true
5
+ system_prompt: |
6
+ Gather a one-sentence news digest.
7
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
8
+ model: cursor/auto
9
+ io:
10
+ input:
11
+ schema:
12
+ type: object
13
+ output:
14
+ schema:
15
+ type: object
16
+ - id: weather-report
17
+ entry: true
18
+ system_prompt: |
19
+ Gather a one-sentence weather report.
20
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
21
+ model: cursor/auto
22
+ io:
23
+ input:
24
+ schema:
25
+ type: object
26
+ output:
27
+ schema:
28
+ type: object
@@ -0,0 +1,27 @@
1
+ id: route-demo-entry-false
2
+ stages:
3
+ - id: draft
4
+ entry: false
5
+ system_prompt: |
6
+ Write one sentence as a standalone stage explicitly marked entry false.
7
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
8
+ model: cursor/auto
9
+ io:
10
+ input:
11
+ schema:
12
+ type: object
13
+ output:
14
+ schema:
15
+ type: object
16
+ - id: review
17
+ system_prompt: |
18
+ Write one sentence as another independent stage.
19
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
20
+ model: cursor/auto
21
+ io:
22
+ input:
23
+ schema:
24
+ type: object
25
+ output:
26
+ schema:
27
+ type: object
@@ -0,0 +1,110 @@
1
+ id: route-demo-fork-choice
2
+ stages:
3
+ # Listed route targets always run after triage succeeds.
4
+ - id: triage
5
+ entry: true
6
+ route:
7
+ - to: quick-fix
8
+ - to: big-project
9
+ system_prompt: |
10
+ Categorize this work in one sentence. Both the quick-fix and big-project follow-ups run next.
11
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
12
+ model: cursor/auto
13
+ io:
14
+ input:
15
+ schema:
16
+ type: object
17
+ output:
18
+ schema:
19
+ type: object
20
+
21
+ - id: big-project
22
+ system_prompt: |
23
+ Kick off planning for the big project in one sentence.
24
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
25
+ model: cursor/auto
26
+ io:
27
+ input:
28
+ schema:
29
+ type: object
30
+ output:
31
+ schema:
32
+ type: object
33
+
34
+ # Listed route targets always run after quick-fix succeeds.
35
+ - id: quick-fix
36
+ route:
37
+ - to: notify-team
38
+ - to: update-docs
39
+ - to: schedule-followup
40
+ system_prompt: |
41
+ Apply the quick fix in one sentence. Notify-team, update-docs, and schedule-followup all run next.
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
51
+
52
+ - id: notify-team
53
+ route:
54
+ - to: close
55
+ system_prompt: |
56
+ Notify the team the quick fix shipped, 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
66
+
67
+ - id: update-docs
68
+ route:
69
+ - to: close
70
+ system_prompt: |
71
+ Update the docs for the quick fix in one 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
81
+
82
+ - id: schedule-followup
83
+ route:
84
+ - to: close
85
+ system_prompt: |
86
+ Schedule a follow-up review in one sentence.
87
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
88
+ model: cursor/auto
89
+ io:
90
+ input:
91
+ schema:
92
+ type: object
93
+ output:
94
+ schema:
95
+ type: object
96
+
97
+ # Fan-in of notify-team, update-docs, and schedule-followup — all three
98
+ # run on the happy path.
99
+ - id: close
100
+ system_prompt: |
101
+ Close out the run in one sentence.
102
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
103
+ model: cursor/auto
104
+ io:
105
+ input:
106
+ schema:
107
+ type: object
108
+ output:
109
+ schema:
110
+ type: object
@@ -0,0 +1,82 @@
1
+ id: route-demo-fan-out-fan-in
2
+ # Unconditional parallel fan-out: kickoff's route lists three targets, so
3
+ # all three always run, feeding one join that waits for all of them.
4
+ # Multiple forward `to:` entries always fan out this way.
5
+ stages:
6
+ - id: kickoff
7
+ entry: true
8
+ route:
9
+ - to: research
10
+ - to: analysis
11
+ - to: review-notes
12
+ system_prompt: |
13
+ Kick off three independent workstreams in one sentence.
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: research
25
+ route:
26
+ - to: synthesize
27
+ system_prompt: |
28
+ Workstream 1 (research). Produce one short finding.
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: analysis
40
+ route:
41
+ - to: synthesize
42
+ system_prompt: |
43
+ Workstream 2 (analysis). Produce one short finding.
44
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
45
+ model: cursor/auto
46
+ io:
47
+ input:
48
+ schema:
49
+ type: object
50
+ output:
51
+ schema:
52
+ type: object
53
+
54
+ - id: review-notes
55
+ route:
56
+ - to: synthesize
57
+ system_prompt: |
58
+ Workstream 3 (review notes). Produce one short finding.
59
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
60
+ model: cursor/auto
61
+ io:
62
+ input:
63
+ schema:
64
+ type: object
65
+ output:
66
+ schema:
67
+ type: object
68
+
69
+ # Fan-in: waits for research, analysis, and review-notes — all three,
70
+ # every time, since none of them are skipped.
71
+ - id: synthesize
72
+ system_prompt: |
73
+ Combine all three workstreams' findings into one summary sentence.
74
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
75
+ model: cursor/auto
76
+ io:
77
+ input:
78
+ schema:
79
+ type: object
80
+ output:
81
+ schema:
82
+ type: object
@@ -0,0 +1,82 @@
1
+ id: route-demo-loop-human-decision
2
+ # Covers the loop config variants 01-core-routing doesn't: on_max_replays:
3
+ # wait_for_human (vs. require_continue) and replay_session: new_session (vs.
4
+ # resume). max_replays: 1 plus review's prompt (always send_back) makes this
5
+ # reliably exhaust its replay budget and PARK the run waiting for a human
6
+ # decision -- a genuine "waiting for input" state, not a bug. Use
7
+ # `npx tsx src/cli.ts runs waiting` / `npx tsx src/cli.ts runs answer` (or the
8
+ # UI's own decide flow) to unstick it:
9
+ # `npx tsx src/cli.ts runs answer --run <runId> --stage review`.
10
+ stages:
11
+ - id: plan
12
+ entry: true
13
+ route:
14
+ - to: implement
15
+ system_prompt: |
16
+ Draft a one-sentence plan.
17
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
18
+ model: cursor/auto
19
+ io:
20
+ input:
21
+ schema:
22
+ type: object
23
+ output:
24
+ schema:
25
+ type: object
26
+
27
+ - id: implement
28
+ route:
29
+ - to: review
30
+ system_prompt: |
31
+ Implement the plan in one sentence.
32
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
33
+ model: cursor/auto
34
+ io:
35
+ input:
36
+ schema:
37
+ type: object
38
+ output:
39
+ schema:
40
+ type: object
41
+
42
+ - id: review
43
+ route:
44
+ - to: submit
45
+ - type: loop
46
+ to: implement
47
+ max_replays: 1
48
+ on_max_replays: wait_for_human
49
+ replay_session: new_session
50
+ system_prompt: |
51
+ Review the upstream work against the task goal in one or two sentences.
52
+ On success you MUST include feedback_loop in your envelope:
53
+ - {"action":"continue"} when the work is good enough to submit
54
+ - {"action":"send_back","target":"implement"} when another pass is needed
55
+ For this smoke test: ALWAYS send_back to implement, never continue.
56
+ This is deliberate -- with max_replays: 1, your second send_back will
57
+ exhaust the replay budget and park the run waiting for a human
58
+ decision (on_max_replays: wait_for_human), which is exactly what this
59
+ pipeline exists to demonstrate.
60
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], payload: {}, and feedback_loop: {"action":"send_back","target":"implement"}.
61
+ model: cursor/auto
62
+ io:
63
+ input:
64
+ schema:
65
+ type: object
66
+ output:
67
+ schema:
68
+ type: object
69
+
70
+ - id: submit
71
+ replay_safe: false
72
+ system_prompt: |
73
+ Submit the approved change in one sentence.
74
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
75
+ model: cursor/auto
76
+ io:
77
+ input:
78
+ schema:
79
+ type: object
80
+ output:
81
+ schema:
82
+ type: object
@@ -0,0 +1,77 @@
1
+ id: route-demo-skip-and-multi-on
2
+ stages:
3
+ # Listed route targets always run after decide succeeds — both arms.
4
+ - id: decide
5
+ entry: true
6
+ route:
7
+ - to: risky-step
8
+ - to: safe-step
9
+ system_prompt: |
10
+ Run both the risky-step and safe-step follow-ups. One sentence is enough.
11
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
12
+ model: cursor/auto
13
+ io:
14
+ input:
15
+ schema:
16
+ type: object
17
+ output:
18
+ schema:
19
+ type: object
20
+
21
+ # Leaf: does not route onward. done is only on the safe-step arm, so
22
+ # it does not wait on this sibling.
23
+ - id: risky-step
24
+ system_prompt: |
25
+ The risky path. A leaf — no child runs from here. One sentence is enough.
26
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
27
+ model: cursor/auto
28
+ io:
29
+ input:
30
+ schema:
31
+ type: object
32
+ output:
33
+ schema:
34
+ type: object
35
+
36
+ - id: safe-step
37
+ route:
38
+ - to: notify-either-way
39
+ system_prompt: |
40
+ The safe path. Routes onward to notify-either-way, then done. One sentence is enough.
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
+ output:
48
+ schema:
49
+ type: object
50
+
51
+ - id: notify-either-way
52
+ route:
53
+ - to: done
54
+ system_prompt: |
55
+ Runs after safe-step succeeds. One sentence is enough.
56
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
57
+ model: cursor/auto
58
+ io:
59
+ input:
60
+ schema:
61
+ type: object
62
+ output:
63
+ schema:
64
+ type: object
65
+
66
+ - id: done
67
+ system_prompt: |
68
+ Close out the run in one sentence.
69
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
70
+ model: cursor/auto
71
+ io:
72
+ input:
73
+ schema:
74
+ type: object
75
+ output:
76
+ schema:
77
+ type: object