agentic-orchestrator 0.1.6 → 0.1.8
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/.prettierignore +10 -0
- package/.prettierrc.json +24 -0
- package/CLAUDE.md +3 -2
- package/README.md +71 -48
- package/agentic/orchestrator/defaults/policy.defaults.yaml +1 -1
- package/agentic/orchestrator/prompts/planner.system.md +1 -0
- package/agentic/orchestrator/schemas/agents.schema.json +5 -22
- package/agentic/orchestrator/schemas/gates.schema.json +4 -19
- package/agentic/orchestrator/schemas/index.schema.json +3 -14
- package/agentic/orchestrator/schemas/multi-project.schema.json +2 -8
- package/agentic/orchestrator/schemas/plan.schema.json +6 -26
- package/agentic/orchestrator/schemas/policy.schema.json +19 -81
- package/agentic/orchestrator/schemas/policy.user.schema.json +1 -5
- package/agentic/orchestrator/schemas/qa_test_index.schema.json +5 -29
- package/agentic/orchestrator/schemas/state.schema.json +11 -61
- package/agentic/orchestrator/tools/catalog.json +33 -164
- package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/feature.delete.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/feature.get_context.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/feature.init.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/feature.log_append.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/input/feature.state_get.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/feature.state_patch.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/gates.run.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/locks.acquire.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/locks.release.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/performance.record_outcome.input.schema.json +10 -1
- package/agentic/orchestrator/tools/schemas/input/plan.get.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/plan.submit.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/plan.update.input.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/input/qa.test_index_get.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/qa.test_index_update.input.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/input/repo.apply_patch.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/repo.diff.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/repo.diff_bundle.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/repo.ensure_worktree.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/repo.read_file.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/repo.search.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/repo.status.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/report.feature_summary.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/output/collisions.scan.output.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/output/evidence.latest.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/feature.delete.output.schema.json +4 -20
- package/agentic/orchestrator/tools/schemas/output/feature.discover_specs.output.schema.json +2 -7
- package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +1 -8
- package/agentic/orchestrator/tools/schemas/output/feature.init.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/feature.log_append.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/output/feature.state_get.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/feature.state_patch.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/gates.list.output.schema.json +2 -7
- package/agentic/orchestrator/tools/schemas/output/gates.run.output.schema.json +1 -8
- package/agentic/orchestrator/tools/schemas/output/locks.acquire.output.schema.json +1 -7
- package/agentic/orchestrator/tools/schemas/output/locks.release.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/performance.get_analytics.output.schema.json +22 -2
- package/agentic/orchestrator/tools/schemas/output/plan.get.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/plan.submit.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/plan.update.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/qa.test_index_get.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/qa.test_index_update.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/repo.apply_patch.output.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/output/repo.diff.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/repo.diff_bundle.output.schema.json +1 -7
- package/agentic/orchestrator/tools/schemas/output/repo.ensure_worktree.output.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/output/repo.read_file.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/repo.search.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/repo.status.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +1 -4
- package/apps/control-plane/scripts/validate-architecture-rules.mjs +16 -5
- package/apps/control-plane/scripts/validate-docker-mcp-contract.mjs +30 -8
- package/apps/control-plane/scripts/validate-mcp-contracts.ts +13 -7
- package/apps/control-plane/src/application/adapters/adapter-registry.ts +35 -15
- package/apps/control-plane/src/application/multi-project-loader.ts +27 -10
- package/apps/control-plane/src/application/services/activity-monitor-service.ts +26 -14
- package/apps/control-plane/src/application/services/collision-queue-service.ts +31 -17
- package/apps/control-plane/src/application/services/cost-tracking-service.ts +23 -16
- package/apps/control-plane/src/application/services/dependency-scheduler-service.ts +12 -4
- package/apps/control-plane/src/application/services/feature-deletion-service.ts +94 -58
- package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +19 -13
- package/apps/control-plane/src/application/services/feature-state-service.ts +29 -19
- package/apps/control-plane/src/application/services/gate-interpolation-service.ts +7 -2
- package/apps/control-plane/src/application/services/gate-service.ts +64 -41
- package/apps/control-plane/src/application/services/instance-isolation-service.ts +1 -1
- package/apps/control-plane/src/application/services/issue-tracker-service.ts +49 -38
- package/apps/control-plane/src/application/services/lock-service.ts +75 -49
- package/apps/control-plane/src/application/services/merge-service.ts +91 -50
- package/apps/control-plane/src/application/services/notifier-service.ts +42 -20
- package/apps/control-plane/src/application/services/patch-service.ts +73 -44
- package/apps/control-plane/src/application/services/performance-analytics-service.ts +8 -6
- package/apps/control-plane/src/application/services/plan-service.ts +148 -89
- package/apps/control-plane/src/application/services/policy-loader-service.ts +10 -4
- package/apps/control-plane/src/application/services/pr-monitor-service.ts +33 -14
- package/apps/control-plane/src/application/services/qa-index-service.ts +20 -16
- package/apps/control-plane/src/application/services/reactions-service.ts +30 -15
- package/apps/control-plane/src/application/services/reporting-service.ts +16 -12
- package/apps/control-plane/src/application/services/run-lease-service.ts +138 -81
- package/apps/control-plane/src/application/tools/tool-metadata.ts +5 -5
- package/apps/control-plane/src/application/tools/tool-router.ts +6 -3
- package/apps/control-plane/src/cli/aop.ts +2 -2
- package/apps/control-plane/src/cli/attach-command-handler.ts +9 -9
- package/apps/control-plane/src/cli/cleanup-command-handler.ts +16 -11
- package/apps/control-plane/src/cli/cli-argument-parser.ts +6 -3
- package/apps/control-plane/src/cli/dashboard-command-handler.ts +28 -8
- package/apps/control-plane/src/cli/delete-command-handler.ts +7 -7
- package/apps/control-plane/src/cli/env-file.ts +115 -0
- package/apps/control-plane/src/cli/help-command-handler.ts +61 -32
- package/apps/control-plane/src/cli/init-command-handler.ts +182 -56
- package/apps/control-plane/src/cli/io.ts +7 -3
- package/apps/control-plane/src/cli/resume-command-handler.ts +21 -13
- package/apps/control-plane/src/cli/retry-command-handler.ts +12 -11
- package/apps/control-plane/src/cli/run-command-handler.ts +12 -8
- package/apps/control-plane/src/cli/send-command-handler.ts +6 -6
- package/apps/control-plane/src/cli/spec-ingestion-service.ts +14 -8
- package/apps/control-plane/src/cli/spec-input-resolver.ts +6 -1
- package/apps/control-plane/src/cli/spec-utils.ts +2 -2
- package/apps/control-plane/src/cli/status-command-handler.ts +13 -12
- package/apps/control-plane/src/cli/tooling.ts +3 -3
- package/apps/control-plane/src/cli/types.ts +1 -1
- package/apps/control-plane/src/core/collisions.ts +27 -10
- package/apps/control-plane/src/core/constants.ts +13 -7
- package/apps/control-plane/src/core/error-codes.ts +1 -1
- package/apps/control-plane/src/core/fs.ts +11 -5
- package/apps/control-plane/src/core/gates.ts +53 -27
- package/apps/control-plane/src/core/git.ts +18 -6
- package/apps/control-plane/src/core/kernel.ts +513 -227
- package/apps/control-plane/src/core/patch.ts +7 -3
- package/apps/control-plane/src/core/path-layout.ts +5 -1
- package/apps/control-plane/src/core/path-rules.ts +19 -5
- package/apps/control-plane/src/core/qa-index.ts +26 -12
- package/apps/control-plane/src/core/response.ts +9 -6
- package/apps/control-plane/src/core/schemas.ts +29 -10
- package/apps/control-plane/src/core/tool-caller.ts +1 -1
- package/apps/control-plane/src/core/workspace-hooks.ts +5 -5
- package/apps/control-plane/src/index.ts +3 -9
- package/apps/control-plane/src/interfaces/cli/bootstrap.ts +79 -35
- package/apps/control-plane/src/mcp/kernel-tool-executor.ts +7 -3
- package/apps/control-plane/src/mcp/mcp-server-adapter.ts +12 -10
- package/apps/control-plane/src/mcp/operation-ledger.ts +18 -8
- package/apps/control-plane/src/mcp/protocol-contract.ts +2 -2
- package/apps/control-plane/src/mcp/runtime-factory.ts +15 -6
- package/apps/control-plane/src/mcp/token-auth-verifier.ts +3 -2
- package/apps/control-plane/src/mcp/token-claims-validator.ts +11 -7
- package/apps/control-plane/src/mcp/tool-authorizer.ts +1 -3
- package/apps/control-plane/src/mcp/tool-client.ts +17 -5
- package/apps/control-plane/src/mcp/tool-contract-validator.ts +17 -8
- package/apps/control-plane/src/mcp/tool-registry-loader.ts +7 -3
- package/apps/control-plane/src/mcp/tool-runtime.ts +66 -39
- package/apps/control-plane/src/mcp/tools-markdown-generator.ts +6 -1
- package/apps/control-plane/src/providers/providers.ts +137 -54
- package/apps/control-plane/src/supervisor/build-wave-executor.ts +44 -25
- package/apps/control-plane/src/supervisor/planning-wave-executor.ts +46 -33
- package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +1 -1
- package/apps/control-plane/src/supervisor/qa-wave-executor.ts +38 -23
- package/apps/control-plane/src/supervisor/run-coordinator.ts +71 -36
- package/apps/control-plane/src/supervisor/runtime.ts +59 -35
- package/apps/control-plane/src/supervisor/session-orchestrator.ts +48 -31
- package/apps/control-plane/src/supervisor/types.ts +22 -7
- package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -20
- package/apps/control-plane/test/activity-monitor.spec.ts +54 -30
- package/apps/control-plane/test/adapter-registry.spec.ts +5 -5
- package/apps/control-plane/test/aop.spec.ts +4 -4
- package/apps/control-plane/test/batch-operations.spec.ts +20 -18
- package/apps/control-plane/test/bootstrap-attach.spec.ts +52 -19
- package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +58 -27
- package/apps/control-plane/test/bootstrap.spec.ts +72 -40
- package/apps/control-plane/test/cleanup-command.spec.ts +86 -32
- package/apps/control-plane/test/cli-helpers.spec.ts +119 -66
- package/apps/control-plane/test/cli.spec.ts +1 -1
- package/apps/control-plane/test/cli.unit.spec.ts +226 -167
- package/apps/control-plane/test/collision-queue.spec.ts +49 -40
- package/apps/control-plane/test/collisions.spec.ts +30 -30
- package/apps/control-plane/test/core-utils.spec.ts +29 -15
- package/apps/control-plane/test/cost-tracking.spec.ts +38 -22
- package/apps/control-plane/test/dashboard-api.integration.spec.ts +68 -36
- package/apps/control-plane/test/dashboard-client.spec.ts +18 -12
- package/apps/control-plane/test/dashboard-command.spec.ts +11 -7
- package/apps/control-plane/test/delete-command-handler.spec.ts +49 -41
- package/apps/control-plane/test/dependency-scheduler.spec.ts +47 -20
- package/apps/control-plane/test/epoch-tracking.spec.ts +9 -9
- package/apps/control-plane/test/feature-deletion-service.spec.ts +60 -52
- package/apps/control-plane/test/feature-lifecycle.spec.ts +36 -17
- package/apps/control-plane/test/gates.spec.ts +101 -81
- package/apps/control-plane/test/git-spawn-error.spec.ts +1 -1
- package/apps/control-plane/test/helpers.ts +10 -6
- package/apps/control-plane/test/incremental-gates.spec.ts +59 -20
- package/apps/control-plane/test/init-wizard.spec.ts +328 -68
- package/apps/control-plane/test/instance-isolation.spec.ts +43 -10
- package/apps/control-plane/test/issue-tracker.spec.ts +368 -128
- package/apps/control-plane/test/kernel-collision-replay.spec.ts +50 -29
- package/apps/control-plane/test/kernel.branches.spec.ts +64 -40
- package/apps/control-plane/test/kernel.coverage.spec.ts +85 -49
- package/apps/control-plane/test/kernel.coverage2.spec.ts +109 -65
- package/apps/control-plane/test/kernel.spec.ts +134 -51
- package/apps/control-plane/test/lock-service.spec.ts +92 -68
- package/apps/control-plane/test/mcp-helpers.spec.ts +53 -39
- package/apps/control-plane/test/mcp.spec.ts +231 -115
- package/apps/control-plane/test/merge-service.spec.ts +142 -94
- package/apps/control-plane/test/multi-project.spec.ts +28 -22
- package/apps/control-plane/test/notifier-service.spec.ts +136 -92
- package/apps/control-plane/test/parallel-gates.spec.ts +51 -35
- package/apps/control-plane/test/patch-service.spec.ts +128 -48
- package/apps/control-plane/test/performance-analytics.spec.ts +99 -63
- package/apps/control-plane/test/plan-service.spec.ts +50 -39
- package/apps/control-plane/test/planning-wave-executor.spec.ts +95 -71
- package/apps/control-plane/test/policy-loader-service.spec.ts +41 -19
- package/apps/control-plane/test/pr-monitor.spec.ts +113 -64
- package/apps/control-plane/test/providers.spec.ts +208 -104
- package/apps/control-plane/test/qa-index-service.spec.ts +31 -33
- package/apps/control-plane/test/qa-index.spec.ts +58 -61
- package/apps/control-plane/test/reactions.spec.ts +88 -45
- package/apps/control-plane/test/response.spec.ts +5 -5
- package/apps/control-plane/test/resume-command.spec.ts +121 -80
- package/apps/control-plane/test/run-coordinator.spec.ts +205 -136
- package/apps/control-plane/test/schema-date-time.spec.ts +49 -41
- package/apps/control-plane/test/service-retry-paths.spec.ts +77 -57
- package/apps/control-plane/test/services.spec.ts +147 -129
- package/apps/control-plane/test/session-management.spec.ts +136 -74
- package/apps/control-plane/test/spec-ingestion.spec.ts +23 -21
- package/apps/control-plane/test/spec-input-resolver.spec.ts +11 -10
- package/apps/control-plane/test/supervisor-collaborators.spec.ts +168 -121
- package/apps/control-plane/test/supervisor.calltool.spec.ts +21 -18
- package/apps/control-plane/test/supervisor.spec.ts +67 -43
- package/apps/control-plane/test/supervisor.unit.spec.ts +195 -126
- package/apps/control-plane/test/token-auth-verifier.spec.ts +29 -14
- package/apps/control-plane/test/tool-registry-loader.spec.ts +51 -27
- package/apps/control-plane/test/tool-runtime.spec.ts +63 -46
- package/apps/control-plane/test/worker-decision-loop.spec.ts +143 -122
- package/apps/control-plane/test/workspace-hooks.spec.ts +61 -23
- package/apps/control-plane/tsconfig.build.json +2 -7
- package/apps/control-plane/tsconfig.json +1 -5
- package/apps/control-plane/vitest.config.ts +7 -7
- package/config/agentic/orchestrator/adapters.yaml +3 -0
- package/config/agentic/orchestrator/agents.yaml +14 -0
- package/config/agentic/orchestrator/gates.yaml +28 -0
- package/config/agentic/orchestrator/policy.yaml +22 -0
- package/config/agentic/orchestrator/prompts/builder.system.md +1 -0
- package/config/agentic/orchestrator/prompts/planner.system.md +16 -0
- package/config/agentic/orchestrator/prompts/qa.system.md +1 -0
- package/dist/apps/control-plane/application/adapters/adapter-registry.js +12 -5
- package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -1
- package/dist/apps/control-plane/application/multi-project-loader.js +26 -9
- package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -1
- package/dist/apps/control-plane/application/services/activity-monitor-service.js +7 -7
- package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/collision-queue-service.js +7 -7
- package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/cost-tracking-service.js +6 -8
- package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-deletion-service.js +37 -29
- package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +10 -10
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-state-service.js +11 -11
- package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/gate-interpolation-service.js +3 -1
- package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/gate-service.js +26 -26
- package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/instance-isolation-service.js +1 -1
- package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/issue-tracker-service.js +25 -15
- package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/lock-service.js +32 -32
- package/dist/apps/control-plane/application/services/lock-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/merge-service.js +41 -27
- package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/notifier-service.js +29 -15
- package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/patch-service.js +21 -19
- package/dist/apps/control-plane/application/services/patch-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/performance-analytics-service.js +4 -4
- package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/plan-service.js +33 -33
- package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/policy-loader-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/pr-monitor-service.js +23 -11
- package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/qa-index-service.js +11 -11
- package/dist/apps/control-plane/application/services/qa-index-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/reactions-service.js +13 -9
- package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/reporting-service.js +11 -9
- package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/run-lease-service.js +34 -33
- package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
- package/dist/apps/control-plane/application/tools/tool-metadata.js +2 -2
- package/dist/apps/control-plane/application/tools/tool-router.js.map +1 -1
- package/dist/apps/control-plane/cli/attach-command-handler.js +9 -9
- package/dist/apps/control-plane/cli/cleanup-command-handler.js +11 -9
- package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/cli-argument-parser.js +4 -3
- package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
- package/dist/apps/control-plane/cli/dashboard-command-handler.js +23 -7
- package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/delete-command-handler.js +7 -7
- package/dist/apps/control-plane/cli/env-file.d.ts +4 -0
- package/dist/apps/control-plane/cli/env-file.js +89 -0
- package/dist/apps/control-plane/cli/env-file.js.map +1 -0
- package/dist/apps/control-plane/cli/help-command-handler.js +58 -30
- package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/init-command-handler.js +97 -37
- package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/io.js +2 -2
- package/dist/apps/control-plane/cli/io.js.map +1 -1
- package/dist/apps/control-plane/cli/resume-command-handler.js +9 -9
- package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/retry-command-handler.js +12 -11
- package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/run-command-handler.js +12 -8
- package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/send-command-handler.js +6 -6
- package/dist/apps/control-plane/cli/spec-ingestion-service.js +10 -8
- package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-input-resolver.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
- package/dist/apps/control-plane/cli/status-command-handler.js +8 -8
- package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/tooling.js +1 -1
- package/dist/apps/control-plane/core/collisions.js +11 -8
- package/dist/apps/control-plane/core/collisions.js.map +1 -1
- package/dist/apps/control-plane/core/constants.js +13 -7
- package/dist/apps/control-plane/core/constants.js.map +1 -1
- package/dist/apps/control-plane/core/error-codes.js +1 -1
- package/dist/apps/control-plane/core/fs.js.map +1 -1
- package/dist/apps/control-plane/core/gates.d.ts +2 -2
- package/dist/apps/control-plane/core/gates.js +26 -19
- package/dist/apps/control-plane/core/gates.js.map +1 -1
- package/dist/apps/control-plane/core/git.js +3 -3
- package/dist/apps/control-plane/core/git.js.map +1 -1
- package/dist/apps/control-plane/core/kernel.d.ts +1 -0
- package/dist/apps/control-plane/core/kernel.js +134 -81
- package/dist/apps/control-plane/core/kernel.js.map +1 -1
- package/dist/apps/control-plane/core/patch.js +7 -3
- package/dist/apps/control-plane/core/patch.js.map +1 -1
- package/dist/apps/control-plane/core/path-layout.d.ts +1 -0
- package/dist/apps/control-plane/core/path-layout.js +4 -1
- package/dist/apps/control-plane/core/path-layout.js.map +1 -1
- package/dist/apps/control-plane/core/path-rules.js +3 -1
- package/dist/apps/control-plane/core/path-rules.js.map +1 -1
- package/dist/apps/control-plane/core/qa-index.js +5 -5
- package/dist/apps/control-plane/core/qa-index.js.map +1 -1
- package/dist/apps/control-plane/core/response.js +3 -3
- package/dist/apps/control-plane/core/response.js.map +1 -1
- package/dist/apps/control-plane/core/schemas.js +10 -6
- package/dist/apps/control-plane/core/schemas.js.map +1 -1
- package/dist/apps/control-plane/core/workspace-hooks.js +3 -3
- package/dist/apps/control-plane/index.d.ts +1 -1
- package/dist/apps/control-plane/index.js +1 -1
- package/dist/apps/control-plane/index.js.map +1 -1
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js +40 -23
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js +1 -1
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
- package/dist/apps/control-plane/mcp/mcp-server-adapter.js +6 -7
- package/dist/apps/control-plane/mcp/mcp-server-adapter.js.map +1 -1
- package/dist/apps/control-plane/mcp/operation-ledger.js +5 -5
- package/dist/apps/control-plane/mcp/operation-ledger.js.map +1 -1
- package/dist/apps/control-plane/mcp/protocol-contract.js +2 -2
- package/dist/apps/control-plane/mcp/runtime-factory.js +2 -2
- package/dist/apps/control-plane/mcp/runtime-factory.js.map +1 -1
- package/dist/apps/control-plane/mcp/token-auth-verifier.js +1 -1
- package/dist/apps/control-plane/mcp/token-auth-verifier.js.map +1 -1
- package/dist/apps/control-plane/mcp/token-claims-validator.js +5 -5
- package/dist/apps/control-plane/mcp/token-claims-validator.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-authorizer.js +1 -3
- package/dist/apps/control-plane/mcp/tool-authorizer.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-client.js +2 -2
- package/dist/apps/control-plane/mcp/tool-client.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-contract-validator.js +3 -3
- package/dist/apps/control-plane/mcp/tool-contract-validator.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-registry-loader.js +1 -1
- package/dist/apps/control-plane/mcp/tool-registry-loader.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-runtime.js +17 -17
- package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
- package/dist/apps/control-plane/mcp/tools-markdown-generator.js +6 -1
- package/dist/apps/control-plane/mcp/tools-markdown-generator.js.map +1 -1
- package/dist/apps/control-plane/providers/providers.d.ts +3 -2
- package/dist/apps/control-plane/providers/providers.js +81 -39
- package/dist/apps/control-plane/providers/providers.js.map +1 -1
- package/dist/apps/control-plane/supervisor/build-wave-executor.js +12 -12
- package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js +19 -16
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +1 -1
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js +13 -13
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/run-coordinator.js +37 -20
- package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/runtime.js +25 -21
- package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
- package/dist/apps/control-plane/supervisor/session-orchestrator.js +29 -23
- package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/types.d.ts +3 -3
- package/dist/apps/control-plane/supervisor/types.js.map +1 -1
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js +14 -16
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
- package/eslint.config.mjs +20 -20
- package/example-configurations/README.md +1 -1
- package/example-configurations/java/agents.yaml +3 -3
- package/example-configurations/java/policy.yaml +1 -1
- package/example-configurations/node/agents.yaml +3 -3
- package/example-configurations/node/policy.yaml +1 -1
- package/package.json +10 -5
- package/packages/web-dashboard/next.config.js +2 -2
- package/packages/web-dashboard/src/app/api/actions/route.ts +25 -9
- package/packages/web-dashboard/src/app/api/events/route.ts +20 -6
- package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +88 -37
- package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +8 -5
- package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +27 -9
- package/packages/web-dashboard/src/app/api/features/[id]/route.ts +5 -2
- package/packages/web-dashboard/src/app/api/projects/route.ts +5 -5
- package/packages/web-dashboard/src/app/globals.css +10 -2
- package/packages/web-dashboard/src/app/page.tsx +100 -37
- package/packages/web-dashboard/src/lib/aop-client.ts +68 -37
- package/packages/web-dashboard/src/lib/multi-project-config.ts +28 -7
- package/packages/web-dashboard/src/lib/orchestrator-tools.ts +59 -36
- package/packages/web-dashboard/tsconfig.json +3 -11
- package/scripts/nx-safe.mjs +10 -10
- package/spec-files/completed/agentic_orchestrator_cli_delete_command_spec.md +5 -0
- package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +189 -90
- package/spec-files/completed/agentic_orchestrator_init_policy_ux_simplification_spec.md +49 -16
- package/spec-files/completed/agentic_orchestrator_mcp_formalization_spec.md +24 -1
- package/spec-files/completed/agentic_orchestrator_single_global_orchestrator_spec.md +9 -0
- package/spec-files/completed/agentic_orchestrator_spec.md +171 -75
- package/spec-files/completed/agentic_orchestrator_validator_hardening_spec.md +25 -17
- package/spec-files/outstanding/agentic_orchestrator_artifact_database_publishing_spec.md +40 -5
- package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +23 -12
- package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +16 -4
- package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +42 -2
- package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +209 -130
- package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +56 -3
- package/spec-files/outstanding/agentic_orchestrator_productization_commercial_spec.md +77 -10
- package/spec-files/outstanding/agentic_orchestrator_provider_auth_bootstrap_spec.md +384 -0
- package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +29 -14
- package/spec-files/progress.md +186 -175
- package/tsconfig.json +2 -8
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { GATE_RESULT, STATUS, TOOLS } from '../core/constants.js';
|
|
2
2
|
import type { FeatureStatePayload, SupervisorToolCaller } from './types.js';
|
|
3
3
|
import { NOOP_WORKER_DECISION_RUNNER, type WorkerDecisionRunner } from './worker-decision-loop.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
GateRepairContext,
|
|
6
|
+
ReactionsService,
|
|
7
|
+
} from '../application/services/reactions-service.js';
|
|
5
8
|
|
|
6
9
|
interface GatesRunData {
|
|
7
10
|
overall?: string;
|
|
@@ -28,9 +31,13 @@ export class BuildWaveExecutor {
|
|
|
28
31
|
async run(featureIds: string[], maxParallelGateRuns: number): Promise<void> {
|
|
29
32
|
const batch: string[] = [];
|
|
30
33
|
for (const featureId of featureIds) {
|
|
31
|
-
const state = await this.toolCaller.callTool<FeatureStatePayload>(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
const state = await this.toolCaller.callTool<FeatureStatePayload>(
|
|
35
|
+
'builder',
|
|
36
|
+
TOOLS.FEATURE_STATE_GET,
|
|
37
|
+
{
|
|
38
|
+
feature_id: featureId,
|
|
39
|
+
},
|
|
40
|
+
);
|
|
34
41
|
|
|
35
42
|
if (state.data.front_matter.status === STATUS.BUILDING) {
|
|
36
43
|
batch.push(featureId);
|
|
@@ -40,21 +47,25 @@ export class BuildWaveExecutor {
|
|
|
40
47
|
const selected = batch.slice(0, maxParallelGateRuns);
|
|
41
48
|
for (const featureId of selected) {
|
|
42
49
|
const context = await this.toolCaller.callTool('builder', TOOLS.FEATURE_GET_CONTEXT, {
|
|
43
|
-
feature_id: featureId
|
|
50
|
+
feature_id: featureId,
|
|
44
51
|
});
|
|
45
52
|
await this.workerDecisionRunner.execute({
|
|
46
53
|
role: 'builder',
|
|
47
54
|
featureId,
|
|
48
55
|
contextBundle: context.data,
|
|
49
56
|
instructions:
|
|
50
|
-
'Emit PATCH outputs for code changes, NOTE outputs for progress context, and REQUEST outputs for lock/context needs.'
|
|
57
|
+
'Emit PATCH outputs for code changes, NOTE outputs for progress context, and REQUEST outputs for lock/context needs.',
|
|
51
58
|
});
|
|
52
59
|
}
|
|
53
60
|
|
|
54
61
|
const executing = selected.map(async (featureId) => {
|
|
55
|
-
const stateForRetry = await this.toolCaller.callTool<FeatureStatePayload>(
|
|
56
|
-
|
|
57
|
-
|
|
62
|
+
const stateForRetry = await this.toolCaller.callTool<FeatureStatePayload>(
|
|
63
|
+
'builder',
|
|
64
|
+
TOOLS.FEATURE_STATE_GET,
|
|
65
|
+
{
|
|
66
|
+
feature_id: featureId,
|
|
67
|
+
},
|
|
68
|
+
);
|
|
58
69
|
const initialRetryCount = stateForRetry.data.front_matter.gate_retry_count ?? 0;
|
|
59
70
|
|
|
60
71
|
let gateOverall: string;
|
|
@@ -64,11 +75,15 @@ export class BuildWaveExecutor {
|
|
|
64
75
|
const failureHistory: GateRepairContext['failureHistory'] = [];
|
|
65
76
|
|
|
66
77
|
try {
|
|
67
|
-
const gateResult = await this.toolCaller.callTool<GatesRunData>(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
const gateResult = await this.toolCaller.callTool<GatesRunData>(
|
|
79
|
+
'builder',
|
|
80
|
+
TOOLS.GATES_RUN,
|
|
81
|
+
{
|
|
82
|
+
feature_id: featureId,
|
|
83
|
+
profile: null,
|
|
84
|
+
mode: 'fast',
|
|
85
|
+
},
|
|
86
|
+
);
|
|
72
87
|
gateOverall = gateResult.data.overall ?? GATE_RESULT.PASS;
|
|
73
88
|
gateExitCode = gateOverall === GATE_RESULT.FAIL ? 1 : 0;
|
|
74
89
|
gateEvidencePath = gateResult.data.evidence_path ?? '';
|
|
@@ -87,13 +102,13 @@ export class BuildWaveExecutor {
|
|
|
87
102
|
evidence_summary: gateEvidencePath,
|
|
88
103
|
logs_excerpt: gateLogs.slice(0, 800),
|
|
89
104
|
failed_at: new Date().toISOString(),
|
|
90
|
-
retry_delay_ms: this.reactionsService?.retryDelayMs()
|
|
105
|
+
retry_delay_ms: this.reactionsService?.retryDelayMs(),
|
|
91
106
|
});
|
|
92
107
|
}
|
|
93
108
|
|
|
94
109
|
if (this.reactionsService && gateOverall === GATE_RESULT.FAIL) {
|
|
95
110
|
const context = await this.toolCaller.callTool('builder', TOOLS.FEATURE_GET_CONTEXT, {
|
|
96
|
-
feature_id: featureId
|
|
111
|
+
feature_id: featureId,
|
|
97
112
|
});
|
|
98
113
|
let retryCount = initialRetryCount;
|
|
99
114
|
const retryDelayMs = this.reactionsService.retryDelayMs();
|
|
@@ -109,22 +124,26 @@ export class BuildWaveExecutor {
|
|
|
109
124
|
logs: gateLogs,
|
|
110
125
|
evidenceSummary: gateEvidencePath,
|
|
111
126
|
retryCount,
|
|
112
|
-
failureHistory
|
|
127
|
+
failureHistory,
|
|
113
128
|
};
|
|
114
129
|
const repairPrompt = this.reactionsService.buildRepairPrompt(ctx);
|
|
115
130
|
await this.workerDecisionRunner.execute({
|
|
116
131
|
role: 'builder',
|
|
117
132
|
featureId,
|
|
118
133
|
contextBundle: context.data,
|
|
119
|
-
instructions: repairPrompt
|
|
134
|
+
instructions: repairPrompt,
|
|
120
135
|
});
|
|
121
136
|
|
|
122
137
|
try {
|
|
123
|
-
const retryResult = await this.toolCaller.callTool<GatesRunData>(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
138
|
+
const retryResult = await this.toolCaller.callTool<GatesRunData>(
|
|
139
|
+
'builder',
|
|
140
|
+
TOOLS.GATES_RUN,
|
|
141
|
+
{
|
|
142
|
+
feature_id: featureId,
|
|
143
|
+
profile: null,
|
|
144
|
+
mode: 'fast',
|
|
145
|
+
},
|
|
146
|
+
);
|
|
128
147
|
gateOverall = retryResult.data.overall ?? GATE_RESULT.PASS;
|
|
129
148
|
gateExitCode = gateOverall === GATE_RESULT.FAIL ? 1 : 0;
|
|
130
149
|
gateEvidencePath = retryResult.data.evidence_path ?? gateEvidencePath;
|
|
@@ -147,7 +166,7 @@ export class BuildWaveExecutor {
|
|
|
147
166
|
evidence_summary: gateEvidencePath,
|
|
148
167
|
logs_excerpt: gateLogs.slice(0, 800),
|
|
149
168
|
failed_at: new Date().toISOString(),
|
|
150
|
-
retry_delay_ms: retryDelayMs
|
|
169
|
+
retry_delay_ms: retryDelayMs,
|
|
151
170
|
});
|
|
152
171
|
}
|
|
153
172
|
|
|
@@ -164,7 +183,7 @@ export class BuildWaveExecutor {
|
|
|
164
183
|
logs: gateLogs,
|
|
165
184
|
evidenceSummary: gateEvidencePath,
|
|
166
185
|
retryCount,
|
|
167
|
-
failureHistory
|
|
186
|
+
failureHistory,
|
|
168
187
|
};
|
|
169
188
|
await this.reactionsService.notifyEscalation(featureId, escalateCtx);
|
|
170
189
|
}
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { STATUS, TOOLS } from '../core/constants.js';
|
|
2
|
-
import type {
|
|
3
|
-
FeatureContextPayload,
|
|
4
|
-
InitialPlanGenerator,
|
|
5
|
-
SupervisorToolCaller
|
|
6
|
-
} from './types.js';
|
|
2
|
+
import type { FeatureContextPayload, InitialPlanGenerator, SupervisorToolCaller } from './types.js';
|
|
7
3
|
import { NOOP_WORKER_DECISION_RUNNER, type WorkerDecisionRunner } from './worker-decision-loop.js';
|
|
8
4
|
|
|
9
5
|
type AnyRecord = Record<string, unknown>;
|
|
@@ -78,7 +74,7 @@ function deriveEdgeCaseChecklist(specText: string): string[] {
|
|
|
78
74
|
const checklist = [
|
|
79
75
|
'Edge-case: boundary values and size limits are covered.',
|
|
80
76
|
'Edge-case: negative-path input validation and error handling are covered.',
|
|
81
|
-
'Edge-case: dependency failure and retry behavior are covered.'
|
|
77
|
+
'Edge-case: dependency failure and retry behavior are covered.',
|
|
82
78
|
];
|
|
83
79
|
|
|
84
80
|
const normalizedSpec = specText.toLowerCase();
|
|
@@ -123,9 +119,13 @@ export class PlanningWaveExecutor {
|
|
|
123
119
|
|
|
124
120
|
async run(featureIds: string[]): Promise<void> {
|
|
125
121
|
for (const featureId of featureIds) {
|
|
126
|
-
const context = await this.toolCaller.callTool<FeatureContextPayload>(
|
|
127
|
-
|
|
128
|
-
|
|
122
|
+
const context = await this.toolCaller.callTool<FeatureContextPayload>(
|
|
123
|
+
'planner',
|
|
124
|
+
TOOLS.FEATURE_GET_CONTEXT,
|
|
125
|
+
{
|
|
126
|
+
feature_id: featureId,
|
|
127
|
+
},
|
|
128
|
+
);
|
|
129
129
|
|
|
130
130
|
const state = context.data.state.front_matter;
|
|
131
131
|
if (state.status !== STATUS.PLANNING && state.status !== STATUS.BLOCKED) {
|
|
@@ -138,7 +138,7 @@ export class PlanningWaveExecutor {
|
|
|
138
138
|
featureId,
|
|
139
139
|
contextBundle: asRecord(context.data),
|
|
140
140
|
instructions:
|
|
141
|
-
'Review feature context and emit PLAN_SUBMISSION/REQUEST/NOTE outputs to advance planning deterministically.'
|
|
141
|
+
'Review feature context and emit PLAN_SUBMISSION/REQUEST/NOTE outputs to advance planning deterministically.',
|
|
142
142
|
});
|
|
143
143
|
|
|
144
144
|
if (decision.planSubmission || existingPlan) {
|
|
@@ -148,16 +148,20 @@ export class PlanningWaveExecutor {
|
|
|
148
148
|
const plan = await this.planGenerator.generateInitialPlan(featureId);
|
|
149
149
|
await this.toolCaller.callTool('planner', TOOLS.PLAN_SUBMIT, {
|
|
150
150
|
feature_id: featureId,
|
|
151
|
-
plan_json: plan
|
|
151
|
+
plan_json: plan,
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
async runPostQaReconciliation(featureIds: string[], iteration: number): Promise<void> {
|
|
157
157
|
for (const featureId of featureIds) {
|
|
158
|
-
const context = await this.toolCaller.callTool<FeatureContextPayload>(
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
const context = await this.toolCaller.callTool<FeatureContextPayload>(
|
|
159
|
+
'planner',
|
|
160
|
+
TOOLS.FEATURE_GET_CONTEXT,
|
|
161
|
+
{
|
|
162
|
+
feature_id: featureId,
|
|
163
|
+
},
|
|
164
|
+
);
|
|
161
165
|
|
|
162
166
|
const frontMatter = asRecord(asRecord(context.data.state).front_matter);
|
|
163
167
|
const status = readStatus(frontMatter.status);
|
|
@@ -172,7 +176,7 @@ export class PlanningWaveExecutor {
|
|
|
172
176
|
iteration,
|
|
173
177
|
decision: 'no_update',
|
|
174
178
|
reasons: ['missing_plan'],
|
|
175
|
-
status
|
|
179
|
+
status,
|
|
176
180
|
});
|
|
177
181
|
continue;
|
|
178
182
|
}
|
|
@@ -184,7 +188,7 @@ export class PlanningWaveExecutor {
|
|
|
184
188
|
iteration,
|
|
185
189
|
decision: 'no_update',
|
|
186
190
|
reasons: ['existing_plan_version_invalid'],
|
|
187
|
-
status
|
|
191
|
+
status,
|
|
188
192
|
});
|
|
189
193
|
continue;
|
|
190
194
|
}
|
|
@@ -199,7 +203,7 @@ export class PlanningWaveExecutor {
|
|
|
199
203
|
reasons: decision.reasons,
|
|
200
204
|
qa_summary: decision.qaSummary,
|
|
201
205
|
latest_gate_overall: decision.latestGateOverall,
|
|
202
|
-
edge_case_checklist: decision.edgeCaseChecklist
|
|
206
|
+
edge_case_checklist: decision.edgeCaseChecklist,
|
|
203
207
|
});
|
|
204
208
|
continue;
|
|
205
209
|
}
|
|
@@ -208,7 +212,7 @@ export class PlanningWaveExecutor {
|
|
|
208
212
|
await this.toolCaller.callTool('planner', TOOLS.PLAN_UPDATE, {
|
|
209
213
|
feature_id: featureId,
|
|
210
214
|
expected_plan_version: planVersion,
|
|
211
|
-
plan_json: nextPlan
|
|
215
|
+
plan_json: nextPlan,
|
|
212
216
|
});
|
|
213
217
|
|
|
214
218
|
await this.appendDecisionLog(featureId, {
|
|
@@ -222,7 +226,7 @@ export class PlanningWaveExecutor {
|
|
|
222
226
|
reasons: decision.reasons,
|
|
223
227
|
qa_summary: decision.qaSummary,
|
|
224
228
|
latest_gate_overall: decision.latestGateOverall,
|
|
225
|
-
edge_case_checklist: decision.edgeCaseChecklist
|
|
229
|
+
edge_case_checklist: decision.edgeCaseChecklist,
|
|
226
230
|
});
|
|
227
231
|
}
|
|
228
232
|
}
|
|
@@ -230,7 +234,7 @@ export class PlanningWaveExecutor {
|
|
|
230
234
|
private evaluateReconciliationDecision(
|
|
231
235
|
context: FeatureContextPayload,
|
|
232
236
|
plan: AnyRecord,
|
|
233
|
-
status: string
|
|
237
|
+
status: string,
|
|
234
238
|
): ReconciliationDecision {
|
|
235
239
|
const acceptanceCriteria = asStringArray(plan.acceptance_criteria);
|
|
236
240
|
const riskItems = asStringArray(plan.risk);
|
|
@@ -240,9 +244,10 @@ export class PlanningWaveExecutor {
|
|
|
240
244
|
const pending = readCount(qaSummary, 'pending');
|
|
241
245
|
const failed = readCount(qaSummary, 'failed');
|
|
242
246
|
const running = readCount(qaSummary, 'running');
|
|
243
|
-
const latestGateOverall =
|
|
244
|
-
|
|
245
|
-
|
|
247
|
+
const latestGateOverall =
|
|
248
|
+
typeof asRecord(context.latest_evidence).overall === 'string'
|
|
249
|
+
? String(asRecord(context.latest_evidence).overall)
|
|
250
|
+
: null;
|
|
246
251
|
|
|
247
252
|
const reasons: string[] = [];
|
|
248
253
|
const acceptanceCriteriaAdditions: string[] = [];
|
|
@@ -251,16 +256,17 @@ export class PlanningWaveExecutor {
|
|
|
251
256
|
if (missingEdgeCases.length > 0) {
|
|
252
257
|
reasons.push(`edge_case_checklist_missing:${missingEdgeCases.length}`);
|
|
253
258
|
acceptanceCriteriaAdditions.push(
|
|
254
|
-
'Planner edge-case checklist has been reviewed and incorporated into the execution plan.'
|
|
259
|
+
'Planner edge-case checklist has been reviewed and incorporated into the execution plan.',
|
|
255
260
|
);
|
|
256
261
|
}
|
|
257
262
|
|
|
258
|
-
const hasQaSignals =
|
|
263
|
+
const hasQaSignals =
|
|
264
|
+
status === STATUS.BLOCKED || failed > 0 || pending > 0 || latestGateOverall === 'fail';
|
|
259
265
|
const qaCheckpoint = `Planner reconciliation checkpoint [status=${status};failed=${failed};pending=${pending};latest=${latestGateOverall ?? 'unknown'}]`;
|
|
260
266
|
if (hasQaSignals && !acceptanceCriteria.includes(qaCheckpoint)) {
|
|
261
267
|
reasons.push(`qa_signals_detected:${status}:failed=${failed}:pending=${pending}`);
|
|
262
268
|
acceptanceCriteriaAdditions.push(
|
|
263
|
-
'Reconcile QA/gate findings against plan scope and apply corrective updates before merge.'
|
|
269
|
+
'Reconcile QA/gate findings against plan scope and apply corrective updates before merge.',
|
|
264
270
|
);
|
|
265
271
|
acceptanceCriteriaAdditions.push(qaCheckpoint);
|
|
266
272
|
}
|
|
@@ -274,9 +280,9 @@ export class PlanningWaveExecutor {
|
|
|
274
280
|
qaSummary: {
|
|
275
281
|
pending,
|
|
276
282
|
failed,
|
|
277
|
-
running
|
|
283
|
+
running,
|
|
278
284
|
},
|
|
279
|
-
latestGateOverall
|
|
285
|
+
latestGateOverall,
|
|
280
286
|
};
|
|
281
287
|
}
|
|
282
288
|
|
|
@@ -288,13 +294,17 @@ export class PlanningWaveExecutor {
|
|
|
288
294
|
qaSummary: {
|
|
289
295
|
pending,
|
|
290
296
|
failed,
|
|
291
|
-
running
|
|
297
|
+
running,
|
|
292
298
|
},
|
|
293
|
-
latestGateOverall
|
|
299
|
+
latestGateOverall,
|
|
294
300
|
};
|
|
295
301
|
}
|
|
296
302
|
|
|
297
|
-
private buildUpdatedPlan(
|
|
303
|
+
private buildUpdatedPlan(
|
|
304
|
+
plan: AnyRecord,
|
|
305
|
+
planVersion: number,
|
|
306
|
+
decision: ReconciliationDecision,
|
|
307
|
+
): AnyRecord {
|
|
298
308
|
const nextPlan = structuredClone(plan);
|
|
299
309
|
const acceptanceCriteria = asStringArray(nextPlan.acceptance_criteria);
|
|
300
310
|
const riskItems = asStringArray(nextPlan.risk);
|
|
@@ -302,7 +312,10 @@ export class PlanningWaveExecutor {
|
|
|
302
312
|
nextPlan.plan_version = planVersion + 1;
|
|
303
313
|
nextPlan.revision_of = planVersion;
|
|
304
314
|
nextPlan.revision_reason = decision.reasons.join('; ');
|
|
305
|
-
nextPlan.acceptance_criteria = normalizeList([
|
|
315
|
+
nextPlan.acceptance_criteria = normalizeList([
|
|
316
|
+
...acceptanceCriteria,
|
|
317
|
+
...decision.acceptanceCriteriaAdditions,
|
|
318
|
+
]);
|
|
306
319
|
nextPlan.risk = normalizeList([...riskItems, ...decision.edgeCaseChecklist]);
|
|
307
320
|
return nextPlan;
|
|
308
321
|
}
|
|
@@ -310,7 +323,7 @@ export class PlanningWaveExecutor {
|
|
|
310
323
|
private async appendDecisionLog(featureId: string, note: AnyRecord): Promise<void> {
|
|
311
324
|
await this.toolCaller.callTool('orchestrator', TOOLS.FEATURE_LOG_APPEND, {
|
|
312
325
|
feature_id: featureId,
|
|
313
|
-
note: JSON.stringify(note)
|
|
326
|
+
note: JSON.stringify(note),
|
|
314
327
|
});
|
|
315
328
|
}
|
|
316
329
|
}
|
|
@@ -6,11 +6,14 @@ import type {
|
|
|
6
6
|
FeatureOrchestrationPort,
|
|
7
7
|
FeatureStatePayload,
|
|
8
8
|
SupervisorRuntimeState,
|
|
9
|
-
SupervisorToolCaller
|
|
9
|
+
SupervisorToolCaller,
|
|
10
10
|
} from './types.js';
|
|
11
11
|
import { UNASSIGNED_SESSION_ID } from './types.js';
|
|
12
12
|
import { NOOP_WORKER_DECISION_RUNNER, type WorkerDecisionRunner } from './worker-decision-loop.js';
|
|
13
|
-
import type {
|
|
13
|
+
import type {
|
|
14
|
+
GateRepairContext,
|
|
15
|
+
ReactionsService,
|
|
16
|
+
} from '../application/services/reactions-service.js';
|
|
14
17
|
|
|
15
18
|
interface GatesRunData {
|
|
16
19
|
overall?: string;
|
|
@@ -52,9 +55,13 @@ export class QaWaveExecutor {
|
|
|
52
55
|
async run(featureIds: string[], maxParallelGateRuns: number): Promise<void> {
|
|
53
56
|
const batch: string[] = [];
|
|
54
57
|
for (const featureId of featureIds) {
|
|
55
|
-
const state = await this.toolCaller.callTool<FeatureStatePayload>(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
const state = await this.toolCaller.callTool<FeatureStatePayload>(
|
|
59
|
+
'qa',
|
|
60
|
+
TOOLS.FEATURE_STATE_GET,
|
|
61
|
+
{
|
|
62
|
+
feature_id: featureId,
|
|
63
|
+
},
|
|
64
|
+
);
|
|
58
65
|
|
|
59
66
|
if (state.data.front_matter.status === STATUS.QA) {
|
|
60
67
|
batch.push(featureId);
|
|
@@ -63,19 +70,23 @@ export class QaWaveExecutor {
|
|
|
63
70
|
|
|
64
71
|
for (const featureId of batch.slice(0, maxParallelGateRuns)) {
|
|
65
72
|
const context = await this.toolCaller.callTool('qa', TOOLS.FEATURE_GET_CONTEXT, {
|
|
66
|
-
feature_id: featureId
|
|
73
|
+
feature_id: featureId,
|
|
67
74
|
});
|
|
68
75
|
await this.workerDecisionRunner.execute({
|
|
69
76
|
role: 'qa',
|
|
70
77
|
featureId,
|
|
71
78
|
contextBundle: context.data,
|
|
72
79
|
instructions:
|
|
73
|
-
'Emit PATCH outputs for deterministic QA remediations, NOTE outputs for findings, and REQUEST outputs for lock/context needs.'
|
|
80
|
+
'Emit PATCH outputs for deterministic QA remediations, NOTE outputs for findings, and REQUEST outputs for lock/context needs.',
|
|
74
81
|
});
|
|
75
82
|
|
|
76
|
-
const stateForRetry = await this.toolCaller.callTool<FeatureStatePayload>(
|
|
77
|
-
|
|
78
|
-
|
|
83
|
+
const stateForRetry = await this.toolCaller.callTool<FeatureStatePayload>(
|
|
84
|
+
'qa',
|
|
85
|
+
TOOLS.FEATURE_STATE_GET,
|
|
86
|
+
{
|
|
87
|
+
feature_id: featureId,
|
|
88
|
+
},
|
|
89
|
+
);
|
|
79
90
|
const initialRetryCount = stateForRetry.data.front_matter.gate_retry_count ?? 0;
|
|
80
91
|
|
|
81
92
|
let gateOverall: string;
|
|
@@ -88,7 +99,7 @@ export class QaWaveExecutor {
|
|
|
88
99
|
const gateResult = await this.toolCaller.callTool<GatesRunData>('qa', TOOLS.GATES_RUN, {
|
|
89
100
|
feature_id: featureId,
|
|
90
101
|
profile: null,
|
|
91
|
-
mode: 'full'
|
|
102
|
+
mode: 'full',
|
|
92
103
|
});
|
|
93
104
|
gateOverall = gateResult.data.overall ?? GATE_RESULT.PASS;
|
|
94
105
|
gateExitCode = gateOverall === GATE_RESULT.FAIL ? 1 : 0;
|
|
@@ -108,7 +119,7 @@ export class QaWaveExecutor {
|
|
|
108
119
|
evidence_summary: gateEvidencePath,
|
|
109
120
|
logs_excerpt: gateLogs.slice(0, 800),
|
|
110
121
|
failed_at: new Date().toISOString(),
|
|
111
|
-
retry_delay_ms: this.reactionsService?.retryDelayMs()
|
|
122
|
+
retry_delay_ms: this.reactionsService?.retryDelayMs(),
|
|
112
123
|
});
|
|
113
124
|
}
|
|
114
125
|
|
|
@@ -127,22 +138,26 @@ export class QaWaveExecutor {
|
|
|
127
138
|
logs: gateLogs,
|
|
128
139
|
evidenceSummary: gateEvidencePath,
|
|
129
140
|
retryCount,
|
|
130
|
-
failureHistory
|
|
141
|
+
failureHistory,
|
|
131
142
|
};
|
|
132
143
|
const repairPrompt = this.reactionsService.buildRepairPrompt(ctx);
|
|
133
144
|
await this.workerDecisionRunner.execute({
|
|
134
145
|
role: 'qa',
|
|
135
146
|
featureId,
|
|
136
147
|
contextBundle: context.data,
|
|
137
|
-
instructions: repairPrompt
|
|
148
|
+
instructions: repairPrompt,
|
|
138
149
|
});
|
|
139
150
|
|
|
140
151
|
try {
|
|
141
|
-
const retryResult = await this.toolCaller.callTool<GatesRunData>(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
152
|
+
const retryResult = await this.toolCaller.callTool<GatesRunData>(
|
|
153
|
+
'qa',
|
|
154
|
+
TOOLS.GATES_RUN,
|
|
155
|
+
{
|
|
156
|
+
feature_id: featureId,
|
|
157
|
+
profile: null,
|
|
158
|
+
mode: 'full',
|
|
159
|
+
},
|
|
160
|
+
);
|
|
146
161
|
gateOverall = retryResult.data.overall ?? GATE_RESULT.PASS;
|
|
147
162
|
gateExitCode = gateOverall === GATE_RESULT.FAIL ? 1 : 0;
|
|
148
163
|
gateEvidencePath = retryResult.data.evidence_path ?? gateEvidencePath;
|
|
@@ -165,7 +180,7 @@ export class QaWaveExecutor {
|
|
|
165
180
|
evidence_summary: gateEvidencePath,
|
|
166
181
|
logs_excerpt: gateLogs.slice(0, 800),
|
|
167
182
|
failed_at: new Date().toISOString(),
|
|
168
|
-
retry_delay_ms: retryDelayMs
|
|
183
|
+
retry_delay_ms: retryDelayMs,
|
|
169
184
|
});
|
|
170
185
|
}
|
|
171
186
|
|
|
@@ -182,7 +197,7 @@ export class QaWaveExecutor {
|
|
|
182
197
|
logs: gateLogs,
|
|
183
198
|
evidenceSummary: gateEvidencePath,
|
|
184
199
|
retryCount,
|
|
185
|
-
failureHistory
|
|
200
|
+
failureHistory,
|
|
186
201
|
};
|
|
187
202
|
await this.reactionsService.notifyEscalation(featureId, escalateCtx);
|
|
188
203
|
}
|
|
@@ -205,12 +220,12 @@ export class QaWaveExecutor {
|
|
|
205
220
|
feature_id: featureId,
|
|
206
221
|
planner_session_id: sessions?.planner ?? UNASSIGNED_SESSION_ID,
|
|
207
222
|
builder_session_id: sessions?.builder ?? UNASSIGNED_SESSION_ID,
|
|
208
|
-
qa_session_id: newQa.session_id
|
|
223
|
+
qa_session_id: newQa.session_id,
|
|
209
224
|
});
|
|
210
225
|
|
|
211
226
|
await this.featureClusterPatcher.patchFeatureCluster(featureId, {
|
|
212
227
|
orchestrator_session_id: this.state.orchestratorSessionId ?? 'unknown',
|
|
213
|
-
qa_session_id: newQa.session_id
|
|
228
|
+
qa_session_id: newQa.session_id,
|
|
214
229
|
});
|
|
215
230
|
}
|
|
216
231
|
}
|