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