stageflow 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -3
- 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/piAdapter.d.ts +9 -1
- package/dist/agent/piAdapter.js +58 -3
- package/dist/agent/piIsolatedMcp.d.ts +2 -0
- package/dist/agent/piIsolatedMcp.js +10 -2
- package/dist/agent/port.d.ts +6 -0
- package/dist/agent/streamLogRedact.d.ts +1 -1
- package/dist/agent/streamLogRedact.js +4 -11
- 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/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 +21 -3
- package/dist/cli/hostClient.js +93 -12
- package/dist/cli/initTemplates.d.ts +1 -1
- package/dist/cli/initTemplates.js +8 -1
- 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 +162 -8
- package/dist/cli.js +171 -30
- package/dist/config/catalogRelativePath.d.ts +62 -0
- package/dist/config/catalogRelativePath.js +118 -0
- package/dist/config/configOrigin.d.ts +27 -0
- package/dist/config/configOrigin.js +59 -0
- package/dist/config/hostConfig.d.ts +55 -0
- package/dist/config/hostConfig.js +333 -0
- package/dist/config/listSkills.d.ts +26 -0
- package/dist/config/listSkills.js +190 -3
- package/dist/config/loadOutcome.d.ts +1 -1
- package/dist/config/loadPipeline.js +23 -2
- package/dist/config/loadStage.js +18 -0
- package/dist/config/loadTask.d.ts +2 -0
- package/dist/config/loadTask.js +57 -18
- 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 +30 -0
- package/dist/config/multiProjectCatalog.js +142 -0
- package/dist/config/normalizePipelineStageEntry.js +20 -1
- package/dist/config/pipelineStageKeys.js +2 -0
- 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/resolveStageMcpServers.d.ts +9 -1
- package/dist/config/resolveStageMcpServers.js +36 -9
- 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/toolRequires.d.ts +24 -0
- package/dist/config/toolRequires.js +115 -0
- package/dist/config/validateCatalog.d.ts +5 -1
- package/dist/config/validateCatalog.js +140 -1
- package/dist/diagnostics/checks.d.ts +39 -0
- package/dist/diagnostics/checks.js +135 -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 +13 -0
- package/dist/logging/redact.js +88 -0
- package/dist/mcp/catalogTools.js +456 -80
- package/dist/mcp/checkoutTools.d.ts +52 -0
- package/dist/mcp/checkoutTools.js +332 -0
- package/dist/mcp/controlTools.js +179 -5
- package/dist/mcp/deps.d.ts +1 -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 +1 -0
- package/dist/mcp/tools.js +4 -0
- package/dist/net/proxy.d.ts +14 -0
- package/dist/net/proxy.js +78 -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/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.js +2 -2
- 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 +21 -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 +111 -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 +28 -3
- package/dist/runstore/sqlite/SqliteRunStore.js +352 -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/index.d.ts +21 -0
- package/dist/runstore/sqlite/migrations/index.js +72 -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/completionCheckRunner.d.ts +3 -0
- package/dist/runtime/completionCheckRunner.js +45 -7
- package/dist/runtime/containerLimits.d.ts +16 -0
- package/dist/runtime/containerLimits.js +84 -0
- package/dist/runtime/credentialMaterialisation.d.ts +28 -0
- package/dist/runtime/credentialMaterialisation.js +128 -0
- package/dist/runtime/gitCheckoutCapability.js +7 -13
- package/dist/runtime/pipelineRunner.d.ts +36 -1
- package/dist/runtime/pipelineRunner.js +178 -17
- package/dist/runtime/pipelineScheduler.d.ts +15 -0
- package/dist/runtime/pipelineScheduler.js +135 -27
- 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 +158 -4
- package/dist/runtime/runManager.js +1596 -79
- package/dist/runtime/runRetentionSweep.d.ts +31 -0
- package/dist/runtime/runRetentionSweep.js +328 -0
- package/dist/runtime/runRetryCoordinator.d.ts +2 -0
- package/dist/runtime/runRetryCoordinator.js +19 -2
- package/dist/runtime/runSkills.d.ts +40 -0
- package/dist/runtime/runSkills.js +173 -0
- package/dist/runtime/stageAttemptBootstrap.d.ts +5 -1
- package/dist/runtime/stageAttemptBootstrap.js +195 -24
- 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 +193 -0
- package/dist/runtime/stageProcessLauncher.d.ts +18 -0
- package/dist/runtime/stageProcessLauncher.js +194 -38
- 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 +1 -0
- package/dist/runtime/stageRunner.js +3 -1
- 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/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/verifiedStageExecution.d.ts +1 -0
- package/dist/runtime/verifiedStageExecution.js +2 -1
- 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 +36 -2
- package/dist/server/bootstrap.js +209 -5
- package/dist/server/controlToken.d.ts +47 -0
- package/dist/server/controlToken.js +241 -0
- package/dist/server/createHttpHost.d.ts +11 -2
- package/dist/server/createHttpHost.js +103 -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 +98 -0
- package/dist/server/http.d.ts +12 -1
- package/dist/server/http.js +1085 -485
- 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/types/pipeline.d.ts +7 -0
- package/dist/types/stage.d.ts +8 -0
- package/dist/types/task.d.ts +8 -0
- package/dist/ui/assets/index-B6hlSXXn.js +120 -0
- package/dist/ui/index.html +1 -1
- package/examples/README.md +98 -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/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 +144 -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/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 +5 -1
- package/skills/stageflow/SKILL.md +6 -6
- package/skills/stageflow/references/control-surface.md +11 -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-run/SKILL.md +20 -12
- package/skills/stageflow-run/references/mcp-call.md +9 -1
- package/skills/stageflow-run/references/task-and-pipeline-selection.md +16 -5
- 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 +40 -8
- package/dist/ui/assets/index-Da5EHU6M.js +0 -119
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
id: route-demo-multi-loop-targets
|
|
2
|
+
# Two DIFFERENT stages (review, qa) each declare their own loop entry back
|
|
3
|
+
# to the SAME ancestor (implement). review's loop point is dormant in this
|
|
4
|
+
# run (always continues); qa's is the one that actually fires, demonstrating
|
|
5
|
+
# that a loop target doesn't have to be the looping stage's immediate
|
|
6
|
+
# parent -- implement is two hops back from qa (implement -> review -> qa).
|
|
7
|
+
stages:
|
|
8
|
+
- id: plan
|
|
9
|
+
entry: true
|
|
10
|
+
route:
|
|
11
|
+
- to: implement
|
|
12
|
+
system_prompt: |
|
|
13
|
+
Draft a one-sentence plan.
|
|
14
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
15
|
+
model: cursor/auto
|
|
16
|
+
io:
|
|
17
|
+
input:
|
|
18
|
+
schema:
|
|
19
|
+
type: object
|
|
20
|
+
output:
|
|
21
|
+
schema:
|
|
22
|
+
type: object
|
|
23
|
+
|
|
24
|
+
- id: implement
|
|
25
|
+
route:
|
|
26
|
+
- to: review
|
|
27
|
+
system_prompt: |
|
|
28
|
+
Implement the plan in one sentence.
|
|
29
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
30
|
+
model: cursor/auto
|
|
31
|
+
io:
|
|
32
|
+
input:
|
|
33
|
+
schema:
|
|
34
|
+
type: object
|
|
35
|
+
output:
|
|
36
|
+
schema:
|
|
37
|
+
type: object
|
|
38
|
+
|
|
39
|
+
- id: review
|
|
40
|
+
route:
|
|
41
|
+
- to: qa
|
|
42
|
+
- type: loop
|
|
43
|
+
to: implement
|
|
44
|
+
max_replays: 1
|
|
45
|
+
on_max_replays: require_continue
|
|
46
|
+
replay_session: resume
|
|
47
|
+
system_prompt: |
|
|
48
|
+
Review the implementation in one or two sentences.
|
|
49
|
+
On success you MUST include feedback_loop in your envelope:
|
|
50
|
+
{"action":"continue"} or {"action":"send_back","target":"implement"}.
|
|
51
|
+
For this smoke test, ALWAYS continue -- never send back. This loop
|
|
52
|
+
point exists in the wiring but stays dormant this run; qa (below) is
|
|
53
|
+
the one that actually exercises a loop-back to implement.
|
|
54
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], payload: {}, and feedback_loop: {"action":"continue"}.
|
|
55
|
+
model: cursor/auto
|
|
56
|
+
io:
|
|
57
|
+
input:
|
|
58
|
+
schema:
|
|
59
|
+
type: object
|
|
60
|
+
output:
|
|
61
|
+
schema:
|
|
62
|
+
type: object
|
|
63
|
+
|
|
64
|
+
- id: qa
|
|
65
|
+
route:
|
|
66
|
+
- to: done
|
|
67
|
+
- type: loop
|
|
68
|
+
to: implement
|
|
69
|
+
max_replays: 1
|
|
70
|
+
on_max_replays: require_continue
|
|
71
|
+
replay_session: resume
|
|
72
|
+
system_prompt: |
|
|
73
|
+
QA the reviewed implementation in one or two sentences.
|
|
74
|
+
On success you MUST include feedback_loop in your envelope:
|
|
75
|
+
{"action":"continue"} or {"action":"send_back","target":"implement"}.
|
|
76
|
+
For this smoke test: on your FIRST attempt, send_back to implement.
|
|
77
|
+
On your SECOND attempt (after the replay), continue. This demonstrates
|
|
78
|
+
looping back to an ancestor two stages back (implement), independently
|
|
79
|
+
of review's own dormant loop point above -- both target the same
|
|
80
|
+
stage from different points in the chain.
|
|
81
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], payload: {}, and the matching feedback_loop action.
|
|
82
|
+
model: cursor/auto
|
|
83
|
+
io:
|
|
84
|
+
input:
|
|
85
|
+
schema:
|
|
86
|
+
type: object
|
|
87
|
+
output:
|
|
88
|
+
schema:
|
|
89
|
+
type: object
|
|
90
|
+
|
|
91
|
+
- id: done
|
|
92
|
+
system_prompt: |
|
|
93
|
+
Close out the run in one sentence.
|
|
94
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
95
|
+
model: cursor/auto
|
|
96
|
+
io:
|
|
97
|
+
input:
|
|
98
|
+
schema:
|
|
99
|
+
type: object
|
|
100
|
+
output:
|
|
101
|
+
schema:
|
|
102
|
+
type: object
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
id: route-demo-uses-dialect-fork
|
|
2
|
+
# Every other pipeline in this catalog uses inline stage bodies
|
|
3
|
+
# (system_prompt/model directly on the stage entry). This one uses the
|
|
4
|
+
# `uses:` external-stage-file dialect instead — to confirm route/entry
|
|
5
|
+
# work identically regardless of where the stage body lives. Both
|
|
6
|
+
# listed branches always run after decide succeeds.
|
|
7
|
+
stages:
|
|
8
|
+
- id: decide
|
|
9
|
+
entry: true
|
|
10
|
+
route:
|
|
11
|
+
- to: branch-a
|
|
12
|
+
- to: branch-b
|
|
13
|
+
uses: ./stages/decide.yaml
|
|
14
|
+
- id: branch-a
|
|
15
|
+
route:
|
|
16
|
+
- to: finish
|
|
17
|
+
uses: ./stages/branch-a.yaml
|
|
18
|
+
- id: branch-b
|
|
19
|
+
route:
|
|
20
|
+
- to: finish
|
|
21
|
+
uses: ./stages/branch-b.yaml
|
|
22
|
+
- id: finish
|
|
23
|
+
uses: ./stages/finish.yaml
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: route-demo-sequential-io
|
|
2
|
+
stages:
|
|
3
|
+
- id: draft
|
|
4
|
+
entry: true
|
|
5
|
+
route:
|
|
6
|
+
- to: review
|
|
7
|
+
system_prompt: |
|
|
8
|
+
Draft a titled document in one sentence.
|
|
9
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"title": "Smoke draft"}.
|
|
10
|
+
model: cursor/auto
|
|
11
|
+
io:
|
|
12
|
+
input:
|
|
13
|
+
schema:
|
|
14
|
+
type: object
|
|
15
|
+
output:
|
|
16
|
+
schema:
|
|
17
|
+
type: object
|
|
18
|
+
required: [title]
|
|
19
|
+
properties:
|
|
20
|
+
title:
|
|
21
|
+
type: string
|
|
22
|
+
- id: review
|
|
23
|
+
system_prompt: |
|
|
24
|
+
Review the titled document in one sentence.
|
|
25
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
26
|
+
model: cursor/auto
|
|
27
|
+
io:
|
|
28
|
+
input:
|
|
29
|
+
schema:
|
|
30
|
+
type: object
|
|
31
|
+
required: [title]
|
|
32
|
+
properties:
|
|
33
|
+
title:
|
|
34
|
+
type: string
|
|
35
|
+
output:
|
|
36
|
+
schema:
|
|
37
|
+
type: object
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
id: route-demo-complex-io
|
|
2
|
+
schemas:
|
|
3
|
+
finding:
|
|
4
|
+
type: object
|
|
5
|
+
required: [id, severity]
|
|
6
|
+
properties:
|
|
7
|
+
id:
|
|
8
|
+
type: string
|
|
9
|
+
minLength: 1
|
|
10
|
+
severity:
|
|
11
|
+
type: string
|
|
12
|
+
enum: [low, medium, high]
|
|
13
|
+
detail:
|
|
14
|
+
type: string
|
|
15
|
+
nullable: true
|
|
16
|
+
report:
|
|
17
|
+
type: object
|
|
18
|
+
required: [title, status, findings, score, metadata]
|
|
19
|
+
properties:
|
|
20
|
+
title:
|
|
21
|
+
type: string
|
|
22
|
+
minLength: 1
|
|
23
|
+
maxLength: 200
|
|
24
|
+
pattern: "^[A-Za-z0-9].+"
|
|
25
|
+
status:
|
|
26
|
+
type: string
|
|
27
|
+
enum: [draft, review, final]
|
|
28
|
+
findings:
|
|
29
|
+
type: array
|
|
30
|
+
minItems: 1
|
|
31
|
+
items:
|
|
32
|
+
$ref: "#/schemas/finding"
|
|
33
|
+
score:
|
|
34
|
+
type: integer
|
|
35
|
+
minimum: 0
|
|
36
|
+
maximum: 100
|
|
37
|
+
notes:
|
|
38
|
+
type: string
|
|
39
|
+
metadata:
|
|
40
|
+
type: object
|
|
41
|
+
required: [source]
|
|
42
|
+
properties:
|
|
43
|
+
source:
|
|
44
|
+
type: string
|
|
45
|
+
version:
|
|
46
|
+
type: integer
|
|
47
|
+
minimum: 1
|
|
48
|
+
analyzed:
|
|
49
|
+
type: object
|
|
50
|
+
required: [title, status, findings, score, metadata, summary]
|
|
51
|
+
properties:
|
|
52
|
+
title:
|
|
53
|
+
type: string
|
|
54
|
+
minLength: 1
|
|
55
|
+
maxLength: 200
|
|
56
|
+
pattern: "^[A-Za-z0-9].+"
|
|
57
|
+
status:
|
|
58
|
+
type: string
|
|
59
|
+
enum: [draft, review, final]
|
|
60
|
+
findings:
|
|
61
|
+
type: array
|
|
62
|
+
minItems: 1
|
|
63
|
+
items:
|
|
64
|
+
$ref: "#/schemas/finding"
|
|
65
|
+
score:
|
|
66
|
+
type: integer
|
|
67
|
+
minimum: 0
|
|
68
|
+
maximum: 100
|
|
69
|
+
notes:
|
|
70
|
+
type: string
|
|
71
|
+
metadata:
|
|
72
|
+
type: object
|
|
73
|
+
required: [source]
|
|
74
|
+
properties:
|
|
75
|
+
source:
|
|
76
|
+
type: string
|
|
77
|
+
version:
|
|
78
|
+
type: integer
|
|
79
|
+
minimum: 1
|
|
80
|
+
summary:
|
|
81
|
+
type: string
|
|
82
|
+
minLength: 1
|
|
83
|
+
stages:
|
|
84
|
+
- id: draft
|
|
85
|
+
entry: true
|
|
86
|
+
route:
|
|
87
|
+
- to: analyze
|
|
88
|
+
system_prompt: |
|
|
89
|
+
Draft a findings report in one or two sentences.
|
|
90
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and a payload matching #/schemas/report. Copy this example:
|
|
91
|
+
{"title":"Smoke report","status":"draft","findings":[{"id":"f1","severity":"low","detail":"none"}],"score":80,"metadata":{"source":"smoke-test"}}
|
|
92
|
+
model: cursor/auto
|
|
93
|
+
io:
|
|
94
|
+
input:
|
|
95
|
+
schema:
|
|
96
|
+
type: object
|
|
97
|
+
output:
|
|
98
|
+
schema:
|
|
99
|
+
$ref: "#/schemas/report"
|
|
100
|
+
- id: analyze
|
|
101
|
+
route:
|
|
102
|
+
- to: summarize
|
|
103
|
+
system_prompt: |
|
|
104
|
+
Keep the report fields and add a summary string.
|
|
105
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and a payload matching #/schemas/analyzed. Copy this example:
|
|
106
|
+
{"title":"Smoke report","status":"review","findings":[{"id":"f1","severity":"low","detail":"none"}],"score":80,"metadata":{"source":"smoke-test"},"summary":"One low finding; score 80."}
|
|
107
|
+
model: cursor/auto
|
|
108
|
+
io:
|
|
109
|
+
input:
|
|
110
|
+
schema:
|
|
111
|
+
$ref: "#/schemas/report"
|
|
112
|
+
output:
|
|
113
|
+
schema:
|
|
114
|
+
$ref: "#/schemas/analyzed"
|
|
115
|
+
- id: summarize
|
|
116
|
+
system_prompt: |
|
|
117
|
+
Summarize using title, summary, and score from the prior payload. One sentence is enough.
|
|
118
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
119
|
+
model: cursor/auto
|
|
120
|
+
io:
|
|
121
|
+
input:
|
|
122
|
+
schema:
|
|
123
|
+
type: object
|
|
124
|
+
required: [title, summary, score]
|
|
125
|
+
properties:
|
|
126
|
+
title:
|
|
127
|
+
type: string
|
|
128
|
+
minLength: 1
|
|
129
|
+
summary:
|
|
130
|
+
type: string
|
|
131
|
+
minLength: 1
|
|
132
|
+
score:
|
|
133
|
+
type: number
|
|
134
|
+
minimum: 0
|
|
135
|
+
maximum: 100
|
|
136
|
+
output:
|
|
137
|
+
schema:
|
|
138
|
+
type: object
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
id: route-demo-ref-io
|
|
2
|
+
schemas:
|
|
3
|
+
empty:
|
|
4
|
+
type: object
|
|
5
|
+
doc:
|
|
6
|
+
type: object
|
|
7
|
+
required: [title, body]
|
|
8
|
+
properties:
|
|
9
|
+
title:
|
|
10
|
+
type: string
|
|
11
|
+
minLength: 1
|
|
12
|
+
body:
|
|
13
|
+
type: string
|
|
14
|
+
extras:
|
|
15
|
+
type: array
|
|
16
|
+
items:
|
|
17
|
+
type: string
|
|
18
|
+
analyzed:
|
|
19
|
+
type: object
|
|
20
|
+
required: [title, body, verdict]
|
|
21
|
+
properties:
|
|
22
|
+
title:
|
|
23
|
+
type: string
|
|
24
|
+
minLength: 1
|
|
25
|
+
body:
|
|
26
|
+
type: string
|
|
27
|
+
extras:
|
|
28
|
+
type: array
|
|
29
|
+
items:
|
|
30
|
+
type: string
|
|
31
|
+
verdict:
|
|
32
|
+
type: string
|
|
33
|
+
enum: [approve, request-changes]
|
|
34
|
+
title-only:
|
|
35
|
+
type: object
|
|
36
|
+
required: [title]
|
|
37
|
+
properties:
|
|
38
|
+
title:
|
|
39
|
+
type: string
|
|
40
|
+
minLength: 1
|
|
41
|
+
done:
|
|
42
|
+
type: object
|
|
43
|
+
stages:
|
|
44
|
+
- id: draft
|
|
45
|
+
entry: true
|
|
46
|
+
route:
|
|
47
|
+
- to: review
|
|
48
|
+
system_prompt: |
|
|
49
|
+
Draft a document in one or two sentences.
|
|
50
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and a payload matching #/schemas/doc: {"title":"Smoke doc","body":"A short body."}.
|
|
51
|
+
model: cursor/auto
|
|
52
|
+
io:
|
|
53
|
+
input:
|
|
54
|
+
schema:
|
|
55
|
+
$ref: "#/schemas/empty"
|
|
56
|
+
output:
|
|
57
|
+
schema:
|
|
58
|
+
$ref: "#/schemas/doc"
|
|
59
|
+
- id: review
|
|
60
|
+
route:
|
|
61
|
+
- to: ship
|
|
62
|
+
system_prompt: |
|
|
63
|
+
Keep the document fields and add a verdict of approve or request-changes.
|
|
64
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and a payload matching #/schemas/analyzed: {"title":"Smoke doc","body":"A short body.","verdict":"approve"}.
|
|
65
|
+
model: cursor/auto
|
|
66
|
+
io:
|
|
67
|
+
input:
|
|
68
|
+
schema:
|
|
69
|
+
$ref: "#/schemas/doc"
|
|
70
|
+
output:
|
|
71
|
+
schema:
|
|
72
|
+
$ref: "#/schemas/analyzed"
|
|
73
|
+
- id: ship
|
|
74
|
+
system_prompt: |
|
|
75
|
+
Ship using title from the prior payload. One sentence is enough.
|
|
76
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
77
|
+
model: cursor/auto
|
|
78
|
+
io:
|
|
79
|
+
input:
|
|
80
|
+
schema:
|
|
81
|
+
$ref: "#/schemas/title-only"
|
|
82
|
+
output:
|
|
83
|
+
schema:
|
|
84
|
+
$ref: "#/schemas/done"
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
id: route-demo-if-eq
|
|
2
|
+
stages:
|
|
3
|
+
- id: triage
|
|
4
|
+
entry: true
|
|
5
|
+
route:
|
|
6
|
+
- to: page
|
|
7
|
+
if:
|
|
8
|
+
field: severity
|
|
9
|
+
op: eq
|
|
10
|
+
value: high
|
|
11
|
+
- to: notify
|
|
12
|
+
system_prompt: |
|
|
13
|
+
Triage in one sentence.
|
|
14
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"severity": "low"}.
|
|
15
|
+
model: cursor/auto
|
|
16
|
+
io:
|
|
17
|
+
input:
|
|
18
|
+
schema:
|
|
19
|
+
type: object
|
|
20
|
+
output:
|
|
21
|
+
schema:
|
|
22
|
+
type: object
|
|
23
|
+
required: [severity]
|
|
24
|
+
properties:
|
|
25
|
+
severity:
|
|
26
|
+
type: string
|
|
27
|
+
- id: page
|
|
28
|
+
system_prompt: |
|
|
29
|
+
Page on-call in one sentence.
|
|
30
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
31
|
+
model: cursor/auto
|
|
32
|
+
io:
|
|
33
|
+
input:
|
|
34
|
+
schema:
|
|
35
|
+
type: object
|
|
36
|
+
output:
|
|
37
|
+
schema:
|
|
38
|
+
type: object
|
|
39
|
+
- id: notify
|
|
40
|
+
system_prompt: |
|
|
41
|
+
Notify the team in one sentence.
|
|
42
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
43
|
+
model: cursor/auto
|
|
44
|
+
io:
|
|
45
|
+
input:
|
|
46
|
+
schema:
|
|
47
|
+
type: object
|
|
48
|
+
output:
|
|
49
|
+
schema:
|
|
50
|
+
type: object
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
id: route-demo-if-all-gated
|
|
2
|
+
stages:
|
|
3
|
+
- id: triage
|
|
4
|
+
entry: true
|
|
5
|
+
route:
|
|
6
|
+
- to: page
|
|
7
|
+
if:
|
|
8
|
+
field: severity
|
|
9
|
+
op: eq
|
|
10
|
+
value: high
|
|
11
|
+
system_prompt: |
|
|
12
|
+
Triage in one sentence.
|
|
13
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"severity": "low"}.
|
|
14
|
+
model: cursor/auto
|
|
15
|
+
io:
|
|
16
|
+
input:
|
|
17
|
+
schema:
|
|
18
|
+
type: object
|
|
19
|
+
output:
|
|
20
|
+
schema:
|
|
21
|
+
type: object
|
|
22
|
+
required: [severity]
|
|
23
|
+
properties:
|
|
24
|
+
severity:
|
|
25
|
+
type: string
|
|
26
|
+
- id: page
|
|
27
|
+
system_prompt: |
|
|
28
|
+
Page on-call in one sentence.
|
|
29
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
30
|
+
model: cursor/auto
|
|
31
|
+
io:
|
|
32
|
+
input:
|
|
33
|
+
schema:
|
|
34
|
+
type: object
|
|
35
|
+
output:
|
|
36
|
+
schema:
|
|
37
|
+
type: object
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
id: route-demo-if-composition
|
|
2
|
+
stages:
|
|
3
|
+
- id: triage
|
|
4
|
+
entry: true
|
|
5
|
+
route:
|
|
6
|
+
- to: page
|
|
7
|
+
if:
|
|
8
|
+
not:
|
|
9
|
+
all:
|
|
10
|
+
- field: severity
|
|
11
|
+
op: eq
|
|
12
|
+
value: low
|
|
13
|
+
- field: customer.tier
|
|
14
|
+
op: in
|
|
15
|
+
value: [bronze]
|
|
16
|
+
- to: notify
|
|
17
|
+
system_prompt: |
|
|
18
|
+
Triage in one sentence.
|
|
19
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"severity": "low", "customer": {"tier": "bronze"}}.
|
|
20
|
+
model: cursor/auto
|
|
21
|
+
io:
|
|
22
|
+
input:
|
|
23
|
+
schema:
|
|
24
|
+
type: object
|
|
25
|
+
output:
|
|
26
|
+
schema:
|
|
27
|
+
type: object
|
|
28
|
+
required: [severity, customer]
|
|
29
|
+
properties:
|
|
30
|
+
severity:
|
|
31
|
+
type: string
|
|
32
|
+
customer:
|
|
33
|
+
type: object
|
|
34
|
+
required: [tier]
|
|
35
|
+
properties:
|
|
36
|
+
tier:
|
|
37
|
+
type: string
|
|
38
|
+
- id: page
|
|
39
|
+
system_prompt: |
|
|
40
|
+
Page on-call in one sentence.
|
|
41
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
42
|
+
model: cursor/auto
|
|
43
|
+
io:
|
|
44
|
+
input:
|
|
45
|
+
schema:
|
|
46
|
+
type: object
|
|
47
|
+
required: [severity]
|
|
48
|
+
properties:
|
|
49
|
+
severity:
|
|
50
|
+
type: string
|
|
51
|
+
output:
|
|
52
|
+
schema:
|
|
53
|
+
type: object
|
|
54
|
+
- id: notify
|
|
55
|
+
system_prompt: |
|
|
56
|
+
Notify the team in one sentence.
|
|
57
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
58
|
+
model: cursor/auto
|
|
59
|
+
io:
|
|
60
|
+
input:
|
|
61
|
+
schema:
|
|
62
|
+
type: object
|
|
63
|
+
output:
|
|
64
|
+
schema:
|
|
65
|
+
type: object
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
id: route-demo-if-join
|
|
2
|
+
# Two-parent Join gated by inbound `if`s. Each parent evaluates `if` against
|
|
3
|
+
# its own output payload. Both match → assemble runs with both envelopes.
|
|
4
|
+
# Either misses → assemble is skipped; the run still succeeds.
|
|
5
|
+
stages:
|
|
6
|
+
- id: kickoff
|
|
7
|
+
entry: true
|
|
8
|
+
route:
|
|
9
|
+
- to: write
|
|
10
|
+
- to: draw
|
|
11
|
+
system_prompt: |
|
|
12
|
+
Kick off write and draw in one sentence.
|
|
13
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
14
|
+
model: cursor/auto
|
|
15
|
+
io:
|
|
16
|
+
input:
|
|
17
|
+
schema:
|
|
18
|
+
type: object
|
|
19
|
+
output:
|
|
20
|
+
schema:
|
|
21
|
+
type: object
|
|
22
|
+
|
|
23
|
+
- id: write
|
|
24
|
+
route:
|
|
25
|
+
- to: assemble
|
|
26
|
+
if:
|
|
27
|
+
field: ready
|
|
28
|
+
op: eq
|
|
29
|
+
value: true
|
|
30
|
+
system_prompt: |
|
|
31
|
+
Write the first half in one sentence.
|
|
32
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"ready": true}.
|
|
33
|
+
model: cursor/auto
|
|
34
|
+
io:
|
|
35
|
+
input:
|
|
36
|
+
schema:
|
|
37
|
+
type: object
|
|
38
|
+
output:
|
|
39
|
+
schema:
|
|
40
|
+
type: object
|
|
41
|
+
required: [ready]
|
|
42
|
+
properties:
|
|
43
|
+
ready:
|
|
44
|
+
type: boolean
|
|
45
|
+
|
|
46
|
+
- id: draw
|
|
47
|
+
route:
|
|
48
|
+
- to: assemble
|
|
49
|
+
if:
|
|
50
|
+
field: complete
|
|
51
|
+
op: eq
|
|
52
|
+
value: true
|
|
53
|
+
system_prompt: |
|
|
54
|
+
Draw the second half in one sentence.
|
|
55
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {"complete": true}.
|
|
56
|
+
model: cursor/auto
|
|
57
|
+
io:
|
|
58
|
+
input:
|
|
59
|
+
schema:
|
|
60
|
+
type: object
|
|
61
|
+
output:
|
|
62
|
+
schema:
|
|
63
|
+
type: object
|
|
64
|
+
required: [complete]
|
|
65
|
+
properties:
|
|
66
|
+
complete:
|
|
67
|
+
type: boolean
|
|
68
|
+
|
|
69
|
+
- id: assemble
|
|
70
|
+
system_prompt: |
|
|
71
|
+
Combine both parents' work into one summary sentence.
|
|
72
|
+
Then emit a success envelope via emit_stage_envelope with status: success, a short summary, artifacts: [], and payload: {}.
|
|
73
|
+
model: cursor/auto
|
|
74
|
+
io:
|
|
75
|
+
input:
|
|
76
|
+
schema:
|
|
77
|
+
type: object
|
|
78
|
+
output:
|
|
79
|
+
schema:
|
|
80
|
+
type: object
|