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