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,109 @@
1
+ id: feat-review
2
+ system_prompt: |
3
+ Answer your assigned review questions against the actual code and record a
4
+ verdict with file:line evidence. This stage is strictly read-only: do not
5
+ edit files, rerun formatters that write files, commit, push, or open a
6
+ pull request.
7
+
8
+ Reading upstream evidence. The user prompt contains a line
9
+ "Factory run workspace: <absolute path>". Prior artifacts arrive in the
10
+ prior envelope's artifacts[] as run-relative paths; read each one at
11
+ <Factory run workspace>/<artifact path>. implementation-plan.md is the
12
+ authoritative statement of what was approved, and implementation-report.md
13
+ is the authoritative record of what actually changed and how it was
14
+ validated. Prose summaries are secondary.
15
+
16
+ Definition of done, checked before you emit:
17
+ - You read every path in your assigned paths list in the checkout, plus
18
+ implementation-plan.md and implementation-report.md at their resolved
19
+ absolute paths.
20
+ - Every question in your assigned questions list has an answer recorded in
21
+ review.md.
22
+ - review.md was written through write_stage_artifact and appears in the
23
+ emitted artifacts list, alongside all inherited evidence artifacts.
24
+ - Every finding that would block shipping appears in blocking_findings.
25
+ - The checkout working tree is unchanged by this stage.
26
+
27
+ 1. Read the task and your assigned prior envelope payload: review_id,
28
+ objective, paths, questions, and constraints. Print the current diff
29
+ (git diff) in the checkout.
30
+ 2. Inspect the implementation and tests deeply enough to answer every
31
+ assigned question. Read the real files at the assigned paths; do not
32
+ answer from the diff hunk alone when surrounding code decides
33
+ correctness.
34
+ 3. Classify actionable findings as blocking or non-blocking. A blocking
35
+ finding is a correctness, regression, missing-test, security, or
36
+ compatibility problem that should prevent shipping. Any such finding
37
+ MUST appear in blocking_findings, even when verdict is pass. Describing
38
+ a correctness or regression problem only in prose findings while
39
+ leaving blocking_findings empty is a contract violation; if you believe
40
+ a described problem is not shipping-blocking, say why in findings and
41
+ keep the verdict consistent with that.
42
+ 4. Call write_stage_artifact with path review.md containing verdict pass
43
+ or changes_required, the answer to each assigned question, findings,
44
+ evidence, and concrete remediation for each blocking finding.
45
+ 5. Emit exactly one success envelope whenever the review completed, even
46
+ when changes are required. List review.md plus all inherited evidence
47
+ artifacts. Put the verdict and blockers in the payload so the fixup
48
+ stage receives every review. Use failure only if the review itself
49
+ could not be performed.
50
+
51
+ Payload discipline. evidence entries must cite concrete references such as
52
+ path/to/file.ts:120-134 or a test node id; "see diff", "the
53
+ implementation", n/a, none, tbd, and pending are contract violations.
54
+ findings, suggestions, and blocking_findings must hold substantive
55
+ entries, never placeholders. Writing review.md is never a substitute for
56
+ actually reading the code and answering the questions.
57
+
58
+ Summary authoring. The emitted summary describes outcomes and state for
59
+ the fixup stage: your review_id, verdict, whether blocking findings exist,
60
+ and what they are. Do not restate this stage's own prohibitions or scope
61
+ limits in the summary. Downstream stages receive this summary verbatim and
62
+ will mistake stage-local prohibitions for their own instructions.
63
+ model: omniroute/auto
64
+ io:
65
+ input:
66
+ schema:
67
+ type: object
68
+ output:
69
+ schema:
70
+ type: object
71
+ required:
72
+ - review_id
73
+ - verdict
74
+ - findings
75
+ - blocking_findings
76
+ - suggestions
77
+ - evidence
78
+ properties:
79
+ review_id:
80
+ type: string
81
+ verdict:
82
+ type: string
83
+ enum:
84
+ - pass
85
+ - changes_required
86
+ findings:
87
+ type: array
88
+ items:
89
+ type: string
90
+ blocking_findings:
91
+ type: array
92
+ items:
93
+ type: string
94
+ suggestions:
95
+ type: array
96
+ items:
97
+ type: string
98
+ evidence:
99
+ type: array
100
+ items:
101
+ type: string
102
+ verify:
103
+ - id: review
104
+ type: artifact
105
+ path: review.md
106
+ nonempty: true
107
+ when:
108
+ - after
109
+ gate_kinds: []
@@ -0,0 +1,203 @@
1
+ id: feat-ship
2
+ system_prompt: |
3
+ Produce one operator-approved ship-package.md that states the verified
4
+ facts of the change, then — once the operator accepts it — push the
5
+ current branch and open the pull request yourself in this same stage. Do
6
+ not edit source files. The checkout is already on the correct feature
7
+ branch; never create, rename, or switch branches.
8
+
9
+ Reading upstream evidence. The user prompt contains a line "Factory run
10
+ workspace: <absolute path>". Prior artifacts arrive in the prior
11
+ envelope's artifacts[] as run-relative paths; read each one at
12
+ <Factory run workspace>/<artifact path>. implementation-report.md is the
13
+ authoritative record of what was changed and how it was validated,
14
+ implementation-plan.md of what was approved, review-feedback-report.md of
15
+ what feat-address-feedback fixed after review, and each feat-review
16
+ envelope/review.md of what each reviewer originally found. Prose summaries
17
+ are secondary.
18
+
19
+ Trust but verify feat-address-feedback. Its report is a claim, not proof
20
+ by itself: cross-check addressed_all_blocking against the original
21
+ feat-review envelopes' blocking_findings and confirm the specific
22
+ checks they cited actually pass now, rather than accepting the claim at
23
+ face value.
24
+
25
+ publish_repo and the base branch are exactly what the task goal/context
26
+ name as the ship target; never guess or invent one. If the task does not
27
+ explicitly name a target repository, emit failure instead of guessing.
28
+
29
+ Definition of done, checked before you emit:
30
+ - Every feat-review envelope, its review.md, and
31
+ review-feedback-report.md have been read.
32
+ - ship-package.md was written through write_stage_artifact and appears in
33
+ the emitted artifacts list, and contains the PR title, PR body, tests
34
+ run with their results, changed files, and the exact publish commands.
35
+ - changed_files matches git diff --name-only in the checkout against the
36
+ branch's merge base.
37
+ - tests are the commands and node ids recorded in the implement/review
38
+ evidence.
39
+ - publish_repo and base_branch are exactly what the task names as the ship
40
+ target, and the artifact says so explicitly.
41
+ - head_branch is the checkout's actual current branch (git rev-parse
42
+ --abbrev-ref HEAD) — never a branch you created.
43
+ - The operator accepted the package through the artifact_backed gate
44
+ before any publish command runs.
45
+ - opened is true only if gh pr view confirms the PR exists after you
46
+ created it; pull-request.md was written through write_stage_artifact and
47
+ appears in the emitted artifacts list.
48
+
49
+ 1. Read every feat-review envelope/artifact, review-feedback-
50
+ report.md, the task, implementation-plan.md, and
51
+ implementation-report.md via the recipe above. Run git rev-parse
52
+ --abbrev-ref HEAD, git diff --name-only, and git diff --stat in the
53
+ checkout.
54
+ 2. Call write_stage_artifact with path ship-package.md containing scope,
55
+ root cause, before/after behavior, changed files, exact validation
56
+ results, all review verdicts and how any blocking findings were
57
+ addressed, remaining risks, and a proposed pull-request title and body
58
+ targeting publish_repo's base_branch from the checkout's current
59
+ branch. State the repository and branches explicitly.
60
+ 3. Fail closed. If review-feedback-report.md says addressed_all_blocking
61
+ is not true, or your own re-check finds any original blocking_findings
62
+ entry whose cited check still fails, mark the package NOT READY and
63
+ emit failure with the artifact. Do not ask the operator to approve
64
+ known-blocking code, and do not run any publish command in that case.
65
+ 4. Otherwise call ask_operator with kind artifact_backed referencing the
66
+ package. Ask whether it is ready to publish.
67
+ 5. For wording/report changes, revise the artifact and ask again. If the
68
+ operator requests code changes or declines publication, emit failure
69
+ and preserve the requested changes in the artifact. Do not run any
70
+ publish command without an explicit accept.
71
+ 6. Only after explicit acceptance: confirm the checkout is still on
72
+ head_branch (do not switch), then run git add, git commit (using
73
+ pr_title as the message unless the package recipe says otherwise), git
74
+ push -u origin <head_branch>, and gh pr create --repo <publish_repo>
75
+ --base <base_branch> --head <head_branch> --title <pr_title> --body
76
+ <pr_body_summary>. Auth is GH_TOKEN or GITHUB_TOKEN already in the
77
+ environment; gh is on PATH.
78
+ 7. Confirm with gh pr view. Write pull-request.md via write_stage_artifact
79
+ with the PR URL, the commands actually run, and their results. If a
80
+ pull request already exists for this branch, or any command fails,
81
+ emit status failure and record what happened; never retry a create
82
+ with altered scope.
83
+ 8. Emit exactly once, including ship-package.md, pull-request.md, and all
84
+ inherited evidence artifacts, with a payload matching the schema. Do
85
+ not stop after a chat reply or after opening the PR — the stage only
86
+ completes when emit_stage_envelope returns.
87
+
88
+ Payload discipline. changed_files must be copied from the implement/review
89
+ evidence and cross-checked against git diff --name-only; entries that do
90
+ not appear in that output, or that point under stages/.../artifacts/, are
91
+ a contract violation. tests must be the real commands or test node ids
92
+ from the implement evidence, never invented and never n/a, none, tbd, or
93
+ pending. Every string field must carry real content and every array
94
+ substantive entries, not placeholders such as ["see diff"]. commands_run
95
+ must list only the git/gh commands you actually executed, each with its
96
+ outcome.
97
+
98
+ Contract violations — emit failure rather than presenting these as
99
+ success:
100
+ - Creating, renaming, or switching branches in this or any stage.
101
+ - Running git add, git commit, git push, or gh pr create before the
102
+ operator has explicitly accepted through the artifact_backed gate.
103
+ - opened: true without gh pr view confirming the PR exists.
104
+ - publish_repo or base_branch anything other than what the task names.
105
+ - commands_run listing commands you did not execute.
106
+ - Writing ship-package.md without reading the reviews and reconciling the
107
+ diff first.
108
+ - Accepting addressed_all_blocking at face value without re-checking it
109
+ against the original blocking_findings.
110
+
111
+ Summary authoring. The emitted summary describes outcomes and state:
112
+ readiness, review verdicts, which files changed, which tests passed, the
113
+ publish target, and the PR URL if opened. Do not restate this stage's own
114
+ prohibitions or scope limits in the summary.
115
+ model: omniroute/auto
116
+ timeout_ms: 3600000
117
+ io:
118
+ input:
119
+ schema:
120
+ type: object
121
+ required:
122
+ - addressed_all_blocking
123
+ - fixed_files
124
+ - verification_commands
125
+ - remaining_risks
126
+ properties:
127
+ addressed_all_blocking:
128
+ type: boolean
129
+ fixed_files:
130
+ type: array
131
+ items:
132
+ type: string
133
+ verification_commands:
134
+ type: array
135
+ items:
136
+ type: string
137
+ remaining_risks:
138
+ type: array
139
+ items:
140
+ type: string
141
+ output:
142
+ schema:
143
+ type: object
144
+ required:
145
+ - pr_title
146
+ - pr_body_summary
147
+ - tests
148
+ - changed_files
149
+ - publish_repo
150
+ - base_branch
151
+ - head_branch
152
+ - commands_run
153
+ - opened
154
+ - pr_url
155
+ properties:
156
+ pr_title:
157
+ type: string
158
+ pr_body_summary:
159
+ type: string
160
+ tests:
161
+ type: array
162
+ items:
163
+ type: string
164
+ changed_files:
165
+ type: array
166
+ items:
167
+ type: string
168
+ publish_repo:
169
+ type: string
170
+ base_branch:
171
+ type: string
172
+ head_branch:
173
+ type: string
174
+ commands_run:
175
+ type: array
176
+ minItems: 1
177
+ items:
178
+ type: string
179
+ opened:
180
+ type: boolean
181
+ pr_url:
182
+ type: string
183
+ verify:
184
+ - id: ship-approved
185
+ type: gate
186
+ kind: artifact_backed
187
+ when:
188
+ - emit
189
+ - after
190
+ - id: ship-package
191
+ type: artifact
192
+ path: ship-package.md
193
+ nonempty: true
194
+ when:
195
+ - after
196
+ - id: pull-request
197
+ type: artifact
198
+ path: pull-request.md
199
+ nonempty: true
200
+ when:
201
+ - after
202
+ gate_kinds:
203
+ - artifact_backed
@@ -0,0 +1,44 @@
1
+ id: ship-feature
2
+ stages:
3
+ - id: feat-plan
4
+ entry: true
5
+ route:
6
+ - to: feat-implement
7
+ uses: ./feat-plan.yaml
8
+ on_verify_fail:
9
+ mode: repair
10
+ max_attempts: 3
11
+ retry_safety: idempotent
12
+ include_failed_checks: true
13
+ - id: feat-implement
14
+ route:
15
+ - to: feat-review
16
+ uses: ./feat-implement.yaml
17
+ on_verify_fail:
18
+ mode: repair
19
+ max_attempts: 3
20
+ retry_safety: idempotent
21
+ include_failed_checks: true
22
+ - id: feat-review
23
+ route:
24
+ - to: feat-address-feedback
25
+ uses: ./feat-review.yaml
26
+ on_verify_fail:
27
+ mode: repair
28
+ max_attempts: 3
29
+ retry_safety: idempotent
30
+ include_failed_checks: true
31
+ - id: feat-address-feedback
32
+ route:
33
+ - to: feat-ship
34
+ uses: ./feat-address-feedback.yaml
35
+ on_verify_fail:
36
+ mode: repair
37
+ max_attempts: 3
38
+ retry_safety: idempotent
39
+ include_failed_checks: true
40
+ - id: feat-ship
41
+ uses: ./feat-ship.yaml
42
+ on_verify_fail:
43
+ mode: manual
44
+ retry_safety: side_effecting
@@ -0,0 +1,78 @@
1
+ id: ship-feature-richer-payload-schema
2
+ goal: >
3
+ Extend the JSON Schema subset used for io.input.schema / io.output.schema
4
+ (and verify type: payload_schema checks) in src/envelope/payloadSchema.ts
5
+ to additionally support, for type: string nodes: pattern (a regex string,
6
+ validated as a valid RegExp at compile time), minLength, and maxLength
7
+ (non-negative integers, checked at compile time). Also add a nullable:
8
+ true keyword usable on any node type, compiling to a union of that type
9
+ with null. Ship the change as an operator-approved pull request opened
10
+ against tejasghutukade/stageflow.
11
+ context: |
12
+ This repository is Stageflow itself (tejasghutukade/stageflow). The
13
+ checkout for this run is a dedicated git worktree already on branch
14
+ demo/richer-payload-schema-constraints, tracking origin/main, in a clean
15
+ state with npm install already run.
16
+
17
+ Compiler to extend: src/envelope/payloadSchema.ts (~250 lines). Read its
18
+ current JsonSchemaNode type, the compileNode switch statement (especially
19
+ case "string"), and the exported doc-comment above compilePayloadSchema
20
+ that lists supported keywords — that comment must stay accurate once the
21
+ new keywords land. nullable most likely wraps compileNode's return with
22
+ Type.Union([schema, Type.Null()]) from the typebox package already used
23
+ elsewhere in this file, rather than living inside any single type's case.
24
+
25
+ Existing tests to extend: tests/envelope.payloadSchema.test.ts, which uses
26
+ compilePayloadSchema, assertEnvelopePayload, and
27
+ assertCloneAssignmentPayload. New tests should follow the file's existing
28
+ describe/it style — the existing "rejects integers outside minimum and
29
+ maximum" test is a good template for a new "rejects strings outside
30
+ pattern/minLength/maxLength" test, and there should be a nullable test that
31
+ allows null in addition to the node's base type (and continues to reject
32
+ values of neither).
33
+
34
+ Public docs to update: docs/envelopes.md, section "### payload_schema
35
+ {#payload-schema}" (around line 129), which lists supported keywords in
36
+ one prose sentence — pattern, minLength, maxLength, and nullable need to
37
+ join that list.
38
+
39
+ Backlog tracker to update as part of this same change, once the capability
40
+ actually works end-to-end: docs/future-roadmap/conductor-parity-tracker.md,
41
+ the "Richer payload-schema constraints" item under "## Quality,
42
+ interaction, and resiliency". That file has its own "How to update this
43
+ tracker" section at the bottom — follow those instructions exactly (flip
44
+ [ ] to [x], add links to the fixture/test/doc/example) rather than only
45
+ deleting the checkbox text. Do not touch any other backlog item in that
46
+ file. This tracker file is gitignored (a local-only planning artifact, like
47
+ docs/plans/ and docs/ideation/) — editing it on disk is still worthwhile
48
+ for the operator's own tracking, but it will never appear in `git diff` or
49
+ `git status`, so never list it in changed_files/fixed_files (those must
50
+ match tracked, committable changes) and never expect it to show up in the
51
+ shipped diff or the pull request.
52
+
53
+ Known-good validation commands in this repository (verify against
54
+ package.json before relying on any command name, do not assume): npm run
55
+ typecheck, npx vitest run tests/envelope.payloadSchema.test.ts, and npm
56
+ test for the full suite.
57
+
58
+ Ship target: open the pull request against tejasghutukade/stageflow, base
59
+ branch main, from the checkout's current branch
60
+ (demo/richer-payload-schema-constraints) — push to origin on that same
61
+ repository, not a fork.
62
+ constraints: |
63
+ Do not create, rename, or switch branches in any stage — the checkout is
64
+ already on the correct branch, demo/richer-payload-schema-constraints,
65
+ tracking origin/main.
66
+ Do not touch .gitignore.
67
+ Do not commit, push, or open a pull request in any stage except feat-ship,
68
+ and feat-ship may do so only after the operator has explicitly accepted
69
+ the ship package through its artifact_backed gate.
70
+ Keep the change limited to the four new keywords (pattern, minLength,
71
+ maxLength, nullable) and their tests and docs; do not refactor unrelated
72
+ parts of payloadSchema.ts or change existing supported-keyword semantics.
73
+ A regex that fails to compile as a RegExp, or a negative/non-integer
74
+ minLength or maxLength, must be a compile-time error consistent with how
75
+ this file already rejects invalid minItems/minimum/maximum.
76
+ Source and test edits belong in the checkout working tree and must never
77
+ be replaced by a Stageflow artifact or report describing the change.
78
+ checkout: /Users/tejasghutukade/Projects/stageflow-demo-worktree
@@ -0,0 +1,145 @@
1
+ # stage-mcp
2
+
3
+ Dummy catalog for **manual operator-console testing** of stage MCP. Project
4
+ `.mcp.json` at the git root declares `echo`, `unused`, `needs-token`, and
5
+ `dead`. The happy path passes only `echo`. The agent calls the local echo
6
+ fixture, then `emit_stage_envelope` so you can inspect the payload.
7
+
8
+ MCP elicitation is unsupported — the fixture does not ask the operator a
9
+ question.
10
+
11
+ Three pipelines:
12
+
13
+ | Pipeline | What it exercises |
14
+ |----------|-------------------|
15
+ | `stage-mcp` | Allowlist `echo` only — unused stays unavailable |
16
+ | `stage-mcp-missing-var` | Passes `needs-token` (`${STAGE_MCP_REQUIRED_TOKEN}`, no default) |
17
+ | `stage-mcp-dead` | Passes `dead` — command will not connect |
18
+
19
+ ## Prerequisites
20
+
21
+ Use this repo's CLI (`npm run build` / `npm run dev`) or a Stageflow release
22
+ that includes stage MCP. A globally installed `sf` from npm may lag.
23
+
24
+ - Node.js ≥ 20
25
+ - From repo root: `npm run build` and `npm run ui:build`
26
+ - Provider auth connected (`sf ui` → Settings → Providers) for `sf run`. `sf validate` does not need auth. Stages use `cursor/auto`.
27
+
28
+ Run state lives in `<repo>/.stageflow` even if you start the console from a subdirectory.
29
+
30
+ ## Terminal 1 — operator console (optional)
31
+
32
+ From the **repository git root**:
33
+
34
+ ```bash
35
+ npm run build
36
+ npm run ui:build
37
+ PI_CURSOR_SETTING_SOURCES=all STAGEFLOW_ACTIVITY_VERBOSE=1 node dist/cli.js ui
38
+ ```
39
+
40
+ `npm run dev -- ui` runs the TypeScript CLI via tsx; use `node dist/cli.js ui` after `ui:build` so the console is served from `dist/ui`. Do not use a globally installed `sf` — Homebrew `sf` is an older build that cannot load this catalog.
41
+
42
+ Open `http://127.0.0.1:3847`. Browse should list **stage-mcp** and **stage-mcp-missing-var**. **stage-mcp-dead** is excluded from the catalog manifest (so `sf validate --strict` and release CI stay green) but remains loadable by explicit path — see Scenario C.
43
+
44
+ ## Terminal 2 — start a run (repo root)
45
+
46
+ ```bash
47
+ node dist/cli.js validate --pipeline examples/stage-mcp/stage-mcp.pipeline.yaml --strict
48
+ node dist/cli.js run \
49
+ --pipeline examples/stage-mcp/stage-mcp.pipeline.yaml \
50
+ --task examples/stage-mcp/stage-mcp.task.yaml
51
+ ```
52
+
53
+ `sf` works the same if that binary is this repo's build. Start a **new run** for each scenario below. Do not reuse a finished run.
54
+
55
+ Validate does not require `STAGE_MCP_REQUIRED_TOKEN` or a live connect.
56
+
57
+ ---
58
+
59
+ ## Scenario A — allowlist
60
+
61
+ Happy pipeline. `.mcp.json` defines `echo` and `unused`. The stage passes only `echo`.
62
+
63
+ ### What to verify
64
+
65
+ 1. The agent can call the echo fixture and cannot use `unused`.
66
+ 2. Ambient Cursor MCP is not inherited. Only the names on the stage list are passed.
67
+ 3. The handoff envelope payload includes `echoed` from the fixture.
68
+
69
+ ```bash
70
+ node dist/cli.js envelope get --run <runId> --stage use-echo --json
71
+ ```
72
+
73
+ ---
74
+
75
+ ## Scenario B — missing required var
76
+
77
+ New run **without** `STAGE_MCP_REQUIRED_TOKEN` in the environment:
78
+
79
+ ```bash
80
+ node dist/cli.js run \
81
+ --pipeline examples/stage-mcp/stage-mcp-missing-var.pipeline.yaml \
82
+ --task examples/stage-mcp/stage-mcp-missing-var.task.yaml
83
+ ```
84
+
85
+ ### What to verify
86
+
87
+ 1. The stage fails before the agent is treated as having those tools.
88
+ 2. `sf validate` on this pipeline still passes — unset required vars fail at **run**, not validate.
89
+
90
+ ---
91
+
92
+ ## Scenario C — dead server
93
+
94
+ Excluded from catalog browse / manifest-all validate (command is intentionally not on PATH). Load by explicit path:
95
+
96
+ ```bash
97
+ node dist/cli.js run \
98
+ --pipeline examples/stage-mcp/stage-mcp-dead.pipeline.yaml \
99
+ --task examples/stage-mcp/stage-mcp-dead.task.yaml
100
+ ```
101
+
102
+ ### What to verify
103
+
104
+ 1. The passed `dead` server will not connect.
105
+ 2. The stage fails.
106
+ 3. `sf validate --strict` (no `--pipeline`) does not report this pipeline; validating the dead pipeline by explicit path still reports `catalog.mcp_command_missing`.
107
+
108
+ ---
109
+
110
+ ## Scenario D — both backends
111
+
112
+ Same `mcp` list and `.mcp.json` allowlist, first on Pi, then on Claude. Change only the stage `model` between runs.
113
+
114
+ ### What to verify
115
+
116
+ 1. Both backends receive the servers named on the stage.
117
+ 2. Transports and protocol features may differ. Do not change `mcp` or `.mcp.json` to switch backends.
118
+
119
+ ---
120
+
121
+ ## Scenario E — Stageflow tools stay
122
+
123
+ Happy path again (or reuse Scenario A if the envelope already landed).
124
+
125
+ ### What to verify
126
+
127
+ 1. `emit_stage_envelope` still works. `write_stage_artifact` remains available.
128
+ 2. MCP tool calls do not park for a new MCP-specific approval.
129
+
130
+ ---
131
+
132
+ ## Scenario F — activity log
133
+
134
+ After the agent calls the echo fixture, inspect the run in the console or CLI.
135
+
136
+ ### What to verify
137
+
138
+ 1. The echo tool call is visible in the existing stage activity.
139
+ 2. There is no dedicated MCP console.
140
+
141
+ ## Envelope inspector (any successful happy-path run)
142
+
143
+ On a completed `use-echo` stage, the first Files row is **Handoff envelope**. It opens the inspector (`#/runs/<runId>/stages/use-echo/envelope`) with `summary`, `payload`, and artifact paths.
144
+
145
+ CLI equivalent: `node dist/cli.js envelope get --run <runId> --stage use-echo --json`.
@@ -0,0 +1,20 @@
1
+ import { McpServer } from "@modelcontextprotocol/server";
2
+ import { serveStdio } from "@modelcontextprotocol/server/stdio";
3
+ import { z } from "zod";
4
+
5
+ serveStdio(() => {
6
+ const server = new McpServer({ name: "echo", version: "1.0.0" });
7
+ server.registerTool(
8
+ "echo",
9
+ {
10
+ description: "Echo a text argument back to the caller.",
11
+ inputSchema: z.object({
12
+ text: z.string().describe("Text to echo"),
13
+ }),
14
+ },
15
+ async ({ text }) => ({
16
+ content: [{ type: "text", text }],
17
+ }),
18
+ );
19
+ return server;
20
+ });
@@ -0,0 +1,5 @@
1
+ id: stage-mcp-dead
2
+ stages:
3
+ - id: use-echo
4
+ uses: ./use-echo.yaml
5
+ mcp: [dead]
@@ -0,0 +1,3 @@
1
+ id: stage-mcp-dead
2
+ goal: Exercise a passed MCP server that will not connect.
3
+ context: The dead catalog entry uses a command that is not on PATH.
@@ -0,0 +1,5 @@
1
+ id: stage-mcp-missing-var
2
+ stages:
3
+ - id: use-echo
4
+ uses: ./use-echo.yaml
5
+ mcp: [needs-token]
@@ -0,0 +1,3 @@
1
+ id: stage-mcp-missing-var
2
+ goal: Exercise a passed MCP server that interpolates a required variable with no default.
3
+ context: Run without STAGE_MCP_REQUIRED_TOKEN so the stage fails before tools are treated as present.
@@ -0,0 +1,5 @@
1
+ id: stage-mcp
2
+ stages:
3
+ - id: use-echo
4
+ uses: ./use-echo.yaml
5
+ mcp: [echo]
@@ -0,0 +1,4 @@
1
+ id: stage-mcp
2
+ goal: Call the echo fixture tool, then emit a success envelope the operator can inspect.
3
+ context: Domain-neutral walkthrough for stage MCP. The happy path passes only the echo server.
4
+ constraints: Do not call ask_operator. Do not use unused catalog servers.
@@ -0,0 +1,20 @@
1
+ id: use-echo
2
+ system_prompt: |
3
+ Call the echo fixture tool with a short text argument. Then call
4
+ emit_stage_envelope with status success, artifacts [], a short summary,
5
+ and payload { "echoed": "<the text the echo tool returned>" } so the
6
+ operator can inspect the handoff. Do not call ask_operator. Do not emit
7
+ to ask the operator a question.
8
+ model: cursor/auto
9
+ io:
10
+ input:
11
+ schema:
12
+ type: object
13
+ output:
14
+ schema:
15
+ type: object
16
+ required:
17
+ - echoed
18
+ properties:
19
+ echoed:
20
+ type: string