@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,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/config/load.ts — the evaluator's config-loader (v0.2.0).
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* Read + YAML-parse the UNIFIED local `.mutagent/config.yaml` and RESOLVE the
|
|
5
|
+
* two things the evaluator needs to run:
|
|
6
|
+
*
|
|
7
|
+
* source — bound BY ROLE. The evaluator is a source-CONSUMER, so it binds
|
|
8
|
+
* `global.sources`. A SINGLE entry auto-binds; MULTIPLE ⇒
|
|
9
|
+
* disambiguation deferred (Fork A) → returned as `multiple` (NOT a
|
|
10
|
+
* hard fail — DISCOVER needs a source, code/dataset runs don't).
|
|
11
|
+
* judge — the pinned judge MODEL, resolved from `global.models.judge_model`
|
|
12
|
+
* ?? `global.models.default`. `judge_runtime` (renamed from
|
|
13
|
+
* `substrate` in v0.2.0) selects HOW judges run.
|
|
14
|
+
*
|
|
15
|
+
* These feed the CLI's config→flag precedence (an explicit `--model` /
|
|
16
|
+
* `--traces` flag WINS; the config fills the gap). This module does NOT apply
|
|
17
|
+
* that precedence — it exposes the resolved config values; the caller (cli/prep.ts)
|
|
18
|
+
* merges them under flag precedence.
|
|
19
|
+
*
|
|
20
|
+
* LEGACY (Fork B — hard-cut): a pre-v0.2.0 config (wrong `config_version` OR a
|
|
21
|
+
* legacy top-level key `shared`/`stages`/top-level `diagnostics`/`evaluator`) is
|
|
22
|
+
* DETECTED, never parsed at runtime — the loader returns
|
|
23
|
+
* `{ status: "migration-required", … }` so the caller routes to the migration
|
|
24
|
+
* DIRECTIVE. No old-shape parse ever happens.
|
|
25
|
+
*
|
|
26
|
+
* Determinism (coding-rules): `loadEvaluatorConfig` reads an INJECTED path —
|
|
27
|
+
* never resolved here. Path resolution (the LOCAL `.mutagent/`) happens only in
|
|
28
|
+
* the thin CLI, so tests stay deterministic against committed fixtures. Pure:
|
|
29
|
+
* one fs read + a YAML parse; no clock, no random, no network. Never throws.
|
|
30
|
+
*
|
|
31
|
+
* SECRETS: config holds only credential REF names (never values); resolution is
|
|
32
|
+
* a separate use-time step (resolve-credential.ts).
|
|
33
|
+
*/
|
|
34
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
35
|
+
import { resolve } from "node:path";
|
|
36
|
+
import { parse as parseYaml } from "yaml";
|
|
37
|
+
import {
|
|
38
|
+
CONFIG_VERSION,
|
|
39
|
+
LEGACY_CONFIG_VERSIONS,
|
|
40
|
+
type GlobalSource,
|
|
41
|
+
type GlobalTarget,
|
|
42
|
+
type ContextLink,
|
|
43
|
+
validateGlobal,
|
|
44
|
+
validateLifecycleEvaluator,
|
|
45
|
+
} from "./schema.ts";
|
|
46
|
+
|
|
47
|
+
/** The unified config path under a project root: `<root>/.mutagent/config.yaml`. */
|
|
48
|
+
export function configPathFor(projectRoot: string): string {
|
|
49
|
+
return resolve(projectRoot, ".mutagent", "config.yaml");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** The v0.1.0 top-level keys that must NOT appear in a v0.2.0 config. */
|
|
53
|
+
const LEGACY_TOP_LEVEL_KEYS = [
|
|
54
|
+
"shared",
|
|
55
|
+
"stages",
|
|
56
|
+
"diagnostics",
|
|
57
|
+
"evaluator",
|
|
58
|
+
] as const;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Detect a legacy (pre-v0.2.0) config WITHOUT parsing its old shape. Two signals,
|
|
62
|
+
* either one fires: a wrong/absent `config_version`, or a legacy top-level key
|
|
63
|
+
* (`shared`/`stages`/a top-level `diagnostics`/`evaluator` skill section). Pure;
|
|
64
|
+
* tolerant of a non-object input (returns []). Mirrors the orchestrator's
|
|
65
|
+
* detectLegacyConfig (parity port — no cross-import).
|
|
66
|
+
*/
|
|
67
|
+
export function detectLegacyConfig(obj: unknown): string[] {
|
|
68
|
+
if (obj === null || typeof obj !== "object") return [];
|
|
69
|
+
const o = obj as Record<string, unknown>;
|
|
70
|
+
const markers: string[] = [];
|
|
71
|
+
|
|
72
|
+
const version = o.config_version;
|
|
73
|
+
if (version !== CONFIG_VERSION) {
|
|
74
|
+
if (
|
|
75
|
+
typeof version === "string" &&
|
|
76
|
+
(LEGACY_CONFIG_VERSIONS as readonly string[]).includes(version)
|
|
77
|
+
) {
|
|
78
|
+
markers.push(
|
|
79
|
+
`config_version: "${version}" (legacy — expected "${CONFIG_VERSION}")`,
|
|
80
|
+
);
|
|
81
|
+
} else if (version === undefined) {
|
|
82
|
+
markers.push(`config_version: absent (expected "${CONFIG_VERSION}")`);
|
|
83
|
+
}
|
|
84
|
+
// A non-legacy, non-current version (e.g. a future "0.3.0") is NOT a legacy
|
|
85
|
+
// marker — structural validation reports it instead.
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
for (const key of LEGACY_TOP_LEVEL_KEYS) {
|
|
89
|
+
if (key in o) markers.push(`legacy top-level key '${key}'`);
|
|
90
|
+
}
|
|
91
|
+
return markers;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* How the evaluator's source was bound (or why it couldn't be). The SELECTION
|
|
96
|
+
* contract (v0.2.2 — parity with orchestrator + diagnostics; F2 disambiguation UX):
|
|
97
|
+
* bound — exactly one source resolved with NO ambiguity (single entry ·
|
|
98
|
+
* `--source` hit). No prompt.
|
|
99
|
+
* confirm-default — >1 source with exactly one `default:true` (F2). The default is
|
|
100
|
+
* PRESELECTED (`source`) but the caller ISSUES A CONFIRM ASK before
|
|
101
|
+
* using it (distinct from a silent bind — be explicit around ambiguity).
|
|
102
|
+
* NON-fatal + bindable: `source` is usable as-is if the operator accepts
|
|
103
|
+
* or the run is non-interactive (`--source` / CI). Carries the full
|
|
104
|
+
* candidate list so the confirm can offer an override.
|
|
105
|
+
* none — zero sources (DISCOVER needs a pick; code/dataset runs don't need a source).
|
|
106
|
+
* needs-selection — >1 source, none `default:true`, no `--source` ⇒ the caller must PROMPT the
|
|
107
|
+
* operator to pick with NO preselection (NON-fatal — the source EXISTS,
|
|
108
|
+
* only the pick is missing).
|
|
109
|
+
* multiple-defaults— >1 source with `default:true` — an AMBIGUOUS config the operator must fix.
|
|
110
|
+
* unknown-name — an explicit `--source <name>` that matched no catalog entry.
|
|
111
|
+
*
|
|
112
|
+
* confirm-default vs needs-selection: BOTH defer a run-time ASK, but confirm-default
|
|
113
|
+
* carries a PRESELECTED default (a yes/no confirm) whereas needs-selection has none (an
|
|
114
|
+
* open pick). Both are bindable-in-principle; the distinction drives the ASK shape.
|
|
115
|
+
*/
|
|
116
|
+
export type SourceBinding =
|
|
117
|
+
| { kind: "bound"; source: GlobalSource }
|
|
118
|
+
| { kind: "confirm-default"; source: GlobalSource; sources: GlobalSource[] }
|
|
119
|
+
| { kind: "none" }
|
|
120
|
+
| { kind: "needs-selection"; sources: GlobalSource[] }
|
|
121
|
+
| { kind: "multiple-defaults"; sources: GlobalSource[] }
|
|
122
|
+
| { kind: "unknown-name"; name: string };
|
|
123
|
+
|
|
124
|
+
/** How the judge model resolved (model-intent-sacred: never a silent swap). */
|
|
125
|
+
export type JudgeModelResolution =
|
|
126
|
+
| { kind: "resolved"; model: string; from: "judge_model" | "default" }
|
|
127
|
+
| { kind: "unresolved" };
|
|
128
|
+
|
|
129
|
+
export interface EvaluatorConfigResolved {
|
|
130
|
+
/** the raw config_version literal read from the file. */
|
|
131
|
+
configVersion: string;
|
|
132
|
+
/** source bound BY ROLE from `global.sources` (single auto-binds). */
|
|
133
|
+
source: SourceBinding;
|
|
134
|
+
/** the pinned judge model from `global.models.{judge_model,default}`. */
|
|
135
|
+
judgeModel: JudgeModelResolution;
|
|
136
|
+
/** `lifecycle.evaluator.judge_runtime` (renamed from `substrate`), if set. */
|
|
137
|
+
judgeRuntime: string | undefined;
|
|
138
|
+
/** `global.context[]` — PROJECT-WIDE context links (every run loads these). */
|
|
139
|
+
globalContext: ContextLink[];
|
|
140
|
+
/** `lifecycle.evaluator.context[]` — the evaluator's stage-specific links. */
|
|
141
|
+
evaluatorContext: ContextLink[];
|
|
142
|
+
/** present targets (evaluator is judge-only — carried for completeness only). */
|
|
143
|
+
targets: GlobalTarget[];
|
|
144
|
+
/** PRD R-4 — the admin default render audience for the evaluation report. Client-by-default
|
|
145
|
+
* (leak-safe); an admin sets `internal` in config.yaml to show the §5 Self-Eval tab. */
|
|
146
|
+
defaultAudience: "client" | "internal";
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** PRD R-4 — resolve the effective render audience: explicit flag → config → "client". */
|
|
150
|
+
export function resolveEvalAudience(
|
|
151
|
+
explicit: "client" | "internal" | undefined,
|
|
152
|
+
config?: { defaultAudience?: "client" | "internal" } | undefined,
|
|
153
|
+
): "client" | "internal" {
|
|
154
|
+
return explicit ?? config?.defaultAudience ?? "client";
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export type LoadEvaluatorConfigResult =
|
|
158
|
+
| { status: "ok"; exists: true; config: EvaluatorConfigResolved }
|
|
159
|
+
| { status: "absent"; exists: false }
|
|
160
|
+
| { status: "migration-required"; exists: true; markers: string[]; error: string }
|
|
161
|
+
| { status: "invalid"; exists: true; errors: string[] };
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Bind a source by role from `global.sources`. Precedence (SELECTION contract —
|
|
165
|
+
* EXACT parity with orchestrator + diagnostics):
|
|
166
|
+
*
|
|
167
|
+
* 1. explicit `selectName` (`--source`) WINS — find by name; miss ⇒ `unknown-name`.
|
|
168
|
+
* 2. 0 sources ⇒ `none`.
|
|
169
|
+
* 3. 1 source ⇒ `bound` (auto-bind — no ambiguity, no prompt).
|
|
170
|
+
* 4. >1 sources:
|
|
171
|
+
* exactly one `default:true` ⇒ `confirm-default` (F2 — preselected default; caller
|
|
172
|
+
* CONFIRMS before use, not a silent bind).
|
|
173
|
+
* >1 `default:true` ⇒ `multiple-defaults` (ambiguous — operator fixes config).
|
|
174
|
+
* 0 `default:true` ⇒ `needs-selection` (caller PROMPTS the operator — open pick).
|
|
175
|
+
*
|
|
176
|
+
* Pure; no clock/random/network. NON-fatal on `confirm-default`/`needs-selection` —
|
|
177
|
+
* the source exists; only the disambiguation confirm/pick is deferred to the run-start ASK.
|
|
178
|
+
* `--source` (explicit) always short-circuits both, satisfying the non-interactive/CI escape.
|
|
179
|
+
*/
|
|
180
|
+
function bindSourceByRole(
|
|
181
|
+
sources: GlobalSource[],
|
|
182
|
+
selectName?: string,
|
|
183
|
+
): SourceBinding {
|
|
184
|
+
// (1) Explicit override — `--source <name>` WINS over any default / auto-bind.
|
|
185
|
+
if (selectName !== undefined && selectName !== "") {
|
|
186
|
+
const hit = sources.find((s) => s.name === selectName);
|
|
187
|
+
return hit !== undefined
|
|
188
|
+
? { kind: "bound", source: hit }
|
|
189
|
+
: { kind: "unknown-name", name: selectName };
|
|
190
|
+
}
|
|
191
|
+
// (2) / (3) — zero or a single entry.
|
|
192
|
+
if (sources.length === 0) return { kind: "none" };
|
|
193
|
+
if (sources.length === 1) return { kind: "bound", source: sources[0] as GlobalSource };
|
|
194
|
+
// (4) — multiple entries; disambiguate by `default:true`.
|
|
195
|
+
const defaults = sources.filter((s) => s.default === true);
|
|
196
|
+
// F2: a lone default is PRESELECTED but CONFIRMED (be explicit around ambiguity) —
|
|
197
|
+
// it is NOT silently bound. The caller (parent session) issues a yes/no confirm ask.
|
|
198
|
+
if (defaults.length === 1) {
|
|
199
|
+
return { kind: "confirm-default", source: defaults[0] as GlobalSource, sources };
|
|
200
|
+
}
|
|
201
|
+
if (defaults.length > 1) return { kind: "multiple-defaults", sources };
|
|
202
|
+
return { kind: "needs-selection", sources };
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Resolve the judge model (model-intent-sacred): `judge_model` wins, else
|
|
207
|
+
* `default`, else unresolved. The CALLER refuses (or falls back to `--model`)
|
|
208
|
+
* on `unresolved` — this pure resolver never invents a model.
|
|
209
|
+
*/
|
|
210
|
+
function resolveJudgeModel(models: {
|
|
211
|
+
default?: string;
|
|
212
|
+
judge_model?: string;
|
|
213
|
+
}): JudgeModelResolution {
|
|
214
|
+
if (models.judge_model !== undefined && models.judge_model !== "") {
|
|
215
|
+
return { kind: "resolved", model: models.judge_model, from: "judge_model" };
|
|
216
|
+
}
|
|
217
|
+
if (models.default !== undefined && models.default !== "") {
|
|
218
|
+
return { kind: "resolved", model: models.default, from: "default" };
|
|
219
|
+
}
|
|
220
|
+
return { kind: "unresolved" };
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/** Options for {@link loadEvaluatorConfig}. */
|
|
224
|
+
export interface LoadEvaluatorConfigOptions {
|
|
225
|
+
/**
|
|
226
|
+
* Run-time source override (`--source <name>`). WINS over `default:true` /
|
|
227
|
+
* auto-bind; a miss ⇒ `{ kind: "unknown-name" }`. Absent ⇒ default precedence.
|
|
228
|
+
*/
|
|
229
|
+
selectSourceName?: string;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Load + resolve the evaluator's config from an INJECTED path. Guarded (mirrors
|
|
234
|
+
* the orchestrator loadConfig): a missing file → `absent`; malformed YAML or a
|
|
235
|
+
* failed structural check → `invalid`; a LEGACY config → `migration-required`
|
|
236
|
+
* (detected BEFORE structural validation — never parse the old shape). Otherwise
|
|
237
|
+
* `ok` with the resolved source + judge model + context links. Never throws.
|
|
238
|
+
*
|
|
239
|
+
* `opts.selectSourceName` (`--source`) threads the run-time source override into
|
|
240
|
+
* `bindSourceByRole` (SELECTION contract) — it WINS over `default:true`.
|
|
241
|
+
*/
|
|
242
|
+
export function loadEvaluatorConfig(
|
|
243
|
+
configPath: string,
|
|
244
|
+
opts: LoadEvaluatorConfigOptions = {},
|
|
245
|
+
): LoadEvaluatorConfigResult {
|
|
246
|
+
if (!existsSync(configPath)) {
|
|
247
|
+
return { status: "absent", exists: false };
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
let raw: string;
|
|
251
|
+
try {
|
|
252
|
+
raw = readFileSync(configPath, "utf8");
|
|
253
|
+
} catch (err) {
|
|
254
|
+
return { status: "invalid", exists: true, errors: [`cannot read ${configPath}: ${String(err)}`] };
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
let parsed: unknown;
|
|
258
|
+
try {
|
|
259
|
+
parsed = parseYaml(raw);
|
|
260
|
+
} catch (err) {
|
|
261
|
+
return { status: "invalid", exists: true, errors: [`malformed YAML in ${configPath}: ${String(err)}`] };
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Legacy detection FIRST — never parse the old shape at runtime (Fork B).
|
|
265
|
+
const legacyMarkers = detectLegacyConfig(parsed);
|
|
266
|
+
if (legacyMarkers.length > 0) {
|
|
267
|
+
return {
|
|
268
|
+
status: "migration-required",
|
|
269
|
+
exists: true,
|
|
270
|
+
markers: legacyMarkers,
|
|
271
|
+
error:
|
|
272
|
+
`legacy config detected in ${configPath} — migration required ` +
|
|
273
|
+
`(see references/config-migration.md): ${legacyMarkers.join("; ")}`,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
const root = (parsed ?? {}) as Record<string, unknown>;
|
|
278
|
+
const globalBlock = (root.global ?? {}) as Record<string, unknown>;
|
|
279
|
+
const lifecycle = (root.lifecycle ?? {}) as Record<string, unknown>;
|
|
280
|
+
const evaluatorSection = (lifecycle.evaluator ?? {}) as Record<string, unknown>;
|
|
281
|
+
|
|
282
|
+
// Structural validation of the two blocks the evaluator reads.
|
|
283
|
+
const gRes = validateGlobal(globalBlock);
|
|
284
|
+
if (!gRes.ok) return { status: "invalid", exists: true, errors: gRes.errors.map((e) => `global${e}`) };
|
|
285
|
+
const eRes = validateLifecycleEvaluator(evaluatorSection);
|
|
286
|
+
if (!eRes.ok) {
|
|
287
|
+
return { status: "invalid", exists: true, errors: eRes.errors.map((e) => `lifecycle.evaluator${e}`) };
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const sources = (globalBlock.sources as GlobalSource[] | undefined) ?? [];
|
|
291
|
+
const targets = (globalBlock.targets as GlobalTarget[] | undefined) ?? [];
|
|
292
|
+
const models = (globalBlock.models as { default?: string; judge_model?: string } | undefined) ?? {};
|
|
293
|
+
const globalContext = (globalBlock.context as ContextLink[] | undefined) ?? [];
|
|
294
|
+
const evaluatorContext = (evaluatorSection.context as ContextLink[] | undefined) ?? [];
|
|
295
|
+
const judgeRuntime =
|
|
296
|
+
typeof evaluatorSection.judge_runtime === "string" && evaluatorSection.judge_runtime !== ""
|
|
297
|
+
? evaluatorSection.judge_runtime
|
|
298
|
+
: undefined;
|
|
299
|
+
// PRD R-4 — admin audience override. Precedence: lifecycle.evaluator.default_audience >
|
|
300
|
+
// global.default_audience > "client". Only "internal" flips it; anything else stays client.
|
|
301
|
+
const rawAudience =
|
|
302
|
+
evaluatorSection.default_audience ?? globalBlock.default_audience;
|
|
303
|
+
const defaultAudience: "client" | "internal" = rawAudience === "internal" ? "internal" : "client";
|
|
304
|
+
|
|
305
|
+
return {
|
|
306
|
+
status: "ok",
|
|
307
|
+
exists: true,
|
|
308
|
+
config: {
|
|
309
|
+
configVersion: typeof root.config_version === "string" ? root.config_version : "",
|
|
310
|
+
source: bindSourceByRole(sources, opts.selectSourceName),
|
|
311
|
+
judgeModel: resolveJudgeModel(models),
|
|
312
|
+
judgeRuntime,
|
|
313
|
+
globalContext,
|
|
314
|
+
evaluatorContext,
|
|
315
|
+
targets,
|
|
316
|
+
defaultAudience,
|
|
317
|
+
},
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// ── CLI — thin wrapper (resolve the LOCAL config; print the resolution) ────────
|
|
322
|
+
// bun scripts/config/load.ts [project-root] [--source <name>] (root defaults to cwd)
|
|
323
|
+
// Exit 0 = ok / absent; exit 1 = invalid / migration-required.
|
|
324
|
+
|
|
325
|
+
function runCli(argv: string[]): number {
|
|
326
|
+
const sourceIdx = argv.indexOf("--source");
|
|
327
|
+
const selectSourceName =
|
|
328
|
+
sourceIdx >= 0 && sourceIdx + 1 < argv.length ? argv[sourceIdx + 1] : undefined;
|
|
329
|
+
// First positional after the script path that isn't the --source value.
|
|
330
|
+
const positional = argv[2] !== undefined && argv[2] !== "--source" ? argv[2] : undefined;
|
|
331
|
+
const projectRoot = positional ?? process.cwd();
|
|
332
|
+
const result = loadEvaluatorConfig(configPathFor(projectRoot), { selectSourceName });
|
|
333
|
+
process.stdout.write(JSON.stringify(result, null, 2) + "\n");
|
|
334
|
+
return result.status === "invalid" || result.status === "migration-required" ? 1 : 0;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
const isMain =
|
|
338
|
+
typeof import.meta !== "undefined" &&
|
|
339
|
+
(import.meta as unknown as { main?: boolean }).main === true;
|
|
340
|
+
if (isMain) {
|
|
341
|
+
const argv = typeof Bun !== "undefined" ? Bun.argv : process.argv;
|
|
342
|
+
process.exit(runCli(argv));
|
|
343
|
+
}
|