agentic-orchestrator 0.1.28 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +46 -1
- package/.cortexrc +28 -0
- package/.github/agents/copilot-instructions.md +29 -0
- package/.github/copilot-instructions.md +93 -0
- package/.vscode/settings.json +13 -0
- package/.vscode/tms.code-snippets +223 -0
- package/AGENTS.md +72 -1
- package/Agentic-Orchestrator.iml +12 -11
- package/CLAUDE.md +72 -1
- package/CONSTITUTION.md +504 -0
- package/FUTURE-ENHANCEMENTS.md +85 -0
- package/NEXT-TASKS.md +25 -0
- package/PROMPTS.md +161 -0
- package/README.md +126 -29
- package/agentic/orchestrator/agents.yaml +4 -3
- package/agentic/orchestrator/defaults/policy.defaults.yaml +39 -3
- package/agentic/orchestrator/gates.yaml +15 -3
- package/agentic/orchestrator/policy.yaml +47 -3
- package/agentic/orchestrator/prompts/builder.system.md +69 -20
- package/agentic/orchestrator/prompts/planner-intake.system.md +149 -0
- package/agentic/orchestrator/prompts/planner.system.md +113 -40
- package/agentic/orchestrator/prompts/qa.system.md +73 -18
- package/agentic/orchestrator/prompts/reconciler.system.md +119 -0
- package/agentic/orchestrator/schemas/agents.schema.json +89 -1
- package/agentic/orchestrator/schemas/execution-control.schema.json +242 -0
- package/agentic/orchestrator/schemas/index.schema.json +234 -0
- package/agentic/orchestrator/schemas/intake.review.schema.json +82 -0
- package/agentic/orchestrator/schemas/organizer-ordering-artifact.schema.json +75 -0
- package/agentic/orchestrator/schemas/plan.schema.json +44 -0
- package/agentic/orchestrator/schemas/policy.schema.json +238 -9
- package/agentic/orchestrator/schemas/policy.user.schema.json +129 -1
- package/agentic/orchestrator/schemas/spec.manifest.bootstrap.schema.json +101 -0
- package/agentic/orchestrator/schemas/spec.manifest.verified.schema.json +80 -0
- package/agentic/orchestrator/schemas/state.schema.json +298 -3
- package/agentic/orchestrator/tools/catalog.json +145 -15
- package/agentic/orchestrator/tools/schemas/input/doctor.run.input.schema.json +18 -0
- package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +4 -0
- package/agentic/orchestrator/tools/schemas/input/evidence.verify_chain.input.schema.json +13 -0
- package/agentic/orchestrator/tools/schemas/input/feature.intake_submit.input.schema.json +11 -0
- package/agentic/orchestrator/tools/schemas/input/feature.question_answer.input.schema.json +15 -0
- package/agentic/orchestrator/tools/schemas/input/feature.question_create.input.schema.json +21 -0
- package/agentic/orchestrator/tools/schemas/input/feature.question_list.input.schema.json +13 -0
- package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +5 -0
- package/agentic/orchestrator/tools/schemas/input/feature.send_message.input.schema.json +1 -1
- package/agentic/orchestrator/tools/schemas/input/replay.timeline_get.input.schema.json +32 -0
- package/agentic/orchestrator/tools/schemas/input/repo.conflict_abort.input.schema.json +16 -0
- package/agentic/orchestrator/tools/schemas/input/repo.conflict_files.input.schema.json +16 -0
- package/agentic/orchestrator/tools/schemas/input/repo.reconcile_mainline.input.schema.json +37 -0
- package/agentic/orchestrator/tools/schemas/input/repo.resolve_conflict.input.schema.json +40 -0
- package/agentic/orchestrator/tools/schemas/input/runtime.execution_request_list.input.schema.json +7 -0
- package/agentic/orchestrator/tools/schemas/input/runtime.execution_request_submit.input.schema.json +25 -0
- package/agentic/orchestrator/tools/schemas/output/doctor.run.output.schema.json +34 -0
- package/agentic/orchestrator/tools/schemas/output/evidence.verify_chain.output.schema.json +23 -0
- package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +62 -2
- package/agentic/orchestrator/tools/schemas/output/feature.intake_submit.output.schema.json +24 -0
- package/agentic/orchestrator/tools/schemas/output/feature.question_answer.output.schema.json +21 -0
- package/agentic/orchestrator/tools/schemas/output/feature.question_create.output.schema.json +12 -0
- package/agentic/orchestrator/tools/schemas/output/feature.question_list.output.schema.json +14 -0
- package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +31 -0
- package/agentic/orchestrator/tools/schemas/output/feature.send_message.output.schema.json +8 -18
- package/agentic/orchestrator/tools/schemas/output/replay.timeline_get.output.schema.json +64 -0
- package/agentic/orchestrator/tools/schemas/output/repo.conflict_abort.output.schema.json +16 -0
- package/agentic/orchestrator/tools/schemas/output/repo.conflict_files.output.schema.json +22 -0
- package/agentic/orchestrator/tools/schemas/output/repo.reconcile_mainline.output.schema.json +61 -0
- package/agentic/orchestrator/tools/schemas/output/repo.resolve_conflict.output.schema.json +19 -0
- package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +26 -0
- package/agentic/orchestrator/tools/schemas/output/runtime.execution_request_list.output.schema.json +17 -0
- package/agentic/orchestrator/tools/schemas/output/runtime.execution_request_submit.output.schema.json +24 -0
- package/agentic/orchestrator/tools.md +13 -0
- package/apps/control-plane/scripts/validate-mcp-contracts.ts +1 -1
- package/apps/control-plane/src/application/kernel-tool-wiring.ts +140 -2
- package/apps/control-plane/src/application/services/activity-monitor-service.ts +44 -1
- package/apps/control-plane/src/application/services/bootstrap-manifest-generator-service.ts +251 -0
- package/apps/control-plane/src/application/services/checkpoint-service.ts +87 -27
- package/apps/control-plane/src/application/services/collision-override-service.ts +906 -0
- package/apps/control-plane/src/application/services/collision-queue-service.ts +129 -38
- package/apps/control-plane/src/application/services/cost-tracking-service.ts +94 -0
- package/apps/control-plane/src/application/services/execution-control-service.ts +599 -0
- package/apps/control-plane/src/application/services/feature-deletion-service.ts +37 -1
- package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +182 -4
- package/apps/control-plane/src/application/services/feature-send-message-service.ts +17 -8
- package/apps/control-plane/src/application/services/feature-state-service.ts +191 -6
- package/apps/control-plane/src/application/services/gate-service.ts +121 -2
- package/apps/control-plane/src/application/services/git-reconciliation-service.ts +1591 -0
- package/apps/control-plane/src/application/services/intake-service.ts +1468 -0
- package/apps/control-plane/src/application/services/merge-service.ts +308 -17
- package/apps/control-plane/src/application/services/notifier-service.ts +3 -1
- package/apps/control-plane/src/application/services/performance-analytics-service.ts +75 -0
- package/apps/control-plane/src/application/services/plan-service.ts +336 -20
- package/apps/control-plane/src/application/services/question-service.ts +693 -0
- package/apps/control-plane/src/application/services/reactions-service.ts +73 -17
- package/apps/control-plane/src/application/services/replay-timeline-service.ts +295 -0
- package/apps/control-plane/src/application/services/reporting-service.ts +194 -10
- package/apps/control-plane/src/application/services/run-lease-service.ts +121 -5
- package/apps/control-plane/src/application/services/worktree-watchdog-service.ts +95 -8
- package/apps/control-plane/src/application/tools/tool-metadata.ts +7 -0
- package/apps/control-plane/src/application/usage-types.ts +138 -0
- package/apps/control-plane/src/cli/add-command-handler.ts +162 -0
- package/apps/control-plane/src/cli/answer-command-handler.ts +113 -0
- package/apps/control-plane/src/cli/attach-command-handler.ts +12 -3
- package/apps/control-plane/src/cli/cli-argument-parser.ts +133 -11
- package/apps/control-plane/src/cli/collision-command-handler.ts +113 -0
- package/apps/control-plane/src/cli/command-catalog.ts +479 -0
- package/apps/control-plane/src/cli/complete-command-handler.ts +23 -0
- package/apps/control-plane/src/cli/completion-command-handler.ts +25 -0
- package/apps/control-plane/src/cli/completion-resolver.ts +319 -0
- package/apps/control-plane/src/cli/completion-shell-renderer.ts +58 -0
- package/apps/control-plane/src/cli/dashboard-command-handler.ts +110 -1
- package/apps/control-plane/src/cli/dashboard-runtime-runner.ts +1036 -0
- package/apps/control-plane/src/cli/dashboard-runtime.ts +31 -0
- package/apps/control-plane/src/cli/help-command-handler.ts +17 -185
- package/apps/control-plane/src/cli/init-command-handler.ts +51 -6
- package/apps/control-plane/src/cli/merge-command-handler.ts +200 -0
- package/apps/control-plane/src/cli/questions-command-handler.ts +70 -0
- package/apps/control-plane/src/cli/replay-command-handler.ts +98 -0
- package/apps/control-plane/src/cli/resume-command-handler.ts +231 -16
- package/apps/control-plane/src/cli/retry-command-handler.ts +229 -17
- package/apps/control-plane/src/cli/retry-resume-decision.ts +75 -0
- package/apps/control-plane/src/cli/rollback-command-handler.ts +4 -2
- package/apps/control-plane/src/cli/run-command-handler.ts +35 -1
- package/apps/control-plane/src/cli/spec-ingestion-service.ts +45 -55
- package/apps/control-plane/src/cli/spec-preparation.ts +114 -0
- package/apps/control-plane/src/cli/spec-utils.ts +90 -11
- package/apps/control-plane/src/cli/status-command-handler.ts +122 -0
- package/apps/control-plane/src/cli/types.ts +41 -3
- package/apps/control-plane/src/core/collisions.ts +150 -31
- package/apps/control-plane/src/core/constants.ts +18 -1
- package/apps/control-plane/src/core/error-codes.ts +39 -0
- package/apps/control-plane/src/core/execution-control.ts +56 -0
- package/apps/control-plane/src/core/feature-resume-phase.ts +118 -0
- package/apps/control-plane/src/core/gate-freshness.ts +359 -0
- package/apps/control-plane/src/core/gate-log-extractor.ts +97 -0
- package/apps/control-plane/src/core/gates.ts +90 -1
- package/apps/control-plane/src/core/intake-artifacts.ts +295 -0
- package/apps/control-plane/src/core/kernel-types.ts +11 -0
- package/apps/control-plane/src/core/kernel.ts +604 -16
- package/apps/control-plane/src/core/mainline-conflict.ts +22 -0
- package/apps/control-plane/src/core/merge-repair.ts +149 -0
- package/apps/control-plane/src/core/path-layout.ts +46 -2
- package/apps/control-plane/src/core/path-rules.ts +11 -3
- package/apps/control-plane/src/core/plan-submit-recovery.ts +130 -0
- package/apps/control-plane/src/core/questions.ts +49 -0
- package/apps/control-plane/src/core/runtime-sessions.ts +4 -0
- package/apps/control-plane/src/core/schemas.ts +40 -1
- package/apps/control-plane/src/core/tool-caller.ts +25 -1
- package/apps/control-plane/src/core/utils/index-normalizer.ts +25 -4
- package/apps/control-plane/src/core/worktree-diff.ts +66 -0
- package/apps/control-plane/src/index.ts +29 -1
- package/apps/control-plane/src/interfaces/cli/bootstrap.ts +300 -6
- package/apps/control-plane/src/mcp/kernel-tool-executor.ts +17 -0
- package/apps/control-plane/src/mcp/tool-runtime.ts +63 -4
- package/apps/control-plane/src/providers/api-worker-provider.ts +62 -15
- package/apps/control-plane/src/providers/cli-worker-provider.ts +1037 -61
- package/apps/control-plane/src/providers/output-parsers/generic-output-parser.ts +99 -1
- package/apps/control-plane/src/providers/output-parsers/types.ts +2 -0
- package/apps/control-plane/src/providers/provider-defaults.ts +116 -7
- package/apps/control-plane/src/providers/providers.ts +225 -21
- package/apps/control-plane/src/providers/worker-provider-factory.ts +26 -2
- package/apps/control-plane/src/supervisor/artifact-stager.ts +52 -0
- package/apps/control-plane/src/supervisor/build-wave-executor.ts +477 -166
- package/apps/control-plane/src/supervisor/execution-enrollment-service.ts +408 -0
- package/apps/control-plane/src/supervisor/organizer-enrollment-scheduler.ts +117 -0
- package/apps/control-plane/src/supervisor/organizer-sidecar-service.ts +394 -0
- package/apps/control-plane/src/supervisor/plan-conformance-scorer.ts +2 -5
- package/apps/control-plane/src/supervisor/planner-phase.ts +85 -0
- package/apps/control-plane/src/supervisor/planning-wave-executor.ts +993 -64
- package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +20 -1
- package/apps/control-plane/src/supervisor/qa-wave-executor.ts +384 -177
- package/apps/control-plane/src/supervisor/run-coordinator.ts +723 -20
- package/apps/control-plane/src/supervisor/runtime.ts +485 -9
- package/apps/control-plane/src/supervisor/session-orchestrator.ts +220 -1
- package/apps/control-plane/src/supervisor/types.ts +152 -1
- package/apps/control-plane/src/supervisor/worker-decision-loop.ts +1030 -92
- package/apps/control-plane/test/activity-monitor.spec.ts +76 -0
- package/apps/control-plane/test/add-command-handler.spec.ts +189 -0
- package/apps/control-plane/test/application/services/feature-state-service.spec.ts +208 -0
- package/apps/control-plane/test/artifact-stager.spec.ts +93 -0
- package/apps/control-plane/test/batch-operations.spec.ts +58 -0
- package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +50 -2
- package/apps/control-plane/test/bootstrap-manifest-generator-service.spec.ts +99 -0
- package/apps/control-plane/test/bootstrap.spec.ts +177 -4
- package/apps/control-plane/test/checkpoint-service.spec.ts +977 -29
- package/apps/control-plane/test/cli-argument-parser.spec.ts +119 -0
- package/apps/control-plane/test/cli-helpers.spec.ts +1202 -12
- package/apps/control-plane/test/cli.unit.spec.ts +797 -16
- package/apps/control-plane/test/collision-command-handler.spec.ts +182 -0
- package/apps/control-plane/test/collision-override-service.spec.ts +878 -0
- package/apps/control-plane/test/collision-queue.spec.ts +430 -2
- package/apps/control-plane/test/collisions.spec.ts +209 -1
- package/apps/control-plane/test/core-utils.spec.ts +61 -0
- package/apps/control-plane/test/cost-tracking.spec.ts +224 -0
- package/apps/control-plane/test/dashboard-api.integration.spec.ts +185 -5
- package/apps/control-plane/test/dashboard-client.spec.ts +948 -0
- package/apps/control-plane/test/dashboard-command.spec.ts +138 -6
- package/apps/control-plane/test/dashboard-runtime-runner.spec.ts +1550 -0
- package/apps/control-plane/test/dashboard-runtime.spec.ts +138 -0
- package/apps/control-plane/test/dashboard-ui-utils.spec.ts +56 -12
- package/apps/control-plane/test/dependency-scheduler.spec.ts +7 -1
- package/apps/control-plane/test/env-file.spec.ts +76 -0
- package/apps/control-plane/test/execution-control-service.spec.ts +535 -0
- package/apps/control-plane/test/execution-enrollment-service.spec.ts +648 -0
- package/apps/control-plane/test/feature-lifecycle.spec.ts +126 -0
- package/apps/control-plane/test/feature-resume-phase.spec.ts +164 -0
- package/apps/control-plane/test/feature-send-message-service.spec.ts +161 -0
- package/apps/control-plane/test/feature-state-service.spec.ts +295 -0
- package/apps/control-plane/test/fs.spec.ts +80 -0
- package/apps/control-plane/test/gate-freshness.spec.ts +590 -0
- package/apps/control-plane/test/gate-log-extractor.spec.ts +170 -0
- package/apps/control-plane/test/gates.spec.ts +108 -0
- package/apps/control-plane/test/git-reconciliation-service.spec.ts +2307 -0
- package/apps/control-plane/test/helpers.ts +65 -0
- package/apps/control-plane/test/incremental-gates.spec.ts +271 -0
- package/apps/control-plane/test/index-normalizer.spec.ts +98 -0
- package/apps/control-plane/test/init-wizard.spec.ts +17 -0
- package/apps/control-plane/test/intake-artifacts.spec.ts +203 -0
- package/apps/control-plane/test/intake-service.spec.ts +3176 -0
- package/apps/control-plane/test/kernel-collision-replay.spec.ts +3 -2
- package/apps/control-plane/test/kernel-tool-executor.spec.ts +77 -0
- package/apps/control-plane/test/kernel-tool-wiring.spec.ts +279 -0
- package/apps/control-plane/test/kernel.branches.spec.ts +15 -2
- package/apps/control-plane/test/kernel.coverage.spec.ts +7 -3
- package/apps/control-plane/test/kernel.coverage2.spec.ts +731 -2
- package/apps/control-plane/test/kernel.spec.ts +464 -2
- package/apps/control-plane/test/mainline-conflict.spec.ts +66 -0
- package/apps/control-plane/test/mcp-helpers.spec.ts +79 -0
- package/apps/control-plane/test/mcp.spec.ts +177 -13
- package/apps/control-plane/test/merge-command-handler.spec.ts +531 -0
- package/apps/control-plane/test/merge-service.spec.ts +570 -4
- package/apps/control-plane/test/notifier-service.spec.ts +26 -0
- package/apps/control-plane/test/organizer-enrollment-scheduler.spec.ts +340 -0
- package/apps/control-plane/test/organizer-ordering-artifact.spec.ts +95 -0
- package/apps/control-plane/test/organizer-sidecar-service.spec.ts +468 -0
- package/apps/control-plane/test/output-loop-detector.spec.ts +6 -0
- package/apps/control-plane/test/path-layout.spec.ts +70 -0
- package/apps/control-plane/test/performance-analytics.spec.ts +124 -0
- package/apps/control-plane/test/plan-conformance-scorer.spec.ts +53 -0
- package/apps/control-plane/test/plan-service.spec.ts +686 -4
- package/apps/control-plane/test/planning-wave-executor.spec.ts +3272 -86
- package/apps/control-plane/test/policy-loader-service.spec.ts +5 -0
- package/apps/control-plane/test/prompt-overlay.spec.ts +65 -0
- package/apps/control-plane/test/provider-command-runner-epipe.spec.ts +64 -0
- package/apps/control-plane/test/providers/api-worker-provider.spec.ts +129 -0
- package/apps/control-plane/test/providers/cli-worker-provider.spec.ts +148 -0
- package/apps/control-plane/test/providers/usage-types.spec.ts +98 -0
- package/apps/control-plane/test/providers.spec.ts +293 -16
- package/apps/control-plane/test/question-command-handlers.spec.ts +156 -0
- package/apps/control-plane/test/question-service.spec.ts +1119 -0
- package/apps/control-plane/test/reactions.spec.ts +114 -0
- package/apps/control-plane/test/replay-command-handler.spec.ts +144 -0
- package/apps/control-plane/test/replay-timeline-service.spec.ts +459 -0
- package/apps/control-plane/test/response.spec.ts +31 -0
- package/apps/control-plane/test/resume-command.spec.ts +757 -9
- package/apps/control-plane/test/retry-resume-decision.spec.ts +133 -0
- package/apps/control-plane/test/rollback-command-handler.spec.ts +334 -0
- package/apps/control-plane/test/rollback-command.spec.ts +120 -0
- package/apps/control-plane/test/run-coordinator.spec.ts +3062 -404
- package/apps/control-plane/test/schemas/state.schema.spec.ts +71 -0
- package/apps/control-plane/test/service-retry-paths.spec.ts +112 -0
- package/apps/control-plane/test/services.spec.ts +472 -2
- package/apps/control-plane/test/session-management.spec.ts +346 -1
- package/apps/control-plane/test/spec-ingestion.spec.ts +102 -28
- package/apps/control-plane/test/spec-preparation.spec.ts +182 -0
- package/apps/control-plane/test/supervisor-collaborators.spec.ts +191 -3
- package/apps/control-plane/test/supervisor.calltool.spec.ts +198 -0
- package/apps/control-plane/test/supervisor.spec.ts +95 -16
- package/apps/control-plane/test/supervisor.unit.spec.ts +385 -18
- package/apps/control-plane/test/tool-runtime.spec.ts +122 -0
- package/apps/control-plane/test/worker-decision-loop.spec.ts +3479 -476
- package/apps/control-plane/test/worker-execution-policy.spec.ts +1416 -6
- package/apps/control-plane/test/worker-provider-adapters.spec.ts +1894 -37
- package/apps/control-plane/test/worker-provider-factory.spec.ts +81 -0
- package/apps/control-plane/test/worktree-watchdog-service.spec.ts +125 -0
- package/apps/control-plane/vitest.config.ts +5 -0
- package/config/agentic/orchestrator/agents.yaml +22 -1
- package/config/agentic/orchestrator/gates.yaml +24 -7
- package/config/agentic/orchestrator/policy.yaml +23 -1
- package/config/agentic/orchestrator/prompts/builder.system.md +69 -20
- package/config/agentic/orchestrator/prompts/organizer.system.md +85 -0
- package/config/agentic/orchestrator/prompts/overrides/builder.claude.md +28 -0
- package/config/agentic/orchestrator/prompts/overrides/builder.codex.md +28 -0
- package/config/agentic/orchestrator/prompts/overrides/planner.claude.md +20 -0
- package/config/agentic/orchestrator/prompts/overrides/planner.codex.md +20 -0
- package/config/agentic/orchestrator/prompts/planner-intake.system.md +149 -0
- package/config/agentic/orchestrator/prompts/planner.system.md +113 -40
- package/config/agentic/orchestrator/prompts/qa.system.md +75 -18
- package/config/agentic/orchestrator/prompts/reconciler.system.md +119 -0
- package/dist/apps/control-plane/application/kernel-tool-wiring.d.ts +26 -2
- package/dist/apps/control-plane/application/kernel-tool-wiring.js +40 -2
- package/dist/apps/control-plane/application/kernel-tool-wiring.js.map +1 -1
- package/dist/apps/control-plane/application/services/activity-monitor-service.js +37 -1
- package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/bootstrap-manifest-generator-service.d.ts +4 -0
- package/dist/apps/control-plane/application/services/bootstrap-manifest-generator-service.js +188 -0
- package/dist/apps/control-plane/application/services/bootstrap-manifest-generator-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/checkpoint-service.d.ts +5 -0
- package/dist/apps/control-plane/application/services/checkpoint-service.js +69 -24
- package/dist/apps/control-plane/application/services/checkpoint-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/collision-override-service.d.ts +139 -0
- package/dist/apps/control-plane/application/services/collision-override-service.js +568 -0
- package/dist/apps/control-plane/application/services/collision-override-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/collision-queue-service.d.ts +15 -0
- package/dist/apps/control-plane/application/services/collision-queue-service.js +92 -33
- package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/cost-tracking-service.d.ts +11 -0
- package/dist/apps/control-plane/application/services/cost-tracking-service.js +75 -0
- package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/execution-control-service.d.ts +75 -0
- package/dist/apps/control-plane/application/services/execution-control-service.js +421 -0
- package/dist/apps/control-plane/application/services/execution-control-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/feature-deletion-service.d.ts +1 -0
- package/dist/apps/control-plane/application/services/feature-deletion-service.js +23 -1
- package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.d.ts +24 -1
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +132 -3
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-send-message-service.js +16 -8
- package/dist/apps/control-plane/application/services/feature-send-message-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-state-service.d.ts +36 -0
- package/dist/apps/control-plane/application/services/feature-state-service.js +163 -6
- package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/gate-service.d.ts +2 -1
- package/dist/apps/control-plane/application/services/gate-service.js +95 -5
- package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/git-reconciliation-service.d.ts +92 -0
- package/dist/apps/control-plane/application/services/git-reconciliation-service.js +1097 -0
- package/dist/apps/control-plane/application/services/git-reconciliation-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/intake-service.d.ts +63 -0
- package/dist/apps/control-plane/application/services/intake-service.js +1050 -0
- package/dist/apps/control-plane/application/services/intake-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/merge-service.d.ts +5 -1
- package/dist/apps/control-plane/application/services/merge-service.js +233 -18
- package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/notifier-service.d.ts +1 -1
- package/dist/apps/control-plane/application/services/notifier-service.js +1 -0
- package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/performance-analytics-service.d.ts +11 -0
- package/dist/apps/control-plane/application/services/performance-analytics-service.js +59 -0
- package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/plan-service.d.ts +5 -0
- package/dist/apps/control-plane/application/services/plan-service.js +254 -15
- package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/question-service.d.ts +72 -0
- package/dist/apps/control-plane/application/services/question-service.js +507 -0
- package/dist/apps/control-plane/application/services/question-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/reactions-service.d.ts +2 -0
- package/dist/apps/control-plane/application/services/reactions-service.js +60 -17
- package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/replay-timeline-service.d.ts +39 -0
- package/dist/apps/control-plane/application/services/replay-timeline-service.js +205 -0
- package/dist/apps/control-plane/application/services/replay-timeline-service.js.map +1 -0
- package/dist/apps/control-plane/application/services/reporting-service.d.ts +59 -0
- package/dist/apps/control-plane/application/services/reporting-service.js +121 -9
- package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/run-lease-service.d.ts +20 -0
- package/dist/apps/control-plane/application/services/run-lease-service.js +81 -4
- package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/worktree-watchdog-service.d.ts +10 -0
- package/dist/apps/control-plane/application/services/worktree-watchdog-service.js +65 -8
- package/dist/apps/control-plane/application/services/worktree-watchdog-service.js.map +1 -1
- package/dist/apps/control-plane/application/tools/tool-metadata.js +7 -0
- package/dist/apps/control-plane/application/tools/tool-metadata.js.map +1 -1
- package/dist/apps/control-plane/application/usage-types.d.ts +65 -0
- package/dist/apps/control-plane/application/usage-types.js +75 -0
- package/dist/apps/control-plane/application/usage-types.js.map +1 -0
- package/dist/apps/control-plane/cli/add-command-handler.d.ts +18 -0
- package/dist/apps/control-plane/cli/add-command-handler.js +110 -0
- package/dist/apps/control-plane/cli/add-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/answer-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/answer-command-handler.js +96 -0
- package/dist/apps/control-plane/cli/answer-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/attach-command-handler.js +8 -3
- package/dist/apps/control-plane/cli/attach-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/cli-argument-parser.js +131 -11
- package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
- package/dist/apps/control-plane/cli/collision-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/collision-command-handler.js +90 -0
- package/dist/apps/control-plane/cli/collision-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/command-catalog.d.ts +21 -0
- package/dist/apps/control-plane/cli/command-catalog.js +416 -0
- package/dist/apps/control-plane/cli/command-catalog.js.map +1 -0
- package/dist/apps/control-plane/cli/complete-command-handler.d.ts +15 -0
- package/dist/apps/control-plane/cli/complete-command-handler.js +26 -0
- package/dist/apps/control-plane/cli/complete-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/completion-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/completion-command-handler.js +20 -0
- package/dist/apps/control-plane/cli/completion-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/completion-resolver.d.ts +1 -0
- package/dist/apps/control-plane/cli/completion-resolver.js +250 -0
- package/dist/apps/control-plane/cli/completion-resolver.js.map +1 -0
- package/dist/apps/control-plane/cli/completion-shell-renderer.d.ts +3 -0
- package/dist/apps/control-plane/cli/completion-shell-renderer.js +53 -0
- package/dist/apps/control-plane/cli/completion-shell-renderer.js.map +1 -0
- package/dist/apps/control-plane/cli/dashboard-command-handler.d.ts +1 -0
- package/dist/apps/control-plane/cli/dashboard-command-handler.js +83 -1
- package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/dashboard-runtime-runner.d.ts +81 -0
- package/dist/apps/control-plane/cli/dashboard-runtime-runner.js +724 -0
- package/dist/apps/control-plane/cli/dashboard-runtime-runner.js.map +1 -0
- package/dist/apps/control-plane/cli/dashboard-runtime.d.ts +1 -0
- package/dist/apps/control-plane/cli/dashboard-runtime.js +26 -0
- package/dist/apps/control-plane/cli/dashboard-runtime.js.map +1 -0
- package/dist/apps/control-plane/cli/help-command-handler.js +13 -172
- package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/init-command-handler.js +51 -6
- package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/merge-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/merge-command-handler.js +139 -0
- package/dist/apps/control-plane/cli/merge-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/questions-command-handler.d.ts +8 -0
- package/dist/apps/control-plane/cli/questions-command-handler.js +59 -0
- package/dist/apps/control-plane/cli/questions-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/replay-command-handler.d.ts +15 -0
- package/dist/apps/control-plane/cli/replay-command-handler.js +55 -0
- package/dist/apps/control-plane/cli/replay-command-handler.js.map +1 -0
- package/dist/apps/control-plane/cli/resume-command-handler.d.ts +2 -0
- package/dist/apps/control-plane/cli/resume-command-handler.js +180 -17
- package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/retry-command-handler.js +202 -16
- package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/retry-resume-decision.d.ts +26 -0
- package/dist/apps/control-plane/cli/retry-resume-decision.js +61 -0
- package/dist/apps/control-plane/cli/retry-resume-decision.js.map +1 -0
- package/dist/apps/control-plane/cli/rollback-command-handler.js +3 -2
- package/dist/apps/control-plane/cli/rollback-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/run-command-handler.js +26 -2
- package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-ingestion-service.d.ts +2 -0
- package/dist/apps/control-plane/cli/spec-ingestion-service.js +37 -48
- package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-preparation.d.ts +14 -0
- package/dist/apps/control-plane/cli/spec-preparation.js +81 -0
- package/dist/apps/control-plane/cli/spec-preparation.js.map +1 -0
- package/dist/apps/control-plane/cli/spec-utils.d.ts +4 -0
- package/dist/apps/control-plane/cli/spec-utils.js +70 -11
- package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
- package/dist/apps/control-plane/cli/status-command-handler.js +69 -0
- package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/types.d.ts +41 -4
- package/dist/apps/control-plane/cli/types.js +9 -1
- package/dist/apps/control-plane/cli/types.js.map +1 -1
- package/dist/apps/control-plane/core/collisions.d.ts +37 -19
- package/dist/apps/control-plane/core/collisions.js +87 -12
- package/dist/apps/control-plane/core/collisions.js.map +1 -1
- package/dist/apps/control-plane/core/constants.d.ts +17 -1
- package/dist/apps/control-plane/core/constants.js +18 -1
- package/dist/apps/control-plane/core/constants.js.map +1 -1
- package/dist/apps/control-plane/core/error-codes.d.ts +39 -0
- package/dist/apps/control-plane/core/error-codes.js +39 -0
- package/dist/apps/control-plane/core/error-codes.js.map +1 -1
- package/dist/apps/control-plane/core/execution-control.d.ts +45 -0
- package/dist/apps/control-plane/core/execution-control.js +2 -0
- package/dist/apps/control-plane/core/execution-control.js.map +1 -0
- package/dist/apps/control-plane/core/feature-resume-phase.d.ts +3 -0
- package/dist/apps/control-plane/core/feature-resume-phase.js +88 -0
- package/dist/apps/control-plane/core/feature-resume-phase.js.map +1 -0
- package/dist/apps/control-plane/core/gate-freshness.d.ts +48 -0
- package/dist/apps/control-plane/core/gate-freshness.js +267 -0
- package/dist/apps/control-plane/core/gate-freshness.js.map +1 -0
- package/dist/apps/control-plane/core/gate-log-extractor.d.ts +22 -0
- package/dist/apps/control-plane/core/gate-log-extractor.js +66 -0
- package/dist/apps/control-plane/core/gate-log-extractor.js.map +1 -0
- package/dist/apps/control-plane/core/gates.d.ts +11 -2
- package/dist/apps/control-plane/core/gates.js +67 -3
- package/dist/apps/control-plane/core/gates.js.map +1 -1
- package/dist/apps/control-plane/core/intake-artifacts.d.ts +109 -0
- package/dist/apps/control-plane/core/intake-artifacts.js +143 -0
- package/dist/apps/control-plane/core/intake-artifacts.js.map +1 -0
- package/dist/apps/control-plane/core/kernel-types.d.ts +8 -0
- package/dist/apps/control-plane/core/kernel.d.ts +256 -8
- package/dist/apps/control-plane/core/kernel.js +400 -14
- package/dist/apps/control-plane/core/kernel.js.map +1 -1
- package/dist/apps/control-plane/core/mainline-conflict.d.ts +7 -0
- package/dist/apps/control-plane/core/mainline-conflict.js +20 -0
- package/dist/apps/control-plane/core/mainline-conflict.js.map +1 -0
- package/dist/apps/control-plane/core/merge-repair.d.ts +35 -0
- package/dist/apps/control-plane/core/merge-repair.js +99 -0
- package/dist/apps/control-plane/core/merge-repair.js.map +1 -0
- package/dist/apps/control-plane/core/path-layout.d.ts +10 -0
- package/dist/apps/control-plane/core/path-layout.js +32 -2
- package/dist/apps/control-plane/core/path-layout.js.map +1 -1
- package/dist/apps/control-plane/core/path-rules.js +9 -3
- package/dist/apps/control-plane/core/path-rules.js.map +1 -1
- package/dist/apps/control-plane/core/plan-submit-recovery.d.ts +22 -0
- package/dist/apps/control-plane/core/plan-submit-recovery.js +78 -0
- package/dist/apps/control-plane/core/plan-submit-recovery.js.map +1 -0
- package/dist/apps/control-plane/core/questions.d.ts +40 -0
- package/dist/apps/control-plane/core/questions.js +2 -0
- package/dist/apps/control-plane/core/questions.js.map +1 -0
- package/dist/apps/control-plane/core/runtime-sessions.d.ts +4 -0
- package/dist/apps/control-plane/core/schemas.d.ts +2 -0
- package/dist/apps/control-plane/core/schemas.js +31 -1
- package/dist/apps/control-plane/core/schemas.js.map +1 -1
- package/dist/apps/control-plane/core/tool-caller.d.ts +18 -1
- package/dist/apps/control-plane/core/utils/index-normalizer.js +17 -4
- package/dist/apps/control-plane/core/utils/index-normalizer.js.map +1 -1
- package/dist/apps/control-plane/core/worktree-diff.d.ts +4 -0
- package/dist/apps/control-plane/core/worktree-diff.js +52 -0
- package/dist/apps/control-plane/core/worktree-diff.js.map +1 -0
- package/dist/apps/control-plane/index.d.ts +10 -2
- package/dist/apps/control-plane/index.js +9 -2
- package/dist/apps/control-plane/index.js.map +1 -1
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js +236 -6
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js +16 -0
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-runtime.d.ts +5 -0
- package/dist/apps/control-plane/mcp/tool-runtime.js +40 -5
- package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
- package/dist/apps/control-plane/providers/api-worker-provider.d.ts +2 -2
- package/dist/apps/control-plane/providers/api-worker-provider.js +40 -9
- package/dist/apps/control-plane/providers/api-worker-provider.js.map +1 -1
- package/dist/apps/control-plane/providers/cli-worker-provider.d.ts +59 -3
- package/dist/apps/control-plane/providers/cli-worker-provider.js +758 -46
- package/dist/apps/control-plane/providers/cli-worker-provider.js.map +1 -1
- package/dist/apps/control-plane/providers/output-parsers/generic-output-parser.js +91 -1
- package/dist/apps/control-plane/providers/output-parsers/generic-output-parser.js.map +1 -1
- package/dist/apps/control-plane/providers/output-parsers/types.d.ts +2 -0
- package/dist/apps/control-plane/providers/provider-defaults.d.ts +12 -0
- package/dist/apps/control-plane/providers/provider-defaults.js +103 -7
- package/dist/apps/control-plane/providers/provider-defaults.js.map +1 -1
- package/dist/apps/control-plane/providers/providers.d.ts +50 -4
- package/dist/apps/control-plane/providers/providers.js +145 -14
- package/dist/apps/control-plane/providers/providers.js.map +1 -1
- package/dist/apps/control-plane/providers/worker-provider-factory.d.ts +2 -0
- package/dist/apps/control-plane/providers/worker-provider-factory.js +8 -1
- package/dist/apps/control-plane/providers/worker-provider-factory.js.map +1 -1
- package/dist/apps/control-plane/supervisor/artifact-stager.d.ts +5 -0
- package/dist/apps/control-plane/supervisor/artifact-stager.js +45 -0
- package/dist/apps/control-plane/supervisor/artifact-stager.js.map +1 -0
- package/dist/apps/control-plane/supervisor/build-wave-executor.d.ts +24 -1
- package/dist/apps/control-plane/supervisor/build-wave-executor.js +362 -150
- package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/execution-enrollment-service.d.ts +41 -0
- package/dist/apps/control-plane/supervisor/execution-enrollment-service.js +311 -0
- package/dist/apps/control-plane/supervisor/execution-enrollment-service.js.map +1 -0
- package/dist/apps/control-plane/supervisor/organizer-enrollment-scheduler.d.ts +15 -0
- package/dist/apps/control-plane/supervisor/organizer-enrollment-scheduler.js +93 -0
- package/dist/apps/control-plane/supervisor/organizer-enrollment-scheduler.js.map +1 -0
- package/dist/apps/control-plane/supervisor/organizer-sidecar-service.d.ts +44 -0
- package/dist/apps/control-plane/supervisor/organizer-sidecar-service.js +311 -0
- package/dist/apps/control-plane/supervisor/organizer-sidecar-service.js.map +1 -0
- package/dist/apps/control-plane/supervisor/plan-conformance-scorer.js +2 -5
- package/dist/apps/control-plane/supervisor/plan-conformance-scorer.js.map +1 -1
- package/dist/apps/control-plane/supervisor/planner-phase.d.ts +3 -0
- package/dist/apps/control-plane/supervisor/planner-phase.js +70 -0
- package/dist/apps/control-plane/supervisor/planner-phase.js.map +1 -0
- package/dist/apps/control-plane/supervisor/planning-wave-executor.d.ts +42 -0
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js +753 -55
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +19 -1
- package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js.map +1 -1
- package/dist/apps/control-plane/supervisor/qa-wave-executor.d.ts +21 -0
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js +287 -156
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/run-coordinator.d.ts +30 -1
- package/dist/apps/control-plane/supervisor/run-coordinator.js +561 -17
- package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/runtime.d.ts +84 -0
- package/dist/apps/control-plane/supervisor/runtime.js +393 -3
- package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
- package/dist/apps/control-plane/supervisor/session-orchestrator.d.ts +54 -0
- package/dist/apps/control-plane/supervisor/session-orchestrator.js +176 -1
- package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/types.d.ts +142 -1
- package/dist/apps/control-plane/supervisor/types.js.map +1 -1
- package/dist/apps/control-plane/supervisor/worker-decision-loop.d.ts +68 -2
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js +723 -89
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
- package/docs/core/ARCHITECTURE.md +227 -0
- package/docs/core/DECISIONS.md +94 -0
- package/docs/core/DOMAIN-LOGIC.md +60 -0
- package/docs/core/PATTERNS.md +201 -0
- package/docs/core/TROUBLESHOOTING.md +347 -0
- package/docs/core/intentgraph-dependencies.json +39860 -0
- package/docs/core/intentgraph.index.json +46580 -0
- package/docs/plans/2026-03-10-gate-failure-targeted-repair-design.md +224 -0
- package/docs/plans/2026-03-10-gate-failure-targeted-repair.md +1032 -0
- package/docs/superpowers/plans/2026-03-16-provider-cli-config.md +743 -0
- package/docs/superpowers/plans/2026-03-23-reconcile-divergence-fix.md +777 -0
- package/docs/superpowers/plans/2026-03-28-ordering-agent-implementation.md +1754 -0
- package/docs/superpowers/plans/2026-03-29-drop-zone-and-provider-optimization.md +1108 -0
- package/docs/superpowers/plans/2026-03-29-merge-target-feature-branch.md +685 -0
- package/docs/superpowers/plans/2026-03-29-organizer-sidecar-runtime-loop.md +1289 -0
- package/docs/superpowers/specs/2026-03-23-reconcile-divergence-fix-design.md +118 -0
- package/docs/superpowers/specs/2026-03-28-ordering-agent-spec-audit-design.md +50 -0
- package/docs/superpowers/specs/2026-03-29-drop-zone-and-provider-optimization-design.md +254 -0
- package/docs/superpowers/specs/2026-03-29-merge-target-feature-branch-design.md +152 -0
- package/docs/superpowers/specs/2026-03-29-organizer-sidecar-runtime-loop-design.md +225 -0
- package/package.json +3 -2
- package/packages/web-dashboard/package.json +2 -1
- package/packages/web-dashboard/src/app/analytics/page.tsx +36 -2
- package/packages/web-dashboard/src/app/api/actions/route.ts +274 -63
- package/packages/web-dashboard/src/app/api/actions/status/route.ts +35 -0
- package/packages/web-dashboard/src/app/api/analytics/provider/route.ts +18 -0
- package/packages/web-dashboard/src/app/api/collisions/approve/route.ts +58 -0
- package/packages/web-dashboard/src/app/api/features/[id]/checkpoint-diff/route.ts +36 -0
- package/packages/web-dashboard/src/app/api/features/[id]/checkpoints/route.ts +29 -0
- package/packages/web-dashboard/src/app/api/features/[id]/conflicts/abort/route.ts +29 -0
- package/packages/web-dashboard/src/app/api/features/[id]/conflicts/files/route.ts +30 -0
- package/packages/web-dashboard/src/app/api/features/[id]/conflicts/resolve/route.ts +51 -0
- package/packages/web-dashboard/src/app/api/features/[id]/conflicts/route.ts +75 -0
- package/packages/web-dashboard/src/app/api/features/[id]/diff/route.ts +16 -2
- package/packages/web-dashboard/src/app/api/features/[id]/files/route.ts +26 -0
- package/packages/web-dashboard/src/app/api/features/[id]/gate-history/route.ts +27 -0
- package/packages/web-dashboard/src/app/api/features/[id]/genealogy/route.ts +26 -0
- package/packages/web-dashboard/src/app/api/features/[id]/history/run/[runId]/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/history/runs/route.ts +34 -0
- package/packages/web-dashboard/src/app/api/features/[id]/intake-workspace/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/live-output/route.ts +74 -0
- package/packages/web-dashboard/src/app/api/features/[id]/plan/amend/route.ts +21 -0
- package/packages/web-dashboard/src/app/api/features/[id]/plan-progress/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/planner-artifacts/[artifact]/route.ts +78 -0
- package/packages/web-dashboard/src/app/api/features/[id]/planner-lifecycle/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/planning-workspace/route.ts +20 -0
- package/packages/web-dashboard/src/app/api/features/[id]/questions/[questionId]/answer/route.ts +27 -0
- package/packages/web-dashboard/src/app/api/features/[id]/questions/route.ts +18 -0
- package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +14 -7
- package/packages/web-dashboard/src/app/api/features/[id]/route.ts +57 -2
- package/packages/web-dashboard/src/app/api/features/[id]/spec/route.ts +30 -0
- package/packages/web-dashboard/src/app/api/features/[id]/triage/route.ts +83 -0
- package/packages/web-dashboard/src/app/api/features/[id]/worker-events/route.ts +40 -0
- package/packages/web-dashboard/src/app/api/launch/preview/route.ts +86 -0
- package/packages/web-dashboard/src/app/api/launch/submit/route.ts +180 -0
- package/packages/web-dashboard/src/app/api/mainline/status/route.ts +74 -0
- package/packages/web-dashboard/src/app/api/merge-queue/route.ts +13 -0
- package/packages/web-dashboard/src/app/api/policy/budget/route.ts +14 -0
- package/packages/web-dashboard/src/app/api/projects/route.ts +11 -7
- package/packages/web-dashboard/src/app/api/reconciler/queue/route.ts +47 -0
- package/packages/web-dashboard/src/app/api/run/route.ts +26 -2
- package/packages/web-dashboard/src/app/api/runtime/events/route.ts +227 -0
- package/packages/web-dashboard/src/app/api/runtime/operations/route.ts +269 -0
- package/packages/web-dashboard/src/app/api/runtime/questions/route.ts +11 -0
- package/packages/web-dashboard/src/app/api/runtime/runs/route.ts +80 -0
- package/packages/web-dashboard/src/app/api/status/route.ts +4 -2
- package/packages/web-dashboard/src/app/feature/[id]/page.tsx +32 -42
- package/packages/web-dashboard/src/app/globals.css +34 -3
- package/packages/web-dashboard/src/app/launch/page.tsx +357 -0
- package/packages/web-dashboard/src/app/layout.tsx +23 -1
- package/packages/web-dashboard/src/app/page.tsx +263 -272
- package/packages/web-dashboard/src/components/dashboard/attention-strip.tsx +52 -0
- package/packages/web-dashboard/src/components/dashboard/collision-approval-drawer.tsx +185 -0
- package/packages/web-dashboard/src/components/dashboard/command-center-header.tsx +102 -0
- package/packages/web-dashboard/src/components/dashboard/mainline-status-banner.tsx +84 -0
- package/packages/web-dashboard/src/components/dashboard/merged-archive.tsx +36 -0
- package/packages/web-dashboard/src/components/dashboard/prioritized-queues.tsx +98 -0
- package/packages/web-dashboard/src/components/dashboard/reconciler-queue-card.tsx +115 -0
- package/packages/web-dashboard/src/components/dashboard/secondary-diagnostics-rail.tsx +48 -0
- package/packages/web-dashboard/src/components/dashboard/task-filter-bar.tsx +74 -0
- package/packages/web-dashboard/src/components/dashboard/triage-drawer.tsx +455 -0
- package/packages/web-dashboard/src/components/diff-viewer.tsx +19 -3
- package/packages/web-dashboard/src/components/evidence-viewer.tsx +65 -51
- package/packages/web-dashboard/src/components/feature-card.tsx +90 -7
- package/packages/web-dashboard/src/components/feature-cost-panel.tsx +112 -11
- package/packages/web-dashboard/src/components/feature-list-view.tsx +25 -4
- package/packages/web-dashboard/src/components/features/runtime-inspector/EventsTimelineView.tsx +260 -0
- package/packages/web-dashboard/src/components/features/runtime-inspector/OperationsListView.tsx +172 -0
- package/packages/web-dashboard/src/components/features/runtime-inspector/RuntimeInspectorPanel.tsx +896 -0
- package/packages/web-dashboard/src/components/filter-bar.tsx +7 -39
- package/packages/web-dashboard/src/components/focus/ActionableRiskList.tsx +46 -0
- package/packages/web-dashboard/src/components/focus/AgentRolePerformanceCard.tsx +200 -0
- package/packages/web-dashboard/src/components/focus/BlockedGuidanceBanner.tsx +149 -0
- package/packages/web-dashboard/src/components/focus/CheckpointInspector.tsx +123 -0
- package/packages/web-dashboard/src/components/focus/CheckpointRail.tsx +118 -0
- package/packages/web-dashboard/src/components/focus/CheckpointScrubber.tsx +249 -0
- package/packages/web-dashboard/src/components/focus/CollisionApprovalBanner.tsx +192 -0
- package/packages/web-dashboard/src/components/focus/CollisionRadar.tsx +136 -0
- package/packages/web-dashboard/src/components/focus/ConflictStatusCard.tsx +52 -0
- package/packages/web-dashboard/src/components/focus/ContextSidebar.tsx +108 -0
- package/packages/web-dashboard/src/components/focus/DiagnosisPanel.tsx +68 -0
- package/packages/web-dashboard/src/components/focus/FeatureDecisionBanner.tsx +68 -0
- package/packages/web-dashboard/src/components/focus/FeatureQuestionAnswerPanel.tsx +167 -0
- package/packages/web-dashboard/src/components/focus/FocusHeader.tsx +54 -0
- package/packages/web-dashboard/src/components/focus/FocusLayout.tsx +283 -0
- package/packages/web-dashboard/src/components/focus/GateFlakinessSummary.tsx +144 -0
- package/packages/web-dashboard/src/components/focus/GenealogyTree.tsx +34 -0
- package/packages/web-dashboard/src/components/focus/HeroBlock.tsx +67 -0
- package/packages/web-dashboard/src/components/focus/LiveAgentConsole.tsx +277 -0
- package/packages/web-dashboard/src/components/focus/MergeQueueCard.tsx +78 -0
- package/packages/web-dashboard/src/components/focus/OperationalSummaryCard.tsx +227 -0
- package/packages/web-dashboard/src/components/focus/PinnedActions.tsx +96 -0
- package/packages/web-dashboard/src/components/focus/PlanAmendmentPanel.tsx +250 -0
- package/packages/web-dashboard/src/components/focus/PlanProgressPanel.tsx +133 -0
- package/packages/web-dashboard/src/components/focus/PlannerArtifactViewer.tsx +158 -0
- package/packages/web-dashboard/src/components/focus/PlannerLifecycleHeader.tsx +141 -0
- package/packages/web-dashboard/src/components/focus/ProgressSnapshotCard.tsx +113 -0
- package/packages/web-dashboard/src/components/focus/RecentMaterialChanges.tsx +69 -0
- package/packages/web-dashboard/src/components/focus/RoleLogViewer.tsx +436 -0
- package/packages/web-dashboard/src/components/focus/RunHistoryBrowser.tsx +62 -0
- package/packages/web-dashboard/src/components/focus/SpecViewer.tsx +172 -0
- package/packages/web-dashboard/src/components/focus/TabBar.tsx +33 -0
- package/packages/web-dashboard/src/components/focus/UsageBurnChart.tsx +212 -0
- package/packages/web-dashboard/src/components/focus/VerificationSummaryCard.tsx +122 -0
- package/packages/web-dashboard/src/components/focus/tabs/ChangesTab.tsx +325 -0
- package/packages/web-dashboard/src/components/focus/tabs/ConflictsTab.tsx +395 -0
- package/packages/web-dashboard/src/components/focus/tabs/GatesQaTab.tsx +38 -0
- package/packages/web-dashboard/src/components/focus/tabs/HistoryTab.tsx +213 -0
- package/packages/web-dashboard/src/components/focus/tabs/IntakeTab.tsx +429 -0
- package/packages/web-dashboard/src/components/focus/tabs/OverviewTab.tsx +217 -0
- package/packages/web-dashboard/src/components/focus/tabs/PlanningTab.tsx +390 -0
- package/packages/web-dashboard/src/components/focus/tabs/ReviewTab.tsx +497 -0
- package/packages/web-dashboard/src/components/focus/tabs/RuntimeTab.tsx +213 -0
- package/packages/web-dashboard/src/components/focus/tabs/TranscriptTab.tsx +315 -0
- package/packages/web-dashboard/src/components/gate-results.tsx +2 -2
- package/packages/web-dashboard/src/components/human-input-panel.tsx +33 -57
- package/packages/web-dashboard/src/components/kanban-board.tsx +4 -0
- package/packages/web-dashboard/src/components/launch/launch-draft-card.tsx +131 -0
- package/packages/web-dashboard/src/components/plan-viewer.tsx +147 -69
- package/packages/web-dashboard/src/components/quick-launch-panel.tsx +20 -47
- package/packages/web-dashboard/src/components/summary-bar.tsx +30 -76
- package/packages/web-dashboard/src/lib/aop-client.ts +2484 -36
- package/packages/web-dashboard/src/lib/blocked-state-guidance.ts +475 -0
- package/packages/web-dashboard/src/lib/collision-radar.ts +136 -0
- package/packages/web-dashboard/src/lib/dashboard-action-states.ts +204 -0
- package/packages/web-dashboard/src/lib/dashboard-runtime-client.ts +439 -0
- package/packages/web-dashboard/src/lib/dashboard-utils.ts +179 -18
- package/packages/web-dashboard/src/lib/drop-zone-utils.ts +92 -0
- package/packages/web-dashboard/src/lib/focus-detail-derivations.ts +958 -0
- package/packages/web-dashboard/src/lib/focus-view.ts +300 -0
- package/packages/web-dashboard/src/lib/health-diagnosis.ts +356 -0
- package/packages/web-dashboard/src/lib/launch-contracts.ts +77 -0
- package/packages/web-dashboard/src/lib/launch-markdown.ts +107 -0
- package/packages/web-dashboard/src/lib/launch-page-preview.ts +89 -0
- package/packages/web-dashboard/src/lib/live-feed.ts +1 -1
- package/packages/web-dashboard/src/lib/multi-project-config.ts +33 -0
- package/packages/web-dashboard/src/lib/orchestrator-tools.ts +845 -59
- package/packages/web-dashboard/src/lib/planner-workspace.ts +1285 -0
- package/packages/web-dashboard/src/lib/review-contracts.ts +5 -3
- package/packages/web-dashboard/src/lib/runtime-files.ts +285 -0
- package/packages/web-dashboard/src/lib/tool-catalog.ts +51 -0
- package/packages/web-dashboard/src/lib/types.ts +731 -3
- package/packages/web-dashboard/src/lib/usage-burn.ts +175 -0
- package/packages/web-dashboard/src/lib/worktree-diff.ts +128 -0
- package/packages/web-dashboard/src/styles/dashboard.module.css +1742 -459
- package/packages/web-dashboard/test/api/actions/route.spec.ts +675 -0
- package/packages/web-dashboard/test/api/features/diff.route.spec.ts +57 -0
- package/packages/web-dashboard/test/api/features/feature.route.spec.ts +99 -0
- package/packages/web-dashboard/test/api/features/live-output.route.spec.ts +123 -0
- package/packages/web-dashboard/test/api/features/plan-amend.route.spec.ts +95 -0
- package/packages/web-dashboard/test/api/features/planner-workspaces.route.spec.ts +162 -0
- package/packages/web-dashboard/test/api/features/question-answer.route.spec.ts +99 -0
- package/packages/web-dashboard/test/api/features/triage.route.spec.ts +195 -0
- package/packages/web-dashboard/test/api/launch/preview.route.spec.ts +149 -0
- package/packages/web-dashboard/test/api/launch/submit.route.spec.ts +382 -0
- package/packages/web-dashboard/test/api/runtime/events/route.spec.ts +164 -0
- package/packages/web-dashboard/test/api/runtime/operations/route.spec.ts +156 -0
- package/packages/web-dashboard/test/api/runtime/runs/route.spec.ts +112 -0
- package/packages/web-dashboard/test/components/changes-tab.spec.tsx +76 -0
- package/packages/web-dashboard/test/components/command-center-root.spec.tsx +87 -0
- package/packages/web-dashboard/test/components/diagnosis-panel.spec.tsx +59 -0
- package/packages/web-dashboard/test/components/feature-card.spec.tsx +45 -0
- package/packages/web-dashboard/test/components/focus-layout.spec.tsx +299 -0
- package/packages/web-dashboard/test/components/gate-results.spec.tsx +39 -0
- package/packages/web-dashboard/test/components/gates-qa-tab.spec.tsx +118 -0
- package/packages/web-dashboard/test/components/human-input-panel.spec.tsx +54 -0
- package/packages/web-dashboard/test/components/intake-tab.spec.tsx +210 -0
- package/packages/web-dashboard/test/components/kanban-board.spec.tsx +35 -0
- package/packages/web-dashboard/test/components/launch-draft-card.spec.tsx +54 -0
- package/packages/web-dashboard/test/components/launch-page.spec.tsx +79 -0
- package/packages/web-dashboard/test/components/overview-tab.spec.tsx +236 -0
- package/packages/web-dashboard/test/components/planning-tab.spec.tsx +202 -0
- package/packages/web-dashboard/test/components/review-tab.spec.tsx +169 -0
- package/packages/web-dashboard/test/components/role-log-viewer.spec.ts +42 -0
- package/packages/web-dashboard/test/components/runtime-inspector.spec.tsx +22 -0
- package/packages/web-dashboard/test/components/runtime-tab.spec.tsx +133 -0
- package/packages/web-dashboard/test/components/transcript-tab.spec.tsx +46 -0
- package/packages/web-dashboard/test/components/triage-drawer.spec.tsx +159 -0
- package/packages/web-dashboard/test/lib/aop-client.spec.ts +235 -0
- package/packages/web-dashboard/test/lib/dashboard-runtime-client.spec.ts +144 -0
- package/packages/web-dashboard/test/lib/focus-detail-derivations.spec.ts +314 -0
- package/packages/web-dashboard/test/lib/focus-view.spec.ts +248 -0
- package/packages/web-dashboard/test/lib/health-diagnosis.spec.ts +277 -0
- package/packages/web-dashboard/test/lib/launch-markdown.spec.ts +36 -0
- package/packages/web-dashboard/test/lib/multi-project-config.spec.ts +54 -0
- package/packages/web-dashboard/test/lib/orchestrator-tools.spec.ts +352 -0
- package/packages/web-dashboard/test/lib/planner-workspace.spec.ts +289 -0
- package/packages/web-dashboard/test/lib/worktree-diff.spec.ts +119 -0
- package/packages/web-dashboard/vitest.config.ts +2 -0
- package/spec-files/completed/agentic_orchestrator_add_feature_to_active_execution_spec.md +557 -0
- package/spec-files/completed/agentic_orchestrator_dashboard_command_center_redesign_spec.md +1147 -0
- package/spec-files/completed/agentic_orchestrator_execution_mode_spec.md +18 -16
- package/spec-files/completed/agentic_orchestrator_feature_focus_view_track_a_spec.md +672 -0
- package/spec-files/completed/agentic_orchestrator_feature_focus_view_track_b_spec.md +794 -0
- package/spec-files/completed/agentic_orchestrator_feature_focus_view_track_c_decision_centric_remediation_spec.md +1037 -0
- package/spec-files/completed/agentic_orchestrator_feature_focus_view_ux_redesign_spec.md +1432 -0
- package/spec-files/completed/agentic_orchestrator_focus_plan_tab_intake_planning_workspace_spec.md +921 -0
- package/spec-files/completed/agentic_orchestrator_intentional_collision_override_spec.md +584 -0
- package/spec-files/completed/agentic_orchestrator_interactive_planning_intake_and_requirements_verification_spec.md +1185 -0
- package/spec-files/completed/agentic_orchestrator_reactive_execution_enrollment_spec.md +864 -0
- package/spec-files/{outstanding → completed}/agentic_orchestrator_runtime_inspection_spec.md +92 -19
- package/spec-files/completed/agentic_orchestrator_scope_aware_run_lease_spec.md +408 -0
- package/spec-files/completed/git-reconciliation-engine.md +827 -0
- package/spec-files/outstanding/agentic_orchestrator_dashboard_quick_launch_and_control_surface_spec.md +331 -0
- package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +16 -6
- package/spec-files/outstanding/agentic_orchestrator_evidence_integrity_doctor_spec.md +60 -9
- package/spec-files/outstanding/agentic_orchestrator_focus_plan_tab_execution_contract_workspace_spec.md +616 -0
- package/spec-files/outstanding/agentic_orchestrator_headless_standby_dashboard_runtime_spec.md +310 -0
- package/spec-files/outstanding/agentic_orchestrator_human_input_interaction_protocol_spec.md +175 -72
- package/spec-files/outstanding/agentic_orchestrator_interactive_rename_cleanup_spec.md +197 -0
- package/spec-files/outstanding/agentic_orchestrator_interactive_resume_and_reconciliation_disposition_spec.md +412 -0
- package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +166 -137
- package/spec-files/outstanding/agentic_orchestrator_observability_replay_spec.md +3 -3
- package/spec-files/outstanding/agentic_orchestrator_phase_specific_agent_profiles_and_token_telemetry_spec.md +303 -0
- package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +18 -5
- package/spec-files/outstanding/agentic_orchestrator_policy_stratification_spec.md +225 -0
- package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +77 -50
- package/spec-files/outstanding/agentic_orchestrator_ready_to_merge_branch_handoff_spec.md +724 -0
- package/spec-files/outstanding/agentic_orchestrator_remove_deterministic_mode_spec.md +263 -0
- package/spec-files/outstanding/agentic_orchestrator_request_more_context_and_dashboard_human_input_spec.md +456 -0
- package/spec-files/outstanding/agentic_orchestrator_spec_coverage_and_reconciliation_enforcement_spec.md +1411 -0
- package/spec-files/outstanding/agentic_orchestrator_spec_ordering_agent_spec.md +370 -0
- package/spec-files/outstanding/shadow_workspace_implementation_spec.md +1 -1
- package/spec-files/progress.md +2026 -120
- package/specs/001-runtime-inspection/checklists/requirements.md +35 -0
- package/specs/001-runtime-inspection/design.md +338 -0
- package/specs/001-runtime-inspection/spec.md +95 -0
- package/specs/002-scope-aware-lease/checklists/requirements.md +35 -0
- package/specs/002-scope-aware-lease/contracts/lease-registry.schema.json +101 -0
- package/specs/002-scope-aware-lease/data-model.md +236 -0
- package/specs/002-scope-aware-lease/plan.md +766 -0
- package/specs/002-scope-aware-lease/quickstart.md +150 -0
- package/specs/002-scope-aware-lease/research.md +135 -0
- package/specs/002-scope-aware-lease/spec.md +128 -0
- package/specs/002-scope-aware-lease/tasks.md +767 -0
- package/tsconfig.json +1 -1
- package/vitest.config.ts +28 -0
- package/ARCHITECTURE_ADHERENCE_ANALYSIS.md +0 -871
- package/packages/web-dashboard/next-env.d.ts +0 -6
- package/packages/web-dashboard/src/components/detail-panel.tsx +0 -1124
- package/packages/web-dashboard/src/components/review-workspace.tsx +0 -1162
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_artifact_database_publishing_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_cli_shell_tab_completion_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_dashboard_diff_and_agent_console_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_performance_improvements_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_persistent_worker_runtime_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_provider_auth_bootstrap_spec.md +0 -0
- /package/spec-files/{outstanding → completed}/agentic_orchestrator_real_worker_provider_execution_spec.md +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
|
|
3
|
+
const readFeatureStateMock = vi.hoisted(() => vi.fn());
|
|
4
|
+
const execFileMock = vi.hoisted(() => vi.fn());
|
|
5
|
+
|
|
6
|
+
vi.mock('@/lib/aop-client.js', () => ({
|
|
7
|
+
readFeatureState: readFeatureStateMock,
|
|
8
|
+
}));
|
|
9
|
+
|
|
10
|
+
vi.mock('node:child_process', () => ({
|
|
11
|
+
execFile: execFileMock,
|
|
12
|
+
}));
|
|
13
|
+
|
|
14
|
+
import { readLiveFeatureDiff } from '@/lib/worktree-diff.js';
|
|
15
|
+
|
|
16
|
+
type ExecCallback = (error: { code?: number } | null, stdout?: string) => void;
|
|
17
|
+
|
|
18
|
+
function completeExec(callback: unknown, error: { code?: number } | null, stdout: string): void {
|
|
19
|
+
(callback as ExecCallback)(error, stdout);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
describe('readLiveFeatureDiff', () => {
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
readFeatureStateMock.mockReset();
|
|
25
|
+
execFileMock.mockReset();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('returns null when the feature does not exist', async () => {
|
|
29
|
+
readFeatureStateMock.mockResolvedValue(null);
|
|
30
|
+
|
|
31
|
+
await expect(readLiveFeatureDiff('missing_feature', '/repo')).resolves.toBeNull();
|
|
32
|
+
expect(execFileMock).not.toHaveBeenCalled();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('combines tracked and untracked diffs from the current worktree', async () => {
|
|
36
|
+
readFeatureStateMock.mockResolvedValue({
|
|
37
|
+
worktree_path: '.worktrees/feature_live',
|
|
38
|
+
});
|
|
39
|
+
execFileMock.mockImplementation(
|
|
40
|
+
(_command: string, args: string[], _options: Record<string, unknown>, callback: unknown) => {
|
|
41
|
+
if (args.join(' ') === 'rev-parse --verify MERGE_HEAD') {
|
|
42
|
+
completeExec(callback, { code: 1 }, '');
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (args.join(' ') === 'diff --no-ext-diff --binary') {
|
|
46
|
+
completeExec(callback, null, 'diff --git a/src/a.ts b/src/a.ts\n');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (args.join(' ') === 'ls-files --others --exclude-standard -z') {
|
|
50
|
+
completeExec(callback, null, 'src/new.ts\0');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (args[0] === 'diff' && args[1] === '--no-index') {
|
|
54
|
+
completeExec(callback, { code: 1 }, 'diff --git a/src/new.ts b/src/new.ts\n');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
completeExec(callback, { code: 2 }, '');
|
|
58
|
+
},
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const diff = await readLiveFeatureDiff('feature_live', '/repo');
|
|
62
|
+
|
|
63
|
+
expect(diff).toBe('diff --git a/src/a.ts b/src/a.ts\ndiff --git a/src/new.ts b/src/new.ts\n');
|
|
64
|
+
expect(execFileMock).toHaveBeenNthCalledWith(
|
|
65
|
+
1,
|
|
66
|
+
'git',
|
|
67
|
+
['rev-parse', '--verify', 'MERGE_HEAD'],
|
|
68
|
+
expect.objectContaining({ cwd: '/repo/.worktrees/feature_live' }),
|
|
69
|
+
expect.any(Function),
|
|
70
|
+
);
|
|
71
|
+
expect(execFileMock).toHaveBeenNthCalledWith(
|
|
72
|
+
2,
|
|
73
|
+
'git',
|
|
74
|
+
['diff', '--no-ext-diff', '--binary'],
|
|
75
|
+
expect.objectContaining({ cwd: '/repo/.worktrees/feature_live' }),
|
|
76
|
+
expect.any(Function),
|
|
77
|
+
);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it('falls back to the standard worktree when the stored path escapes the repo root', async () => {
|
|
81
|
+
readFeatureStateMock.mockResolvedValue({
|
|
82
|
+
worktree_path: '/tmp/elsewhere',
|
|
83
|
+
});
|
|
84
|
+
execFileMock.mockImplementation(
|
|
85
|
+
(_command: string, args: string[], _options: Record<string, unknown>, callback: unknown) => {
|
|
86
|
+
if (args.join(' ') === 'rev-parse --verify MERGE_HEAD') {
|
|
87
|
+
completeExec(callback, { code: 1 }, '');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (args.join(' ') === 'diff --no-ext-diff --binary') {
|
|
91
|
+
completeExec(callback, null, '');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (args.join(' ') === 'ls-files --others --exclude-standard -z') {
|
|
95
|
+
completeExec(callback, null, '');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
completeExec(callback, { code: 2 }, '');
|
|
99
|
+
},
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
await readLiveFeatureDiff('feature_escape', '/repo');
|
|
103
|
+
|
|
104
|
+
expect(execFileMock).toHaveBeenNthCalledWith(
|
|
105
|
+
1,
|
|
106
|
+
'git',
|
|
107
|
+
['rev-parse', '--verify', 'MERGE_HEAD'],
|
|
108
|
+
expect.objectContaining({ cwd: '/repo/.worktrees/feature_escape' }),
|
|
109
|
+
expect.any(Function),
|
|
110
|
+
);
|
|
111
|
+
expect(execFileMock).toHaveBeenNthCalledWith(
|
|
112
|
+
2,
|
|
113
|
+
'git',
|
|
114
|
+
['diff', '--no-ext-diff', '--binary'],
|
|
115
|
+
expect.objectContaining({ cwd: '/repo/.worktrees/feature_escape' }),
|
|
116
|
+
expect.any(Function),
|
|
117
|
+
);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
@@ -6,6 +6,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
|
6
6
|
const dashboardSrc = path.resolve(__dirname, 'src');
|
|
7
7
|
|
|
8
8
|
export default defineConfig({
|
|
9
|
+
root: __dirname,
|
|
9
10
|
resolve: {
|
|
10
11
|
alias: [
|
|
11
12
|
{ find: /^@\/(.*)\.js$/, replacement: `${dashboardSrc}/$1` },
|
|
@@ -14,5 +15,6 @@ export default defineConfig({
|
|
|
14
15
|
},
|
|
15
16
|
test: {
|
|
16
17
|
environment: 'node',
|
|
18
|
+
include: ['test/**/*.spec.{ts,tsx}'],
|
|
17
19
|
},
|
|
18
20
|
});
|
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
# Feature Spec: Add Feature to Active Execution (AOP)
|
|
2
|
+
|
|
3
|
+
> **Purpose of this document**: Define a deterministic mechanism for adding new feature work to an already-running `aop` execution without allowing multiple same-repo supervisor runs.
|
|
4
|
+
|
|
5
|
+
**Version:** 1.0
|
|
6
|
+
**Date:** 2026-03-14
|
|
7
|
+
**Status:** Draft
|
|
8
|
+
**Roadmap Mapping:** M49
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 0. Standards and Dependencies
|
|
13
|
+
|
|
14
|
+
### 0.1 Required Standards
|
|
15
|
+
|
|
16
|
+
All implementation MUST preserve:
|
|
17
|
+
|
|
18
|
+
- single active supervisor ownership per repository
|
|
19
|
+
- deterministic orchestration and normalized error envelopes
|
|
20
|
+
- canonical runtime artifacts under `.aop/**`
|
|
21
|
+
- existing topology invariants (`1 + 3N` logical sessions)
|
|
22
|
+
- existing feature-level collision detection and lock behavior
|
|
23
|
+
- MCP/in-process parity for any new mutating/read operations
|
|
24
|
+
- `operation_id` idempotency on mutating tool calls
|
|
25
|
+
- coverage thresholds: Lines >=90%, Branches >=90%, Functions >=90%, Statements >=90%
|
|
26
|
+
|
|
27
|
+
### 0.2 Required Inputs
|
|
28
|
+
|
|
29
|
+
Implementing agents MUST read:
|
|
30
|
+
|
|
31
|
+
- `apps/control-plane/src/cli/run-command-handler.ts`
|
|
32
|
+
- `apps/control-plane/src/cli/resume-command-handler.ts`
|
|
33
|
+
- `apps/control-plane/src/cli/status-command-handler.ts`
|
|
34
|
+
- `apps/control-plane/src/cli/cli-argument-parser.ts`
|
|
35
|
+
- `apps/control-plane/src/cli/help-command-handler.ts`
|
|
36
|
+
- `apps/control-plane/src/interfaces/cli/bootstrap.ts`
|
|
37
|
+
- `apps/control-plane/src/supervisor/runtime.ts`
|
|
38
|
+
- `apps/control-plane/src/supervisor/run-coordinator.ts`
|
|
39
|
+
- `apps/control-plane/src/supervisor/session-orchestrator.ts`
|
|
40
|
+
- `apps/control-plane/src/core/kernel.ts`
|
|
41
|
+
- `apps/control-plane/src/core/path-layout.ts`
|
|
42
|
+
- `apps/control-plane/src/core/runtime-sessions.ts`
|
|
43
|
+
- `apps/control-plane/src/application/services/run-lease-service.ts`
|
|
44
|
+
- `apps/control-plane/src/application/services/instance-isolation-service.ts`
|
|
45
|
+
- `apps/control-plane/src/application/services/feature-lifecycle-service.ts`
|
|
46
|
+
- `apps/control-plane/src/application/services/feature-send-message-service.ts`
|
|
47
|
+
- `agentic/orchestrator/tools/catalog.json`
|
|
48
|
+
- `agentic/orchestrator/schemas/index.schema.json`
|
|
49
|
+
- `agentic/orchestrator/policy.yaml`
|
|
50
|
+
- `agentic/orchestrator/schemas/policy.schema.json`
|
|
51
|
+
|
|
52
|
+
### 0.3 Scope
|
|
53
|
+
|
|
54
|
+
This spec implements:
|
|
55
|
+
|
|
56
|
+
- a new CLI mechanism to add one or more features to an already-running execution
|
|
57
|
+
- a durable runtime control artifact for enqueueing add-feature requests
|
|
58
|
+
- supervisor polling/application of new requests during a live run
|
|
59
|
+
- deterministic duplicate handling and request disposition tracking
|
|
60
|
+
- status/dashboard visibility into pending and applied add-feature requests
|
|
61
|
+
|
|
62
|
+
Out of scope:
|
|
63
|
+
|
|
64
|
+
- multiple same-repo active supervisor runs
|
|
65
|
+
- per-added-feature provider/model/execution-mode overrides
|
|
66
|
+
- indefinite idle keepalive after a run has drained all work
|
|
67
|
+
- replacing existing plan collision, blocked queue, or shared reconciler behavior
|
|
68
|
+
|
|
69
|
+
### 0.4 OOP and Architecture Guardrails (Mandatory)
|
|
70
|
+
|
|
71
|
+
Implementation MUST follow:
|
|
72
|
+
|
|
73
|
+
- **KISS**: keep one active run lease model; add a control-plane enrollment path instead of redesigning run ownership.
|
|
74
|
+
- **SRP**: CLI parsing, request persistence, supervisor polling, and status projection MUST remain in separate modules/services.
|
|
75
|
+
- **SOLID-oriented design**:
|
|
76
|
+
- open/closed for future control request types beyond `add_features`
|
|
77
|
+
- interface segregation between request store/query APIs and supervisor application APIs
|
|
78
|
+
- dependency inversion so CLI/supervisor depend on contracts, not artifact-file details
|
|
79
|
+
- **Hexagonal alignment**: control request persistence belongs in application/core services, not directly in CLI handlers.
|
|
80
|
+
- **Composition over inheritance**: compose a dedicated execution-control service into kernel/supervisor flows.
|
|
81
|
+
- **High cohesion / low coupling**: feature initialization and worker cluster startup stay in existing lifecycle/session orchestrator paths.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 1. Problem Statement and Decision
|
|
86
|
+
|
|
87
|
+
### 1.1 Current Behavior
|
|
88
|
+
|
|
89
|
+
Today, `aop run` accepts a feature set only at supervisor startup. A second CLI invocation in the same repository fails with `run_already_active` because repository ownership is intentionally single-run.
|
|
90
|
+
|
|
91
|
+
That is correct for run ownership, but it creates an operator gap:
|
|
92
|
+
|
|
93
|
+
1. the user cannot add newly-prioritized work to a healthy in-flight supervisor
|
|
94
|
+
2. the only current workaround is waiting for the active run to finish or forcing an unsafe second run
|
|
95
|
+
3. the runtime already supports multiple feature clusters inside a single supervisor, but only from the initial queue
|
|
96
|
+
|
|
97
|
+
### 1.2 Design Decision
|
|
98
|
+
|
|
99
|
+
This spec keeps the existing single active run per repository and adds a first-class **feature enrollment** mechanism into that run.
|
|
100
|
+
|
|
101
|
+
The chosen approach is:
|
|
102
|
+
|
|
103
|
+
- preserve one active run lease
|
|
104
|
+
- preserve one active global orchestrator session and one shared reconciler lane
|
|
105
|
+
- allow later CLI invocations to append new features to the active run's execution queue
|
|
106
|
+
- reuse the current `RunCoordinator` and `SessionOrchestrator` feature-cluster lifecycle
|
|
107
|
+
|
|
108
|
+
### 1.3 Rejected Alternative
|
|
109
|
+
|
|
110
|
+
Same-repo multi-run concurrency is explicitly not the chosen design for this milestone because it would require redesigning:
|
|
111
|
+
|
|
112
|
+
- run lease ownership semantics
|
|
113
|
+
- feature-to-session routing for `attach` / `send` / `resume`
|
|
114
|
+
- stale takeover semantics
|
|
115
|
+
- shared reconciler-lane ownership across multiple active runs
|
|
116
|
+
- runtime session lookup and status/reporting semantics
|
|
117
|
+
|
|
118
|
+
This spec is the lower-risk, architecture-aligned solution to the user problem.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 2. Objectives
|
|
123
|
+
|
|
124
|
+
### 2.1 Must-Have Outcomes
|
|
125
|
+
|
|
126
|
+
1. A user can add new work to an active run without starting a second supervisor.
|
|
127
|
+
2. Added features are persisted durably and applied deterministically by the active supervisor.
|
|
128
|
+
3. Added features inherit the active run's provider/model/execution-mode/runtime policy.
|
|
129
|
+
4. Existing `max_active_features` behavior remains authoritative.
|
|
130
|
+
5. Existing plan collision and lock semantics remain unchanged.
|
|
131
|
+
6. Operators can observe request status (`pending`, `applied`, `rejected`) via CLI status output and runtime artifacts.
|
|
132
|
+
|
|
133
|
+
### 2.2 Non-Goals
|
|
134
|
+
|
|
135
|
+
- allowing multiple active runs for one repository
|
|
136
|
+
- hot-swapping providers or execution mode for only one added feature
|
|
137
|
+
- bypassing canonical spec ingestion
|
|
138
|
+
- starting worker clusters outside the supervisor-controlled rebalance flow
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 3. User Stories and Acceptance Scenarios
|
|
143
|
+
|
|
144
|
+
### User Story 1 — Add a New Feature While a Run Is Active
|
|
145
|
+
|
|
146
|
+
An operator has an active `aop run` in progress and wants to start work on a second feature without restarting the supervisor.
|
|
147
|
+
|
|
148
|
+
**Acceptance Scenarios**:
|
|
149
|
+
|
|
150
|
+
1. **Given** a run is active and feature capacity is available, **When** `aop add --fi <spec>` is invoked, **Then** the request is accepted and the feature is initialized into the active execution on the next supervisor poll cycle.
|
|
151
|
+
2. **Given** a run is active but all feature slots are full, **When** `aop add --fi <spec>` is invoked, **Then** the request is accepted and the feature is appended to the run queue until `rebalanceActiveFeatures()` promotes it.
|
|
152
|
+
3. **Given** multiple features are supplied, **When** the add request is processed, **Then** features are enqueued in deterministic order by request time then `feature_id`.
|
|
153
|
+
|
|
154
|
+
### User Story 2 — Reject or Skip Invalid Enrollment
|
|
155
|
+
|
|
156
|
+
An operator submits a feature that is already being handled or cannot be legally enrolled.
|
|
157
|
+
|
|
158
|
+
**Acceptance Scenarios**:
|
|
159
|
+
|
|
160
|
+
1. **Given** a requested feature is already active in the run, **When** the add request is applied, **Then** that feature is skipped with reason `already_active`.
|
|
161
|
+
2. **Given** a requested feature is already queued in the run, **When** the add request is applied, **Then** that feature is skipped with reason `already_queued`.
|
|
162
|
+
3. **Given** a requested feature is already merged or terminal, **When** the add request is applied, **Then** that feature is skipped with a deterministic terminal-state reason.
|
|
163
|
+
|
|
164
|
+
### User Story 3 — No Active Run Means No Enrollment
|
|
165
|
+
|
|
166
|
+
An operator tries to add work when no active supervisor owns the repository.
|
|
167
|
+
|
|
168
|
+
**Acceptance Scenarios**:
|
|
169
|
+
|
|
170
|
+
1. **Given** no fresh run lease exists, **When** `aop add` is invoked, **Then** the command fails with `run_not_active`.
|
|
171
|
+
2. **Given** a stale run lease exists, **When** `aop add` is invoked, **Then** the command fails with `run_not_active` and does not create an orphan control request.
|
|
172
|
+
3. **Given** the supervisor has already released its run lease, **When** `aop add` is invoked, **Then** the command fails immediately rather than writing a request that nobody will process.
|
|
173
|
+
|
|
174
|
+
### User Story 4 — Request Visibility
|
|
175
|
+
|
|
176
|
+
An operator needs to know whether a submitted add request was applied.
|
|
177
|
+
|
|
178
|
+
**Acceptance Scenarios**:
|
|
179
|
+
|
|
180
|
+
1. **Given** an add request is newly submitted, **When** `aop status` is run before the supervisor applies it, **Then** the output includes a pending execution request summary.
|
|
181
|
+
2. **Given** an add request has been applied, **When** `aop status` is run, **Then** the output includes the applied request id and per-feature outcome.
|
|
182
|
+
3. **Given** an add request was rejected, **When** `aop status` is run, **Then** the output includes the rejection code and message.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 4. CLI and UX Contract
|
|
187
|
+
|
|
188
|
+
### 4.1 New CLI Command
|
|
189
|
+
|
|
190
|
+
Add a new CLI command:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
aop add --fi <spec.md>
|
|
194
|
+
aop add --fl <folder>
|
|
195
|
+
aop add --resume <feature-id>
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
The command MUST reuse the same canonical spec resolution/ingestion rules as `aop run` for spec inputs.
|
|
199
|
+
The `--resume` path MUST target an already-initialized non-terminal feature and MUST enqueue it into the active execution without requiring spec-path ingestion.
|
|
200
|
+
|
|
201
|
+
### 4.2 Allowed and Disallowed Flags
|
|
202
|
+
|
|
203
|
+
Allowed:
|
|
204
|
+
|
|
205
|
+
- `--fi` / `-fi`
|
|
206
|
+
- `--fl` / `-fl`
|
|
207
|
+
- `--resume <feature-id>` for existing feature state
|
|
208
|
+
- `--feature-id` only if already supported by the same resolver path for canonicalization
|
|
209
|
+
|
|
210
|
+
Disallowed for `aop add`:
|
|
211
|
+
|
|
212
|
+
- provider override flags
|
|
213
|
+
- role-specific provider overrides
|
|
214
|
+
- execution-mode override flags
|
|
215
|
+
- takeover flags
|
|
216
|
+
- transport-specific behavior differences
|
|
217
|
+
|
|
218
|
+
Reason: added features are joining an already-running supervisor and therefore must inherit the active run configuration exactly.
|
|
219
|
+
|
|
220
|
+
`--resume` MUST be mutually exclusive with `--fi` / `--fl`.
|
|
221
|
+
|
|
222
|
+
### 4.3 Response Contract
|
|
223
|
+
|
|
224
|
+
Successful enqueue response:
|
|
225
|
+
|
|
226
|
+
```json
|
|
227
|
+
{
|
|
228
|
+
"ok": true,
|
|
229
|
+
"data": {
|
|
230
|
+
"command": "add",
|
|
231
|
+
"run_id": "run:123",
|
|
232
|
+
"request_id": "exec_req_01J...",
|
|
233
|
+
"request_status": "pending",
|
|
234
|
+
"requested_features": [
|
|
235
|
+
{ "feature_id": "feature_a", "spec_path": "spec-files/outstanding/feature_a.md" }
|
|
236
|
+
]
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
The command acknowledges durable submission, not immediate cluster startup.
|
|
242
|
+
|
|
243
|
+
### 4.4 Error Contract
|
|
244
|
+
|
|
245
|
+
Add or reuse deterministic errors:
|
|
246
|
+
|
|
247
|
+
- `run_not_active` — no fresh active run lease exists
|
|
248
|
+
- `execution_request_target_mismatch` — request targets the wrong run or instance
|
|
249
|
+
- `duplicate_execution_request` — same `operation_id` replay with mismatched payload
|
|
250
|
+
|
|
251
|
+
If the repository still uses a generic existing error code set, these semantics MUST still be reflected in normalized details.
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 5. End-to-End Lifecycle (Normative)
|
|
256
|
+
|
|
257
|
+
### 5.1 Submission Flow
|
|
258
|
+
|
|
259
|
+
1. User runs `aop add --fi <spec>`.
|
|
260
|
+
2. CLI resolves and ingests specs using the existing run-path ingestion logic.
|
|
261
|
+
3. CLI verifies a fresh active run lease exists for the current instance.
|
|
262
|
+
4. CLI submits a durable `add_features` execution request with `operation_id`.
|
|
263
|
+
5. Request is persisted as `pending`.
|
|
264
|
+
6. CLI returns `ok: true` with `request_id` and `run_id`.
|
|
265
|
+
|
|
266
|
+
### 5.2 Supervisor Application Flow
|
|
267
|
+
|
|
268
|
+
1. Active supervisor polls for pending execution requests at deterministic control points.
|
|
269
|
+
2. Requests are read in sorted order by `requested_at`, then `request_id`.
|
|
270
|
+
3. For each requested feature:
|
|
271
|
+
- if already active, skip
|
|
272
|
+
- if already queued, skip
|
|
273
|
+
- if already assigned a session cluster, skip
|
|
274
|
+
- if already terminal/merged, skip
|
|
275
|
+
- otherwise append to the in-memory run queue
|
|
276
|
+
4. Request is marked `applied` with per-feature outcome.
|
|
277
|
+
5. Existing `rebalanceActiveFeatures()` logic later creates planner/builder/qa sessions when capacity permits.
|
|
278
|
+
|
|
279
|
+
### 5.3 Final Shutdown Rule
|
|
280
|
+
|
|
281
|
+
The supervisor MUST perform one final poll for pending execution requests before releasing the run lease and exiting.
|
|
282
|
+
|
|
283
|
+
This spec does **not** require an indefinite idle keepalive window. If the run has fully shut down, subsequent `aop add` calls fail with `run_not_active`.
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## 6. Runtime Artifact Contract
|
|
288
|
+
|
|
289
|
+
### 6.1 New Artifact
|
|
290
|
+
|
|
291
|
+
Add a per-instance runtime artifact:
|
|
292
|
+
|
|
293
|
+
```text
|
|
294
|
+
.aop/runtime/<instanceId>/execution-control.json
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Protected by the existing index lock (`withIndexLock`) to preserve atomic coordination with run-lease state.
|
|
298
|
+
|
|
299
|
+
### 6.2 Artifact Shape
|
|
300
|
+
|
|
301
|
+
```json
|
|
302
|
+
{
|
|
303
|
+
"version": 1,
|
|
304
|
+
"run_id": "run:123",
|
|
305
|
+
"owner_instance_id": "abcd1234ef56",
|
|
306
|
+
"updated_at": "2026-03-14T20:00:00.000Z",
|
|
307
|
+
"items": [
|
|
308
|
+
{
|
|
309
|
+
"request_id": "exec_req_01J...",
|
|
310
|
+
"request_type": "add_features",
|
|
311
|
+
"status": "pending",
|
|
312
|
+
"requested_at": "2026-03-14T20:00:00.000Z",
|
|
313
|
+
"processed_at": null,
|
|
314
|
+
"requested_by": "cli:add",
|
|
315
|
+
"operation_id": "execution_request_add__...",
|
|
316
|
+
"features": [
|
|
317
|
+
{
|
|
318
|
+
"feature_id": "feature_a",
|
|
319
|
+
"spec_path": "spec-files/outstanding/feature_a.md"
|
|
320
|
+
}
|
|
321
|
+
],
|
|
322
|
+
"outcome": null
|
|
323
|
+
}
|
|
324
|
+
]
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Applied outcome shape:
|
|
329
|
+
|
|
330
|
+
```json
|
|
331
|
+
{
|
|
332
|
+
"queued": ["feature_a"],
|
|
333
|
+
"skipped": [{ "feature_id": "feature_b", "reason": "already_active" }]
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Rejected outcome shape:
|
|
338
|
+
|
|
339
|
+
```json
|
|
340
|
+
{
|
|
341
|
+
"code": "run_not_active",
|
|
342
|
+
"message": "No active run is available for feature enrollment"
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### 6.3 Schema Additions
|
|
347
|
+
|
|
348
|
+
Add:
|
|
349
|
+
|
|
350
|
+
- `agentic/orchestrator/schemas/execution-control.schema.json`
|
|
351
|
+
- tool schemas for any new runtime execution-request tools
|
|
352
|
+
|
|
353
|
+
Validation rules:
|
|
354
|
+
|
|
355
|
+
1. `run_id` and `owner_instance_id` MUST match the active lease at submission time.
|
|
356
|
+
2. `status` MUST be one of `pending|applied|rejected`.
|
|
357
|
+
3. `processed_at` MUST be non-null only when status is `applied` or `rejected`.
|
|
358
|
+
4. `features[].feature_id` MUST use canonical feature-id format.
|
|
359
|
+
|
|
360
|
+
---
|
|
361
|
+
|
|
362
|
+
## 7. Tool and Service Contract
|
|
363
|
+
|
|
364
|
+
### 7.1 New Application Service
|
|
365
|
+
|
|
366
|
+
Create `ExecutionControlService` responsible for:
|
|
367
|
+
|
|
368
|
+
- submitting add-feature requests
|
|
369
|
+
- reading/listing execution requests
|
|
370
|
+
- draining pending requests for the active run
|
|
371
|
+
- marking requests applied/rejected
|
|
372
|
+
|
|
373
|
+
This service MUST own the runtime artifact contract.
|
|
374
|
+
|
|
375
|
+
### 7.2 New Tool Surface
|
|
376
|
+
|
|
377
|
+
Add runtime-oriented tools:
|
|
378
|
+
|
|
379
|
+
1. `runtime.execution_request_submit` (mutating, requires `operation_id`)
|
|
380
|
+
2. `runtime.execution_request_list` (read)
|
|
381
|
+
|
|
382
|
+
The supervisor may call the underlying service directly, but CLI and MCP/in-process surfaces MUST stay aligned through the same service contract.
|
|
383
|
+
|
|
384
|
+
### 7.3 Submission Input Contract
|
|
385
|
+
|
|
386
|
+
```json
|
|
387
|
+
{
|
|
388
|
+
"run_id": "run:123",
|
|
389
|
+
"owner_instance_id": "abcd1234ef56",
|
|
390
|
+
"request_type": "add_features",
|
|
391
|
+
"features": [{ "feature_id": "feature_a", "spec_path": "spec-files/outstanding/feature_a.md" }],
|
|
392
|
+
"operation_id": "execution_request_add__..."
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### 7.4 Supervisor Drain Contract
|
|
397
|
+
|
|
398
|
+
Internal drain/apply logic MUST be idempotent:
|
|
399
|
+
|
|
400
|
+
- replaying an already-applied request must not duplicate queue entries
|
|
401
|
+
- the same feature may appear in multiple requests, but only the first successful enrollment changes run state
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## 8. Supervisor Integration
|
|
406
|
+
|
|
407
|
+
### 8.1 Poll Points
|
|
408
|
+
|
|
409
|
+
The active supervisor MUST poll pending execution requests:
|
|
410
|
+
|
|
411
|
+
1. once after run startup and lease acquisition, before the first rebalance
|
|
412
|
+
2. once per orchestration iteration before `rebalanceActiveFeatures()`
|
|
413
|
+
3. once after wave completion before checking for loop exit
|
|
414
|
+
4. once immediately before final run shutdown
|
|
415
|
+
|
|
416
|
+
### 8.2 Queue Semantics
|
|
417
|
+
|
|
418
|
+
Applied requests MUST append new features to `state.queue` only. They MUST NOT directly create worker clusters.
|
|
419
|
+
|
|
420
|
+
Reason: all cluster creation must continue to flow through [`rebalanceActiveFeatures()`](/home/erictaurone/workspace/Aequitas/projects/Agentic-Orchestrator/apps/control-plane/src/supervisor/run-coordinator.ts#L424) so existing invariants remain intact.
|
|
421
|
+
|
|
422
|
+
### 8.3 Active Run Inheritance
|
|
423
|
+
|
|
424
|
+
Added features inherit:
|
|
425
|
+
|
|
426
|
+
- active run `run_id`
|
|
427
|
+
- provider/model/runtime selection
|
|
428
|
+
- execution mode
|
|
429
|
+
- max-active-features limit
|
|
430
|
+
- existing reconciler-lane ownership model
|
|
431
|
+
|
|
432
|
+
No new per-feature runtime config is introduced.
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## 9. File-Level Change Targets
|
|
437
|
+
|
|
438
|
+
### 9.1 New Files
|
|
439
|
+
|
|
440
|
+
- `apps/control-plane/src/application/services/execution-control-service.ts`
|
|
441
|
+
- `apps/control-plane/test/execution-control-service.spec.ts`
|
|
442
|
+
- `apps/control-plane/src/cli/add-command-handler.ts`
|
|
443
|
+
- `agentic/orchestrator/schemas/execution-control.schema.json`
|
|
444
|
+
- tool input/output schemas for runtime execution-request submission/listing
|
|
445
|
+
|
|
446
|
+
### 9.2 Modified Files
|
|
447
|
+
|
|
448
|
+
- `apps/control-plane/src/cli/types.ts`
|
|
449
|
+
- `apps/control-plane/src/cli/cli-argument-parser.ts`
|
|
450
|
+
- `apps/control-plane/src/cli/help-command-handler.ts`
|
|
451
|
+
- `apps/control-plane/src/interfaces/cli/bootstrap.ts`
|
|
452
|
+
- `apps/control-plane/src/cli/status-command-handler.ts`
|
|
453
|
+
- `apps/control-plane/src/cli/run-command-handler.ts`
|
|
454
|
+
- `apps/control-plane/src/core/path-layout.ts`
|
|
455
|
+
- `apps/control-plane/src/core/kernel.ts`
|
|
456
|
+
- `apps/control-plane/src/supervisor/run-coordinator.ts`
|
|
457
|
+
- `apps/control-plane/src/supervisor/runtime.ts`
|
|
458
|
+
- `apps/control-plane/src/supervisor/types.ts`
|
|
459
|
+
- `agentic/orchestrator/tools/catalog.json`
|
|
460
|
+
- `agentic/orchestrator/schemas/policy.schema.json` only if a small polling/grace configuration is added
|
|
461
|
+
- `AGENTS.md`
|
|
462
|
+
- `CLAUDE.md`
|
|
463
|
+
|
|
464
|
+
---
|
|
465
|
+
|
|
466
|
+
## 10. Implementation Milestones
|
|
467
|
+
|
|
468
|
+
### M49.1 — Control Artifact and Service
|
|
469
|
+
|
|
470
|
+
- add execution-control runtime artifact and schema
|
|
471
|
+
- implement `ExecutionControlService`
|
|
472
|
+
- add kernel delegation methods
|
|
473
|
+
|
|
474
|
+
### M49.2 — CLI Add Command
|
|
475
|
+
|
|
476
|
+
- add `aop add` command and parser/bootstrap/help wiring
|
|
477
|
+
- reuse canonical spec resolution/ingestion from `run`
|
|
478
|
+
- submit durable add-feature requests
|
|
479
|
+
|
|
480
|
+
### M49.3 — Supervisor Polling and Apply
|
|
481
|
+
|
|
482
|
+
- integrate deterministic polling into `RunCoordinator`
|
|
483
|
+
- append newly accepted features into the live queue
|
|
484
|
+
- persist per-request outcome
|
|
485
|
+
|
|
486
|
+
### M49.4 — Status and Observability
|
|
487
|
+
|
|
488
|
+
- surface pending/applied/rejected requests in `aop status`
|
|
489
|
+
- expose request summaries in dashboard/report payloads as needed
|
|
490
|
+
|
|
491
|
+
### M49.5 — Regression Coverage
|
|
492
|
+
|
|
493
|
+
- command-handler tests
|
|
494
|
+
- service tests
|
|
495
|
+
- supervisor integration tests
|
|
496
|
+
- status/reporting tests
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
## 11. Acceptance Criteria
|
|
501
|
+
|
|
502
|
+
Implementation is complete only when all of the following are true:
|
|
503
|
+
|
|
504
|
+
1. `aop add --fi <spec>` succeeds during an active run and persists a `pending` request.
|
|
505
|
+
2. The active supervisor applies that request without restarting.
|
|
506
|
+
3. The added feature receives a normal planner/builder/qa cluster through existing queue rebalance logic.
|
|
507
|
+
4. Duplicate additions are skipped deterministically and reported in request outcome.
|
|
508
|
+
5. `aop add` fails cleanly when no active run exists.
|
|
509
|
+
6. `aop status` shows execution-request visibility.
|
|
510
|
+
7. Existing `aop run`, `resume`, `attach`, `send`, collision handling, and reconciler behavior do not regress.
|
|
511
|
+
8. `npm run test`, `npm run lint`, `npm run typecheck`, and `npm run validate:mcp-contracts` pass.
|
|
512
|
+
|
|
513
|
+
---
|
|
514
|
+
|
|
515
|
+
## 12. Risks and Mitigations
|
|
516
|
+
|
|
517
|
+
### Risk 1 — Queue Duplication or Race Conditions
|
|
518
|
+
|
|
519
|
+
**Risk:** repeated add requests could duplicate queue entries.
|
|
520
|
+
|
|
521
|
+
**Mitigation:** persist requests under lock, apply them idempotently, and dedupe against active/queued/session-assigned features before enqueueing.
|
|
522
|
+
|
|
523
|
+
### Risk 2 — Orphan Requests After Run Exit
|
|
524
|
+
|
|
525
|
+
**Risk:** a request could be written just as the supervisor is shutting down.
|
|
526
|
+
|
|
527
|
+
**Mitigation:** require a fresh active lease at submission time and perform one final supervisor poll before lease release. If no active lease exists, reject submission.
|
|
528
|
+
|
|
529
|
+
### Risk 3 — Configuration Drift
|
|
530
|
+
|
|
531
|
+
**Risk:** users may expect added features to use different providers or execution modes.
|
|
532
|
+
|
|
533
|
+
**Mitigation:** make inheritance explicit in the CLI contract and reject override flags for `aop add`.
|
|
534
|
+
|
|
535
|
+
### Risk 4 — Architecture Drift Toward Multi-Run Semantics
|
|
536
|
+
|
|
537
|
+
**Risk:** implementation could accidentally reintroduce same-repo multi-run complexity.
|
|
538
|
+
|
|
539
|
+
**Mitigation:** keep single-run ownership as an explicit invariant and route all added work through the one active supervisor queue.
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
## 13. Verification Plan
|
|
544
|
+
|
|
545
|
+
- `apps/control-plane/test/execution-control-service.spec.ts`
|
|
546
|
+
- request submission, idempotency, status transition, stale-run rejection
|
|
547
|
+
- `apps/control-plane/test/supervisor.spec.ts`
|
|
548
|
+
- active run accepts added feature and later starts its cluster
|
|
549
|
+
- added feature queues behind `max_active_features`
|
|
550
|
+
- duplicate add request does not duplicate queue/session assignment
|
|
551
|
+
- `apps/control-plane/test/cli.unit.spec.ts`
|
|
552
|
+
- `aop add` parser/help/bootstrap wiring
|
|
553
|
+
- provider/execution-mode override rejection
|
|
554
|
+
- `apps/control-plane/test/status-command-handler.spec.ts`
|
|
555
|
+
- execution-request visibility in status output
|
|
556
|
+
|
|
557
|
+
Documentation-only note: if policy/config fields are introduced, update `validate:architecture` expectations and relevant docs in the same implementation change.
|