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
|
@@ -60,7 +60,7 @@ export class DiffParser {
|
|
|
60
60
|
oldPath,
|
|
61
61
|
newPath,
|
|
62
62
|
changeType: 'modify',
|
|
63
|
-
hunks: []
|
|
63
|
+
hunks: [],
|
|
64
64
|
};
|
|
65
65
|
continue;
|
|
66
66
|
}
|
|
@@ -114,11 +114,15 @@ export class DiffParser {
|
|
|
114
114
|
const newStart = Number(hunkMatch[3]);
|
|
115
115
|
const newCount = Number(hunkMatch[4] ?? 1);
|
|
116
116
|
const changeType: DiffChangeType =
|
|
117
|
-
current.changeType === 'delete'
|
|
117
|
+
current.changeType === 'delete'
|
|
118
|
+
? 'delete'
|
|
119
|
+
: current.changeType === 'add'
|
|
120
|
+
? 'add'
|
|
121
|
+
: 'modify';
|
|
118
122
|
current.hunks.push({
|
|
119
123
|
start_line: changeType === 'delete' ? oldStart : newStart,
|
|
120
124
|
end_line: changeType === 'delete' ? oldStart + oldCount - 1 : newStart + newCount - 1,
|
|
121
|
-
change_type: changeType
|
|
125
|
+
change_type: changeType,
|
|
122
126
|
});
|
|
123
127
|
}
|
|
124
128
|
}
|
|
@@ -10,6 +10,10 @@ export class AopPathLayout {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
get orchestratorRoot(): string {
|
|
13
|
+
return path.join(this.repoRoot, 'config', 'agentic', 'orchestrator');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
get legacyOrchestratorRoot(): string {
|
|
13
17
|
return path.join(this.repoRoot, 'agentic', 'orchestrator');
|
|
14
18
|
}
|
|
15
19
|
|
|
@@ -98,7 +102,7 @@ async function copyLegacyRuntimeTree(sourcePath: string, targetPath: string): Pr
|
|
|
98
102
|
await fs.cp(sourcePath, targetPath, {
|
|
99
103
|
recursive: true,
|
|
100
104
|
force: false,
|
|
101
|
-
errorOnExist: false
|
|
105
|
+
errorOnExist: false,
|
|
102
106
|
});
|
|
103
107
|
}
|
|
104
108
|
|
|
@@ -7,8 +7,14 @@ function normalizeSeparators(value: string): string {
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export class RepoPathNormalizer {
|
|
10
|
-
async normalize(
|
|
11
|
-
|
|
10
|
+
async normalize(
|
|
11
|
+
repoRoot: string,
|
|
12
|
+
candidatePath: string,
|
|
13
|
+
allowSymlinkTraversal = false,
|
|
14
|
+
): Promise<string> {
|
|
15
|
+
const absoluteInput = path.isAbsolute(candidatePath)
|
|
16
|
+
? candidatePath
|
|
17
|
+
: path.resolve(repoRoot, candidatePath);
|
|
12
18
|
|
|
13
19
|
const realPath = await fs.realpath(absoluteInput).catch(() => absoluteInput);
|
|
14
20
|
if (!allowSymlinkTraversal && !realPath.startsWith(repoRoot)) {
|
|
@@ -53,16 +59,24 @@ export const areaMatchingPolicy = new AreaMatchingPolicy();
|
|
|
53
59
|
export async function normalizeRepoPath(
|
|
54
60
|
repoRoot: string,
|
|
55
61
|
candidatePath: string,
|
|
56
|
-
allowSymlinkTraversal = false
|
|
62
|
+
allowSymlinkTraversal = false,
|
|
57
63
|
): Promise<string> {
|
|
58
64
|
return await repoPathNormalizer.normalize(repoRoot, candidatePath, allowSymlinkTraversal);
|
|
59
65
|
}
|
|
60
66
|
|
|
61
|
-
export function areaMatches(
|
|
67
|
+
export function areaMatches(
|
|
68
|
+
repoRelativePath: string,
|
|
69
|
+
area: string,
|
|
70
|
+
matchingMode = 'repo_prefix',
|
|
71
|
+
): boolean {
|
|
62
72
|
return areaMatchingPolicy.areaMatches(repoRelativePath, area, matchingMode);
|
|
63
73
|
}
|
|
64
74
|
|
|
65
|
-
export function anyAreaMatch(
|
|
75
|
+
export function anyAreaMatch(
|
|
76
|
+
repoRelativePath: string,
|
|
77
|
+
areas: string[],
|
|
78
|
+
matchingMode = 'repo_prefix',
|
|
79
|
+
): boolean {
|
|
66
80
|
return areaMatchingPolicy.anyAreaMatch(repoRelativePath, areas, matchingMode);
|
|
67
81
|
}
|
|
68
82
|
|
|
@@ -30,7 +30,10 @@ export class QaIndexDomainService {
|
|
|
30
30
|
return `${filePath}:${hunk.start_line}:${hunk.end_line}:${hunk.change_type}`;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
makeRequiredTests(
|
|
33
|
+
makeRequiredTests(
|
|
34
|
+
gateProfile: string,
|
|
35
|
+
profile: { modes?: Record<string, Array<{ name: string }>> },
|
|
36
|
+
): string[] {
|
|
34
37
|
const required: string[] = [];
|
|
35
38
|
for (const [mode, steps] of Object.entries(profile.modes ?? {})) {
|
|
36
39
|
for (const step of steps) {
|
|
@@ -44,7 +47,7 @@ export class QaIndexDomainService {
|
|
|
44
47
|
featureId: string,
|
|
45
48
|
parsedDiffFiles: ParsedDiffFile[],
|
|
46
49
|
requiredTests: string[],
|
|
47
|
-
previousIndex: QaIndex | null = null
|
|
50
|
+
previousIndex: QaIndex | null = null,
|
|
48
51
|
): QaIndex {
|
|
49
52
|
const previousItemsByKey = new Map<string, QaIndexItem>();
|
|
50
53
|
for (const item of previousIndex?.items ?? []) {
|
|
@@ -71,7 +74,7 @@ export class QaIndexDomainService {
|
|
|
71
74
|
required_tests: requiredTests,
|
|
72
75
|
status: existing?.status ?? 'pending',
|
|
73
76
|
last_run_at: existing?.last_run_at,
|
|
74
|
-
evidence_refs: existing?.evidence_refs ?? []
|
|
77
|
+
evidence_refs: existing?.evidence_refs ?? [],
|
|
75
78
|
});
|
|
76
79
|
}
|
|
77
80
|
|
|
@@ -81,7 +84,7 @@ export class QaIndexDomainService {
|
|
|
81
84
|
feature_id: featureId,
|
|
82
85
|
version: Number(previousIndex?.version ?? 0) + 1,
|
|
83
86
|
source_diff_ref: sourceDiffRef,
|
|
84
|
-
items
|
|
87
|
+
items,
|
|
85
88
|
};
|
|
86
89
|
}
|
|
87
90
|
|
|
@@ -94,10 +97,13 @@ export class QaIndexDomainService {
|
|
|
94
97
|
running: 0,
|
|
95
98
|
passed: 0,
|
|
96
99
|
failed: 0,
|
|
97
|
-
waived: 0
|
|
100
|
+
waived: 0,
|
|
98
101
|
};
|
|
99
102
|
|
|
100
|
-
const pendingByFile: Record<
|
|
103
|
+
const pendingByFile: Record<
|
|
104
|
+
string,
|
|
105
|
+
Array<{ hunks: DiffHunk[]; required_tests: string[] }>
|
|
106
|
+
> = {};
|
|
101
107
|
|
|
102
108
|
for (const item of index.items ?? []) {
|
|
103
109
|
summary[item.status] = (summary[item.status] ?? 0) + 1;
|
|
@@ -105,7 +111,7 @@ export class QaIndexDomainService {
|
|
|
105
111
|
pendingByFile[item.path] = pendingByFile[item.path] ?? [];
|
|
106
112
|
pendingByFile[item.path].push({
|
|
107
113
|
hunks: item.hunks,
|
|
108
|
-
required_tests: item.required_tests
|
|
114
|
+
required_tests: item.required_tests,
|
|
109
115
|
});
|
|
110
116
|
}
|
|
111
117
|
}
|
|
@@ -113,7 +119,12 @@ export class QaIndexDomainService {
|
|
|
113
119
|
return { summary, pending_by_file: pendingByFile };
|
|
114
120
|
}
|
|
115
121
|
|
|
116
|
-
applyUpdates(
|
|
122
|
+
applyUpdates(
|
|
123
|
+
index: QaIndex,
|
|
124
|
+
expectedVersion: number,
|
|
125
|
+
updates: QaUpdate[],
|
|
126
|
+
evidenceRefs: string[] = [],
|
|
127
|
+
): QaIndex {
|
|
117
128
|
if (index.version !== expectedVersion) {
|
|
118
129
|
throw new Error('qa_index_version_conflict');
|
|
119
130
|
}
|
|
@@ -142,14 +153,17 @@ export class QaIndexDomainService {
|
|
|
142
153
|
|
|
143
154
|
return {
|
|
144
155
|
...index,
|
|
145
|
-
version: index.version + 1
|
|
156
|
+
version: index.version + 1,
|
|
146
157
|
};
|
|
147
158
|
}
|
|
148
159
|
}
|
|
149
160
|
|
|
150
161
|
export const qaIndexDomainService = new QaIndexDomainService();
|
|
151
162
|
|
|
152
|
-
export function makeRequiredTests(
|
|
163
|
+
export function makeRequiredTests(
|
|
164
|
+
gateProfile: string,
|
|
165
|
+
profile: { modes?: Record<string, Array<{ name: string }>> },
|
|
166
|
+
): string[] {
|
|
153
167
|
return qaIndexDomainService.makeRequiredTests(gateProfile, profile);
|
|
154
168
|
}
|
|
155
169
|
|
|
@@ -157,7 +171,7 @@ export function buildQaIndex(
|
|
|
157
171
|
featureId: string,
|
|
158
172
|
parsedDiffFiles: ParsedDiffFile[],
|
|
159
173
|
requiredTests: string[],
|
|
160
|
-
previousIndex: QaIndex | null = null
|
|
174
|
+
previousIndex: QaIndex | null = null,
|
|
161
175
|
): QaIndex {
|
|
162
176
|
return qaIndexDomainService.buildIndex(featureId, parsedDiffFiles, requiredTests, previousIndex);
|
|
163
177
|
}
|
|
@@ -173,7 +187,7 @@ export function applyQaUpdates(
|
|
|
173
187
|
index: QaIndex,
|
|
174
188
|
expectedVersion: number,
|
|
175
189
|
updates: QaUpdate[],
|
|
176
|
-
evidenceRefs: string[] = []
|
|
190
|
+
evidenceRefs: string[] = [],
|
|
177
191
|
): QaIndex {
|
|
178
192
|
return qaIndexDomainService.applyUpdates(index, expectedVersion, updates, evidenceRefs);
|
|
179
193
|
}
|
|
@@ -18,7 +18,10 @@ export interface FailResponse {
|
|
|
18
18
|
|
|
19
19
|
export type ToolResponse<T = Record<string, unknown>> = OkResponse<T> | FailResponse;
|
|
20
20
|
|
|
21
|
-
export function ok<T = Record<string, unknown>>(
|
|
21
|
+
export function ok<T = Record<string, unknown>>(
|
|
22
|
+
data: T = {} as T,
|
|
23
|
+
evidence?: Record<string, unknown>,
|
|
24
|
+
): OkResponse<T> {
|
|
22
25
|
const response: OkResponse<T> = { ok: true, data };
|
|
23
26
|
if (evidence) {
|
|
24
27
|
response.evidence = evidence;
|
|
@@ -30,7 +33,7 @@ export function fail(
|
|
|
30
33
|
code: string,
|
|
31
34
|
message: string,
|
|
32
35
|
details: Record<string, unknown> = {},
|
|
33
|
-
evidence?: Record<string, unknown
|
|
36
|
+
evidence?: Record<string, unknown>,
|
|
34
37
|
): FailResponse {
|
|
35
38
|
const normalizedCode = (Object.values(ERROR_CODES) as string[]).includes(code)
|
|
36
39
|
? (code as ErrorCode)
|
|
@@ -40,8 +43,8 @@ export function fail(
|
|
|
40
43
|
error: {
|
|
41
44
|
code: normalizedCode,
|
|
42
45
|
message,
|
|
43
|
-
details
|
|
44
|
-
}
|
|
46
|
+
details,
|
|
47
|
+
},
|
|
45
48
|
};
|
|
46
49
|
if (evidence) {
|
|
47
50
|
response.evidence = evidence;
|
|
@@ -51,12 +54,12 @@ export function fail(
|
|
|
51
54
|
|
|
52
55
|
export function withSuggestedActions(
|
|
53
56
|
details: Record<string, unknown>,
|
|
54
|
-
actions: string[] = []
|
|
57
|
+
actions: string[] = [],
|
|
55
58
|
): Record<string, unknown> {
|
|
56
59
|
return {
|
|
57
60
|
...details,
|
|
58
61
|
retryable: (details.retryable as boolean | undefined) ?? false,
|
|
59
62
|
requires_human: (details.requires_human as boolean | undefined) ?? false,
|
|
60
|
-
suggested_next_actions: actions
|
|
63
|
+
suggested_next_actions: actions,
|
|
61
64
|
};
|
|
62
65
|
}
|
|
@@ -26,7 +26,7 @@ type AjvLike = {
|
|
|
26
26
|
| {
|
|
27
27
|
type?: string;
|
|
28
28
|
validate: (value: string) => boolean;
|
|
29
|
-
}
|
|
29
|
+
},
|
|
30
30
|
) => AjvLike;
|
|
31
31
|
};
|
|
32
32
|
|
|
@@ -38,7 +38,13 @@ function resolveBundledSchemaRoot(startDir: string): string | null {
|
|
|
38
38
|
let current = path.resolve(startDir);
|
|
39
39
|
|
|
40
40
|
while (true) {
|
|
41
|
-
const candidate = path.join(
|
|
41
|
+
const candidate = path.join(
|
|
42
|
+
current,
|
|
43
|
+
'agentic',
|
|
44
|
+
'orchestrator',
|
|
45
|
+
'schemas',
|
|
46
|
+
'policy.schema.json',
|
|
47
|
+
);
|
|
42
48
|
if (fsSync.existsSync(candidate)) {
|
|
43
49
|
return path.dirname(candidate);
|
|
44
50
|
}
|
|
@@ -101,24 +107,37 @@ export class SchemaRegistry implements SchemaValidator {
|
|
|
101
107
|
constructor(repoRoot: string) {
|
|
102
108
|
this.repoRoot = repoRoot;
|
|
103
109
|
this.schemaRoot = this.resolveSchemaRoot();
|
|
104
|
-
const Ajv2020Ctor = Ajv2020Import as unknown as new (
|
|
110
|
+
const Ajv2020Ctor = Ajv2020Import as unknown as new (
|
|
111
|
+
options?: Record<string, unknown>,
|
|
112
|
+
) => AjvLike;
|
|
105
113
|
this.ajv = new Ajv2020Ctor({ allErrors: true, strict: false });
|
|
106
114
|
this.ajv.addFormat?.('date-time', {
|
|
107
115
|
type: 'string',
|
|
108
|
-
validate: isStrictRfc3339DateTime
|
|
116
|
+
validate: isStrictRfc3339DateTime,
|
|
109
117
|
});
|
|
110
118
|
this.validators = new Map();
|
|
111
119
|
}
|
|
112
120
|
|
|
113
121
|
private resolveSchemaRoot(): string {
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
const primaryRepoSchemaRoot = path.join(
|
|
123
|
+
this.repoRoot,
|
|
124
|
+
'config',
|
|
125
|
+
'agentic',
|
|
126
|
+
'orchestrator',
|
|
127
|
+
'schemas',
|
|
128
|
+
);
|
|
129
|
+
if (fsSync.existsSync(path.join(primaryRepoSchemaRoot, 'policy.schema.json'))) {
|
|
130
|
+
return primaryRepoSchemaRoot;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const legacyRepoSchemaRoot = path.join(this.repoRoot, 'agentic', 'orchestrator', 'schemas');
|
|
134
|
+
if (fsSync.existsSync(path.join(legacyRepoSchemaRoot, 'policy.schema.json'))) {
|
|
135
|
+
return legacyRepoSchemaRoot;
|
|
117
136
|
}
|
|
118
137
|
if (BUNDLED_SCHEMA_ROOT) {
|
|
119
138
|
return BUNDLED_SCHEMA_ROOT;
|
|
120
139
|
}
|
|
121
|
-
return
|
|
140
|
+
return primaryRepoSchemaRoot;
|
|
122
141
|
}
|
|
123
142
|
|
|
124
143
|
schemaPath(name: SchemaId): string {
|
|
@@ -139,7 +158,7 @@ export class SchemaRegistry implements SchemaValidator {
|
|
|
139
158
|
const valid = validator(payload);
|
|
140
159
|
return {
|
|
141
160
|
valid: Boolean(valid),
|
|
142
|
-
errors: valid ? [] : (
|
|
161
|
+
errors: valid ? [] : (validator.errors ?? []),
|
|
143
162
|
};
|
|
144
163
|
}
|
|
145
164
|
}
|
|
@@ -152,7 +171,7 @@ export async function loadYamlFile<T = unknown>(filePath: string): Promise<T> {
|
|
|
152
171
|
export async function loadAndValidateYaml<T = unknown>(
|
|
153
172
|
schemaRegistry: SchemaValidator,
|
|
154
173
|
schemaName: SchemaId,
|
|
155
|
-
yamlPath: string
|
|
174
|
+
yamlPath: string,
|
|
156
175
|
): Promise<{ parsed: T; validation: ValidationResult }> {
|
|
157
176
|
const parsed = await loadYamlFile<T>(yamlPath);
|
|
158
177
|
const validation = await schemaRegistry.validate(schemaName, parsed);
|
|
@@ -29,7 +29,7 @@ export async function applyWorktreeSymlinks(
|
|
|
29
29
|
repoRoot: string,
|
|
30
30
|
worktreePath: string,
|
|
31
31
|
symlinks: string[],
|
|
32
|
-
onWarning?: (warning: WorkspaceHookWarning) => void
|
|
32
|
+
onWarning?: (warning: WorkspaceHookWarning) => void,
|
|
33
33
|
): Promise<void> {
|
|
34
34
|
for (const link of symlinks) {
|
|
35
35
|
const src = path.join(repoRoot, link);
|
|
@@ -41,7 +41,7 @@ export async function applyWorktreeSymlinks(
|
|
|
41
41
|
onWarning?.({
|
|
42
42
|
kind: 'symlink',
|
|
43
43
|
target: link,
|
|
44
|
-
message: error instanceof Error ? error.message : String(error)
|
|
44
|
+
message: error instanceof Error ? error.message : String(error),
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -55,7 +55,7 @@ export async function applyWorktreeSymlinks(
|
|
|
55
55
|
export async function runWorktreePostCreate(
|
|
56
56
|
worktreePath: string,
|
|
57
57
|
commands: string[],
|
|
58
|
-
onWarning?: (warning: WorkspaceHookWarning) => void
|
|
58
|
+
onWarning?: (warning: WorkspaceHookWarning) => void,
|
|
59
59
|
): Promise<void> {
|
|
60
60
|
for (const cmd of commands) {
|
|
61
61
|
const parts = cmd.trim().split(/\s+/);
|
|
@@ -72,7 +72,7 @@ export async function runWorktreePostCreate(
|
|
|
72
72
|
command: cmd,
|
|
73
73
|
message: 'command exited with non-zero status',
|
|
74
74
|
code: result.code,
|
|
75
|
-
stderr: result.stderr
|
|
75
|
+
stderr: result.stderr,
|
|
76
76
|
});
|
|
77
77
|
}
|
|
78
78
|
} catch (error) {
|
|
@@ -80,7 +80,7 @@ export async function runWorktreePostCreate(
|
|
|
80
80
|
kind: 'post_create',
|
|
81
81
|
target: cmd,
|
|
82
82
|
command: cmd,
|
|
83
|
-
message: error instanceof Error ? error.message : String(error)
|
|
83
|
+
message: error instanceof Error ? error.message : String(error),
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -1,21 +1,15 @@
|
|
|
1
1
|
export { AopKernel } from './core/kernel.js';
|
|
2
2
|
export type { AgentsConfigSnapshot } from './core/kernel.js';
|
|
3
3
|
export { SupervisorRuntime } from './supervisor/runtime.js';
|
|
4
|
-
export {
|
|
5
|
-
resolveProviderSelection,
|
|
6
|
-
NullWorkerProvider
|
|
7
|
-
} from './providers/providers.js';
|
|
4
|
+
export { resolveProviderSelection, NullWorkerProvider } from './providers/providers.js';
|
|
8
5
|
export type { WorkerProvider, ProviderSelectionResolver } from './providers/providers.js';
|
|
9
6
|
export { createToolingRuntime, resolveToolClient } from './mcp/runtime-factory.js';
|
|
10
|
-
export type {
|
|
11
|
-
ToolingKernelPort,
|
|
12
|
-
CreateToolingRuntimeOptions
|
|
13
|
-
} from './mcp/runtime-factory.js';
|
|
7
|
+
export type { ToolingKernelPort, CreateToolingRuntimeOptions } from './mcp/runtime-factory.js';
|
|
14
8
|
export { InProcessToolClient, McpToolClient, createOperationId } from './mcp/tool-client.js';
|
|
15
9
|
export { TokenAuthVerifier } from './mcp/token-auth-verifier.js';
|
|
16
10
|
export { McpServerAdapter } from './mcp/mcp-server-adapter.js';
|
|
17
11
|
export {
|
|
18
12
|
TOOL_BEHAVIOR_METADATA,
|
|
19
13
|
isMutatingTool,
|
|
20
|
-
toolRequiresOperationId
|
|
14
|
+
toolRequiresOperationId,
|
|
21
15
|
} from './application/tools/tool-metadata.js';
|
|
@@ -2,7 +2,10 @@ import crypto from 'node:crypto';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import readline from 'node:readline/promises';
|
|
4
4
|
import { AopKernel } from '../../core/kernel.js';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
computeInstanceId,
|
|
7
|
+
defaultConfigPath,
|
|
8
|
+
} from '../../application/services/instance-isolation-service.js';
|
|
6
9
|
import { ERROR_CODES } from '../../core/error-codes.js';
|
|
7
10
|
import type { AppError } from '../../providers/providers.js';
|
|
8
11
|
import { createToolingRuntime, resolveToolClient } from '../../mcp/runtime-factory.js';
|
|
@@ -50,7 +53,7 @@ async function promptForProjectSelection(projects: ProjectConfig[]): Promise<str
|
|
|
50
53
|
}
|
|
51
54
|
const rl = readline.createInterface({
|
|
52
55
|
input: process.stdin,
|
|
53
|
-
output: process.stdout
|
|
56
|
+
output: process.stdout,
|
|
54
57
|
});
|
|
55
58
|
try {
|
|
56
59
|
const answer = await rl.question('Project number: ');
|
|
@@ -66,7 +69,7 @@ async function promptForProjectSelection(projects: ProjectConfig[]): Promise<str
|
|
|
66
69
|
|
|
67
70
|
export async function runCli(
|
|
68
71
|
argv: string[] = process.argv.slice(2),
|
|
69
|
-
runtime: RuntimeContext = { cwd: process.cwd(), env: process.env }
|
|
72
|
+
runtime: RuntimeContext = { cwd: process.cwd(), env: process.env },
|
|
70
73
|
): Promise<number> {
|
|
71
74
|
const parser = new CliArgumentParser();
|
|
72
75
|
const options = parser.parse(argv);
|
|
@@ -80,16 +83,20 @@ export async function runCli(
|
|
|
80
83
|
|
|
81
84
|
if (options.project) {
|
|
82
85
|
if (!multiConfig) {
|
|
83
|
-
printError(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
+
printError(
|
|
87
|
+
ERROR_CODES.INVALID_CLI_ARGS,
|
|
88
|
+
'No multi-project.yaml found; cannot use --project',
|
|
89
|
+
{
|
|
90
|
+
project: options.project,
|
|
91
|
+
},
|
|
92
|
+
);
|
|
86
93
|
return 1;
|
|
87
94
|
}
|
|
88
95
|
selectedProject = multiLoader.getProject(multiConfig, options.project);
|
|
89
96
|
if (!selectedProject) {
|
|
90
97
|
printError(ERROR_CODES.INVALID_CLI_ARGS, `Project not found: ${options.project}`, {
|
|
91
98
|
project: options.project,
|
|
92
|
-
available: multiConfig.projects.map((p) => p.name)
|
|
99
|
+
available: multiConfig.projects.map((p) => p.name),
|
|
93
100
|
});
|
|
94
101
|
return 1;
|
|
95
102
|
}
|
|
@@ -116,22 +123,30 @@ export async function runCli(
|
|
|
116
123
|
const selectedName = await promptForProjectSelection(multiConfig.projects);
|
|
117
124
|
if (!selectedName) {
|
|
118
125
|
printError(ERROR_CODES.INVALID_CLI_ARGS, 'Invalid project selection', {
|
|
119
|
-
available_projects: multiConfig.projects.map((p) => p.name)
|
|
126
|
+
available_projects: multiConfig.projects.map((p) => p.name),
|
|
120
127
|
});
|
|
121
128
|
return 1;
|
|
122
129
|
}
|
|
123
130
|
selectedProject = multiLoader.getProject(multiConfig, selectedName);
|
|
124
131
|
if (!selectedProject) {
|
|
125
|
-
printError(
|
|
126
|
-
|
|
127
|
-
|
|
132
|
+
printError(
|
|
133
|
+
ERROR_CODES.INVALID_CLI_ARGS,
|
|
134
|
+
'Selected project was not found in configuration',
|
|
135
|
+
{
|
|
136
|
+
selected_project: selectedName,
|
|
137
|
+
},
|
|
138
|
+
);
|
|
128
139
|
return 1;
|
|
129
140
|
}
|
|
130
141
|
repoRoot = selectedProject.path;
|
|
131
142
|
} else {
|
|
132
|
-
printError(
|
|
133
|
-
|
|
134
|
-
|
|
143
|
+
printError(
|
|
144
|
+
ERROR_CODES.INVALID_CLI_ARGS,
|
|
145
|
+
'Multiple projects configured; --project is required',
|
|
146
|
+
{
|
|
147
|
+
available_projects: multiConfig.projects.map((p) => p.name),
|
|
148
|
+
},
|
|
149
|
+
);
|
|
135
150
|
return 1;
|
|
136
151
|
}
|
|
137
152
|
}
|
|
@@ -141,7 +156,7 @@ export async function runCli(
|
|
|
141
156
|
try {
|
|
142
157
|
if (!SUPPORTED_COMMANDS.has(options.command)) {
|
|
143
158
|
printError(ERROR_CODES.INVALID_CLI_ARGS, `Unknown command: ${options.command}`, {
|
|
144
|
-
command: options.command
|
|
159
|
+
command: options.command,
|
|
145
160
|
});
|
|
146
161
|
return 1;
|
|
147
162
|
}
|
|
@@ -157,18 +172,23 @@ export async function runCli(
|
|
|
157
172
|
|
|
158
173
|
if (options.command === CliCommand.Init) {
|
|
159
174
|
const handler = new InitCommandHandler(repoRoot);
|
|
160
|
-
const payload = await handler.execute({
|
|
175
|
+
const payload = await handler.execute({
|
|
176
|
+
auto: options.auto,
|
|
177
|
+
force: options.force,
|
|
178
|
+
advanced_policy: options.advanced_policy,
|
|
179
|
+
});
|
|
161
180
|
printPayload(payload);
|
|
162
181
|
return 0;
|
|
163
182
|
}
|
|
164
183
|
|
|
165
184
|
if (options.command === CliCommand.Dashboard) {
|
|
166
185
|
const handler = new DashboardCommandHandler();
|
|
167
|
-
const defaultDashboardPort =
|
|
186
|
+
const defaultDashboardPort =
|
|
187
|
+
selectedProject?.dashboard_port ?? multiConfig?.defaults?.dashboard_port;
|
|
168
188
|
const payload = await handler.execute({
|
|
169
189
|
port: options.port ?? defaultDashboardPort,
|
|
170
190
|
foreground: options.foreground,
|
|
171
|
-
dev: options.dev
|
|
191
|
+
dev: options.dev,
|
|
172
192
|
});
|
|
173
193
|
printPayload(payload);
|
|
174
194
|
return 0;
|
|
@@ -187,10 +207,14 @@ export async function runCli(
|
|
|
187
207
|
try {
|
|
188
208
|
const projectPolicyPath = multiLoader.resolveProjectPolicyPath(multiConfig, project);
|
|
189
209
|
const projectGatesPath = multiLoader.resolveProjectGatesPath(multiConfig, project);
|
|
190
|
-
const projectKernel = new AopKernel(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
210
|
+
const projectKernel = new AopKernel(
|
|
211
|
+
project.path,
|
|
212
|
+
computeInstanceId(defaultConfigPath(project.path)),
|
|
213
|
+
{
|
|
214
|
+
policyPath: projectPolicyPath,
|
|
215
|
+
gatesPath: projectGatesPath,
|
|
216
|
+
},
|
|
217
|
+
);
|
|
194
218
|
await projectKernel.ensureLoaded();
|
|
195
219
|
const projectTooling = await createToolingRuntime(project.path, projectKernel);
|
|
196
220
|
const projectToolClient = resolveToolClient(transport, projectTooling);
|
|
@@ -202,7 +226,10 @@ export async function runCli(
|
|
|
202
226
|
projectStatuses.push({
|
|
203
227
|
name: project.name,
|
|
204
228
|
path: project.path,
|
|
205
|
-
status: {
|
|
229
|
+
status: {
|
|
230
|
+
ok: false,
|
|
231
|
+
error: { code: typed.code ?? ERROR_CODES.INTERNAL_ERROR, message: typed.message },
|
|
232
|
+
},
|
|
206
233
|
});
|
|
207
234
|
}
|
|
208
235
|
}
|
|
@@ -213,14 +240,18 @@ export async function runCli(
|
|
|
213
240
|
}
|
|
214
241
|
|
|
215
242
|
const selectedPolicyPath =
|
|
216
|
-
selectedProject && multiConfig
|
|
243
|
+
selectedProject && multiConfig
|
|
244
|
+
? multiLoader.resolveProjectPolicyPath(multiConfig, selectedProject)
|
|
245
|
+
: undefined;
|
|
217
246
|
const selectedGatesPath =
|
|
218
|
-
selectedProject && multiConfig
|
|
247
|
+
selectedProject && multiConfig
|
|
248
|
+
? multiLoader.resolveProjectGatesPath(multiConfig, selectedProject)
|
|
249
|
+
: undefined;
|
|
219
250
|
|
|
220
251
|
const instanceId = computeInstanceId(defaultConfigPath(repoRoot));
|
|
221
252
|
const kernel = new AopKernel(repoRoot, instanceId, {
|
|
222
253
|
policyPath: selectedPolicyPath,
|
|
223
|
-
gatesPath: selectedGatesPath
|
|
254
|
+
gatesPath: selectedGatesPath,
|
|
224
255
|
});
|
|
225
256
|
await kernel.ensureLoaded();
|
|
226
257
|
|
|
@@ -234,14 +265,14 @@ export async function runCli(
|
|
|
234
265
|
selection = resolveProviderSelection({
|
|
235
266
|
cli: options as unknown as Record<string, string | undefined>,
|
|
236
267
|
env: runtime.env,
|
|
237
|
-
agentsConfig: kernel.getAgentsConfig()
|
|
268
|
+
agentsConfig: kernel.getAgentsConfig(),
|
|
238
269
|
});
|
|
239
270
|
} catch {
|
|
240
271
|
selection = {
|
|
241
272
|
provider: 'custom',
|
|
242
273
|
model: 'custom-default',
|
|
243
274
|
provider_config_env: null,
|
|
244
|
-
provider_config_ref: null
|
|
275
|
+
provider_config_ref: null,
|
|
245
276
|
};
|
|
246
277
|
}
|
|
247
278
|
commandProvider = new NullWorkerProvider(selection);
|
|
@@ -264,7 +295,7 @@ export async function runCli(
|
|
|
264
295
|
transport,
|
|
265
296
|
options,
|
|
266
297
|
kernel,
|
|
267
|
-
toolClient
|
|
298
|
+
toolClient,
|
|
268
299
|
});
|
|
269
300
|
printPayload(payload);
|
|
270
301
|
return 0;
|
|
@@ -290,7 +321,13 @@ export async function runCli(
|
|
|
290
321
|
};
|
|
291
322
|
const gracePeriodSeconds = policySnapshot.cleanup?.grace_period_seconds;
|
|
292
323
|
const autoAfterMerge = policySnapshot.cleanup?.auto_after_merge === true;
|
|
293
|
-
const handler = new CleanupCommandHandler(
|
|
324
|
+
const handler = new CleanupCommandHandler(
|
|
325
|
+
toolClient,
|
|
326
|
+
runId,
|
|
327
|
+
repoRoot,
|
|
328
|
+
gracePeriodSeconds,
|
|
329
|
+
autoAfterMerge,
|
|
330
|
+
);
|
|
294
331
|
const payload = await handler.execute(options);
|
|
295
332
|
printPayload(payload);
|
|
296
333
|
return 0;
|
|
@@ -332,7 +369,7 @@ export async function runCli(
|
|
|
332
369
|
kernel,
|
|
333
370
|
toolClient,
|
|
334
371
|
maxActiveFeatures: multiConfig?.defaults?.max_active_features ?? undefined,
|
|
335
|
-
maxParallelGateRuns: multiConfig?.defaults?.max_parallel_gate_runs ?? undefined
|
|
372
|
+
maxParallelGateRuns: multiConfig?.defaults?.max_parallel_gate_runs ?? undefined,
|
|
336
373
|
});
|
|
337
374
|
printPayload(payload);
|
|
338
375
|
return 0;
|
|
@@ -342,7 +379,7 @@ export async function runCli(
|
|
|
342
379
|
printError(code, typed.message || 'Unhandled CLI error', {
|
|
343
380
|
...(typed.details ?? {}),
|
|
344
381
|
retryable: false,
|
|
345
|
-
requires_human: true
|
|
382
|
+
requires_human: true,
|
|
346
383
|
});
|
|
347
384
|
return 1;
|
|
348
385
|
}
|
|
@@ -5,7 +5,7 @@ export interface ToolExecutionRouterPort {
|
|
|
5
5
|
dispatchTool(
|
|
6
6
|
toolName: string,
|
|
7
7
|
args: Record<string, unknown>,
|
|
8
|
-
context: { actorType: string; actorId: string }
|
|
8
|
+
context: { actorType: string; actorId: string },
|
|
9
9
|
): Promise<unknown>;
|
|
10
10
|
normalizeError(error: unknown): ToolResponse;
|
|
11
11
|
}
|
|
@@ -17,11 +17,15 @@ export class KernelToolExecutor {
|
|
|
17
17
|
this.router = router;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
async execute(
|
|
20
|
+
async execute(
|
|
21
|
+
tool: ToolCatalogEntry,
|
|
22
|
+
args: Record<string, unknown>,
|
|
23
|
+
claims: VerifiedActorClaims,
|
|
24
|
+
): Promise<ToolResponse> {
|
|
21
25
|
try {
|
|
22
26
|
const result = (await this.router.dispatchTool(tool.name, args, {
|
|
23
27
|
actorType: claims.actor_type,
|
|
24
|
-
actorId: claims.actor_id
|
|
28
|
+
actorId: claims.actor_id,
|
|
25
29
|
})) as Record<string, unknown>;
|
|
26
30
|
const payload =
|
|
27
31
|
result.data && typeof result.data === 'object'
|