@mutagent/helix 0.1.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/mutagent-helix/SKILL.md +113 -0
- package/.claude/skills/mutagent-helix/scripts/cli/codex-transcode.ts +143 -0
- package/.claude/skills/mutagent-helix/scripts/cli/doctor.ts +111 -0
- package/.claude/skills/mutagent-helix/scripts/cli/init.ts +382 -0
- package/.claude/skills/mutagent-helix/scripts/cli/run.sh +61 -0
- package/CLAUDE.md +193 -0
- package/LICENSE +201 -0
- package/NOTICE +22 -0
- package/README.md +209 -0
- package/assets/adl-loop.svg +162 -0
- package/assets/system-status.svg +422 -0
- package/bin/mutagent-cli.mjs +9950 -0
- package/bin/mutagent-helix.mjs +78 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/CLAUDE.md +28 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/SKILL.md +138 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/assets/templates/agentspec.yaml.tpl +247 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/frameworks/doc-pins.md +53 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/principles.md +91 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/requirements.yaml +295 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/workflows/orchestrator-protocol.md +302 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/doctor.ts +116 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/init.ts +230 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/run.sh +60 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/config/resolve-spec-dir.ts +199 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/contract/agentspec.schema.ts +455 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/setup/detect.ts +67 -0
- package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/validate/validate-spec.ts +93 -0
- package/mutagent-agentspec/LICENSE +201 -0
- package/mutagent-agentspec/NOTICE +19 -0
- package/mutagent-agentspec/README.md +44 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/SKILL.md +100 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/assets/agents/ai-architect.md +312 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/assets/agents/ai-engineer.md +357 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/assets/templates/build-report.md.tpl +39 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/references/principles.md +31 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/references/workflows/build-protocol.md +61 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/references/workflows/improve-handoff.md +23 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/scripts/cli/run.sh +60 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/scripts/handoff/validate-build-input.ts +72 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/scripts/sync-spec/check-sync-spec.ts +499 -0
- package/mutagent-builder/.claude/skills/mutagent-builder/scripts/verify/spec-impl-coverage.ts +182 -0
- package/mutagent-builder/CLAUDE.md +25 -0
- package/mutagent-builder/README.md +26 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/README.md +192 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/SKILL.md +352 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/ai-architect.md +256 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/ai-engineer.md +344 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/diagnostics-analyzer.md +576 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/discovery.md +425 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/audit.json.tpl +24 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/audit.md.tpl +49 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/config.yaml.tpl +100 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/pr-body.md.tpl +56 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/report.html.tpl +327 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/README.md +27 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/iter-N-handover.md.tpl +125 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/self-diagnosis-contract.v0.1.0.yaml.tpl +234 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/spec.yaml.tpl +152 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/team.yaml.tpl +127 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/wave-N-dashboard.html.tpl +1712 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.1-nl-query.md +59 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.2-tier0-progress.md +58 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.3-analysis-progress.md +44 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.4-html-report.md +61 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.5-rca-detail.md +69 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.6-stale-warning.md +53 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.1-welcome.md +60 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.2-source-platform-picker.md +41 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.3-source-auth.md +75 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.4-target-picker.md +48 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.5-ask-tool.md +43 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.6-config-review.md +57 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.7-filter-defaults.md +52 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.8-first-run.md +59 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/examples/sample-findings.json +92 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/examples/sample-meta.json +47 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/adapter-strategy.md +75 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/config-migration.md +84 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/config.md +159 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/filter-search-matrix.md +66 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/harness-knowledge.md +22 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/memory-format.md +78 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/onboarding-decisions.yaml +187 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/operation-inventory.md +59 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/overview.md +167 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/reference.md +119 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/script-index.md +101 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-adapter-contract.md +93 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/claude-code-transcripts.md +66 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/codex-transcripts.md +78 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/codex.md +145 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/install-paths.md +57 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/langfuse.md +178 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/local-jsonl.md +55 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/openobserve.md +102 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/otel.md +63 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/cloud-rest.md +84 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-claude.md +65 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-cloud-agent-sdk.md +92 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-codex.md +72 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-cursor.md +108 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-mastra.md +77 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-opencode.md +70 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/apply-pr-comment-format.md +82 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/diagnostics.md +35 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/handover-contract.md +247 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/onboarding.md +300 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/orchestrator-protocol.md +1861 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/rca.md +331 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/rendering-anatomy.md +314 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/schedule-prep.md +100 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/scope-model.md +128 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/verification-methodology.md +174 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/aggregate/sort-findings.ts +0 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/awareness/blind-spots.ts +167 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/awareness/llm-sample.ts +681 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/doctor.ts +215 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/init.ts +1013 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/install-agents.ts +350 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/run.sh +61 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/shared-templates.ts +79 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/load.ts +392 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/resolve-credential.ts +120 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/schema.ts +641 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/validate.ts +134 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/context/build-diagnosis-context.ts +417 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/context/load-context.ts +105 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/contract/types.ts +166 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/build-render-input.ts +1964 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/corpus-severity.ts +172 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/dismissal-match.ts +270 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/rank-remedies.ts +75 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/hooks/install-hooks.sh +46 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/hooks/pre-push.sh +78 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/invocation/parse-brief.ts +188 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/match.ts +114 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/paths.ts +95 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/store.ts +535 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/types.ts +181 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/lint/template-inline-js.ts +267 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/memory/append.ts +188 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/memory/read.ts +218 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/platforms/entity-context.ts +686 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/read-unitf.ts +267 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/trace.ts +1078 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/unitf-adapter.ts +0 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/unitf-types.ts +213 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/report/persist-selections.ts +174 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/report/render.ts +3254 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/run/diagnose.ts +64 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/run/session.ts +167 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/caps.ts +345 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/deep-read-gate.ts +424 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/representative.ts +584 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/scan/objection.ts +224 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/scan/trajectory.ts +489 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/self-diagnostics/dispatch.ts +135 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/self-diagnostics/probe.ts +170 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/detect.ts +307 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/ensure-cli.ts +315 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/reconfigure.ts +77 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/verify-agents.ts +207 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/slicer.ts +166 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/claude-code.ts +17 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/codex.ts +11 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/langfuse.ts +17 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/local-jsonl.ts +12 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/otel.ts +12 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/index.ts +54 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/registry.ts +45 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/types.ts +86 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/stale-detector.ts +74 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/test/render-playwright.cli.ts +477 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0/claude-code.ts +133 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0/langfuse.ts +143 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0-scan.ts +423 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/completeness-check.ts +436 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/doc-refs.ts +190 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/finalize-gate.ts +417 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/findings-contract.ts +628 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/render-js-syntax.ts +188 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/report-checklist.yaml +217 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/trace-shape.ts +262 -0
- package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/wave6-checklist.ts +326 -0
- package/mutagent-diagnostics/CLAUDE.md +41 -0
- package/mutagent-diagnostics/LICENSE +201 -0
- package/mutagent-diagnostics/NOTICE +18 -0
- package/mutagent-diagnostics/README.md +343 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/SKILL.md +548 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/audit-executor.md +169 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/dataset-builder.md +160 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/discovery.md +425 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/evaluator.md +1108 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/brand/theme.css +213 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/brand/wordmark.html +9 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/context-flow-lens.md +85 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/data-lens.md +47 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/decision-lens.md +48 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/methodology-critic-lens.md +53 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/trajectory-lens.md +44 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/build-review-interface.md +83 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/edd-loop.md +134 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/error-analysis.md +113 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/eval-audit.md +154 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/eval-stage.md +168 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/generate-synthetic-data.md +81 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/grounded-adjudication.md +221 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/memory-format.md +65 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/methodology.md +201 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/operation-inventory.md +197 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/validate-evaluator.md +125 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/workflows/orchestrator-protocol.md +300 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/write-judge-prompt.md +123 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/behavior-tree.schema.yaml +73 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/dataset.schema.yaml +66 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/edd-change-request.schema.yaml +114 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/eval-matrix.schema.yaml +74 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/flow-graph.schema.yaml +69 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/flow-profile.schema.yaml +49 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/methodology-review.schema.yaml +40 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/scorecard.schema.yaml +85 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/agent-dispatch.ts +0 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/aggregate-discover.ts +543 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/artifact-paths.ts +115 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/assemble-scorecard.ts +172 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-dataset.ts +186 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-evals.ts +93 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-review-ui.ts +393 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/check-method-router.ts +170 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/aggregate.ts +112 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/audit-run.ts +182 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/doctor.ts +211 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/dogfood.ts +133 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/init.ts +601 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/methodology-review.ts +122 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/prep.ts +295 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/profile-subject.ts +165 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/run.sh +56 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/variance-check.ts +105 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/code-eval.ts +248 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/code-quality-verdict.ts +285 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/codegen-evals.ts +173 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cold-start-project.ts +151 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cold-start-sampler.ts +267 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/config/load.ts +343 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/config/schema.ts +380 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/agentspec-evals.ts +85 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/dataset.ts +149 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-engine.ts +118 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-matrix.ts +577 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-types.ts +1074 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/flow-graph.ts +194 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/types.ts +303 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/validation.ts +193 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/derive-dataset.ts +152 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/determine-outcome.ts +219 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/diff-discriminate.ts +160 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/discover-criteria.ts +348 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/change-request.ts +232 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/edd-types.ts +210 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/variance-gate.ts +186 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/emit-completeness.ts +111 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/eval-engine.ts +160 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/evaluate.ts +333 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/flow-graph.ts +230 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/judge-prompt-template.ts +253 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/judge-provider.ts +135 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/lint-grounding.ts +229 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/lint-uniformity.ts +168 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/living-suite.ts +109 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-bundle.ts +203 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-profile-vocab.ts +64 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-profile.ts +106 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/mask.ts +138 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/materialize-dataset.ts +113 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/matrix-judge.ts +750 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/memory/append.ts +215 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/memory/read.ts +168 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/persist-eval-criteria.ts +232 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/prep-tasks.ts +125 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/profile-subject.ts +310 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/publish-report.ts +131 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/read-unitf-traces.ts +81 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-build-cards.ts +195 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-discover-report.ts +1640 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-eval-report.ts +3838 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-report.ts +212 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/resolve-credential.ts +110 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/resolve-ref.ts +98 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/result-verify.ts +129 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/route-failures.ts +330 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-deterministic.ts +367 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-evaluate.ts +719 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-judge.ts +155 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-pipeline.ts +175 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/sample-traces.ts +210 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/self-audit.ts +387 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/source-map.ts +106 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/subject-profile.ts +134 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/substrate.ts +162 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/sync-eval-criteria.ts +244 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/ui-slots.ts +119 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/unitf-to-evaltrace.ts +284 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/validate-judge.ts +358 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/variance-compare.ts +177 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/behavior-tree.yaml +140 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/eval-matrix.yaml +1270 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/methodology-review.yaml +105 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/audit.workflow.js +82 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/data-leak.workflow.js +236 -0
- package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/variance.workflow.js +163 -0
- package/mutagent-evaluator/CLAUDE.md +45 -0
- package/mutagent-evaluator/LICENSE +201 -0
- package/mutagent-evaluator/NOTICE +23 -0
- package/mutagent-evaluator/README.md +88 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/SKILL.md +287 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/contracts/amend-request.ts +503 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/improve-loop-run.ts +304 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/loop-state-cli.ts +300 -0
- package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/loop-state.ts +440 -0
- package/mutagent-optimize/CLAUDE.md +49 -0
- package/mutagent-optimize/README.md +26 -0
- package/mutagent-orchestrator/CLAUDE.md +102 -0
- package/mutagent-orchestrator/README.md +20 -0
- package/mutagent-orchestrator/assets/agents/discovery.md +425 -0
- package/mutagent-orchestrator/assets/agents/dogfood-monitor.md +266 -0
- package/mutagent-orchestrator/assets/agents/monitor.md +258 -0
- package/mutagent-orchestrator/orchestrator.md +782 -0
- package/mutagent-orchestrator/references/MONITORING.md +209 -0
- package/mutagent-orchestrator/references/config-fields.md +132 -0
- package/mutagent-orchestrator/references/config-migration.md +132 -0
- package/mutagent-orchestrator/references/index-registry.md +92 -0
- package/mutagent-orchestrator/routing.yaml +391 -0
- package/mutagent-orchestrator/scripts/config-schema.ts +1010 -0
- package/mutagent-orchestrator/scripts/dispatch.ts +439 -0
- package/mutagent-orchestrator/scripts/dogfood/extract-feedback.ts +203 -0
- package/mutagent-orchestrator/scripts/dogfood/reconstruct-trajectory.ts +327 -0
- package/mutagent-orchestrator/scripts/dogfood/render-dogfood-report.ts +347 -0
- package/mutagent-orchestrator/scripts/dogfood/resolve-subagents.ts +160 -0
- package/mutagent-orchestrator/scripts/dogfood/run-report.ts +264 -0
- package/mutagent-orchestrator/scripts/dogfood/slack-thread.ts +106 -0
- package/mutagent-orchestrator/scripts/dogfood/types.ts +257 -0
- package/mutagent-orchestrator/scripts/eval-routing.ts +753 -0
- package/mutagent-orchestrator/scripts/gate.ts +219 -0
- package/mutagent-orchestrator/scripts/handover-contract.ts +362 -0
- package/mutagent-orchestrator/scripts/index/build-index.ts +351 -0
- package/mutagent-orchestrator/scripts/index/render-index.ts +110 -0
- package/mutagent-orchestrator/scripts/monitor/slack-notify.ts +111 -0
- package/mutagent-orchestrator/scripts/monitor/triggers.ts +162 -0
- package/mutagent-orchestrator/scripts/onboarding-check.ts +369 -0
- package/mutagent-orchestrator/scripts/render-roster.ts +308 -0
- package/mutagent-orchestrator/scripts/resolve-credential.ts +185 -0
- package/mutagent-orchestrator/scripts/resolve-paths.ts +114 -0
- package/mutagent-orchestrator/scripts/slack/format.ts +63 -0
- package/mutagent-orchestrator/scripts/slack/post.ts +115 -0
- package/mutagent-orchestrator/scripts/sync-index.ts +311 -0
- package/package.json +64 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// monitor/triggers — the External Monitor's PURE rule engine (EXT-1).
|
|
3
|
+
//
|
|
4
|
+
// `evaluateTriggers(config, event, now)` reads the DORMANT `config.triggers`
|
|
5
|
+
// block (the evaluate/diagnose trigger rules) and returns every rule that FIRES
|
|
6
|
+
// for an incoming `MonitorEvent`. This is the OUTWARD monitor's condition source
|
|
7
|
+
// — distinct from the INWARD dogfood monitor (which observes a live session).
|
|
8
|
+
//
|
|
9
|
+
// SHIPS DISABLED (load-bearing): a stage block whose `enabled !== true` yields
|
|
10
|
+
// ZERO matches. The onboarding default is `enabled:false` with empty rules, so a
|
|
11
|
+
// freshly-installed monitor never fires until the operator opts in
|
|
12
|
+
// (triggers.<stage>.enabled:true). No cron, no auto-fire wired here — this is the
|
|
13
|
+
// pure predicate; arming the watch is the `monitor` agent's job.
|
|
14
|
+
//
|
|
15
|
+
// PURE + DETERMINISTIC: no clock, no random, no network, no fs. The wall-clock is
|
|
16
|
+
// INJECTED as `now` (epoch ms) and stamped onto each match as `firedAt` — same
|
|
17
|
+
// (config, event, now) ⇒ deep-equal `TriggerMatch[]`, so the engine is unit-
|
|
18
|
+
// testable against inline literals (mirrors scripts/dispatch.ts + config-schema.ts).
|
|
19
|
+
//
|
|
20
|
+
// SEPARATION: this is the CONDITION half of the External Monitor. The NOTIFICATION
|
|
21
|
+
// half is monitor/slack-notify.ts (its OWN Slack voice). Neither imports the
|
|
22
|
+
// dogfood monitor's engine — shared transport, separate semantics (ADR-6/ADR-11).
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
|
|
25
|
+
import { AdlStage } from "../handover-contract.ts";
|
|
26
|
+
import type { AdlStageValue } from "../handover-contract.ts";
|
|
27
|
+
import type { MutagentConfig, TriggerRule, TriggerStageBlock } from "../config-schema.ts";
|
|
28
|
+
|
|
29
|
+
/** The event kinds the External Monitor understands. Closed → exhaustive. */
|
|
30
|
+
export type MonitorEventKind = "trace-count" | "schedule" | "ci" | "manual";
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* An incoming monitor event. Discriminated on `kind`. The scheduler / trace
|
|
34
|
+
* collector / CI hook constructs one of these and hands it to `evaluateTriggers`.
|
|
35
|
+
*/
|
|
36
|
+
export type MonitorEvent =
|
|
37
|
+
| { kind: "trace-count"; count: number }
|
|
38
|
+
| { kind: "schedule"; at?: string }
|
|
39
|
+
| { kind: "ci"; status?: string }
|
|
40
|
+
| { kind: "manual"; command?: string };
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* One fired trigger — names the rule, the target ADL stage (the `config.triggers`
|
|
44
|
+
* block key, e.g. evaluate/diagnose), a human-readable reason, and the injected
|
|
45
|
+
* `firedAt` stamp (for the notification; NO self-read clock).
|
|
46
|
+
*/
|
|
47
|
+
export interface TriggerMatch {
|
|
48
|
+
/** The target ADL stage — the `config.triggers` block this rule lives under. */
|
|
49
|
+
stage: AdlStageValue;
|
|
50
|
+
/** The rule that fired (its `on` condition + optional `run` target). */
|
|
51
|
+
rule: TriggerRule;
|
|
52
|
+
/** Convenience mirror of `rule.run` (the stage/command to run) when present. */
|
|
53
|
+
run?: string;
|
|
54
|
+
/** Human-readable WHY the rule fired (precise: the matched condition). */
|
|
55
|
+
reason: string;
|
|
56
|
+
/** The injected wall-clock (epoch ms) — the "fired at" stamp, never self-read. */
|
|
57
|
+
firedAt: number;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The `config.triggers` keys are the routing AdlStage set MINUS `spec` (there is
|
|
62
|
+
* no spec monitor). A fixed iteration order keeps the output deterministic.
|
|
63
|
+
*/
|
|
64
|
+
type TriggerStageKey = Exclude<AdlStageValue, typeof AdlStage.Spec>;
|
|
65
|
+
const STAGE_ORDER: readonly TriggerStageKey[] = [
|
|
66
|
+
AdlStage.Build,
|
|
67
|
+
AdlStage.Evaluate,
|
|
68
|
+
AdlStage.Diagnose,
|
|
69
|
+
AdlStage.Improve,
|
|
70
|
+
AdlStage.Audit,
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
/** Parsed `on` grammar: an event kind + an OPTIONAL numeric threshold (trace-count). */
|
|
74
|
+
interface ParsedOn {
|
|
75
|
+
kind: MonitorEventKind | null;
|
|
76
|
+
op: ">=" | ">" | null;
|
|
77
|
+
threshold: number | null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Parse a rule's `on` string. Grammar (deterministic, minimal — ADR-10):
|
|
82
|
+
* - `trace-count` → fires on ANY trace-count event
|
|
83
|
+
* - `trace-count>=100` → fires when count ≥ 100
|
|
84
|
+
* - `trace-count>100` → fires when count > 100
|
|
85
|
+
* - `schedule` · `ci` · `manual` → fires on the matching event kind
|
|
86
|
+
* Anything else ⇒ `kind:null` (an unparseable rule never fires).
|
|
87
|
+
*/
|
|
88
|
+
function parseOn(on: string): ParsedOn {
|
|
89
|
+
const m = on
|
|
90
|
+
.trim()
|
|
91
|
+
.toLowerCase()
|
|
92
|
+
.match(/^(trace-count|schedule|ci|manual)\s*(>=|>)?\s*(\d+)?$/);
|
|
93
|
+
if (m === null) return { kind: null, op: null, threshold: null };
|
|
94
|
+
return {
|
|
95
|
+
kind: m[1] as MonitorEventKind,
|
|
96
|
+
op: (m[2] as ">=" | ">" | undefined) ?? null,
|
|
97
|
+
threshold: m[3] !== undefined ? Number(m[3]) : null,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Does `rule` fire for `event`? Returns a human-readable reason string when it
|
|
103
|
+
* does, else null. Pure. The `on` kind must equal the event kind; a `trace-count`
|
|
104
|
+
* rule with a threshold additionally requires the count to satisfy the comparator.
|
|
105
|
+
*/
|
|
106
|
+
function ruleReason(rule: TriggerRule, event: MonitorEvent): string | null {
|
|
107
|
+
const p = parseOn(rule.on);
|
|
108
|
+
if (p.kind === null || p.kind !== event.kind) return null;
|
|
109
|
+
|
|
110
|
+
switch (event.kind) {
|
|
111
|
+
case "trace-count": {
|
|
112
|
+
if (p.threshold !== null) {
|
|
113
|
+
const op = p.op ?? ">=";
|
|
114
|
+
const ok = op === ">" ? event.count > p.threshold : event.count >= p.threshold;
|
|
115
|
+
if (!ok) return null;
|
|
116
|
+
return `trace-count ${event.count} ${op} ${p.threshold}`;
|
|
117
|
+
}
|
|
118
|
+
return `trace-count ${event.count}`;
|
|
119
|
+
}
|
|
120
|
+
case "schedule":
|
|
121
|
+
return event.at !== undefined ? `schedule fired @ ${event.at}` : "schedule fired";
|
|
122
|
+
case "ci":
|
|
123
|
+
return event.status !== undefined ? `ci ${event.status}` : "ci event";
|
|
124
|
+
case "manual":
|
|
125
|
+
return event.command !== undefined ? `manual trigger (${event.command})` : "manual trigger";
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Evaluate the DORMANT `config.triggers` against an incoming event → every fired
|
|
131
|
+
* rule as a `TriggerMatch`. DISABLED-by-default: a stage block with
|
|
132
|
+
* `enabled !== true` (the shipped default) contributes NOTHING, so a fresh
|
|
133
|
+
* monitor never fires until explicitly enabled. Deterministic: stages iterate in
|
|
134
|
+
* a fixed order, `now` is injected (no self-read clock).
|
|
135
|
+
*/
|
|
136
|
+
export function evaluateTriggers(
|
|
137
|
+
config: MutagentConfig,
|
|
138
|
+
event: MonitorEvent,
|
|
139
|
+
now: number,
|
|
140
|
+
): TriggerMatch[] {
|
|
141
|
+
const triggers = config.triggers;
|
|
142
|
+
if (triggers === undefined) return [];
|
|
143
|
+
|
|
144
|
+
const matches: TriggerMatch[] = [];
|
|
145
|
+
for (const stage of STAGE_ORDER) {
|
|
146
|
+
const block = triggers[stage] as TriggerStageBlock | undefined;
|
|
147
|
+
// SHIPS DISABLED — only an explicitly-enabled block can fire.
|
|
148
|
+
if (block === undefined || block.enabled !== true) continue;
|
|
149
|
+
for (const rule of block.rules) {
|
|
150
|
+
const reason = ruleReason(rule, event);
|
|
151
|
+
if (reason === null) continue;
|
|
152
|
+
matches.push({
|
|
153
|
+
stage,
|
|
154
|
+
rule,
|
|
155
|
+
...(rule.run !== undefined ? { run: rule.run } : {}),
|
|
156
|
+
reason,
|
|
157
|
+
firedAt: now,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return matches;
|
|
162
|
+
}
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { AdlStage, type AdlStageValue } from "./handover-contract.ts";
|
|
2
|
+
import type { MutagentConfig, Source, Target } from "./config-schema.ts";
|
|
3
|
+
import { ApplyKind } from "./config-schema.ts";
|
|
4
|
+
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// C2 — the per-command / per-role onboarding completion-check (v0.2.0).
|
|
7
|
+
//
|
|
8
|
+
// v0.2.0 collapses the false `stages` axis: the config is keyed by SKILL under
|
|
9
|
+
// `lifecycle`, and the "where traces come from" / "where fixes go" live in a
|
|
10
|
+
// GLOBAL catalog (`global.sources[]` / `global.targets[]`) bound BY ROLE, not by
|
|
11
|
+
// ref. So onboarding is no longer a single monolithic floor — it is SCOPED to
|
|
12
|
+
// what the invoked stage actually needs, only when the config doesn't already
|
|
13
|
+
// specify it, and it STOPS only when a genuinely-required thing is missing.
|
|
14
|
+
//
|
|
15
|
+
// Binding by role (NOT by ref — there is no source_ref/target_ref) under the
|
|
16
|
+
// SELECTION contract (an entry marked `default: true` is auto-selected):
|
|
17
|
+
// - source-consumers (evaluate / diagnose) bind `global.sources`.
|
|
18
|
+
// - target-writers (build / improve / diagnose-apply) bind `global.targets`.
|
|
19
|
+
// Exactly ONE entry ⇒ auto-bind (`resolved-single`). MULTIPLE entries: exactly one
|
|
20
|
+
// `default: true` ⇒ `resolved-default` (binds; run-time confirms); >1 `default: true`
|
|
21
|
+
// ⇒ `multiple-defaults` (a CONFIG ERROR — the selector is ambiguous, surfaces
|
|
22
|
+
// `source/target-config-error`);
|
|
23
|
+
// 0 defaults ⇒ `needs-selection` (the operator picks at RUN time). ZERO ⇒ the
|
|
24
|
+
// relevant floor is unmet. `needs-selection` is NOT a hard-fail: a source/target
|
|
25
|
+
// EXISTS, the operator just picks — the floor is satisfied for gating purposes.
|
|
26
|
+
// `multiple-defaults` IS a hard-fail (a config error to fix).
|
|
27
|
+
//
|
|
28
|
+
// The floors (scoped, run-ctx-aware):
|
|
29
|
+
// - BASE floor: `global.models.judge_model` (renamed from pinned_judge) +
|
|
30
|
+
// `global.models.default` where needed;
|
|
31
|
+
// `global.workspace.repo` for TARGET-WRITING stages.
|
|
32
|
+
// - SOURCE floor: evaluate (ONLY when ctx.mode is DISCOVER) + diagnose (always)
|
|
33
|
+
// need a resolvable global source → else `source-required`.
|
|
34
|
+
// - TARGET floor: build + improve(at apply) + diagnose(at apply, UNLESS
|
|
35
|
+
// lifecycle.diagnostics.apply === "report-only") need a
|
|
36
|
+
// resolvable global target → else `target-required`.
|
|
37
|
+
// - PROVIDER floor: evaluate with judge_runtime === "in-house" needs a provider
|
|
38
|
+
// with credentials_ref → else `provider-required`.
|
|
39
|
+
//
|
|
40
|
+
// PURE + deterministic: no I/O, no clock, no random. Defensive against partial /
|
|
41
|
+
// undefined sub-objects so it can run on a fresh, mostly-empty config.
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
/** The run-context the onboarding check reads (all optional; defaults are conservative). */
|
|
45
|
+
export interface OnboardingRunContext {
|
|
46
|
+
/**
|
|
47
|
+
* The evaluate mode. `discover` (mine criteria from traces) NEEDS a source;
|
|
48
|
+
* a code/dataset run does NOT (it warns + streams to stdout instead). Only
|
|
49
|
+
* meaningful for the evaluate stage.
|
|
50
|
+
*/
|
|
51
|
+
mode?: "discover" | "code" | "dataset" | string;
|
|
52
|
+
/**
|
|
53
|
+
* The evaluator judge runtime (renamed from `substrate`). `in-house` (provider
|
|
54
|
+
* SDK) NEEDS a provider credential; `agent-dispatch` / `code-based` /
|
|
55
|
+
* `user-framework` do not.
|
|
56
|
+
*/
|
|
57
|
+
substrate?: "agent-dispatch" | "in-house" | "code-based" | "user-framework" | string;
|
|
58
|
+
/**
|
|
59
|
+
* True when the operator has requested APPLY (build/improve/diagnose write a
|
|
60
|
+
* fix). Absent/false ⇒ a draft-only run that does NOT demand a target.
|
|
61
|
+
*/
|
|
62
|
+
apply?: boolean;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The stages that CONSUME an observability source (where traces come from).
|
|
67
|
+
* Evaluator + diagnostics care; spec / build / improve / audit do not.
|
|
68
|
+
*
|
|
69
|
+
* Typed `readonly AdlStageValue[]` so `gate.ts`'s `SOURCE_STAGES.includes(stage)`
|
|
70
|
+
* accepts any AdlStageValue. NOTE: evaluate is source-consuming ONLY in DISCOVER
|
|
71
|
+
* mode — that nuance lives in the floor logic (checkOnboardingComplete), not in
|
|
72
|
+
* this coarse membership set. `gate.ts` uses this only to decide whether to
|
|
73
|
+
* evaluate the source-aware floor at all.
|
|
74
|
+
*/
|
|
75
|
+
export const SOURCE_STAGES: readonly AdlStageValue[] = [
|
|
76
|
+
AdlStage.Evaluate,
|
|
77
|
+
AdlStage.Diagnose,
|
|
78
|
+
];
|
|
79
|
+
|
|
80
|
+
/** The stages that WRITE to a target (need a resolvable global target at apply). */
|
|
81
|
+
export const TARGET_STAGES: readonly AdlStageValue[] = [
|
|
82
|
+
AdlStage.Build,
|
|
83
|
+
AdlStage.Improve,
|
|
84
|
+
AdlStage.Diagnose,
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
/** A single unmet onboarding requirement: the config key + why it's needed. */
|
|
88
|
+
export interface MissingKey {
|
|
89
|
+
key: string;
|
|
90
|
+
reason: string;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface OnboardingStatus {
|
|
94
|
+
complete: boolean;
|
|
95
|
+
/** The exact keys still required for onboarding to be complete (empty when complete). */
|
|
96
|
+
missing: MissingKey[];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** True iff `s` is a non-empty trimmed string. */
|
|
100
|
+
function hasText(s: unknown): s is string {
|
|
101
|
+
return typeof s === "string" && s.trim() !== "";
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ── Role-based catalog resolution ─────────────────────────────────────────────
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The outcome of resolving a role's catalog (source or target) under the SELECTION
|
|
108
|
+
* contract (a catalog entry marked `default: true` is auto-selected when multiple
|
|
109
|
+
* exist). The two BOUND outcomes are split (F2) so the run-time layer can tell an
|
|
110
|
+
* unambiguous single from a pre-picked default and prompt accordingly:
|
|
111
|
+
* - `resolved-single` — exactly ONE entry in the catalog: it auto-binds with NO
|
|
112
|
+
* prompt (there is nothing to disambiguate).
|
|
113
|
+
* - `resolved-default` — MULTIPLE entries, exactly one marked `default: true`: the
|
|
114
|
+
* default binds, but the run-time layer CONFIRMS it (the
|
|
115
|
+
* default is preselected; the operator may override). Both
|
|
116
|
+
* `resolved-single` + `resolved-default` are BINDABLE — the
|
|
117
|
+
* split is purely about the run-time prompt, not the floor.
|
|
118
|
+
* - `needs-selection` — multiple entries, none marked default; the operator
|
|
119
|
+
* picks at RUN time (NOT a hard-fail — a source/target
|
|
120
|
+
* EXISTS, so the floor is satisfied; do not block the gate).
|
|
121
|
+
* - `multiple-defaults` — multiple entries with >1 marked `default: true`; a
|
|
122
|
+
* CONFIG ERROR (the selector is ambiguous). NOT bindable —
|
|
123
|
+
* surfaces a distinct config-error floor.
|
|
124
|
+
* - `none` — zero entries; the relevant floor is UNMET.
|
|
125
|
+
*
|
|
126
|
+
* NOTE: the CONFIRM prompt (on `resolved-default`) and the PICK prompt (on
|
|
127
|
+
* `needs-selection`) are a RUN-TIME skill concern — NOT this pure gate's job. This
|
|
128
|
+
* module only classifies; the gate treats both bound outcomes as floor-satisfying.
|
|
129
|
+
*/
|
|
130
|
+
export type RoleResolution<T> =
|
|
131
|
+
| { status: "resolved-single"; entry: T }
|
|
132
|
+
| { status: "resolved-default"; entry: T }
|
|
133
|
+
| { status: "needs-selection"; entries: T[] }
|
|
134
|
+
| { status: "multiple-defaults"; entries: T[] }
|
|
135
|
+
| { status: "none" };
|
|
136
|
+
|
|
137
|
+
/** A catalog entry participates in the SELECTION contract via an optional `default` flag. */
|
|
138
|
+
interface Selectable {
|
|
139
|
+
default?: boolean;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Shared SELECTION-contract precedence over a role catalog (source or target):
|
|
144
|
+
* 1. length 0 ⇒ none
|
|
145
|
+
* 2. length 1 ⇒ resolved-single (the single entry auto-binds, no prompt)
|
|
146
|
+
* 3. multiple:
|
|
147
|
+
* - exactly one `default: true` ⇒ resolved-default (binds; run-time CONFIRMS)
|
|
148
|
+
* - >1 `default: true` ⇒ multiple-defaults (config error)
|
|
149
|
+
* - 0 defaults ⇒ needs-selection (operator picks at run time)
|
|
150
|
+
* The `resolved-single` vs `resolved-default` split (F2) is a run-time-prompt
|
|
151
|
+
* distinction only — BOTH are bindable + both satisfy the onboarding floor.
|
|
152
|
+
* Pure + deterministic — no I/O, no clock; tolerant of an undefined catalog.
|
|
153
|
+
*/
|
|
154
|
+
function resolveByRole<T extends Selectable>(catalog: readonly T[]): RoleResolution<T> {
|
|
155
|
+
if (catalog.length === 0) return { status: "none" };
|
|
156
|
+
if (catalog.length === 1) return { status: "resolved-single", entry: catalog[0]! };
|
|
157
|
+
const defaults = catalog.filter((e) => e.default === true);
|
|
158
|
+
if (defaults.length === 1) return { status: "resolved-default", entry: defaults[0]! };
|
|
159
|
+
if (defaults.length > 1) return { status: "multiple-defaults", entries: defaults };
|
|
160
|
+
return { status: "needs-selection", entries: [...catalog] };
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Resolve the SOURCE bound by role from `global.sources` under the SELECTION
|
|
165
|
+
* contract. One ⇒ resolved-single (auto-bind); many+one-default ⇒ resolved-default
|
|
166
|
+
* (bind + run-time confirm); many+no-default ⇒ needs-selection (pick at run);
|
|
167
|
+
* many+multi-default ⇒ multiple-defaults (config error); none ⇒ none. Pure.
|
|
168
|
+
* Source-consumers (evaluate/diagnose) call this;
|
|
169
|
+
* there is NO source_ref — binding is by role + catalog cardinality + `default`.
|
|
170
|
+
*/
|
|
171
|
+
export function resolveSourceByRole(config: MutagentConfig): RoleResolution<Source> {
|
|
172
|
+
return resolveByRole(config?.global?.sources ?? []);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Resolve the TARGET bound by role from `global.targets` under the SELECTION
|
|
177
|
+
* contract. One ⇒ resolved-single (auto-bind); many+one-default ⇒ resolved-default
|
|
178
|
+
* (bind + run-time confirm); many+no-default ⇒ needs-selection (pick at run);
|
|
179
|
+
* many+multi-default ⇒ multiple-defaults (config error); none ⇒ none. Pure.
|
|
180
|
+
* Target-writers (build/improve/diagnose-apply) call
|
|
181
|
+
* this; there is NO target_ref — binding is by role + cardinality + `default`.
|
|
182
|
+
*/
|
|
183
|
+
export function resolveTargetByRole(config: MutagentConfig): RoleResolution<Target> {
|
|
184
|
+
return resolveByRole(config?.global?.targets ?? []);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* True iff a role resolution yields a usable binding for the onboarding gate:
|
|
189
|
+
* `resolved-single` (unambiguous bind) OR `resolved-default` (default binds; the
|
|
190
|
+
* run-time layer confirms) OR `needs-selection` (a source/target EXISTS — the
|
|
191
|
+
* operator picks at run time; do NOT block the gate). `multiple-defaults` is a
|
|
192
|
+
* CONFIG ERROR (NOT bindable — the ambiguous selector must be fixed) and `none` is
|
|
193
|
+
* unmet. So `resolved-default` satisfies the floor exactly like `resolved-single`
|
|
194
|
+
* (it adds NO new blocker — the confirm is a run-time step, not a gate).
|
|
195
|
+
*/
|
|
196
|
+
function isBindable<T>(r: RoleResolution<T>): boolean {
|
|
197
|
+
return (
|
|
198
|
+
r.status === "resolved-single" ||
|
|
199
|
+
r.status === "resolved-default" ||
|
|
200
|
+
r.status === "needs-selection"
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** True iff a role resolution is the `multiple-defaults` config error (>1 default). */
|
|
205
|
+
function isMultipleDefaults<T>(r: RoleResolution<T>): boolean {
|
|
206
|
+
return r.status === "multiple-defaults";
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// ── Floor helpers ─────────────────────────────────────────────────────────────
|
|
210
|
+
|
|
211
|
+
/** True iff the stage WRITES to a target (needs workspace.repo + a target at apply). */
|
|
212
|
+
function isTargetStage(stage: AdlStageValue): boolean {
|
|
213
|
+
return TARGET_STAGES.includes(stage);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Does the evaluate stage need a source? Only in DISCOVER mode. A code/dataset
|
|
218
|
+
* run warns + streams to stdout instead of demanding a source.
|
|
219
|
+
*/
|
|
220
|
+
function evaluateNeedsSource(ctx: OnboardingRunContext): boolean {
|
|
221
|
+
return ctx.mode === "discover";
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** True iff diagnostics is configured report-only (⇒ no target needed at apply). */
|
|
225
|
+
function diagnosticsIsReportOnly(config: MutagentConfig): boolean {
|
|
226
|
+
return config?.lifecycle?.diagnostics?.apply === ApplyKind.ReportOnly;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Does a TARGET-writing stage demand a target for THIS run?
|
|
231
|
+
* - build — at apply (build IS a write; a draft does not).
|
|
232
|
+
* - improve — at apply (draft remedies need no target).
|
|
233
|
+
* - diagnose — at apply, UNLESS lifecycle.diagnostics.apply === "report-only".
|
|
234
|
+
*/
|
|
235
|
+
function stageNeedsTarget(
|
|
236
|
+
stage: AdlStageValue,
|
|
237
|
+
config: MutagentConfig,
|
|
238
|
+
ctx: OnboardingRunContext,
|
|
239
|
+
): boolean {
|
|
240
|
+
if (!isTargetStage(stage)) return false;
|
|
241
|
+
if (ctx.apply !== true) return false;
|
|
242
|
+
if (stage === AdlStage.Diagnose && diagnosticsIsReportOnly(config)) return false;
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/** True iff ≥1 provider carries a usable credentials_ref (env-var name OR {env,path}). */
|
|
247
|
+
function hasUsableProvider(config: MutagentConfig): boolean {
|
|
248
|
+
const providers = config?.global?.providers ?? [];
|
|
249
|
+
return providers.some((p) => {
|
|
250
|
+
const ref = p?.credentials_ref;
|
|
251
|
+
if (typeof ref === "string") return hasText(ref);
|
|
252
|
+
return typeof ref === "object" && ref !== null && hasText((ref as { env?: unknown }).env);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Check whether onboarding is complete for the given config + the ONE stage being
|
|
258
|
+
* invoked + the run context.
|
|
259
|
+
*
|
|
260
|
+
* @param config the parsed (possibly partial) MutagentConfig (v0.2.0).
|
|
261
|
+
* @param activeStages the ADL stage(s) the operator is invoking. Scoped floors
|
|
262
|
+
* apply per stage; de-duped so a stage listed twice can't
|
|
263
|
+
* push duplicate keys.
|
|
264
|
+
* @param ctx run context: { mode, substrate, apply } — drives the
|
|
265
|
+
* source(discover-only)/target(at-apply)/provider(in-house) floors.
|
|
266
|
+
* @returns { complete, missing } — `missing` lists the exact keys still needed,
|
|
267
|
+
* keyed by the v0.2.0 reason strings (`judge-model-required`,
|
|
268
|
+
* `source-required`, `target-required`, `provider-required`, the
|
|
269
|
+
* SELECTION config-error keys `source-config-error` /
|
|
270
|
+
* `target-config-error` (>1 `default: true`), plus the base
|
|
271
|
+
* workspace/models keys). NOTE: `needs-selection` (multi source/target,
|
|
272
|
+
* no default) does NOT appear here — it satisfies the floor (pick at run).
|
|
273
|
+
*
|
|
274
|
+
* Pure + deterministic: same inputs ⇒ deep-equal result. No I/O, no clock.
|
|
275
|
+
*/
|
|
276
|
+
export function checkOnboardingComplete(
|
|
277
|
+
config: MutagentConfig,
|
|
278
|
+
activeStages: AdlStageValue[],
|
|
279
|
+
ctx: OnboardingRunContext = {},
|
|
280
|
+
): OnboardingStatus {
|
|
281
|
+
const missing: MissingKey[] = [];
|
|
282
|
+
const stages = Array.from(new Set(activeStages));
|
|
283
|
+
|
|
284
|
+
const needsJudgeModel = stages.some(
|
|
285
|
+
(s) => s === AdlStage.Evaluate || s === AdlStage.Audit,
|
|
286
|
+
);
|
|
287
|
+
const anyTargetStage = stages.some((s) => isTargetStage(s));
|
|
288
|
+
|
|
289
|
+
// ── BASE floor ──────────────────────────────────────────────────────────────
|
|
290
|
+
// judge_model — required by the judging stages (evaluate / audit).
|
|
291
|
+
if (needsJudgeModel && !hasText(config?.global?.models?.judge_model)) {
|
|
292
|
+
missing.push({
|
|
293
|
+
key: "global.models.judge_model",
|
|
294
|
+
reason: "a pinned judge model (global.models.judge_model) is required for the judging stage",
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
// default model — needed where a run executes a model (evaluate / build).
|
|
298
|
+
const needsDefaultModel =
|
|
299
|
+
stages.some((s) => s === AdlStage.Evaluate) || anyTargetStage;
|
|
300
|
+
if (needsDefaultModel && !hasText(config?.global?.models?.default)) {
|
|
301
|
+
missing.push({
|
|
302
|
+
key: "global.models.default",
|
|
303
|
+
reason: "a default model (global.models.default) is required",
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
// workspace.repo — needed by target-WRITING stages.
|
|
307
|
+
if (anyTargetStage && !hasText(config?.global?.workspace?.repo)) {
|
|
308
|
+
missing.push({
|
|
309
|
+
key: "global.workspace.repo",
|
|
310
|
+
reason: "the target repo/workspace (global.workspace.repo) is required for a target-writing stage",
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// ── SOURCE floor ──────────────────────────────────────────────────────────────
|
|
315
|
+
// diagnose ALWAYS needs a source; evaluate needs one ONLY in DISCOVER mode.
|
|
316
|
+
// `needs-selection` (multi, no default) SATISFIES the floor (operator picks at
|
|
317
|
+
// run time). `multiple-defaults` (>1 default) is a distinct CONFIG ERROR.
|
|
318
|
+
const needsSource =
|
|
319
|
+
stages.some((s) => s === AdlStage.Diagnose) ||
|
|
320
|
+
(stages.some((s) => s === AdlStage.Evaluate) && evaluateNeedsSource(ctx));
|
|
321
|
+
if (needsSource) {
|
|
322
|
+
const srcRes = resolveSourceByRole(config);
|
|
323
|
+
if (isMultipleDefaults(srcRes)) {
|
|
324
|
+
missing.push({
|
|
325
|
+
key: "source-config-error",
|
|
326
|
+
reason:
|
|
327
|
+
"more than one global source (global.sources[]) is marked `default: true` — exactly one default may be set (or none, to pick at run time)",
|
|
328
|
+
});
|
|
329
|
+
} else if (!isBindable(srcRes)) {
|
|
330
|
+
missing.push({
|
|
331
|
+
key: "source-required",
|
|
332
|
+
reason: "a resolvable global source (global.sources[]) is required — none configured",
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// ── TARGET floor ──────────────────────────────────────────────────────────────
|
|
338
|
+
// `needs-selection` (multi, no default) SATISFIES the floor. `multiple-defaults`
|
|
339
|
+
// (>1 default) is a distinct CONFIG ERROR.
|
|
340
|
+
const needsTarget = stages.some((s) => stageNeedsTarget(s, config, ctx));
|
|
341
|
+
if (needsTarget) {
|
|
342
|
+
const tgtRes = resolveTargetByRole(config);
|
|
343
|
+
if (isMultipleDefaults(tgtRes)) {
|
|
344
|
+
missing.push({
|
|
345
|
+
key: "target-config-error",
|
|
346
|
+
reason:
|
|
347
|
+
"more than one global target (global.targets[]) is marked `default: true` — exactly one default may be set (or none, to pick at run time)",
|
|
348
|
+
});
|
|
349
|
+
} else if (!isBindable(tgtRes)) {
|
|
350
|
+
missing.push({
|
|
351
|
+
key: "target-required",
|
|
352
|
+
reason: "a resolvable global target (global.targets[]) is required at apply — none configured",
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// ── PROVIDER floor ──────────────────────────────────────────────────────────
|
|
358
|
+
// evaluate with an in-house judge runtime needs a provider credential.
|
|
359
|
+
const needsProvider =
|
|
360
|
+
stages.some((s) => s === AdlStage.Evaluate) && ctx.substrate === "in-house";
|
|
361
|
+
if (needsProvider && !hasUsableProvider(config)) {
|
|
362
|
+
missing.push({
|
|
363
|
+
key: "provider-required",
|
|
364
|
+
reason: "an in-house judge runtime needs a provider with a credentials_ref (global.providers[]) — none usable",
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
return { complete: missing.length === 0, missing };
|
|
369
|
+
}
|