stageflow 0.23.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -5
- package/dist/a2a/configDiscovery.d.ts +9 -0
- package/dist/a2a/configDiscovery.js +18 -0
- package/dist/a2a/contracts.d.ts +94 -0
- package/dist/a2a/contracts.js +164 -0
- package/dist/a2a/limits.d.ts +14 -0
- package/dist/a2a/limits.js +29 -0
- package/dist/a2a/registry.d.ts +46 -0
- package/dist/a2a/registry.js +178 -0
- package/dist/a2a/server.d.ts +36 -0
- package/dist/a2a/server.js +344 -0
- package/dist/a2a/service.d.ts +97 -0
- package/dist/a2a/service.js +545 -0
- package/dist/a2a/store.d.ts +109 -0
- package/dist/a2a/store.js +202 -0
- package/dist/agent/activity.d.ts +3 -0
- package/dist/agent/bootProviderConfig.d.ts +21 -0
- package/dist/agent/bootProviderConfig.js +74 -0
- package/dist/agent/piAdapter.d.ts +9 -1
- package/dist/agent/piAdapter.js +58 -3
- package/dist/agent/piIsolatedMcp.d.ts +2 -0
- package/dist/agent/piIsolatedMcp.js +10 -2
- package/dist/agent/port.d.ts +6 -0
- package/dist/agent/streamLogRedact.d.ts +1 -1
- package/dist/agent/streamLogRedact.js +4 -11
- package/dist/cli/a2aCommand.d.ts +8 -0
- package/dist/cli/a2aCommand.js +131 -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/debugRunCommand.d.ts +10 -0
- package/dist/cli/debugRunCommand.js +109 -0
- package/dist/cli/doctorCommand.d.ts +32 -0
- package/dist/cli/doctorCommand.js +453 -0
- package/dist/cli/envelopeCommand.js +9 -2
- package/dist/cli/exportAllCommand.d.ts +55 -0
- package/dist/cli/exportAllCommand.js +218 -0
- package/dist/cli/exportRunCommand.js +23 -21
- package/dist/cli/hostClient.d.ts +21 -3
- package/dist/cli/hostClient.js +93 -12
- package/dist/cli/initTemplates.d.ts +1 -1
- package/dist/cli/initTemplates.js +8 -1
- package/dist/cli/resolveSafeOutPath.d.ts +2 -0
- package/dist/cli/resolveSafeOutPath.js +40 -0
- package/dist/cli/restoreCommand.d.ts +10 -0
- package/dist/cli/restoreCommand.js +90 -0
- package/dist/cli/runCommand.d.ts +3 -2
- package/dist/cli/runCommand.js +93 -11
- package/dist/cli/runOutput.d.ts +4 -0
- package/dist/cli/runOutput.js +33 -7
- package/dist/cli/runStageCommand.d.ts +34 -0
- package/dist/cli/runStageCommand.js +426 -0
- package/dist/cli/runsCommand.d.ts +1 -1
- package/dist/cli/runsCommand.js +162 -8
- package/dist/cli.js +190 -30
- package/dist/config/catalogRelativePath.d.ts +62 -0
- package/dist/config/catalogRelativePath.js +118 -0
- package/dist/config/configOrigin.d.ts +27 -0
- package/dist/config/configOrigin.js +59 -0
- package/dist/config/hostConfig.d.ts +55 -0
- package/dist/config/hostConfig.js +333 -0
- package/dist/config/listSkills.d.ts +26 -0
- package/dist/config/listSkills.js +190 -3
- package/dist/config/loadOutcome.d.ts +1 -1
- package/dist/config/loadPipeline.js +23 -2
- package/dist/config/loadStage.js +18 -0
- package/dist/config/loadTask.d.ts +2 -0
- package/dist/config/loadTask.js +57 -18
- package/dist/config/materializeStageModels.js +5 -1
- package/dist/config/mergePipelineIncludes.d.ts +3 -0
- package/dist/config/mergePipelineIncludes.js +19 -0
- package/dist/config/migrateYaml.js +6 -11
- package/dist/config/multiProjectCatalog.d.ts +30 -0
- package/dist/config/multiProjectCatalog.js +142 -0
- package/dist/config/normalizePipelineStageEntry.js +20 -1
- package/dist/config/pipelineStageKeys.js +2 -0
- package/dist/config/resolveCatalogRoots.d.ts +27 -0
- package/dist/config/resolveCatalogRoots.js +76 -0
- package/dist/config/resolveModel.d.ts +7 -1
- package/dist/config/resolveModel.js +11 -1
- package/dist/config/resolveStageMcpServers.d.ts +9 -1
- package/dist/config/resolveStageMcpServers.js +36 -9
- package/dist/config/secretFromEnvOrFile.d.ts +9 -0
- package/dist/config/secretFromEnvOrFile.js +34 -0
- package/dist/config/seededCatalog.d.ts +11 -0
- package/dist/config/seededCatalog.js +29 -0
- package/dist/config/toolRequires.d.ts +24 -0
- package/dist/config/toolRequires.js +115 -0
- package/dist/config/validateCatalog.d.ts +5 -1
- package/dist/config/validateCatalog.js +140 -1
- package/dist/diagnostics/checks.d.ts +39 -0
- package/dist/diagnostics/checks.js +135 -0
- package/dist/errors/codes.d.ts +14 -0
- package/dist/errors/codes.js +59 -0
- package/dist/git/cache.d.ts +14 -0
- package/dist/git/cache.js +150 -0
- package/dist/git/credentials.d.ts +9 -0
- package/dist/git/credentials.js +88 -0
- package/dist/git/errors.d.ts +20 -0
- package/dist/git/errors.js +94 -0
- package/dist/git/exec.d.ts +16 -0
- package/dist/git/exec.js +135 -0
- package/dist/git/operations.d.ts +29 -0
- package/dist/git/operations.js +153 -0
- package/dist/git/version.d.ts +1 -0
- package/dist/git/version.js +10 -0
- package/dist/logging/audit.d.ts +16 -0
- package/dist/logging/audit.js +19 -0
- package/dist/logging/commonWords.d.ts +2 -0
- package/dist/logging/commonWords.js +13 -0
- package/dist/logging/logger.d.ts +49 -0
- package/dist/logging/logger.js +193 -0
- package/dist/logging/namedSecrets.d.ts +6 -0
- package/dist/logging/namedSecrets.js +58 -0
- package/dist/logging/redact.d.ts +13 -0
- package/dist/logging/redact.js +88 -0
- package/dist/mcp/catalogTools.js +591 -76
- package/dist/mcp/checkoutTools.d.ts +52 -0
- package/dist/mcp/checkoutTools.js +332 -0
- package/dist/mcp/controlTools.js +179 -5
- package/dist/mcp/deps.d.ts +1 -0
- package/dist/mcp/getStartedTool.d.ts +3 -0
- package/dist/mcp/getStartedTool.js +62 -0
- package/dist/mcp/readArtifact.d.ts +11 -0
- package/dist/mcp/readArtifact.js +46 -30
- package/dist/mcp/server.js +1 -0
- package/dist/mcp/tools.js +4 -0
- package/dist/net/proxy.d.ts +14 -0
- package/dist/net/proxy.js +78 -0
- package/dist/package-meta.d.ts +2 -1
- package/dist/package-meta.js +2 -1
- package/dist/preflight/bash.d.ts +8 -0
- package/dist/preflight/bash.js +34 -0
- package/dist/preflight/claudeRoot.d.ts +11 -0
- package/dist/preflight/claudeRoot.js +23 -0
- package/dist/preflight/mcpCommands.d.ts +8 -0
- package/dist/preflight/mcpCommands.js +36 -0
- package/dist/preflight/pipelinePreflight.d.ts +40 -0
- package/dist/preflight/pipelinePreflight.js +192 -0
- package/dist/preflight/tls.d.ts +6 -0
- package/dist/preflight/tls.js +18 -0
- package/dist/preflight/toolchain.d.ts +45 -0
- package/dist/preflight/toolchain.js +219 -0
- package/dist/project/findProjectRoot.js +3 -4
- package/dist/project/globalHome.d.ts +7 -0
- package/dist/project/globalHome.js +63 -2
- package/dist/project/resolveProjectContext.js +2 -2
- package/dist/project/resolveStageflowContext.js +2 -2
- package/dist/projection/projectRun.d.ts +2 -1
- package/dist/projection/projectRun.js +1 -0
- package/dist/runstore/assertTmpdir.d.ts +1 -0
- package/dist/runstore/assertTmpdir.js +21 -0
- package/dist/runstore/backup.d.ts +52 -0
- package/dist/runstore/backup.js +292 -0
- package/dist/runstore/createStore.d.ts +27 -0
- package/dist/runstore/createStore.js +75 -7
- 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 +119 -8
- 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 +37 -3
- package/dist/runstore/sqlite/SqliteRunStore.js +401 -227
- package/dist/runstore/sqlite/applyStorePragmas.d.ts +39 -0
- package/dist/runstore/sqlite/applyStorePragmas.js +145 -0
- package/dist/runstore/sqlite/migrations/001-baseline.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/001-baseline.js +10 -0
- package/dist/runstore/sqlite/migrations/002-repository-binding.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/002-repository-binding.js +29 -0
- package/dist/runstore/sqlite/migrations/003-run-lifecycle.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/003-run-lifecycle.js +28 -0
- package/dist/runstore/sqlite/migrations/004-auto-resume-count.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/004-auto-resume-count.js +19 -0
- package/dist/runstore/sqlite/migrations/005-config-origins.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/005-config-origins.js +19 -0
- package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/006-pipeline-body-and-caller.js +28 -0
- package/dist/runstore/sqlite/migrations/007-projects-registry.d.ts +7 -0
- package/dist/runstore/sqlite/migrations/007-projects-registry.js +31 -0
- package/dist/runstore/sqlite/migrations/index.d.ts +21 -0
- package/dist/runstore/sqlite/migrations/index.js +72 -0
- package/dist/runstore/sqlite/schema.d.ts +20 -1
- package/dist/runstore/sqlite/schema.js +283 -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/submission.d.ts +11 -0
- package/dist/runstore/submission.js +7 -0
- package/dist/runstore/trackProjection.js +2 -0
- package/dist/runstore/workspaceLayout.d.ts +13 -0
- package/dist/runstore/workspaceLayout.js +76 -0
- package/dist/runtime/completionCheckRunner.d.ts +3 -0
- package/dist/runtime/completionCheckRunner.js +45 -7
- package/dist/runtime/containerLimits.d.ts +16 -0
- package/dist/runtime/containerLimits.js +84 -0
- package/dist/runtime/credentialMaterialisation.d.ts +28 -0
- package/dist/runtime/credentialMaterialisation.js +128 -0
- package/dist/runtime/gitCheckoutCapability.js +7 -13
- package/dist/runtime/pipelineRunner.d.ts +38 -1
- package/dist/runtime/pipelineRunner.js +179 -15
- package/dist/runtime/pipelineScheduler.d.ts +15 -0
- package/dist/runtime/pipelineScheduler.js +167 -42
- package/dist/runtime/reloadRunCatalog.js +12 -1
- package/dist/runtime/repositoryMaterialize.d.ts +47 -0
- package/dist/runtime/repositoryMaterialize.js +235 -0
- package/dist/runtime/resolveEnvelopeRef.d.ts +30 -0
- package/dist/runtime/resolveEnvelopeRef.js +79 -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 +179 -4
- package/dist/runtime/runManager.js +1644 -83
- package/dist/runtime/runRetentionSweep.d.ts +31 -0
- package/dist/runtime/runRetentionSweep.js +328 -0
- package/dist/runtime/runRetryCoordinator.d.ts +2 -0
- package/dist/runtime/runRetryCoordinator.js +19 -2
- package/dist/runtime/runSkills.d.ts +40 -0
- package/dist/runtime/runSkills.js +173 -0
- package/dist/runtime/stageAttemptBootstrap.d.ts +5 -1
- package/dist/runtime/stageAttemptBootstrap.js +195 -24
- package/dist/runtime/stageCacheEnv.d.ts +6 -0
- package/dist/runtime/stageCacheEnv.js +34 -0
- package/dist/runtime/stageConcurrency.d.ts +2 -1
- package/dist/runtime/stageConcurrency.js +4 -2
- package/dist/runtime/stageEnvironment.d.ts +38 -0
- package/dist/runtime/stageEnvironment.js +193 -0
- package/dist/runtime/stageProcessLauncher.d.ts +18 -0
- package/dist/runtime/stageProcessLauncher.js +194 -38
- package/dist/runtime/stageRecovery.d.ts +3 -1
- package/dist/runtime/stageRecovery.js +19 -4
- package/dist/runtime/stageRoots.d.ts +38 -1
- package/dist/runtime/stageRoots.js +118 -0
- package/dist/runtime/stageRunner.d.ts +1 -0
- package/dist/runtime/stageRunner.js +3 -1
- package/dist/runtime/stageSecretDecl.d.ts +9 -0
- package/dist/runtime/stageSecretDecl.js +102 -0
- package/dist/runtime/stageSecrets.d.ts +40 -0
- package/dist/runtime/stageSecrets.js +181 -0
- package/dist/runtime/stageWorker.d.ts +3 -2
- package/dist/runtime/stageWorker.js +58 -10
- package/dist/runtime/stageWorkerProtocol.d.ts +5 -0
- package/dist/runtime/stageWorkerProtocol.js +8 -0
- package/dist/runtime/startPayload.d.ts +32 -0
- package/dist/runtime/startPayload.js +59 -0
- package/dist/runtime/taskInput.js +14 -5
- package/dist/runtime/verifiedStageExecution.d.ts +1 -0
- package/dist/runtime/verifiedStageExecution.js +2 -1
- package/dist/runtime/workspaceBinding.d.ts +20 -0
- package/dist/runtime/workspaceBinding.js +60 -0
- package/dist/server/allowedHosts.d.ts +19 -0
- package/dist/server/allowedHosts.js +179 -0
- package/dist/server/bootstrap.d.ts +38 -2
- package/dist/server/bootstrap.js +219 -4
- package/dist/server/controlToken.d.ts +47 -0
- package/dist/server/controlToken.js +241 -0
- package/dist/server/createHttpHost.d.ts +11 -2
- package/dist/server/createHttpHost.js +109 -10
- package/dist/server/ensureGlobalService.d.ts +5 -1
- package/dist/server/ensureGlobalService.js +35 -1
- package/dist/server/healthSurfaces.d.ts +6 -0
- package/dist/server/healthSurfaces.js +98 -0
- package/dist/server/http.d.ts +12 -1
- package/dist/server/http.js +1085 -485
- package/dist/server/listenHost.d.ts +5 -0
- package/dist/server/listenHost.js +56 -0
- package/dist/server/mcpHost.d.ts +10 -1
- package/dist/server/mcpHost.js +36 -6
- package/dist/server/operatorResults.d.ts +2 -2
- package/dist/server/operatorResults.js +40 -29
- package/dist/server/requestAuthContext.d.ts +12 -0
- package/dist/server/requestAuthContext.js +21 -0
- package/dist/server/shutdown.d.ts +69 -0
- package/dist/server/shutdown.js +219 -0
- package/dist/types/pipeline.d.ts +7 -0
- package/dist/types/stage.d.ts +8 -0
- package/dist/types/task.d.ts +8 -0
- package/dist/ui/assets/index-B6hlSXXn.js +120 -0
- package/dist/ui/index.html +1 -1
- package/examples/README.md +98 -0
- package/examples/archify-on-pr/README.md +213 -0
- package/examples/archify-on-pr/archify-on-pr.pipeline.yaml +19 -0
- package/examples/archify-on-pr/archify-on-pr.task.yaml +19 -0
- package/examples/archify-on-pr/author-diagrams.yaml +106 -0
- package/examples/archify-on-pr/detect-changes.yaml +89 -0
- package/examples/ci-validate/README.md +35 -0
- package/examples/ci-validate/check.yaml +13 -0
- package/examples/ci-validate/ci-demo.pipeline.yaml +4 -0
- package/examples/ci-validate/validate.sh +5 -0
- package/examples/compliance-review-demo/README.md +125 -0
- package/examples/compliance-review-demo/compliance-review-demo.pipeline.yaml +29 -0
- package/examples/compliance-review-demo/connect-account.yaml +47 -0
- package/examples/compliance-review-demo/map-to-control.yaml +123 -0
- package/examples/compliance-review-demo/poll-bucket-config.yaml +103 -0
- package/examples/compliance-review-demo/publish-report.yaml +79 -0
- package/examples/compliance-review-demo/review-verdict.yaml +122 -0
- package/examples/compliance-review-demo/run-compliance-check.yaml +96 -0
- package/examples/compliance-review-demo/store-evidence.yaml +143 -0
- package/examples/conditional-fork/README.md +89 -0
- package/examples/conditional-fork/branch-a.yaml +13 -0
- package/examples/conditional-fork/branch-b.yaml +13 -0
- package/examples/conditional-fork/decide.yaml +35 -0
- package/examples/conditional-fork/fork-demo.pipeline.yaml +20 -0
- package/examples/conditional-fork/fork-demo.task.yaml +8 -0
- package/examples/context7-mcp/README.md +42 -0
- package/examples/context7-mcp/context7-mcp.pipeline.yaml +15 -0
- package/examples/context7-mcp/context7-mcp.task.yaml +4 -0
- package/examples/context7-mcp/fetch-docs.yaml +52 -0
- package/examples/context7-mcp/resolve-library.yaml +31 -0
- package/examples/context7-mcp/write-brief.yaml +52 -0
- package/examples/feature-loop/README.md +104 -0
- package/examples/feature-loop/address-feedback.yaml +148 -0
- package/examples/feature-loop/align.yaml +116 -0
- package/examples/feature-loop/decompose.yaml +86 -0
- package/examples/feature-loop/default-model-hierarchy.task.yaml +58 -0
- package/examples/feature-loop/feature-loop.pipeline.yaml +140 -0
- package/examples/feature-loop/feature-loop.task.yaml +25 -0
- package/examples/feature-loop/implement.yaml +128 -0
- package/examples/feature-loop/plan.yaml +111 -0
- package/examples/feature-loop/publish.yaml +167 -0
- package/examples/feature-loop/review.yaml +146 -0
- package/examples/feature-loop/verify.yaml +106 -0
- package/examples/feedback-loop/README.md +72 -0
- package/examples/feedback-loop/VERIFY.md +208 -0
- package/examples/feedback-loop/continue-only.task.yaml +4 -0
- package/examples/feedback-loop/exhaust-require-continue.task.yaml +6 -0
- package/examples/feedback-loop/exhaust-wait-human.task.yaml +11 -0
- package/examples/feedback-loop/feedback-loop-wait-human.pipeline.yaml +23 -0
- package/examples/feedback-loop/feedback-loop.pipeline.yaml +23 -0
- package/examples/feedback-loop/feedback-loop.task.yaml +4 -0
- package/examples/feedback-loop/implement.yaml +14 -0
- package/examples/feedback-loop/plan.yaml +14 -0
- package/examples/feedback-loop/review.yaml +15 -0
- package/examples/feedback-loop/send-back-once.task.yaml +6 -0
- package/examples/feedback-loop/submit.yaml +12 -0
- package/examples/generic-fan-in/README.md +151 -0
- package/examples/generic-fan-in/clarify.yaml +18 -0
- package/examples/generic-fan-in/generic-fan-in-accepted.pipeline.yaml +19 -0
- package/examples/generic-fan-in/generic-fan-in-accepted.task.yaml +8 -0
- package/examples/generic-fan-in/generic-fan-in.pipeline.yaml +18 -0
- package/examples/generic-fan-in/generic-fan-in.task.yaml +9 -0
- package/examples/generic-fan-in/research.yaml +45 -0
- package/examples/generic-fan-in/synthesize.yaml +66 -0
- package/examples/generic-fan-in/validation.yaml +45 -0
- package/examples/github-release/README.md +78 -0
- package/examples/github-release/draft-release-notes.yaml +64 -0
- package/examples/github-release/github-release.pipeline.yaml +11 -0
- package/examples/github-release/github-release.task.yaml +13 -0
- package/examples/github-release/publish-github-release.yaml +64 -0
- package/examples/hello-world/README.md +28 -0
- package/examples/hello-world/hello.pipeline.yaml +4 -0
- package/examples/hello-world/my-task.task.yaml +6 -0
- package/examples/hello-world/research.yaml +18 -0
- package/examples/mcp-hitl-tour/README.md +113 -0
- package/examples/mcp-hitl-tour/draft-angle.yaml +33 -0
- package/examples/mcp-hitl-tour/draft-short.yaml +32 -0
- package/examples/mcp-hitl-tour/emit-angles.yaml +45 -0
- package/examples/mcp-hitl-tour/gather.yaml +31 -0
- package/examples/mcp-hitl-tour/intake.yaml +62 -0
- package/examples/mcp-hitl-tour/mcp-hitl-tour-exhaust.task.yaml +13 -0
- package/examples/mcp-hitl-tour/mcp-hitl-tour.pipeline.yaml +54 -0
- package/examples/mcp-hitl-tour/mcp-hitl-tour.task.yaml +16 -0
- package/examples/mcp-hitl-tour/polish.yaml +33 -0
- package/examples/mcp-hitl-tour/review.yaml +17 -0
- package/examples/mcp-hitl-tour/ship.yaml +25 -0
- package/examples/oss-issue-contribution/README.md +218 -0
- package/examples/oss-issue-contribution/oss-address-review-feedback.yaml +117 -0
- package/examples/oss-issue-contribution/oss-approve-contribution.yaml +181 -0
- package/examples/oss-issue-contribution/oss-approve-plan.yaml +111 -0
- package/examples/oss-issue-contribution/oss-explain-fix.yaml +108 -0
- package/examples/oss-issue-contribution/oss-explain-issue.yaml +114 -0
- package/examples/oss-issue-contribution/oss-implement-source-fix.yaml +171 -0
- package/examples/oss-issue-contribution/oss-investigate-area.yaml +116 -0
- package/examples/oss-issue-contribution/oss-issue-contribution.pipeline.yaml +125 -0
- package/examples/oss-issue-contribution/oss-issue-intake.yaml +106 -0
- package/examples/oss-issue-contribution/oss-plan-investigation.yaml +112 -0
- package/examples/oss-issue-contribution/oss-plan-review.yaml +109 -0
- package/examples/oss-issue-contribution/oss-reproduce-issue.yaml +140 -0
- package/examples/oss-issue-contribution/oss-review-change.yaml +107 -0
- package/examples/oss-issue-contribution/oss-verify-fix.yaml +130 -0
- package/examples/oss-issue-contribution/oss-write-regression-test.yaml +135 -0
- package/examples/oss-issue-contribution/pi-7629.task.yaml +79 -0
- package/examples/oss-issue-contribution/pi-8919.task.yaml +75 -0
- package/examples/oss-issue-contribution/pydantic-ai-7971.task.yaml +53 -0
- package/examples/oss-quick-fix/README.md +65 -0
- package/examples/oss-quick-fix/implement-fix.yaml +84 -0
- package/examples/oss-quick-fix/oss-quick-fix.pipeline.yaml +35 -0
- package/examples/oss-quick-fix/oss-quick-fix.task.yaml +19 -0
- package/examples/oss-quick-fix/ship-fix.yaml +81 -0
- package/examples/oss-quick-fix/understand-issue.yaml +67 -0
- package/examples/oss-quick-fix/verify-fix.yaml +73 -0
- package/examples/plan-review/README.md +37 -0
- package/examples/plan-review/plan-review-followup.yaml +13 -0
- package/examples/plan-review/plan-review.pipeline.yaml +9 -0
- package/examples/plan-review/plan-review.task.yaml +9 -0
- package/examples/plan-review/plan-review.yaml +25 -0
- package/examples/playwright-mcp/README.md +39 -0
- package/examples/playwright-mcp/playwright-mcp.pipeline.yaml +5 -0
- package/examples/playwright-mcp/playwright-mcp.task.yaml +4 -0
- package/examples/playwright-mcp/screenshot.yaml +40 -0
- package/examples/retry-tour/README.md +75 -0
- package/examples/retry-tour/retry-tour.pipeline.yaml +122 -0
- package/examples/retry-tour/retry-tour.task.yaml +9 -0
- package/examples/route-if-tour/README.md +202 -0
- package/examples/route-if-tour/route-if-tour.pipeline.yaml +950 -0
- package/examples/route-if-tour/route-if-tour.task.yaml +4 -0
- package/examples/route-wiring-smoke-test/01-core-routing.pipeline.yaml +168 -0
- package/examples/route-wiring-smoke-test/02-on-gating.pipeline.yaml +44 -0
- package/examples/route-wiring-smoke-test/03-two-entry-points.pipeline.yaml +28 -0
- package/examples/route-wiring-smoke-test/04-entry-false-equivalent-to-omitted.pipeline.yaml +27 -0
- package/examples/route-wiring-smoke-test/05-fork-choice.pipeline.yaml +110 -0
- package/examples/route-wiring-smoke-test/06-fan-out-fan-in.pipeline.yaml +82 -0
- package/examples/route-wiring-smoke-test/07-loop-human-decision.pipeline.yaml +82 -0
- package/examples/route-wiring-smoke-test/08-skip-fallback-and-multi-on-gate.pipeline.yaml +77 -0
- package/examples/route-wiring-smoke-test/09-multi-loop-targets.pipeline.yaml +102 -0
- package/examples/route-wiring-smoke-test/10-uses-dialect-fork.pipeline.yaml +23 -0
- package/examples/route-wiring-smoke-test/11-sequential-io-handoff.pipeline.yaml +37 -0
- package/examples/route-wiring-smoke-test/12-complex-io-schemas.pipeline.yaml +138 -0
- package/examples/route-wiring-smoke-test/13-ref-io-handoff.pipeline.yaml +84 -0
- package/examples/route-wiring-smoke-test/14-if-eq-gating.pipeline.yaml +50 -0
- package/examples/route-wiring-smoke-test/15-if-all-gated.pipeline.yaml +37 -0
- package/examples/route-wiring-smoke-test/16-if-composition.pipeline.yaml +65 -0
- package/examples/route-wiring-smoke-test/17-if-join.pipeline.yaml +80 -0
- package/examples/route-wiring-smoke-test/README.md +377 -0
- package/examples/route-wiring-smoke-test/rejected/01-reject-legacy-needs.pipeline.yaml +26 -0
- package/examples/route-wiring-smoke-test/rejected/02-reject-legacy-fork.pipeline.yaml +25 -0
- package/examples/route-wiring-smoke-test/rejected/03-reject-legacy-feedback-loop.pipeline.yaml +30 -0
- package/examples/route-wiring-smoke-test/rejected/04-reject-missing-entry.pipeline.yaml +24 -0
- package/examples/route-wiring-smoke-test/rejected/05-reject-unreachable.pipeline.yaml +35 -0
- package/examples/route-wiring-smoke-test/rejected/06-reject-allow-none-without-route-select.pipeline.yaml +37 -0
- package/examples/route-wiring-smoke-test/rejected/07-reject-cycle.pipeline.yaml +27 -0
- package/examples/route-wiring-smoke-test/rejected/08-reject-loop-non-ancestor.pipeline.yaml +42 -0
- package/examples/route-wiring-smoke-test/rejected/09-reject-route-select-leaf.pipeline.yaml +26 -0
- package/examples/route-wiring-smoke-test/rejected/12-reject-loop-replay-unsafe.pipeline.yaml +55 -0
- package/examples/route-wiring-smoke-test/rejected/13-reject-multiple-loop-entries.pipeline.yaml +51 -0
- package/examples/route-wiring-smoke-test/rejected/14-reject-duplicate-stage-id.pipeline.yaml +35 -0
- package/examples/route-wiring-smoke-test/rejected/15-reject-unknown-route-target.pipeline.yaml +15 -0
- package/examples/route-wiring-smoke-test/rejected/16-reject-malformed-route-item.pipeline.yaml +15 -0
- package/examples/route-wiring-smoke-test/rejected/17-reject-io-incompatible.pipeline.yaml +33 -0
- package/examples/route-wiring-smoke-test/rejected/18-reject-nested-io.pipeline.yaml +51 -0
- package/examples/route-wiring-smoke-test/rejected/19-reject-array-item-io.pipeline.yaml +55 -0
- package/examples/route-wiring-smoke-test/rejected/20-reject-closed-io.pipeline.yaml +36 -0
- package/examples/route-wiring-smoke-test/rejected/21-reject-ref-io.pipeline.yaml +42 -0
- package/examples/route-wiring-smoke-test/rejected/22-reject-if-unknown-field.pipeline.yaml +33 -0
- package/examples/route-wiring-smoke-test/rejected/23-reject-if-optional-field.pipeline.yaml +32 -0
- package/examples/route-wiring-smoke-test/rejected/24-reject-if-empty-all.pipeline.yaml +31 -0
- package/examples/route-wiring-smoke-test/rejected/25-reject-if-gt-on-string.pipeline.yaml +33 -0
- package/examples/route-wiring-smoke-test/rejected/26-reject-if-optional-nested.pipeline.yaml +36 -0
- package/examples/route-wiring-smoke-test/rejected/27-reject-if-on-loop.pipeline.yaml +63 -0
- package/examples/route-wiring-smoke-test/rejected/29-reject-if-on-failed.pipeline.yaml +46 -0
- package/examples/route-wiring-smoke-test/smoke-test.task.yaml +4 -0
- package/examples/route-wiring-smoke-test/stages/branch-a.yaml +12 -0
- package/examples/route-wiring-smoke-test/stages/branch-b.yaml +12 -0
- package/examples/route-wiring-smoke-test/stages/decide.yaml +12 -0
- package/examples/route-wiring-smoke-test/stages/finish.yaml +12 -0
- package/examples/ship-feature/README.md +190 -0
- package/examples/ship-feature/feat-address-feedback.yaml +119 -0
- package/examples/ship-feature/feat-implement.yaml +180 -0
- package/examples/ship-feature/feat-plan.yaml +120 -0
- package/examples/ship-feature/feat-review.yaml +109 -0
- package/examples/ship-feature/feat-ship.yaml +203 -0
- package/examples/ship-feature/ship-feature.pipeline.yaml +44 -0
- package/examples/ship-feature/ship-feature.task.yaml +78 -0
- package/examples/stage-mcp/README.md +144 -0
- package/examples/stage-mcp/echo-mcp.mjs +20 -0
- package/examples/stage-mcp/stage-mcp-dead.pipeline.yaml +5 -0
- package/examples/stage-mcp/stage-mcp-dead.task.yaml +3 -0
- package/examples/stage-mcp/stage-mcp-missing-var.pipeline.yaml +5 -0
- package/examples/stage-mcp/stage-mcp-missing-var.task.yaml +3 -0
- package/examples/stage-mcp/stage-mcp.pipeline.yaml +5 -0
- package/examples/stage-mcp/stage-mcp.task.yaml +4 -0
- package/examples/stage-mcp/use-echo.yaml +20 -0
- package/examples/verify-tour/README.md +80 -0
- package/examples/verify-tour/verify-tour.pipeline.yaml +162 -0
- package/examples/verify-tour/verify-tour.task.yaml +11 -0
- package/package.json +6 -1
- package/skills/stageflow/SKILL.md +6 -6
- package/skills/stageflow/references/control-surface.md +11 -5
- package/skills/stageflow/scripts/detect-host.mjs +14 -1
- package/skills/stageflow/scripts/detect-host.test.mjs +29 -1
- package/skills/stageflow-author/SKILL.md +4 -3
- package/skills/stageflow-author/references/catalog-mapping.md +16 -0
- package/skills/stageflow-author/references/catalog-write-conventions.md +1 -1
- package/skills/stageflow-run/SKILL.md +20 -12
- package/skills/stageflow-run/references/mcp-call.md +9 -1
- package/skills/stageflow-run/references/task-and-pipeline-selection.md +16 -5
- package/skills/stageflow-run/scripts/mcp-call.mjs +46 -6
- package/skills/stageflow-run/scripts/mcp-call.test.mjs +64 -0
- package/skills/stageflow-session-capture/references/catalog-authoring.md +2 -0
- package/skills/stageflow-setup/SKILL.md +40 -8
- package/dist/ui/assets/index-Da5EHU6M.js +0 -119
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import type { CallerSurface } from "../server/requestAuthContext.js";
|
|
2
|
+
import type { ToolchainCheck } from "../preflight/toolchain.js";
|
|
3
|
+
import type { SkillOrigin } from "../config/listSkills.js";
|
|
4
|
+
import type { ResolvedMcpServers } from "../config/resolveStageMcpServers.js";
|
|
5
|
+
import type { SkillsPayload } from "../runtime/runSkills.js";
|
|
6
|
+
import type { LoadedStageConfig } from "../types/stage.js";
|
|
7
|
+
import { type NamedSecret, type RedactOptions } from "../logging/redact.js";
|
|
8
|
+
import type { RunStore } from "./port.js";
|
|
9
|
+
export declare const RUN_MANIFEST_VERSION: 1;
|
|
10
|
+
export type ModelAuthoredTier = "stage" | "pipeline" | "global";
|
|
11
|
+
export type RunManifestHost = {
|
|
12
|
+
stageflow_version: string;
|
|
13
|
+
build_sha: string;
|
|
14
|
+
image_digest: string | null;
|
|
15
|
+
schema_version: number;
|
|
16
|
+
};
|
|
17
|
+
export type RunManifestCaller = {
|
|
18
|
+
caller_id: string | null;
|
|
19
|
+
surface: CallerSurface;
|
|
20
|
+
};
|
|
21
|
+
export type RunManifestBinding = {
|
|
22
|
+
kind: "repository";
|
|
23
|
+
repository: string;
|
|
24
|
+
ref?: string;
|
|
25
|
+
resolved_sha?: string;
|
|
26
|
+
branch?: string;
|
|
27
|
+
worktree_path?: string;
|
|
28
|
+
} | {
|
|
29
|
+
kind: "checkout";
|
|
30
|
+
resolved_sha?: string;
|
|
31
|
+
worktree_path?: string;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "unbound";
|
|
34
|
+
};
|
|
35
|
+
export type RunManifestPipeline = {
|
|
36
|
+
source: "inline" | "path";
|
|
37
|
+
path: string | null;
|
|
38
|
+
bytes_sha256: string;
|
|
39
|
+
body: unknown;
|
|
40
|
+
};
|
|
41
|
+
export type RunManifestTask = {
|
|
42
|
+
source: "inline" | "path";
|
|
43
|
+
path: string | null;
|
|
44
|
+
bytes_sha256: string;
|
|
45
|
+
body: string;
|
|
46
|
+
};
|
|
47
|
+
export type RunManifestSkill = {
|
|
48
|
+
name: string;
|
|
49
|
+
origin: SkillOrigin;
|
|
50
|
+
digest: string;
|
|
51
|
+
files: string[];
|
|
52
|
+
};
|
|
53
|
+
export type RunManifestStageModel = {
|
|
54
|
+
authored: string;
|
|
55
|
+
authored_tier: ModelAuthoredTier;
|
|
56
|
+
resolved?: string;
|
|
57
|
+
thinking_level?: string;
|
|
58
|
+
};
|
|
59
|
+
export type RunManifestMcpServer = {
|
|
60
|
+
name: string;
|
|
61
|
+
command?: string;
|
|
62
|
+
args?: unknown;
|
|
63
|
+
env?: Record<string, unknown>;
|
|
64
|
+
url?: string;
|
|
65
|
+
origin?: string;
|
|
66
|
+
[key: string]: unknown;
|
|
67
|
+
};
|
|
68
|
+
export type RunManifestStage = {
|
|
69
|
+
stage_id: string;
|
|
70
|
+
model: RunManifestStageModel;
|
|
71
|
+
mcp_servers: RunManifestMcpServer[];
|
|
72
|
+
};
|
|
73
|
+
export type RunManifestToolchainEntry = {
|
|
74
|
+
tool: string;
|
|
75
|
+
required?: string;
|
|
76
|
+
resolved?: string;
|
|
77
|
+
path?: string;
|
|
78
|
+
origin?: ToolchainCheck["origin"];
|
|
79
|
+
status?: ToolchainCheck["status"];
|
|
80
|
+
};
|
|
81
|
+
export type RunManifestV1 = {
|
|
82
|
+
manifest_version: typeof RUN_MANIFEST_VERSION;
|
|
83
|
+
run_id: string;
|
|
84
|
+
created_at: string;
|
|
85
|
+
finalised_at?: string;
|
|
86
|
+
host: RunManifestHost;
|
|
87
|
+
caller: RunManifestCaller;
|
|
88
|
+
binding: RunManifestBinding;
|
|
89
|
+
pipeline: RunManifestPipeline;
|
|
90
|
+
task: RunManifestTask;
|
|
91
|
+
skills: RunManifestSkill[];
|
|
92
|
+
stages: RunManifestStage[];
|
|
93
|
+
toolchain: RunManifestToolchainEntry[];
|
|
94
|
+
};
|
|
95
|
+
export type RunManifest = RunManifestV1;
|
|
96
|
+
export declare function sha256Hex(bytes: string | Buffer): string;
|
|
97
|
+
export declare function sha256Digest(bytes: string | Buffer): string;
|
|
98
|
+
export declare function digestSkillFiles(files: Record<string, string>): {
|
|
99
|
+
digest: string;
|
|
100
|
+
files: string[];
|
|
101
|
+
};
|
|
102
|
+
export declare function skillsFromPayload(payload: SkillsPayload | undefined): RunManifestSkill[];
|
|
103
|
+
export declare function toolchainFromChecks(checks: readonly ToolchainCheck[]): RunManifestToolchainEntry[];
|
|
104
|
+
export declare function bindingFromFields(fields: {
|
|
105
|
+
repository?: string;
|
|
106
|
+
ref?: string;
|
|
107
|
+
resolvedSha?: string;
|
|
108
|
+
runBranch?: string;
|
|
109
|
+
checkoutRoot?: string;
|
|
110
|
+
}): RunManifestBinding;
|
|
111
|
+
export declare function stagesFromLoaded(stages: readonly LoadedStageConfig[]): RunManifestStage[];
|
|
112
|
+
export declare function buildHostIdentity(env?: NodeJS.ProcessEnv): RunManifestHost;
|
|
113
|
+
export type BuildInitialRunManifestInput = {
|
|
114
|
+
runId: string;
|
|
115
|
+
createdAt: string;
|
|
116
|
+
callerId: string | null;
|
|
117
|
+
surface: CallerSurface;
|
|
118
|
+
binding: RunManifestBinding;
|
|
119
|
+
pipelineSource: "inline" | "path";
|
|
120
|
+
pipelinePath?: string;
|
|
121
|
+
pipelineBody?: string | null;
|
|
122
|
+
taskYaml: string;
|
|
123
|
+
taskPath?: string;
|
|
124
|
+
skills?: SkillsPayload;
|
|
125
|
+
stages: readonly LoadedStageConfig[];
|
|
126
|
+
toolchain: readonly ToolchainCheck[];
|
|
127
|
+
namedSecrets?: readonly NamedSecret[];
|
|
128
|
+
};
|
|
129
|
+
export declare function buildInitialRunManifest(input: BuildInitialRunManifestInput): RunManifestV1;
|
|
130
|
+
export declare function parseRunManifest(value: unknown): RunManifest | null;
|
|
131
|
+
export declare function collectMcpEnvNamedSecrets(servers: ResolvedMcpServers | undefined): NamedSecret[];
|
|
132
|
+
export declare function collectDeclaredSecretValues(names: readonly string[], env?: NodeJS.ProcessEnv): NamedSecret[];
|
|
133
|
+
export declare function redactMcpServers(servers: ResolvedMcpServers, namedSecrets: readonly NamedSecret[], origins?: ReadonlyMap<string, string>): RunManifestMcpServer[];
|
|
134
|
+
export declare function redactRunManifest(manifest: RunManifestV1, options?: RedactOptions): RunManifestV1;
|
|
135
|
+
/** Defense-in-depth redaction for get_run / export views (pipeline body included). */
|
|
136
|
+
export declare function redactRunManifestForRead(value: unknown, options?: RedactOptions): RunManifest | null;
|
|
137
|
+
export declare function withStageResolvedModel(manifest: RunManifestV1, stageId: string, resolved: {
|
|
138
|
+
model: string;
|
|
139
|
+
thinkingLevel?: string;
|
|
140
|
+
}): RunManifestV1;
|
|
141
|
+
export declare function withStageMcpServers(manifest: RunManifestV1, stageId: string, mcpServers: RunManifestMcpServer[]): RunManifestV1;
|
|
142
|
+
export declare function withSkillEntry(manifest: RunManifestV1, skill: RunManifestSkill): RunManifestV1;
|
|
143
|
+
export declare function finaliseRunManifest(manifest: RunManifestV1, finalisedAt?: string): RunManifestV1;
|
|
144
|
+
export declare function readParsedRunManifest(store: Pick<RunStore, "readRunMeta">, runId: string): Promise<RunManifest | null>;
|
|
145
|
+
export declare function patchRunManifest(store: Pick<RunStore, "readRunMeta" | "updateRunManifest">, runId: string, mutate: (current: RunManifestV1) => RunManifestV1, namedSecrets?: readonly NamedSecret[]): Promise<RunManifestV1 | null>;
|
|
146
|
+
export declare function finaliseStoredRunManifest(store: Pick<RunStore, "readRunMeta" | "updateRunManifest">, runId: string, finalisedAt?: string): Promise<void>;
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { PACKAGE_VERSION, BUILD_SHA } from "../package-meta.js";
|
|
3
|
+
import { redact, } from "../logging/redact.js";
|
|
4
|
+
import { getNamedSecrets } from "../logging/namedSecrets.js";
|
|
5
|
+
import { CURRENT_SCHEMA_VERSION } from "./sqlite/migrations/index.js";
|
|
6
|
+
export const RUN_MANIFEST_VERSION = 1;
|
|
7
|
+
export function sha256Hex(bytes) {
|
|
8
|
+
return createHash("sha256").update(bytes).digest("hex");
|
|
9
|
+
}
|
|
10
|
+
export function sha256Digest(bytes) {
|
|
11
|
+
return `sha256:${sha256Hex(bytes)}`;
|
|
12
|
+
}
|
|
13
|
+
export function digestSkillFiles(files) {
|
|
14
|
+
const names = Object.keys(files).sort();
|
|
15
|
+
const hash = createHash("sha256");
|
|
16
|
+
for (const name of names) {
|
|
17
|
+
hash.update(name);
|
|
18
|
+
hash.update("\0");
|
|
19
|
+
hash.update(files[name] ?? "");
|
|
20
|
+
hash.update("\0");
|
|
21
|
+
}
|
|
22
|
+
return { digest: `sha256:${hash.digest("hex")}`, files: names };
|
|
23
|
+
}
|
|
24
|
+
export function skillsFromPayload(payload) {
|
|
25
|
+
if (payload === undefined)
|
|
26
|
+
return [];
|
|
27
|
+
const out = [];
|
|
28
|
+
for (const [name, files] of Object.entries(payload)) {
|
|
29
|
+
const dig = digestSkillFiles(files);
|
|
30
|
+
out.push({
|
|
31
|
+
name,
|
|
32
|
+
origin: "run",
|
|
33
|
+
digest: dig.digest,
|
|
34
|
+
files: dig.files,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return out.sort((a, b) => a.name.localeCompare(b.name));
|
|
38
|
+
}
|
|
39
|
+
export function toolchainFromChecks(checks) {
|
|
40
|
+
return checks.map((c) => ({
|
|
41
|
+
tool: c.tool,
|
|
42
|
+
...(c.required !== undefined ? { required: c.required } : {}),
|
|
43
|
+
...(c.found !== undefined ? { resolved: c.found } : {}),
|
|
44
|
+
...(c.path !== undefined ? { path: c.path } : {}),
|
|
45
|
+
origin: c.origin,
|
|
46
|
+
status: c.status,
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
export function bindingFromFields(fields) {
|
|
50
|
+
if (fields.repository != null && fields.repository !== "") {
|
|
51
|
+
return {
|
|
52
|
+
kind: "repository",
|
|
53
|
+
repository: fields.repository,
|
|
54
|
+
...(fields.ref !== undefined ? { ref: fields.ref } : {}),
|
|
55
|
+
...(fields.resolvedSha !== undefined
|
|
56
|
+
? { resolved_sha: fields.resolvedSha }
|
|
57
|
+
: {}),
|
|
58
|
+
...(fields.runBranch !== undefined ? { branch: fields.runBranch } : {}),
|
|
59
|
+
...(fields.checkoutRoot !== undefined
|
|
60
|
+
? { worktree_path: fields.checkoutRoot }
|
|
61
|
+
: {}),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
if (fields.checkoutRoot != null && fields.checkoutRoot !== "") {
|
|
65
|
+
return {
|
|
66
|
+
kind: "checkout",
|
|
67
|
+
...(fields.resolvedSha !== undefined
|
|
68
|
+
? { resolved_sha: fields.resolvedSha }
|
|
69
|
+
: {}),
|
|
70
|
+
worktree_path: fields.checkoutRoot,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return { kind: "unbound" };
|
|
74
|
+
}
|
|
75
|
+
export function stagesFromLoaded(stages) {
|
|
76
|
+
return stages.map((stage) => ({
|
|
77
|
+
stage_id: stage.id,
|
|
78
|
+
model: {
|
|
79
|
+
authored: stage.model,
|
|
80
|
+
authored_tier: stage.model_tier ?? "stage",
|
|
81
|
+
},
|
|
82
|
+
mcp_servers: [],
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
export function buildHostIdentity(env = process.env) {
|
|
86
|
+
const digest = env.STAGEFLOW_IMAGE_DIGEST?.trim();
|
|
87
|
+
return {
|
|
88
|
+
stageflow_version: PACKAGE_VERSION,
|
|
89
|
+
build_sha: BUILD_SHA,
|
|
90
|
+
image_digest: digest && digest.length > 0 ? digest : null,
|
|
91
|
+
schema_version: CURRENT_SCHEMA_VERSION,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function buildInitialRunManifest(input) {
|
|
95
|
+
const pipelineBody = input.pipelineSource === "inline" && input.pipelineBody
|
|
96
|
+
? (() => {
|
|
97
|
+
try {
|
|
98
|
+
return JSON.parse(input.pipelineBody);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return input.pipelineBody;
|
|
102
|
+
}
|
|
103
|
+
})()
|
|
104
|
+
: null;
|
|
105
|
+
const pipelineBytes = input.pipelineSource === "inline" && input.pipelineBody
|
|
106
|
+
? input.pipelineBody
|
|
107
|
+
: input.pipelinePath ?? "";
|
|
108
|
+
const taskSource = input.taskPath !== undefined && input.taskPath.length > 0
|
|
109
|
+
? "path"
|
|
110
|
+
: "inline";
|
|
111
|
+
const raw = {
|
|
112
|
+
manifest_version: RUN_MANIFEST_VERSION,
|
|
113
|
+
run_id: input.runId,
|
|
114
|
+
created_at: input.createdAt,
|
|
115
|
+
host: buildHostIdentity(),
|
|
116
|
+
caller: {
|
|
117
|
+
caller_id: input.callerId,
|
|
118
|
+
surface: input.surface,
|
|
119
|
+
},
|
|
120
|
+
binding: input.binding,
|
|
121
|
+
pipeline: {
|
|
122
|
+
source: input.pipelineSource,
|
|
123
|
+
path: input.pipelinePath ?? null,
|
|
124
|
+
bytes_sha256: sha256Hex(pipelineBytes),
|
|
125
|
+
body: pipelineBody,
|
|
126
|
+
},
|
|
127
|
+
task: {
|
|
128
|
+
source: taskSource,
|
|
129
|
+
path: input.taskPath ?? null,
|
|
130
|
+
bytes_sha256: sha256Hex(input.taskYaml),
|
|
131
|
+
body: input.taskYaml,
|
|
132
|
+
},
|
|
133
|
+
skills: skillsFromPayload(input.skills),
|
|
134
|
+
stages: stagesFromLoaded(input.stages),
|
|
135
|
+
toolchain: toolchainFromChecks(input.toolchain),
|
|
136
|
+
};
|
|
137
|
+
return redactRunManifest(raw, {
|
|
138
|
+
namedSecrets: input.namedSecrets ?? getNamedSecrets(),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
export function parseRunManifest(value) {
|
|
142
|
+
if (value === null || value === undefined)
|
|
143
|
+
return null;
|
|
144
|
+
if (typeof value !== "object" || Array.isArray(value))
|
|
145
|
+
return null;
|
|
146
|
+
const version = value.manifest_version;
|
|
147
|
+
if (version === 1) {
|
|
148
|
+
return value;
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
export function collectMcpEnvNamedSecrets(servers) {
|
|
153
|
+
if (servers === undefined)
|
|
154
|
+
return [];
|
|
155
|
+
const out = [];
|
|
156
|
+
for (const [serverName, cfg] of Object.entries(servers)) {
|
|
157
|
+
const env = cfg.env;
|
|
158
|
+
if (env === null || typeof env !== "object" || Array.isArray(env))
|
|
159
|
+
continue;
|
|
160
|
+
for (const [key, value] of Object.entries(env)) {
|
|
161
|
+
if (typeof value === "string" && value.length > 0) {
|
|
162
|
+
out.push({ name: `${serverName}.${key}`, value });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
export function collectDeclaredSecretValues(names, env = process.env) {
|
|
169
|
+
const out = [];
|
|
170
|
+
for (const name of names) {
|
|
171
|
+
const plain = env[name];
|
|
172
|
+
if (typeof plain === "string" && plain.length > 0) {
|
|
173
|
+
out.push({ name, value: plain });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return out;
|
|
177
|
+
}
|
|
178
|
+
export function redactMcpServers(servers, namedSecrets, origins) {
|
|
179
|
+
const out = [];
|
|
180
|
+
for (const [name, cfg] of Object.entries(servers)) {
|
|
181
|
+
const redacted = redact({ ...cfg }, { namedSecrets });
|
|
182
|
+
out.push({
|
|
183
|
+
name,
|
|
184
|
+
...redacted,
|
|
185
|
+
...(origins?.get(name) !== undefined
|
|
186
|
+
? { origin: origins.get(name) }
|
|
187
|
+
: {}),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
return out;
|
|
191
|
+
}
|
|
192
|
+
export function redactRunManifest(manifest, options = {}) {
|
|
193
|
+
const namedSecrets = [
|
|
194
|
+
...(options.namedSecrets ?? getNamedSecrets()),
|
|
195
|
+
];
|
|
196
|
+
return redact({ ...manifest }, {
|
|
197
|
+
...options,
|
|
198
|
+
namedSecrets,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/** Defense-in-depth redaction for get_run / export views (pipeline body included). */
|
|
202
|
+
export function redactRunManifestForRead(value, options = {}) {
|
|
203
|
+
const parsed = parseRunManifest(value);
|
|
204
|
+
if (parsed === null)
|
|
205
|
+
return null;
|
|
206
|
+
if (parsed.manifest_version === 1) {
|
|
207
|
+
return redactRunManifest(parsed, options);
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
export function withStageResolvedModel(manifest, stageId, resolved) {
|
|
212
|
+
const stages = manifest.stages.map((stage) => {
|
|
213
|
+
if (stage.stage_id !== stageId)
|
|
214
|
+
return stage;
|
|
215
|
+
return {
|
|
216
|
+
...stage,
|
|
217
|
+
model: {
|
|
218
|
+
...stage.model,
|
|
219
|
+
resolved: resolved.model,
|
|
220
|
+
...(resolved.thinkingLevel !== undefined
|
|
221
|
+
? { thinking_level: resolved.thinkingLevel }
|
|
222
|
+
: {}),
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
});
|
|
226
|
+
const has = stages.some((s) => s.stage_id === stageId);
|
|
227
|
+
if (!has) {
|
|
228
|
+
stages.push({
|
|
229
|
+
stage_id: stageId,
|
|
230
|
+
model: {
|
|
231
|
+
authored: resolved.model,
|
|
232
|
+
authored_tier: "stage",
|
|
233
|
+
resolved: resolved.model,
|
|
234
|
+
...(resolved.thinkingLevel !== undefined
|
|
235
|
+
? { thinking_level: resolved.thinkingLevel }
|
|
236
|
+
: {}),
|
|
237
|
+
},
|
|
238
|
+
mcp_servers: [],
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
return { ...manifest, stages };
|
|
242
|
+
}
|
|
243
|
+
export function withStageMcpServers(manifest, stageId, mcpServers) {
|
|
244
|
+
const stages = manifest.stages.map((stage) => {
|
|
245
|
+
if (stage.stage_id !== stageId)
|
|
246
|
+
return stage;
|
|
247
|
+
return { ...stage, mcp_servers: mcpServers };
|
|
248
|
+
});
|
|
249
|
+
const has = stages.some((s) => s.stage_id === stageId);
|
|
250
|
+
if (!has) {
|
|
251
|
+
stages.push({
|
|
252
|
+
stage_id: stageId,
|
|
253
|
+
model: { authored: "", authored_tier: "stage" },
|
|
254
|
+
mcp_servers: mcpServers,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
return { ...manifest, stages };
|
|
258
|
+
}
|
|
259
|
+
export function withSkillEntry(manifest, skill) {
|
|
260
|
+
const skills = [...manifest.skills];
|
|
261
|
+
const idx = skills.findIndex((s) => s.name === skill.name);
|
|
262
|
+
if (idx >= 0)
|
|
263
|
+
skills[idx] = skill;
|
|
264
|
+
else
|
|
265
|
+
skills.push(skill);
|
|
266
|
+
skills.sort((a, b) => a.name.localeCompare(b.name));
|
|
267
|
+
return { ...manifest, skills };
|
|
268
|
+
}
|
|
269
|
+
export function finaliseRunManifest(manifest, finalisedAt = new Date().toISOString()) {
|
|
270
|
+
return { ...manifest, finalised_at: finalisedAt };
|
|
271
|
+
}
|
|
272
|
+
export async function readParsedRunManifest(store, runId) {
|
|
273
|
+
const meta = await store.readRunMeta(runId);
|
|
274
|
+
return parseRunManifest(meta.run_manifest);
|
|
275
|
+
}
|
|
276
|
+
export async function patchRunManifest(store, runId, mutate, namedSecrets) {
|
|
277
|
+
const current = await readParsedRunManifest(store, runId);
|
|
278
|
+
if (current === null || current.manifest_version !== 1)
|
|
279
|
+
return null;
|
|
280
|
+
const next = redactRunManifest(mutate(current), {
|
|
281
|
+
namedSecrets: namedSecrets ?? getNamedSecrets(),
|
|
282
|
+
});
|
|
283
|
+
await store.updateRunManifest(runId, next);
|
|
284
|
+
return next;
|
|
285
|
+
}
|
|
286
|
+
export async function finaliseStoredRunManifest(store, runId, finalisedAt = new Date().toISOString()) {
|
|
287
|
+
await patchRunManifest(store, runId, (m) => m.finalised_at !== undefined ? m : finaliseRunManifest(m, finalisedAt));
|
|
288
|
+
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { FeedbackLoopHistory, FeedbackLoopRecord, RunDetail, RunMeta, RunPipelineDagSnapshot, RunSummary, StageSnapshot } from "./port.js";
|
|
1
|
+
import type { FeedbackLoopHistory, FeedbackLoopRecord, RunBindingCompact, RunBindingDetail, RunDetail, RunMeta, RunPipelineDagSnapshot, RunSummary, StageSnapshot } from "./port.js";
|
|
2
2
|
export { syntheticPendingSnapshot } from "./syntheticStageSnapshot.js";
|
|
3
3
|
export type FeedbackProjectionInput = {
|
|
4
4
|
feedback_loops?: FeedbackLoopHistory[];
|
|
5
5
|
active_feedback_loop?: FeedbackLoopRecord;
|
|
6
6
|
};
|
|
7
|
+
export declare function projectRunBindingCompact(meta: RunMeta): RunBindingCompact;
|
|
8
|
+
export declare function projectRunBindingDetail(meta: RunMeta): RunBindingDetail;
|
|
7
9
|
export declare function overlayPlannedStages(stageIds: string[], snapshots: StageSnapshot[], dag?: Pick<RunPipelineDagSnapshot, "nodes"> | null): StageSnapshot[];
|
|
8
10
|
export declare function orderStageSnapshots(stageIds: string[], snapshots: StageSnapshot[]): StageSnapshot[];
|
|
9
11
|
export declare function projectRunSummary(meta: RunMeta, stages: StageSnapshot[], feedback?: Pick<FeedbackProjectionInput, "active_feedback_loop">): RunSummary;
|
|
@@ -3,6 +3,47 @@ import { linearCompatDagSnapshot } from "./pipelineDagSnapshot.js";
|
|
|
3
3
|
import { syntheticPendingSnapshot } from "./syntheticStageSnapshot.js";
|
|
4
4
|
import { buildPipelineTrack } from "./trackProjection.js";
|
|
5
5
|
export { syntheticPendingSnapshot } from "./syntheticStageSnapshot.js";
|
|
6
|
+
export function projectRunBindingCompact(meta) {
|
|
7
|
+
if (meta.repository != null && meta.repository !== "") {
|
|
8
|
+
return {
|
|
9
|
+
kind: "repository",
|
|
10
|
+
repository: meta.repository,
|
|
11
|
+
...(meta.ref !== undefined ? { ref: meta.ref } : {}),
|
|
12
|
+
...(meta.resolved_sha !== undefined
|
|
13
|
+
? { resolved_sha: meta.resolved_sha }
|
|
14
|
+
: {}),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (meta.checkout_root != null && meta.checkout_root !== "") {
|
|
18
|
+
return {
|
|
19
|
+
kind: "checkout",
|
|
20
|
+
...(meta.resolved_sha !== undefined
|
|
21
|
+
? { resolved_sha: meta.resolved_sha }
|
|
22
|
+
: {}),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return { kind: "unbound" };
|
|
26
|
+
}
|
|
27
|
+
export function projectRunBindingDetail(meta) {
|
|
28
|
+
const compact = projectRunBindingCompact(meta);
|
|
29
|
+
if (compact.kind === "unbound")
|
|
30
|
+
return compact;
|
|
31
|
+
if (compact.kind === "checkout") {
|
|
32
|
+
return {
|
|
33
|
+
...compact,
|
|
34
|
+
...(meta.checkout_root !== undefined
|
|
35
|
+
? { checkout_root: meta.checkout_root }
|
|
36
|
+
: {}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
...compact,
|
|
41
|
+
...(meta.run_branch !== undefined ? { run_branch: meta.run_branch } : {}),
|
|
42
|
+
...(meta.checkout_root !== undefined
|
|
43
|
+
? { checkout_root: meta.checkout_root }
|
|
44
|
+
: {}),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
6
47
|
export function overlayPlannedStages(stageIds, snapshots, dag) {
|
|
7
48
|
const byId = new Map(snapshots.map((s) => [s.stage_id, s]));
|
|
8
49
|
const nodeById = new Map((dag?.nodes ?? []).map((n) => [n.id, n]));
|
|
@@ -85,7 +126,7 @@ function failedFieldsFromStages(stages, dag) {
|
|
|
85
126
|
function resolveListedStatus(stages, meta, dag) {
|
|
86
127
|
if (stages.length === 0)
|
|
87
128
|
return meta.status ?? "created";
|
|
88
|
-
const derived = deriveStatusFromStages(stages, dag);
|
|
129
|
+
const derived = deriveStatusFromStages(stages, dag, meta.status);
|
|
89
130
|
if (meta.status === "succeeded" && derived === "running") {
|
|
90
131
|
const hasActiveStage = stages.some((s) => s.status === "running" || s.status === "waiting_for_input");
|
|
91
132
|
if (!hasActiveStage)
|
|
@@ -113,9 +154,13 @@ export function projectRunSummary(meta, stages, feedback) {
|
|
|
113
154
|
...(meta.pipeline_path !== undefined ? { pipeline_path: meta.pipeline_path } : {}),
|
|
114
155
|
...(meta.task_path !== undefined ? { task_path: meta.task_path } : {}),
|
|
115
156
|
...(meta.project_root !== undefined ? { project_root: meta.project_root } : {}),
|
|
157
|
+
...(meta.pipeline_source !== undefined
|
|
158
|
+
? { pipeline_source: meta.pipeline_source }
|
|
159
|
+
: {}),
|
|
116
160
|
status: resolveListedStatus(stages, meta, dag),
|
|
117
161
|
created_at: meta.created_at,
|
|
118
162
|
updated_at: meta.updated_at,
|
|
163
|
+
binding: projectRunBindingCompact(meta),
|
|
119
164
|
stages: compactStages(stages),
|
|
120
165
|
...waiting,
|
|
121
166
|
...failedFieldsFromStages(stages, dag),
|
|
@@ -123,6 +168,15 @@ export function projectRunSummary(meta, stages, feedback) {
|
|
|
123
168
|
? { active_feedback_loop: feedback.active_feedback_loop }
|
|
124
169
|
: {}),
|
|
125
170
|
...(cost !== undefined ? { total_cost_usd: cost } : {}),
|
|
171
|
+
...(meta.cancel_reason !== undefined
|
|
172
|
+
? { cancel_reason: meta.cancel_reason }
|
|
173
|
+
: {}),
|
|
174
|
+
...(meta.finished_at !== undefined ? { finished_at: meta.finished_at } : {}),
|
|
175
|
+
...(meta.slimmed_at !== undefined ? { slimmed_at: meta.slimmed_at } : {}),
|
|
176
|
+
...(meta.disk_bytes !== undefined ? { disk_bytes: meta.disk_bytes } : {}),
|
|
177
|
+
...(meta.disk_measured_at !== undefined
|
|
178
|
+
? { disk_measured_at: meta.disk_measured_at }
|
|
179
|
+
: {}),
|
|
126
180
|
};
|
|
127
181
|
}
|
|
128
182
|
export function projectRunDetail(meta, stages, task_yaml, dagSnapshot, feedback) {
|
|
@@ -139,9 +193,17 @@ export function projectRunDetail(meta, stages, task_yaml, dagSnapshot, feedback)
|
|
|
139
193
|
});
|
|
140
194
|
return {
|
|
141
195
|
...summary,
|
|
196
|
+
binding: projectRunBindingDetail(dag ? { ...meta, pipeline_dag: dag } : meta),
|
|
142
197
|
task_yaml,
|
|
143
198
|
stages: ordered,
|
|
144
199
|
pipeline_track,
|
|
145
200
|
feedback_loops: feedback?.feedback_loops ?? [],
|
|
201
|
+
...(meta.config_origins !== undefined && meta.config_origins.length > 0
|
|
202
|
+
? { config_origins: meta.config_origins }
|
|
203
|
+
: {}),
|
|
204
|
+
...(meta.caller_id !== undefined ? { caller_id: meta.caller_id } : {}),
|
|
205
|
+
...(meta.run_manifest !== undefined
|
|
206
|
+
? { run_manifest: meta.run_manifest }
|
|
207
|
+
: {}),
|
|
146
208
|
};
|
|
147
209
|
}
|
|
@@ -1,19 +1,50 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
1
2
|
import type { StageEnvelope } from "../../types/envelope.js";
|
|
2
3
|
import type { StageLogLine } from "../../agent/activity.js";
|
|
3
|
-
import { type CreateFeedbackLoopInput, type CreateFeedbackReplayInput, type CreateFeedbackReplayStagePassInput, type CreateForkGenerationInput, type CreateRunInput, type CreatedRun, type FeedbackLoopPatch, type FeedbackLoopRecord, type FeedbackLoopState, type FeedbackReplayPatch, type FeedbackReplayRecord, type FeedbackReplayStagePassPatch, type FeedbackReplayStagePassRecord, type ForkGenerationPatch, type ForkGenerationRecord, type ListRunsFilter, type RunDetail, type RunMeta, type RunPipelineDagSnapshot, type RunStatus, type RunStore, type RunSummary, type StageExecution, type StageExecutionPatch, type StageLogEvent, type VerificationCheckResult, type VerificationCheckResultPatch } from "../port.js";
|
|
4
|
+
import { type CreateFeedbackLoopInput, type CreateFeedbackReplayInput, type CreateFeedbackReplayStagePassInput, type CreateForkGenerationInput, type CreateRunInput, type CreatedRun, type FeedbackLoopPatch, type FeedbackLoopRecord, type FeedbackLoopState, type FeedbackReplayPatch, type FeedbackReplayRecord, type FeedbackReplayStagePassPatch, type FeedbackReplayStagePassRecord, type ForkGenerationPatch, type ForkGenerationRecord, type ListRunsFilter, type RunDetail, type RunMeta, type RunPipelineDagSnapshot, type RunStatus, type RunStore, type RunSummary, type StageExecution, type StageExecutionPatch, type StageLogEvent, type VerificationCheckResult, type VerificationCheckResultPatch, type ConfigOriginRecord } from "../port.js";
|
|
5
|
+
import { type RunSubmissionRecord } from "../submission.js";
|
|
6
|
+
type SqliteRunStoreOpenerMode = "assert" | "migrate";
|
|
4
7
|
export declare class SqliteRunStore implements RunStore {
|
|
5
8
|
private readonly storeRoot;
|
|
6
9
|
private readonly db;
|
|
7
10
|
private migratePromise;
|
|
8
|
-
constructor(storeRoot: string
|
|
11
|
+
constructor(storeRoot: string, options?: {
|
|
12
|
+
openerMode?: SqliteRunStoreOpenerMode;
|
|
13
|
+
});
|
|
9
14
|
/** Await one-shot disk import before catalog reads (create paths also wait). */
|
|
10
15
|
ready(): Promise<void>;
|
|
16
|
+
close(): Promise<void>;
|
|
17
|
+
snapshotInto(destPath: string): Promise<{
|
|
18
|
+
userVersion: number;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* The connection this store owns, for the one caller allowed to share it: the composition root
|
|
22
|
+
* wiring the A2A tables into the same `state.db` file. Not part of the `RunStore` interface.
|
|
23
|
+
*/
|
|
24
|
+
get connection(): Database.Database;
|
|
11
25
|
getWorkspaceDir(runId: string): string;
|
|
12
26
|
createRun(input: CreateRunInput): Promise<CreatedRun>;
|
|
27
|
+
private readSubmission;
|
|
28
|
+
getRunBySubmission(key: string): Promise<RunSubmissionRecord | null>;
|
|
13
29
|
updateRunStatus(runId: string, status: RunStatus): Promise<void>;
|
|
30
|
+
tryUpdateRunStatus(runId: string, status: RunStatus, expectedStatus: RunStatus): Promise<boolean>;
|
|
31
|
+
patchRunWorkspaceBinding(runId: string, patch: {
|
|
32
|
+
checkoutRoot?: string;
|
|
33
|
+
repository?: string;
|
|
34
|
+
ref?: string;
|
|
35
|
+
resolvedSha?: string;
|
|
36
|
+
runBranch?: string;
|
|
37
|
+
}): Promise<void>;
|
|
38
|
+
appendConfigOrigins(runId: string, origins: ConfigOriginRecord[]): Promise<void>;
|
|
39
|
+
setCancelReason(runId: string, reason: string): Promise<void>;
|
|
40
|
+
setRunDiskUsage(runId: string, diskBytes: number, measuredAt: string): Promise<void>;
|
|
41
|
+
setSlimmedAt(runId: string, slimmedAt: string): Promise<void>;
|
|
42
|
+
deleteRun(runId: string): Promise<void>;
|
|
14
43
|
updatePipelineDag(runId: string, dag: RunPipelineDagSnapshot): Promise<void>;
|
|
15
44
|
readRunMeta(runId: string): Promise<RunMeta>;
|
|
16
45
|
readTaskYaml(runId: string): Promise<string>;
|
|
46
|
+
readPipelineBody(runId: string): Promise<string | null>;
|
|
47
|
+
updateRunManifest(runId: string, manifest: unknown): Promise<void>;
|
|
17
48
|
ensureStageWorkspace(runId: string, stageId: string): Promise<void>;
|
|
18
49
|
ensureAttemptWorkspace(runId: string, stageId: string, attempt: number): Promise<void>;
|
|
19
50
|
createStageExecution(runId: string, stageId: string): Promise<StageExecution>;
|
|
@@ -21,6 +52,7 @@ export declare class SqliteRunStore implements RunStore {
|
|
|
21
52
|
getLatestStageExecution(runId: string, stageId: string): Promise<StageExecution | null>;
|
|
22
53
|
countStageAttempts(runId: string, stageId: string): Promise<number>;
|
|
23
54
|
getStageExecution(runId: string, stageId: string, attempt: number): Promise<StageExecution>;
|
|
55
|
+
listInterruptedStageExecutions(): Promise<StageExecution[]>;
|
|
24
56
|
updateStageExecution(runId: string, stageId: string, attempt: number, patch: StageExecutionPatch): Promise<void>;
|
|
25
57
|
upsertVerificationCheckResult(runId: string, stageId: string, result: VerificationCheckResultPatch, options?: {
|
|
26
58
|
attempt?: number;
|
|
@@ -43,7 +75,8 @@ export declare class SqliteRunStore implements RunStore {
|
|
|
43
75
|
private updateStageStatusDenorm;
|
|
44
76
|
listStageEvents(runId: string, stageId: string, attempt?: number): Promise<StageLogEvent[]>;
|
|
45
77
|
listRuns(filter?: ListRunsFilter): Promise<RunSummary[]>;
|
|
46
|
-
|
|
78
|
+
ensureProject(absPath: string): Promise<string>;
|
|
79
|
+
listRegisteredProjects(): Promise<string[]>;
|
|
47
80
|
readRun(runId: string): Promise<RunDetail>;
|
|
48
81
|
createFeedbackLoop(runId: string, input: CreateFeedbackLoopInput): Promise<FeedbackLoopRecord>;
|
|
49
82
|
getFeedbackLoop(runId: string, loopId: string): Promise<FeedbackLoopRecord>;
|
|
@@ -72,3 +105,4 @@ export declare class SqliteRunStore implements RunStore {
|
|
|
72
105
|
private loadStageSnapshots;
|
|
73
106
|
}
|
|
74
107
|
export declare function openSqliteRunStore(storeRoot: string): SqliteRunStore;
|
|
108
|
+
export {};
|