stageflow 0.25.0 → 0.30.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 (681) hide show
  1. package/README.md +14 -3
  2. package/builtin-skills/browser/SKILL.md +42 -0
  3. package/dist/a2a/contracts.d.ts +1 -0
  4. package/dist/a2a/contracts.js +1 -0
  5. package/dist/a2a/registry.d.ts +2 -0
  6. package/dist/a2a/registry.js +20 -1
  7. package/dist/a2a/server.d.ts +7 -0
  8. package/dist/a2a/server.js +5 -2
  9. package/dist/a2a/service.d.ts +1 -1
  10. package/dist/a2a/service.js +57 -8
  11. package/dist/a2a/store.d.ts +8 -5
  12. package/dist/a2a/store.js +24 -67
  13. package/dist/agent/activity.d.ts +3 -0
  14. package/dist/agent/bootProviderConfig.d.ts +21 -0
  15. package/dist/agent/bootProviderConfig.js +74 -0
  16. package/dist/agent/claudeAdapter.js +2 -2
  17. package/dist/agent/cursorProvider.d.ts +2 -0
  18. package/dist/agent/cursorProvider.js +30 -5
  19. package/dist/agent/fakeAgent.d.ts +1 -0
  20. package/dist/agent/fakeAgent.js +13 -0
  21. package/dist/agent/piAdapter.d.ts +11 -24
  22. package/dist/agent/piAdapter.js +107 -50
  23. package/dist/agent/piIsolatedMcp.d.ts +2 -0
  24. package/dist/agent/piIsolatedMcp.js +10 -2
  25. package/dist/agent/piSessionFactory.d.ts +38 -0
  26. package/dist/agent/piSessionFactory.js +60 -0
  27. package/dist/agent/port.d.ts +8 -0
  28. package/dist/agent/streamLogRedact.d.ts +7 -1
  29. package/dist/agent/streamLogRedact.js +26 -11
  30. package/dist/browser/anchor.d.ts +27 -0
  31. package/dist/browser/anchor.js +127 -0
  32. package/dist/browser/auditSink.d.ts +38 -0
  33. package/dist/browser/auditSink.js +34 -0
  34. package/dist/browser/browserHost.d.ts +86 -0
  35. package/dist/browser/browserHost.js +7 -0
  36. package/dist/browser/browserSweep.d.ts +14 -0
  37. package/dist/browser/browserSweep.js +54 -0
  38. package/dist/browser/browserTeardown.d.ts +56 -0
  39. package/dist/browser/browserTeardown.js +235 -0
  40. package/dist/browser/fakeRemoteBrowserHost.d.ts +2 -0
  41. package/dist/browser/fakeRemoteBrowserHost.js +34 -0
  42. package/dist/browser/gateHandoff.d.ts +25 -0
  43. package/dist/browser/gateHandoff.js +83 -0
  44. package/dist/browser/humanLogin.d.ts +18 -0
  45. package/dist/browser/humanLogin.js +34 -0
  46. package/dist/browser/keyProvider.d.ts +10 -0
  47. package/dist/browser/keyProvider.js +39 -0
  48. package/dist/browser/localBrowserHost.d.ts +10 -0
  49. package/dist/browser/localBrowserHost.js +152 -0
  50. package/dist/browser/localProfileLock.d.ts +2 -0
  51. package/dist/browser/localProfileLock.js +218 -0
  52. package/dist/browser/localProfileStore.d.ts +5 -0
  53. package/dist/browser/localProfileStore.js +91 -0
  54. package/dist/browser/loginCheck.d.ts +53 -0
  55. package/dist/browser/loginCheck.js +147 -0
  56. package/dist/browser/memoryProfileLock.d.ts +2 -0
  57. package/dist/browser/memoryProfileLock.js +53 -0
  58. package/dist/browser/memoryProfileStore.d.ts +2 -0
  59. package/dist/browser/memoryProfileStore.js +31 -0
  60. package/dist/browser/navigationAudit.d.ts +16 -0
  61. package/dist/browser/navigationAudit.js +53 -0
  62. package/dist/browser/persistedEnv.d.ts +3 -0
  63. package/dist/browser/persistedEnv.js +15 -0
  64. package/dist/browser/profileLock.d.ts +40 -0
  65. package/dist/browser/profileLock.js +10 -0
  66. package/dist/browser/profileStore.d.ts +23 -0
  67. package/dist/browser/profileStore.js +39 -0
  68. package/dist/browser/runLiveness.d.ts +13 -0
  69. package/dist/browser/runLiveness.js +39 -0
  70. package/dist/browser/sitePolicy.d.ts +10 -0
  71. package/dist/browser/sitePolicy.js +61 -0
  72. package/dist/browser/stageBrowserEnv.d.ts +22 -0
  73. package/dist/browser/stageBrowserEnv.js +147 -0
  74. package/dist/browser/stageProfileLock.d.ts +17 -0
  75. package/dist/browser/stageProfileLock.js +39 -0
  76. package/dist/cli/artifactCommand.js +9 -16
  77. package/dist/cli/backupCommand.d.ts +9 -0
  78. package/dist/cli/backupCommand.js +111 -0
  79. package/dist/cli/browserCommand.d.ts +44 -0
  80. package/dist/cli/browserCommand.js +472 -0
  81. package/dist/cli/debugRunCommand.d.ts +10 -0
  82. package/dist/cli/debugRunCommand.js +109 -0
  83. package/dist/cli/doctorCommand.d.ts +32 -0
  84. package/dist/cli/doctorCommand.js +453 -0
  85. package/dist/cli/envelopeCommand.js +9 -2
  86. package/dist/cli/exportAllCommand.d.ts +55 -0
  87. package/dist/cli/exportAllCommand.js +218 -0
  88. package/dist/cli/exportRunCommand.js +23 -21
  89. package/dist/cli/hostClient.d.ts +41 -3
  90. package/dist/cli/hostClient.js +129 -14
  91. package/dist/cli/initCommand.d.ts +1 -0
  92. package/dist/cli/initCommand.js +23 -7
  93. package/dist/cli/initTemplates.d.ts +5 -2
  94. package/dist/cli/initTemplates.js +32 -2
  95. package/dist/cli/resolveSafeOutPath.d.ts +2 -0
  96. package/dist/cli/resolveSafeOutPath.js +40 -0
  97. package/dist/cli/restoreCommand.d.ts +10 -0
  98. package/dist/cli/restoreCommand.js +90 -0
  99. package/dist/cli/runCommand.d.ts +3 -2
  100. package/dist/cli/runCommand.js +93 -11
  101. package/dist/cli/runOutput.d.ts +4 -0
  102. package/dist/cli/runOutput.js +33 -7
  103. package/dist/cli/runStageCommand.d.ts +1 -0
  104. package/dist/cli/runStageCommand.js +44 -25
  105. package/dist/cli/runsCommand.d.ts +1 -1
  106. package/dist/cli/runsCommand.js +168 -10
  107. package/dist/cli/triggerCommand.d.ts +12 -0
  108. package/dist/cli/triggerCommand.js +183 -0
  109. package/dist/cli/validateCommand.d.ts +1 -1
  110. package/dist/cli/validateCommand.js +23 -6
  111. package/dist/cli.js +202 -32
  112. package/dist/config/browseCatalog.d.ts +1 -0
  113. package/dist/config/browseCatalog.js +5 -4
  114. package/dist/config/builtinSkills.d.ts +4 -0
  115. package/dist/config/builtinSkills.js +23 -0
  116. package/dist/config/catalogRelativePath.d.ts +63 -0
  117. package/dist/config/catalogRelativePath.js +126 -0
  118. package/dist/config/configOrigin.d.ts +27 -0
  119. package/dist/config/configOrigin.js +59 -0
  120. package/dist/config/createTrigger.d.ts +27 -0
  121. package/dist/config/createTrigger.js +232 -0
  122. package/dist/config/draftPackage.d.ts +117 -0
  123. package/dist/config/draftPackage.js +550 -0
  124. package/dist/config/ensureCatalogScanRoot.d.ts +16 -0
  125. package/dist/config/ensureCatalogScanRoot.js +73 -0
  126. package/dist/config/hostConfig.d.ts +57 -0
  127. package/dist/config/hostConfig.js +360 -0
  128. package/dist/config/listSkills.d.ts +26 -0
  129. package/dist/config/listSkills.js +206 -5
  130. package/dist/config/loadOutcome.d.ts +7 -1
  131. package/dist/config/loadPipeline.js +39 -2
  132. package/dist/config/loadStage.js +25 -0
  133. package/dist/config/loadStageflowManifest.js +25 -0
  134. package/dist/config/loadTask.d.ts +2 -0
  135. package/dist/config/loadTask.js +57 -18
  136. package/dist/config/loadTrigger.d.ts +9 -0
  137. package/dist/config/loadTrigger.js +120 -0
  138. package/dist/config/materializeStageModels.js +5 -1
  139. package/dist/config/mergePipelineIncludes.d.ts +3 -0
  140. package/dist/config/mergePipelineIncludes.js +19 -0
  141. package/dist/config/migrateYaml.js +6 -11
  142. package/dist/config/multiProjectCatalog.d.ts +32 -0
  143. package/dist/config/multiProjectCatalog.js +150 -0
  144. package/dist/config/normalizePipelineStageEntry.js +27 -1
  145. package/dist/config/parseCompletionContract.js +6 -0
  146. package/dist/config/pipelineStageKeys.js +3 -0
  147. package/dist/config/publishDraftPackage.d.ts +7 -0
  148. package/dist/config/publishDraftPackage.js +25 -0
  149. package/dist/config/resolveCatalogContext.js +1 -1
  150. package/dist/config/resolveCatalogRoots.d.ts +27 -0
  151. package/dist/config/resolveCatalogRoots.js +76 -0
  152. package/dist/config/resolveModel.d.ts +7 -1
  153. package/dist/config/resolveModel.js +11 -1
  154. package/dist/config/resolvePipelineDag.js +1 -1
  155. package/dist/config/resolveStageMcpServers.d.ts +9 -1
  156. package/dist/config/resolveStageMcpServers.js +36 -9
  157. package/dist/config/scanCatalogPaths.d.ts +1 -1
  158. package/dist/config/scanCatalogPaths.js +6 -2
  159. package/dist/config/secretFromEnvOrFile.d.ts +9 -0
  160. package/dist/config/secretFromEnvOrFile.js +34 -0
  161. package/dist/config/seededCatalog.d.ts +11 -0
  162. package/dist/config/seededCatalog.js +29 -0
  163. package/dist/config/stageBrowser.d.ts +12 -0
  164. package/dist/config/stageBrowser.js +118 -0
  165. package/dist/config/toolRequires.d.ts +24 -0
  166. package/dist/config/toolRequires.js +115 -0
  167. package/dist/config/triggerCatalog.d.ts +10 -0
  168. package/dist/config/triggerCatalog.js +37 -0
  169. package/dist/config/validateCatalog.d.ts +17 -3
  170. package/dist/config/validateCatalog.js +223 -3
  171. package/dist/config/validateCompletionContract.js +8 -0
  172. package/dist/diagnostics/checks.d.ts +39 -0
  173. package/dist/diagnostics/checks.js +135 -0
  174. package/dist/envelope/preEmitChecks.d.ts +1 -1
  175. package/dist/envelope/preEmitChecks.js +8 -0
  176. package/dist/errors/codes.d.ts +14 -0
  177. package/dist/errors/codes.js +59 -0
  178. package/dist/git/cache.d.ts +14 -0
  179. package/dist/git/cache.js +150 -0
  180. package/dist/git/credentials.d.ts +9 -0
  181. package/dist/git/credentials.js +88 -0
  182. package/dist/git/errors.d.ts +20 -0
  183. package/dist/git/errors.js +94 -0
  184. package/dist/git/exec.d.ts +16 -0
  185. package/dist/git/exec.js +135 -0
  186. package/dist/git/operations.d.ts +29 -0
  187. package/dist/git/operations.js +153 -0
  188. package/dist/git/version.d.ts +1 -0
  189. package/dist/git/version.js +10 -0
  190. package/dist/logging/audit.d.ts +16 -0
  191. package/dist/logging/audit.js +19 -0
  192. package/dist/logging/commonWords.d.ts +2 -0
  193. package/dist/logging/commonWords.js +13 -0
  194. package/dist/logging/logger.d.ts +49 -0
  195. package/dist/logging/logger.js +193 -0
  196. package/dist/logging/namedSecrets.d.ts +6 -0
  197. package/dist/logging/namedSecrets.js +58 -0
  198. package/dist/logging/redact.d.ts +17 -0
  199. package/dist/logging/redact.js +105 -0
  200. package/dist/mcp/catalogTools.js +492 -81
  201. package/dist/mcp/checkoutTools.d.ts +52 -0
  202. package/dist/mcp/checkoutTools.js +332 -0
  203. package/dist/mcp/controlTools.js +182 -6
  204. package/dist/mcp/deps.d.ts +3 -0
  205. package/dist/mcp/getStartedTool.d.ts +3 -0
  206. package/dist/mcp/getStartedTool.js +62 -0
  207. package/dist/mcp/readArtifact.d.ts +11 -0
  208. package/dist/mcp/readArtifact.js +46 -30
  209. package/dist/mcp/server.js +2 -0
  210. package/dist/mcp/tools.js +6 -0
  211. package/dist/mcp/triggerTools.d.ts +3 -0
  212. package/dist/mcp/triggerTools.js +176 -0
  213. package/dist/net/proxy.d.ts +14 -0
  214. package/dist/net/proxy.js +78 -0
  215. package/dist/operatorAgent/docsRetrieval.d.ts +40 -0
  216. package/dist/operatorAgent/docsRetrieval.js +269 -0
  217. package/dist/operatorAgent/draftContext.d.ts +16 -0
  218. package/dist/operatorAgent/draftContext.js +68 -0
  219. package/dist/operatorAgent/fakeHost.d.ts +39 -0
  220. package/dist/operatorAgent/fakeHost.js +92 -0
  221. package/dist/operatorAgent/host.d.ts +40 -0
  222. package/dist/operatorAgent/host.js +179 -0
  223. package/dist/operatorAgent/index.d.ts +9 -0
  224. package/dist/operatorAgent/index.js +8 -0
  225. package/dist/operatorAgent/piModel.d.ts +80 -0
  226. package/dist/operatorAgent/piModel.js +528 -0
  227. package/dist/operatorAgent/profiles/workshopAuthor.d.ts +23 -0
  228. package/dist/operatorAgent/profiles/workshopAuthor.js +338 -0
  229. package/dist/operatorAgent/profiles/workshopAuthorPlaybook.d.ts +6 -0
  230. package/dist/operatorAgent/profiles/workshopAuthorPlaybook.js +103 -0
  231. package/dist/operatorAgent/profiles/workshopAuthorTools.d.ts +57 -0
  232. package/dist/operatorAgent/profiles/workshopAuthorTools.js +623 -0
  233. package/dist/operatorAgent/proposals.d.ts +32 -0
  234. package/dist/operatorAgent/proposals.js +144 -0
  235. package/dist/operatorAgent/types.d.ts +128 -0
  236. package/dist/operatorAgent/types.js +1 -0
  237. package/dist/package-meta.d.ts +2 -1
  238. package/dist/package-meta.js +2 -1
  239. package/dist/preflight/bash.d.ts +8 -0
  240. package/dist/preflight/bash.js +34 -0
  241. package/dist/preflight/claudeRoot.d.ts +11 -0
  242. package/dist/preflight/claudeRoot.js +23 -0
  243. package/dist/preflight/mcpCommands.d.ts +8 -0
  244. package/dist/preflight/mcpCommands.js +36 -0
  245. package/dist/preflight/pipelinePreflight.d.ts +40 -0
  246. package/dist/preflight/pipelinePreflight.js +192 -0
  247. package/dist/preflight/tls.d.ts +6 -0
  248. package/dist/preflight/tls.js +18 -0
  249. package/dist/preflight/toolchain.d.ts +45 -0
  250. package/dist/preflight/toolchain.js +219 -0
  251. package/dist/project/findManifestRoot.d.ts +3 -0
  252. package/dist/project/findManifestRoot.js +35 -0
  253. package/dist/project/findProjectRoot.js +3 -4
  254. package/dist/project/globalHome.d.ts +7 -0
  255. package/dist/project/globalHome.js +63 -2
  256. package/dist/project/resolveProjectContext.js +2 -2
  257. package/dist/project/resolveStageflowContext.d.ts +7 -0
  258. package/dist/project/resolveStageflowContext.js +46 -30
  259. package/dist/projection/projectRun.d.ts +2 -1
  260. package/dist/projection/projectRun.js +1 -0
  261. package/dist/runstore/assertTmpdir.d.ts +1 -0
  262. package/dist/runstore/assertTmpdir.js +25 -0
  263. package/dist/runstore/backup.d.ts +52 -0
  264. package/dist/runstore/backup.js +292 -0
  265. package/dist/runstore/createStore.d.ts +18 -1
  266. package/dist/runstore/createStore.js +64 -5
  267. package/dist/runstore/debugBundle.d.ts +60 -0
  268. package/dist/runstore/debugBundle.js +143 -0
  269. package/dist/runstore/diskUsage.d.ts +50 -0
  270. package/dist/runstore/diskUsage.js +214 -0
  271. package/dist/runstore/exportRunPayload.d.ts +8 -0
  272. package/dist/runstore/exportRunPayload.js +23 -0
  273. package/dist/runstore/normalizeCatalogPath.d.ts +1 -0
  274. package/dist/runstore/normalizeCatalogPath.js +10 -0
  275. package/dist/runstore/paths.d.ts +5 -0
  276. package/dist/runstore/paths.js +145 -1
  277. package/dist/runstore/port.d.ts +139 -13
  278. package/dist/runstore/port.js +8 -1
  279. package/dist/runstore/restore.d.ts +81 -0
  280. package/dist/runstore/restore.js +355 -0
  281. package/dist/runstore/retention.d.ts +27 -0
  282. package/dist/runstore/retention.js +74 -0
  283. package/dist/runstore/runManifest.d.ts +146 -0
  284. package/dist/runstore/runManifest.js +288 -0
  285. package/dist/runstore/runProjection.d.ts +3 -1
  286. package/dist/runstore/runProjection.js +63 -1
  287. package/dist/runstore/sqlite/SqliteRunStore.d.ts +35 -3
  288. package/dist/runstore/sqlite/SqliteRunStore.js +442 -219
  289. package/dist/runstore/sqlite/applyStorePragmas.d.ts +39 -0
  290. package/dist/runstore/sqlite/applyStorePragmas.js +145 -0
  291. package/dist/runstore/sqlite/migrations/001-baseline.d.ts +7 -0
  292. package/dist/runstore/sqlite/migrations/001-baseline.js +10 -0
  293. package/dist/runstore/sqlite/migrations/002-repository-binding.d.ts +7 -0
  294. package/dist/runstore/sqlite/migrations/002-repository-binding.js +29 -0
  295. package/dist/runstore/sqlite/migrations/003-run-lifecycle.d.ts +7 -0
  296. package/dist/runstore/sqlite/migrations/003-run-lifecycle.js +28 -0
  297. package/dist/runstore/sqlite/migrations/004-auto-resume-count.d.ts +7 -0
  298. package/dist/runstore/sqlite/migrations/004-auto-resume-count.js +19 -0
  299. package/dist/runstore/sqlite/migrations/005-config-origins.d.ts +7 -0
  300. package/dist/runstore/sqlite/migrations/005-config-origins.js +19 -0
  301. package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.d.ts +7 -0
  302. package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.js +28 -0
  303. package/dist/runstore/sqlite/migrations/007-projects-registry.d.ts +7 -0
  304. package/dist/runstore/sqlite/migrations/007-projects-registry.js +31 -0
  305. package/dist/runstore/sqlite/migrations/008-triggers-table.d.ts +7 -0
  306. package/dist/runstore/sqlite/migrations/008-triggers-table.js +19 -0
  307. package/dist/runstore/sqlite/migrations/009-trigger-next-run.d.ts +7 -0
  308. package/dist/runstore/sqlite/migrations/009-trigger-next-run.js +19 -0
  309. package/dist/runstore/sqlite/migrations/010-trigger-adapter-state.d.ts +7 -0
  310. package/dist/runstore/sqlite/migrations/010-trigger-adapter-state.js +17 -0
  311. package/dist/runstore/sqlite/migrations/index.d.ts +21 -0
  312. package/dist/runstore/sqlite/migrations/index.js +78 -0
  313. package/dist/runstore/sqlite/schema.d.ts +20 -1
  314. package/dist/runstore/sqlite/schema.js +277 -1
  315. package/dist/runstore/sqlite/storeOpenError.d.ts +6 -0
  316. package/dist/runstore/sqlite/storeOpenError.js +11 -0
  317. package/dist/runstore/sqlite/storeSchemaError.d.ts +5 -0
  318. package/dist/runstore/sqlite/storeSchemaError.js +8 -0
  319. package/dist/runstore/stageExecution.js +3 -0
  320. package/dist/runstore/storeFilesystem.d.ts +32 -0
  321. package/dist/runstore/storeFilesystem.js +148 -0
  322. package/dist/runstore/trackProjection.js +2 -0
  323. package/dist/runstore/workspaceLayout.d.ts +13 -0
  324. package/dist/runstore/workspaceLayout.js +76 -0
  325. package/dist/runtime/answerResume.d.ts +1 -0
  326. package/dist/runtime/answerResume.js +3 -1
  327. package/dist/runtime/completionCheckRunner.d.ts +15 -1
  328. package/dist/runtime/completionCheckRunner.js +67 -7
  329. package/dist/runtime/containerLimits.d.ts +16 -0
  330. package/dist/runtime/containerLimits.js +84 -0
  331. package/dist/runtime/credentialBinding.d.ts +2 -0
  332. package/dist/runtime/credentialBinding.js +3 -0
  333. package/dist/runtime/credentialMaterialisation.d.ts +28 -0
  334. package/dist/runtime/credentialMaterialisation.js +128 -0
  335. package/dist/runtime/emailSource.d.ts +72 -0
  336. package/dist/runtime/emailSource.js +304 -0
  337. package/dist/runtime/gitCheckoutCapability.js +7 -13
  338. package/dist/runtime/githubPollSource.d.ts +86 -0
  339. package/dist/runtime/githubPollSource.js +284 -0
  340. package/dist/runtime/pipelineRunner.d.ts +40 -1
  341. package/dist/runtime/pipelineRunner.js +181 -17
  342. package/dist/runtime/pipelineScheduler.d.ts +17 -0
  343. package/dist/runtime/pipelineScheduler.js +220 -28
  344. package/dist/runtime/reloadRunCatalog.js +6 -1
  345. package/dist/runtime/repositoryMaterialize.d.ts +47 -0
  346. package/dist/runtime/repositoryMaterialize.js +235 -0
  347. package/dist/runtime/resumeTimedOut.d.ts +1 -1
  348. package/dist/runtime/resumeTimedOut.js +5 -2
  349. package/dist/runtime/runChangeBus.js +9 -0
  350. package/dist/runtime/runDeletion.d.ts +7 -0
  351. package/dist/runtime/runDeletion.js +37 -0
  352. package/dist/runtime/runManager.d.ts +169 -4
  353. package/dist/runtime/runManager.js +1748 -83
  354. package/dist/runtime/runRetentionSweep.d.ts +31 -0
  355. package/dist/runtime/runRetentionSweep.js +328 -0
  356. package/dist/runtime/runRetryCoordinator.d.ts +4 -0
  357. package/dist/runtime/runRetryCoordinator.js +20 -2
  358. package/dist/runtime/runSkills.d.ts +40 -0
  359. package/dist/runtime/runSkills.js +173 -0
  360. package/dist/runtime/scheduleSource.d.ts +38 -0
  361. package/dist/runtime/scheduleSource.js +119 -0
  362. package/dist/runtime/settingsFile.d.ts +5 -0
  363. package/dist/runtime/settingsFile.js +61 -54
  364. package/dist/runtime/stageAttemptBootstrap.d.ts +5 -1
  365. package/dist/runtime/stageAttemptBootstrap.js +250 -27
  366. package/dist/runtime/stageCacheEnv.d.ts +6 -0
  367. package/dist/runtime/stageCacheEnv.js +34 -0
  368. package/dist/runtime/stageConcurrency.d.ts +2 -1
  369. package/dist/runtime/stageConcurrency.js +4 -2
  370. package/dist/runtime/stageEnvironment.d.ts +38 -0
  371. package/dist/runtime/stageEnvironment.js +194 -0
  372. package/dist/runtime/stageHitl.d.ts +1 -0
  373. package/dist/runtime/stageHitl.js +5 -1
  374. package/dist/runtime/stageProcessLauncher.d.ts +20 -0
  375. package/dist/runtime/stageProcessLauncher.js +236 -41
  376. package/dist/runtime/stageRecovery.d.ts +3 -1
  377. package/dist/runtime/stageRecovery.js +19 -4
  378. package/dist/runtime/stageRoots.d.ts +38 -1
  379. package/dist/runtime/stageRoots.js +118 -0
  380. package/dist/runtime/stageRunner.d.ts +6 -0
  381. package/dist/runtime/stageRunner.js +32 -6
  382. package/dist/runtime/stageSecretDecl.d.ts +9 -0
  383. package/dist/runtime/stageSecretDecl.js +102 -0
  384. package/dist/runtime/stageSecrets.d.ts +40 -0
  385. package/dist/runtime/stageSecrets.js +181 -0
  386. package/dist/runtime/stageStreamLog.d.ts +1 -0
  387. package/dist/runtime/stageStreamLog.js +2 -1
  388. package/dist/runtime/stageWorker.d.ts +3 -2
  389. package/dist/runtime/stageWorker.js +58 -10
  390. package/dist/runtime/stageWorkerProtocol.d.ts +5 -0
  391. package/dist/runtime/stageWorkerProtocol.js +8 -0
  392. package/dist/runtime/startPayload.d.ts +32 -0
  393. package/dist/runtime/startPayload.js +59 -0
  394. package/dist/runtime/taskInput.js +14 -5
  395. package/dist/runtime/triggerCatalog.d.ts +6 -0
  396. package/dist/runtime/triggerCatalog.js +24 -0
  397. package/dist/runtime/triggerEventMatch.d.ts +2 -0
  398. package/dist/runtime/triggerEventMatch.js +6 -0
  399. package/dist/runtime/triggerPort.d.ts +14 -0
  400. package/dist/runtime/triggerPort.js +1 -0
  401. package/dist/runtime/triggerRunner.d.ts +17 -0
  402. package/dist/runtime/triggerRunner.js +89 -0
  403. package/dist/runtime/verifiedStageExecution.d.ts +8 -0
  404. package/dist/runtime/verifiedStageExecution.js +16 -1
  405. package/dist/runtime/webhookSignature.d.ts +1 -0
  406. package/dist/runtime/webhookSignature.js +12 -0
  407. package/dist/runtime/workspaceBinding.d.ts +20 -0
  408. package/dist/runtime/workspaceBinding.js +60 -0
  409. package/dist/server/allowedHosts.d.ts +19 -0
  410. package/dist/server/allowedHosts.js +179 -0
  411. package/dist/server/bootstrap.d.ts +42 -2
  412. package/dist/server/bootstrap.js +273 -5
  413. package/dist/server/controlToken.d.ts +47 -0
  414. package/dist/server/controlToken.js +254 -0
  415. package/dist/server/createHttpHost.d.ts +11 -2
  416. package/dist/server/createHttpHost.js +106 -10
  417. package/dist/server/ensureGlobalService.d.ts +5 -1
  418. package/dist/server/ensureGlobalService.js +35 -1
  419. package/dist/server/healthSurfaces.d.ts +6 -0
  420. package/dist/server/healthSurfaces.js +123 -0
  421. package/dist/server/http.d.ts +27 -1
  422. package/dist/server/http.js +2254 -477
  423. package/dist/server/listenHost.d.ts +5 -0
  424. package/dist/server/listenHost.js +56 -0
  425. package/dist/server/mcpHost.d.ts +10 -1
  426. package/dist/server/mcpHost.js +36 -6
  427. package/dist/server/operatorResults.d.ts +2 -2
  428. package/dist/server/operatorResults.js +40 -29
  429. package/dist/server/requestAuthContext.d.ts +12 -0
  430. package/dist/server/requestAuthContext.js +21 -0
  431. package/dist/server/shutdown.d.ts +69 -0
  432. package/dist/server/shutdown.js +219 -0
  433. package/dist/server/triggerRoutes.d.ts +15 -0
  434. package/dist/server/triggerRoutes.js +268 -0
  435. package/dist/tools/askOperator.d.ts +3 -2
  436. package/dist/types/completion.d.ts +3 -0
  437. package/dist/types/pipeline.d.ts +10 -1
  438. package/dist/types/preEmitCheck.d.ts +7 -0
  439. package/dist/types/stage.d.ts +22 -0
  440. package/dist/types/stageflowManifest.d.ts +3 -0
  441. package/dist/types/task.d.ts +8 -0
  442. package/dist/types/trigger.d.ts +18 -0
  443. package/dist/types/trigger.js +1 -0
  444. package/dist/ui/assets/{index-CSsDued1.css → index-Bv4p1aPK.css} +1 -1
  445. package/dist/ui/assets/index-CntB4bZR.js +133 -0
  446. package/dist/ui/index.html +2 -2
  447. package/dist/workshop/autosave.d.ts +58 -0
  448. package/dist/workshop/autosave.js +222 -0
  449. package/dist/workshop/buildStore.d.ts +79 -0
  450. package/dist/workshop/buildStore.js +326 -0
  451. package/dist/workshop/chatTurn.d.ts +232 -0
  452. package/dist/workshop/chatTurn.js +475 -0
  453. package/dist/workshop/modelSettings.d.ts +18 -0
  454. package/dist/workshop/modelSettings.js +44 -0
  455. package/dist/workshop/sessionStore.d.ts +61 -0
  456. package/dist/workshop/sessionStore.js +254 -0
  457. package/dist/workshop/workshopPin.d.ts +72 -0
  458. package/dist/workshop/workshopPin.js +193 -0
  459. package/examples/README.md +99 -0
  460. package/examples/archify-on-pr/README.md +213 -0
  461. package/examples/archify-on-pr/archify-on-pr.pipeline.yaml +19 -0
  462. package/examples/archify-on-pr/archify-on-pr.task.yaml +19 -0
  463. package/examples/archify-on-pr/author-diagrams.yaml +106 -0
  464. package/examples/archify-on-pr/detect-changes.yaml +89 -0
  465. package/examples/browser-session/README.md +77 -0
  466. package/examples/browser-session/browser-session.pipeline.yaml +50 -0
  467. package/examples/browser-session/browser-session.task.yaml +6 -0
  468. package/examples/browser-session/check-login.yaml +22 -0
  469. package/examples/browser-session/fixture-server.mjs +64 -0
  470. package/examples/browser-session/human-login.yaml +31 -0
  471. package/examples/browser-session/merge.yaml +36 -0
  472. package/examples/browser-session/work-a.yaml +41 -0
  473. package/examples/browser-session/work-b.yaml +41 -0
  474. package/examples/ci-validate/README.md +35 -0
  475. package/examples/ci-validate/check.yaml +13 -0
  476. package/examples/ci-validate/ci-demo.pipeline.yaml +4 -0
  477. package/examples/ci-validate/validate.sh +5 -0
  478. package/examples/compliance-review-demo/README.md +125 -0
  479. package/examples/compliance-review-demo/compliance-review-demo.pipeline.yaml +29 -0
  480. package/examples/compliance-review-demo/connect-account.yaml +47 -0
  481. package/examples/compliance-review-demo/map-to-control.yaml +123 -0
  482. package/examples/compliance-review-demo/poll-bucket-config.yaml +103 -0
  483. package/examples/compliance-review-demo/publish-report.yaml +79 -0
  484. package/examples/compliance-review-demo/review-verdict.yaml +122 -0
  485. package/examples/compliance-review-demo/run-compliance-check.yaml +96 -0
  486. package/examples/compliance-review-demo/store-evidence.yaml +143 -0
  487. package/examples/conditional-fork/README.md +89 -0
  488. package/examples/conditional-fork/branch-a.yaml +13 -0
  489. package/examples/conditional-fork/branch-b.yaml +13 -0
  490. package/examples/conditional-fork/decide.yaml +35 -0
  491. package/examples/conditional-fork/fork-demo.pipeline.yaml +20 -0
  492. package/examples/conditional-fork/fork-demo.task.yaml +8 -0
  493. package/examples/context7-mcp/README.md +42 -0
  494. package/examples/context7-mcp/context7-mcp.pipeline.yaml +15 -0
  495. package/examples/context7-mcp/context7-mcp.task.yaml +4 -0
  496. package/examples/context7-mcp/fetch-docs.yaml +52 -0
  497. package/examples/context7-mcp/resolve-library.yaml +31 -0
  498. package/examples/context7-mcp/write-brief.yaml +52 -0
  499. package/examples/feature-loop/README.md +104 -0
  500. package/examples/feature-loop/address-feedback.yaml +148 -0
  501. package/examples/feature-loop/align.yaml +116 -0
  502. package/examples/feature-loop/decompose.yaml +86 -0
  503. package/examples/feature-loop/default-model-hierarchy.task.yaml +58 -0
  504. package/examples/feature-loop/feature-loop.pipeline.yaml +140 -0
  505. package/examples/feature-loop/feature-loop.task.yaml +25 -0
  506. package/examples/feature-loop/implement.yaml +128 -0
  507. package/examples/feature-loop/plan.yaml +111 -0
  508. package/examples/feature-loop/publish.yaml +167 -0
  509. package/examples/feature-loop/review.yaml +146 -0
  510. package/examples/feature-loop/verify.yaml +106 -0
  511. package/examples/feedback-loop/README.md +72 -0
  512. package/examples/feedback-loop/VERIFY.md +208 -0
  513. package/examples/feedback-loop/continue-only.task.yaml +4 -0
  514. package/examples/feedback-loop/exhaust-require-continue.task.yaml +6 -0
  515. package/examples/feedback-loop/exhaust-wait-human.task.yaml +11 -0
  516. package/examples/feedback-loop/feedback-loop-wait-human.pipeline.yaml +23 -0
  517. package/examples/feedback-loop/feedback-loop.pipeline.yaml +23 -0
  518. package/examples/feedback-loop/feedback-loop.task.yaml +4 -0
  519. package/examples/feedback-loop/implement.yaml +14 -0
  520. package/examples/feedback-loop/plan.yaml +14 -0
  521. package/examples/feedback-loop/review.yaml +15 -0
  522. package/examples/feedback-loop/send-back-once.task.yaml +6 -0
  523. package/examples/feedback-loop/submit.yaml +12 -0
  524. package/examples/generic-fan-in/README.md +151 -0
  525. package/examples/generic-fan-in/clarify.yaml +18 -0
  526. package/examples/generic-fan-in/generic-fan-in-accepted.pipeline.yaml +19 -0
  527. package/examples/generic-fan-in/generic-fan-in-accepted.task.yaml +8 -0
  528. package/examples/generic-fan-in/generic-fan-in.pipeline.yaml +18 -0
  529. package/examples/generic-fan-in/generic-fan-in.task.yaml +9 -0
  530. package/examples/generic-fan-in/research.yaml +45 -0
  531. package/examples/generic-fan-in/synthesize.yaml +66 -0
  532. package/examples/generic-fan-in/validation.yaml +45 -0
  533. package/examples/github-release/README.md +78 -0
  534. package/examples/github-release/draft-release-notes.yaml +64 -0
  535. package/examples/github-release/github-release.pipeline.yaml +11 -0
  536. package/examples/github-release/github-release.task.yaml +13 -0
  537. package/examples/github-release/publish-github-release.yaml +64 -0
  538. package/examples/hello-world/README.md +28 -0
  539. package/examples/hello-world/hello.pipeline.yaml +4 -0
  540. package/examples/hello-world/my-task.task.yaml +6 -0
  541. package/examples/hello-world/research.yaml +18 -0
  542. package/examples/mcp-hitl-tour/README.md +113 -0
  543. package/examples/mcp-hitl-tour/draft-angle.yaml +33 -0
  544. package/examples/mcp-hitl-tour/draft-short.yaml +32 -0
  545. package/examples/mcp-hitl-tour/emit-angles.yaml +45 -0
  546. package/examples/mcp-hitl-tour/gather.yaml +31 -0
  547. package/examples/mcp-hitl-tour/intake.yaml +62 -0
  548. package/examples/mcp-hitl-tour/mcp-hitl-tour-exhaust.task.yaml +13 -0
  549. package/examples/mcp-hitl-tour/mcp-hitl-tour.pipeline.yaml +54 -0
  550. package/examples/mcp-hitl-tour/mcp-hitl-tour.task.yaml +16 -0
  551. package/examples/mcp-hitl-tour/polish.yaml +33 -0
  552. package/examples/mcp-hitl-tour/review.yaml +17 -0
  553. package/examples/mcp-hitl-tour/ship.yaml +25 -0
  554. package/examples/oss-issue-contribution/README.md +218 -0
  555. package/examples/oss-issue-contribution/oss-address-review-feedback.yaml +117 -0
  556. package/examples/oss-issue-contribution/oss-approve-contribution.yaml +181 -0
  557. package/examples/oss-issue-contribution/oss-approve-plan.yaml +111 -0
  558. package/examples/oss-issue-contribution/oss-explain-fix.yaml +108 -0
  559. package/examples/oss-issue-contribution/oss-explain-issue.yaml +114 -0
  560. package/examples/oss-issue-contribution/oss-implement-source-fix.yaml +171 -0
  561. package/examples/oss-issue-contribution/oss-investigate-area.yaml +116 -0
  562. package/examples/oss-issue-contribution/oss-issue-contribution.pipeline.yaml +125 -0
  563. package/examples/oss-issue-contribution/oss-issue-intake.yaml +106 -0
  564. package/examples/oss-issue-contribution/oss-plan-investigation.yaml +112 -0
  565. package/examples/oss-issue-contribution/oss-plan-review.yaml +109 -0
  566. package/examples/oss-issue-contribution/oss-reproduce-issue.yaml +140 -0
  567. package/examples/oss-issue-contribution/oss-review-change.yaml +107 -0
  568. package/examples/oss-issue-contribution/oss-verify-fix.yaml +130 -0
  569. package/examples/oss-issue-contribution/oss-write-regression-test.yaml +135 -0
  570. package/examples/oss-issue-contribution/pi-7629.task.yaml +79 -0
  571. package/examples/oss-issue-contribution/pi-8919.task.yaml +75 -0
  572. package/examples/oss-issue-contribution/pydantic-ai-7971.task.yaml +53 -0
  573. package/examples/oss-quick-fix/README.md +65 -0
  574. package/examples/oss-quick-fix/implement-fix.yaml +84 -0
  575. package/examples/oss-quick-fix/oss-quick-fix.pipeline.yaml +35 -0
  576. package/examples/oss-quick-fix/oss-quick-fix.task.yaml +19 -0
  577. package/examples/oss-quick-fix/ship-fix.yaml +81 -0
  578. package/examples/oss-quick-fix/understand-issue.yaml +67 -0
  579. package/examples/oss-quick-fix/verify-fix.yaml +73 -0
  580. package/examples/plan-review/README.md +37 -0
  581. package/examples/plan-review/plan-review-followup.yaml +13 -0
  582. package/examples/plan-review/plan-review.pipeline.yaml +9 -0
  583. package/examples/plan-review/plan-review.task.yaml +9 -0
  584. package/examples/plan-review/plan-review.yaml +25 -0
  585. package/examples/playwright-mcp/README.md +39 -0
  586. package/examples/playwright-mcp/playwright-mcp.pipeline.yaml +5 -0
  587. package/examples/playwright-mcp/playwright-mcp.task.yaml +4 -0
  588. package/examples/playwright-mcp/screenshot.yaml +40 -0
  589. package/examples/retry-tour/README.md +75 -0
  590. package/examples/retry-tour/retry-tour.pipeline.yaml +122 -0
  591. package/examples/retry-tour/retry-tour.task.yaml +9 -0
  592. package/examples/route-if-tour/README.md +202 -0
  593. package/examples/route-if-tour/route-if-tour.pipeline.yaml +950 -0
  594. package/examples/route-if-tour/route-if-tour.task.yaml +4 -0
  595. package/examples/route-wiring-smoke-test/01-core-routing.pipeline.yaml +168 -0
  596. package/examples/route-wiring-smoke-test/02-on-gating.pipeline.yaml +44 -0
  597. package/examples/route-wiring-smoke-test/03-two-entry-points.pipeline.yaml +28 -0
  598. package/examples/route-wiring-smoke-test/04-entry-false-equivalent-to-omitted.pipeline.yaml +27 -0
  599. package/examples/route-wiring-smoke-test/05-fork-choice.pipeline.yaml +110 -0
  600. package/examples/route-wiring-smoke-test/06-fan-out-fan-in.pipeline.yaml +82 -0
  601. package/examples/route-wiring-smoke-test/07-loop-human-decision.pipeline.yaml +82 -0
  602. package/examples/route-wiring-smoke-test/08-skip-fallback-and-multi-on-gate.pipeline.yaml +77 -0
  603. package/examples/route-wiring-smoke-test/09-multi-loop-targets.pipeline.yaml +102 -0
  604. package/examples/route-wiring-smoke-test/10-uses-dialect-fork.pipeline.yaml +23 -0
  605. package/examples/route-wiring-smoke-test/11-sequential-io-handoff.pipeline.yaml +37 -0
  606. package/examples/route-wiring-smoke-test/12-complex-io-schemas.pipeline.yaml +138 -0
  607. package/examples/route-wiring-smoke-test/13-ref-io-handoff.pipeline.yaml +84 -0
  608. package/examples/route-wiring-smoke-test/14-if-eq-gating.pipeline.yaml +50 -0
  609. package/examples/route-wiring-smoke-test/15-if-all-gated.pipeline.yaml +37 -0
  610. package/examples/route-wiring-smoke-test/16-if-composition.pipeline.yaml +65 -0
  611. package/examples/route-wiring-smoke-test/17-if-join.pipeline.yaml +80 -0
  612. package/examples/route-wiring-smoke-test/README.md +377 -0
  613. package/examples/route-wiring-smoke-test/rejected/01-reject-legacy-needs.pipeline.yaml +26 -0
  614. package/examples/route-wiring-smoke-test/rejected/02-reject-legacy-fork.pipeline.yaml +25 -0
  615. package/examples/route-wiring-smoke-test/rejected/03-reject-legacy-feedback-loop.pipeline.yaml +30 -0
  616. package/examples/route-wiring-smoke-test/rejected/04-reject-missing-entry.pipeline.yaml +24 -0
  617. package/examples/route-wiring-smoke-test/rejected/05-reject-unreachable.pipeline.yaml +35 -0
  618. package/examples/route-wiring-smoke-test/rejected/06-reject-allow-none-without-route-select.pipeline.yaml +37 -0
  619. package/examples/route-wiring-smoke-test/rejected/07-reject-cycle.pipeline.yaml +27 -0
  620. package/examples/route-wiring-smoke-test/rejected/08-reject-loop-non-ancestor.pipeline.yaml +42 -0
  621. package/examples/route-wiring-smoke-test/rejected/09-reject-route-select-leaf.pipeline.yaml +26 -0
  622. package/examples/route-wiring-smoke-test/rejected/12-reject-loop-replay-unsafe.pipeline.yaml +55 -0
  623. package/examples/route-wiring-smoke-test/rejected/13-reject-multiple-loop-entries.pipeline.yaml +51 -0
  624. package/examples/route-wiring-smoke-test/rejected/14-reject-duplicate-stage-id.pipeline.yaml +35 -0
  625. package/examples/route-wiring-smoke-test/rejected/15-reject-unknown-route-target.pipeline.yaml +15 -0
  626. package/examples/route-wiring-smoke-test/rejected/16-reject-malformed-route-item.pipeline.yaml +15 -0
  627. package/examples/route-wiring-smoke-test/rejected/17-reject-io-incompatible.pipeline.yaml +33 -0
  628. package/examples/route-wiring-smoke-test/rejected/18-reject-nested-io.pipeline.yaml +51 -0
  629. package/examples/route-wiring-smoke-test/rejected/19-reject-array-item-io.pipeline.yaml +55 -0
  630. package/examples/route-wiring-smoke-test/rejected/20-reject-closed-io.pipeline.yaml +36 -0
  631. package/examples/route-wiring-smoke-test/rejected/21-reject-ref-io.pipeline.yaml +42 -0
  632. package/examples/route-wiring-smoke-test/rejected/22-reject-if-unknown-field.pipeline.yaml +33 -0
  633. package/examples/route-wiring-smoke-test/rejected/23-reject-if-optional-field.pipeline.yaml +32 -0
  634. package/examples/route-wiring-smoke-test/rejected/24-reject-if-empty-all.pipeline.yaml +31 -0
  635. package/examples/route-wiring-smoke-test/rejected/25-reject-if-gt-on-string.pipeline.yaml +33 -0
  636. package/examples/route-wiring-smoke-test/rejected/26-reject-if-optional-nested.pipeline.yaml +36 -0
  637. package/examples/route-wiring-smoke-test/rejected/27-reject-if-on-loop.pipeline.yaml +63 -0
  638. package/examples/route-wiring-smoke-test/rejected/29-reject-if-on-failed.pipeline.yaml +46 -0
  639. package/examples/route-wiring-smoke-test/smoke-test.task.yaml +4 -0
  640. package/examples/route-wiring-smoke-test/stages/branch-a.yaml +12 -0
  641. package/examples/route-wiring-smoke-test/stages/branch-b.yaml +12 -0
  642. package/examples/route-wiring-smoke-test/stages/decide.yaml +12 -0
  643. package/examples/route-wiring-smoke-test/stages/finish.yaml +12 -0
  644. package/examples/ship-feature/README.md +190 -0
  645. package/examples/ship-feature/feat-address-feedback.yaml +119 -0
  646. package/examples/ship-feature/feat-implement.yaml +180 -0
  647. package/examples/ship-feature/feat-plan.yaml +120 -0
  648. package/examples/ship-feature/feat-review.yaml +109 -0
  649. package/examples/ship-feature/feat-ship.yaml +203 -0
  650. package/examples/ship-feature/ship-feature.pipeline.yaml +44 -0
  651. package/examples/ship-feature/ship-feature.task.yaml +78 -0
  652. package/examples/stage-mcp/README.md +145 -0
  653. package/examples/stage-mcp/echo-mcp.mjs +20 -0
  654. package/examples/stage-mcp/stage-mcp-dead.pipeline.yaml +5 -0
  655. package/examples/stage-mcp/stage-mcp-dead.task.yaml +3 -0
  656. package/examples/stage-mcp/stage-mcp-missing-var.pipeline.yaml +5 -0
  657. package/examples/stage-mcp/stage-mcp-missing-var.task.yaml +3 -0
  658. package/examples/stage-mcp/stage-mcp.pipeline.yaml +5 -0
  659. package/examples/stage-mcp/stage-mcp.task.yaml +4 -0
  660. package/examples/stage-mcp/use-echo.yaml +20 -0
  661. package/examples/stageflow.yaml +51 -0
  662. package/examples/verify-tour/README.md +80 -0
  663. package/examples/verify-tour/verify-tour.pipeline.yaml +162 -0
  664. package/examples/verify-tour/verify-tour.task.yaml +11 -0
  665. package/package.json +9 -1
  666. package/skills/stageflow/SKILL.md +6 -6
  667. package/skills/stageflow/references/control-surface.md +13 -5
  668. package/skills/stageflow/scripts/detect-host.mjs +14 -1
  669. package/skills/stageflow/scripts/detect-host.test.mjs +29 -1
  670. package/skills/stageflow-author/SKILL.md +4 -3
  671. package/skills/stageflow-author/references/catalog-mapping.md +16 -0
  672. package/skills/stageflow-author/references/catalog-write-conventions.md +1 -1
  673. package/skills/stageflow-author/references/stage-prompt-template.md +4 -4
  674. package/skills/stageflow-run/SKILL.md +22 -12
  675. package/skills/stageflow-run/references/mcp-call.md +9 -1
  676. package/skills/stageflow-run/references/task-and-pipeline-selection.md +19 -6
  677. package/skills/stageflow-run/scripts/mcp-call.mjs +46 -6
  678. package/skills/stageflow-run/scripts/mcp-call.test.mjs +64 -0
  679. package/skills/stageflow-session-capture/references/catalog-authoring.md +2 -0
  680. package/skills/stageflow-setup/SKILL.md +51 -8
  681. package/dist/ui/assets/index-Da5EHU6M.js +0 -119
@@ -0,0 +1,950 @@
1
+ id: route-if-tour
2
+ model: cursor/auto
3
+ schemas:
4
+ empty:
5
+ type: object
6
+ go-flag:
7
+ type: object
8
+ required: [go]
9
+ properties:
10
+ go:
11
+ type: boolean
12
+ flag:
13
+ type: object
14
+ required: [ok]
15
+ properties:
16
+ ok:
17
+ type: boolean
18
+ customer:
19
+ type: object
20
+ required: [tier]
21
+ properties:
22
+ tier:
23
+ type: string
24
+ stages:
25
+ - id: kickoff
26
+ entry: true
27
+ route:
28
+ - to: classify
29
+ system_prompt: |
30
+ Start the route-if tour in one sentence.
31
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
32
+ io:
33
+ input:
34
+ schema:
35
+ $ref: "#/schemas/empty"
36
+ output:
37
+ schema:
38
+ $ref: "#/schemas/empty"
39
+
40
+ - id: classify
41
+ route:
42
+ - to: ran-eq-string
43
+ if:
44
+ field: kind
45
+ op: eq
46
+ value: ok
47
+ - to: ran-eq-int
48
+ if:
49
+ field: count
50
+ op: eq
51
+ value: 3
52
+ - to: ran-eq-num
53
+ if:
54
+ field: ratio
55
+ op: eq
56
+ value: 1.5
57
+ - to: ran-eq-bool
58
+ if:
59
+ field: flag
60
+ op: eq
61
+ value: true
62
+ - to: ran-ne
63
+ if:
64
+ field: kind
65
+ op: ne
66
+ value: fail
67
+ - to: ran-in
68
+ if:
69
+ field: tag
70
+ op: in
71
+ value: [gold, silver]
72
+ - to: ran-not-in
73
+ if:
74
+ field: tag
75
+ op: not_in
76
+ value: [bronze]
77
+ - to: ran-gt-num
78
+ if:
79
+ field: ratio
80
+ op: gt
81
+ value: 1.0
82
+ - to: score
83
+ system_prompt: |
84
+ Classify the record in one sentence.
85
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"kind":"ok","count":3,"ratio":1.5,"flag":true,"tag":"gold"}.
86
+ io:
87
+ input:
88
+ schema:
89
+ $ref: "#/schemas/empty"
90
+ output:
91
+ schema:
92
+ type: object
93
+ required: [kind, count, ratio, flag, tag]
94
+ properties:
95
+ kind:
96
+ type: string
97
+ count:
98
+ type: integer
99
+ ratio:
100
+ type: number
101
+ flag:
102
+ type: boolean
103
+ tag:
104
+ type: string
105
+
106
+ - id: ran-eq-string
107
+ system_prompt: |
108
+ Note that the string eq gate fired, in one sentence.
109
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
110
+ io:
111
+ input:
112
+ schema:
113
+ $ref: "#/schemas/empty"
114
+ output:
115
+ schema:
116
+ $ref: "#/schemas/empty"
117
+
118
+ - id: ran-eq-int
119
+ system_prompt: |
120
+ Note that the integer eq gate fired, in one sentence.
121
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
122
+ io:
123
+ input:
124
+ schema:
125
+ $ref: "#/schemas/empty"
126
+ output:
127
+ schema:
128
+ $ref: "#/schemas/empty"
129
+
130
+ - id: ran-eq-num
131
+ system_prompt: |
132
+ Note that the number eq gate fired, in one sentence.
133
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
134
+ io:
135
+ input:
136
+ schema:
137
+ $ref: "#/schemas/empty"
138
+ output:
139
+ schema:
140
+ $ref: "#/schemas/empty"
141
+
142
+ - id: ran-eq-bool
143
+ system_prompt: |
144
+ Note that the boolean eq gate fired, in one sentence.
145
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
146
+ io:
147
+ input:
148
+ schema:
149
+ $ref: "#/schemas/empty"
150
+ output:
151
+ schema:
152
+ $ref: "#/schemas/empty"
153
+
154
+ - id: ran-ne
155
+ system_prompt: |
156
+ Note that the ne gate fired, in one sentence.
157
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
158
+ io:
159
+ input:
160
+ schema:
161
+ $ref: "#/schemas/empty"
162
+ output:
163
+ schema:
164
+ $ref: "#/schemas/empty"
165
+
166
+ - id: ran-in
167
+ system_prompt: |
168
+ Note that the in gate fired, in one sentence.
169
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
170
+ io:
171
+ input:
172
+ schema:
173
+ $ref: "#/schemas/empty"
174
+ output:
175
+ schema:
176
+ $ref: "#/schemas/empty"
177
+
178
+ - id: ran-not-in
179
+ system_prompt: |
180
+ Note that the not_in gate fired, in one sentence.
181
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
182
+ io:
183
+ input:
184
+ schema:
185
+ $ref: "#/schemas/empty"
186
+ output:
187
+ schema:
188
+ $ref: "#/schemas/empty"
189
+
190
+ - id: ran-gt-num
191
+ system_prompt: |
192
+ Note that the number gt gate fired, in one sentence.
193
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
194
+ io:
195
+ input:
196
+ schema:
197
+ $ref: "#/schemas/empty"
198
+ output:
199
+ schema:
200
+ $ref: "#/schemas/empty"
201
+
202
+ - id: score
203
+ route:
204
+ - to: ran-gt
205
+ if:
206
+ field: score
207
+ op: gt
208
+ value: 5
209
+ - to: ran-gte
210
+ if:
211
+ field: score
212
+ op: gte
213
+ value: 10
214
+ - to: ran-lt
215
+ if:
216
+ field: score
217
+ op: lt
218
+ value: 20
219
+ - to: ran-lte
220
+ if:
221
+ field: score
222
+ op: lte
223
+ value: 10
224
+ - to: account
225
+ system_prompt: |
226
+ Score the record in one sentence.
227
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"score":10}.
228
+ io:
229
+ input:
230
+ schema:
231
+ $ref: "#/schemas/empty"
232
+ output:
233
+ schema:
234
+ type: object
235
+ required: [score]
236
+ properties:
237
+ score:
238
+ type: integer
239
+
240
+ - id: ran-gt
241
+ system_prompt: |
242
+ Note that the integer gt gate fired, in one sentence.
243
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
244
+ io:
245
+ input:
246
+ schema:
247
+ $ref: "#/schemas/empty"
248
+ output:
249
+ schema:
250
+ $ref: "#/schemas/empty"
251
+
252
+ - id: ran-gte
253
+ system_prompt: |
254
+ Note that the gte gate fired (score equals the bound), in one sentence.
255
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
256
+ io:
257
+ input:
258
+ schema:
259
+ $ref: "#/schemas/empty"
260
+ output:
261
+ schema:
262
+ $ref: "#/schemas/empty"
263
+
264
+ - id: ran-lt
265
+ system_prompt: |
266
+ Note that the lt gate fired, in one sentence.
267
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
268
+ io:
269
+ input:
270
+ schema:
271
+ $ref: "#/schemas/empty"
272
+ output:
273
+ schema:
274
+ $ref: "#/schemas/empty"
275
+
276
+ - id: ran-lte
277
+ system_prompt: |
278
+ Note that the lte gate fired (score equals the bound), in one sentence.
279
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
280
+ io:
281
+ input:
282
+ schema:
283
+ $ref: "#/schemas/empty"
284
+ output:
285
+ schema:
286
+ $ref: "#/schemas/empty"
287
+
288
+ - id: account
289
+ route:
290
+ - to: ran-nested
291
+ if:
292
+ field: customer.tier
293
+ op: eq
294
+ value: gold
295
+ - to: verdict
296
+ system_prompt: |
297
+ Read the customer record in one sentence.
298
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"customer":{"tier":"gold"}}.
299
+ io:
300
+ input:
301
+ schema:
302
+ $ref: "#/schemas/empty"
303
+ output:
304
+ schema:
305
+ type: object
306
+ required: [customer]
307
+ properties:
308
+ customer:
309
+ $ref: "#/schemas/customer"
310
+
311
+ - id: ran-nested
312
+ system_prompt: |
313
+ Note that the nested customer.tier gate fired, in one sentence.
314
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
315
+ io:
316
+ input:
317
+ schema:
318
+ type: object
319
+ required: [customer]
320
+ properties:
321
+ customer:
322
+ $ref: "#/schemas/customer"
323
+ output:
324
+ schema:
325
+ $ref: "#/schemas/empty"
326
+
327
+ - id: verdict
328
+ route:
329
+ - to: ran-ref
330
+ if:
331
+ field: ok
332
+ op: eq
333
+ value: true
334
+ - to: compose
335
+ system_prompt: |
336
+ Record the verdict in one sentence.
337
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"ok":true}.
338
+ io:
339
+ input:
340
+ schema:
341
+ $ref: "#/schemas/empty"
342
+ output:
343
+ schema:
344
+ $ref: "#/schemas/flag"
345
+
346
+ - id: ran-ref
347
+ system_prompt: |
348
+ Note that the $ref output-schema gate fired, in one sentence.
349
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
350
+ io:
351
+ input:
352
+ schema:
353
+ $ref: "#/schemas/flag"
354
+ output:
355
+ schema:
356
+ $ref: "#/schemas/empty"
357
+
358
+ - id: compose
359
+ route:
360
+ - to: ran-all
361
+ if:
362
+ all:
363
+ - field: severity
364
+ op: eq
365
+ value: high
366
+ - field: customer.tier
367
+ op: in
368
+ value: [gold, silver]
369
+ - to: ran-any
370
+ if:
371
+ any:
372
+ - field: channel
373
+ op: eq
374
+ value: web
375
+ - field: severity
376
+ op: eq
377
+ value: low
378
+ - to: ran-not
379
+ if:
380
+ not:
381
+ field: severity
382
+ op: eq
383
+ value: low
384
+ - to: ran-nested-compose
385
+ if:
386
+ not:
387
+ all:
388
+ - field: severity
389
+ op: eq
390
+ value: low
391
+ - field: channel
392
+ op: eq
393
+ value: phone
394
+ - to: ran-any-of-alls
395
+ if:
396
+ any:
397
+ - all:
398
+ - field: severity
399
+ op: eq
400
+ value: high
401
+ - field: channel
402
+ op: eq
403
+ value: web
404
+ - all:
405
+ - field: severity
406
+ op: eq
407
+ value: low
408
+ - field: channel
409
+ op: eq
410
+ value: phone
411
+ - to: triage
412
+ system_prompt: |
413
+ Compose the record in one sentence.
414
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"severity":"high","channel":"web","customer":{"tier":"gold"}}.
415
+ io:
416
+ input:
417
+ schema:
418
+ $ref: "#/schemas/empty"
419
+ output:
420
+ schema:
421
+ type: object
422
+ required: [severity, channel, customer]
423
+ properties:
424
+ severity:
425
+ type: string
426
+ channel:
427
+ type: string
428
+ customer:
429
+ $ref: "#/schemas/customer"
430
+
431
+ - id: ran-all
432
+ system_prompt: |
433
+ Note that the all (AND) gate fired, in one sentence.
434
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
435
+ io:
436
+ input:
437
+ schema:
438
+ type: object
439
+ required: [severity, channel, customer]
440
+ properties:
441
+ severity:
442
+ type: string
443
+ channel:
444
+ type: string
445
+ customer:
446
+ $ref: "#/schemas/customer"
447
+ output:
448
+ schema:
449
+ $ref: "#/schemas/empty"
450
+
451
+ - id: ran-any
452
+ system_prompt: |
453
+ Note that the any (OR) gate fired, in one sentence.
454
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
455
+ io:
456
+ input:
457
+ schema:
458
+ $ref: "#/schemas/empty"
459
+ output:
460
+ schema:
461
+ $ref: "#/schemas/empty"
462
+
463
+ - id: ran-not
464
+ system_prompt: |
465
+ Note that the not gate fired, in one sentence.
466
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
467
+ io:
468
+ input:
469
+ schema:
470
+ $ref: "#/schemas/empty"
471
+ output:
472
+ schema:
473
+ $ref: "#/schemas/empty"
474
+
475
+ - id: ran-nested-compose
476
+ system_prompt: |
477
+ Note that not(all(...)) fired, in one sentence.
478
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
479
+ io:
480
+ input:
481
+ schema:
482
+ $ref: "#/schemas/empty"
483
+ output:
484
+ schema:
485
+ $ref: "#/schemas/empty"
486
+
487
+ - id: ran-any-of-alls
488
+ system_prompt: |
489
+ Note that any(all(...), all(...)) fired, in one sentence.
490
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
491
+ io:
492
+ input:
493
+ schema:
494
+ $ref: "#/schemas/empty"
495
+ output:
496
+ schema:
497
+ $ref: "#/schemas/empty"
498
+
499
+ - id: triage
500
+ route:
501
+ - to: skipped-page
502
+ if:
503
+ field: severity
504
+ op: eq
505
+ value: high
506
+ - to: ran-notify
507
+ system_prompt: |
508
+ Triage the record in one sentence.
509
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"severity":"low"}.
510
+ io:
511
+ input:
512
+ schema:
513
+ $ref: "#/schemas/empty"
514
+ output:
515
+ schema:
516
+ type: object
517
+ required: [severity]
518
+ properties:
519
+ severity:
520
+ type: string
521
+
522
+ - id: skipped-page
523
+ route:
524
+ - to: skipped-page-child
525
+ system_prompt: |
526
+ Page on-call in one sentence.
527
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
528
+ io:
529
+ input:
530
+ schema:
531
+ $ref: "#/schemas/empty"
532
+ output:
533
+ schema:
534
+ $ref: "#/schemas/empty"
535
+
536
+ - id: skipped-page-child
537
+ system_prompt: |
538
+ This descendant should stay skipped with skipped-page.
539
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
540
+ io:
541
+ input:
542
+ schema:
543
+ $ref: "#/schemas/empty"
544
+ output:
545
+ schema:
546
+ $ref: "#/schemas/empty"
547
+
548
+ - id: ran-notify
549
+ route:
550
+ - to: gated-only
551
+ system_prompt: |
552
+ Notify the team in one sentence.
553
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
554
+ io:
555
+ input:
556
+ schema:
557
+ $ref: "#/schemas/empty"
558
+ output:
559
+ schema:
560
+ $ref: "#/schemas/empty"
561
+
562
+ - id: gated-only
563
+ route:
564
+ - to: ran-all-gated
565
+ if:
566
+ field: go
567
+ op: eq
568
+ value: true
569
+ system_prompt: |
570
+ Decide the all-gated fire lane in one sentence.
571
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"go":true}.
572
+ io:
573
+ input:
574
+ schema:
575
+ $ref: "#/schemas/empty"
576
+ output:
577
+ schema:
578
+ $ref: "#/schemas/go-flag"
579
+
580
+ - id: ran-all-gated
581
+ route:
582
+ - to: quiet
583
+ - to: write
584
+ system_prompt: |
585
+ Note that the only forward if matched, in one sentence.
586
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
587
+ io:
588
+ input:
589
+ schema:
590
+ $ref: "#/schemas/go-flag"
591
+ output:
592
+ schema:
593
+ $ref: "#/schemas/empty"
594
+
595
+ - id: quiet
596
+ route:
597
+ - to: skipped-quiet
598
+ if:
599
+ field: go
600
+ op: eq
601
+ value: true
602
+ system_prompt: |
603
+ Decide the quiet miss lane in one sentence.
604
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"go":false}.
605
+ io:
606
+ input:
607
+ schema:
608
+ $ref: "#/schemas/empty"
609
+ output:
610
+ schema:
611
+ $ref: "#/schemas/go-flag"
612
+
613
+ - id: skipped-quiet
614
+ system_prompt: |
615
+ This stage should stay skipped.
616
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
617
+ io:
618
+ input:
619
+ schema:
620
+ $ref: "#/schemas/empty"
621
+ output:
622
+ schema:
623
+ $ref: "#/schemas/empty"
624
+
625
+ - id: write
626
+ route:
627
+ - to: assemble-ok
628
+ if:
629
+ field: ready
630
+ op: eq
631
+ value: true
632
+ - to: draw
633
+ system_prompt: |
634
+ Write the first half in one sentence.
635
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"ready":true}.
636
+ io:
637
+ input:
638
+ schema:
639
+ $ref: "#/schemas/empty"
640
+ output:
641
+ schema:
642
+ type: object
643
+ required: [ready]
644
+ properties:
645
+ ready:
646
+ type: boolean
647
+
648
+ - id: draw
649
+ route:
650
+ - to: assemble-ok
651
+ if:
652
+ field: complete
653
+ op: eq
654
+ value: true
655
+ - to: write-miss
656
+ system_prompt: |
657
+ Draw the second half in one sentence.
658
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"complete":true}.
659
+ io:
660
+ input:
661
+ schema:
662
+ $ref: "#/schemas/empty"
663
+ output:
664
+ schema:
665
+ type: object
666
+ required: [complete]
667
+ properties:
668
+ complete:
669
+ type: boolean
670
+
671
+ - id: assemble-ok
672
+ system_prompt: |
673
+ Combine both matching parents into one sentence.
674
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
675
+ io:
676
+ input:
677
+ schema:
678
+ $ref: "#/schemas/empty"
679
+ output:
680
+ schema:
681
+ $ref: "#/schemas/empty"
682
+
683
+ - id: write-miss
684
+ route:
685
+ - to: assemble-miss
686
+ if:
687
+ field: ready
688
+ op: eq
689
+ value: true
690
+ - to: draw-miss
691
+ system_prompt: |
692
+ Write the miss-join half in one sentence.
693
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"ready":true}.
694
+ io:
695
+ input:
696
+ schema:
697
+ $ref: "#/schemas/empty"
698
+ output:
699
+ schema:
700
+ type: object
701
+ required: [ready]
702
+ properties:
703
+ ready:
704
+ type: boolean
705
+
706
+ - id: draw-miss
707
+ route:
708
+ - to: assemble-miss
709
+ if:
710
+ field: complete
711
+ op: eq
712
+ value: true
713
+ - to: mix-open
714
+ system_prompt: |
715
+ Draw the miss-join half in one sentence.
716
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"complete":false}.
717
+ io:
718
+ input:
719
+ schema:
720
+ $ref: "#/schemas/empty"
721
+ output:
722
+ schema:
723
+ type: object
724
+ required: [complete]
725
+ properties:
726
+ complete:
727
+ type: boolean
728
+
729
+ - id: assemble-miss
730
+ system_prompt: |
731
+ This join should stay skipped.
732
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
733
+ io:
734
+ input:
735
+ schema:
736
+ $ref: "#/schemas/empty"
737
+ output:
738
+ schema:
739
+ $ref: "#/schemas/empty"
740
+
741
+ - id: mix-open
742
+ route:
743
+ - to: assemble-mix-ok
744
+ - to: mix-gated
745
+ system_prompt: |
746
+ Open the mixed-join fire half in one sentence.
747
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
748
+ io:
749
+ input:
750
+ schema:
751
+ $ref: "#/schemas/empty"
752
+ output:
753
+ schema:
754
+ $ref: "#/schemas/empty"
755
+
756
+ - id: mix-gated
757
+ route:
758
+ - to: assemble-mix-ok
759
+ if:
760
+ field: ready
761
+ op: eq
762
+ value: true
763
+ - to: mix-open-miss
764
+ system_prompt: |
765
+ Gate the mixed-join fire half in one sentence.
766
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"ready":true}.
767
+ io:
768
+ input:
769
+ schema:
770
+ $ref: "#/schemas/empty"
771
+ output:
772
+ schema:
773
+ type: object
774
+ required: [ready]
775
+ properties:
776
+ ready:
777
+ type: boolean
778
+
779
+ - id: assemble-mix-ok
780
+ system_prompt: |
781
+ Combine the ungated parent and the matching gated parent in one sentence.
782
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
783
+ io:
784
+ input:
785
+ schema:
786
+ $ref: "#/schemas/empty"
787
+ output:
788
+ schema:
789
+ $ref: "#/schemas/empty"
790
+
791
+ - id: mix-open-miss
792
+ route:
793
+ - to: assemble-mix-miss
794
+ - to: mix-gated-miss
795
+ system_prompt: |
796
+ Open the mixed-join miss half in one sentence.
797
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
798
+ io:
799
+ input:
800
+ schema:
801
+ $ref: "#/schemas/empty"
802
+ output:
803
+ schema:
804
+ $ref: "#/schemas/empty"
805
+
806
+ - id: mix-gated-miss
807
+ route:
808
+ - to: assemble-mix-miss
809
+ if:
810
+ field: ready
811
+ op: eq
812
+ value: true
813
+ - to: strict-num
814
+ system_prompt: |
815
+ Gate the mixed-join miss half in one sentence.
816
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"ready":false}.
817
+ io:
818
+ input:
819
+ schema:
820
+ $ref: "#/schemas/empty"
821
+ output:
822
+ schema:
823
+ type: object
824
+ required: [ready]
825
+ properties:
826
+ ready:
827
+ type: boolean
828
+
829
+ - id: assemble-mix-miss
830
+ system_prompt: |
831
+ This mixed join should stay skipped.
832
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
833
+ io:
834
+ input:
835
+ schema:
836
+ $ref: "#/schemas/empty"
837
+ output:
838
+ schema:
839
+ $ref: "#/schemas/empty"
840
+
841
+ - id: strict-num
842
+ route:
843
+ - to: ran-int-one
844
+ if:
845
+ field: n
846
+ op: eq
847
+ value: 1
848
+ - to: skipped-coerced
849
+ if:
850
+ field: n
851
+ op: eq
852
+ value: "1"
853
+ - to: loop-draft
854
+ system_prompt: |
855
+ Emit the integer one in one sentence.
856
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"n":1}.
857
+ io:
858
+ input:
859
+ schema:
860
+ $ref: "#/schemas/empty"
861
+ output:
862
+ schema:
863
+ type: object
864
+ required: [n]
865
+ properties:
866
+ n:
867
+ type: integer
868
+
869
+ - id: ran-int-one
870
+ system_prompt: |
871
+ Note that integer 1 matched eq 1, in one sentence.
872
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
873
+ io:
874
+ input:
875
+ schema:
876
+ $ref: "#/schemas/empty"
877
+ output:
878
+ schema:
879
+ $ref: "#/schemas/empty"
880
+
881
+ - id: skipped-coerced
882
+ system_prompt: |
883
+ This stage should stay skipped because 1 is not "1".
884
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
885
+ io:
886
+ input:
887
+ schema:
888
+ $ref: "#/schemas/empty"
889
+ output:
890
+ schema:
891
+ $ref: "#/schemas/empty"
892
+
893
+ - id: loop-draft
894
+ route:
895
+ - to: loop-check
896
+ system_prompt: |
897
+ Draft a one-sentence change for the loop lane.
898
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
899
+ io:
900
+ input:
901
+ schema:
902
+ $ref: "#/schemas/empty"
903
+ output:
904
+ schema:
905
+ $ref: "#/schemas/empty"
906
+
907
+ - id: loop-check
908
+ route:
909
+ - to: loop-done
910
+ if:
911
+ field: pass
912
+ op: eq
913
+ value: true
914
+ - type: loop
915
+ to: loop-draft
916
+ max_replays: 1
917
+ on_max_replays: require_continue
918
+ replay_session: resume
919
+ system_prompt: |
920
+ Check the draft in one sentence.
921
+ Always emit payload: {"pass":true}.
922
+ On success you MUST include feedback_loop in your envelope:
923
+ {"action":"continue"} or {"action":"send_back","target":"loop-draft"}.
924
+ On your FIRST attempt, send_back to loop-draft.
925
+ On your SECOND attempt (after the replay), continue.
926
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], payload: {"pass":true}, and the matching feedback_loop action.
927
+ io:
928
+ input:
929
+ schema:
930
+ $ref: "#/schemas/empty"
931
+ output:
932
+ schema:
933
+ type: object
934
+ required: [pass]
935
+ properties:
936
+ pass:
937
+ type: boolean
938
+
939
+ - id: loop-done
940
+ replay_safe: false
941
+ system_prompt: |
942
+ Finish the loop lane in one sentence.
943
+ Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
944
+ io:
945
+ input:
946
+ schema:
947
+ $ref: "#/schemas/empty"
948
+ output:
949
+ schema:
950
+ $ref: "#/schemas/empty"