agentic-orchestrator 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +10 -0
- package/.prettierrc.json +24 -0
- package/CLAUDE.md +3 -2
- package/README.md +71 -48
- package/agentic/orchestrator/defaults/policy.defaults.yaml +1 -1
- package/agentic/orchestrator/prompts/planner.system.md +1 -0
- package/agentic/orchestrator/schemas/agents.schema.json +5 -22
- package/agentic/orchestrator/schemas/gates.schema.json +4 -19
- package/agentic/orchestrator/schemas/index.schema.json +3 -14
- package/agentic/orchestrator/schemas/multi-project.schema.json +2 -8
- package/agentic/orchestrator/schemas/plan.schema.json +6 -26
- package/agentic/orchestrator/schemas/policy.schema.json +19 -81
- package/agentic/orchestrator/schemas/policy.user.schema.json +1 -5
- package/agentic/orchestrator/schemas/qa_test_index.schema.json +5 -29
- package/agentic/orchestrator/schemas/state.schema.json +11 -61
- package/agentic/orchestrator/tools/catalog.json +33 -164
- package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/feature.delete.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/feature.get_context.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/feature.init.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/feature.log_append.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/input/feature.state_get.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/feature.state_patch.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/gates.run.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/locks.acquire.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/locks.release.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/performance.record_outcome.input.schema.json +10 -1
- package/agentic/orchestrator/tools/schemas/input/plan.get.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/plan.submit.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/plan.update.input.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/input/qa.test_index_get.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/qa.test_index_update.input.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/input/repo.apply_patch.input.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/input/repo.diff.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/repo.diff_bundle.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/repo.ensure_worktree.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/repo.read_file.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/repo.search.input.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/input/repo.status.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/input/report.feature_summary.input.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/output/collisions.scan.output.schema.json +1 -3
- package/agentic/orchestrator/tools/schemas/output/evidence.latest.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/feature.delete.output.schema.json +4 -20
- package/agentic/orchestrator/tools/schemas/output/feature.discover_specs.output.schema.json +2 -7
- package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +1 -8
- package/agentic/orchestrator/tools/schemas/output/feature.init.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/feature.log_append.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/output/feature.state_get.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/feature.state_patch.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/gates.list.output.schema.json +2 -7
- package/agentic/orchestrator/tools/schemas/output/gates.run.output.schema.json +1 -8
- package/agentic/orchestrator/tools/schemas/output/locks.acquire.output.schema.json +1 -7
- package/agentic/orchestrator/tools/schemas/output/locks.release.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/performance.get_analytics.output.schema.json +22 -2
- package/agentic/orchestrator/tools/schemas/output/plan.get.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/plan.submit.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/plan.update.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/qa.test_index_get.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/qa.test_index_update.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/repo.apply_patch.output.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/output/repo.diff.output.schema.json +1 -4
- package/agentic/orchestrator/tools/schemas/output/repo.diff_bundle.output.schema.json +1 -7
- package/agentic/orchestrator/tools/schemas/output/repo.ensure_worktree.output.schema.json +1 -6
- package/agentic/orchestrator/tools/schemas/output/repo.read_file.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/repo.search.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/repo.status.output.schema.json +1 -5
- package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +1 -4
- package/apps/control-plane/scripts/validate-architecture-rules.mjs +16 -5
- package/apps/control-plane/scripts/validate-docker-mcp-contract.mjs +30 -8
- package/apps/control-plane/scripts/validate-mcp-contracts.ts +13 -7
- package/apps/control-plane/src/application/adapters/adapter-registry.ts +35 -15
- package/apps/control-plane/src/application/multi-project-loader.ts +27 -10
- package/apps/control-plane/src/application/services/activity-monitor-service.ts +26 -14
- package/apps/control-plane/src/application/services/collision-queue-service.ts +31 -17
- package/apps/control-plane/src/application/services/cost-tracking-service.ts +23 -16
- package/apps/control-plane/src/application/services/dependency-scheduler-service.ts +12 -4
- package/apps/control-plane/src/application/services/feature-deletion-service.ts +94 -58
- package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +19 -13
- package/apps/control-plane/src/application/services/feature-state-service.ts +29 -19
- package/apps/control-plane/src/application/services/gate-interpolation-service.ts +7 -2
- package/apps/control-plane/src/application/services/gate-service.ts +64 -41
- package/apps/control-plane/src/application/services/instance-isolation-service.ts +1 -1
- package/apps/control-plane/src/application/services/issue-tracker-service.ts +49 -38
- package/apps/control-plane/src/application/services/lock-service.ts +75 -49
- package/apps/control-plane/src/application/services/merge-service.ts +91 -50
- package/apps/control-plane/src/application/services/notifier-service.ts +42 -20
- package/apps/control-plane/src/application/services/patch-service.ts +73 -44
- package/apps/control-plane/src/application/services/performance-analytics-service.ts +8 -6
- package/apps/control-plane/src/application/services/plan-service.ts +148 -89
- package/apps/control-plane/src/application/services/policy-loader-service.ts +10 -4
- package/apps/control-plane/src/application/services/pr-monitor-service.ts +33 -14
- package/apps/control-plane/src/application/services/qa-index-service.ts +20 -16
- package/apps/control-plane/src/application/services/reactions-service.ts +30 -15
- package/apps/control-plane/src/application/services/reporting-service.ts +16 -12
- package/apps/control-plane/src/application/services/run-lease-service.ts +138 -81
- package/apps/control-plane/src/application/tools/tool-metadata.ts +5 -5
- package/apps/control-plane/src/application/tools/tool-router.ts +6 -3
- package/apps/control-plane/src/cli/aop.ts +2 -2
- package/apps/control-plane/src/cli/attach-command-handler.ts +9 -9
- package/apps/control-plane/src/cli/cleanup-command-handler.ts +16 -11
- package/apps/control-plane/src/cli/cli-argument-parser.ts +6 -3
- package/apps/control-plane/src/cli/dashboard-command-handler.ts +28 -8
- package/apps/control-plane/src/cli/delete-command-handler.ts +7 -7
- package/apps/control-plane/src/cli/env-file.ts +115 -0
- package/apps/control-plane/src/cli/help-command-handler.ts +61 -32
- package/apps/control-plane/src/cli/init-command-handler.ts +182 -56
- package/apps/control-plane/src/cli/io.ts +7 -3
- package/apps/control-plane/src/cli/resume-command-handler.ts +21 -13
- package/apps/control-plane/src/cli/retry-command-handler.ts +12 -11
- package/apps/control-plane/src/cli/run-command-handler.ts +12 -8
- package/apps/control-plane/src/cli/send-command-handler.ts +6 -6
- package/apps/control-plane/src/cli/spec-ingestion-service.ts +14 -8
- package/apps/control-plane/src/cli/spec-input-resolver.ts +6 -1
- package/apps/control-plane/src/cli/spec-utils.ts +2 -2
- package/apps/control-plane/src/cli/status-command-handler.ts +13 -12
- package/apps/control-plane/src/cli/tooling.ts +3 -3
- package/apps/control-plane/src/cli/types.ts +1 -1
- package/apps/control-plane/src/core/collisions.ts +27 -10
- package/apps/control-plane/src/core/constants.ts +13 -7
- package/apps/control-plane/src/core/error-codes.ts +1 -1
- package/apps/control-plane/src/core/fs.ts +11 -5
- package/apps/control-plane/src/core/gates.ts +53 -27
- package/apps/control-plane/src/core/git.ts +18 -6
- package/apps/control-plane/src/core/kernel.ts +513 -227
- package/apps/control-plane/src/core/patch.ts +7 -3
- package/apps/control-plane/src/core/path-layout.ts +5 -1
- package/apps/control-plane/src/core/path-rules.ts +19 -5
- package/apps/control-plane/src/core/qa-index.ts +26 -12
- package/apps/control-plane/src/core/response.ts +9 -6
- package/apps/control-plane/src/core/schemas.ts +29 -10
- package/apps/control-plane/src/core/tool-caller.ts +1 -1
- package/apps/control-plane/src/core/workspace-hooks.ts +5 -5
- package/apps/control-plane/src/index.ts +3 -9
- package/apps/control-plane/src/interfaces/cli/bootstrap.ts +79 -35
- package/apps/control-plane/src/mcp/kernel-tool-executor.ts +7 -3
- package/apps/control-plane/src/mcp/mcp-server-adapter.ts +12 -10
- package/apps/control-plane/src/mcp/operation-ledger.ts +18 -8
- package/apps/control-plane/src/mcp/protocol-contract.ts +2 -2
- package/apps/control-plane/src/mcp/runtime-factory.ts +15 -6
- package/apps/control-plane/src/mcp/token-auth-verifier.ts +3 -2
- package/apps/control-plane/src/mcp/token-claims-validator.ts +11 -7
- package/apps/control-plane/src/mcp/tool-authorizer.ts +1 -3
- package/apps/control-plane/src/mcp/tool-client.ts +17 -5
- package/apps/control-plane/src/mcp/tool-contract-validator.ts +17 -8
- package/apps/control-plane/src/mcp/tool-registry-loader.ts +7 -3
- package/apps/control-plane/src/mcp/tool-runtime.ts +66 -39
- package/apps/control-plane/src/mcp/tools-markdown-generator.ts +6 -1
- package/apps/control-plane/src/providers/providers.ts +137 -54
- package/apps/control-plane/src/supervisor/build-wave-executor.ts +44 -25
- package/apps/control-plane/src/supervisor/planning-wave-executor.ts +46 -33
- package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +1 -1
- package/apps/control-plane/src/supervisor/qa-wave-executor.ts +38 -23
- package/apps/control-plane/src/supervisor/run-coordinator.ts +71 -36
- package/apps/control-plane/src/supervisor/runtime.ts +59 -35
- package/apps/control-plane/src/supervisor/session-orchestrator.ts +48 -31
- package/apps/control-plane/src/supervisor/types.ts +22 -7
- package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -20
- package/apps/control-plane/test/activity-monitor.spec.ts +54 -30
- package/apps/control-plane/test/adapter-registry.spec.ts +5 -5
- package/apps/control-plane/test/aop.spec.ts +4 -4
- package/apps/control-plane/test/batch-operations.spec.ts +20 -18
- package/apps/control-plane/test/bootstrap-attach.spec.ts +52 -19
- package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +58 -27
- package/apps/control-plane/test/bootstrap.spec.ts +72 -40
- package/apps/control-plane/test/cleanup-command.spec.ts +86 -32
- package/apps/control-plane/test/cli-helpers.spec.ts +119 -66
- package/apps/control-plane/test/cli.spec.ts +1 -1
- package/apps/control-plane/test/cli.unit.spec.ts +226 -167
- package/apps/control-plane/test/collision-queue.spec.ts +49 -40
- package/apps/control-plane/test/collisions.spec.ts +30 -30
- package/apps/control-plane/test/core-utils.spec.ts +29 -15
- package/apps/control-plane/test/cost-tracking.spec.ts +38 -22
- package/apps/control-plane/test/dashboard-api.integration.spec.ts +68 -36
- package/apps/control-plane/test/dashboard-client.spec.ts +18 -12
- package/apps/control-plane/test/dashboard-command.spec.ts +11 -7
- package/apps/control-plane/test/delete-command-handler.spec.ts +49 -41
- package/apps/control-plane/test/dependency-scheduler.spec.ts +47 -20
- package/apps/control-plane/test/epoch-tracking.spec.ts +9 -9
- package/apps/control-plane/test/feature-deletion-service.spec.ts +60 -52
- package/apps/control-plane/test/feature-lifecycle.spec.ts +36 -17
- package/apps/control-plane/test/gates.spec.ts +101 -81
- package/apps/control-plane/test/git-spawn-error.spec.ts +1 -1
- package/apps/control-plane/test/helpers.ts +10 -6
- package/apps/control-plane/test/incremental-gates.spec.ts +59 -20
- package/apps/control-plane/test/init-wizard.spec.ts +328 -68
- package/apps/control-plane/test/instance-isolation.spec.ts +43 -10
- package/apps/control-plane/test/issue-tracker.spec.ts +368 -128
- package/apps/control-plane/test/kernel-collision-replay.spec.ts +50 -29
- package/apps/control-plane/test/kernel.branches.spec.ts +64 -40
- package/apps/control-plane/test/kernel.coverage.spec.ts +85 -49
- package/apps/control-plane/test/kernel.coverage2.spec.ts +109 -65
- package/apps/control-plane/test/kernel.spec.ts +134 -51
- package/apps/control-plane/test/lock-service.spec.ts +92 -68
- package/apps/control-plane/test/mcp-helpers.spec.ts +53 -39
- package/apps/control-plane/test/mcp.spec.ts +231 -115
- package/apps/control-plane/test/merge-service.spec.ts +142 -94
- package/apps/control-plane/test/multi-project.spec.ts +28 -22
- package/apps/control-plane/test/notifier-service.spec.ts +136 -92
- package/apps/control-plane/test/parallel-gates.spec.ts +51 -35
- package/apps/control-plane/test/patch-service.spec.ts +128 -48
- package/apps/control-plane/test/performance-analytics.spec.ts +99 -63
- package/apps/control-plane/test/plan-service.spec.ts +50 -39
- package/apps/control-plane/test/planning-wave-executor.spec.ts +95 -71
- package/apps/control-plane/test/policy-loader-service.spec.ts +41 -19
- package/apps/control-plane/test/pr-monitor.spec.ts +113 -64
- package/apps/control-plane/test/providers.spec.ts +208 -104
- package/apps/control-plane/test/qa-index-service.spec.ts +31 -33
- package/apps/control-plane/test/qa-index.spec.ts +58 -61
- package/apps/control-plane/test/reactions.spec.ts +88 -45
- package/apps/control-plane/test/response.spec.ts +5 -5
- package/apps/control-plane/test/resume-command.spec.ts +121 -80
- package/apps/control-plane/test/run-coordinator.spec.ts +205 -136
- package/apps/control-plane/test/schema-date-time.spec.ts +49 -41
- package/apps/control-plane/test/service-retry-paths.spec.ts +77 -57
- package/apps/control-plane/test/services.spec.ts +147 -129
- package/apps/control-plane/test/session-management.spec.ts +136 -74
- package/apps/control-plane/test/spec-ingestion.spec.ts +23 -21
- package/apps/control-plane/test/spec-input-resolver.spec.ts +11 -10
- package/apps/control-plane/test/supervisor-collaborators.spec.ts +168 -121
- package/apps/control-plane/test/supervisor.calltool.spec.ts +21 -18
- package/apps/control-plane/test/supervisor.spec.ts +67 -43
- package/apps/control-plane/test/supervisor.unit.spec.ts +195 -126
- package/apps/control-plane/test/token-auth-verifier.spec.ts +29 -14
- package/apps/control-plane/test/tool-registry-loader.spec.ts +51 -27
- package/apps/control-plane/test/tool-runtime.spec.ts +63 -46
- package/apps/control-plane/test/worker-decision-loop.spec.ts +143 -122
- package/apps/control-plane/test/workspace-hooks.spec.ts +61 -23
- package/apps/control-plane/tsconfig.build.json +2 -7
- package/apps/control-plane/tsconfig.json +1 -5
- package/apps/control-plane/vitest.config.ts +7 -7
- package/config/agentic/orchestrator/adapters.yaml +3 -0
- package/config/agentic/orchestrator/agents.yaml +14 -0
- package/config/agentic/orchestrator/gates.yaml +28 -0
- package/config/agentic/orchestrator/policy.yaml +22 -0
- package/config/agentic/orchestrator/prompts/builder.system.md +1 -0
- package/config/agentic/orchestrator/prompts/planner.system.md +16 -0
- package/config/agentic/orchestrator/prompts/qa.system.md +1 -0
- package/dist/apps/control-plane/application/adapters/adapter-registry.js +12 -5
- package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -1
- package/dist/apps/control-plane/application/multi-project-loader.js +26 -9
- package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -1
- package/dist/apps/control-plane/application/services/activity-monitor-service.js +7 -7
- package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/collision-queue-service.js +7 -7
- package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/cost-tracking-service.js +6 -8
- package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-deletion-service.js +37 -29
- package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +10 -10
- package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/feature-state-service.js +11 -11
- package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/gate-interpolation-service.js +3 -1
- package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/gate-service.js +26 -26
- package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/instance-isolation-service.js +1 -1
- package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/issue-tracker-service.js +25 -15
- package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/lock-service.js +32 -32
- package/dist/apps/control-plane/application/services/lock-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/merge-service.js +41 -27
- package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/notifier-service.js +29 -15
- package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/patch-service.js +21 -19
- package/dist/apps/control-plane/application/services/patch-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/performance-analytics-service.js +4 -4
- package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/plan-service.js +33 -33
- package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/policy-loader-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/pr-monitor-service.js +23 -11
- package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/qa-index-service.js +11 -11
- package/dist/apps/control-plane/application/services/qa-index-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/reactions-service.js +13 -9
- package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/reporting-service.js +11 -9
- package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
- package/dist/apps/control-plane/application/services/run-lease-service.js +34 -33
- package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
- package/dist/apps/control-plane/application/tools/tool-metadata.js +2 -2
- package/dist/apps/control-plane/application/tools/tool-router.js.map +1 -1
- package/dist/apps/control-plane/cli/attach-command-handler.js +9 -9
- package/dist/apps/control-plane/cli/cleanup-command-handler.js +11 -9
- package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/cli-argument-parser.js +4 -3
- package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
- package/dist/apps/control-plane/cli/dashboard-command-handler.js +23 -7
- package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/delete-command-handler.js +7 -7
- package/dist/apps/control-plane/cli/env-file.d.ts +4 -0
- package/dist/apps/control-plane/cli/env-file.js +89 -0
- package/dist/apps/control-plane/cli/env-file.js.map +1 -0
- package/dist/apps/control-plane/cli/help-command-handler.js +58 -30
- package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/init-command-handler.js +97 -37
- package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/io.js +2 -2
- package/dist/apps/control-plane/cli/io.js.map +1 -1
- package/dist/apps/control-plane/cli/resume-command-handler.js +9 -9
- package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/retry-command-handler.js +12 -11
- package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/run-command-handler.js +12 -8
- package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/send-command-handler.js +6 -6
- package/dist/apps/control-plane/cli/spec-ingestion-service.js +10 -8
- package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-input-resolver.js.map +1 -1
- package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
- package/dist/apps/control-plane/cli/status-command-handler.js +8 -8
- package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
- package/dist/apps/control-plane/cli/tooling.js +1 -1
- package/dist/apps/control-plane/core/collisions.js +11 -8
- package/dist/apps/control-plane/core/collisions.js.map +1 -1
- package/dist/apps/control-plane/core/constants.js +13 -7
- package/dist/apps/control-plane/core/constants.js.map +1 -1
- package/dist/apps/control-plane/core/error-codes.js +1 -1
- package/dist/apps/control-plane/core/fs.js.map +1 -1
- package/dist/apps/control-plane/core/gates.d.ts +2 -2
- package/dist/apps/control-plane/core/gates.js +26 -19
- package/dist/apps/control-plane/core/gates.js.map +1 -1
- package/dist/apps/control-plane/core/git.js +3 -3
- package/dist/apps/control-plane/core/git.js.map +1 -1
- package/dist/apps/control-plane/core/kernel.d.ts +1 -0
- package/dist/apps/control-plane/core/kernel.js +134 -81
- package/dist/apps/control-plane/core/kernel.js.map +1 -1
- package/dist/apps/control-plane/core/patch.js +7 -3
- package/dist/apps/control-plane/core/patch.js.map +1 -1
- package/dist/apps/control-plane/core/path-layout.d.ts +1 -0
- package/dist/apps/control-plane/core/path-layout.js +4 -1
- package/dist/apps/control-plane/core/path-layout.js.map +1 -1
- package/dist/apps/control-plane/core/path-rules.js +3 -1
- package/dist/apps/control-plane/core/path-rules.js.map +1 -1
- package/dist/apps/control-plane/core/qa-index.js +5 -5
- package/dist/apps/control-plane/core/qa-index.js.map +1 -1
- package/dist/apps/control-plane/core/response.js +3 -3
- package/dist/apps/control-plane/core/response.js.map +1 -1
- package/dist/apps/control-plane/core/schemas.js +10 -6
- package/dist/apps/control-plane/core/schemas.js.map +1 -1
- package/dist/apps/control-plane/core/workspace-hooks.js +3 -3
- package/dist/apps/control-plane/index.d.ts +1 -1
- package/dist/apps/control-plane/index.js +1 -1
- package/dist/apps/control-plane/index.js.map +1 -1
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js +40 -23
- package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js +1 -1
- package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
- package/dist/apps/control-plane/mcp/mcp-server-adapter.js +6 -7
- package/dist/apps/control-plane/mcp/mcp-server-adapter.js.map +1 -1
- package/dist/apps/control-plane/mcp/operation-ledger.js +5 -5
- package/dist/apps/control-plane/mcp/operation-ledger.js.map +1 -1
- package/dist/apps/control-plane/mcp/protocol-contract.js +2 -2
- package/dist/apps/control-plane/mcp/runtime-factory.js +2 -2
- package/dist/apps/control-plane/mcp/runtime-factory.js.map +1 -1
- package/dist/apps/control-plane/mcp/token-auth-verifier.js +1 -1
- package/dist/apps/control-plane/mcp/token-auth-verifier.js.map +1 -1
- package/dist/apps/control-plane/mcp/token-claims-validator.js +5 -5
- package/dist/apps/control-plane/mcp/token-claims-validator.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-authorizer.js +1 -3
- package/dist/apps/control-plane/mcp/tool-authorizer.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-client.js +2 -2
- package/dist/apps/control-plane/mcp/tool-client.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-contract-validator.js +3 -3
- package/dist/apps/control-plane/mcp/tool-contract-validator.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-registry-loader.js +1 -1
- package/dist/apps/control-plane/mcp/tool-registry-loader.js.map +1 -1
- package/dist/apps/control-plane/mcp/tool-runtime.js +17 -17
- package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
- package/dist/apps/control-plane/mcp/tools-markdown-generator.js +6 -1
- package/dist/apps/control-plane/mcp/tools-markdown-generator.js.map +1 -1
- package/dist/apps/control-plane/providers/providers.d.ts +3 -2
- package/dist/apps/control-plane/providers/providers.js +81 -39
- package/dist/apps/control-plane/providers/providers.js.map +1 -1
- package/dist/apps/control-plane/supervisor/build-wave-executor.js +12 -12
- package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js +19 -16
- package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +1 -1
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js +13 -13
- package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
- package/dist/apps/control-plane/supervisor/run-coordinator.js +37 -20
- package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/runtime.js +25 -21
- package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
- package/dist/apps/control-plane/supervisor/session-orchestrator.js +29 -23
- package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
- package/dist/apps/control-plane/supervisor/types.d.ts +3 -3
- package/dist/apps/control-plane/supervisor/types.js.map +1 -1
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js +14 -16
- package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
- package/eslint.config.mjs +20 -20
- package/example-configurations/README.md +1 -1
- package/example-configurations/java/agents.yaml +3 -3
- package/example-configurations/java/policy.yaml +1 -1
- package/example-configurations/node/agents.yaml +3 -3
- package/example-configurations/node/policy.yaml +1 -1
- package/package.json +10 -5
- package/packages/web-dashboard/next.config.js +2 -2
- package/packages/web-dashboard/src/app/api/actions/route.ts +25 -9
- package/packages/web-dashboard/src/app/api/events/route.ts +20 -6
- package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +88 -37
- package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +8 -5
- package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +27 -9
- package/packages/web-dashboard/src/app/api/features/[id]/route.ts +5 -2
- package/packages/web-dashboard/src/app/api/projects/route.ts +5 -5
- package/packages/web-dashboard/src/app/globals.css +10 -2
- package/packages/web-dashboard/src/app/page.tsx +100 -37
- package/packages/web-dashboard/src/lib/aop-client.ts +68 -37
- package/packages/web-dashboard/src/lib/multi-project-config.ts +28 -7
- package/packages/web-dashboard/src/lib/orchestrator-tools.ts +59 -36
- package/packages/web-dashboard/tsconfig.json +3 -11
- package/scripts/nx-safe.mjs +10 -10
- package/spec-files/completed/agentic_orchestrator_cli_delete_command_spec.md +5 -0
- package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +189 -90
- package/spec-files/completed/agentic_orchestrator_init_policy_ux_simplification_spec.md +49 -16
- package/spec-files/completed/agentic_orchestrator_mcp_formalization_spec.md +24 -1
- package/spec-files/completed/agentic_orchestrator_single_global_orchestrator_spec.md +9 -0
- package/spec-files/completed/agentic_orchestrator_spec.md +171 -75
- package/spec-files/completed/agentic_orchestrator_validator_hardening_spec.md +25 -17
- package/spec-files/outstanding/agentic_orchestrator_artifact_database_publishing_spec.md +40 -5
- package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +23 -12
- package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +16 -4
- package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +42 -2
- package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +209 -130
- package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +56 -3
- package/spec-files/outstanding/agentic_orchestrator_productization_commercial_spec.md +77 -10
- package/spec-files/outstanding/agentic_orchestrator_provider_auth_bootstrap_spec.md +384 -0
- package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +29 -14
- package/spec-files/progress.md +186 -175
- package/tsconfig.json +2 -8
|
@@ -40,9 +40,9 @@ async function writePassingGates(root: string): Promise<void> {
|
|
|
40
40
|
' coverage:',
|
|
41
41
|
' type: none',
|
|
42
42
|
'capabilities:',
|
|
43
|
-
' - none'
|
|
43
|
+
' - none',
|
|
44
44
|
].join('\n'),
|
|
45
|
-
'utf8'
|
|
45
|
+
'utf8',
|
|
46
46
|
);
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -157,21 +157,23 @@ describe('normalizeRuntimeSessions edge cases', () => {
|
|
|
157
157
|
|
|
158
158
|
it('skips feature_sessions entry with empty string key (line 260 true branch)', () => {
|
|
159
159
|
const result = kernel.normalizeRuntimeSessions({
|
|
160
|
-
feature_sessions: {
|
|
160
|
+
feature_sessions: {
|
|
161
|
+
'': { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: 'q1' },
|
|
162
|
+
},
|
|
161
163
|
});
|
|
162
164
|
expect(Object.keys(result.feature_sessions)).toHaveLength(0);
|
|
163
165
|
});
|
|
164
166
|
|
|
165
167
|
it('skips feature_sessions entry where raw is null (line 260 true branch)', () => {
|
|
166
168
|
const result = kernel.normalizeRuntimeSessions({
|
|
167
|
-
feature_sessions: { feature_a: null }
|
|
169
|
+
feature_sessions: { feature_a: null },
|
|
168
170
|
});
|
|
169
171
|
expect(Object.keys(result.feature_sessions)).toHaveLength(0);
|
|
170
172
|
});
|
|
171
173
|
|
|
172
174
|
it('skips feature_sessions entry where raw is non-object (line 260 true branch)', () => {
|
|
173
175
|
const result = kernel.normalizeRuntimeSessions({
|
|
174
|
-
feature_sessions: { feature_a: 42 }
|
|
176
|
+
feature_sessions: { feature_a: 42 },
|
|
175
177
|
});
|
|
176
178
|
expect(Object.keys(result.feature_sessions)).toHaveLength(0);
|
|
177
179
|
});
|
|
@@ -179,8 +181,8 @@ describe('normalizeRuntimeSessions edge cases', () => {
|
|
|
179
181
|
it('includes valid feature_sessions entry (line 260 false branch)', () => {
|
|
180
182
|
const result = kernel.normalizeRuntimeSessions({
|
|
181
183
|
feature_sessions: {
|
|
182
|
-
feature_a: { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: 'q1' }
|
|
183
|
-
}
|
|
184
|
+
feature_a: { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: 'q1' },
|
|
185
|
+
},
|
|
184
186
|
});
|
|
185
187
|
expect(result.feature_sessions['feature_a']).toBeDefined();
|
|
186
188
|
expect(result.feature_sessions['feature_a'].planner_session_id).toBe('p1');
|
|
@@ -188,42 +190,48 @@ describe('normalizeRuntimeSessions edge cases', () => {
|
|
|
188
190
|
|
|
189
191
|
it('falls back to unassigned for missing planner_session_id (line 266 false branch)', () => {
|
|
190
192
|
const result = kernel.normalizeRuntimeSessions({
|
|
191
|
-
feature_sessions: { feature_a: { builder_session_id: 'b1', qa_session_id: 'q1' } }
|
|
193
|
+
feature_sessions: { feature_a: { builder_session_id: 'b1', qa_session_id: 'q1' } },
|
|
192
194
|
});
|
|
193
195
|
expect(result.feature_sessions['feature_a'].planner_session_id).toBe('unassigned');
|
|
194
196
|
});
|
|
195
197
|
|
|
196
198
|
it('falls back to unassigned for non-string planner_session_id (line 266 false branch)', () => {
|
|
197
199
|
const result = kernel.normalizeRuntimeSessions({
|
|
198
|
-
feature_sessions: {
|
|
200
|
+
feature_sessions: {
|
|
201
|
+
feature_a: { planner_session_id: 123, builder_session_id: 'b1', qa_session_id: 'q1' },
|
|
202
|
+
},
|
|
199
203
|
});
|
|
200
204
|
expect(result.feature_sessions['feature_a'].planner_session_id).toBe('unassigned');
|
|
201
205
|
});
|
|
202
206
|
|
|
203
207
|
it('falls back to unassigned for missing builder_session_id (line 268 false branch)', () => {
|
|
204
208
|
const result = kernel.normalizeRuntimeSessions({
|
|
205
|
-
feature_sessions: { feature_a: { planner_session_id: 'p1', qa_session_id: 'q1' } }
|
|
209
|
+
feature_sessions: { feature_a: { planner_session_id: 'p1', qa_session_id: 'q1' } },
|
|
206
210
|
});
|
|
207
211
|
expect(result.feature_sessions['feature_a'].builder_session_id).toBe('unassigned');
|
|
208
212
|
});
|
|
209
213
|
|
|
210
214
|
it('falls back to unassigned for non-string builder_session_id (line 268 false branch)', () => {
|
|
211
215
|
const result = kernel.normalizeRuntimeSessions({
|
|
212
|
-
feature_sessions: {
|
|
216
|
+
feature_sessions: {
|
|
217
|
+
feature_a: { planner_session_id: 'p1', builder_session_id: false, qa_session_id: 'q1' },
|
|
218
|
+
},
|
|
213
219
|
});
|
|
214
220
|
expect(result.feature_sessions['feature_a'].builder_session_id).toBe('unassigned');
|
|
215
221
|
});
|
|
216
222
|
|
|
217
223
|
it('falls back to unassigned for missing qa_session_id (line 269 false branch)', () => {
|
|
218
224
|
const result = kernel.normalizeRuntimeSessions({
|
|
219
|
-
feature_sessions: { feature_a: { planner_session_id: 'p1', builder_session_id: 'b1' } }
|
|
225
|
+
feature_sessions: { feature_a: { planner_session_id: 'p1', builder_session_id: 'b1' } },
|
|
220
226
|
});
|
|
221
227
|
expect(result.feature_sessions['feature_a'].qa_session_id).toBe('unassigned');
|
|
222
228
|
});
|
|
223
229
|
|
|
224
230
|
it('falls back to unassigned for non-string qa_session_id (line 269 false branch)', () => {
|
|
225
231
|
const result = kernel.normalizeRuntimeSessions({
|
|
226
|
-
feature_sessions: {
|
|
232
|
+
feature_sessions: {
|
|
233
|
+
feature_a: { planner_session_id: 'p1', builder_session_id: 'b1', qa_session_id: [] },
|
|
234
|
+
},
|
|
227
235
|
});
|
|
228
236
|
expect(result.feature_sessions['feature_a'].qa_session_id).toBe('unassigned');
|
|
229
237
|
});
|
|
@@ -327,7 +335,10 @@ describe('normalizeError edge cases', () => {
|
|
|
327
335
|
});
|
|
328
336
|
|
|
329
337
|
it('returns normalizedResponse when error contains it', () => {
|
|
330
|
-
const normalizedResponse = {
|
|
338
|
+
const normalizedResponse = {
|
|
339
|
+
ok: false as const,
|
|
340
|
+
error: { code: 'test_code', message: 'test' },
|
|
341
|
+
};
|
|
331
342
|
const result = kernel.normalizeError({ normalizedResponse });
|
|
332
343
|
expect(result).toBe(normalizedResponse);
|
|
333
344
|
});
|
|
@@ -419,9 +430,9 @@ describe('AopKernel invoke with edge-case args', () => {
|
|
|
419
430
|
{
|
|
420
431
|
feature_id: 'feat_cost',
|
|
421
432
|
tokens_used_delta: 'not-a-number',
|
|
422
|
-
estimated_cost_usd_delta: 'also-not-a-number'
|
|
433
|
+
estimated_cost_usd_delta: 'also-not-a-number',
|
|
423
434
|
},
|
|
424
|
-
ORCH
|
|
435
|
+
ORCH,
|
|
425
436
|
);
|
|
426
437
|
expect(result.ok).toBe(true);
|
|
427
438
|
});
|
|
@@ -433,7 +444,7 @@ describe('AopKernel invoke with edge-case args', () => {
|
|
|
433
444
|
const result = await kernel.invoke(
|
|
434
445
|
'cost.record',
|
|
435
446
|
{ feature_id: 'feat_cost2', tokens_used_delta: 100, estimated_cost_usd_delta: 0.05 },
|
|
436
|
-
ORCH
|
|
447
|
+
ORCH,
|
|
437
448
|
);
|
|
438
449
|
expect(result.ok).toBe(true);
|
|
439
450
|
});
|
|
@@ -443,16 +454,16 @@ describe('AopKernel invoke with edge-case args', () => {
|
|
|
443
454
|
const result = await kernel.invoke(
|
|
444
455
|
'performance.record_outcome',
|
|
445
456
|
{
|
|
446
|
-
feature_id: 123,
|
|
447
|
-
provider: true,
|
|
448
|
-
model: null,
|
|
449
|
-
status: [],
|
|
450
|
-
gate_pass: 'yes',
|
|
451
|
-
retry_count: 'two',
|
|
452
|
-
duration_ms: '5000',
|
|
453
|
-
cost_usd: '1.5'
|
|
457
|
+
feature_id: 123, // not string → ''
|
|
458
|
+
provider: true, // not string → ''
|
|
459
|
+
model: null, // not string → ''
|
|
460
|
+
status: [], // not string → ''
|
|
461
|
+
gate_pass: 'yes', // not boolean → false
|
|
462
|
+
retry_count: 'two', // not number → 0
|
|
463
|
+
duration_ms: '5000', // not number → 0
|
|
464
|
+
cost_usd: '1.5', // not number → 0
|
|
454
465
|
},
|
|
455
|
-
ORCH
|
|
466
|
+
ORCH,
|
|
456
467
|
);
|
|
457
468
|
expect(result.ok).toBe(true);
|
|
458
469
|
});
|
|
@@ -468,9 +479,9 @@ describe('AopKernel invoke with edge-case args', () => {
|
|
|
468
479
|
gate_pass: true,
|
|
469
480
|
retry_count: 1,
|
|
470
481
|
duration_ms: 3000,
|
|
471
|
-
cost_usd: 0.
|
|
482
|
+
cost_usd: 0.1,
|
|
472
483
|
},
|
|
473
|
-
ORCH
|
|
484
|
+
ORCH,
|
|
474
485
|
);
|
|
475
486
|
expect(result.ok).toBe(true);
|
|
476
487
|
});
|
|
@@ -480,7 +491,7 @@ describe('AopKernel invoke with edge-case args', () => {
|
|
|
480
491
|
const result = await kernel.invoke(
|
|
481
492
|
'performance.get_analytics',
|
|
482
493
|
{ provider: 'openai', model: 'gpt-4' },
|
|
483
|
-
ORCH
|
|
494
|
+
ORCH,
|
|
484
495
|
);
|
|
485
496
|
expect(result.ok).toBe(true);
|
|
486
497
|
expect(result.data).toHaveProperty('outcomes');
|
|
@@ -495,7 +506,7 @@ describe('AopKernel invoke with edge-case args', () => {
|
|
|
495
506
|
const result = await kernel.invoke(
|
|
496
507
|
'performance.get_analytics',
|
|
497
508
|
{ provider: 'anthropic' },
|
|
498
|
-
ORCH
|
|
509
|
+
ORCH,
|
|
499
510
|
);
|
|
500
511
|
expect(result.ok).toBe(true);
|
|
501
512
|
});
|
|
@@ -511,7 +522,7 @@ describe('AopKernel invoke with edge-case args', () => {
|
|
|
511
522
|
const result = await kernel.invoke(
|
|
512
523
|
'feature.delete',
|
|
513
524
|
{ feature_id: 'feat_del', dry_run: 'yes', confirm: 'true' },
|
|
514
|
-
ORCH
|
|
525
|
+
ORCH,
|
|
515
526
|
);
|
|
516
527
|
// May succeed or fail, but the branch is covered
|
|
517
528
|
expect(result).toBeDefined();
|
|
@@ -534,8 +545,14 @@ describe('AopKernel invoke with edge-case args', () => {
|
|
|
534
545
|
// Invoke with boolean fields set → readBooleanField returns boolean → passed as boolean
|
|
535
546
|
const result = await kernel.invoke(
|
|
536
547
|
'feature.delete',
|
|
537
|
-
{
|
|
538
|
-
|
|
548
|
+
{
|
|
549
|
+
feature_id: 'feat_del3',
|
|
550
|
+
dry_run: true,
|
|
551
|
+
confirm: false,
|
|
552
|
+
remove_worktree: false,
|
|
553
|
+
remove_branch: 'feat_del3',
|
|
554
|
+
},
|
|
555
|
+
ORCH,
|
|
539
556
|
);
|
|
540
557
|
expect(result).toBeDefined();
|
|
541
558
|
});
|
|
@@ -578,7 +595,7 @@ describe('featureSendMessage edge cases', () => {
|
|
|
578
595
|
const result = await kernel.invoke(
|
|
579
596
|
'feature.send_message',
|
|
580
597
|
{ feature_id: 'feat_msg', message: 'hello' },
|
|
581
|
-
ORCH
|
|
598
|
+
ORCH,
|
|
582
599
|
);
|
|
583
600
|
// No active session cluster → session_not_found
|
|
584
601
|
expect(result.ok).toBe(false);
|
|
@@ -602,14 +619,14 @@ describe('featureSendMessage edge cases', () => {
|
|
|
602
619
|
sessions.feature_sessions['feat_msg2'] = {
|
|
603
620
|
planner_session_id: 'planner-001',
|
|
604
621
|
builder_session_id: 'builder-001',
|
|
605
|
-
qa_session_id: 'qa-001'
|
|
622
|
+
qa_session_id: 'qa-001',
|
|
606
623
|
};
|
|
607
624
|
await kernel.writeRunLease(sessions);
|
|
608
625
|
|
|
609
626
|
const result = await kernel.invoke(
|
|
610
627
|
'feature.send_message',
|
|
611
628
|
{ feature_id: 'feat_msg2', message: 'hello' },
|
|
612
|
-
ORCH
|
|
629
|
+
ORCH,
|
|
613
630
|
);
|
|
614
631
|
// Provider has no sendMessage → provider_unsupported
|
|
615
632
|
expect(result.ok).toBe(false);
|
|
@@ -622,12 +639,20 @@ describe('featureSendMessage edge cases', () => {
|
|
|
622
639
|
await kernel.invoke('feature.init', { feature_id: 'feat_building' }, ORCH);
|
|
623
640
|
|
|
624
641
|
// Patch feature state to BUILDING
|
|
625
|
-
const stateResult = await kernel.invoke(
|
|
642
|
+
const stateResult = await kernel.invoke(
|
|
643
|
+
'feature.state_get',
|
|
644
|
+
{ feature_id: 'feat_building' },
|
|
645
|
+
ORCH,
|
|
646
|
+
);
|
|
626
647
|
const version = (stateResult.data as { version: number }).version;
|
|
627
648
|
await kernel.invoke(
|
|
628
649
|
'feature.state_patch',
|
|
629
|
-
{
|
|
630
|
-
|
|
650
|
+
{
|
|
651
|
+
feature_id: 'feat_building',
|
|
652
|
+
expected_version: version,
|
|
653
|
+
patch: { status: STATUS.BUILDING },
|
|
654
|
+
},
|
|
655
|
+
ORCH,
|
|
631
656
|
);
|
|
632
657
|
|
|
633
658
|
// Set up runtime sessions with a feature session having 'unassigned' builder_session_id
|
|
@@ -637,14 +662,14 @@ describe('featureSendMessage edge cases', () => {
|
|
|
637
662
|
sessions.feature_sessions['feat_building'] = {
|
|
638
663
|
planner_session_id: 'planner-001',
|
|
639
664
|
builder_session_id: 'unassigned', // line 1275 – will fall back to orchestrator
|
|
640
|
-
qa_session_id: 'qa-001'
|
|
665
|
+
qa_session_id: 'qa-001',
|
|
641
666
|
};
|
|
642
667
|
await kernel.writeRunLease(sessions);
|
|
643
668
|
|
|
644
669
|
const result = await kernel.invoke(
|
|
645
670
|
'feature.send_message',
|
|
646
671
|
{ feature_id: 'feat_building', message: 'hey' },
|
|
647
|
-
ORCH
|
|
672
|
+
ORCH,
|
|
648
673
|
);
|
|
649
674
|
// No sendMessage provider → provider_unsupported
|
|
650
675
|
expect(result.ok).toBe(false);
|
|
@@ -667,7 +692,11 @@ describe('load() failure branches', () => {
|
|
|
667
692
|
|
|
668
693
|
it('throws on invalid gates YAML schema (line 343)', async () => {
|
|
669
694
|
const gatesPath = path.join(repoRoot, 'agentic', 'orchestrator', 'gates.yaml');
|
|
670
|
-
await fs.writeFile(
|
|
695
|
+
await fs.writeFile(
|
|
696
|
+
gatesPath,
|
|
697
|
+
'version: "not_a_number"\nprofiles: []\ncapabilities: []\n',
|
|
698
|
+
'utf8',
|
|
699
|
+
);
|
|
671
700
|
const kernel = new AopKernel(repoRoot);
|
|
672
701
|
await expect(kernel.load()).rejects.toThrow(/invalid_gates_yaml/);
|
|
673
702
|
});
|
|
@@ -676,7 +705,9 @@ describe('load() failure branches', () => {
|
|
|
676
705
|
const policyPath = path.join(repoRoot, 'agentic', 'orchestrator', 'policy.yaml');
|
|
677
706
|
await fs.writeFile(policyPath, 'version: "not_valid"\n', 'utf8');
|
|
678
707
|
const kernel = new AopKernel(repoRoot);
|
|
679
|
-
await expect(kernel.load()).rejects.toThrow(
|
|
708
|
+
await expect(kernel.load()).rejects.toThrow(
|
|
709
|
+
/invalid_policy_yaml|invalid_gates_yaml|INVALID_WORKSPACE/,
|
|
710
|
+
);
|
|
680
711
|
});
|
|
681
712
|
|
|
682
713
|
it('schema rejects wrong workspace value (schema enforces const:nx before line 356)', async () => {
|
|
@@ -751,7 +782,8 @@ describe('AopKernel unknown tool and repo status coverage', () => {
|
|
|
751
782
|
const featureId = 'feat_repo_status';
|
|
752
783
|
const worktreePath = path.join(repoRoot2, '.worktrees', featureId);
|
|
753
784
|
await runGit(repoRoot2, ['worktree', 'add', worktreePath, 'feat_repo_status']);
|
|
754
|
-
const frontmatter =
|
|
785
|
+
const frontmatter =
|
|
786
|
+
'---\nfeature_id: feat_repo_status\nversion: 1\nbranch: feat_repo_status\nstatus: building\ngate_profile: default\ngates:\n plan: na\n fast: na\n full: na\nworktree_path: .worktrees/feat_repo_status\n---\n';
|
|
755
787
|
const featureDir = path.join(repoRoot2, '.aop', 'features', featureId);
|
|
756
788
|
await fs.mkdir(featureDir, { recursive: true });
|
|
757
789
|
await fs.writeFile(path.join(featureDir, 'state.md'), frontmatter, 'utf8');
|
|
@@ -764,14 +796,22 @@ describe('AopKernel unknown tool and repo status coverage', () => {
|
|
|
764
796
|
it('GIVEN_unknown_tool_name_WHEN_dispatchTool_THEN_returns_invalid_argument_error', async () => {
|
|
765
797
|
// Covers lines 169-174: the unknown tool callback body in ToolRouter
|
|
766
798
|
// Must call dispatchTool directly to bypass the RBAC check in invoke()
|
|
767
|
-
const result = await (kernel2 as any).dispatchTool(
|
|
799
|
+
const result = await (kernel2 as any).dispatchTool(
|
|
800
|
+
'tool.does_not_exist_xyz',
|
|
801
|
+
{},
|
|
802
|
+
{ actorType: 'orchestrator', actorId: 'orch:test' },
|
|
803
|
+
);
|
|
768
804
|
expect(result.ok).toBe(false);
|
|
769
805
|
expect(result.error?.code).toBe('invalid_argument');
|
|
770
806
|
});
|
|
771
807
|
|
|
772
808
|
it('GIVEN_valid_feature_WHEN_repo_status_THEN_returns_file_status', async () => {
|
|
773
809
|
// Covers line 543: REPO_STATUS tool handler body
|
|
774
|
-
const result = await kernel2.invoke(
|
|
810
|
+
const result = await kernel2.invoke(
|
|
811
|
+
'repo.status',
|
|
812
|
+
{ feature_id: 'feat_repo_status' },
|
|
813
|
+
{ actor_type: 'orchestrator', actor_id: 'orch:test' },
|
|
814
|
+
);
|
|
775
815
|
expect(result.ok).toBe(true);
|
|
776
816
|
});
|
|
777
817
|
});
|
|
@@ -795,25 +835,29 @@ describe('AopKernel readRunLease migration path coverage', () => {
|
|
|
795
835
|
// Write an index with runtime_sessions.run_id set
|
|
796
836
|
const indexPath = path.join(repoRoot3, '.aop', 'features', 'index.json');
|
|
797
837
|
await fs.mkdir(path.dirname(indexPath), { recursive: true });
|
|
798
|
-
await fs.writeFile(
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
838
|
+
await fs.writeFile(
|
|
839
|
+
indexPath,
|
|
840
|
+
JSON.stringify({
|
|
841
|
+
version: 1,
|
|
842
|
+
active: [],
|
|
843
|
+
blocked: [],
|
|
844
|
+
merged: [],
|
|
845
|
+
blocked_queue: [],
|
|
846
|
+
dep_blocked: [],
|
|
847
|
+
locks: {},
|
|
848
|
+
lock_leases: {},
|
|
849
|
+
updated_at: new Date().toISOString(),
|
|
850
|
+
runtime_sessions: {
|
|
851
|
+
run_id: 'run:migrated-id',
|
|
852
|
+
owner_instance_id: 'owner:migrated',
|
|
853
|
+
orchestrator_session_id: 'orch-migrated',
|
|
854
|
+
orchestrator_epoch: 1,
|
|
855
|
+
lease_expires_at: new Date(Date.now() + 3600000).toISOString(),
|
|
856
|
+
feature_sessions: {},
|
|
857
|
+
},
|
|
858
|
+
}),
|
|
859
|
+
'utf8',
|
|
860
|
+
);
|
|
817
861
|
const sessions = await kernel3.readRunLease();
|
|
818
862
|
expect(sessions.run_id).toBe('run:migrated-id');
|
|
819
863
|
});
|