@revisium/orchestrator 0.0.0 → 0.1.0-alpha.10
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 +202 -1
- package/control-plane/bootstrap.config.json +104 -2
- package/control-plane/default-playbook/catalog/pipelines.json +657 -0
- package/control-plane/default-playbook/catalog/roles.json +65 -0
- package/control-plane/default-playbook/package.json +5 -0
- package/control-plane/default-playbook/playbook.json +13 -0
- package/control-plane/default-playbook/prompts/analyst.md +29 -0
- package/control-plane/default-playbook/prompts/developer.md +26 -0
- package/control-plane/default-playbook/prompts/integrator.md +20 -0
- package/control-plane/default-playbook/prompts/orchestrator.md +23 -0
- package/control-plane/default-playbook/prompts/reviewer.md +28 -0
- package/control-plane/default-playbook/prompts/triager.md +51 -0
- package/control-plane/default-playbook/prompts/watcher.md +24 -0
- package/dist/api/graphql-api/filters/agent-observability-exception.filter.js +24 -0
- package/dist/api/graphql-api/filters/agent-observability-exception.filter.js.map +1 -0
- package/dist/api/graphql-api/filters/graphql-validation-exception.filter.js +36 -0
- package/dist/api/graphql-api/filters/graphql-validation-exception.filter.js.map +1 -0
- package/dist/api/graphql-api/graphql-api.module.js +77 -0
- package/dist/api/graphql-api/graphql-api.module.js.map +1 -0
- package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-bridge.service.js +296 -0
- package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-bridge.service.js.map +1 -0
- package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-mappers.js +64 -0
- package/dist/api/graphql-api/graphql-ws/agent-observability-subscription-mappers.js.map +1 -0
- package/dist/api/graphql-api/graphql-ws/constants.js +11 -0
- package/dist/api/graphql-api/graphql-ws/constants.js.map +1 -0
- package/dist/api/graphql-api/graphql-ws/pubsub.module.js +32 -0
- package/dist/api/graphql-api/graphql-ws/pubsub.module.js.map +1 -0
- package/dist/api/graphql-api/graphql-ws/run-progress-subscription-poller.service.js +101 -0
- package/dist/api/graphql-api/graphql-ws/run-progress-subscription-poller.service.js.map +1 -0
- package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js +115 -0
- package/dist/api/graphql-api/graphql-ws/subscription-bridge.service.js.map +1 -0
- package/dist/api/graphql-api/graphql-ws/subscription-mappers.js +85 -0
- package/dist/api/graphql-api/graphql-ws/subscription-mappers.js.map +1 -0
- package/dist/api/graphql-api/graphql-ws/ws.js +22 -0
- package/dist/api/graphql-api/graphql-ws/ws.js.map +1 -0
- package/dist/api/graphql-api/inbox/inbox-subscription.resolver.js +56 -0
- package/dist/api/graphql-api/inbox/inbox-subscription.resolver.js.map +1 -0
- package/dist/api/graphql-api/inbox/inbox.resolver.js +125 -0
- package/dist/api/graphql-api/inbox/inbox.resolver.js.map +1 -0
- package/dist/api/graphql-api/inbox/inputs/answer-question.input.js +33 -0
- package/dist/api/graphql-api/inbox/inputs/answer-question.input.js.map +1 -0
- package/dist/api/graphql-api/inbox/inputs/gate-decision.input.js +27 -0
- package/dist/api/graphql-api/inbox/inputs/gate-decision.input.js.map +1 -0
- package/dist/api/graphql-api/inbox/inputs/list-inbox.input.js +28 -0
- package/dist/api/graphql-api/inbox/inputs/list-inbox.input.js.map +1 -0
- package/dist/api/graphql-api/inbox/inputs/resolve-inbox-item.input.js +38 -0
- package/dist/api/graphql-api/inbox/inputs/resolve-inbox-item.input.js.map +1 -0
- package/dist/api/graphql-api/inbox/model/gate-risk.model.js +53 -0
- package/dist/api/graphql-api/inbox/model/gate-risk.model.js.map +1 -0
- package/dist/api/graphql-api/inbox/model/inbox-connection.model.js +16 -0
- package/dist/api/graphql-api/inbox/model/inbox-connection.model.js.map +1 -0
- package/dist/api/graphql-api/inbox/model/inbox-item.model.js +88 -0
- package/dist/api/graphql-api/inbox/model/inbox-item.model.js.map +1 -0
- package/dist/api/graphql-api/inbox/model/inbox-resolution.model.js +48 -0
- package/dist/api/graphql-api/inbox/model/inbox-resolution.model.js.map +1 -0
- package/dist/api/graphql-api/method/inputs/list-method.input.js +15 -0
- package/dist/api/graphql-api/method/inputs/list-method.input.js.map +1 -0
- package/dist/api/graphql-api/method/method.resolver.js +90 -0
- package/dist/api/graphql-api/method/method.resolver.js.map +1 -0
- package/dist/api/graphql-api/method/model/alternative-role-group.model.js +32 -0
- package/dist/api/graphql-api/method/model/alternative-role-group.model.js.map +1 -0
- package/dist/api/graphql-api/method/model/pipeline-connection.model.js +16 -0
- package/dist/api/graphql-api/method/model/pipeline-connection.model.js.map +1 -0
- package/dist/api/graphql-api/method/model/pipeline.model.js +69 -0
- package/dist/api/graphql-api/method/model/pipeline.model.js.map +1 -0
- package/dist/api/graphql-api/method/model/playbook-connection.model.js +16 -0
- package/dist/api/graphql-api/method/model/playbook-connection.model.js.map +1 -0
- package/dist/api/graphql-api/method/model/playbook.model.js +47 -0
- package/dist/api/graphql-api/method/model/playbook.model.js.map +1 -0
- package/dist/api/graphql-api/method/model/role-connection.model.js +16 -0
- package/dist/api/graphql-api/method/model/role-connection.model.js.map +1 -0
- package/dist/api/graphql-api/method/model/role.model.js +98 -0
- package/dist/api/graphql-api/method/model/role.model.js.map +1 -0
- package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js +52 -0
- package/dist/api/graphql-api/pr/inputs/pr-readiness.input.js.map +1 -0
- package/dist/api/graphql-api/pr/model/pr-readiness.model.js +403 -0
- package/dist/api/graphql-api/pr/model/pr-readiness.model.js.map +1 -0
- package/dist/api/graphql-api/pr/pr.resolver.js +76 -0
- package/dist/api/graphql-api/pr/pr.resolver.js.map +1 -0
- package/dist/api/graphql-api/registerGraphqlEnums.js +9 -0
- package/dist/api/graphql-api/registerGraphqlEnums.js.map +1 -0
- package/dist/api/graphql-api/runs/inputs/create-run.input.js +63 -0
- package/dist/api/graphql-api/runs/inputs/create-run.input.js.map +1 -0
- package/dist/api/graphql-api/runs/inputs/get-agent-log.input.js +48 -0
- package/dist/api/graphql-api/runs/inputs/get-agent-log.input.js.map +1 -0
- package/dist/api/graphql-api/runs/inputs/get-run-attempts.input.js +32 -0
- package/dist/api/graphql-api/runs/inputs/get-run-attempts.input.js.map +1 -0
- package/dist/api/graphql-api/runs/inputs/get-run-events.input.js +28 -0
- package/dist/api/graphql-api/runs/inputs/get-run-events.input.js.map +1 -0
- package/dist/api/graphql-api/runs/inputs/list-runs.input.js +23 -0
- package/dist/api/graphql-api/runs/inputs/list-runs.input.js.map +1 -0
- package/dist/api/graphql-api/runs/inputs/simulate-route.input.js +43 -0
- package/dist/api/graphql-api/runs/inputs/simulate-route.input.js.map +1 -0
- package/dist/api/graphql-api/runs/model/agent-activity.model.js +367 -0
- package/dist/api/graphql-api/runs/model/agent-activity.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/create-run-result.model.js +53 -0
- package/dist/api/graphql-api/runs/model/create-run-result.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/run-attempt.model.js +114 -0
- package/dist/api/graphql-api/runs/model/run-attempt.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/run-connection.model.js +16 -0
- package/dist/api/graphql-api/runs/model/run-connection.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/run-cost.model.js +67 -0
- package/dist/api/graphql-api/runs/model/run-cost.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/run-digest.model.js +41 -0
- package/dist/api/graphql-api/runs/model/run-digest.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/run-event-connection.model.js +16 -0
- package/dist/api/graphql-api/runs/model/run-event-connection.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/run-event.model.js +58 -0
- package/dist/api/graphql-api/runs/model/run-event.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/run-progress.model.js +33 -0
- package/dist/api/graphql-api/runs/model/run-progress.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/run-workflow.model.js +287 -0
- package/dist/api/graphql-api/runs/model/run-workflow.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/run.model.js +57 -0
- package/dist/api/graphql-api/runs/model/run.model.js.map +1 -0
- package/dist/api/graphql-api/runs/model/usage.model.js +32 -0
- package/dist/api/graphql-api/runs/model/usage.model.js.map +1 -0
- package/dist/api/graphql-api/runs/run-digest.resolver.js +40 -0
- package/dist/api/graphql-api/runs/run-digest.resolver.js.map +1 -0
- package/dist/api/graphql-api/runs/run-events.resolver.js +45 -0
- package/dist/api/graphql-api/runs/run-events.resolver.js.map +1 -0
- package/dist/api/graphql-api/runs/run-progress.resolver.js +53 -0
- package/dist/api/graphql-api/runs/run-progress.resolver.js.map +1 -0
- package/dist/api/graphql-api/runs/runs-subscription.resolver.js +124 -0
- package/dist/api/graphql-api/runs/runs-subscription.resolver.js.map +1 -0
- package/dist/api/graphql-api/runs/runs.resolver.js +165 -0
- package/dist/api/graphql-api/runs/runs.resolver.js.map +1 -0
- package/dist/api/graphql-api/share/graphql-param-types.js +6 -0
- package/dist/api/graphql-api/share/graphql-param-types.js.map +1 -0
- package/dist/api/graphql-api/share/inputs/connection.input.js +27 -0
- package/dist/api/graphql-api/share/inputs/connection.input.js.map +1 -0
- package/dist/api/graphql-api/share/inputs/run-subscription.input.js +22 -0
- package/dist/api/graphql-api/share/inputs/run-subscription.input.js.map +1 -0
- package/dist/api/graphql-api/share/model/paginated.model.js +75 -0
- package/dist/api/graphql-api/share/model/paginated.model.js.map +1 -0
- package/dist/api/graphql-api/system/model/daemon-status.model.js +47 -0
- package/dist/api/graphql-api/system/model/daemon-status.model.js.map +1 -0
- package/dist/api/graphql-api/system/model/doctor-result.model.js +33 -0
- package/dist/api/graphql-api/system/model/doctor-result.model.js.map +1 -0
- package/dist/api/graphql-api/system/model/project.model.js +37 -0
- package/dist/api/graphql-api/system/model/project.model.js.map +1 -0
- package/dist/api/graphql-api/system/model/repository-context.model.js +70 -0
- package/dist/api/graphql-api/system/model/repository-context.model.js.map +1 -0
- package/dist/api/graphql-api/system/model/repository-validation.model.js +62 -0
- package/dist/api/graphql-api/system/model/repository-validation.model.js.map +1 -0
- package/dist/api/graphql-api/system/model/system-status.model.js +29 -0
- package/dist/api/graphql-api/system/model/system-status.model.js.map +1 -0
- package/dist/api/graphql-api/system/system.resolver.js +83 -0
- package/dist/api/graphql-api/system/system.resolver.js.map +1 -0
- package/dist/cli/commands/doctor-report.js +70 -0
- package/dist/cli/commands/doctor-report.js.map +1 -0
- package/dist/cli/commands/lifecycle.js +463 -0
- package/dist/cli/commands/lifecycle.js.map +1 -0
- package/dist/cli/commands/mcp.js +53 -8
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/process-tree.js +87 -0
- package/dist/cli/commands/process-tree.js.map +1 -0
- package/dist/cli/commands/revisium-helpers.js +2 -2
- package/dist/cli/commands/rogue-reaper.js +63 -0
- package/dist/cli/commands/rogue-reaper.js.map +1 -0
- package/dist/cli/index.js +5 -29
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/program.js +7 -23
- package/dist/cli/program.js.map +1 -1
- package/dist/config.js +79 -1
- package/dist/config.js.map +1 -1
- package/dist/control-plane/bootstrap.js +101 -0
- package/dist/control-plane/bootstrap.js.map +1 -0
- package/dist/control-plane/change-notifications.js +35 -0
- package/dist/control-plane/change-notifications.js.map +1 -0
- package/dist/control-plane/client-transport.js +74 -41
- package/dist/control-plane/client-transport.js.map +1 -1
- package/dist/control-plane/data-access.js +13 -5
- package/dist/control-plane/data-access.js.map +1 -1
- package/dist/control-plane/definitions.js +1 -1
- package/dist/control-plane/definitions.js.map +1 -1
- package/dist/control-plane/inbox.js +5 -31
- package/dist/control-plane/inbox.js.map +1 -1
- package/dist/control-plane/index.js +1 -1
- package/dist/control-plane/index.js.map +1 -1
- package/dist/control-plane/json-fields.js +2 -0
- package/dist/control-plane/json-fields.js.map +1 -1
- package/dist/control-plane/resolve-cwd.js +76 -8
- package/dist/control-plane/resolve-cwd.js.map +1 -1
- package/dist/control-plane/schema-migration.js +82 -0
- package/dist/control-plane/schema-migration.js.map +1 -0
- package/dist/control-plane/seed-default-playbook.js +141 -0
- package/dist/control-plane/seed-default-playbook.js.map +1 -0
- package/dist/control-plane/steps.js +15 -349
- package/dist/control-plane/steps.js.map +1 -1
- package/dist/control-plane/tables.js +1 -0
- package/dist/control-plane/tables.js.map +1 -1
- package/dist/e2e/kit/agents.js +148 -0
- package/dist/e2e/kit/agents.js.map +1 -0
- package/dist/e2e/kit/assertions.js +163 -0
- package/dist/e2e/kit/assertions.js.map +1 -0
- package/dist/e2e/kit/crash.js +44 -0
- package/dist/e2e/kit/crash.js.map +1 -0
- package/dist/e2e/kit/drive.js +45 -0
- package/dist/e2e/kit/drive.js.map +1 -0
- package/dist/e2e/kit/env.js +16 -0
- package/dist/e2e/kit/env.js.map +1 -0
- package/dist/e2e/kit/fake-integrator.js +57 -0
- package/dist/e2e/kit/fake-integrator.js.map +1 -0
- package/dist/e2e/kit/gh-emulator.js +213 -0
- package/dist/e2e/kit/gh-emulator.js.map +1 -0
- package/dist/e2e/kit/git-target-repo.js +115 -0
- package/dist/e2e/kit/git-target-repo.js.map +1 -0
- package/dist/e2e/kit/harness.js +72 -0
- package/dist/e2e/kit/harness.js.map +1 -0
- package/dist/e2e/kit/index.js +14 -0
- package/dist/e2e/kit/index.js.map +1 -0
- package/dist/e2e/kit/mcp.js +32 -0
- package/dist/e2e/kit/mcp.js.map +1 -0
- package/dist/e2e/kit/scenarios.js +196 -0
- package/dist/e2e/kit/scenarios.js.map +1 -0
- package/dist/e2e/recovery-crash-child.js +29 -0
- package/dist/e2e/recovery-crash-child.js.map +1 -0
- package/dist/e2e/recovery-dd-crash-child.js +43 -0
- package/dist/e2e/recovery-dd-crash-child.js.map +1 -0
- package/dist/engine/dbos.module.js +2 -1
- package/dist/engine/dbos.module.js.map +1 -1
- package/dist/engine/dbos.service.js +89 -18
- package/dist/engine/dbos.service.js.map +1 -1
- package/dist/engine/ensure-postgres.js +18 -4
- package/dist/engine/ensure-postgres.js.map +1 -1
- package/dist/features/inbox/commands/handlers/inbox-command.handlers.js +80 -0
- package/dist/features/inbox/commands/handlers/inbox-command.handlers.js.map +1 -0
- package/dist/features/inbox/commands/impl/answer-question.command.js +7 -0
- package/dist/features/inbox/commands/impl/answer-question.command.js.map +1 -0
- package/dist/features/inbox/commands/impl/approve-gate.command.js +7 -0
- package/dist/features/inbox/commands/impl/approve-gate.command.js.map +1 -0
- package/dist/features/inbox/commands/impl/reject-gate.command.js +7 -0
- package/dist/features/inbox/commands/impl/reject-gate.command.js.map +1 -0
- package/dist/features/inbox/commands/impl/resolve-inbox-item.command.js +7 -0
- package/dist/features/inbox/commands/impl/resolve-inbox-item.command.js.map +1 -0
- package/dist/features/inbox/commands/index.js +8 -0
- package/dist/features/inbox/commands/index.js.map +1 -0
- package/dist/features/inbox/inbox-api.module.js +23 -0
- package/dist/features/inbox/inbox-api.module.js.map +1 -0
- package/dist/features/inbox/inbox-api.service.js +63 -0
- package/dist/features/inbox/inbox-api.service.js.map +1 -0
- package/dist/features/inbox/queries/handlers/inbox-query.handlers.js +111 -0
- package/dist/features/inbox/queries/handlers/inbox-query.handlers.js.map +1 -0
- package/dist/features/inbox/queries/impl/get-inbox-item.query.js +7 -0
- package/dist/features/inbox/queries/impl/get-inbox-item.query.js.map +1 -0
- package/dist/features/inbox/queries/impl/get-pending-decisions.query.js +7 -0
- package/dist/features/inbox/queries/impl/get-pending-decisions.query.js.map +1 -0
- package/dist/features/inbox/queries/impl/list-inbox.query.js +7 -0
- package/dist/features/inbox/queries/impl/list-inbox.query.js.map +1 -0
- package/dist/features/inbox/queries/impl/summarize-gate-risk.query.js +7 -0
- package/dist/features/inbox/queries/impl/summarize-gate-risk.query.js.map +1 -0
- package/dist/features/inbox/queries/index.js +8 -0
- package/dist/features/inbox/queries/index.js.map +1 -0
- package/dist/features/method/commands/index.js +2 -0
- package/dist/features/method/commands/index.js.map +1 -0
- package/dist/features/method/method-api.module.js +23 -0
- package/dist/features/method/method-api.module.js.map +1 -0
- package/dist/features/method/method-api.service.js +47 -0
- package/dist/features/method/method-api.service.js.map +1 -0
- package/dist/features/method/queries/handlers/method-query.handlers.js +115 -0
- package/dist/features/method/queries/handlers/method-query.handlers.js.map +1 -0
- package/dist/features/method/queries/impl/get-pipeline.query.js +7 -0
- package/dist/features/method/queries/impl/get-pipeline.query.js.map +1 -0
- package/dist/features/method/queries/impl/get-role.query.js +7 -0
- package/dist/features/method/queries/impl/get-role.query.js.map +1 -0
- package/dist/features/method/queries/impl/list-pipelines.query.js +7 -0
- package/dist/features/method/queries/impl/list-pipelines.query.js.map +1 -0
- package/dist/features/method/queries/impl/list-playbooks.query.js +7 -0
- package/dist/features/method/queries/impl/list-playbooks.query.js.map +1 -0
- package/dist/features/method/queries/impl/list-roles.query.js +7 -0
- package/dist/features/method/queries/impl/list-roles.query.js.map +1 -0
- package/dist/features/method/queries/index.js +9 -0
- package/dist/features/method/queries/index.js.map +1 -0
- package/dist/features/pr/commands/index.js +2 -0
- package/dist/features/pr/commands/index.js.map +1 -0
- package/dist/features/pr/pr-api.module.js +23 -0
- package/dist/features/pr/pr-api.module.js.map +1 -0
- package/dist/features/pr/pr-api.service.js +35 -0
- package/dist/features/pr/pr-api.service.js.map +1 -0
- package/dist/features/pr/queries/handlers/pr-query.handlers.js +48 -0
- package/dist/features/pr/queries/handlers/pr-query.handlers.js.map +1 -0
- package/dist/features/pr/queries/impl/get-pr-readiness.query.js +7 -0
- package/dist/features/pr/queries/impl/get-pr-readiness.query.js.map +1 -0
- package/dist/features/pr/queries/impl/list-pr-feedback.query.js +7 -0
- package/dist/features/pr/queries/impl/list-pr-feedback.query.js.map +1 -0
- package/dist/features/pr/queries/index.js +3 -0
- package/dist/features/pr/queries/index.js.map +1 -0
- package/dist/features/runs/commands/handlers/runs-command.handlers.js +32 -0
- package/dist/features/runs/commands/handlers/runs-command.handlers.js.map +1 -0
- package/dist/features/runs/commands/impl/create-run.command.js +7 -0
- package/dist/features/runs/commands/impl/create-run.command.js.map +1 -0
- package/dist/features/runs/commands/index.js +3 -0
- package/dist/features/runs/commands/index.js.map +1 -0
- package/dist/features/runs/queries/handlers/runs-query.handlers.js +359 -0
- package/dist/features/runs/queries/handlers/runs-query.handlers.js.map +1 -0
- package/dist/features/runs/queries/impl/get-agent-activity.query.js +7 -0
- package/dist/features/runs/queries/impl/get-agent-activity.query.js.map +1 -0
- package/dist/features/runs/queries/impl/get-agent-attempts.query.js +7 -0
- package/dist/features/runs/queries/impl/get-agent-attempts.query.js.map +1 -0
- package/dist/features/runs/queries/impl/get-agent-log.query.js +7 -0
- package/dist/features/runs/queries/impl/get-agent-log.query.js.map +1 -0
- package/dist/features/runs/queries/impl/get-run-attempts.query.js +7 -0
- package/dist/features/runs/queries/impl/get-run-attempts.query.js.map +1 -0
- package/dist/features/runs/queries/impl/get-run-digest.query.js +7 -0
- package/dist/features/runs/queries/impl/get-run-digest.query.js.map +1 -0
- package/dist/features/runs/queries/impl/get-run-events.query.js +7 -0
- package/dist/features/runs/queries/impl/get-run-events.query.js.map +1 -0
- package/dist/features/runs/queries/impl/get-run-progress.query.js +7 -0
- package/dist/features/runs/queries/impl/get-run-progress.query.js.map +1 -0
- package/dist/features/runs/queries/impl/get-run-workflow.query.js +7 -0
- package/dist/features/runs/queries/impl/get-run-workflow.query.js.map +1 -0
- package/dist/features/runs/queries/impl/get-run.query.js +7 -0
- package/dist/features/runs/queries/impl/get-run.query.js.map +1 -0
- package/dist/features/runs/queries/impl/list-runs.query.js +7 -0
- package/dist/features/runs/queries/impl/list-runs.query.js.map +1 -0
- package/dist/features/runs/queries/impl/simulate-route.query.js +7 -0
- package/dist/features/runs/queries/impl/simulate-route.query.js.map +1 -0
- package/dist/features/runs/queries/index.js +15 -0
- package/dist/features/runs/queries/index.js.map +1 -0
- package/dist/features/runs/runs-api.module.js +23 -0
- package/dist/features/runs/runs-api.module.js.map +1 -0
- package/dist/features/runs/runs-api.service.js +79 -0
- package/dist/features/runs/runs-api.service.js.map +1 -0
- package/dist/features/shared/connection.js +39 -0
- package/dist/features/shared/connection.js.map +1 -0
- package/dist/features/system/commands/index.js +2 -0
- package/dist/features/system/commands/index.js.map +1 -0
- package/dist/features/system/queries/handlers/system-query.handlers.js +96 -0
- package/dist/features/system/queries/handlers/system-query.handlers.js.map +1 -0
- package/dist/features/system/queries/impl/doctor.query.js +4 -0
- package/dist/features/system/queries/impl/doctor.query.js.map +1 -0
- package/dist/features/system/queries/impl/get-project.query.js +4 -0
- package/dist/features/system/queries/impl/get-project.query.js.map +1 -0
- package/dist/features/system/queries/impl/get-repository-context.query.js +7 -0
- package/dist/features/system/queries/impl/get-repository-context.query.js.map +1 -0
- package/dist/features/system/queries/impl/get-status.query.js +4 -0
- package/dist/features/system/queries/impl/get-status.query.js.map +1 -0
- package/dist/features/system/queries/impl/validate-repository.query.js +7 -0
- package/dist/features/system/queries/impl/validate-repository.query.js.map +1 -0
- package/dist/features/system/queries/index.js +9 -0
- package/dist/features/system/queries/index.js.map +1 -0
- package/dist/features/system/system-api.module.js +23 -0
- package/dist/features/system/system-api.module.js.map +1 -0
- package/dist/features/system/system-api.service.js +47 -0
- package/dist/features/system/system-api.service.js.map +1 -0
- package/dist/host/daemon.js +99 -0
- package/dist/host/daemon.js.map +1 -0
- package/dist/host/dbos-identity.js +42 -0
- package/dist/host/dbos-identity.js.map +1 -0
- package/dist/host/ensure-host.js +120 -0
- package/dist/host/ensure-host.js.map +1 -0
- package/dist/host/host-runtime.js +90 -0
- package/dist/host/host-runtime.js.map +1 -0
- package/dist/host/host.lifecycle.js +16 -3
- package/dist/host/host.lifecycle.js.map +1 -1
- package/dist/host/queue-ownership.js +70 -0
- package/dist/host/queue-ownership.js.map +1 -0
- package/dist/host/queue-poller-census.js +47 -0
- package/dist/host/queue-poller-census.js.map +1 -0
- package/dist/http/graphql-host.js +56 -0
- package/dist/http/graphql-host.js.map +1 -0
- package/dist/{mcp/mcp.module.js → http/graphql-host.module.js} +12 -10
- package/dist/http/graphql-host.module.js.map +1 -0
- package/dist/infrastructure/metrics/graphql/graphql-metrics.js +91 -0
- package/dist/infrastructure/metrics/graphql/graphql-metrics.js.map +1 -0
- package/dist/mcp/mcp-capabilities.js +9 -1
- package/dist/mcp/mcp-capabilities.js.map +1 -1
- package/dist/mcp/mcp-facade.service.js +68 -5
- package/dist/mcp/mcp-facade.service.js.map +1 -1
- package/dist/mcp/mcp-http.service.js +95 -0
- package/dist/mcp/mcp-http.service.js.map +1 -0
- package/dist/mcp/mcp-tools.js +93 -7
- package/dist/mcp/mcp-tools.js.map +1 -1
- package/dist/observability/agent-activity-reporter.js +185 -0
- package/dist/observability/agent-activity-reporter.js.map +1 -0
- package/dist/observability/agent-observability.service.js +1142 -0
- package/dist/observability/agent-observability.service.js.map +1 -0
- package/dist/observability/index.js +4 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/types.js +11 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/pipeline/await-human.js +8 -4
- package/dist/pipeline/await-human.js.map +1 -1
- package/dist/pipeline/data-driven-task.workflow.js +667 -0
- package/dist/pipeline/data-driven-task.workflow.js.map +1 -0
- package/dist/pipeline/data-driven-template.js +57 -0
- package/dist/pipeline/data-driven-template.js.map +1 -0
- package/dist/pipeline/pipeline.module.js +2 -2
- package/dist/pipeline/pipeline.module.js.map +1 -1
- package/dist/pipeline/pipeline.service.js +412 -0
- package/dist/pipeline/pipeline.service.js.map +1 -0
- package/dist/pipeline/route-contract.js +82 -0
- package/dist/pipeline/route-contract.js.map +1 -0
- package/dist/pipeline-core/index.js +16 -0
- package/dist/pipeline-core/index.js.map +1 -0
- package/dist/pipeline-core/interpret.js +353 -0
- package/dist/pipeline-core/interpret.js.map +1 -0
- package/dist/pipeline-core/kit/assertions.js +61 -0
- package/dist/pipeline-core/kit/assertions.js.map +1 -0
- package/dist/pipeline-core/kit/builders.js +138 -0
- package/dist/pipeline-core/kit/builders.js.map +1 -0
- package/dist/pipeline-core/kit/drive.js +96 -0
- package/dist/pipeline-core/kit/drive.js.map +1 -0
- package/dist/pipeline-core/kit/fixtures.js +342 -0
- package/dist/pipeline-core/kit/fixtures.js.map +1 -0
- package/dist/pipeline-core/kit/index.js +13 -0
- package/dist/pipeline-core/kit/index.js.map +1 -0
- package/dist/pipeline-core/types.js +134 -0
- package/dist/pipeline-core/types.js.map +1 -0
- package/dist/pipeline-core/validate-capability.js +23 -0
- package/dist/pipeline-core/validate-capability.js.map +1 -0
- package/dist/pipeline-core/validate-conflicts.js +37 -0
- package/dist/pipeline-core/validate-conflicts.js.map +1 -0
- package/dist/pipeline-core/validate-dataflow.js +212 -0
- package/dist/pipeline-core/validate-dataflow.js.map +1 -0
- package/dist/pipeline-core/validate-diff.js +158 -0
- package/dist/pipeline-core/validate-diff.js.map +1 -0
- package/dist/pipeline-core/validate-edges.js +44 -0
- package/dist/pipeline-core/validate-edges.js.map +1 -0
- package/dist/pipeline-core/validate-graph.js +123 -0
- package/dist/pipeline-core/validate-graph.js.map +1 -0
- package/dist/pipeline-core/validate-loops.js +226 -0
- package/dist/pipeline-core/validate-loops.js.map +1 -0
- package/dist/pipeline-core/validate-parallel.js +132 -0
- package/dist/pipeline-core/validate-parallel.js.map +1 -0
- package/dist/pipeline-core/validate-sink.js +27 -0
- package/dist/pipeline-core/validate-sink.js.map +1 -0
- package/dist/pipeline-core/validate-topology.js +140 -0
- package/dist/pipeline-core/validate-topology.js.map +1 -0
- package/dist/pipeline-core/validate-verdict.js +72 -0
- package/dist/pipeline-core/validate-verdict.js.map +1 -0
- package/dist/pipeline-core/validate.js +119 -0
- package/dist/pipeline-core/validate.js.map +1 -0
- package/dist/playbook/catalog-loader.js +14 -1
- package/dist/playbook/catalog-loader.js.map +1 -1
- package/dist/playbook/import-mapper.js +14 -38
- package/dist/playbook/import-mapper.js.map +1 -1
- package/dist/playbook/manifest.js +1 -1
- package/dist/revisium/playbooks.service.js +107 -19
- package/dist/revisium/playbooks.service.js.map +1 -1
- package/dist/revisium/roles.service.js +1 -1
- package/dist/revisium/roles.service.js.map +1 -1
- package/dist/revisium/run.service.js +55 -8
- package/dist/revisium/run.service.js.map +1 -1
- package/dist/run/append-event.js +24 -1
- package/dist/run/append-event.js.map +1 -1
- package/dist/run/block-run.js +17 -0
- package/dist/run/block-run.js.map +1 -0
- package/dist/run/complete-run.js +18 -0
- package/dist/run/complete-run.js.map +1 -0
- package/dist/run/create-run.js +33 -36
- package/dist/run/create-run.js.map +1 -1
- package/dist/run/inspect-run.js +31 -30
- package/dist/run/inspect-run.js.map +1 -1
- package/dist/run/run-outputs.js +88 -0
- package/dist/run/run-outputs.js.map +1 -0
- package/dist/run/terminal-run-status.js +66 -7
- package/dist/run/terminal-run-status.js.map +1 -1
- package/dist/runners/claude-code.service.js +5 -0
- package/dist/runners/claude-code.service.js.map +1 -1
- package/dist/runners/codex.service.js +51 -0
- package/dist/runners/codex.service.js.map +1 -0
- package/dist/runners/integrator-branch-naming.js +39 -0
- package/dist/runners/integrator-branch-naming.js.map +1 -0
- package/dist/runners/integrator-git.js +84 -0
- package/dist/runners/integrator-git.js.map +1 -0
- package/dist/runners/integrator-remote.js +34 -0
- package/dist/runners/integrator-remote.js.map +1 -0
- package/dist/runners/integrator-types.js +9 -0
- package/dist/runners/integrator-types.js.map +1 -0
- package/dist/runners/integrator.js +327 -147
- package/dist/runners/integrator.js.map +1 -1
- package/dist/runners/runner.module.js +7 -3
- package/dist/runners/runner.module.js.map +1 -1
- package/dist/runners/worktree.service.js +63 -0
- package/dist/runners/worktree.service.js.map +1 -0
- package/dist/smoke/cli.js +47 -0
- package/dist/smoke/cli.js.map +1 -0
- package/dist/smoke/isolation.js +113 -0
- package/dist/smoke/isolation.js.map +1 -0
- package/dist/task-control-plane/run-watch.service.js +281 -0
- package/dist/task-control-plane/run-watch.service.js.map +1 -0
- package/dist/task-control-plane/task-control-plane-api.service.js +569 -23
- package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
- package/dist/task-control-plane/task-control-plane.module.js +22 -3
- package/dist/task-control-plane/task-control-plane.module.js.map +1 -1
- package/dist/worker/artifact-store.js +116 -0
- package/dist/worker/artifact-store.js.map +1 -0
- package/dist/worker/build-context.js +169 -2
- package/dist/worker/build-context.js.map +1 -1
- package/dist/worker/claude-code-runner.js +159 -68
- package/dist/worker/claude-code-runner.js.map +1 -1
- package/dist/worker/codex-runner.js +474 -0
- package/dist/worker/codex-runner.js.map +1 -0
- package/dist/worker/git-worktree-manager.js +129 -65
- package/dist/worker/git-worktree-manager.js.map +1 -1
- package/dist/worker/process-executor.js +23 -2
- package/dist/worker/process-executor.js.map +1 -1
- package/dist/worker/result-envelope.js +115 -57
- package/dist/worker/result-envelope.js.map +1 -1
- package/dist/worker/runner-common.js +106 -0
- package/dist/worker/runner-common.js.map +1 -0
- package/dist/worker/runner-dispatch.js +4 -1
- package/dist/worker/runner-dispatch.js.map +1 -1
- package/dist/worker/runner.js +11 -1
- package/dist/worker/runner.js.map +1 -1
- package/dist/worker/stub-runner.js +7 -45
- package/dist/worker/stub-runner.js.map +1 -1
- package/package.json +32 -7
- package/dist/app.module.js +0 -28
- package/dist/app.module.js.map +0 -1
- package/dist/cli/commands/bootstrap.js +0 -39
- package/dist/cli/commands/bootstrap.js.map +0 -1
- package/dist/cli/commands/dev.js +0 -143
- package/dist/cli/commands/dev.js.map +0 -1
- package/dist/cli/commands/inbox.js +0 -288
- package/dist/cli/commands/inbox.js.map +0 -1
- package/dist/cli/commands/playbook.js +0 -74
- package/dist/cli/commands/playbook.js.map +0 -1
- package/dist/cli/commands/poll-workflow-state.js +0 -144
- package/dist/cli/commands/poll-workflow-state.js.map +0 -1
- package/dist/cli/commands/revisium-context.js +0 -23
- package/dist/cli/commands/revisium-context.js.map +0 -1
- package/dist/cli/commands/revisium.js +0 -89
- package/dist/cli/commands/revisium.js.map +0 -1
- package/dist/cli/commands/run.js +0 -426
- package/dist/cli/commands/run.js.map +0 -1
- package/dist/cli/commands/work.js +0 -149
- package/dist/cli/commands/work.js.map +0 -1
- package/dist/cli/live-guard.js +0 -49
- package/dist/cli/live-guard.js.map +0 -1
- package/dist/cli/needs-host.js +0 -78
- package/dist/cli/needs-host.js.map +0 -1
- package/dist/mcp/mcp-stdio.service.js +0 -48
- package/dist/mcp/mcp-stdio.service.js.map +0 -1
- package/dist/mcp/mcp.module.js.map +0 -1
- package/dist/pipeline/develop-task.workflow.js +0 -497
- package/dist/pipeline/develop-task.workflow.js.map +0 -1
- package/dist/worker/loop.js +0 -122
- package/dist/worker/loop.js.map +0 -1
- package/dist/worker/script-runner.js +0 -28
- package/dist/worker/script-runner.js.map +0 -1
- package/dist/worker/worker-id.js +0 -18
- package/dist/worker/worker-id.js.map +0 -1
- package/dist/worker/worktree-manager.js +0 -7
- package/dist/worker/worktree-manager.js.map +0 -1
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
function isRecord(value) {
|
|
3
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
4
|
+
}
|
|
5
|
+
function escapePointer(segment) {
|
|
6
|
+
return segment.replaceAll('~', '~0').replaceAll('/', '~1');
|
|
7
|
+
}
|
|
8
|
+
function schemaProperties(schema) {
|
|
9
|
+
if (!isRecord(schema))
|
|
10
|
+
return {};
|
|
11
|
+
return isRecord(schema.properties) ? schema.properties : {};
|
|
12
|
+
}
|
|
13
|
+
function stableJson(value) {
|
|
14
|
+
if (!isRecord(value) && !Array.isArray(value))
|
|
15
|
+
return JSON.stringify(value);
|
|
16
|
+
if (Array.isArray(value))
|
|
17
|
+
return `[${value.map(stableJson).join(',')}]`;
|
|
18
|
+
const entries = Object.keys(value)
|
|
19
|
+
.sort((a, b) => a.localeCompare(b))
|
|
20
|
+
.map((key) => `${JSON.stringify(key)}:${stableJson(value[key])}`);
|
|
21
|
+
return `{${entries.join(',')}}`;
|
|
22
|
+
}
|
|
23
|
+
export function computeAdditiveSchemaPatches(currentSchema, desiredSchema) {
|
|
24
|
+
const currentProps = schemaProperties(currentSchema);
|
|
25
|
+
const desiredProps = schemaProperties(desiredSchema);
|
|
26
|
+
const patches = [];
|
|
27
|
+
for (const [name, desired] of Object.entries(desiredProps)) {
|
|
28
|
+
const path = `/properties/${escapePointer(name)}`;
|
|
29
|
+
if (!(name in currentProps)) {
|
|
30
|
+
patches.push({ op: 'add', path, value: desired });
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (stableJson(currentProps[name]) !== stableJson(desired)) {
|
|
34
|
+
patches.push({ op: 'replace', path, value: desired });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return patches;
|
|
38
|
+
}
|
|
39
|
+
function loadBootstrapTables(configPath) {
|
|
40
|
+
const parsed = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
41
|
+
if (!Array.isArray(parsed.tables))
|
|
42
|
+
return [];
|
|
43
|
+
return parsed.tables.flatMap((item) => {
|
|
44
|
+
if (!isRecord(item) || typeof item.id !== 'string' || !isRecord(item.schema))
|
|
45
|
+
return [];
|
|
46
|
+
return [{ id: item.id, schema: item.schema }];
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Apply the bootstrap.config.json table schemas additively onto a caller-provided DRAFT scope:
|
|
51
|
+
* create missing tables, patch additive drift on existing ones. Does NOT commit — the caller owns the
|
|
52
|
+
* scope and commits the whole bootstrap once (one `client.revision('draft')` → tables + rows → commit).
|
|
53
|
+
*/
|
|
54
|
+
export async function applyAdditiveSchemaMigration(draft, configPath) {
|
|
55
|
+
const tables = loadBootstrapTables(configPath);
|
|
56
|
+
const updatedTables = [];
|
|
57
|
+
let patchCount = 0;
|
|
58
|
+
for (const table of tables) {
|
|
59
|
+
let currentSchema;
|
|
60
|
+
try {
|
|
61
|
+
currentSchema = await draft.getTableSchema(table.id);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Table absent on an upgraded control-plane (e.g. `run_outputs`, added in 0016). The previous
|
|
65
|
+
// code only PATCHED existing tables, so a brand-new table would never land on an already-
|
|
66
|
+
// bootstrapped control-plane. Create it from the bootstrap schema (fresh bootstrap already
|
|
67
|
+
// creates every config table; this covers the upgrade path).
|
|
68
|
+
await draft.createTable(table.id, table.schema);
|
|
69
|
+
updatedTables.push(table.id);
|
|
70
|
+
patchCount += 1;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
const patches = computeAdditiveSchemaPatches(currentSchema, table.schema);
|
|
74
|
+
if (patches.length === 0)
|
|
75
|
+
continue;
|
|
76
|
+
await draft.updateTable(table.id, patches);
|
|
77
|
+
updatedTables.push(table.id);
|
|
78
|
+
patchCount += patches.length;
|
|
79
|
+
}
|
|
80
|
+
return { updatedTables, patches: patchCount };
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=schema-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-migration.js","sourceRoot":"","sources":["../../src/control-plane/schema-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* seed-default-playbook.ts — install the BUILT-IN DEFAULT playbook during `revo bootstrap` (slice 5,
|
|
3
|
+
* plan 0015).
|
|
4
|
+
*
|
|
5
|
+
* The default is DATA, not engine code: a committed playbook source under
|
|
6
|
+
* `control-plane/default-playbook/` (manifest + roles/pipelines catalogs carrying data-driven
|
|
7
|
+
* `template_json`). `revo bootstrap` seeds the control-plane SCHEMA (bootstrap.config.json), then this
|
|
8
|
+
* installs the default playbook so a FRESH control-plane has a working `feature-development` +
|
|
9
|
+
* `local-change` pipeline out-of-the-box — without depending on the external agent-playbook repo.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent: skips when the default playbook is already installed (so re-running bootstrap is a
|
|
12
|
+
* no-op), and tolerates a benign concurrent/duplicate commit ("revision is not a draft").
|
|
13
|
+
*/
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import { existsSync } from 'node:fs';
|
|
16
|
+
import { repoRoot } from '../config.js';
|
|
17
|
+
import { PlaybookInstaller } from '../playbook/playbook-installer.js';
|
|
18
|
+
import { resolvePlaybookSource } from '../playbook/source-resolver.js';
|
|
19
|
+
import { createVersionedMeaningAccess } from './versioned-meaning.js';
|
|
20
|
+
/** Installed row id of the built-in default playbook (distinct from the e2e fixture playbook). */
|
|
21
|
+
export const DEFAULT_PLAYBOOK_ID = 'revisium-default';
|
|
22
|
+
/**
|
|
23
|
+
* Source directory of the committed default playbook. Packaged at the repo/package root (see the
|
|
24
|
+
* package `files` allowlist) so the SHIPPED `revo bootstrap` (running from dist/) resolves it.
|
|
25
|
+
*/
|
|
26
|
+
export const DEFAULT_PLAYBOOK_SOURCE = join(repoRoot, 'control-plane', 'default-playbook');
|
|
27
|
+
/**
|
|
28
|
+
* Compare two `x.y.z` semver strings numerically: returns >0 when `a` is newer, <0 when older, 0 when
|
|
29
|
+
* equal. Missing/non-numeric components read as 0 (so `0.1` == `0.1.0`). We hand-roll this rather than
|
|
30
|
+
* pull in a `semver` dependency: the default playbook only ever carries simple dotted release versions,
|
|
31
|
+
* and an unparsable component degrades to "older" via the missing-version path in the caller.
|
|
32
|
+
*/
|
|
33
|
+
function compareSemver(a, b) {
|
|
34
|
+
const parse = (v) => v.split('.').map((part) => Number.parseInt(part, 10) || 0);
|
|
35
|
+
const left = parse(a);
|
|
36
|
+
const right = parse(b);
|
|
37
|
+
const length = Math.max(left.length, right.length);
|
|
38
|
+
for (let i = 0; i < length; i += 1) {
|
|
39
|
+
const diff = (left[i] ?? 0) - (right[i] ?? 0);
|
|
40
|
+
if (diff !== 0)
|
|
41
|
+
return diff;
|
|
42
|
+
}
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* True for a benign "already committed / nothing to do" race during a concurrent bootstrap. Matched
|
|
47
|
+
* narrowly against the explicit duplicate-commit signals (Revisium draft commit + control-plane
|
|
48
|
+
* ROW_CONFLICT) — a generic `already` substring would misclassify unrelated installer failures as a
|
|
49
|
+
* race and silently swallow them.
|
|
50
|
+
*/
|
|
51
|
+
function isBenignInstallRace(err) {
|
|
52
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
53
|
+
return /revision is not a draft|nothing to commit|ROW_CONFLICT/i.test(message);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Install the built-in default playbook if it is not already present, OR re-install (overwrite) it when
|
|
57
|
+
* the BUNDLED version is newer than the installed row's version. Returns a status discriminant so the
|
|
58
|
+
* caller can log appropriately; never throws on a benign duplicate-install race.
|
|
59
|
+
*
|
|
60
|
+
* Version-aware re-seed (slice 144): a warm profile that merely already HAS the default playbook used to
|
|
61
|
+
* skip unconditionally, so `npm i -g` a newer bundle + `revo restart` kept the OLD playbook. Now we read
|
|
62
|
+
* the bundled version from the source package.json (the same value `resolvePlaybookSource` records on the
|
|
63
|
+
* installed row) and compare it to the installed row's recorded version:
|
|
64
|
+
* - bundle NEWER → re-seed (the installer upserts by row id, so the install path is the overwrite).
|
|
65
|
+
* - equal/older → skip (idempotent; never downgrade).
|
|
66
|
+
* - installed row has NO version (pre-versioning install) → treat as older → re-seed once.
|
|
67
|
+
* `install()` is the same upsert+commit path used for a fresh install, so re-seed stays idempotent.
|
|
68
|
+
*/
|
|
69
|
+
export async function seedDefaultPlaybook(installer, source = DEFAULT_PLAYBOOK_SOURCE, log = () => { }) {
|
|
70
|
+
if (!existsSync(source)) {
|
|
71
|
+
throw new Error(`default playbook source not found: ${source}`);
|
|
72
|
+
}
|
|
73
|
+
// `listPlaybooks` is the accurate presence signal: bootstrap seeds role/profile rows but NOT a
|
|
74
|
+
// playbook record, so this is empty until the default playbook is installed.
|
|
75
|
+
const installed = await installer.listPlaybooks();
|
|
76
|
+
const existing = installed.find((p) => p.id === DEFAULT_PLAYBOOK_ID);
|
|
77
|
+
if (existing) {
|
|
78
|
+
// The bundled version lives in the source package.json — resolve it the same way the installer does
|
|
79
|
+
// so the comparison is against the exact value that lands on the row.
|
|
80
|
+
// RELEASE DISCIPLINE: this re-seed only fires when the bundled version is NEWER, so any change to the
|
|
81
|
+
// playbook CONTENT (catalog/pipelines.json, catalog/roles.json, prompts/) MUST bump
|
|
82
|
+
// control-plane/default-playbook/package.json — otherwise an upgraded bundle with new content keeps the
|
|
83
|
+
// SAME version and silently skips re-seeding (this is exactly the D3 dogfood gap; see slice 144).
|
|
84
|
+
const bundledVersion = resolvePlaybookSource(source).version;
|
|
85
|
+
const installedVersion = existing.version ?? '';
|
|
86
|
+
// A pre-versioning row (no recorded version) reads as "0.0.0" → strictly older → re-seed once so the
|
|
87
|
+
// one-time upgrade lands; thereafter the versions match and we skip.
|
|
88
|
+
const comparison = compareSemver(bundledVersion, installedVersion || '0.0.0');
|
|
89
|
+
if (comparison <= 0) {
|
|
90
|
+
log(`Default playbook ${DEFAULT_PLAYBOOK_ID} up to date ` +
|
|
91
|
+
`(installed ${installedVersion || '(none)'} >= bundled ${bundledVersion}) — skipping seed.`);
|
|
92
|
+
return { status: 'already-installed' };
|
|
93
|
+
}
|
|
94
|
+
log(`Default playbook ${DEFAULT_PLAYBOOK_ID} bundle is newer ` +
|
|
95
|
+
`(installed ${installedVersion || '(none)'} -> bundled ${bundledVersion}) — re-seeding.`);
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const result = await installer.install({ source, name: DEFAULT_PLAYBOOK_ID, commit: true });
|
|
99
|
+
return { status: 'installed', result };
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
if (isBenignInstallRace(err))
|
|
103
|
+
return { status: 'raced' };
|
|
104
|
+
throw err;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Default-daemon installer adapter used by `revo bootstrap`: a minimal {@link DefaultPlaybookInstaller}
|
|
109
|
+
* backed by the live draft scope (the same versioned-meaning access the `revo playbook install` CLI
|
|
110
|
+
* uses). Reads the installed playbooks list from HEAD via the provided reader.
|
|
111
|
+
*/
|
|
112
|
+
export function createDaemonInstaller(listPlaybooks) {
|
|
113
|
+
return {
|
|
114
|
+
listPlaybooks,
|
|
115
|
+
install: (options) => new PlaybookInstaller({ access: createVersionedMeaningAccess({}) }).install(options),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Run {@link seedDefaultPlaybook} as a BEST-EFFORT step: report the outcome but never throw. The
|
|
120
|
+
* schema is the critical bootstrap artifact; a playbook-seed failure must not fail stack bring-up
|
|
121
|
+
* (it is logged so the operator can re-run the install). `runSeed`/`log` are injected so the logging
|
|
122
|
+
* policy is unit-testable without a live daemon.
|
|
123
|
+
*/
|
|
124
|
+
export async function seedDefaultPlaybookBestEffort(runSeed, log = (message) => console.error(message)) {
|
|
125
|
+
try {
|
|
126
|
+
const outcome = await runSeed();
|
|
127
|
+
if (outcome.status === 'installed') {
|
|
128
|
+
const { result } = outcome;
|
|
129
|
+
log(`Seeded default playbook ${result.playbookId} ` +
|
|
130
|
+
`(${result.roles} roles, ${result.pipelines} pipelines).`);
|
|
131
|
+
}
|
|
132
|
+
else if (outcome.status === 'already-installed') {
|
|
133
|
+
log('Default playbook already installed — skipping seed.');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
log(`Default playbook seed failed (schema bootstrap still applied): ${String(err)}. ` +
|
|
138
|
+
'Re-run `revo start` to retry the default-playbook seed.');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=seed-default-playbook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-default-playbook.js","sourceRoot":"","sources":["../../src/control-plane/seed-default-playbook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Step types + deterministic id / format helpers for the control plane.
|
|
3
|
+
*
|
|
4
|
+
* NOTE: the legacy step-lifecycle verbs (`claimNextStep`/`startAttempt`/`writeResult`/`failStep`/
|
|
5
|
+
* `recoverInFlight`/`createSteps`) were the pre-pivot dumb-loop step queue. They are superseded by the
|
|
6
|
+
* DBOS-driven data-driven engine and were removed (audit §2.1). What remains here is the `Step` shape the
|
|
7
|
+
* runner machinery still consumes (synthesized in-memory by the engine — `RunService.loadPipelineContext` —
|
|
8
|
+
* not read from a `steps` row) plus a few pure id / format helpers reused across the run / inbox / pipeline
|
|
9
|
+
* layers.
|
|
10
|
+
*/
|
|
11
|
+
// ─── id / format helpers ─────────────────────────────────────
|
|
7
12
|
export function compactStamp(date) {
|
|
8
13
|
const pad = (v, l = 2) => String(v).padStart(l, '0');
|
|
9
14
|
return [
|
|
@@ -18,17 +23,10 @@ export function compactStamp(date) {
|
|
|
18
23
|
'Z',
|
|
19
24
|
].join('');
|
|
20
25
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return opts?.idSuffix ?? randomUUID().replaceAll('-', '').slice(0, 8);
|
|
26
|
-
}
|
|
27
|
-
// Non-cryptographic FNV-1a 64-bit hash → 16 hex chars. Used to derive a child step id that is
|
|
28
|
-
// DETERMINISTIC (same parent + index → same id, so a crash-retry is idempotent) yet BOUNDED in
|
|
29
|
-
// length. Revisium rowIds max out at 64 chars; concatenating the parent id per level
|
|
30
|
-
// (`${parent}_ch_${i}`) overflowed on deep chains. Not crypto, so it does not trip the
|
|
31
|
-
// weak-hash security hotspot.
|
|
26
|
+
// Non-cryptographic FNV-1a 64-bit hash → 16 hex chars. Used to derive DETERMINISTIC, BOUNDED row ids
|
|
27
|
+
// (same input → same id, so a crash-retry is idempotent) that fit Revisium's 64-char rowId limit:
|
|
28
|
+
// `inbox_`/`event_`/`cost_`/`attempt_`/`out_`/`step_` + 16 hex stays well under the cap. Not crypto, so
|
|
29
|
+
// it does not trip the weak-hash security hotspot.
|
|
32
30
|
export function fnv1a64Hex(input) {
|
|
33
31
|
let hash = 0xcbf29ce484222325n;
|
|
34
32
|
const prime = 0x100000001b3n;
|
|
@@ -46,336 +44,4 @@ export function toStr(v) {
|
|
|
46
44
|
return String(v);
|
|
47
45
|
return '';
|
|
48
46
|
}
|
|
49
|
-
function mapStep(row) {
|
|
50
|
-
const d = row.data;
|
|
51
|
-
return {
|
|
52
|
-
id: row.rowId,
|
|
53
|
-
taskId: toStr(d.task_id),
|
|
54
|
-
runId: toStr(d.run_id),
|
|
55
|
-
role: toStr(d.role),
|
|
56
|
-
kind: toStr(d.kind),
|
|
57
|
-
status: toStr(d.status),
|
|
58
|
-
input: d.input ?? null,
|
|
59
|
-
output: d.output ?? null,
|
|
60
|
-
modelProfile: toStr(d.model_profile),
|
|
61
|
-
runAfter: toStr(d.run_after),
|
|
62
|
-
attemptCount: Number(d.attempt_count ?? 0),
|
|
63
|
-
maxAttempts: Number(d.max_attempts ?? 3),
|
|
64
|
-
priority: Number(d.priority ?? 0),
|
|
65
|
-
leaseOwner: toStr(d.lease_owner),
|
|
66
|
-
leaseExpiresAt: toStr(d.lease_expires_at),
|
|
67
|
-
deadReason: toStr(d.dead_reason),
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
function compareByPriorityThenAge(a, b) {
|
|
71
|
-
const pa = Number(a.data.priority ?? 0);
|
|
72
|
-
const pb = Number(b.data.priority ?? 0);
|
|
73
|
-
if (pb !== pa)
|
|
74
|
-
return pb - pa;
|
|
75
|
-
const ca = toStr(a.data.created_at);
|
|
76
|
-
const cb = toStr(b.data.created_at);
|
|
77
|
-
if (ca < cb)
|
|
78
|
-
return -1;
|
|
79
|
-
if (ca > cb)
|
|
80
|
-
return 1;
|
|
81
|
-
return 0;
|
|
82
|
-
}
|
|
83
|
-
function backoffRunAfter(t, attemptCount) {
|
|
84
|
-
const delayMs = 30_000 * Math.pow(2, attemptCount);
|
|
85
|
-
return new Date(t.getTime() + delayMs).toISOString();
|
|
86
|
-
}
|
|
87
|
-
// ─── exported verbs ──────────────────────────────────────────
|
|
88
|
-
// MVP: single-worker read-then-write is acceptable; atomic claim belongs only here later.
|
|
89
|
-
export async function claimNextStep(da, workerId, roles, opts) {
|
|
90
|
-
const t = clockNow(opts);
|
|
91
|
-
const nowIso = t.toISOString();
|
|
92
|
-
const leaseTtlMs = opts?.leaseTtlMs ?? 30_000;
|
|
93
|
-
const leaseExpiresAt = new Date(t.getTime() + leaseTtlMs).toISOString();
|
|
94
|
-
// Server-side: filter status=ready AND role∈roles, sort by priority desc then createdAt asc.
|
|
95
|
-
// WORKAROUND: JsonFilterDto.equals is typed as { [key: string]: unknown } but accepts scalar
|
|
96
|
-
// strings at runtime; the @revisium/client JSON-path scalar-equality type gap requires the cast.
|
|
97
|
-
// run_after <= now CANNOT be pushed server-side: JsonFilterDto.lte is typed as number only and
|
|
98
|
-
// has no string/date counterpart. The in-process filter below is the authoritative gate, bounded
|
|
99
|
-
// by CLAIM_CAP so future-scheduled steps cannot exhaust the cap if they accumulate.
|
|
100
|
-
// In-process: re-apply all predicates for correctness against fake/unconstrained transports.
|
|
101
|
-
const rows = await da.listRows('steps', {
|
|
102
|
-
first: CLAIM_CAP,
|
|
103
|
-
where: {
|
|
104
|
-
AND: [
|
|
105
|
-
{ data: { path: 'status', equals: 'ready' } },
|
|
106
|
-
{ OR: roles.map((r) => ({ data: { path: 'role', equals: r } })) },
|
|
107
|
-
],
|
|
108
|
-
},
|
|
109
|
-
orderBy: [
|
|
110
|
-
{ field: 'data', direction: 'desc', path: 'priority', type: 'int' },
|
|
111
|
-
{ field: 'createdAt', direction: 'asc' },
|
|
112
|
-
],
|
|
113
|
-
});
|
|
114
|
-
const candidateRow = rows
|
|
115
|
-
.filter((row) => {
|
|
116
|
-
const d = row.data;
|
|
117
|
-
return (toStr(d.status) === 'ready' &&
|
|
118
|
-
roles.includes(toStr(d.role)) &&
|
|
119
|
-
(toStr(d.run_after) === '' || toStr(d.run_after) <= nowIso));
|
|
120
|
-
})
|
|
121
|
-
.sort(compareByPriorityThenAge)
|
|
122
|
-
.at(0);
|
|
123
|
-
if (!candidateRow)
|
|
124
|
-
return null;
|
|
125
|
-
const candidate = mapStep(candidateRow);
|
|
126
|
-
await da.patchRow('steps', candidate.id, [
|
|
127
|
-
{ op: 'replace', path: 'status', value: 'claimed' },
|
|
128
|
-
{ op: 'replace', path: 'lease_owner', value: workerId },
|
|
129
|
-
{ op: 'replace', path: 'lease_expires_at', value: leaseExpiresAt },
|
|
130
|
-
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
131
|
-
]);
|
|
132
|
-
return { ...candidate, status: 'claimed', leaseOwner: workerId, leaseExpiresAt };
|
|
133
|
-
}
|
|
134
|
-
export async function startAttempt(da, step, opts) {
|
|
135
|
-
const t = clockNow(opts);
|
|
136
|
-
const nowIso = t.toISOString();
|
|
137
|
-
const sfx = clockSuffix(opts);
|
|
138
|
-
const st = compactStamp(t);
|
|
139
|
-
const attemptId = `attempt_${st}_${sfx}`;
|
|
140
|
-
const idempotencyKey = `idem_${st}_${sfx}`;
|
|
141
|
-
// Attempt row is written before step status flips to 'running'.
|
|
142
|
-
await da.createRow('attempts', attemptId, {
|
|
143
|
-
id: attemptId,
|
|
144
|
-
step_id: step.id,
|
|
145
|
-
run_id: step.runId,
|
|
146
|
-
worker_id: opts.workerId,
|
|
147
|
-
attempt_no: step.attemptCount + 1,
|
|
148
|
-
status: 'running',
|
|
149
|
-
idempotency_key: idempotencyKey,
|
|
150
|
-
model_profile: opts.modelProfile ?? step.modelProfile,
|
|
151
|
-
input_tokens: 0,
|
|
152
|
-
output_tokens: 0,
|
|
153
|
-
lesson: '',
|
|
154
|
-
error: '',
|
|
155
|
-
started_at: nowIso,
|
|
156
|
-
finished_at: '',
|
|
157
|
-
});
|
|
158
|
-
// Increment attempt_count here so crash recovery (recoverInFlight) sees the correct value
|
|
159
|
-
// even when failStep is never called. failStep reads the same derived value so no double-count.
|
|
160
|
-
await da.patchRow('steps', step.id, [
|
|
161
|
-
{ op: 'replace', path: 'status', value: 'running' },
|
|
162
|
-
{ op: 'replace', path: 'attempt_count', value: step.attemptCount + 1 },
|
|
163
|
-
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
164
|
-
]);
|
|
165
|
-
return { attemptId, idempotencyKey };
|
|
166
|
-
}
|
|
167
|
-
export async function writeResult(da, step, attemptId, output, costs, opts) {
|
|
168
|
-
const t = clockNow(opts);
|
|
169
|
-
const nowIso = t.toISOString();
|
|
170
|
-
const sfx = clockSuffix(opts);
|
|
171
|
-
const st = compactStamp(t);
|
|
172
|
-
// 1. Close attempt
|
|
173
|
-
await da.patchRow('attempts', attemptId, [
|
|
174
|
-
{ op: 'replace', path: 'status', value: 'succeeded' },
|
|
175
|
-
{ op: 'replace', path: 'finished_at', value: nowIso },
|
|
176
|
-
]);
|
|
177
|
-
// 2. Append event
|
|
178
|
-
await da.createRow('events', `event_${st}_step-succeeded_${sfx}`, {
|
|
179
|
-
id: `event_${st}_step-succeeded_${sfx}`,
|
|
180
|
-
run_id: step.runId,
|
|
181
|
-
task_id: step.taskId,
|
|
182
|
-
step_id: step.id,
|
|
183
|
-
type: 'step_succeeded',
|
|
184
|
-
payload: { attempt_id: attemptId },
|
|
185
|
-
actor: 'orchestrator',
|
|
186
|
-
created_at: nowIso,
|
|
187
|
-
});
|
|
188
|
-
// 3. Append cost rows
|
|
189
|
-
for (let i = 0; i < costs.length; i++) {
|
|
190
|
-
const cost = costs[i];
|
|
191
|
-
if (!cost)
|
|
192
|
-
continue;
|
|
193
|
-
await da.createRow('cost_ledger', `cost_${st}_${sfx}_${i}`, {
|
|
194
|
-
id: `cost_${st}_${sfx}_${i}`,
|
|
195
|
-
run_id: step.runId,
|
|
196
|
-
step_id: step.id,
|
|
197
|
-
attempt_id: attemptId,
|
|
198
|
-
model_profile: cost.modelProfile,
|
|
199
|
-
input_tokens: cost.inputTokens,
|
|
200
|
-
output_tokens: cost.outputTokens,
|
|
201
|
-
cost_amount: cost.costAmount,
|
|
202
|
-
currency: cost.currency ?? 'USD',
|
|
203
|
-
recorded_at: nowIso,
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
// 4. Last: flip step status to succeeded, clear lease so terminal state is not misleading
|
|
207
|
-
await da.patchRow('steps', step.id, [
|
|
208
|
-
{ op: 'replace', path: 'status', value: 'succeeded' },
|
|
209
|
-
{ op: 'replace', path: 'output', value: output },
|
|
210
|
-
{ op: 'replace', path: 'lease_owner', value: '' },
|
|
211
|
-
{ op: 'replace', path: 'lease_expires_at', value: '' },
|
|
212
|
-
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
213
|
-
]);
|
|
214
|
-
}
|
|
215
|
-
export async function createSteps(da, steps, opts) {
|
|
216
|
-
const t = clockNow(opts);
|
|
217
|
-
const nowIso = t.toISOString();
|
|
218
|
-
const sfx = clockSuffix(opts);
|
|
219
|
-
const st = compactStamp(t);
|
|
220
|
-
for (let i = 0; i < steps.length; i++) {
|
|
221
|
-
const ns = steps[i];
|
|
222
|
-
if (!ns)
|
|
223
|
-
continue;
|
|
224
|
-
// When parentStepId is supplied, derive a deterministic, BOUNDED-length ID from a hash of
|
|
225
|
-
// (parent id + index) so that a crash-and-retry (new attemptId, same parent) regenerates the
|
|
226
|
-
// exact same child IDs (idempotent: ROW_CONFLICT from createRow means it already exists → skip)
|
|
227
|
-
// WITHOUT growing the id per chain level. Concatenating the full parent id per level
|
|
228
|
-
// (`${parent}_ch_${i}`) overflowed Revisium's 64-char rowId limit on deep chains. The id
|
|
229
|
-
// depends ONLY on (parent id, index) — NOT on role — so the retry contract holds even if a
|
|
230
|
-
// re-run yields a different role for the same logical next step, and the length is fixed
|
|
231
|
-
// ("step_" + 16 hex = 21 chars) regardless of role. The 64-bit hash keeps it collision-resistant.
|
|
232
|
-
const childKey = `${opts?.parentStepId ?? ''}:${i}`;
|
|
233
|
-
const stepId = opts?.parentStepId
|
|
234
|
-
? `step_${fnv1a64Hex(childKey)}`
|
|
235
|
-
: `step_${st}_${ns.role}_${sfx}_${i}`;
|
|
236
|
-
// Steps with unresolved dependencies start 'pending'; promoting them to 'ready' once their
|
|
237
|
-
// depends_on complete is the dependency resolver's job, deferred to a later plan (not Plan 0006).
|
|
238
|
-
const hasDeps = ns.dependsOn !== undefined && ns.dependsOn.length > 0;
|
|
239
|
-
try {
|
|
240
|
-
await da.createRow('steps', stepId, {
|
|
241
|
-
id: stepId,
|
|
242
|
-
task_id: ns.taskId,
|
|
243
|
-
run_id: ns.runId,
|
|
244
|
-
role: ns.role,
|
|
245
|
-
kind: ns.kind,
|
|
246
|
-
status: hasDeps ? 'pending' : 'ready',
|
|
247
|
-
input: ns.input,
|
|
248
|
-
output: null,
|
|
249
|
-
model_profile: ns.modelProfile,
|
|
250
|
-
run_after: ns.runAfter ?? '',
|
|
251
|
-
attempt_count: 0,
|
|
252
|
-
max_attempts: ns.maxAttempts ?? 3,
|
|
253
|
-
priority: ns.priority ?? 0,
|
|
254
|
-
depends_on: ns.dependsOn ?? [],
|
|
255
|
-
lease_owner: '',
|
|
256
|
-
lease_expires_at: '',
|
|
257
|
-
dead_reason: '',
|
|
258
|
-
created_at: nowIso,
|
|
259
|
-
updated_at: nowIso,
|
|
260
|
-
});
|
|
261
|
-
}
|
|
262
|
-
catch (e) {
|
|
263
|
-
if (e instanceof ControlPlaneError && e.code === 'ROW_CONFLICT' && opts?.parentStepId)
|
|
264
|
-
continue;
|
|
265
|
-
throw e;
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
export async function failStep(da, step, attemptId, opts) {
|
|
270
|
-
const t = clockNow(opts);
|
|
271
|
-
const nowIso = t.toISOString();
|
|
272
|
-
const sfx = clockSuffix(opts);
|
|
273
|
-
const st = compactStamp(t);
|
|
274
|
-
// 1. Close attempt
|
|
275
|
-
await da.patchRow('attempts', attemptId, [
|
|
276
|
-
{ op: 'replace', path: 'status', value: 'failed' },
|
|
277
|
-
{ op: 'replace', path: 'lesson', value: opts.lesson ?? '' },
|
|
278
|
-
{ op: 'replace', path: 'error', value: opts.error ?? '' },
|
|
279
|
-
{ op: 'replace', path: 'finished_at', value: nowIso },
|
|
280
|
-
]);
|
|
281
|
-
// 2. Append event
|
|
282
|
-
await da.createRow('events', `event_${st}_step-failed_${sfx}`, {
|
|
283
|
-
id: `event_${st}_step-failed_${sfx}`,
|
|
284
|
-
run_id: step.runId,
|
|
285
|
-
task_id: step.taskId,
|
|
286
|
-
step_id: step.id,
|
|
287
|
-
type: 'step_failed',
|
|
288
|
-
payload: { attempt_id: attemptId, lesson: opts.lesson, error: opts.error },
|
|
289
|
-
actor: 'orchestrator',
|
|
290
|
-
created_at: nowIso,
|
|
291
|
-
});
|
|
292
|
-
// 3. Gate on the PERSISTED attempt_count, never the caller's snapshot. startAttempt owns the
|
|
293
|
-
// increment and already wrote it, so re-deriving here (snapshot + 1) would double-count a step
|
|
294
|
-
// that the worker refetched between startAttempt and failStep, killing it one attempt early.
|
|
295
|
-
// failStep therefore reads the current row and does not write attempt_count itself.
|
|
296
|
-
const current = await da.getRow('steps', step.id);
|
|
297
|
-
const attemptCount = Number(current?.data.attempt_count ?? step.attemptCount);
|
|
298
|
-
const maxAttempts = Number(current?.data.max_attempts ?? step.maxAttempts);
|
|
299
|
-
if (attemptCount < maxAttempts) {
|
|
300
|
-
// 4. Attempts remain: backoff to ready, clear lease (attempt_count left as startAttempt set it)
|
|
301
|
-
await da.patchRow('steps', step.id, [
|
|
302
|
-
{ op: 'replace', path: 'status', value: 'ready' },
|
|
303
|
-
{ op: 'replace', path: 'run_after', value: backoffRunAfter(t, attemptCount) },
|
|
304
|
-
{ op: 'replace', path: 'lease_owner', value: '' },
|
|
305
|
-
{ op: 'replace', path: 'lease_expires_at', value: '' },
|
|
306
|
-
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
307
|
-
]);
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
// 5. Cap reached: dead, clear lease
|
|
311
|
-
const deadReason = opts.lesson ?? opts.error ?? `exhausted ${maxAttempts} attempt(s)`;
|
|
312
|
-
await da.patchRow('steps', step.id, [
|
|
313
|
-
{ op: 'replace', path: 'status', value: 'dead' },
|
|
314
|
-
{ op: 'replace', path: 'dead_reason', value: deadReason },
|
|
315
|
-
{ op: 'replace', path: 'lease_owner', value: '' },
|
|
316
|
-
{ op: 'replace', path: 'lease_expires_at', value: '' },
|
|
317
|
-
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
318
|
-
]);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
export async function recoverInFlight(da, workerId, opts) {
|
|
322
|
-
const t = clockNow(opts);
|
|
323
|
-
const nowIso = t.toISOString();
|
|
324
|
-
const sfx = clockSuffix(opts);
|
|
325
|
-
const st = compactStamp(t);
|
|
326
|
-
// Server-side: filter by lease_owner + status to avoid a full-table scan.
|
|
327
|
-
// MVP single-worker startup: first-page result (CLAIM_CAP rows) is acceptable; a multi-worker
|
|
328
|
-
// deployment would need pagination here, but that belongs to a later plan.
|
|
329
|
-
const allSteps = await da.listRows('steps', {
|
|
330
|
-
first: CLAIM_CAP,
|
|
331
|
-
where: {
|
|
332
|
-
AND: [
|
|
333
|
-
{ data: { path: 'lease_owner', equals: workerId } },
|
|
334
|
-
{
|
|
335
|
-
OR: [
|
|
336
|
-
{ data: { path: 'status', equals: 'claimed' } },
|
|
337
|
-
{ data: { path: 'status', equals: 'running' } },
|
|
338
|
-
],
|
|
339
|
-
},
|
|
340
|
-
],
|
|
341
|
-
},
|
|
342
|
-
});
|
|
343
|
-
// In-process filter provides correctness against fake/unconstrained transports.
|
|
344
|
-
const orphans = allSteps
|
|
345
|
-
.map(mapStep)
|
|
346
|
-
.filter((s) => s.leaseOwner === workerId && (s.status === 'claimed' || s.status === 'running'));
|
|
347
|
-
for (let i = 0; i < orphans.length; i++) {
|
|
348
|
-
const orphan = orphans[i];
|
|
349
|
-
if (!orphan)
|
|
350
|
-
continue;
|
|
351
|
-
if (orphan.status === 'running') {
|
|
352
|
-
const allAttempts = await da.listRows('attempts', { first: RECOVERY_ATTEMPT_CAP });
|
|
353
|
-
const runningAttempts = allAttempts.filter((a) => String(a.data.step_id) === orphan.id && String(a.data.status) === 'running');
|
|
354
|
-
for (const attempt of runningAttempts) {
|
|
355
|
-
await da.patchRow('attempts', attempt.rowId, [
|
|
356
|
-
{ op: 'replace', path: 'status', value: 'failed' },
|
|
357
|
-
{ op: 'replace', path: 'lesson', value: 'worker crashed mid-step' },
|
|
358
|
-
{ op: 'replace', path: 'finished_at', value: nowIso },
|
|
359
|
-
]);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
await da.createRow('events', `event_${st}_step-recovered_${sfx}_${i}`, {
|
|
363
|
-
id: `event_${st}_step-recovered_${sfx}_${i}`,
|
|
364
|
-
run_id: orphan.runId,
|
|
365
|
-
task_id: orphan.taskId,
|
|
366
|
-
step_id: orphan.id,
|
|
367
|
-
type: 'step_recovered',
|
|
368
|
-
payload: { worker_id: workerId },
|
|
369
|
-
actor: 'orchestrator',
|
|
370
|
-
created_at: nowIso,
|
|
371
|
-
});
|
|
372
|
-
await da.patchRow('steps', orphan.id, [
|
|
373
|
-
{ op: 'replace', path: 'status', value: 'ready' },
|
|
374
|
-
{ op: 'replace', path: 'lease_owner', value: '' },
|
|
375
|
-
{ op: 'replace', path: 'lease_expires_at', value: '' },
|
|
376
|
-
{ op: 'replace', path: 'updated_at', value: nowIso },
|
|
377
|
-
]);
|
|
378
|
-
}
|
|
379
|
-
return orphans;
|
|
380
|
-
}
|
|
381
47
|
//# sourceMappingURL=steps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/control-plane/steps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/control-plane/steps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA4CH,gEAAgE;AAEhE,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7D,OAAO;QACL,IAAI,CAAC,cAAc,EAAE;QACrB,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtB,GAAG;QACH,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACjC,GAAG;KACJ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC;AAED,qGAAqG;AACrG,kGAAkG;AAClG,wGAAwG;AACxG,mDAAmD;AACnD,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,IAAI,GAAG,mBAAmB,CAAC;IAC/B,MAAM,KAAK,GAAG,cAAc,CAAC;IAC7B,MAAM,IAAI,GAAG,mBAAmB,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAU;IAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,EAAE,CAAC;AACZ,CAAC"}
|