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.
- package/README.md +14 -3
- package/builtin-skills/browser/SKILL.md +42 -0
- package/dist/a2a/contracts.d.ts +1 -0
- package/dist/a2a/contracts.js +1 -0
- package/dist/a2a/registry.d.ts +2 -0
- package/dist/a2a/registry.js +20 -1
- package/dist/a2a/server.d.ts +7 -0
- package/dist/a2a/server.js +5 -2
- package/dist/a2a/service.d.ts +1 -1
- package/dist/a2a/service.js +57 -8
- package/dist/a2a/store.d.ts +8 -5
- package/dist/a2a/store.js +24 -67
- package/dist/agent/activity.d.ts +3 -0
- package/dist/agent/bootProviderConfig.d.ts +21 -0
- package/dist/agent/bootProviderConfig.js +74 -0
- package/dist/agent/claudeAdapter.js +2 -2
- package/dist/agent/cursorProvider.d.ts +2 -0
- package/dist/agent/cursorProvider.js +30 -5
- package/dist/agent/fakeAgent.d.ts +1 -0
- package/dist/agent/fakeAgent.js +13 -0
- package/dist/agent/piAdapter.d.ts +11 -24
- package/dist/agent/piAdapter.js +107 -50
- package/dist/agent/piIsolatedMcp.d.ts +2 -0
- package/dist/agent/piIsolatedMcp.js +10 -2
- package/dist/agent/piSessionFactory.d.ts +38 -0
- package/dist/agent/piSessionFactory.js +60 -0
- package/dist/agent/port.d.ts +8 -0
- package/dist/agent/streamLogRedact.d.ts +7 -1
- package/dist/agent/streamLogRedact.js +26 -11
- package/dist/browser/anchor.d.ts +27 -0
- package/dist/browser/anchor.js +127 -0
- package/dist/browser/auditSink.d.ts +38 -0
- package/dist/browser/auditSink.js +34 -0
- package/dist/browser/browserHost.d.ts +86 -0
- package/dist/browser/browserHost.js +7 -0
- package/dist/browser/browserSweep.d.ts +14 -0
- package/dist/browser/browserSweep.js +54 -0
- package/dist/browser/browserTeardown.d.ts +56 -0
- package/dist/browser/browserTeardown.js +235 -0
- package/dist/browser/fakeRemoteBrowserHost.d.ts +2 -0
- package/dist/browser/fakeRemoteBrowserHost.js +34 -0
- package/dist/browser/gateHandoff.d.ts +25 -0
- package/dist/browser/gateHandoff.js +83 -0
- package/dist/browser/humanLogin.d.ts +18 -0
- package/dist/browser/humanLogin.js +34 -0
- package/dist/browser/keyProvider.d.ts +10 -0
- package/dist/browser/keyProvider.js +39 -0
- package/dist/browser/localBrowserHost.d.ts +10 -0
- package/dist/browser/localBrowserHost.js +152 -0
- package/dist/browser/localProfileLock.d.ts +2 -0
- package/dist/browser/localProfileLock.js +218 -0
- package/dist/browser/localProfileStore.d.ts +5 -0
- package/dist/browser/localProfileStore.js +91 -0
- package/dist/browser/loginCheck.d.ts +53 -0
- package/dist/browser/loginCheck.js +147 -0
- package/dist/browser/memoryProfileLock.d.ts +2 -0
- package/dist/browser/memoryProfileLock.js +53 -0
- package/dist/browser/memoryProfileStore.d.ts +2 -0
- package/dist/browser/memoryProfileStore.js +31 -0
- package/dist/browser/navigationAudit.d.ts +16 -0
- package/dist/browser/navigationAudit.js +53 -0
- package/dist/browser/persistedEnv.d.ts +3 -0
- package/dist/browser/persistedEnv.js +15 -0
- package/dist/browser/profileLock.d.ts +40 -0
- package/dist/browser/profileLock.js +10 -0
- package/dist/browser/profileStore.d.ts +23 -0
- package/dist/browser/profileStore.js +39 -0
- package/dist/browser/runLiveness.d.ts +13 -0
- package/dist/browser/runLiveness.js +39 -0
- package/dist/browser/sitePolicy.d.ts +10 -0
- package/dist/browser/sitePolicy.js +61 -0
- package/dist/browser/stageBrowserEnv.d.ts +22 -0
- package/dist/browser/stageBrowserEnv.js +147 -0
- package/dist/browser/stageProfileLock.d.ts +17 -0
- package/dist/browser/stageProfileLock.js +39 -0
- package/dist/cli/artifactCommand.js +9 -16
- package/dist/cli/backupCommand.d.ts +9 -0
- package/dist/cli/backupCommand.js +111 -0
- package/dist/cli/browserCommand.d.ts +44 -0
- package/dist/cli/browserCommand.js +472 -0
- package/dist/cli/debugRunCommand.d.ts +10 -0
- package/dist/cli/debugRunCommand.js +109 -0
- package/dist/cli/doctorCommand.d.ts +32 -0
- package/dist/cli/doctorCommand.js +453 -0
- package/dist/cli/envelopeCommand.js +9 -2
- package/dist/cli/exportAllCommand.d.ts +55 -0
- package/dist/cli/exportAllCommand.js +218 -0
- package/dist/cli/exportRunCommand.js +23 -21
- package/dist/cli/hostClient.d.ts +41 -3
- package/dist/cli/hostClient.js +129 -14
- package/dist/cli/initCommand.d.ts +1 -0
- package/dist/cli/initCommand.js +23 -7
- package/dist/cli/initTemplates.d.ts +5 -2
- package/dist/cli/initTemplates.js +32 -2
- package/dist/cli/resolveSafeOutPath.d.ts +2 -0
- package/dist/cli/resolveSafeOutPath.js +40 -0
- package/dist/cli/restoreCommand.d.ts +10 -0
- package/dist/cli/restoreCommand.js +90 -0
- package/dist/cli/runCommand.d.ts +3 -2
- package/dist/cli/runCommand.js +93 -11
- package/dist/cli/runOutput.d.ts +4 -0
- package/dist/cli/runOutput.js +33 -7
- package/dist/cli/runStageCommand.d.ts +1 -0
- package/dist/cli/runStageCommand.js +44 -25
- package/dist/cli/runsCommand.d.ts +1 -1
- package/dist/cli/runsCommand.js +168 -10
- package/dist/cli/triggerCommand.d.ts +12 -0
- package/dist/cli/triggerCommand.js +183 -0
- package/dist/cli/validateCommand.d.ts +1 -1
- package/dist/cli/validateCommand.js +23 -6
- package/dist/cli.js +202 -32
- package/dist/config/browseCatalog.d.ts +1 -0
- package/dist/config/browseCatalog.js +5 -4
- package/dist/config/builtinSkills.d.ts +4 -0
- package/dist/config/builtinSkills.js +23 -0
- package/dist/config/catalogRelativePath.d.ts +63 -0
- package/dist/config/catalogRelativePath.js +126 -0
- package/dist/config/configOrigin.d.ts +27 -0
- package/dist/config/configOrigin.js +59 -0
- package/dist/config/createTrigger.d.ts +27 -0
- package/dist/config/createTrigger.js +232 -0
- package/dist/config/draftPackage.d.ts +117 -0
- package/dist/config/draftPackage.js +550 -0
- package/dist/config/ensureCatalogScanRoot.d.ts +16 -0
- package/dist/config/ensureCatalogScanRoot.js +73 -0
- package/dist/config/hostConfig.d.ts +57 -0
- package/dist/config/hostConfig.js +360 -0
- package/dist/config/listSkills.d.ts +26 -0
- package/dist/config/listSkills.js +206 -5
- package/dist/config/loadOutcome.d.ts +7 -1
- package/dist/config/loadPipeline.js +39 -2
- package/dist/config/loadStage.js +25 -0
- package/dist/config/loadStageflowManifest.js +25 -0
- package/dist/config/loadTask.d.ts +2 -0
- package/dist/config/loadTask.js +57 -18
- package/dist/config/loadTrigger.d.ts +9 -0
- package/dist/config/loadTrigger.js +120 -0
- package/dist/config/materializeStageModels.js +5 -1
- package/dist/config/mergePipelineIncludes.d.ts +3 -0
- package/dist/config/mergePipelineIncludes.js +19 -0
- package/dist/config/migrateYaml.js +6 -11
- package/dist/config/multiProjectCatalog.d.ts +32 -0
- package/dist/config/multiProjectCatalog.js +150 -0
- package/dist/config/normalizePipelineStageEntry.js +27 -1
- package/dist/config/parseCompletionContract.js +6 -0
- package/dist/config/pipelineStageKeys.js +3 -0
- package/dist/config/publishDraftPackage.d.ts +7 -0
- package/dist/config/publishDraftPackage.js +25 -0
- package/dist/config/resolveCatalogContext.js +1 -1
- package/dist/config/resolveCatalogRoots.d.ts +27 -0
- package/dist/config/resolveCatalogRoots.js +76 -0
- package/dist/config/resolveModel.d.ts +7 -1
- package/dist/config/resolveModel.js +11 -1
- package/dist/config/resolvePipelineDag.js +1 -1
- package/dist/config/resolveStageMcpServers.d.ts +9 -1
- package/dist/config/resolveStageMcpServers.js +36 -9
- package/dist/config/scanCatalogPaths.d.ts +1 -1
- package/dist/config/scanCatalogPaths.js +6 -2
- package/dist/config/secretFromEnvOrFile.d.ts +9 -0
- package/dist/config/secretFromEnvOrFile.js +34 -0
- package/dist/config/seededCatalog.d.ts +11 -0
- package/dist/config/seededCatalog.js +29 -0
- package/dist/config/stageBrowser.d.ts +12 -0
- package/dist/config/stageBrowser.js +118 -0
- package/dist/config/toolRequires.d.ts +24 -0
- package/dist/config/toolRequires.js +115 -0
- package/dist/config/triggerCatalog.d.ts +10 -0
- package/dist/config/triggerCatalog.js +37 -0
- package/dist/config/validateCatalog.d.ts +17 -3
- package/dist/config/validateCatalog.js +223 -3
- package/dist/config/validateCompletionContract.js +8 -0
- package/dist/diagnostics/checks.d.ts +39 -0
- package/dist/diagnostics/checks.js +135 -0
- package/dist/envelope/preEmitChecks.d.ts +1 -1
- package/dist/envelope/preEmitChecks.js +8 -0
- package/dist/errors/codes.d.ts +14 -0
- package/dist/errors/codes.js +59 -0
- package/dist/git/cache.d.ts +14 -0
- package/dist/git/cache.js +150 -0
- package/dist/git/credentials.d.ts +9 -0
- package/dist/git/credentials.js +88 -0
- package/dist/git/errors.d.ts +20 -0
- package/dist/git/errors.js +94 -0
- package/dist/git/exec.d.ts +16 -0
- package/dist/git/exec.js +135 -0
- package/dist/git/operations.d.ts +29 -0
- package/dist/git/operations.js +153 -0
- package/dist/git/version.d.ts +1 -0
- package/dist/git/version.js +10 -0
- package/dist/logging/audit.d.ts +16 -0
- package/dist/logging/audit.js +19 -0
- package/dist/logging/commonWords.d.ts +2 -0
- package/dist/logging/commonWords.js +13 -0
- package/dist/logging/logger.d.ts +49 -0
- package/dist/logging/logger.js +193 -0
- package/dist/logging/namedSecrets.d.ts +6 -0
- package/dist/logging/namedSecrets.js +58 -0
- package/dist/logging/redact.d.ts +17 -0
- package/dist/logging/redact.js +105 -0
- package/dist/mcp/catalogTools.js +492 -81
- package/dist/mcp/checkoutTools.d.ts +52 -0
- package/dist/mcp/checkoutTools.js +332 -0
- package/dist/mcp/controlTools.js +182 -6
- package/dist/mcp/deps.d.ts +3 -0
- package/dist/mcp/getStartedTool.d.ts +3 -0
- package/dist/mcp/getStartedTool.js +62 -0
- package/dist/mcp/readArtifact.d.ts +11 -0
- package/dist/mcp/readArtifact.js +46 -30
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/tools.js +6 -0
- package/dist/mcp/triggerTools.d.ts +3 -0
- package/dist/mcp/triggerTools.js +176 -0
- package/dist/net/proxy.d.ts +14 -0
- package/dist/net/proxy.js +78 -0
- package/dist/operatorAgent/docsRetrieval.d.ts +40 -0
- package/dist/operatorAgent/docsRetrieval.js +269 -0
- package/dist/operatorAgent/draftContext.d.ts +16 -0
- package/dist/operatorAgent/draftContext.js +68 -0
- package/dist/operatorAgent/fakeHost.d.ts +39 -0
- package/dist/operatorAgent/fakeHost.js +92 -0
- package/dist/operatorAgent/host.d.ts +40 -0
- package/dist/operatorAgent/host.js +179 -0
- package/dist/operatorAgent/index.d.ts +9 -0
- package/dist/operatorAgent/index.js +8 -0
- package/dist/operatorAgent/piModel.d.ts +80 -0
- package/dist/operatorAgent/piModel.js +528 -0
- package/dist/operatorAgent/profiles/workshopAuthor.d.ts +23 -0
- package/dist/operatorAgent/profiles/workshopAuthor.js +338 -0
- package/dist/operatorAgent/profiles/workshopAuthorPlaybook.d.ts +6 -0
- package/dist/operatorAgent/profiles/workshopAuthorPlaybook.js +103 -0
- package/dist/operatorAgent/profiles/workshopAuthorTools.d.ts +57 -0
- package/dist/operatorAgent/profiles/workshopAuthorTools.js +623 -0
- package/dist/operatorAgent/proposals.d.ts +32 -0
- package/dist/operatorAgent/proposals.js +144 -0
- package/dist/operatorAgent/types.d.ts +128 -0
- package/dist/operatorAgent/types.js +1 -0
- package/dist/package-meta.d.ts +2 -1
- package/dist/package-meta.js +2 -1
- package/dist/preflight/bash.d.ts +8 -0
- package/dist/preflight/bash.js +34 -0
- package/dist/preflight/claudeRoot.d.ts +11 -0
- package/dist/preflight/claudeRoot.js +23 -0
- package/dist/preflight/mcpCommands.d.ts +8 -0
- package/dist/preflight/mcpCommands.js +36 -0
- package/dist/preflight/pipelinePreflight.d.ts +40 -0
- package/dist/preflight/pipelinePreflight.js +192 -0
- package/dist/preflight/tls.d.ts +6 -0
- package/dist/preflight/tls.js +18 -0
- package/dist/preflight/toolchain.d.ts +45 -0
- package/dist/preflight/toolchain.js +219 -0
- package/dist/project/findManifestRoot.d.ts +3 -0
- package/dist/project/findManifestRoot.js +35 -0
- package/dist/project/findProjectRoot.js +3 -4
- package/dist/project/globalHome.d.ts +7 -0
- package/dist/project/globalHome.js +63 -2
- package/dist/project/resolveProjectContext.js +2 -2
- package/dist/project/resolveStageflowContext.d.ts +7 -0
- package/dist/project/resolveStageflowContext.js +46 -30
- package/dist/projection/projectRun.d.ts +2 -1
- package/dist/projection/projectRun.js +1 -0
- package/dist/runstore/assertTmpdir.d.ts +1 -0
- package/dist/runstore/assertTmpdir.js +25 -0
- package/dist/runstore/backup.d.ts +52 -0
- package/dist/runstore/backup.js +292 -0
- package/dist/runstore/createStore.d.ts +18 -1
- package/dist/runstore/createStore.js +64 -5
- package/dist/runstore/debugBundle.d.ts +60 -0
- package/dist/runstore/debugBundle.js +143 -0
- package/dist/runstore/diskUsage.d.ts +50 -0
- package/dist/runstore/diskUsage.js +214 -0
- package/dist/runstore/exportRunPayload.d.ts +8 -0
- package/dist/runstore/exportRunPayload.js +23 -0
- package/dist/runstore/normalizeCatalogPath.d.ts +1 -0
- package/dist/runstore/normalizeCatalogPath.js +10 -0
- package/dist/runstore/paths.d.ts +5 -0
- package/dist/runstore/paths.js +145 -1
- package/dist/runstore/port.d.ts +139 -13
- package/dist/runstore/port.js +8 -1
- package/dist/runstore/restore.d.ts +81 -0
- package/dist/runstore/restore.js +355 -0
- package/dist/runstore/retention.d.ts +27 -0
- package/dist/runstore/retention.js +74 -0
- package/dist/runstore/runManifest.d.ts +146 -0
- package/dist/runstore/runManifest.js +288 -0
- package/dist/runstore/runProjection.d.ts +3 -1
- package/dist/runstore/runProjection.js +63 -1
- package/dist/runstore/sqlite/SqliteRunStore.d.ts +35 -3
- package/dist/runstore/sqlite/SqliteRunStore.js +442 -219
- package/dist/runstore/sqlite/applyStorePragmas.d.ts +39 -0
- package/dist/runstore/sqlite/applyStorePragmas.js +145 -0
- package/dist/runstore/sqlite/migrations/001-baseline.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/001-baseline.js +10 -0
- package/dist/runstore/sqlite/migrations/002-repository-binding.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/002-repository-binding.js +29 -0
- package/dist/runstore/sqlite/migrations/003-run-lifecycle.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/003-run-lifecycle.js +28 -0
- package/dist/runstore/sqlite/migrations/004-auto-resume-count.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/004-auto-resume-count.js +19 -0
- package/dist/runstore/sqlite/migrations/005-config-origins.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/005-config-origins.js +19 -0
- package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.js +28 -0
- package/dist/runstore/sqlite/migrations/007-projects-registry.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/007-projects-registry.js +31 -0
- package/dist/runstore/sqlite/migrations/008-triggers-table.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/008-triggers-table.js +19 -0
- package/dist/runstore/sqlite/migrations/009-trigger-next-run.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/009-trigger-next-run.js +19 -0
- package/dist/runstore/sqlite/migrations/010-trigger-adapter-state.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/010-trigger-adapter-state.js +17 -0
- package/dist/runstore/sqlite/migrations/index.d.ts +21 -0
- package/dist/runstore/sqlite/migrations/index.js +78 -0
- package/dist/runstore/sqlite/schema.d.ts +20 -1
- package/dist/runstore/sqlite/schema.js +277 -1
- package/dist/runstore/sqlite/storeOpenError.d.ts +6 -0
- package/dist/runstore/sqlite/storeOpenError.js +11 -0
- package/dist/runstore/sqlite/storeSchemaError.d.ts +5 -0
- package/dist/runstore/sqlite/storeSchemaError.js +8 -0
- package/dist/runstore/stageExecution.js +3 -0
- package/dist/runstore/storeFilesystem.d.ts +32 -0
- package/dist/runstore/storeFilesystem.js +148 -0
- package/dist/runstore/trackProjection.js +2 -0
- package/dist/runstore/workspaceLayout.d.ts +13 -0
- package/dist/runstore/workspaceLayout.js +76 -0
- package/dist/runtime/answerResume.d.ts +1 -0
- package/dist/runtime/answerResume.js +3 -1
- package/dist/runtime/completionCheckRunner.d.ts +15 -1
- package/dist/runtime/completionCheckRunner.js +67 -7
- package/dist/runtime/containerLimits.d.ts +16 -0
- package/dist/runtime/containerLimits.js +84 -0
- package/dist/runtime/credentialBinding.d.ts +2 -0
- package/dist/runtime/credentialBinding.js +3 -0
- package/dist/runtime/credentialMaterialisation.d.ts +28 -0
- package/dist/runtime/credentialMaterialisation.js +128 -0
- package/dist/runtime/emailSource.d.ts +72 -0
- package/dist/runtime/emailSource.js +304 -0
- package/dist/runtime/gitCheckoutCapability.js +7 -13
- package/dist/runtime/githubPollSource.d.ts +86 -0
- package/dist/runtime/githubPollSource.js +284 -0
- package/dist/runtime/pipelineRunner.d.ts +40 -1
- package/dist/runtime/pipelineRunner.js +181 -17
- package/dist/runtime/pipelineScheduler.d.ts +17 -0
- package/dist/runtime/pipelineScheduler.js +220 -28
- package/dist/runtime/reloadRunCatalog.js +6 -1
- package/dist/runtime/repositoryMaterialize.d.ts +47 -0
- package/dist/runtime/repositoryMaterialize.js +235 -0
- package/dist/runtime/resumeTimedOut.d.ts +1 -1
- package/dist/runtime/resumeTimedOut.js +5 -2
- package/dist/runtime/runChangeBus.js +9 -0
- package/dist/runtime/runDeletion.d.ts +7 -0
- package/dist/runtime/runDeletion.js +37 -0
- package/dist/runtime/runManager.d.ts +169 -4
- package/dist/runtime/runManager.js +1748 -83
- package/dist/runtime/runRetentionSweep.d.ts +31 -0
- package/dist/runtime/runRetentionSweep.js +328 -0
- package/dist/runtime/runRetryCoordinator.d.ts +4 -0
- package/dist/runtime/runRetryCoordinator.js +20 -2
- package/dist/runtime/runSkills.d.ts +40 -0
- package/dist/runtime/runSkills.js +173 -0
- package/dist/runtime/scheduleSource.d.ts +38 -0
- package/dist/runtime/scheduleSource.js +119 -0
- package/dist/runtime/settingsFile.d.ts +5 -0
- package/dist/runtime/settingsFile.js +61 -54
- package/dist/runtime/stageAttemptBootstrap.d.ts +5 -1
- package/dist/runtime/stageAttemptBootstrap.js +250 -27
- package/dist/runtime/stageCacheEnv.d.ts +6 -0
- package/dist/runtime/stageCacheEnv.js +34 -0
- package/dist/runtime/stageConcurrency.d.ts +2 -1
- package/dist/runtime/stageConcurrency.js +4 -2
- package/dist/runtime/stageEnvironment.d.ts +38 -0
- package/dist/runtime/stageEnvironment.js +194 -0
- package/dist/runtime/stageHitl.d.ts +1 -0
- package/dist/runtime/stageHitl.js +5 -1
- package/dist/runtime/stageProcessLauncher.d.ts +20 -0
- package/dist/runtime/stageProcessLauncher.js +236 -41
- package/dist/runtime/stageRecovery.d.ts +3 -1
- package/dist/runtime/stageRecovery.js +19 -4
- package/dist/runtime/stageRoots.d.ts +38 -1
- package/dist/runtime/stageRoots.js +118 -0
- package/dist/runtime/stageRunner.d.ts +6 -0
- package/dist/runtime/stageRunner.js +32 -6
- package/dist/runtime/stageSecretDecl.d.ts +9 -0
- package/dist/runtime/stageSecretDecl.js +102 -0
- package/dist/runtime/stageSecrets.d.ts +40 -0
- package/dist/runtime/stageSecrets.js +181 -0
- package/dist/runtime/stageStreamLog.d.ts +1 -0
- package/dist/runtime/stageStreamLog.js +2 -1
- package/dist/runtime/stageWorker.d.ts +3 -2
- package/dist/runtime/stageWorker.js +58 -10
- package/dist/runtime/stageWorkerProtocol.d.ts +5 -0
- package/dist/runtime/stageWorkerProtocol.js +8 -0
- package/dist/runtime/startPayload.d.ts +32 -0
- package/dist/runtime/startPayload.js +59 -0
- package/dist/runtime/taskInput.js +14 -5
- package/dist/runtime/triggerCatalog.d.ts +6 -0
- package/dist/runtime/triggerCatalog.js +24 -0
- package/dist/runtime/triggerEventMatch.d.ts +2 -0
- package/dist/runtime/triggerEventMatch.js +6 -0
- package/dist/runtime/triggerPort.d.ts +14 -0
- package/dist/runtime/triggerPort.js +1 -0
- package/dist/runtime/triggerRunner.d.ts +17 -0
- package/dist/runtime/triggerRunner.js +89 -0
- package/dist/runtime/verifiedStageExecution.d.ts +8 -0
- package/dist/runtime/verifiedStageExecution.js +16 -1
- package/dist/runtime/webhookSignature.d.ts +1 -0
- package/dist/runtime/webhookSignature.js +12 -0
- package/dist/runtime/workspaceBinding.d.ts +20 -0
- package/dist/runtime/workspaceBinding.js +60 -0
- package/dist/server/allowedHosts.d.ts +19 -0
- package/dist/server/allowedHosts.js +179 -0
- package/dist/server/bootstrap.d.ts +42 -2
- package/dist/server/bootstrap.js +273 -5
- package/dist/server/controlToken.d.ts +47 -0
- package/dist/server/controlToken.js +254 -0
- package/dist/server/createHttpHost.d.ts +11 -2
- package/dist/server/createHttpHost.js +106 -10
- package/dist/server/ensureGlobalService.d.ts +5 -1
- package/dist/server/ensureGlobalService.js +35 -1
- package/dist/server/healthSurfaces.d.ts +6 -0
- package/dist/server/healthSurfaces.js +123 -0
- package/dist/server/http.d.ts +27 -1
- package/dist/server/http.js +2254 -477
- package/dist/server/listenHost.d.ts +5 -0
- package/dist/server/listenHost.js +56 -0
- package/dist/server/mcpHost.d.ts +10 -1
- package/dist/server/mcpHost.js +36 -6
- package/dist/server/operatorResults.d.ts +2 -2
- package/dist/server/operatorResults.js +40 -29
- package/dist/server/requestAuthContext.d.ts +12 -0
- package/dist/server/requestAuthContext.js +21 -0
- package/dist/server/shutdown.d.ts +69 -0
- package/dist/server/shutdown.js +219 -0
- package/dist/server/triggerRoutes.d.ts +15 -0
- package/dist/server/triggerRoutes.js +268 -0
- package/dist/tools/askOperator.d.ts +3 -2
- package/dist/types/completion.d.ts +3 -0
- package/dist/types/pipeline.d.ts +10 -1
- package/dist/types/preEmitCheck.d.ts +7 -0
- package/dist/types/stage.d.ts +22 -0
- package/dist/types/stageflowManifest.d.ts +3 -0
- package/dist/types/task.d.ts +8 -0
- package/dist/types/trigger.d.ts +18 -0
- package/dist/types/trigger.js +1 -0
- package/dist/ui/assets/{index-CSsDued1.css → index-Bv4p1aPK.css} +1 -1
- package/dist/ui/assets/index-CntB4bZR.js +133 -0
- package/dist/ui/index.html +2 -2
- package/dist/workshop/autosave.d.ts +58 -0
- package/dist/workshop/autosave.js +222 -0
- package/dist/workshop/buildStore.d.ts +79 -0
- package/dist/workshop/buildStore.js +326 -0
- package/dist/workshop/chatTurn.d.ts +232 -0
- package/dist/workshop/chatTurn.js +475 -0
- package/dist/workshop/modelSettings.d.ts +18 -0
- package/dist/workshop/modelSettings.js +44 -0
- package/dist/workshop/sessionStore.d.ts +61 -0
- package/dist/workshop/sessionStore.js +254 -0
- package/dist/workshop/workshopPin.d.ts +72 -0
- package/dist/workshop/workshopPin.js +193 -0
- package/examples/README.md +99 -0
- package/examples/archify-on-pr/README.md +213 -0
- package/examples/archify-on-pr/archify-on-pr.pipeline.yaml +19 -0
- package/examples/archify-on-pr/archify-on-pr.task.yaml +19 -0
- package/examples/archify-on-pr/author-diagrams.yaml +106 -0
- package/examples/archify-on-pr/detect-changes.yaml +89 -0
- package/examples/browser-session/README.md +77 -0
- package/examples/browser-session/browser-session.pipeline.yaml +50 -0
- package/examples/browser-session/browser-session.task.yaml +6 -0
- package/examples/browser-session/check-login.yaml +22 -0
- package/examples/browser-session/fixture-server.mjs +64 -0
- package/examples/browser-session/human-login.yaml +31 -0
- package/examples/browser-session/merge.yaml +36 -0
- package/examples/browser-session/work-a.yaml +41 -0
- package/examples/browser-session/work-b.yaml +41 -0
- package/examples/ci-validate/README.md +35 -0
- package/examples/ci-validate/check.yaml +13 -0
- package/examples/ci-validate/ci-demo.pipeline.yaml +4 -0
- package/examples/ci-validate/validate.sh +5 -0
- package/examples/compliance-review-demo/README.md +125 -0
- package/examples/compliance-review-demo/compliance-review-demo.pipeline.yaml +29 -0
- package/examples/compliance-review-demo/connect-account.yaml +47 -0
- package/examples/compliance-review-demo/map-to-control.yaml +123 -0
- package/examples/compliance-review-demo/poll-bucket-config.yaml +103 -0
- package/examples/compliance-review-demo/publish-report.yaml +79 -0
- package/examples/compliance-review-demo/review-verdict.yaml +122 -0
- package/examples/compliance-review-demo/run-compliance-check.yaml +96 -0
- package/examples/compliance-review-demo/store-evidence.yaml +143 -0
- package/examples/conditional-fork/README.md +89 -0
- package/examples/conditional-fork/branch-a.yaml +13 -0
- package/examples/conditional-fork/branch-b.yaml +13 -0
- package/examples/conditional-fork/decide.yaml +35 -0
- package/examples/conditional-fork/fork-demo.pipeline.yaml +20 -0
- package/examples/conditional-fork/fork-demo.task.yaml +8 -0
- package/examples/context7-mcp/README.md +42 -0
- package/examples/context7-mcp/context7-mcp.pipeline.yaml +15 -0
- package/examples/context7-mcp/context7-mcp.task.yaml +4 -0
- package/examples/context7-mcp/fetch-docs.yaml +52 -0
- package/examples/context7-mcp/resolve-library.yaml +31 -0
- package/examples/context7-mcp/write-brief.yaml +52 -0
- package/examples/feature-loop/README.md +104 -0
- package/examples/feature-loop/address-feedback.yaml +148 -0
- package/examples/feature-loop/align.yaml +116 -0
- package/examples/feature-loop/decompose.yaml +86 -0
- package/examples/feature-loop/default-model-hierarchy.task.yaml +58 -0
- package/examples/feature-loop/feature-loop.pipeline.yaml +140 -0
- package/examples/feature-loop/feature-loop.task.yaml +25 -0
- package/examples/feature-loop/implement.yaml +128 -0
- package/examples/feature-loop/plan.yaml +111 -0
- package/examples/feature-loop/publish.yaml +167 -0
- package/examples/feature-loop/review.yaml +146 -0
- package/examples/feature-loop/verify.yaml +106 -0
- package/examples/feedback-loop/README.md +72 -0
- package/examples/feedback-loop/VERIFY.md +208 -0
- package/examples/feedback-loop/continue-only.task.yaml +4 -0
- package/examples/feedback-loop/exhaust-require-continue.task.yaml +6 -0
- package/examples/feedback-loop/exhaust-wait-human.task.yaml +11 -0
- package/examples/feedback-loop/feedback-loop-wait-human.pipeline.yaml +23 -0
- package/examples/feedback-loop/feedback-loop.pipeline.yaml +23 -0
- package/examples/feedback-loop/feedback-loop.task.yaml +4 -0
- package/examples/feedback-loop/implement.yaml +14 -0
- package/examples/feedback-loop/plan.yaml +14 -0
- package/examples/feedback-loop/review.yaml +15 -0
- package/examples/feedback-loop/send-back-once.task.yaml +6 -0
- package/examples/feedback-loop/submit.yaml +12 -0
- package/examples/generic-fan-in/README.md +151 -0
- package/examples/generic-fan-in/clarify.yaml +18 -0
- package/examples/generic-fan-in/generic-fan-in-accepted.pipeline.yaml +19 -0
- package/examples/generic-fan-in/generic-fan-in-accepted.task.yaml +8 -0
- package/examples/generic-fan-in/generic-fan-in.pipeline.yaml +18 -0
- package/examples/generic-fan-in/generic-fan-in.task.yaml +9 -0
- package/examples/generic-fan-in/research.yaml +45 -0
- package/examples/generic-fan-in/synthesize.yaml +66 -0
- package/examples/generic-fan-in/validation.yaml +45 -0
- package/examples/github-release/README.md +78 -0
- package/examples/github-release/draft-release-notes.yaml +64 -0
- package/examples/github-release/github-release.pipeline.yaml +11 -0
- package/examples/github-release/github-release.task.yaml +13 -0
- package/examples/github-release/publish-github-release.yaml +64 -0
- package/examples/hello-world/README.md +28 -0
- package/examples/hello-world/hello.pipeline.yaml +4 -0
- package/examples/hello-world/my-task.task.yaml +6 -0
- package/examples/hello-world/research.yaml +18 -0
- package/examples/mcp-hitl-tour/README.md +113 -0
- package/examples/mcp-hitl-tour/draft-angle.yaml +33 -0
- package/examples/mcp-hitl-tour/draft-short.yaml +32 -0
- package/examples/mcp-hitl-tour/emit-angles.yaml +45 -0
- package/examples/mcp-hitl-tour/gather.yaml +31 -0
- package/examples/mcp-hitl-tour/intake.yaml +62 -0
- package/examples/mcp-hitl-tour/mcp-hitl-tour-exhaust.task.yaml +13 -0
- package/examples/mcp-hitl-tour/mcp-hitl-tour.pipeline.yaml +54 -0
- package/examples/mcp-hitl-tour/mcp-hitl-tour.task.yaml +16 -0
- package/examples/mcp-hitl-tour/polish.yaml +33 -0
- package/examples/mcp-hitl-tour/review.yaml +17 -0
- package/examples/mcp-hitl-tour/ship.yaml +25 -0
- package/examples/oss-issue-contribution/README.md +218 -0
- package/examples/oss-issue-contribution/oss-address-review-feedback.yaml +117 -0
- package/examples/oss-issue-contribution/oss-approve-contribution.yaml +181 -0
- package/examples/oss-issue-contribution/oss-approve-plan.yaml +111 -0
- package/examples/oss-issue-contribution/oss-explain-fix.yaml +108 -0
- package/examples/oss-issue-contribution/oss-explain-issue.yaml +114 -0
- package/examples/oss-issue-contribution/oss-implement-source-fix.yaml +171 -0
- package/examples/oss-issue-contribution/oss-investigate-area.yaml +116 -0
- package/examples/oss-issue-contribution/oss-issue-contribution.pipeline.yaml +125 -0
- package/examples/oss-issue-contribution/oss-issue-intake.yaml +106 -0
- package/examples/oss-issue-contribution/oss-plan-investigation.yaml +112 -0
- package/examples/oss-issue-contribution/oss-plan-review.yaml +109 -0
- package/examples/oss-issue-contribution/oss-reproduce-issue.yaml +140 -0
- package/examples/oss-issue-contribution/oss-review-change.yaml +107 -0
- package/examples/oss-issue-contribution/oss-verify-fix.yaml +130 -0
- package/examples/oss-issue-contribution/oss-write-regression-test.yaml +135 -0
- package/examples/oss-issue-contribution/pi-7629.task.yaml +79 -0
- package/examples/oss-issue-contribution/pi-8919.task.yaml +75 -0
- package/examples/oss-issue-contribution/pydantic-ai-7971.task.yaml +53 -0
- package/examples/oss-quick-fix/README.md +65 -0
- package/examples/oss-quick-fix/implement-fix.yaml +84 -0
- package/examples/oss-quick-fix/oss-quick-fix.pipeline.yaml +35 -0
- package/examples/oss-quick-fix/oss-quick-fix.task.yaml +19 -0
- package/examples/oss-quick-fix/ship-fix.yaml +81 -0
- package/examples/oss-quick-fix/understand-issue.yaml +67 -0
- package/examples/oss-quick-fix/verify-fix.yaml +73 -0
- package/examples/plan-review/README.md +37 -0
- package/examples/plan-review/plan-review-followup.yaml +13 -0
- package/examples/plan-review/plan-review.pipeline.yaml +9 -0
- package/examples/plan-review/plan-review.task.yaml +9 -0
- package/examples/plan-review/plan-review.yaml +25 -0
- package/examples/playwright-mcp/README.md +39 -0
- package/examples/playwright-mcp/playwright-mcp.pipeline.yaml +5 -0
- package/examples/playwright-mcp/playwright-mcp.task.yaml +4 -0
- package/examples/playwright-mcp/screenshot.yaml +40 -0
- package/examples/retry-tour/README.md +75 -0
- package/examples/retry-tour/retry-tour.pipeline.yaml +122 -0
- package/examples/retry-tour/retry-tour.task.yaml +9 -0
- package/examples/route-if-tour/README.md +202 -0
- package/examples/route-if-tour/route-if-tour.pipeline.yaml +950 -0
- package/examples/route-if-tour/route-if-tour.task.yaml +4 -0
- package/examples/route-wiring-smoke-test/01-core-routing.pipeline.yaml +168 -0
- package/examples/route-wiring-smoke-test/02-on-gating.pipeline.yaml +44 -0
- package/examples/route-wiring-smoke-test/03-two-entry-points.pipeline.yaml +28 -0
- package/examples/route-wiring-smoke-test/04-entry-false-equivalent-to-omitted.pipeline.yaml +27 -0
- package/examples/route-wiring-smoke-test/05-fork-choice.pipeline.yaml +110 -0
- package/examples/route-wiring-smoke-test/06-fan-out-fan-in.pipeline.yaml +82 -0
- package/examples/route-wiring-smoke-test/07-loop-human-decision.pipeline.yaml +82 -0
- package/examples/route-wiring-smoke-test/08-skip-fallback-and-multi-on-gate.pipeline.yaml +77 -0
- package/examples/route-wiring-smoke-test/09-multi-loop-targets.pipeline.yaml +102 -0
- package/examples/route-wiring-smoke-test/10-uses-dialect-fork.pipeline.yaml +23 -0
- package/examples/route-wiring-smoke-test/11-sequential-io-handoff.pipeline.yaml +37 -0
- package/examples/route-wiring-smoke-test/12-complex-io-schemas.pipeline.yaml +138 -0
- package/examples/route-wiring-smoke-test/13-ref-io-handoff.pipeline.yaml +84 -0
- package/examples/route-wiring-smoke-test/14-if-eq-gating.pipeline.yaml +50 -0
- package/examples/route-wiring-smoke-test/15-if-all-gated.pipeline.yaml +37 -0
- package/examples/route-wiring-smoke-test/16-if-composition.pipeline.yaml +65 -0
- package/examples/route-wiring-smoke-test/17-if-join.pipeline.yaml +80 -0
- package/examples/route-wiring-smoke-test/README.md +377 -0
- package/examples/route-wiring-smoke-test/rejected/01-reject-legacy-needs.pipeline.yaml +26 -0
- package/examples/route-wiring-smoke-test/rejected/02-reject-legacy-fork.pipeline.yaml +25 -0
- package/examples/route-wiring-smoke-test/rejected/03-reject-legacy-feedback-loop.pipeline.yaml +30 -0
- package/examples/route-wiring-smoke-test/rejected/04-reject-missing-entry.pipeline.yaml +24 -0
- package/examples/route-wiring-smoke-test/rejected/05-reject-unreachable.pipeline.yaml +35 -0
- package/examples/route-wiring-smoke-test/rejected/06-reject-allow-none-without-route-select.pipeline.yaml +37 -0
- package/examples/route-wiring-smoke-test/rejected/07-reject-cycle.pipeline.yaml +27 -0
- package/examples/route-wiring-smoke-test/rejected/08-reject-loop-non-ancestor.pipeline.yaml +42 -0
- package/examples/route-wiring-smoke-test/rejected/09-reject-route-select-leaf.pipeline.yaml +26 -0
- package/examples/route-wiring-smoke-test/rejected/12-reject-loop-replay-unsafe.pipeline.yaml +55 -0
- package/examples/route-wiring-smoke-test/rejected/13-reject-multiple-loop-entries.pipeline.yaml +51 -0
- package/examples/route-wiring-smoke-test/rejected/14-reject-duplicate-stage-id.pipeline.yaml +35 -0
- package/examples/route-wiring-smoke-test/rejected/15-reject-unknown-route-target.pipeline.yaml +15 -0
- package/examples/route-wiring-smoke-test/rejected/16-reject-malformed-route-item.pipeline.yaml +15 -0
- package/examples/route-wiring-smoke-test/rejected/17-reject-io-incompatible.pipeline.yaml +33 -0
- package/examples/route-wiring-smoke-test/rejected/18-reject-nested-io.pipeline.yaml +51 -0
- package/examples/route-wiring-smoke-test/rejected/19-reject-array-item-io.pipeline.yaml +55 -0
- package/examples/route-wiring-smoke-test/rejected/20-reject-closed-io.pipeline.yaml +36 -0
- package/examples/route-wiring-smoke-test/rejected/21-reject-ref-io.pipeline.yaml +42 -0
- package/examples/route-wiring-smoke-test/rejected/22-reject-if-unknown-field.pipeline.yaml +33 -0
- package/examples/route-wiring-smoke-test/rejected/23-reject-if-optional-field.pipeline.yaml +32 -0
- package/examples/route-wiring-smoke-test/rejected/24-reject-if-empty-all.pipeline.yaml +31 -0
- package/examples/route-wiring-smoke-test/rejected/25-reject-if-gt-on-string.pipeline.yaml +33 -0
- package/examples/route-wiring-smoke-test/rejected/26-reject-if-optional-nested.pipeline.yaml +36 -0
- package/examples/route-wiring-smoke-test/rejected/27-reject-if-on-loop.pipeline.yaml +63 -0
- package/examples/route-wiring-smoke-test/rejected/29-reject-if-on-failed.pipeline.yaml +46 -0
- package/examples/route-wiring-smoke-test/smoke-test.task.yaml +4 -0
- package/examples/route-wiring-smoke-test/stages/branch-a.yaml +12 -0
- package/examples/route-wiring-smoke-test/stages/branch-b.yaml +12 -0
- package/examples/route-wiring-smoke-test/stages/decide.yaml +12 -0
- package/examples/route-wiring-smoke-test/stages/finish.yaml +12 -0
- package/examples/ship-feature/README.md +190 -0
- package/examples/ship-feature/feat-address-feedback.yaml +119 -0
- package/examples/ship-feature/feat-implement.yaml +180 -0
- package/examples/ship-feature/feat-plan.yaml +120 -0
- package/examples/ship-feature/feat-review.yaml +109 -0
- package/examples/ship-feature/feat-ship.yaml +203 -0
- package/examples/ship-feature/ship-feature.pipeline.yaml +44 -0
- package/examples/ship-feature/ship-feature.task.yaml +78 -0
- package/examples/stage-mcp/README.md +145 -0
- package/examples/stage-mcp/echo-mcp.mjs +20 -0
- package/examples/stage-mcp/stage-mcp-dead.pipeline.yaml +5 -0
- package/examples/stage-mcp/stage-mcp-dead.task.yaml +3 -0
- package/examples/stage-mcp/stage-mcp-missing-var.pipeline.yaml +5 -0
- package/examples/stage-mcp/stage-mcp-missing-var.task.yaml +3 -0
- package/examples/stage-mcp/stage-mcp.pipeline.yaml +5 -0
- package/examples/stage-mcp/stage-mcp.task.yaml +4 -0
- package/examples/stage-mcp/use-echo.yaml +20 -0
- package/examples/stageflow.yaml +51 -0
- package/examples/verify-tour/README.md +80 -0
- package/examples/verify-tour/verify-tour.pipeline.yaml +162 -0
- package/examples/verify-tour/verify-tour.task.yaml +11 -0
- package/package.json +9 -1
- package/skills/stageflow/SKILL.md +6 -6
- package/skills/stageflow/references/control-surface.md +13 -5
- package/skills/stageflow/scripts/detect-host.mjs +14 -1
- package/skills/stageflow/scripts/detect-host.test.mjs +29 -1
- package/skills/stageflow-author/SKILL.md +4 -3
- package/skills/stageflow-author/references/catalog-mapping.md +16 -0
- package/skills/stageflow-author/references/catalog-write-conventions.md +1 -1
- package/skills/stageflow-author/references/stage-prompt-template.md +4 -4
- package/skills/stageflow-run/SKILL.md +22 -12
- package/skills/stageflow-run/references/mcp-call.md +9 -1
- package/skills/stageflow-run/references/task-and-pipeline-selection.md +19 -6
- package/skills/stageflow-run/scripts/mcp-call.mjs +46 -6
- package/skills/stageflow-run/scripts/mcp-call.test.mjs +64 -0
- package/skills/stageflow-session-capture/references/catalog-authoring.md +2 -0
- package/skills/stageflow-setup/SKILL.md +51 -8
- package/dist/ui/assets/index-Da5EHU6M.js +0 -119
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
id: ship-fix
|
|
2
|
+
system_prompt: |
|
|
3
|
+
Publish the verified fix as a pull request against your own fork —
|
|
4
|
+
never the upstream project. Opening a PR against upstream is a separate,
|
|
5
|
+
explicitly-authorized manual step outside this pipeline; this stage never
|
|
6
|
+
does that. Never call ask_operator or pause for review — within that
|
|
7
|
+
fork-only boundary, commit, push, and open the pull request yourself.
|
|
8
|
+
|
|
9
|
+
Read verification.md, fix-report.md, and investigation.md from prior
|
|
10
|
+
envelopes' artifacts (run-relative paths under the "Factory run workspace"
|
|
11
|
+
value given in this stage's user prompt). Do not proceed if
|
|
12
|
+
verification.md's all_passed is not true — emit failure instead and say
|
|
13
|
+
what's unresolved.
|
|
14
|
+
|
|
15
|
+
publish_repo is exactly the fork repository the task goal/context names as
|
|
16
|
+
the PR target (e.g. your-username/project, not the original upstream
|
|
17
|
+
owner/project). If the task does not explicitly name a fork, emit failure
|
|
18
|
+
instead of guessing — never push or open a PR against a repository nobody
|
|
19
|
+
named, and never target the upstream repository under any circumstance.
|
|
20
|
+
|
|
21
|
+
1. Run git status to confirm the diff from implement-fix/verify-fix is
|
|
22
|
+
still present and is the only thing you're about to commit.
|
|
23
|
+
2. Stage exactly the changed files (never a blanket add), commit with a
|
|
24
|
+
concise message describing the fix and why (match the target repo's
|
|
25
|
+
commit conventions from investigation.md if it recorded any), and push
|
|
26
|
+
to a new branch on publish_repo (your fork).
|
|
27
|
+
3. Open a pull request with gh pr create --repo <publish_repo> against that
|
|
28
|
+
fork's default branch: title stating the fix, body with the issue
|
|
29
|
+
reference, root cause, what changed, and the verification commands that
|
|
30
|
+
passed. Note in the body that this targets the fork and that opening it
|
|
31
|
+
against upstream is a separate manual step.
|
|
32
|
+
4. Confirm the PR exists with gh pr view. Call write_stage_artifact with
|
|
33
|
+
path ship-report.md containing the branch, commit sha, PR url, and the
|
|
34
|
+
exact git/gh commands you ran.
|
|
35
|
+
5. Call emit_stage_envelope exactly once. opened is true only if gh pr view
|
|
36
|
+
confirmed the PR exists.
|
|
37
|
+
model: openrouter/minimax/minimax-m3:free
|
|
38
|
+
timeout_ms: 7200000
|
|
39
|
+
io:
|
|
40
|
+
input:
|
|
41
|
+
schema:
|
|
42
|
+
type: object
|
|
43
|
+
required:
|
|
44
|
+
- commands_run
|
|
45
|
+
- all_passed
|
|
46
|
+
properties:
|
|
47
|
+
commands_run:
|
|
48
|
+
type: array
|
|
49
|
+
items:
|
|
50
|
+
type: string
|
|
51
|
+
all_passed:
|
|
52
|
+
type: boolean
|
|
53
|
+
notes:
|
|
54
|
+
type: string
|
|
55
|
+
additionalProperties: false
|
|
56
|
+
output:
|
|
57
|
+
schema:
|
|
58
|
+
type: object
|
|
59
|
+
required:
|
|
60
|
+
- publish_repo
|
|
61
|
+
- branch
|
|
62
|
+
- opened
|
|
63
|
+
- pr_url
|
|
64
|
+
properties:
|
|
65
|
+
publish_repo:
|
|
66
|
+
type: string
|
|
67
|
+
branch:
|
|
68
|
+
type: string
|
|
69
|
+
opened:
|
|
70
|
+
type: boolean
|
|
71
|
+
pr_url:
|
|
72
|
+
type: string
|
|
73
|
+
additionalProperties: false
|
|
74
|
+
verify:
|
|
75
|
+
- id: ship-report
|
|
76
|
+
type: artifact
|
|
77
|
+
path: ship-report.md
|
|
78
|
+
nonempty: true
|
|
79
|
+
when:
|
|
80
|
+
- after
|
|
81
|
+
gate_kinds: []
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
id: understand-issue
|
|
2
|
+
system_prompt: |
|
|
3
|
+
Understand the reported issue well enough to fix it, then write
|
|
4
|
+
investigation.md as the durable record downstream stages read instead of
|
|
5
|
+
re-deriving this work. Do not edit source files in this stage. Never call
|
|
6
|
+
ask_operator — this pipeline runs unattended; make the best defensible call
|
|
7
|
+
yourself and keep going.
|
|
8
|
+
|
|
9
|
+
1. Read the task goal and context for the issue statement (what's broken,
|
|
10
|
+
why, why it matters). If the checkout has AGENTS.md, CONTRIBUTING.md, or
|
|
11
|
+
other repo-instruction files, read the ones that govern the suspected
|
|
12
|
+
code area and note anything that constrains how a fix should look
|
|
13
|
+
(commit conventions, test runner, things you must not touch).
|
|
14
|
+
2. Locate the actual code responsible, by reading it — not by guessing from
|
|
15
|
+
the issue text. Trace the failure to specific files and line ranges.
|
|
16
|
+
3. Reproduce the bug if at all practical: write and run a minimal script,
|
|
17
|
+
failing test, or repro command that demonstrates the broken behavior
|
|
18
|
+
right now, in this checkout. If true reproduction isn't practical
|
|
19
|
+
(e.g. needs hardware or a live external service you don't have), say so
|
|
20
|
+
explicitly and explain what you verified by reading the code instead —
|
|
21
|
+
do not claim a reproduction that didn't happen.
|
|
22
|
+
4. Call write_stage_artifact with path investigation.md containing: the
|
|
23
|
+
issue restated in full (not abbreviated — downstream stages rely on
|
|
24
|
+
this, not on the task text), root cause with file:line references,
|
|
25
|
+
repro method and its actual output, the fix approach you intend to take
|
|
26
|
+
and why, and any repo rules from step 1 that constrain the fix.
|
|
27
|
+
5. Call emit_stage_envelope exactly once with a payload matching the
|
|
28
|
+
schema.
|
|
29
|
+
|
|
30
|
+
No placeholder values (n/a, tbd, unknown, "see issue") anywhere in the
|
|
31
|
+
payload or artifact — if something is genuinely unknown, say what you'd
|
|
32
|
+
need to find out and why you couldn't, and still record what you did
|
|
33
|
+
verify.
|
|
34
|
+
model: openrouter/minimax/minimax-m3:free
|
|
35
|
+
timeout_ms: 7200000
|
|
36
|
+
io:
|
|
37
|
+
input:
|
|
38
|
+
schema:
|
|
39
|
+
type: object
|
|
40
|
+
output:
|
|
41
|
+
schema:
|
|
42
|
+
type: object
|
|
43
|
+
required:
|
|
44
|
+
- root_cause
|
|
45
|
+
- target_files
|
|
46
|
+
- repro_confirmed
|
|
47
|
+
- fix_approach
|
|
48
|
+
properties:
|
|
49
|
+
root_cause:
|
|
50
|
+
type: string
|
|
51
|
+
target_files:
|
|
52
|
+
type: array
|
|
53
|
+
items:
|
|
54
|
+
type: string
|
|
55
|
+
repro_confirmed:
|
|
56
|
+
type: boolean
|
|
57
|
+
fix_approach:
|
|
58
|
+
type: string
|
|
59
|
+
additionalProperties: false
|
|
60
|
+
verify:
|
|
61
|
+
- id: investigation
|
|
62
|
+
type: artifact
|
|
63
|
+
path: investigation.md
|
|
64
|
+
nonempty: true
|
|
65
|
+
when:
|
|
66
|
+
- after
|
|
67
|
+
gate_kinds: []
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
id: verify-fix
|
|
2
|
+
system_prompt: |
|
|
3
|
+
Independently verify the fix is correct, complete, and clean before it
|
|
4
|
+
ships — you are the only check this pipeline has; there is no human review
|
|
5
|
+
step. Never call ask_operator. If you find a problem, fix it yourself and
|
|
6
|
+
re-verify rather than reporting it downstream.
|
|
7
|
+
|
|
8
|
+
Read fix-report.md and investigation.md from prior envelopes' artifacts
|
|
9
|
+
(run-relative paths under the "Factory run workspace" value given in this
|
|
10
|
+
stage's user prompt).
|
|
11
|
+
|
|
12
|
+
1. Read the actual diff (git diff) rather than trusting fix-report.md's
|
|
13
|
+
description of it. Confirm the change matches the claimed root cause
|
|
14
|
+
and is scoped to the issue — flag and fix anything unrelated, debug
|
|
15
|
+
leftovers, commented-out code, or stray files.
|
|
16
|
+
2. Run the repo's real check/lint/typecheck command and its real test
|
|
17
|
+
command (found in AGENTS.md, package scripts, or equivalent — use
|
|
18
|
+
whatever investigation.md recorded, or find it yourself if that's
|
|
19
|
+
incomplete). Run the regression test by its exact id, and the broader
|
|
20
|
+
suite. Record every command and its exit status.
|
|
21
|
+
3. If anything fails or looks wrong, fix it in this stage and re-run until
|
|
22
|
+
it's clean. Do not report success on a red run, and do not hand a known
|
|
23
|
+
problem downstream with a note about it instead of fixing it.
|
|
24
|
+
4. Call write_stage_artifact with path verification.md containing: every
|
|
25
|
+
command run and its result, confirmation the regression test passes,
|
|
26
|
+
confirmation of no unrelated changes, and any issues you found and
|
|
27
|
+
fixed in this stage.
|
|
28
|
+
5. Call emit_stage_envelope exactly once with all_passed true only if
|
|
29
|
+
every command you ran actually exited zero.
|
|
30
|
+
model: openrouter/minimax/minimax-m3:free
|
|
31
|
+
timeout_ms: 7200000
|
|
32
|
+
io:
|
|
33
|
+
input:
|
|
34
|
+
schema:
|
|
35
|
+
type: object
|
|
36
|
+
required:
|
|
37
|
+
- changed_files
|
|
38
|
+
- regression_test
|
|
39
|
+
- tests_passed
|
|
40
|
+
properties:
|
|
41
|
+
changed_files:
|
|
42
|
+
type: array
|
|
43
|
+
items:
|
|
44
|
+
type: string
|
|
45
|
+
regression_test:
|
|
46
|
+
type: string
|
|
47
|
+
tests_passed:
|
|
48
|
+
type: boolean
|
|
49
|
+
additionalProperties: false
|
|
50
|
+
output:
|
|
51
|
+
schema:
|
|
52
|
+
type: object
|
|
53
|
+
required:
|
|
54
|
+
- commands_run
|
|
55
|
+
- all_passed
|
|
56
|
+
properties:
|
|
57
|
+
commands_run:
|
|
58
|
+
type: array
|
|
59
|
+
items:
|
|
60
|
+
type: string
|
|
61
|
+
all_passed:
|
|
62
|
+
type: boolean
|
|
63
|
+
notes:
|
|
64
|
+
type: string
|
|
65
|
+
additionalProperties: false
|
|
66
|
+
verify:
|
|
67
|
+
- id: verification
|
|
68
|
+
type: artifact
|
|
69
|
+
path: verification.md
|
|
70
|
+
nonempty: true
|
|
71
|
+
when:
|
|
72
|
+
- after
|
|
73
|
+
gate_kinds: []
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# plan-review
|
|
2
|
+
|
|
3
|
+
Two-stage pipeline with an **artifact-backed operator gate** (`ask_operator`). This is an **SDLC-style example** — plan review before implementation — but the same HITL pattern applies to any workflow you author.
|
|
4
|
+
|
|
5
|
+
Fixture twin: `tests/fixtures/pipelines/plan-review-proving.pipeline.yaml`.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
- Node.js ≥ 20, Stageflow installed
|
|
10
|
+
- Provider auth connected
|
|
11
|
+
- Operator console: `sf ui` (default `http://127.0.0.1:3847`)
|
|
12
|
+
|
|
13
|
+
## Commands
|
|
14
|
+
|
|
15
|
+
From the **repository git root**:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
sf validate --pipeline examples/plan-review/plan-review.pipeline.yaml --strict
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Terminal 1:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
sf ui
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Terminal 2:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
sf run \
|
|
31
|
+
--pipeline examples/plan-review/plan-review.pipeline.yaml \
|
|
32
|
+
--task examples/plan-review/plan-review.task.yaml
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
When the first stage blocks on HITL, open the run in the console, review the plan artifact, and accept or reject. Exit code `2` means waiting on operator input.
|
|
36
|
+
|
|
37
|
+
See [docs/hitl.md](../../docs/hitl.md).
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
id: plan-review-followup
|
|
2
|
+
system_prompt: |
|
|
3
|
+
Acknowledge that the prior plan-review stage completed with operator acceptance
|
|
4
|
+
of the plan. Call emit_stage_envelope once with a short summary. Do not call
|
|
5
|
+
ask_operator. Do not perform further HITL.
|
|
6
|
+
model: anthropic/claude-sonnet-4-5
|
|
7
|
+
io:
|
|
8
|
+
input:
|
|
9
|
+
schema:
|
|
10
|
+
type: object
|
|
11
|
+
output:
|
|
12
|
+
schema:
|
|
13
|
+
type: object
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
id: plan-review
|
|
2
|
+
goal: Prove plan-review HITL through artifact-backed accept/reject then follow-up
|
|
3
|
+
context: |
|
|
4
|
+
Operator-console proving task for the plan-review pipeline. The first stage
|
|
5
|
+
must write a plan artifact, gate on ask_operator kind artifact_backed, and
|
|
6
|
+
emit only after accept. The follow-up stage only acknowledges acceptance.
|
|
7
|
+
constraints: |
|
|
8
|
+
Do not skip ask_operator. Do not emit_stage_envelope before plan accept.
|
|
9
|
+
Follow-up must not call ask_operator.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
id: plan-review
|
|
2
|
+
gate_kinds:
|
|
3
|
+
- artifact_backed
|
|
4
|
+
system_prompt: |
|
|
5
|
+
Your job is to produce a concise feature plan for the task and get operator
|
|
6
|
+
acceptance before completing this stage.
|
|
7
|
+
|
|
8
|
+
1. Write a concise feature plan via write_stage_artifact to a stage artifact
|
|
9
|
+
path (for example plan.md under stages/plan-review/attempts/1/artifacts/).
|
|
10
|
+
2. Call ask_operator with kind artifact_backed referencing that artifact path
|
|
11
|
+
so the operator can review the plan.
|
|
12
|
+
3. On reject or change text: revise the plan artifact and call ask_operator
|
|
13
|
+
again with artifact_backed in this same stage. Do not complete yet.
|
|
14
|
+
4. Call emit_stage_envelope with an advancing success status only after the
|
|
15
|
+
operator accepts/confirms the plan. Never emit before plan accept.
|
|
16
|
+
5. Optionally, before the plan gate, you may ask one clarifying free_text or
|
|
17
|
+
multi_question via ask_operator if needed. Never emit before plan accept.
|
|
18
|
+
model: anthropic/claude-sonnet-4-5
|
|
19
|
+
io:
|
|
20
|
+
input:
|
|
21
|
+
schema:
|
|
22
|
+
type: object
|
|
23
|
+
output:
|
|
24
|
+
schema:
|
|
25
|
+
type: object
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# playwright-mcp
|
|
2
|
+
|
|
3
|
+
One-stage walkthrough: **open a page and screenshot it**, using Microsoft Playwright MCP (`npx @playwright/mcp@latest`) from git-root `.mcp.json`.
|
|
4
|
+
|
|
5
|
+
Playwright's `--output-dir` is interpolated to `STAGEFLOW_STAGE_ARTIFACTS_DIR` (this attempt's artifacts folder). Auto-named snapshots use that directory. A named `browser_take_screenshot` `filename` does **not** — Playwright MCP resolves it against the MCP client workspace (the project checkout). The stage prompt therefore passes `${STAGEFLOW_STAGE_ARTIFACTS_DIR}/page.png` (stamped to an absolute artifacts path at attach) so the PNG lands in the run Files pane instead of the git root.
|
|
6
|
+
|
|
7
|
+
| Stage | MCP | What it does |
|
|
8
|
+
|-------|-----|----------------|
|
|
9
|
+
| `screenshot` | `playwright` | `browser_navigate` → `browser_take_screenshot` (`page.png`) |
|
|
10
|
+
|
|
11
|
+
Completion requires `page.png` on disk. Settings Check (no stage) falls back to `examples/playwright-mcp/.playwright-mcp/` (gitignored).
|
|
12
|
+
|
|
13
|
+
## Prerequisites
|
|
14
|
+
|
|
15
|
+
- Node.js ≥ 20 and this repo's CLI (`npm run build`), not an older global `sf`
|
|
16
|
+
- Provider auth (`sf ui` → Settings → Providers)
|
|
17
|
+
- First run may download Chromium via Playwright (needs network)
|
|
18
|
+
|
|
19
|
+
Git-root `.mcp.json` already names `playwright`. The stage still passes `mcp: [playwright]` — listing it in the catalog is not attach.
|
|
20
|
+
|
|
21
|
+
Optional: Settings → **Project MCP servers** → Check `playwright` before the run.
|
|
22
|
+
|
|
23
|
+
## Run (repo root)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm run build
|
|
27
|
+
node dist/cli.js validate --pipeline examples/playwright-mcp/playwright-mcp.pipeline.yaml --strict
|
|
28
|
+
node dist/cli.js run \
|
|
29
|
+
--pipeline examples/playwright-mcp/playwright-mcp.pipeline.yaml \
|
|
30
|
+
--task examples/playwright-mcp/playwright-mcp.task.yaml
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Inspect:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
node dist/cli.js envelope get --run <runId> --stage screenshot --json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The Files row is `page.png`.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
id: playwright-mcp
|
|
2
|
+
goal: Open https://google.com and take a screenshot of that page as a PNG artifact.
|
|
3
|
+
context: One-stage Playwright MCP walkthrough. Playwright must save page.png under this attempt's artifacts directory (absolute path in the stage prompt), not the repo root.
|
|
4
|
+
constraints: Use only the playwright server named on the stage. Do not call ask_operator. The screenshot must be page.png in artifacts, not markdown and not the git root.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
id: screenshot
|
|
2
|
+
system_prompt: |
|
|
3
|
+
Open the URL from the task in Playwright MCP, then take a screenshot.
|
|
4
|
+
Call browser_navigate, then browser_take_screenshot with type png and
|
|
5
|
+
filename exactly ${STAGEFLOW_STAGE_ARTIFACTS_DIR}/page.png — copy that
|
|
6
|
+
path verbatim. Playwright resolves a bare filename like page.png against
|
|
7
|
+
the project checkout (repo root), not --output-dir. Do not pass filename
|
|
8
|
+
page.png without the artifacts-directory prefix. Do not write screenshot.md.
|
|
9
|
+
Do not call write_stage_artifact for the image. Do not call ask_operator.
|
|
10
|
+
|
|
11
|
+
When finished, call emit_stage_envelope exactly once with status success,
|
|
12
|
+
a short summary, payload { "url": "<final page URL>", "screenshot": "page.png" },
|
|
13
|
+
and artifacts listing the run-relative PNG path this session already names
|
|
14
|
+
(stages/screenshot/attempts/<n>/artifacts/page.png). summary and payload are
|
|
15
|
+
handed downstream verbatim. State outcomes and artifact pointers only.
|
|
16
|
+
|
|
17
|
+
Your last tool call in this attempt must be emit_stage_envelope.
|
|
18
|
+
model: cursor/auto
|
|
19
|
+
io:
|
|
20
|
+
input:
|
|
21
|
+
schema:
|
|
22
|
+
type: object
|
|
23
|
+
output:
|
|
24
|
+
schema:
|
|
25
|
+
type: object
|
|
26
|
+
required:
|
|
27
|
+
- url
|
|
28
|
+
- screenshot
|
|
29
|
+
properties:
|
|
30
|
+
url:
|
|
31
|
+
type: string
|
|
32
|
+
screenshot:
|
|
33
|
+
type: string
|
|
34
|
+
verify:
|
|
35
|
+
- id: png
|
|
36
|
+
type: artifact
|
|
37
|
+
path: page.png
|
|
38
|
+
nonempty: true
|
|
39
|
+
when:
|
|
40
|
+
- after
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Retry tour
|
|
2
|
+
|
|
3
|
+
One short spine that walks Stageflow’s **retry surfaces**. Each stage does one job. First passes are supposed to fail; later attempts (or a second emit in the same session) pass.
|
|
4
|
+
|
|
5
|
+
This catalog is a **deep spine**: ungated `to:` is the next stop. Open the stage after each stop and inspect **attempts** — automatic repair is a second attempt on the same node, not a new stage.
|
|
6
|
+
|
|
7
|
+
Two stops need you: **Retry with guidance** on `manual-recover`, then **Retry** on `ordinary-retry`.
|
|
8
|
+
|
|
9
|
+
## Run
|
|
10
|
+
|
|
11
|
+
From the repo git root, after `sf ui` is up, pick pipeline `retry-tour` and task `retry-tour`.
|
|
12
|
+
|
|
13
|
+
Or:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx tsx src/cli.ts validate --pipeline examples/retry-tour/retry-tour.pipeline.yaml
|
|
17
|
+
npx tsx src/cli.ts run \
|
|
18
|
+
--pipeline examples/retry-tour/retry-tour.pipeline.yaml \
|
|
19
|
+
--task examples/retry-tour/retry-tour.task.yaml
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Validate should succeed (`ok: true`). You may see `pipeline.model_applies` because `model` is set on the pipeline, not on each stage.
|
|
23
|
+
|
|
24
|
+
The run should **succeed** after the two operator actions below. If a model writes `proof.md` on attempt 1, that stop is not covered — rerun.
|
|
25
|
+
|
|
26
|
+
## Walk (follow-along order)
|
|
27
|
+
|
|
28
|
+
| Level | Stage | Retry surface | What you do |
|
|
29
|
+
|-------|-------|---------------|-------------|
|
|
30
|
+
| 1 | `kickoff` | none | Watch it succeed |
|
|
31
|
+
| 2 | `emit-retry` | Emit-phase verify soft reject | Same attempt: first emit is rejected (`note.md` missing), second emit succeeds. Attempt stays **1** |
|
|
32
|
+
| 3 | `auto-repair` | `on_verify_fail.mode: repair` | Attempt 1 omits `proof.md` → after-verify fails → Stageflow starts attempt 2 by itself. Attempt 2 writes `proof.md`. No click |
|
|
33
|
+
| 4 | `manual-recover` | `on_verify_fail.mode: manual` | Attempt 1 fails after-verify. Stage stays **failed**. Select it → type guidance (for example `Write proof.md this time`) → **Retry with guidance**. Do **not** use **Retry**. Do **not** **Stop recovery** |
|
|
34
|
+
| 5 | `ordinary-retry` | Ordinary **Retry** (no `on_verify_fail`) | Attempt 1 emits `status: failure`. Select it → **Retry**. Attempt 2 emits success |
|
|
35
|
+
| 6 | `done` | none | Runs only after `ordinary-retry` succeeds — proof that Retry unblocked the successor |
|
|
36
|
+
|
|
37
|
+
## Scenario table
|
|
38
|
+
|
|
39
|
+
| Scenario | How this pipeline covers it | Evidence |
|
|
40
|
+
|----------|------------------------------|----------|
|
|
41
|
+
| Emit-phase verify rejects in-session | `emit-retry` `type: artifact` `when: [emit]` | First `emit_stage_envelope` is `isError`; second emit is accepted; still attempt 1 |
|
|
42
|
+
| Emit reject does not fail the stage | same | Stage succeeds; no `on_verify_fail` |
|
|
43
|
+
| Automatic repair after after-phase fail | `auto-repair` `mode: repair` `max_attempts: 2` | Attempt 1 verification **failed**; attempt 2 **passed**; stage succeeded with no click |
|
|
44
|
+
| `max_attempts: 2` means 1 initial + 1 repair | same | Exactly two attempts on `auto-repair` |
|
|
45
|
+
| Failed-check capsule on repair | `include_failed_checks: true` | Attempt 2 prompt contains failed-check evidence for `proof-on-disk` |
|
|
46
|
+
| Repair is a fresh attempt | same | Attempt 2 has its own artifacts dir |
|
|
47
|
+
| Manual recovery (not auto) | `manual-recover` `mode: manual` `retry_safety: side_effecting` | After attempt 1 fail, stage stays failed until Recover |
|
|
48
|
+
| Ordinary **Retry** is refused here | same | Map/workspace **Retry** should 409; use **Retry with guidance** |
|
|
49
|
+
| Recover with guidance | operator types guidance | Attempt 2 prompt includes operator instructions + failed-check capsule |
|
|
50
|
+
| Ordinary Retry after agent failure | `ordinary-retry` emits `status: failure` | No after-verify; **Retry** is offered |
|
|
51
|
+
| Retry unblocks the successor | `done` | `done` does not start while `ordinary-retry` is failed; it runs after Retry succeeds |
|
|
52
|
+
|
|
53
|
+
## Expected stage status (after the full walk)
|
|
54
|
+
|
|
55
|
+
| Stage | Attempts | Final status | Why |
|
|
56
|
+
|-------|----------|--------------|-----|
|
|
57
|
+
| `kickoff` | 1 | succeeded | entry |
|
|
58
|
+
| `emit-retry` | 1 | succeeded | two emits, one attempt |
|
|
59
|
+
| `auto-repair` | 2 | succeeded | automatic repair |
|
|
60
|
+
| `manual-recover` | 2 | succeeded | you Recovered |
|
|
61
|
+
| `ordinary-retry` | 2 | succeeded | you Retried |
|
|
62
|
+
| `done` | 1 | succeeded | ungated after ordinary-retry success |
|
|
63
|
+
|
|
64
|
+
Mid-walk: after `auto-repair` succeeds, `manual-recover` is **failed** and the run looks failed until Recover. Then `ordinary-retry` is **failed** until Retry.
|
|
65
|
+
|
|
66
|
+
## Not in this pipeline
|
|
67
|
+
|
|
68
|
+
| Scenario | Why it is absent | Where to see it |
|
|
69
|
+
|---------|------------------|-----------------|
|
|
70
|
+
| Repair budget exhausted | would fail the stage after attempt 2 | `max_attempts: 2` with another miss; then ordinary Retry |
|
|
71
|
+
| **Stop recovery** | terminal fail for that stage this run | click it on `manual-recover` instead of Recover |
|
|
72
|
+
| Loop `send_back` / `max_replays` | different product (route loop) | [`examples/route-if-tour/`](../route-if-tour/), [`examples/feedback-loop/`](../feedback-loop/) |
|
|
73
|
+
| `on_verify_fail` with emit-only verify | illegal (`pipeline.invalid_recovery`) | yaml-catalog |
|
|
74
|
+
| `mode: repair` + `retry_safety: side_effecting` | illegal | yaml-catalog |
|
|
75
|
+
| Agent never emits (timeout / hang) | flaky | ordinary Retry after a real hang |
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
id: retry-tour
|
|
2
|
+
model: cursor/auto
|
|
3
|
+
schemas:
|
|
4
|
+
empty:
|
|
5
|
+
type: object
|
|
6
|
+
stages:
|
|
7
|
+
- id: kickoff
|
|
8
|
+
entry: true
|
|
9
|
+
route:
|
|
10
|
+
- to: emit-retry
|
|
11
|
+
system_prompt: |
|
|
12
|
+
Start the retry tour in one sentence.
|
|
13
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
14
|
+
io:
|
|
15
|
+
input:
|
|
16
|
+
schema:
|
|
17
|
+
$ref: "#/schemas/empty"
|
|
18
|
+
output:
|
|
19
|
+
schema:
|
|
20
|
+
$ref: "#/schemas/empty"
|
|
21
|
+
|
|
22
|
+
- id: emit-retry
|
|
23
|
+
route:
|
|
24
|
+
- to: auto-repair
|
|
25
|
+
system_prompt: |
|
|
26
|
+
Cover emit-phase verify soft reject (same attempt, not a new attempt).
|
|
27
|
+
You MUST call emit_stage_envelope twice:
|
|
28
|
+
1. First call: status: success, a one-sentence summary, artifacts: [], payload: {}. Do not write any artifact yet. This emit is rejected because note.md is missing — that is the scenario.
|
|
29
|
+
2. After that tool error: call write_stage_artifact with path note.md and a short nonempty markdown body. Then emit_stage_envelope again with status: success, a one-sentence summary, artifacts listing the path returned by write_stage_artifact, and payload: {}.
|
|
30
|
+
Do not skip the failing first emit. Do not call ask_operator.
|
|
31
|
+
io:
|
|
32
|
+
input:
|
|
33
|
+
schema:
|
|
34
|
+
$ref: "#/schemas/empty"
|
|
35
|
+
output:
|
|
36
|
+
schema:
|
|
37
|
+
$ref: "#/schemas/empty"
|
|
38
|
+
verify:
|
|
39
|
+
- id: note-declared
|
|
40
|
+
type: artifact
|
|
41
|
+
basename: note.md
|
|
42
|
+
when: [emit]
|
|
43
|
+
|
|
44
|
+
- id: auto-repair
|
|
45
|
+
route:
|
|
46
|
+
- to: manual-recover
|
|
47
|
+
system_prompt: |
|
|
48
|
+
Cover on_verify_fail.mode: repair. Look at the artifacts path in this prompt (stages/auto-repair/attempts/N/artifacts/).
|
|
49
|
+
If N is 1: call emit_stage_envelope with status: success, a one-sentence summary, artifacts: [], and payload: {}. Do not write proof.md. After-phase verify will fail and Stageflow will start attempt 2 by itself.
|
|
50
|
+
If N is 2 or greater, or the user message contains "This is recovery attempt": call write_stage_artifact with path proof.md and a short nonempty body, then emit_stage_envelope with status: success, a one-sentence summary, artifacts listing that path, and payload: {}.
|
|
51
|
+
Do not call ask_operator. Do not "helpfully" write proof.md on attempt 1.
|
|
52
|
+
io:
|
|
53
|
+
input:
|
|
54
|
+
schema:
|
|
55
|
+
$ref: "#/schemas/empty"
|
|
56
|
+
output:
|
|
57
|
+
schema:
|
|
58
|
+
$ref: "#/schemas/empty"
|
|
59
|
+
verify:
|
|
60
|
+
- id: proof-on-disk
|
|
61
|
+
type: artifact
|
|
62
|
+
path: proof.md
|
|
63
|
+
nonempty: true
|
|
64
|
+
when: [after]
|
|
65
|
+
on_verify_fail:
|
|
66
|
+
mode: repair
|
|
67
|
+
max_attempts: 2
|
|
68
|
+
retry_safety: idempotent
|
|
69
|
+
include_failed_checks: true
|
|
70
|
+
|
|
71
|
+
- id: manual-recover
|
|
72
|
+
route:
|
|
73
|
+
- to: ordinary-retry
|
|
74
|
+
system_prompt: |
|
|
75
|
+
Cover on_verify_fail.mode: manual. Look at the artifacts path in this prompt (stages/manual-recover/attempts/N/artifacts/).
|
|
76
|
+
If N is 1: call emit_stage_envelope with status: success, a one-sentence summary, artifacts: [], and payload: {}. Do not write proof.md. After-phase verify will fail and this stage stays failed until the operator uses Retry with guidance.
|
|
77
|
+
If N is 2 or greater, or the user message contains "This is recovery attempt": call write_stage_artifact with path proof.md and a short nonempty body, then emit_stage_envelope with status: success, a one-sentence summary, artifacts listing that path, and payload: {}.
|
|
78
|
+
Do not call ask_operator. Do not "helpfully" write proof.md on attempt 1.
|
|
79
|
+
io:
|
|
80
|
+
input:
|
|
81
|
+
schema:
|
|
82
|
+
$ref: "#/schemas/empty"
|
|
83
|
+
output:
|
|
84
|
+
schema:
|
|
85
|
+
$ref: "#/schemas/empty"
|
|
86
|
+
verify:
|
|
87
|
+
- id: proof-on-disk
|
|
88
|
+
type: artifact
|
|
89
|
+
path: proof.md
|
|
90
|
+
nonempty: true
|
|
91
|
+
when: [after]
|
|
92
|
+
on_verify_fail:
|
|
93
|
+
mode: manual
|
|
94
|
+
retry_safety: side_effecting
|
|
95
|
+
include_failed_checks: true
|
|
96
|
+
|
|
97
|
+
- id: ordinary-retry
|
|
98
|
+
route:
|
|
99
|
+
- to: done
|
|
100
|
+
system_prompt: |
|
|
101
|
+
Cover ordinary Retry (no on_verify_fail). Look at the artifacts path in this prompt (stages/ordinary-retry/attempts/N/artifacts/).
|
|
102
|
+
If N is 1: call emit_stage_envelope with status: failure, a one-sentence summary that you failed on purpose, artifacts: [], and payload: {}. Do not emit success.
|
|
103
|
+
If N is 2 or greater: call emit_stage_envelope with status: success, a one-sentence summary, artifacts: [], and payload: {}.
|
|
104
|
+
Do not call ask_operator.
|
|
105
|
+
io:
|
|
106
|
+
input:
|
|
107
|
+
schema:
|
|
108
|
+
$ref: "#/schemas/empty"
|
|
109
|
+
output:
|
|
110
|
+
schema:
|
|
111
|
+
$ref: "#/schemas/empty"
|
|
112
|
+
|
|
113
|
+
- id: done
|
|
114
|
+
system_prompt: |
|
|
115
|
+
The retry tour finished. Emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
116
|
+
io:
|
|
117
|
+
input:
|
|
118
|
+
schema:
|
|
119
|
+
$ref: "#/schemas/empty"
|
|
120
|
+
output:
|
|
121
|
+
schema:
|
|
122
|
+
$ref: "#/schemas/empty"
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
id: retry-tour
|
|
2
|
+
goal: Walk emit soft-reject, automatic repair, manual recover, and ordinary Retry.
|
|
3
|
+
context: |
|
|
4
|
+
Retry tour — each stage covers one retry surface. First attempts are
|
|
5
|
+
supposed to fail the check or the stage; later attempts pass. Follow each
|
|
6
|
+
stage prompt, including intentional failing emits.
|
|
7
|
+
constraints: |
|
|
8
|
+
Docs only; no checkout edits. One-sentence summaries.
|
|
9
|
+
Never emit fork_choice. Do not skip the failing first pass on a stage.
|