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,235 @@
1
+ import { existsSync, mkdirSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { bareCachePath, ensureBareCache, } from "../git/cache.js";
4
+ import { GitError } from "../git/errors.js";
5
+ import { catFileCommit, checkRefFormat, deleteBranch, resolveRef, revParse, worktreeAdd, worktreePrune, worktreeRemove, } from "../git/operations.js";
6
+ import { ensureGlobalHome, globalStageflowHome } from "../project/globalHome.js";
7
+ const DEFAULT_BRANCH_TEMPLATE = "stageflow/run-<runId>";
8
+ const FULL_SHA_RE = /^[0-9a-f]{40}$/i;
9
+ export function derivedBindingKindFromMeta(meta) {
10
+ if (meta.repository != null && meta.repository !== "") {
11
+ return "repository";
12
+ }
13
+ if (meta.checkout_root != null && meta.checkout_root !== "") {
14
+ return "checkout";
15
+ }
16
+ return "unbound";
17
+ }
18
+ export function worktreePathForRun(runId) {
19
+ return path.join(globalStageflowHome(), "worktrees", runId);
20
+ }
21
+ function renderBranchTemplate(template, runId, taskId) {
22
+ return template.replaceAll("<runId>", runId).replaceAll("<taskId>", taskId);
23
+ }
24
+ export function resolveRunBranchTemplate(task) {
25
+ const fromTask = task.run_branch_template?.trim();
26
+ if (fromTask)
27
+ return fromTask;
28
+ const fromEnv = process.env.STAGEFLOW_RUN_BRANCH_TEMPLATE?.trim();
29
+ if (fromEnv)
30
+ return fromEnv;
31
+ return DEFAULT_BRANCH_TEMPLATE;
32
+ }
33
+ export class StartLinkError extends Error {
34
+ code;
35
+ status;
36
+ stderr;
37
+ constructor(message, options) {
38
+ super(message);
39
+ this.name = "StartLinkError";
40
+ this.code = options.code;
41
+ this.status = options.status;
42
+ this.stderr = options.stderr;
43
+ }
44
+ }
45
+ function mapGitCode(code, phase) {
46
+ switch (code) {
47
+ case "auth_failed":
48
+ return { code: "repository_auth_failed", status: 401 };
49
+ case "repo_not_found":
50
+ return { code: "repository_not_found", status: 404 };
51
+ case "ref_not_found":
52
+ return { code: "ref_not_found", status: 404 };
53
+ case "network":
54
+ case "timeout":
55
+ return { code: "repository_fetch_failed", status: 502 };
56
+ case "disk_full":
57
+ return { code: "insufficient_disk", status: 507 };
58
+ case "git_missing":
59
+ return { code: "git_missing", status: 500 };
60
+ default:
61
+ if (phase === "worktree") {
62
+ return { code: "worktree_create_failed", status: 500 };
63
+ }
64
+ if (phase === "resolve") {
65
+ return { code: "ref_not_found", status: 404 };
66
+ }
67
+ return { code: "repository_fetch_failed", status: 502 };
68
+ }
69
+ }
70
+ export function throwMappedGitError(err, phase) {
71
+ if (err instanceof StartLinkError)
72
+ throw err;
73
+ if (err instanceof GitError) {
74
+ const mapped = mapGitCode(err.code, phase);
75
+ throw new StartLinkError(err.message, {
76
+ code: mapped.code,
77
+ status: mapped.status,
78
+ stderr: err.stderr,
79
+ });
80
+ }
81
+ throw err;
82
+ }
83
+ async function runRollbackThunks(thunks) {
84
+ for (const thunk of thunks) {
85
+ try {
86
+ await thunk();
87
+ }
88
+ catch (cleanupErr) {
89
+ console.error(`repository link rollback failed: ${cleanupErr instanceof Error ? cleanupErr.message : String(cleanupErr)}`);
90
+ }
91
+ }
92
+ }
93
+ export async function reclaimWorkspaceBinding(meta, options) {
94
+ if (derivedBindingKindFromMeta(meta) !== "repository") {
95
+ return;
96
+ }
97
+ const cachePath = bareCachePath(meta.repository);
98
+ try {
99
+ await worktreeRemove(cachePath, meta.checkout_root);
100
+ }
101
+ catch {
102
+ }
103
+ try {
104
+ await worktreePrune(cachePath);
105
+ }
106
+ catch {
107
+ }
108
+ if (options?.keepRunBranch) {
109
+ return;
110
+ }
111
+ try {
112
+ await deleteBranch(cachePath, meta.run_branch);
113
+ }
114
+ catch {
115
+ }
116
+ }
117
+ export async function reclaimWorkspaceOnRunSucceeded(store, runId) {
118
+ try {
119
+ const meta = await store.readRunMeta(runId);
120
+ await reclaimWorkspaceBinding(meta, { keepRunBranch: true });
121
+ }
122
+ catch (err) {
123
+ console.error(`reclaimWorkspaceOnRunSucceeded: failed for ${runId}: ${err instanceof Error ? err.message : String(err)}`);
124
+ }
125
+ }
126
+ export async function materializeWorkspaceBinding(options) {
127
+ const { runId, task, binding } = options;
128
+ const rollbacks = [];
129
+ const rollback = async () => runRollbackThunks(rollbacks);
130
+ if (binding.kind === "unbound") {
131
+ return { materialized: { runId }, rollback };
132
+ }
133
+ if (binding.kind === "checkout") {
134
+ const checkoutRoot = options.checkoutRoot;
135
+ if (checkoutRoot === undefined) {
136
+ throw new StartLinkError("Checkout path is required", {
137
+ code: "worktree_create_failed",
138
+ status: 500,
139
+ });
140
+ }
141
+ let resolvedSha;
142
+ if (options.pinned?.resolvedSha) {
143
+ resolvedSha = options.pinned.resolvedSha;
144
+ }
145
+ else {
146
+ try {
147
+ const head = await revParse(checkoutRoot, ["HEAD"]);
148
+ if (FULL_SHA_RE.test(head)) {
149
+ resolvedSha = head;
150
+ }
151
+ }
152
+ catch {
153
+ // non-git path checkouts leave resolved_sha null (KD6/KD7)
154
+ }
155
+ }
156
+ return {
157
+ materialized: {
158
+ runId,
159
+ checkoutRoot,
160
+ ...(resolvedSha !== undefined ? { resolvedSha } : {}),
161
+ },
162
+ rollback,
163
+ };
164
+ }
165
+ const repository = binding.repository;
166
+ const refToRecord = options.pinned?.ref ?? binding.ref;
167
+ let resolvedSha;
168
+ let cachePath;
169
+ if (options.pinned) {
170
+ cachePath = bareCachePath(repository);
171
+ const present = existsSync(cachePath) &&
172
+ (await catFileCommit(cachePath, options.pinned.resolvedSha));
173
+ if (!present) {
174
+ throw new StartLinkError(`Pinned SHA is not available in the local cache: ${options.pinned.resolvedSha}`, { code: "pinned_sha_unavailable", status: 404 });
175
+ }
176
+ resolvedSha = options.pinned.resolvedSha;
177
+ }
178
+ else {
179
+ try {
180
+ const ensured = await ensureBareCache(repository, binding.ref);
181
+ cachePath = ensured.cachePath;
182
+ }
183
+ catch (err) {
184
+ throwMappedGitError(err, "fetch");
185
+ }
186
+ try {
187
+ resolvedSha = await resolveRef(cachePath, binding.ref);
188
+ }
189
+ catch (err) {
190
+ throwMappedGitError(err, "resolve");
191
+ }
192
+ }
193
+ const template = resolveRunBranchTemplate(task);
194
+ const runBranch = renderBranchTemplate(template, runId, task.id);
195
+ const branchOk = await checkRefFormat(runBranch);
196
+ if (!branchOk) {
197
+ throw new StartLinkError(`Invalid run branch name from template: ${runBranch}`, { code: "invalid_run_branch", status: 400 });
198
+ }
199
+ ensureGlobalHome();
200
+ const checkoutRoot = worktreePathForRun(runId);
201
+ mkdirSync(path.dirname(checkoutRoot), { recursive: true });
202
+ try {
203
+ await worktreeAdd(cachePath, {
204
+ worktreePath: checkoutRoot,
205
+ branch: runBranch,
206
+ startPoint: resolvedSha,
207
+ });
208
+ }
209
+ catch (err) {
210
+ throwMappedGitError(err, "worktree");
211
+ }
212
+ rollbacks.push(async () => {
213
+ try {
214
+ await worktreeRemove(cachePath, checkoutRoot);
215
+ }
216
+ catch {
217
+ // prune recovers admin state when the dir is already gone
218
+ }
219
+ await worktreePrune(cachePath);
220
+ });
221
+ rollbacks.push(async () => {
222
+ await deleteBranch(cachePath, runBranch);
223
+ });
224
+ return {
225
+ materialized: {
226
+ runId,
227
+ checkoutRoot,
228
+ repository,
229
+ ref: refToRecord,
230
+ resolvedSha,
231
+ runBranch,
232
+ },
233
+ rollback,
234
+ };
235
+ }
@@ -17,7 +17,7 @@ export type ResumeTimedOutContext = {
17
17
  maxActiveStagesPerRun: number;
18
18
  operatorCatalog?: OperatorCatalog;
19
19
  };
20
- export declare function assertTimedOutStageEligible(status: string, events: ReadonlyArray<{
20
+ export declare function assertResumableStage(status: string, events: ReadonlyArray<{
21
21
  event: string;
22
22
  reason?: string;
23
23
  }>): {
@@ -11,11 +11,14 @@ import { openStageAttempt, } from "./stageAttemptBootstrap.js";
11
11
  import { buildStageRoots, withResolvedAuthPath } from "./stageRoots.js";
12
12
  import { isStageTimeoutReason, lastFailedReason, } from "../agent/stageTimeout.js";
13
13
  import { deriveExecutionPatchFromEvent } from "../runstore/stageExecution.js";
14
- export function assertTimedOutStageEligible(status, events) {
14
+ export function assertResumableStage(status, events) {
15
+ if (status === "interrupted") {
16
+ return { ok: true };
17
+ }
15
18
  if (status !== "failed") {
16
19
  return {
17
20
  ok: false,
18
- reason: `Stage is not timed out (status=${status})`,
21
+ reason: `Stage is not resumable (status=${status})`,
19
22
  status: 409,
20
23
  };
21
24
  }
@@ -49,6 +49,13 @@ export function wrapRunStoreWithChangeBus(store, bus) {
49
49
  await store.updateRunStatus(runId, status);
50
50
  bus.emit({ runId, kind: "status" });
51
51
  };
52
+ const tryUpdateRunStatus = async (runId, status, expectedStatus) => {
53
+ const updated = await store.tryUpdateRunStatus(runId, status, expectedStatus);
54
+ if (updated) {
55
+ bus.emit({ runId, kind: "status" });
56
+ }
57
+ return updated;
58
+ };
52
59
  const appendStageEvent = async (runId, stageId, event, options) => {
53
60
  await store.appendStageEvent(runId, stageId, event, options);
54
61
  if (event.event === "waiting_for_input" || event.event === "resumed") {
@@ -66,6 +73,8 @@ export function wrapRunStoreWithChangeBus(store, bus) {
66
73
  return createRun;
67
74
  if (prop === "updateRunStatus")
68
75
  return updateRunStatus;
76
+ if (prop === "tryUpdateRunStatus")
77
+ return tryUpdateRunStatus;
69
78
  if (prop === "appendStageEvent")
70
79
  return appendStageEvent;
71
80
  const cached = boundCache.get(prop);
@@ -0,0 +1,7 @@
1
+ import type { A2aStore } from "../a2a/store.js";
2
+ import type { RunStore } from "../runstore/port.js";
3
+ /**
4
+ * Hard-delete a run across A2A, workspace, worktree/branch, then store rows last.
5
+ * Filesystem/git step failures are logged and do not abort the sequence (R10).
6
+ */
7
+ export declare function deleteRunEverywhere(store: RunStore, a2aStore: A2aStore, runId: string): Promise<void>;
@@ -0,0 +1,37 @@
1
+ import { rm } from "node:fs/promises";
2
+ import { reclaimWorkspaceBinding } from "./repositoryMaterialize.js";
3
+ /**
4
+ * Hard-delete a run across A2A, workspace, worktree/branch, then store rows last.
5
+ * Filesystem/git step failures are logged and do not abort the sequence (R10).
6
+ */
7
+ export async function deleteRunEverywhere(store, a2aStore, runId) {
8
+ try {
9
+ await a2aStore.deleteByRunId(runId);
10
+ }
11
+ catch (err) {
12
+ console.error(`deleteRunEverywhere: A2A cleanup failed for ${runId}: ${err instanceof Error ? err.message : String(err)}`);
13
+ }
14
+ let meta;
15
+ try {
16
+ meta = await store.readRunMeta(runId);
17
+ }
18
+ catch {
19
+ meta = undefined;
20
+ }
21
+ const workspaceDir = store.getWorkspaceDir(runId);
22
+ try {
23
+ await rm(workspaceDir, { recursive: true, force: true });
24
+ }
25
+ catch (err) {
26
+ console.error(`deleteRunEverywhere: workspace rm failed for ${runId}: ${err instanceof Error ? err.message : String(err)}`);
27
+ }
28
+ if (meta !== undefined) {
29
+ try {
30
+ await reclaimWorkspaceBinding(meta);
31
+ }
32
+ catch (err) {
33
+ console.error(`deleteRunEverywhere: reclaimWorkspaceBinding failed for ${runId}: ${err instanceof Error ? err.message : String(err)}`);
34
+ }
35
+ }
36
+ await store.deleteRun(runId);
37
+ }
@@ -1,32 +1,51 @@
1
1
  import { type RunSubmission } from "../runstore/submission.js";
2
2
  import type { AgentPort, OpaqueAnswer } from "../agent/port.js";
3
3
  import type { InlinePipelineDefinition } from "../types/pipeline.js";
4
+ import { type DiskBreakdown, type FreeSpaceReader } from "../runstore/diskUsage.js";
4
5
  import { type RunStore } from "../runstore/port.js";
5
6
  import type { TaskFile } from "../types/task.js";
6
7
  import { type PipelineRunResult } from "./pipelineRunner.js";
8
+ import { type SkillsPayload } from "./runSkills.js";
7
9
  import { type FeedbackLoopDecisionKind } from "./feedbackLoopDecision.js";
8
10
  import { type RetryStageResult } from "./runRetryCoordinator.js";
9
11
  import { type StageExecutionMode } from "./stageConcurrency.js";
12
+ import type { StageBrowserSupport } from "../browser/browserHost.js";
10
13
  import { StageProcessLauncher } from "./stageProcessLauncher.js";
11
14
  import { StageHitlController, type DeliverAnswerResult, type HitlSeams } from "./stageHitl.js";
12
15
  import { type StartTaskInput } from "./taskInput.js";
16
+ import { type RetentionSweepReport, type RunRetentionSweepOptions } from "./runRetentionSweep.js";
17
+ import type { A2aStore } from "../a2a/store.js";
13
18
  import type { OperatorCatalog } from "./stageAttemptBootstrap.js";
14
- export type BusyCode = "busy_capacity" | "busy_checkout";
19
+ import { type StartFailureCode } from "./repositoryMaterialize.js";
20
+ export type BusyCode = "busy_capacity" | "busy_checkout" | "busy_caller_quota";
21
+ export type { StartFailureCode } from "./repositoryMaterialize.js";
15
22
  export type StartRunResult = {
16
23
  ok: true;
17
24
  runId: string;
18
25
  done: Promise<PipelineRunResult>;
26
+ queued?: boolean;
27
+ queuePosition?: number;
28
+ /** Present when queued because the caller hit its concurrency quota. */
29
+ queuedCode?: "busy_caller_quota";
19
30
  } | {
20
31
  ok: false;
21
32
  reason: string;
22
33
  status?: number;
23
- code?: BusyCode;
34
+ code?: StartFailureCode;
24
35
  activeCount?: number;
25
36
  maxConcurrent?: number;
26
37
  activeRunIds?: string[];
38
+ scope?: "global" | "project" | "caller";
39
+ project_root?: string;
40
+ caller_id?: string;
27
41
  conflictingRunId?: string;
28
42
  conflictingCheckout?: string;
43
+ freeBytes?: number;
44
+ minFreeBytes?: number;
45
+ stderr?: string;
29
46
  };
47
+ export declare const PROJECT_ROOT_UNAVAILABLE_REASON = "project_root_unavailable";
48
+ export declare const INSUFFICIENT_DISK_CANCEL_REASON = "insufficient_disk";
30
49
  export type CapacityHealth = {
31
50
  ok: true;
32
51
  activeRunIds: string[];
@@ -35,6 +54,18 @@ export type CapacityHealth = {
35
54
  slotsAvailable: number;
36
55
  activeStageProcesses: number;
37
56
  maxActiveStageProcesses: number | null;
57
+ disk?: DiskBreakdown;
58
+ stage_env_passthrough?: boolean;
59
+ proxy?: Record<string, unknown>;
60
+ container?: {
61
+ max_old_space_size_mb: number;
62
+ max_active_stage_processes: number;
63
+ memory_limit_bytes: number | null;
64
+ source: string;
65
+ };
66
+ cache?: {
67
+ root: string;
68
+ };
38
69
  };
39
70
  export type StartRunOnceResult = {
40
71
  ok: true;
@@ -64,6 +95,32 @@ export type AbandonStageResult = {
64
95
  reason: string;
65
96
  status?: number;
66
97
  };
98
+ export type CancelRunResult = {
99
+ ok: true;
100
+ runId: string;
101
+ } | {
102
+ ok: false;
103
+ reason: string;
104
+ status?: number;
105
+ };
106
+ export type DeleteRunChannel = "mcp" | "rest" | "cli";
107
+ export type DeleteRunResult = {
108
+ ok: true;
109
+ runId: string;
110
+ } | {
111
+ ok: false;
112
+ reason: string;
113
+ status?: number;
114
+ };
115
+ export type GcRunsChannel = "mcp" | "rest" | "cli" | "periodic";
116
+ export type GcRunsResult = ({
117
+ ok: true;
118
+ } & RetentionSweepReport) | {
119
+ ok: false;
120
+ reason: string;
121
+ status?: number;
122
+ };
123
+ export declare const FORCE_DELETE_CANCEL_REASON = "delete_run: force";
67
124
  export type DecideFeedbackLoopResult = {
68
125
  ok: true;
69
126
  effect: "extended" | "continued" | "abandoned";
@@ -82,21 +139,34 @@ export type StopManualRecoveryResult = {
82
139
  reason: string;
83
140
  status?: number;
84
141
  };
142
+ export declare const STAGEFLOW_AUTO_RESUME_INTERRUPTED = "STAGEFLOW_AUTO_RESUME_INTERRUPTED";
143
+ export declare const STAGEFLOW_MAX_AUTO_RESUMES = "STAGEFLOW_MAX_AUTO_RESUMES";
144
+ export declare function isAutoResumeInterruptedEnabled(env?: NodeJS.ProcessEnv): boolean;
145
+ export declare function parseMaxAutoResumes(env?: NodeJS.ProcessEnv): number;
85
146
  export declare class RunManager {
86
147
  private readonly options;
87
148
  private readonly submissionsInFlight;
88
149
  private readonly active;
150
+ private readonly schedulingHalts;
89
151
  private readonly checkoutLeases;
90
152
  private readonly provisionalIds;
153
+ private readonly admissionQueue;
154
+ private readonly pendingQueuedStarts;
155
+ private readonly queuedDone;
156
+ private admissionDrainInFlight;
91
157
  private readonly resumeInFlight;
92
158
  private readonly retryInFlight;
93
159
  private readonly retryStartOwner;
94
160
  private readonly retryStartWaiters;
95
161
  private trackingGeneration;
96
162
  private maxConcurrent;
163
+ private readonly maxQueued;
164
+ private readonly maxConcurrentPerProject;
165
+ private readonly callerQuotas;
97
166
  private readonly maxActiveStagesPerRun;
98
167
  private readonly executionMode;
99
168
  private readonly stageProcessLauncher;
169
+ private a2aStore;
100
170
  private readonly hitl;
101
171
  private readonly attachedWaiting;
102
172
  private readonly retryCoordinator;
@@ -104,6 +174,7 @@ export declare class RunManager {
104
174
  private readonly cwd;
105
175
  private readonly projectRoot;
106
176
  private readonly isGitProject;
177
+ private acceptingWork;
107
178
  constructor(options: {
108
179
  agent: AgentPort;
109
180
  store: RunStore;
@@ -113,15 +184,48 @@ export declare class RunManager {
113
184
  operatorCatalog?: OperatorCatalog;
114
185
  seams?: HitlSeams;
115
186
  maxConcurrent?: number;
187
+ maxQueued?: number;
188
+ maxConcurrentPerProject?: number;
189
+ /** caller_id → max concurrent active runs for that caller. */
190
+ callerQuotas?: Record<string, number>;
116
191
  maxActiveStagesPerRun?: number;
117
192
  executionMode?: StageExecutionMode;
118
193
  stageProcessLauncher?: StageProcessLauncher;
194
+ browser?: StageBrowserSupport;
195
+ a2aStore?: A2aStore;
196
+ knownWritableProjectRoots?: () => Iterable<string> | Promise<Iterable<string>>;
197
+ freeSpaceReader?: FreeSpaceReader;
198
+ /** Test-only: await before materialize when activating a queued run. */
199
+ onBeforeQueuedMaterialize?: (runId: string) => void | Promise<void>;
119
200
  });
120
201
  getMaxConcurrent(): number;
121
202
  setMaxConcurrent(n: number): CapacityHealth;
122
203
  getActiveCount(): number;
204
+ stopAcceptingWork(): void;
205
+ isAcceptingWork(): boolean;
206
+ drainActiveStages(options: {
207
+ deadlineMs: number;
208
+ isEscalated?: () => boolean;
209
+ }): Promise<{
210
+ forced: boolean;
211
+ }>;
123
212
  getActiveRunIds(): string[];
124
213
  getHealth(): CapacityHealth;
214
+ getPerProjectCapacity(): {
215
+ maxConcurrent: number | undefined;
216
+ projects: Array<{
217
+ project_root: string;
218
+ activeCount: number;
219
+ maxConcurrent: number | undefined;
220
+ }>;
221
+ };
222
+ private countActiveForProject;
223
+ private countActiveForCaller;
224
+ private callerQuotaLimit;
225
+ /** Capacity plus on-demand durable-root disk breakdown (KTD16). */
226
+ getHealthWithDisk(): Promise<CapacityHealth>;
227
+ /** Refresh cached `disk_bytes` for one run after a terminal transition. */
228
+ refreshRunDiskBytes(runId: string): Promise<void>;
125
229
  getHitlController(): StageHitlController;
126
230
  /**
127
231
  * KTD7/KTD8: discover waiting stages from the store; leave waiting; do not
@@ -133,6 +237,9 @@ export declare class RunManager {
133
237
  stageId: string;
134
238
  }>>;
135
239
  hasActiveWorker(runId: string, stageId: string): boolean;
240
+ sweepBrowserSessions(): Promise<{
241
+ closed: string[];
242
+ }>;
136
243
  reconcileOrphanedStages(): Promise<{
137
244
  reconciled: Array<{
138
245
  runId: string;
@@ -140,10 +247,38 @@ export declare class RunManager {
140
247
  reason: string;
141
248
  }>;
142
249
  }>;
250
+ autoResumeInterruptedStages(): Promise<{
251
+ resumed: Array<{
252
+ runId: string;
253
+ stageId: string;
254
+ }>;
255
+ capped: Array<{
256
+ runId: string;
257
+ stageId: string;
258
+ }>;
259
+ skipped: Array<{
260
+ runId: string;
261
+ stageId: string;
262
+ reason: string;
263
+ }>;
264
+ }>;
143
265
  resumeStalledSchedules(): Promise<Array<{
144
266
  runId: string;
145
267
  }>>;
268
+ /** Rebuild in-memory admission queue from persisted `queued` rows (R27). */
269
+ reenqueuePersistedQueuedRuns(): Promise<void>;
146
270
  abandonStage(runId: string, stageId: string): Promise<AbandonStageResult>;
271
+ cancelRun(runId: string, reason: string): Promise<CancelRunResult>;
272
+ setA2aStore(store: A2aStore): void;
273
+ deleteRun(runId: string, options?: {
274
+ force?: boolean;
275
+ channel: DeleteRunChannel;
276
+ }): Promise<DeleteRunResult>;
277
+ gcRuns(options?: {
278
+ execute?: boolean;
279
+ channel?: GcRunsChannel;
280
+ } & Pick<RunRetentionSweepOptions, "now" | "windows" | "env" | "artifactMaxBytes" | "bareCacheTtlMs">): Promise<GcRunsResult>;
281
+ private waitForPromise;
147
282
  startRunOnce(input: Parameters<RunManager["startRun"]>[0], submission: RunSubmission): Promise<StartRunOnceResult>;
148
283
  private startSubmittedRun;
149
284
  startRun(input: StartTaskInput & {
@@ -154,10 +289,24 @@ export declare class RunManager {
154
289
  gitSha?: string;
155
290
  ciPrUrl?: string;
156
291
  ciJobUrl?: string;
292
+ /**
293
+ * Absolute store-key project root from the wire (registered path or
294
+ * seeded-mapped absolute). When set, persisted as run project_root;
295
+ * Host boot / findProjectRoot are not used to override it.
296
+ */
297
+ projectRoot?: string;
298
+ /** Attribution from auth only — never from request body/query. */
299
+ callerId?: string | null;
300
+ skills?: SkillsPayload;
157
301
  }, submission?: RunSubmission): Promise<StartRunResult>;
158
- rerun(runId: string): Promise<StartRunResult>;
302
+ rerun(runId: string, options?: {
303
+ pinned?: boolean;
304
+ callerId?: string | null;
305
+ }): Promise<StartRunResult>;
159
306
  retryStage(runId: string, stageId: string): Promise<RetryStageResult>;
160
- resumeTimedOutStage(runId: string, stageId: string): Promise<RetryStageResult>;
307
+ resumeTimedOutStage(runId: string, stageId: string, options?: {
308
+ source?: "explicit" | "auto";
309
+ }): Promise<RetryStageResult>;
161
310
  recoverManualStage(runId: string, stageId: string, guidance?: string): Promise<RetryStageResult>;
162
311
  recoverManualStageUntilStop(runId: string, stageId: string, guidance?: string): Promise<{
163
312
  ok: true;
@@ -200,10 +349,25 @@ export declare class RunManager {
200
349
  reason?: string;
201
350
  }): Promise<DecideFeedbackLoopResult>;
202
351
  private resumeViaSubprocess;
352
+ /**
353
+ * A resumed stage whose after-phase verification failed is repaired by the
354
+ * same policy the scheduler applies to a first-launch failure. Returns the
355
+ * freshly created attempt, or undefined when the failure is final.
356
+ */
357
+ private scheduleRepairAfterVerifyFailure;
203
358
  private reconstructAndContinue;
204
359
  private reserveAndStartPipeline;
205
360
  private busyFailure;
361
+ private insufficientDiskFailure;
362
+ private checkDiskFloorAdmission;
363
+ private isProjectRootAvailable;
364
+ private tryAdmitOrEnqueue;
206
365
  private tryReserve;
366
+ private ensureQueuedDone;
367
+ private resolveQueuedDone;
368
+ private attachQueuedDone;
369
+ private drainAdmissionQueue;
370
+ private startDequeuedAdmission;
207
371
  private clearReservation;
208
372
  private track;
209
373
  private tryResumeStalledSchedule;
@@ -217,4 +381,5 @@ export declare class RunManager {
217
381
  private quarantineAttachRun;
218
382
  private untrackIfGeneration;
219
383
  private removeActiveEntry;
384
+ private ensureSchedulingHalt;
220
385
  }