agentic-orchestrator 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +10 -0
- package/.prettierrc.json +24 -0
- package/CLAUDE.md +3 -2
- package/README.md +47 -46
- package/agentic/orchestrator/defaults/policy.defaults.yaml +1 -1
- package/agentic/orchestrator/prompts/planner.system.md +1 -0
- package/agentic/orchestrator/schemas/agents.schema.json +4 -21
- package/agentic/orchestrator/schemas/gates.schema.json +4 -19
- package/agentic/orchestrator/schemas/index.schema.json +3 -14
- package/agentic/orchestrator/schemas/multi-project.schema.json +2 -8
- package/agentic/orchestrator/schemas/plan.schema.json +6 -26
- package/agentic/orchestrator/schemas/policy.schema.json +19 -81
- package/agentic/orchestrator/schemas/policy.user.schema.json +1 -5
- package/agentic/orchestrator/schemas/qa_test_index.schema.json +5 -29
- package/agentic/orchestrator/schemas/state.schema.json +11 -61
- package/agentic/orchestrator/tools/catalog.json +33 -164
- package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/feature.delete.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/feature.get_context.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/feature.init.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/feature.log_append.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/input/feature.state_get.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/feature.state_patch.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/gates.run.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/locks.acquire.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/locks.release.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/performance.record_outcome.input.schema.json +10 -1
- package/agentic/orchestrator/tools/schemas/input/plan.get.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/plan.submit.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/plan.update.input.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/input/qa.test_index_get.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/qa.test_index_update.input.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/input/repo.apply_patch.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/repo.diff.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/repo.diff_bundle.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/repo.ensure_worktree.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/repo.read_file.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/repo.search.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/repo.status.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/report.feature_summary.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/output/collisions.scan.output.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/output/evidence.latest.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/feature.delete.output.schema.json +4 -20
- package/agentic/orchestrator/tools/schemas/output/feature.discover_specs.output.schema.json +2 -7
- package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +1 -8
- package/agentic/orchestrator/tools/schemas/output/feature.init.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/feature.log_append.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/output/feature.state_get.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/feature.state_patch.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/gates.list.output.schema.json +2 -7
- package/agentic/orchestrator/tools/schemas/output/gates.run.output.schema.json +1 -8
- package/agentic/orchestrator/tools/schemas/output/locks.acquire.output.schema.json +1 -7
- package/agentic/orchestrator/tools/schemas/output/locks.release.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/performance.get_analytics.output.schema.json +22 -2
- package/agentic/orchestrator/tools/schemas/output/plan.get.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/plan.submit.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/plan.update.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/qa.test_index_get.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/qa.test_index_update.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/repo.apply_patch.output.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/output/repo.diff.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/repo.diff_bundle.output.schema.json +1 -7
- package/agentic/orchestrator/tools/schemas/output/repo.ensure_worktree.output.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/output/repo.read_file.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/repo.search.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/repo.status.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +1 -4
- package/apps/control-plane/scripts/validate-architecture-rules.mjs +16 -5
- package/apps/control-plane/scripts/validate-docker-mcp-contract.mjs +30 -8
- package/apps/control-plane/scripts/validate-mcp-contracts.ts +13 -7
- package/apps/control-plane/src/application/adapters/adapter-registry.ts +35 -15
- package/apps/control-plane/src/application/multi-project-loader.ts +27 -10
- package/apps/control-plane/src/application/services/activity-monitor-service.ts +26 -14
- package/apps/control-plane/src/application/services/collision-queue-service.ts +31 -17
- package/apps/control-plane/src/application/services/cost-tracking-service.ts +23 -16
- package/apps/control-plane/src/application/services/dependency-scheduler-service.ts +12 -4
- package/apps/control-plane/src/application/services/feature-deletion-service.ts +94 -58
- package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +19 -13
- package/apps/control-plane/src/application/services/feature-state-service.ts +29 -19
- package/apps/control-plane/src/application/services/gate-interpolation-service.ts +7 -2
- package/apps/control-plane/src/application/services/gate-service.ts +64 -41
- package/apps/control-plane/src/application/services/instance-isolation-service.ts +1 -1
- package/apps/control-plane/src/application/services/issue-tracker-service.ts +49 -38
- package/apps/control-plane/src/application/services/lock-service.ts +75 -49
- package/apps/control-plane/src/application/services/merge-service.ts +91 -50
- package/apps/control-plane/src/application/services/notifier-service.ts +42 -20
- package/apps/control-plane/src/application/services/patch-service.ts +73 -44
- package/apps/control-plane/src/application/services/performance-analytics-service.ts +8 -6
- package/apps/control-plane/src/application/services/plan-service.ts +148 -89
- package/apps/control-plane/src/application/services/policy-loader-service.ts +10 -4
- package/apps/control-plane/src/application/services/pr-monitor-service.ts +33 -14
- package/apps/control-plane/src/application/services/qa-index-service.ts +20 -16
- package/apps/control-plane/src/application/services/reactions-service.ts +30 -15
- package/apps/control-plane/src/application/services/reporting-service.ts +16 -12
- package/apps/control-plane/src/application/services/run-lease-service.ts +138 -81
- package/apps/control-plane/src/application/tools/tool-metadata.ts +5 -5
- package/apps/control-plane/src/application/tools/tool-router.ts +6 -3
- package/apps/control-plane/src/cli/aop.ts +2 -2
- package/apps/control-plane/src/cli/attach-command-handler.ts +9 -9
- package/apps/control-plane/src/cli/cleanup-command-handler.ts +16 -11
- package/apps/control-plane/src/cli/cli-argument-parser.ts +6 -3
- package/apps/control-plane/src/cli/dashboard-command-handler.ts +28 -8
- package/apps/control-plane/src/cli/delete-command-handler.ts +7 -7
- package/apps/control-plane/src/cli/help-command-handler.ts +61 -32
- package/apps/control-plane/src/cli/init-command-handler.ts +110 -54
- package/apps/control-plane/src/cli/io.ts +7 -3
- package/apps/control-plane/src/cli/resume-command-handler.ts +21 -13
- package/apps/control-plane/src/cli/retry-command-handler.ts +12 -11
- package/apps/control-plane/src/cli/run-command-handler.ts +12 -8
- package/apps/control-plane/src/cli/send-command-handler.ts +6 -6
- package/apps/control-plane/src/cli/spec-ingestion-service.ts +14 -8
- package/apps/control-plane/src/cli/spec-input-resolver.ts +6 -1
- package/apps/control-plane/src/cli/spec-utils.ts +2 -2
- package/apps/control-plane/src/cli/status-command-handler.ts +13 -12
- package/apps/control-plane/src/cli/tooling.ts +3 -3
- package/apps/control-plane/src/cli/types.ts +1 -1
- package/apps/control-plane/src/core/collisions.ts +27 -10
- package/apps/control-plane/src/core/constants.ts +13 -7
- package/apps/control-plane/src/core/error-codes.ts +1 -1
- package/apps/control-plane/src/core/fs.ts +11 -5
- package/apps/control-plane/src/core/gates.ts +53 -27
- package/apps/control-plane/src/core/git.ts +18 -6
- package/apps/control-plane/src/core/kernel.ts +515 -227
- package/apps/control-plane/src/core/patch.ts +7 -3
- package/apps/control-plane/src/core/path-layout.ts +5 -1
- package/apps/control-plane/src/core/path-rules.ts +19 -5
- package/apps/control-plane/src/core/qa-index.ts +26 -12
- package/apps/control-plane/src/core/response.ts +9 -6
- package/apps/control-plane/src/core/schemas.ts +29 -10
- package/apps/control-plane/src/core/tool-caller.ts +1 -1
- package/apps/control-plane/src/core/workspace-hooks.ts +5 -5
- package/apps/control-plane/src/index.ts +3 -9
- package/apps/control-plane/src/interfaces/cli/bootstrap.ts +69 -32
- package/apps/control-plane/src/mcp/kernel-tool-executor.ts +7 -3
- package/apps/control-plane/src/mcp/mcp-server-adapter.ts +12 -10
- package/apps/control-plane/src/mcp/operation-ledger.ts +18 -8
- package/apps/control-plane/src/mcp/protocol-contract.ts +2 -2
- package/apps/control-plane/src/mcp/runtime-factory.ts +15 -6
- package/apps/control-plane/src/mcp/token-auth-verifier.ts +3 -2
- package/apps/control-plane/src/mcp/token-claims-validator.ts +11 -7
- package/apps/control-plane/src/mcp/tool-authorizer.ts +1 -3
- package/apps/control-plane/src/mcp/tool-client.ts +17 -5
- package/apps/control-plane/src/mcp/tool-contract-validator.ts +17 -8
- package/apps/control-plane/src/mcp/tool-registry-loader.ts +7 -3
- package/apps/control-plane/src/mcp/tool-runtime.ts +66 -39
- package/apps/control-plane/src/mcp/tools-markdown-generator.ts +6 -1
- package/apps/control-plane/src/providers/providers.ts +72 -48
- package/apps/control-plane/src/supervisor/build-wave-executor.ts +44 -25
- package/apps/control-plane/src/supervisor/planning-wave-executor.ts +46 -33
- package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +1 -1
- package/apps/control-plane/src/supervisor/qa-wave-executor.ts +38 -23
- package/apps/control-plane/src/supervisor/run-coordinator.ts +71 -36
- package/apps/control-plane/src/supervisor/runtime.ts +59 -35
- package/apps/control-plane/src/supervisor/session-orchestrator.ts +48 -31
- package/apps/control-plane/src/supervisor/types.ts +22 -7
- package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -20
- package/apps/control-plane/test/activity-monitor.spec.ts +54 -30
- package/apps/control-plane/test/adapter-registry.spec.ts +5 -5
- package/apps/control-plane/test/aop.spec.ts +4 -4
- package/apps/control-plane/test/batch-operations.spec.ts +20 -18
- package/apps/control-plane/test/bootstrap-attach.spec.ts +52 -19
- package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +58 -27
- package/apps/control-plane/test/bootstrap.spec.ts +72 -40
- package/apps/control-plane/test/cleanup-command.spec.ts +86 -32
- package/apps/control-plane/test/cli-helpers.spec.ts +119 -66
- package/apps/control-plane/test/cli.spec.ts +1 -1
- package/apps/control-plane/test/cli.unit.spec.ts +226 -167
- package/apps/control-plane/test/collision-queue.spec.ts +49 -40
- package/apps/control-plane/test/collisions.spec.ts +30 -30
- package/apps/control-plane/test/core-utils.spec.ts +29 -15
- package/apps/control-plane/test/cost-tracking.spec.ts +38 -22
- package/apps/control-plane/test/dashboard-api.integration.spec.ts +68 -36
- package/apps/control-plane/test/dashboard-client.spec.ts +18 -12
- package/apps/control-plane/test/dashboard-command.spec.ts +11 -7
- package/apps/control-plane/test/delete-command-handler.spec.ts +49 -41
- package/apps/control-plane/test/dependency-scheduler.spec.ts +47 -20
- package/apps/control-plane/test/epoch-tracking.spec.ts +9 -9
- package/apps/control-plane/test/feature-deletion-service.spec.ts +60 -52
- package/apps/control-plane/test/feature-lifecycle.spec.ts +36 -17
- package/apps/control-plane/test/gates.spec.ts +101 -81
- package/apps/control-plane/test/git-spawn-error.spec.ts +1 -1
- package/apps/control-plane/test/helpers.ts +10 -6
- package/apps/control-plane/test/incremental-gates.spec.ts +59 -20
- package/apps/control-plane/test/init-wizard.spec.ts +162 -67
- package/apps/control-plane/test/instance-isolation.spec.ts +43 -10
- package/apps/control-plane/test/issue-tracker.spec.ts +368 -128
- package/apps/control-plane/test/kernel-collision-replay.spec.ts +50 -29
- package/apps/control-plane/test/kernel.branches.spec.ts +64 -40
- package/apps/control-plane/test/kernel.coverage.spec.ts +85 -49
- package/apps/control-plane/test/kernel.coverage2.spec.ts +109 -65
- package/apps/control-plane/test/kernel.spec.ts +134 -51
- package/apps/control-plane/test/lock-service.spec.ts +92 -68
- package/apps/control-plane/test/mcp-helpers.spec.ts +53 -39
- package/apps/control-plane/test/mcp.spec.ts +231 -115
- package/apps/control-plane/test/merge-service.spec.ts +142 -94
- package/apps/control-plane/test/multi-project.spec.ts +28 -22
- package/apps/control-plane/test/notifier-service.spec.ts +136 -92
- package/apps/control-plane/test/parallel-gates.spec.ts +51 -35
- package/apps/control-plane/test/patch-service.spec.ts +128 -48
- package/apps/control-plane/test/performance-analytics.spec.ts +99 -63
- package/apps/control-plane/test/plan-service.spec.ts +50 -39
- package/apps/control-plane/test/planning-wave-executor.spec.ts +95 -71
- package/apps/control-plane/test/policy-loader-service.spec.ts +41 -19
- package/apps/control-plane/test/pr-monitor.spec.ts +113 -64
- package/apps/control-plane/test/providers.spec.ts +133 -102
- package/apps/control-plane/test/qa-index-service.spec.ts +31 -33
- package/apps/control-plane/test/qa-index.spec.ts +58 -61
- package/apps/control-plane/test/reactions.spec.ts +88 -45
- package/apps/control-plane/test/response.spec.ts +5 -5
- package/apps/control-plane/test/resume-command.spec.ts +121 -80
- package/apps/control-plane/test/run-coordinator.spec.ts +205 -136
- package/apps/control-plane/test/schema-date-time.spec.ts +49 -41
- package/apps/control-plane/test/service-retry-paths.spec.ts +77 -57
- package/apps/control-plane/test/services.spec.ts +147 -129
- package/apps/control-plane/test/session-management.spec.ts +136 -74
- package/apps/control-plane/test/spec-ingestion.spec.ts +23 -21
- package/apps/control-plane/test/spec-input-resolver.spec.ts +11 -10
- package/apps/control-plane/test/supervisor-collaborators.spec.ts +168 -121
- package/apps/control-plane/test/supervisor.calltool.spec.ts +21 -18
- package/apps/control-plane/test/supervisor.spec.ts +67 -43
- package/apps/control-plane/test/supervisor.unit.spec.ts +195 -126
- package/apps/control-plane/test/token-auth-verifier.spec.ts +29 -14
- package/apps/control-plane/test/tool-registry-loader.spec.ts +51 -27
- package/apps/control-plane/test/tool-runtime.spec.ts +63 -46
- package/apps/control-plane/test/worker-decision-loop.spec.ts +143 -122
- package/apps/control-plane/test/workspace-hooks.spec.ts +61 -23
- package/apps/control-plane/tsconfig.build.json +2 -7
- package/apps/control-plane/tsconfig.json +1 -5
- package/apps/control-plane/vitest.config.ts +7 -7
- package/dist/apps/control-plane/application/adapters/adapter-registry.js +12 -5
- package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -1
- package/dist/apps/control-plane/application/multi-project-loader.js +26 -9
- package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -1
- package/dist/apps/control-plane/application/services/activity-monitor-service.js +7 -7
- package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/collision-queue-service.js +7 -7
- package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/cost-tracking-service.js +6 -8
- package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-deletion-service.js +37 -29
- package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +10 -10
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-state-service.js +11 -11
- package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/gate-interpolation-service.js +3 -1
- package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/gate-service.js +26 -26
- package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/instance-isolation-service.js +1 -1
- package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/issue-tracker-service.js +25 -15
- package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/lock-service.js +32 -32
- package/dist/apps/control-plane/application/services/lock-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/merge-service.js +41 -27
- package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/notifier-service.js +29 -15
- package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/patch-service.js +21 -19
- package/dist/apps/control-plane/application/services/patch-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/performance-analytics-service.js +4 -4
- package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/plan-service.js +33 -33
- package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/policy-loader-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/pr-monitor-service.js +23 -11
- package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/qa-index-service.js +11 -11
- package/dist/apps/control-plane/application/services/qa-index-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/reactions-service.js +13 -9
- package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/reporting-service.js +11 -9
- package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/run-lease-service.js +34 -33
- package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
- package/dist/apps/control-plane/application/tools/tool-metadata.js +2 -2
- package/dist/apps/control-plane/application/tools/tool-router.js.map +1 -1
- package/dist/apps/control-plane/cli/attach-command-handler.js +9 -9
- package/dist/apps/control-plane/cli/cleanup-command-handler.js +11 -9
- package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/cli-argument-parser.js +4 -3
- package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
- package/dist/apps/control-plane/cli/dashboard-command-handler.js +23 -7
- package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/delete-command-handler.js +7 -7
- package/dist/apps/control-plane/cli/help-command-handler.js +58 -30
- package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/init-command-handler.js +44 -33
- package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/io.js +2 -2
- package/dist/apps/control-plane/cli/io.js.map +1 -1
- package/dist/apps/control-plane/cli/resume-command-handler.js +9 -9
- package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/retry-command-handler.js +12 -11
- package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/run-command-handler.js +12 -8
- package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/send-command-handler.js +6 -6
- package/dist/apps/control-plane/cli/spec-ingestion-service.js +10 -8
- package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-input-resolver.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
- package/dist/apps/control-plane/cli/status-command-handler.js +8 -8
- package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/tooling.js +1 -1
- package/dist/apps/control-plane/core/collisions.js +11 -8
- package/dist/apps/control-plane/core/collisions.js.map +1 -1
- package/dist/apps/control-plane/core/constants.js +13 -7
- package/dist/apps/control-plane/core/constants.js.map +1 -1
- package/dist/apps/control-plane/core/error-codes.js +1 -1
- package/dist/apps/control-plane/core/fs.js.map +1 -1
- package/dist/apps/control-plane/core/gates.d.ts +2 -2
- package/dist/apps/control-plane/core/gates.js +26 -19
- package/dist/apps/control-plane/core/gates.js.map +1 -1
- package/dist/apps/control-plane/core/git.js +3 -3
- package/dist/apps/control-plane/core/git.js.map +1 -1
- package/dist/apps/control-plane/core/kernel.d.ts +1 -0
- package/dist/apps/control-plane/core/kernel.js +134 -81
- package/dist/apps/control-plane/core/kernel.js.map +1 -1
- package/dist/apps/control-plane/core/patch.js +7 -3
- package/dist/apps/control-plane/core/patch.js.map +1 -1
- package/dist/apps/control-plane/core/path-layout.d.ts +1 -0
- package/dist/apps/control-plane/core/path-layout.js +4 -1
- package/dist/apps/control-plane/core/path-layout.js.map +1 -1
- package/dist/apps/control-plane/core/path-rules.js +3 -1
- package/dist/apps/control-plane/core/path-rules.js.map +1 -1
- package/dist/apps/control-plane/core/qa-index.js +5 -5
- package/dist/apps/control-plane/core/qa-index.js.map +1 -1
- package/dist/apps/control-plane/core/response.js +3 -3
- package/dist/apps/control-plane/core/response.js.map +1 -1
- package/dist/apps/control-plane/core/schemas.js +10 -6
- package/dist/apps/control-plane/core/schemas.js.map +1 -1
- package/dist/apps/control-plane/core/workspace-hooks.js +3 -3
- package/dist/apps/control-plane/index.d.ts +1 -1
- package/dist/apps/control-plane/index.js +1 -1
- package/dist/apps/control-plane/index.js.map +1 -1
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js +31 -20
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js +1 -1
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
- package/dist/apps/control-plane/mcp/mcp-server-adapter.js +6 -7
- package/dist/apps/control-plane/mcp/mcp-server-adapter.js.map +1 -1
- package/dist/apps/control-plane/mcp/operation-ledger.js +5 -5
- package/dist/apps/control-plane/mcp/operation-ledger.js.map +1 -1
- package/dist/apps/control-plane/mcp/protocol-contract.js +2 -2
- package/dist/apps/control-plane/mcp/runtime-factory.js +2 -2
- package/dist/apps/control-plane/mcp/runtime-factory.js.map +1 -1
- package/dist/apps/control-plane/mcp/token-auth-verifier.js +1 -1
- package/dist/apps/control-plane/mcp/token-auth-verifier.js.map +1 -1
- package/dist/apps/control-plane/mcp/token-claims-validator.js +5 -5
- package/dist/apps/control-plane/mcp/token-claims-validator.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-authorizer.js +1 -3
- package/dist/apps/control-plane/mcp/tool-authorizer.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-client.js +2 -2
- package/dist/apps/control-plane/mcp/tool-client.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-contract-validator.js +3 -3
- package/dist/apps/control-plane/mcp/tool-contract-validator.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-registry-loader.js +1 -1
- package/dist/apps/control-plane/mcp/tool-registry-loader.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-runtime.js +17 -17
- package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
- package/dist/apps/control-plane/mcp/tools-markdown-generator.js +6 -1
- package/dist/apps/control-plane/mcp/tools-markdown-generator.js.map +1 -1
- package/dist/apps/control-plane/providers/providers.d.ts +1 -1
- package/dist/apps/control-plane/providers/providers.js +31 -34
- package/dist/apps/control-plane/providers/providers.js.map +1 -1
- package/dist/apps/control-plane/supervisor/build-wave-executor.js +12 -12
- package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js +19 -16
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +1 -1
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js +13 -13
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/run-coordinator.js +37 -20
- package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/runtime.js +25 -21
- package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
- package/dist/apps/control-plane/supervisor/session-orchestrator.js +29 -23
- package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/types.d.ts +3 -3
- package/dist/apps/control-plane/supervisor/types.js.map +1 -1
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js +14 -16
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
- package/eslint.config.mjs +20 -20
- package/example-configurations/README.md +1 -1
- package/example-configurations/java/agents.yaml +3 -3
- package/example-configurations/java/policy.yaml +1 -1
- package/example-configurations/node/agents.yaml +3 -3
- package/example-configurations/node/policy.yaml +1 -1
- package/package.json +10 -5
- package/packages/web-dashboard/next.config.js +2 -2
- package/packages/web-dashboard/src/app/api/actions/route.ts +25 -9
- package/packages/web-dashboard/src/app/api/events/route.ts +20 -6
- package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +88 -37
- package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +8 -5
- package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +27 -9
- package/packages/web-dashboard/src/app/api/features/[id]/route.ts +5 -2
- package/packages/web-dashboard/src/app/api/projects/route.ts +5 -5
- package/packages/web-dashboard/src/app/globals.css +10 -2
- package/packages/web-dashboard/src/app/page.tsx +100 -37
- package/packages/web-dashboard/src/lib/aop-client.ts +68 -37
- package/packages/web-dashboard/src/lib/multi-project-config.ts +28 -7
- package/packages/web-dashboard/src/lib/orchestrator-tools.ts +59 -36
- package/packages/web-dashboard/tsconfig.json +3 -11
- package/scripts/nx-safe.mjs +10 -10
- package/spec-files/completed/agentic_orchestrator_cli_delete_command_spec.md +5 -0
- package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +187 -90
- package/spec-files/completed/agentic_orchestrator_init_policy_ux_simplification_spec.md +49 -16
- package/spec-files/completed/agentic_orchestrator_mcp_formalization_spec.md +24 -1
- package/spec-files/completed/agentic_orchestrator_single_global_orchestrator_spec.md +9 -0
- package/spec-files/completed/agentic_orchestrator_spec.md +171 -75
- package/spec-files/completed/agentic_orchestrator_validator_hardening_spec.md +25 -17
- package/spec-files/outstanding/agentic_orchestrator_artifact_database_publishing_spec.md +40 -5
- package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +23 -12
- package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +16 -4
- package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +42 -2
- package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +209 -130
- package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +56 -3
- package/spec-files/outstanding/agentic_orchestrator_productization_commercial_spec.md +77 -10
- package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +29 -14
- package/spec-files/progress.md +186 -175
- package/tsconfig.json +2 -8
|
@@ -8,11 +8,16 @@ import { fileURLToPath } from 'node:url';
|
|
|
8
8
|
import YAML from 'yaml';
|
|
9
9
|
import { SchemaRegistry } from '../core/schemas.js';
|
|
10
10
|
import { loadComposedPolicy } from '../application/services/policy-loader-service.js';
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
AGENT_PROVIDER_SLOT,
|
|
13
|
+
SCM_PROVIDER_SLOT,
|
|
14
|
+
globalAdapterRegistry,
|
|
15
|
+
} from '../application/adapters/adapter-registry.js';
|
|
12
16
|
|
|
13
17
|
const execFileAsync = promisify(execFile);
|
|
14
18
|
const MODULE_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
15
19
|
const TEMPLATE_ROOT = path.resolve(MODULE_DIR, '../../../../agentic/orchestrator');
|
|
20
|
+
const GENERATED_CONFIG_ROOT = 'config/agentic/orchestrator';
|
|
16
21
|
const DEFAULT_AGENT_PROVIDER = 'custom';
|
|
17
22
|
const DEFAULT_AGENT_MODEL = 'local-default';
|
|
18
23
|
const DEFAULT_SCM_PROVIDER = 'github';
|
|
@@ -91,7 +96,7 @@ async function detectGitContext(repoRoot: string): Promise<GitContext> {
|
|
|
91
96
|
const { stdout } = await execFileAsync(
|
|
92
97
|
'git',
|
|
93
98
|
['-C', repoRoot, 'symbolic-ref', 'refs/remotes/origin/HEAD', '--short'],
|
|
94
|
-
{ timeout: 3000 }
|
|
99
|
+
{ timeout: 3000 },
|
|
95
100
|
);
|
|
96
101
|
const ref = stdout.trim();
|
|
97
102
|
const parts = ref.split('/');
|
|
@@ -113,7 +118,7 @@ async function detectTestFramework(repoRoot: string): Promise<TestFramework> {
|
|
|
113
118
|
: {}),
|
|
114
119
|
...(typeof pkg.devDependencies === 'object' && pkg.devDependencies !== null
|
|
115
120
|
? (pkg.devDependencies as Record<string, unknown>)
|
|
116
|
-
: {})
|
|
121
|
+
: {}),
|
|
117
122
|
};
|
|
118
123
|
if ('vitest' in deps) {
|
|
119
124
|
return 'vitest';
|
|
@@ -130,7 +135,7 @@ async function detectTestFramework(repoRoot: string): Promise<TestFramework> {
|
|
|
130
135
|
['pyproject.toml', 'pytest'],
|
|
131
136
|
['pom.xml', 'maven'],
|
|
132
137
|
['build.gradle', 'gradle'],
|
|
133
|
-
['build.gradle.kts', 'gradle']
|
|
138
|
+
['build.gradle.kts', 'gradle'],
|
|
134
139
|
];
|
|
135
140
|
|
|
136
141
|
for (const [file, framework] of buildFileChecks) {
|
|
@@ -145,7 +150,10 @@ async function detectTestFramework(repoRoot: string): Promise<TestFramework> {
|
|
|
145
150
|
return 'vitest';
|
|
146
151
|
}
|
|
147
152
|
|
|
148
|
-
function buildGateCommands(framework: TestFramework): {
|
|
153
|
+
function buildGateCommands(framework: TestFramework): {
|
|
154
|
+
test: string[];
|
|
155
|
+
testWithCoverage: string[];
|
|
156
|
+
} {
|
|
149
157
|
switch (framework) {
|
|
150
158
|
case 'jest':
|
|
151
159
|
return { test: ['npx', 'jest'], testWithCoverage: ['npx', 'jest', '--coverage'] };
|
|
@@ -156,7 +164,10 @@ function buildGateCommands(framework: TestFramework): { test: string[]; testWith
|
|
|
156
164
|
case 'gradle':
|
|
157
165
|
return { test: ['./gradlew', 'test'], testWithCoverage: ['./gradlew', 'check'] };
|
|
158
166
|
default:
|
|
159
|
-
return {
|
|
167
|
+
return {
|
|
168
|
+
test: ['npx', 'vitest', 'run'],
|
|
169
|
+
testWithCoverage: ['npx', 'vitest', 'run', '--coverage'],
|
|
170
|
+
};
|
|
160
171
|
}
|
|
161
172
|
}
|
|
162
173
|
|
|
@@ -169,7 +180,8 @@ function escapeYamlString(value: string): string {
|
|
|
169
180
|
}
|
|
170
181
|
|
|
171
182
|
function generateLeanPolicyYaml(wizard: WizardConfig): string {
|
|
172
|
-
const notificationsEnabled =
|
|
183
|
+
const notificationsEnabled =
|
|
184
|
+
wizard.notifications.desktop || wizard.notifications.slack || wizard.notifications.webhook;
|
|
173
185
|
return `version: 1
|
|
174
186
|
worktree:
|
|
175
187
|
base_branch: ${wizard.baseBranch}
|
|
@@ -196,7 +208,8 @@ notifications:
|
|
|
196
208
|
}
|
|
197
209
|
|
|
198
210
|
function generateFullPolicyYaml(context: GitContext, wizard: WizardConfig): string {
|
|
199
|
-
const notificationsEnabled =
|
|
211
|
+
const notificationsEnabled =
|
|
212
|
+
wizard.notifications.desktop || wizard.notifications.slack || wizard.notifications.webhook;
|
|
200
213
|
return `version: 1
|
|
201
214
|
commit_policy:
|
|
202
215
|
allow_commit: false
|
|
@@ -222,7 +235,7 @@ locks:
|
|
|
222
235
|
multiplier: 2
|
|
223
236
|
jitter_ms: 150
|
|
224
237
|
protected_areas:
|
|
225
|
-
- agentic/orchestrator/policy.yaml
|
|
238
|
+
- config/agentic/orchestrator/policy.yaml
|
|
226
239
|
required_modes:
|
|
227
240
|
- fast
|
|
228
241
|
- full
|
|
@@ -392,11 +405,11 @@ function generateAgentsYaml(wizard: WizardConfig): string {
|
|
|
392
405
|
return `version: 1
|
|
393
406
|
roles:
|
|
394
407
|
planner:
|
|
395
|
-
system_prompt_path: agentic/orchestrator/prompts/planner.system.md
|
|
408
|
+
system_prompt_path: config/agentic/orchestrator/prompts/planner.system.md
|
|
396
409
|
builder:
|
|
397
|
-
system_prompt_path: agentic/orchestrator/prompts/builder.system.md
|
|
410
|
+
system_prompt_path: config/agentic/orchestrator/prompts/builder.system.md
|
|
398
411
|
qa:
|
|
399
|
-
system_prompt_path: agentic/orchestrator/prompts/qa.system.md
|
|
412
|
+
system_prompt_path: config/agentic/orchestrator/prompts/qa.system.md
|
|
400
413
|
missing_prompt_behavior: ignore
|
|
401
414
|
runtime:
|
|
402
415
|
default_provider: ${wizard.defaultProvider}
|
|
@@ -434,26 +447,45 @@ function parseInteger(raw: string, fallback: number, min: number, max: number):
|
|
|
434
447
|
|
|
435
448
|
function parseFramework(raw: string, fallback: TestFramework): TestFramework {
|
|
436
449
|
const value = raw.trim().toLowerCase();
|
|
437
|
-
if (
|
|
450
|
+
if (
|
|
451
|
+
value === 'vitest' ||
|
|
452
|
+
value === 'jest' ||
|
|
453
|
+
value === 'pytest' ||
|
|
454
|
+
value === 'maven' ||
|
|
455
|
+
value === 'gradle'
|
|
456
|
+
) {
|
|
438
457
|
return value;
|
|
439
458
|
}
|
|
440
459
|
return fallback;
|
|
441
460
|
}
|
|
442
461
|
|
|
443
|
-
function parseNotificationChannels(raw: string): {
|
|
462
|
+
function parseNotificationChannels(raw: string): {
|
|
463
|
+
desktop: boolean;
|
|
464
|
+
slack: boolean;
|
|
465
|
+
webhook: boolean;
|
|
466
|
+
} {
|
|
444
467
|
const normalized = raw.trim().toLowerCase();
|
|
445
468
|
if (!normalized || normalized === 'none') {
|
|
446
469
|
return { desktop: false, slack: false, webhook: false };
|
|
447
470
|
}
|
|
448
|
-
const channels = new Set(
|
|
471
|
+
const channels = new Set(
|
|
472
|
+
normalized
|
|
473
|
+
.split(',')
|
|
474
|
+
.map((token) => token.trim())
|
|
475
|
+
.filter((token) => token.length > 0),
|
|
476
|
+
);
|
|
449
477
|
return {
|
|
450
478
|
desktop: channels.has('desktop'),
|
|
451
479
|
slack: channels.has('slack'),
|
|
452
|
-
webhook: channels.has('webhook')
|
|
480
|
+
webhook: channels.has('webhook'),
|
|
453
481
|
};
|
|
454
482
|
}
|
|
455
483
|
|
|
456
|
-
function parseAdapterName(
|
|
484
|
+
function parseAdapterName(
|
|
485
|
+
raw: string,
|
|
486
|
+
supportedNames: ReadonlySet<string>,
|
|
487
|
+
fallback: string,
|
|
488
|
+
): string {
|
|
457
489
|
const value = raw.trim();
|
|
458
490
|
if (supportedNames.has(value)) {
|
|
459
491
|
return value;
|
|
@@ -471,7 +503,11 @@ function resolveActivityDetector(defaultProvider: string): string {
|
|
|
471
503
|
return 'process-heuristic';
|
|
472
504
|
}
|
|
473
505
|
|
|
474
|
-
async function askWithDefault(
|
|
506
|
+
async function askWithDefault(
|
|
507
|
+
prompt: PromptSession,
|
|
508
|
+
label: string,
|
|
509
|
+
defaultValue: string,
|
|
510
|
+
): Promise<string> {
|
|
475
511
|
const raw = (await prompt.question(`${label} [${defaultValue}]: `)).trim();
|
|
476
512
|
return raw.length > 0 ? raw : defaultValue;
|
|
477
513
|
}
|
|
@@ -484,36 +520,40 @@ async function collectWizardConfig(
|
|
|
484
520
|
defaultModel: string;
|
|
485
521
|
defaultScmProvider: string;
|
|
486
522
|
},
|
|
487
|
-
promptFactory: () => PromptSession
|
|
523
|
+
promptFactory: () => PromptSession,
|
|
488
524
|
): Promise<WizardConfig> {
|
|
489
525
|
const prompt = promptFactory();
|
|
490
526
|
try {
|
|
491
|
-
const supportedProviders = new Set(
|
|
492
|
-
|
|
527
|
+
const supportedProviders = new Set(
|
|
528
|
+
globalAdapterRegistry.list(AGENT_PROVIDER_SLOT.name).map((adapter) => adapter.name),
|
|
529
|
+
);
|
|
530
|
+
const supportedScmProviders = new Set(
|
|
531
|
+
globalAdapterRegistry.list(SCM_PROVIDER_SLOT.name).map((adapter) => adapter.name),
|
|
532
|
+
);
|
|
493
533
|
|
|
494
534
|
const baseBranch = await askWithDefault(prompt, 'Worktree base branch', defaults.branch);
|
|
495
535
|
const defaultProviderRaw = await askWithDefault(
|
|
496
536
|
prompt,
|
|
497
537
|
`Default agent provider (${Array.from(supportedProviders).join('|')})`,
|
|
498
|
-
defaults.defaultProvider
|
|
538
|
+
defaults.defaultProvider,
|
|
499
539
|
);
|
|
500
540
|
const defaultModel = await askWithDefault(prompt, 'Default model', defaults.defaultModel);
|
|
501
541
|
const scmProviderRaw = await askWithDefault(
|
|
502
542
|
prompt,
|
|
503
543
|
`SCM provider (${Array.from(supportedScmProviders).join('|')})`,
|
|
504
|
-
defaults.defaultScmProvider
|
|
544
|
+
defaults.defaultScmProvider,
|
|
505
545
|
);
|
|
506
546
|
const maxParallelGateRunsRaw = await askWithDefault(prompt, 'Max parallel gate runs', '3');
|
|
507
547
|
const dashboardPortRaw = await askWithDefault(prompt, 'Dashboard port', '3000');
|
|
508
548
|
const channelsRaw = await askWithDefault(
|
|
509
549
|
prompt,
|
|
510
550
|
'Notification channels (comma-separated: desktop,slack,webhook,none)',
|
|
511
|
-
'none'
|
|
551
|
+
'none',
|
|
512
552
|
);
|
|
513
553
|
const frameworkRaw = await askWithDefault(
|
|
514
554
|
prompt,
|
|
515
555
|
'Test framework (vitest|jest|pytest|maven|gradle)',
|
|
516
|
-
defaults.framework
|
|
556
|
+
defaults.framework,
|
|
517
557
|
);
|
|
518
558
|
|
|
519
559
|
const channels = parseNotificationChannels(channelsRaw);
|
|
@@ -529,9 +569,17 @@ async function collectWizardConfig(
|
|
|
529
569
|
|
|
530
570
|
return {
|
|
531
571
|
baseBranch,
|
|
532
|
-
defaultProvider: parseAdapterName(
|
|
572
|
+
defaultProvider: parseAdapterName(
|
|
573
|
+
defaultProviderRaw,
|
|
574
|
+
supportedProviders,
|
|
575
|
+
defaults.defaultProvider,
|
|
576
|
+
),
|
|
533
577
|
defaultModel,
|
|
534
|
-
scmProvider: parseAdapterName(
|
|
578
|
+
scmProvider: parseAdapterName(
|
|
579
|
+
scmProviderRaw,
|
|
580
|
+
supportedScmProviders,
|
|
581
|
+
defaults.defaultScmProvider,
|
|
582
|
+
),
|
|
535
583
|
maxParallelGateRuns: parseInteger(maxParallelGateRunsRaw, 3, 1, 64),
|
|
536
584
|
dashboardPort: parseInteger(dashboardPortRaw, 3000, 1, 65535),
|
|
537
585
|
framework: parseFramework(frameworkRaw, defaults.framework),
|
|
@@ -540,8 +588,8 @@ async function collectWizardConfig(
|
|
|
540
588
|
slack: channels.slack,
|
|
541
589
|
webhook: channels.webhook,
|
|
542
590
|
slackWebhook,
|
|
543
|
-
webhookUrl
|
|
544
|
-
}
|
|
591
|
+
webhookUrl,
|
|
592
|
+
},
|
|
545
593
|
};
|
|
546
594
|
} finally {
|
|
547
595
|
prompt.close();
|
|
@@ -550,7 +598,7 @@ async function collectWizardConfig(
|
|
|
550
598
|
|
|
551
599
|
async function loadTemplateFiles(
|
|
552
600
|
subdir: 'prompts',
|
|
553
|
-
matcher: (filename: string) => boolean
|
|
601
|
+
matcher: (filename: string) => boolean,
|
|
554
602
|
): Promise<Array<{ rel: string; content: string }>> {
|
|
555
603
|
const sourceDir = path.join(TEMPLATE_ROOT, subdir);
|
|
556
604
|
const entries = await fs.readdir(sourceDir, { withFileTypes: true });
|
|
@@ -561,8 +609,8 @@ async function loadTemplateFiles(
|
|
|
561
609
|
}
|
|
562
610
|
const full = path.join(sourceDir, entry.name);
|
|
563
611
|
templates.push({
|
|
564
|
-
rel:
|
|
565
|
-
content: await fs.readFile(full, 'utf8')
|
|
612
|
+
rel: `${GENERATED_CONFIG_ROOT}/${subdir}/${entry.name}`,
|
|
613
|
+
content: await fs.readFile(full, 'utf8'),
|
|
566
614
|
});
|
|
567
615
|
}
|
|
568
616
|
return templates.sort((a, b) => a.rel.localeCompare(b.rel));
|
|
@@ -594,8 +642,8 @@ export class InitCommandHandler {
|
|
|
594
642
|
slack: false,
|
|
595
643
|
webhook: false,
|
|
596
644
|
slackWebhook: '',
|
|
597
|
-
webhookUrl: ''
|
|
598
|
-
}
|
|
645
|
+
webhookUrl: '',
|
|
646
|
+
},
|
|
599
647
|
}
|
|
600
648
|
: await collectWizardConfig(
|
|
601
649
|
{
|
|
@@ -603,12 +651,12 @@ export class InitCommandHandler {
|
|
|
603
651
|
framework,
|
|
604
652
|
defaultProvider: DEFAULT_AGENT_PROVIDER,
|
|
605
653
|
defaultModel: DEFAULT_AGENT_MODEL,
|
|
606
|
-
defaultScmProvider: DEFAULT_SCM_PROVIDER
|
|
654
|
+
defaultScmProvider: DEFAULT_SCM_PROVIDER,
|
|
607
655
|
},
|
|
608
|
-
this.promptFactory
|
|
656
|
+
this.promptFactory,
|
|
609
657
|
);
|
|
610
658
|
|
|
611
|
-
const orchestratorDir = path.join(this.repoRoot, 'agentic', 'orchestrator');
|
|
659
|
+
const orchestratorDir = path.join(this.repoRoot, 'config', 'agentic', 'orchestrator');
|
|
612
660
|
await fs.mkdir(orchestratorDir, { recursive: true });
|
|
613
661
|
|
|
614
662
|
const policyContent = options.advanced_policy
|
|
@@ -617,14 +665,16 @@ export class InitCommandHandler {
|
|
|
617
665
|
|
|
618
666
|
const configFiles: Array<{ rel: string; content: string }> = [
|
|
619
667
|
{
|
|
620
|
-
rel:
|
|
621
|
-
content: policyContent
|
|
668
|
+
rel: `${GENERATED_CONFIG_ROOT}/policy.yaml`,
|
|
669
|
+
content: policyContent,
|
|
622
670
|
},
|
|
623
|
-
{ rel:
|
|
624
|
-
{ rel:
|
|
625
|
-
{ rel:
|
|
671
|
+
{ rel: `${GENERATED_CONFIG_ROOT}/gates.yaml`, content: generateGatesYaml(wizard.framework) },
|
|
672
|
+
{ rel: `${GENERATED_CONFIG_ROOT}/agents.yaml`, content: generateAgentsYaml(wizard) },
|
|
673
|
+
{ rel: `${GENERATED_CONFIG_ROOT}/adapters.yaml`, content: generateAdaptersYaml(wizard) },
|
|
626
674
|
];
|
|
627
|
-
const templateFiles = await loadTemplateFiles('prompts', (filename) =>
|
|
675
|
+
const templateFiles = await loadTemplateFiles('prompts', (filename) =>
|
|
676
|
+
filename.endsWith('.md'),
|
|
677
|
+
);
|
|
628
678
|
const writableFiles = [...configFiles, ...templateFiles];
|
|
629
679
|
|
|
630
680
|
const created: string[] = [];
|
|
@@ -660,19 +710,23 @@ export class InitCommandHandler {
|
|
|
660
710
|
|
|
661
711
|
// Validate policy.yaml via composition loader (merges user policy over bundled defaults
|
|
662
712
|
// then validates the merged result against the full schema).
|
|
663
|
-
const policyRel =
|
|
713
|
+
const policyRel = `${GENERATED_CONFIG_ROOT}/policy.yaml`;
|
|
664
714
|
if (!skipped.includes(policyRel)) {
|
|
665
715
|
try {
|
|
666
|
-
await loadComposedPolicy(
|
|
716
|
+
await loadComposedPolicy(
|
|
717
|
+
this.repoRoot,
|
|
718
|
+
path.join(this.repoRoot, policyRel),
|
|
719
|
+
schemaRegistry,
|
|
720
|
+
);
|
|
667
721
|
} catch (err) {
|
|
668
722
|
validationWarnings.push(`Failed to validate ${policyRel}: ${String(err)}`);
|
|
669
723
|
}
|
|
670
724
|
}
|
|
671
725
|
|
|
672
726
|
const nonPolicyTargets: Array<{ schema: string; rel: string }> = [
|
|
673
|
-
{ schema: 'gates.schema.json', rel:
|
|
674
|
-
{ schema: 'agents.schema.json', rel:
|
|
675
|
-
{ schema: 'adapters.schema.json', rel:
|
|
727
|
+
{ schema: 'gates.schema.json', rel: `${GENERATED_CONFIG_ROOT}/gates.yaml` },
|
|
728
|
+
{ schema: 'agents.schema.json', rel: `${GENERATED_CONFIG_ROOT}/agents.yaml` },
|
|
729
|
+
{ schema: 'adapters.schema.json', rel: `${GENERATED_CONFIG_ROOT}/adapters.yaml` },
|
|
676
730
|
];
|
|
677
731
|
|
|
678
732
|
for (const { schema, rel } of nonPolicyTargets) {
|
|
@@ -695,12 +749,14 @@ export class InitCommandHandler {
|
|
|
695
749
|
const policyMode = options.advanced_policy ? 'full (advanced)' : 'lean (common controls only)';
|
|
696
750
|
const nextSteps = [
|
|
697
751
|
`Generated policy.yaml in ${policyMode} mode`,
|
|
698
|
-
'Review generated files in agentic/orchestrator/{policy,gates,agents,adapters}.yaml',
|
|
699
|
-
'Verify prompts under agentic/orchestrator/prompts/',
|
|
700
|
-
'Run: aop run -fi <spec.md> to start orchestrating features'
|
|
752
|
+
'Review generated files in config/agentic/orchestrator/{policy,gates,agents,adapters}.yaml',
|
|
753
|
+
'Verify prompts under config/agentic/orchestrator/prompts/',
|
|
754
|
+
'Run: aop run -fi <spec.md> to start orchestrating features',
|
|
701
755
|
];
|
|
702
756
|
if (!options.advanced_policy) {
|
|
703
|
-
nextSteps.push(
|
|
757
|
+
nextSteps.push(
|
|
758
|
+
'To generate a full explicit policy with all advanced controls, re-run: aop init --advanced-policy --force',
|
|
759
|
+
);
|
|
704
760
|
}
|
|
705
761
|
|
|
706
762
|
return {
|
|
@@ -711,8 +767,8 @@ export class InitCommandHandler {
|
|
|
711
767
|
updated,
|
|
712
768
|
skipped,
|
|
713
769
|
validation_warnings: validationWarnings,
|
|
714
|
-
next_steps: nextSteps
|
|
715
|
-
}
|
|
770
|
+
next_steps: nextSteps,
|
|
771
|
+
},
|
|
716
772
|
};
|
|
717
773
|
}
|
|
718
774
|
}
|
|
@@ -2,13 +2,17 @@ export function printPayload(payload: unknown): void {
|
|
|
2
2
|
process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
export function printError(
|
|
5
|
+
export function printError(
|
|
6
|
+
code: string,
|
|
7
|
+
message: string,
|
|
8
|
+
details: Record<string, unknown> = {},
|
|
9
|
+
): void {
|
|
6
10
|
printPayload({
|
|
7
11
|
ok: false,
|
|
8
12
|
error: {
|
|
9
13
|
code,
|
|
10
14
|
message,
|
|
11
|
-
details
|
|
12
|
-
}
|
|
15
|
+
details,
|
|
16
|
+
},
|
|
13
17
|
});
|
|
14
18
|
}
|
|
@@ -97,15 +97,15 @@ export class ResumeCommandHandler {
|
|
|
97
97
|
transport,
|
|
98
98
|
resumed: false,
|
|
99
99
|
recovery: recovery.data,
|
|
100
|
-
resume_plan: resumePlan
|
|
101
|
-
}
|
|
100
|
+
resume_plan: resumePlan,
|
|
101
|
+
},
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
const selection = resolveProviderSelection({
|
|
106
106
|
cli: options as unknown as Record<string, string | undefined>,
|
|
107
107
|
env,
|
|
108
|
-
agentsConfig: kernel.getAgentsConfig()
|
|
108
|
+
agentsConfig: kernel.getAgentsConfig(),
|
|
109
109
|
});
|
|
110
110
|
|
|
111
111
|
const provider = new NullWorkerProvider(selection);
|
|
@@ -114,13 +114,13 @@ export class ResumeCommandHandler {
|
|
|
114
114
|
max_parallel_gate_runs: 3,
|
|
115
115
|
run_id: resumePlan.run_id,
|
|
116
116
|
owner_instance_id: resumePlan.owner_instance_id,
|
|
117
|
-
takeover_stale_run: options.takeover_stale_run
|
|
117
|
+
takeover_stale_run: options.takeover_stale_run,
|
|
118
118
|
});
|
|
119
119
|
|
|
120
120
|
const startResult = await supervisor.start(
|
|
121
121
|
resumePlan.features.map((feature) => ({
|
|
122
|
-
feature_id: feature.feature_id
|
|
123
|
-
}))
|
|
122
|
+
feature_id: feature.feature_id,
|
|
123
|
+
})),
|
|
124
124
|
);
|
|
125
125
|
|
|
126
126
|
return {
|
|
@@ -134,8 +134,8 @@ export class ResumeCommandHandler {
|
|
|
134
134
|
runtime_status: startResult.status,
|
|
135
135
|
run_metadata: startResult.run_metadata,
|
|
136
136
|
dashboard: startResult.dashboard,
|
|
137
|
-
recovery: recovery.data
|
|
138
|
-
}
|
|
137
|
+
recovery: recovery.data,
|
|
138
|
+
},
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -177,7 +177,8 @@ export class ResumeCommandHandler {
|
|
|
177
177
|
try {
|
|
178
178
|
const state = await kernel.featureStateGet(featureId);
|
|
179
179
|
const frontMatter = asRecord(state.data.front_matter);
|
|
180
|
-
const status =
|
|
180
|
+
const status =
|
|
181
|
+
typeof frontMatter.status === 'string' ? frontMatter.status : STATUS.PLANNING;
|
|
181
182
|
if (isTerminalStatus(status)) {
|
|
182
183
|
continue;
|
|
183
184
|
}
|
|
@@ -186,7 +187,9 @@ export class ResumeCommandHandler {
|
|
|
186
187
|
feature_id: featureId,
|
|
187
188
|
status,
|
|
188
189
|
resume_phase: toResumePhase(status),
|
|
189
|
-
sources: [...(sourcesByFeature.get(featureId) ?? new Set<string>())].sort((a, b) =>
|
|
190
|
+
sources: [...(sourcesByFeature.get(featureId) ?? new Set<string>())].sort((a, b) =>
|
|
191
|
+
a.localeCompare(b),
|
|
192
|
+
),
|
|
190
193
|
});
|
|
191
194
|
} catch (_error) {
|
|
192
195
|
// Silently skip features with parse errors
|
|
@@ -201,7 +204,8 @@ export class ResumeCommandHandler {
|
|
|
201
204
|
return a.feature_id.localeCompare(b.feature_id);
|
|
202
205
|
});
|
|
203
206
|
|
|
204
|
-
const resolvedRunId =
|
|
207
|
+
const resolvedRunId =
|
|
208
|
+
runtimeSessions.run_id !== 'none' ? runtimeSessions.run_id : fallbackRunId;
|
|
205
209
|
const resolvedOwnerInstanceId =
|
|
206
210
|
runtimeSessions.owner_instance_id !== 'none'
|
|
207
211
|
? runtimeSessions.owner_instance_id
|
|
@@ -210,11 +214,15 @@ export class ResumeCommandHandler {
|
|
|
210
214
|
return {
|
|
211
215
|
run_id: resolvedRunId,
|
|
212
216
|
owner_instance_id: resolvedOwnerInstanceId,
|
|
213
|
-
features: resumable
|
|
217
|
+
features: resumable,
|
|
214
218
|
};
|
|
215
219
|
}
|
|
216
220
|
|
|
217
|
-
private addSource(
|
|
221
|
+
private addSource(
|
|
222
|
+
sourcesByFeature: Map<string, Set<string>>,
|
|
223
|
+
featureId: string,
|
|
224
|
+
source: string,
|
|
225
|
+
): void {
|
|
218
226
|
if (!featureId) {
|
|
219
227
|
return;
|
|
220
228
|
}
|
|
@@ -41,14 +41,14 @@ export class RetryCommandHandler {
|
|
|
41
41
|
if (!featureId) {
|
|
42
42
|
invalidCliArgs({
|
|
43
43
|
reason: '--feature-id is required for retry',
|
|
44
|
-
expected: '--feature-id <feature_id>'
|
|
44
|
+
expected: '--feature-id <feature_id>',
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
if (!isValidFeatureId(featureId)) {
|
|
48
48
|
invalidCliArgs({
|
|
49
49
|
reason: 'Invalid --feature-id value',
|
|
50
50
|
provided: featureId,
|
|
51
|
-
expected_pattern: '^[a-z0-9_][a-z0-9_-]*$'
|
|
51
|
+
expected_pattern: '^[a-z0-9_][a-z0-9_-]*$',
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -57,7 +57,7 @@ export class RetryCommandHandler {
|
|
|
57
57
|
let forcedRetryExecuted = false;
|
|
58
58
|
|
|
59
59
|
const current = await callCliTool(this.toolClient, this.runId, TOOLS.FEATURE_STATE_GET, {
|
|
60
|
-
feature_id: featureId
|
|
60
|
+
feature_id: featureId,
|
|
61
61
|
});
|
|
62
62
|
const statePayload = current.data as unknown as RetryFeatureStatePayload;
|
|
63
63
|
|
|
@@ -70,7 +70,8 @@ export class RetryCommandHandler {
|
|
|
70
70
|
? 'fast'
|
|
71
71
|
: status === 'qa' || status === 'ready_to_merge'
|
|
72
72
|
? 'full'
|
|
73
|
-
: status === 'blocked' &&
|
|
73
|
+
: status === 'blocked' &&
|
|
74
|
+
statePayload.front_matter.status_reason?.includes('forced_retry:fast')
|
|
74
75
|
? 'fast'
|
|
75
76
|
: 'full';
|
|
76
77
|
|
|
@@ -78,14 +79,14 @@ export class RetryCommandHandler {
|
|
|
78
79
|
invalidCliArgs({
|
|
79
80
|
reason: 'Cannot retry a terminal feature status without --force',
|
|
80
81
|
status,
|
|
81
|
-
expected_status: ['building', 'qa', 'ready_to_merge', 'blocked']
|
|
82
|
+
expected_status: ['building', 'qa', 'ready_to_merge', 'blocked'],
|
|
82
83
|
});
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
if (force) {
|
|
86
87
|
const frontMatterPatch: Record<string, unknown> = {
|
|
87
88
|
gate_retry_count: 0,
|
|
88
|
-
last_retry_at: null
|
|
89
|
+
last_retry_at: null,
|
|
89
90
|
};
|
|
90
91
|
if (status === 'blocked') {
|
|
91
92
|
frontMatterPatch.status =
|
|
@@ -103,8 +104,8 @@ export class RetryCommandHandler {
|
|
|
103
104
|
feature_id: featureId,
|
|
104
105
|
expected_version: statePayload.front_matter.version,
|
|
105
106
|
patch: {
|
|
106
|
-
front_matter: frontMatterPatch
|
|
107
|
-
}
|
|
107
|
+
front_matter: frontMatterPatch,
|
|
108
|
+
},
|
|
108
109
|
});
|
|
109
110
|
retryCountReset = true;
|
|
110
111
|
forcedRetryExecuted = true;
|
|
@@ -113,7 +114,7 @@ export class RetryCommandHandler {
|
|
|
113
114
|
const gate = await callCliTool(this.toolClient, this.runId, TOOLS.GATES_RUN, {
|
|
114
115
|
feature_id: featureId,
|
|
115
116
|
profile: null,
|
|
116
|
-
mode: inferredMode
|
|
117
|
+
mode: inferredMode,
|
|
117
118
|
});
|
|
118
119
|
const retryExecuted = true;
|
|
119
120
|
const retryMode = inferredMode;
|
|
@@ -128,8 +129,8 @@ export class RetryCommandHandler {
|
|
|
128
129
|
retry_executed: retryExecuted,
|
|
129
130
|
forced_retry_executed: forcedRetryExecuted,
|
|
130
131
|
retry_mode: retryMode,
|
|
131
|
-
retry_outcome: retryOutcome
|
|
132
|
-
}
|
|
132
|
+
retry_outcome: retryOutcome,
|
|
133
|
+
},
|
|
133
134
|
};
|
|
134
135
|
}
|
|
135
136
|
}
|
|
@@ -51,7 +51,7 @@ export class RunCommandHandler {
|
|
|
51
51
|
kernel,
|
|
52
52
|
toolClient,
|
|
53
53
|
maxActiveFeatures,
|
|
54
|
-
maxParallelGateRuns
|
|
54
|
+
maxParallelGateRuns,
|
|
55
55
|
} = context;
|
|
56
56
|
|
|
57
57
|
if (options.batch && options.folder_input) {
|
|
@@ -67,7 +67,7 @@ export class RunCommandHandler {
|
|
|
67
67
|
const selection = resolveProviderSelection({
|
|
68
68
|
cli: options as unknown as Record<string, string | undefined>,
|
|
69
69
|
env,
|
|
70
|
-
agentsConfig: kernel.getAgentsConfig()
|
|
70
|
+
agentsConfig: kernel.getAgentsConfig(),
|
|
71
71
|
});
|
|
72
72
|
|
|
73
73
|
const provider = new NullWorkerProvider(selection);
|
|
@@ -76,7 +76,7 @@ export class RunCommandHandler {
|
|
|
76
76
|
max_parallel_gate_runs: maxParallelGateRuns ?? 3,
|
|
77
77
|
run_id: runId,
|
|
78
78
|
owner_instance_id: kernel.instanceId,
|
|
79
|
-
takeover_stale_run: options.takeover_stale_run
|
|
79
|
+
takeover_stale_run: options.takeover_stale_run,
|
|
80
80
|
});
|
|
81
81
|
|
|
82
82
|
const startResult = await supervisor.start(ingested as Array<{ feature_id: string }>);
|
|
@@ -90,8 +90,8 @@ export class RunCommandHandler {
|
|
|
90
90
|
queue_depth: startResult.queue_depth,
|
|
91
91
|
runtime_status: startResult.status,
|
|
92
92
|
run_metadata: startResult.run_metadata,
|
|
93
|
-
dashboard: startResult.dashboard
|
|
94
|
-
}
|
|
93
|
+
dashboard: startResult.dashboard,
|
|
94
|
+
},
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -136,7 +136,11 @@ export class RunCommandHandler {
|
|
|
136
136
|
|
|
137
137
|
if (activeBlocked.has(featureId)) {
|
|
138
138
|
skipped++;
|
|
139
|
-
details.push({
|
|
139
|
+
details.push({
|
|
140
|
+
feature_id: featureId,
|
|
141
|
+
status: 'skipped',
|
|
142
|
+
reason: 'already active/blocked',
|
|
143
|
+
});
|
|
140
144
|
continue;
|
|
141
145
|
}
|
|
142
146
|
|
|
@@ -162,8 +166,8 @@ export class RunCommandHandler {
|
|
|
162
166
|
created,
|
|
163
167
|
skipped,
|
|
164
168
|
failed,
|
|
165
|
-
details
|
|
166
|
-
}
|
|
169
|
+
details,
|
|
170
|
+
},
|
|
167
171
|
};
|
|
168
172
|
}
|
|
169
173
|
}
|
|
@@ -30,14 +30,14 @@ export class SendCommandHandler {
|
|
|
30
30
|
if (!featureId) {
|
|
31
31
|
invalidCliArgs({
|
|
32
32
|
reason: '--feature-id is required for send',
|
|
33
|
-
expected: '--feature-id <feature_id>'
|
|
33
|
+
expected: '--feature-id <feature_id>',
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
if (!isValidFeatureId(featureId)) {
|
|
37
37
|
invalidCliArgs({
|
|
38
38
|
reason: 'Invalid --feature-id value',
|
|
39
39
|
provided: featureId,
|
|
40
|
-
expected_pattern: '^[a-z0-9_][a-z0-9_-]*$'
|
|
40
|
+
expected_pattern: '^[a-z0-9_][a-z0-9_-]*$',
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -45,21 +45,21 @@ export class SendCommandHandler {
|
|
|
45
45
|
if (!message || message.trim().length === 0) {
|
|
46
46
|
invalidCliArgs({
|
|
47
47
|
reason: '--message is required for send',
|
|
48
|
-
expected: '--message <message>'
|
|
48
|
+
expected: '--message <message>',
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
const response = await callCliTool(this.toolClient, this.runId, TOOLS.FEATURE_SEND_MESSAGE, {
|
|
53
53
|
feature_id: featureId,
|
|
54
|
-
message
|
|
54
|
+
message,
|
|
55
55
|
});
|
|
56
56
|
|
|
57
57
|
return {
|
|
58
58
|
ok: true,
|
|
59
59
|
data: {
|
|
60
60
|
command: 'send',
|
|
61
|
-
...(response.data ?? {})
|
|
62
|
-
}
|
|
61
|
+
...(response.data ?? {}),
|
|
62
|
+
},
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
65
|
}
|