@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,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/edd/edd-types.ts
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* Shared categorical constants + TypeBox contracts for the ADL IMPROVE stage —
|
|
5
|
+
* the Eval-Driven-Development (EDD) loop (F18 closure + F19 variance-first).
|
|
6
|
+
*
|
|
7
|
+
* EDD is the ③ IMPROVE stage of the ADL: after the initial *build, the loop
|
|
8
|
+
* drives spec ↔ impl ↔ eval to full green. Two findings live here:
|
|
9
|
+
*
|
|
10
|
+
* F19 — VARIANCE-FIRST. The FIRST focus after the build is eliminating per-case
|
|
11
|
+
* VARIANCE (run each case ~N times; the verdict must stop flapping) BEFORE
|
|
12
|
+
* measuring accuracy over the full dataset. "Without stabilizing variance
|
|
13
|
+
* first, accuracy over big samples is wasted." (variance-gate.ts gates this.)
|
|
14
|
+
*
|
|
15
|
+
* F18 — EDD CLOSURE. The evaluator (judge-only, EV-051 — it NEVER fixes) REQUESTS
|
|
16
|
+
* an AI-Engineer to amend the Agent / AgentSpec. The request carries the
|
|
17
|
+
* failing cases + the proposed remedy target (agentspec vs impl); the engineer
|
|
18
|
+
* amends; the suite re-runs. (change-request.ts is the structured contract.)
|
|
19
|
+
*
|
|
20
|
+
* This module is PURE — it holds only categorical constants + TypeBox shapes. No
|
|
21
|
+
* clock / Math.random / network (coding-rules · C-PIN). The two consumer modules
|
|
22
|
+
* (variance-gate.ts · change-request.ts) import from here.
|
|
23
|
+
*
|
|
24
|
+
* Kept in lockstep with schemas/edd-change-request.schema.yaml (the human shape).
|
|
25
|
+
*/
|
|
26
|
+
import { type Static, Type } from "@sinclair/typebox";
|
|
27
|
+
|
|
28
|
+
// ── EDD phase ordering (F19 — variance precedes accuracy) ───────────────────
|
|
29
|
+
/**
|
|
30
|
+
* The ordered EDD phases. The controller enforces this order: a build is
|
|
31
|
+
* followed by VARIANCE stabilization, and ACCURACY is only measured once
|
|
32
|
+
* variance is stable. DONE is the terminal full-green state; STOPPED is a
|
|
33
|
+
* bounded non-convergence exit (max-swings / wallclock / no-improvement).
|
|
34
|
+
*/
|
|
35
|
+
export const EddPhase = {
|
|
36
|
+
/** the initial *build landed; the loop has not stabilized variance yet. */
|
|
37
|
+
Build: "build",
|
|
38
|
+
/** F19 — repeat-N the SAME cases; drive per-case verdict spread below threshold. */
|
|
39
|
+
Variance: "variance",
|
|
40
|
+
/** accuracy over the full dataset — ONLY entered once variance is stable. */
|
|
41
|
+
Accuracy: "accuracy",
|
|
42
|
+
/** terminal — variance-stable AND accuracy-met (full green). */
|
|
43
|
+
Done: "done",
|
|
44
|
+
/** terminal — bounded non-convergence (report the convergence delta). */
|
|
45
|
+
Stopped: "stopped",
|
|
46
|
+
} as const;
|
|
47
|
+
export type EddPhaseValue = (typeof EddPhase)[keyof typeof EddPhase];
|
|
48
|
+
|
|
49
|
+
// ── F18 — remedy target (which artifact the engineer amends) ────────────────
|
|
50
|
+
/**
|
|
51
|
+
* The remedy target the evaluator PROPOSES on a change-request. The evaluator
|
|
52
|
+
* never fixes (EV-051) — it names WHERE the fix belongs and the engineer amends:
|
|
53
|
+
* - agentspec : the DEFINITION (system_prompt / jobs / sop / criteria). The
|
|
54
|
+
* def→impl cascade means the engineer re-runs *build after editing.
|
|
55
|
+
* - impl : the IMPLEMENTATION scaffold only (a build-faithfulness / wiring
|
|
56
|
+
* defect that does NOT change the spec).
|
|
57
|
+
*/
|
|
58
|
+
export const RemedyTarget = {
|
|
59
|
+
AgentSpec: "agentspec",
|
|
60
|
+
Impl: "impl",
|
|
61
|
+
} as const;
|
|
62
|
+
export type RemedyTargetValue = (typeof RemedyTarget)[keyof typeof RemedyTarget];
|
|
63
|
+
|
|
64
|
+
// ── F18 — change-request lifecycle status ───────────────────────────────────
|
|
65
|
+
/**
|
|
66
|
+
* The lifecycle of one change-request as it crosses the SendMessage seam. The
|
|
67
|
+
* evaluator emits `requested`; the engineer transitions it to `amended`
|
|
68
|
+
* (re-eval pending) or `rejected` (with a reason — e.g. the remedy target is
|
|
69
|
+
* wrong, or the failing cases are not reproducible against the spec).
|
|
70
|
+
*/
|
|
71
|
+
export const ChangeRequestStatus = {
|
|
72
|
+
Requested: "requested",
|
|
73
|
+
Amended: "amended",
|
|
74
|
+
Rejected: "rejected",
|
|
75
|
+
} as const;
|
|
76
|
+
export type ChangeRequestStatusValue =
|
|
77
|
+
(typeof ChangeRequestStatus)[keyof typeof ChangeRequestStatus];
|
|
78
|
+
|
|
79
|
+
// ── F18 — why the EDD loop stopped (the bounded terminator) ─────────────────
|
|
80
|
+
/**
|
|
81
|
+
* The observable, bounded reasons the EDD loop terminates. `full-green` is the
|
|
82
|
+
* SUCCESS terminator (variance-stable AND accuracy-met). The other three are the
|
|
83
|
+
* afkloop-legal bounds that prevent an infinite loop — each reports a convergence
|
|
84
|
+
* delta. There is NO open-ended "keep going" terminator.
|
|
85
|
+
*/
|
|
86
|
+
export const EddStopReason = {
|
|
87
|
+
/** SUCCESS — variance-stable AND accuracy ≥ target. */
|
|
88
|
+
FullGreen: "full-green",
|
|
89
|
+
/** bound — hit the max number of evaluator→engineer→re-eval swings. */
|
|
90
|
+
MaxSwings: "max-swings",
|
|
91
|
+
/** bound — hit the wall-clock budget. */
|
|
92
|
+
MaxWallclock: "max-wallclock",
|
|
93
|
+
/** bound — N consecutive swings with no measurable improvement. */
|
|
94
|
+
NoImprovementStreak: "no-improvement-streak",
|
|
95
|
+
} as const;
|
|
96
|
+
export type EddStopReasonValue =
|
|
97
|
+
(typeof EddStopReason)[keyof typeof EddStopReason];
|
|
98
|
+
|
|
99
|
+
// ── F19 — per-case variance observation (one case, repeat-N verdicts) ───────
|
|
100
|
+
/**
|
|
101
|
+
* One eval case run repeat-N times. `verdicts` is the per-rerun OutcomeVerdict
|
|
102
|
+
* string ("pass" | "fail" | "uncertain") so this contract stays decoupled from
|
|
103
|
+
* the evaluate.ts numeric mapping (variance-gate.ts adapts it via evalScoreVariance).
|
|
104
|
+
*/
|
|
105
|
+
export const CaseVarianceObservationSchema = Type.Object(
|
|
106
|
+
{
|
|
107
|
+
caseId: Type.String({ minLength: 1 }),
|
|
108
|
+
/** the criterion this spread is measured for (one case may span criteria). */
|
|
109
|
+
criterionId: Type.String({ minLength: 1 }),
|
|
110
|
+
/** the per-rerun verdicts; length === repeat-N. */
|
|
111
|
+
verdicts: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),
|
|
112
|
+
/** OPTIONAL per-rerun ordered tool trajectories (drives trajectory spread). */
|
|
113
|
+
trajectories: Type.Optional(Type.Array(Type.Array(Type.String()))),
|
|
114
|
+
},
|
|
115
|
+
{ $id: "CaseVarianceObservation", additionalProperties: false },
|
|
116
|
+
);
|
|
117
|
+
export type CaseVarianceObservation = Static<typeof CaseVarianceObservationSchema>;
|
|
118
|
+
|
|
119
|
+
// ── F18 — a failing case bundled into a change-request ──────────────────────
|
|
120
|
+
/**
|
|
121
|
+
* One failing (or chronically-uncertain) case the evaluator hands to the engineer.
|
|
122
|
+
* Carries the criterion, the critique (verbatim from the verdict), and ≥1 structured
|
|
123
|
+
* grounding ref {obs,path,value} — the SAME machine-checkable grounding the judge
|
|
124
|
+
* already emitted (GA-1). A failing case with NO ref is a defect (ungrounded ask).
|
|
125
|
+
*/
|
|
126
|
+
export const FailingCaseRefSchema = Type.Object(
|
|
127
|
+
{
|
|
128
|
+
caseId: Type.String({ minLength: 1 }),
|
|
129
|
+
criterionId: Type.String({ minLength: 1 }),
|
|
130
|
+
/** verbatim critique from the verdict that flagged this case. */
|
|
131
|
+
critique: Type.String({ minLength: 1 }),
|
|
132
|
+
/** ≥1 structured grounding ref — the evidence the critique already cites. */
|
|
133
|
+
refs: Type.Array(
|
|
134
|
+
Type.Object(
|
|
135
|
+
{
|
|
136
|
+
obs: Type.String(),
|
|
137
|
+
path: Type.String(),
|
|
138
|
+
value: Type.String(),
|
|
139
|
+
},
|
|
140
|
+
{ additionalProperties: false },
|
|
141
|
+
),
|
|
142
|
+
{ minItems: 1 },
|
|
143
|
+
),
|
|
144
|
+
},
|
|
145
|
+
{ $id: "FailingCaseRef", additionalProperties: false },
|
|
146
|
+
);
|
|
147
|
+
export type FailingCaseRef = Static<typeof FailingCaseRefSchema>;
|
|
148
|
+
|
|
149
|
+
// ── F18 — the evaluator → ai-engineer change-request (the SendMessage payload) ─
|
|
150
|
+
/**
|
|
151
|
+
* The structured request the evaluator emits to the AI-Engineer over SendMessage.
|
|
152
|
+
* It is a REQUEST, never a patch — the evaluator stays judge-only (EV-051). The
|
|
153
|
+
* engineer consumes it, amends the named `remedyTarget`, and replies with a
|
|
154
|
+
* ChangeRequestResponse. `swing` is the 1-based loop iteration (drives the bound).
|
|
155
|
+
*/
|
|
156
|
+
export const EddChangeRequestSchema = Type.Object(
|
|
157
|
+
{
|
|
158
|
+
requestId: Type.String({ minLength: 1 }),
|
|
159
|
+
/** 1-based EDD swing index (the Nth evaluator→engineer→re-eval cycle). */
|
|
160
|
+
swing: Type.Integer({ minimum: 1 }),
|
|
161
|
+
subject: Type.String({ minLength: 1 }),
|
|
162
|
+
/** WHERE the engineer should fix — the evaluator PROPOSES, never patches. */
|
|
163
|
+
remedyTarget: Type.Union([
|
|
164
|
+
Type.Literal(RemedyTarget.AgentSpec),
|
|
165
|
+
Type.Literal(RemedyTarget.Impl),
|
|
166
|
+
]),
|
|
167
|
+
/** the failing cases driving this request (≥1; each grounded). */
|
|
168
|
+
failingCases: Type.Array(FailingCaseRefSchema, { minItems: 1 }),
|
|
169
|
+
/** the proposed remedy in NL — a hypothesis for the engineer, not a mandate. */
|
|
170
|
+
proposedRemedy: Type.String({ minLength: 1 }),
|
|
171
|
+
status: Type.Literal(ChangeRequestStatus.Requested),
|
|
172
|
+
},
|
|
173
|
+
{ $id: "EddChangeRequest", additionalProperties: false },
|
|
174
|
+
);
|
|
175
|
+
export type EddChangeRequest = Static<typeof EddChangeRequestSchema>;
|
|
176
|
+
/** Public alias used by change-request.ts (avoids shadowing the schema const). */
|
|
177
|
+
export type EddChangeRequestType = Static<typeof EddChangeRequestSchema>;
|
|
178
|
+
|
|
179
|
+
// ── F18 — the ai-engineer → evaluator response ──────────────────────────────
|
|
180
|
+
/**
|
|
181
|
+
* The engineer's reply after consuming a request. `amended` ⇒ the named target was
|
|
182
|
+
* edited (and, for an agentspec target, *build was re-run — def→impl cascade) and a
|
|
183
|
+
* re-eval is now warranted; `rejected` ⇒ the engineer declined (wrong target, not
|
|
184
|
+
* reproducible) WITH a reason. The loop controller reads `status` to decide the next
|
|
185
|
+
* step. There is NO "fixed it, trust me, skip re-eval" path — re-eval always follows.
|
|
186
|
+
*/
|
|
187
|
+
export const ChangeRequestResponseSchema = Type.Object(
|
|
188
|
+
{
|
|
189
|
+
requestId: Type.String({ minLength: 1 }),
|
|
190
|
+
status: Type.Union([
|
|
191
|
+
Type.Literal(ChangeRequestStatus.Amended),
|
|
192
|
+
Type.Literal(ChangeRequestStatus.Rejected),
|
|
193
|
+
]),
|
|
194
|
+
/** which artifact was actually amended (echoes the request's remedyTarget). */
|
|
195
|
+
amendedTarget: Type.Optional(
|
|
196
|
+
Type.Union([
|
|
197
|
+
Type.Literal(RemedyTarget.AgentSpec),
|
|
198
|
+
Type.Literal(RemedyTarget.Impl),
|
|
199
|
+
]),
|
|
200
|
+
),
|
|
201
|
+
/** for an agentspec amend: was *build re-run to cascade def→impl? */
|
|
202
|
+
rebuilt: Type.Optional(Type.Boolean()),
|
|
203
|
+
/** human summary of the amendment OR the rejection reason (always present). */
|
|
204
|
+
note: Type.String({ minLength: 1 }),
|
|
205
|
+
},
|
|
206
|
+
{ $id: "ChangeRequestResponse", additionalProperties: false },
|
|
207
|
+
);
|
|
208
|
+
export type ChangeRequestResponse = Static<typeof ChangeRequestResponseSchema>;
|
|
209
|
+
/** Public alias used by change-request.ts (avoids shadowing the schema const). */
|
|
210
|
+
export type ChangeRequestResponseType = Static<typeof ChangeRequestResponseSchema>;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/edd/variance-gate.ts — F19 VARIANCE-FIRST gate.
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* The EDD loop's FIRST focus after the build: eliminate per-case VARIANCE before
|
|
5
|
+
* measuring accuracy. Run each case ~N times (default 5), report the spread, and
|
|
6
|
+
* GATE — accuracy over the full dataset is only worth measuring once the verdict
|
|
7
|
+
* has stopped flapping on the SAME cases. "Without stabilizing variance first,
|
|
8
|
+
* accuracy over big samples is wasted."
|
|
9
|
+
*
|
|
10
|
+
* This module is ADDITIVE and INTEGRATION-FRIENDLY. It does NOT re-implement the
|
|
11
|
+
* variance math — it consumes the already-shipped `evalScoreVariance` from
|
|
12
|
+
* evaluate.ts (EV-054). It adds (a) the per-case gate decision, (b) the run-level
|
|
13
|
+
* roll-up, and (c) the phase-ordering check that forbids entering ACCURACY until
|
|
14
|
+
* VARIANCE is stable.
|
|
15
|
+
*
|
|
16
|
+
* PURE — no clock / Math.random / network (coding-rules · C-PIN). Same inputs →
|
|
17
|
+
* same gate, always.
|
|
18
|
+
*/
|
|
19
|
+
import { evalScoreVariance, trajectoryVariance } from "../evaluate.ts";
|
|
20
|
+
import { OutcomeVerdict, type OutcomeVerdictValue } from "../contracts/eval-types.ts";
|
|
21
|
+
import {
|
|
22
|
+
EddPhase,
|
|
23
|
+
type CaseVarianceObservation,
|
|
24
|
+
type EddPhaseValue,
|
|
25
|
+
} from "./edd-types.ts";
|
|
26
|
+
|
|
27
|
+
/** F19 default repeats — run each case 5× before measuring accuracy. */
|
|
28
|
+
export const DEFAULT_REPEAT_N = 5;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Default per-case variance threshold. A case is variance-STABLE iff its eval-score
|
|
32
|
+
* population variance is ≤ this. 0 = byte-identical verdict across reruns (the ideal);
|
|
33
|
+
* the small default tolerance admits a single uncertain among passes without flapping
|
|
34
|
+
* the gate. Override per subject via `VarianceGateConfig.maxVariance`.
|
|
35
|
+
*/
|
|
36
|
+
export const DEFAULT_MAX_VARIANCE = 0;
|
|
37
|
+
|
|
38
|
+
export interface VarianceGateConfig {
|
|
39
|
+
/** required repeats per case (the gate is UNDER-SAMPLED below this). */
|
|
40
|
+
repeatN: number;
|
|
41
|
+
/** the per-case eval-score variance ceiling (≤ ⇒ stable). */
|
|
42
|
+
maxVariance: number;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const DEFAULT_VARIANCE_GATE_CONFIG: VarianceGateConfig = {
|
|
46
|
+
repeatN: DEFAULT_REPEAT_N,
|
|
47
|
+
maxVariance: DEFAULT_MAX_VARIANCE,
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** Map an OutcomeVerdict string to the canonical enum value (validates the set). */
|
|
51
|
+
function asVerdict(s: string): OutcomeVerdictValue {
|
|
52
|
+
if (s === OutcomeVerdict.Pass || s === OutcomeVerdict.Fail || s === OutcomeVerdict.Uncertain) {
|
|
53
|
+
return s;
|
|
54
|
+
}
|
|
55
|
+
// Fail-loud: an out-of-set verdict is a contract violation, not a silent pass.
|
|
56
|
+
throw new Error(`variance-gate: out-of-set verdict "${s}" (expected pass|fail|uncertain)`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface CaseVarianceResult {
|
|
60
|
+
caseId: string;
|
|
61
|
+
criterionId: string;
|
|
62
|
+
/** the eval-score population variance across the reruns (0 = no flap). */
|
|
63
|
+
variance: number;
|
|
64
|
+
mean: number;
|
|
65
|
+
/** distinct verdicts seen across reruns (1 = no flap). */
|
|
66
|
+
distinctVerdicts: number;
|
|
67
|
+
/** how many reruns were observed (vs the required repeatN). */
|
|
68
|
+
observed: number;
|
|
69
|
+
/** false ⇒ fewer reruns than repeatN: the gate is under-sampled for this case. */
|
|
70
|
+
sufficientlySampled: boolean;
|
|
71
|
+
/** distinct ordered tool trajectories (when trajectories supplied; else 0). */
|
|
72
|
+
distinctTrajectories: number;
|
|
73
|
+
/** true iff variance ≤ maxVariance AND sufficientlySampled. */
|
|
74
|
+
stable: boolean;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Evaluate ONE case's repeat-N spread against the threshold. PURE.
|
|
79
|
+
* A case is stable iff it was sampled ≥ repeatN times AND its variance is within
|
|
80
|
+
* the ceiling. Under-sampling NEVER reads as stable (you cannot certify a spread
|
|
81
|
+
* you did not measure).
|
|
82
|
+
*/
|
|
83
|
+
export function gradeCaseVariance(
|
|
84
|
+
obs: CaseVarianceObservation,
|
|
85
|
+
config: VarianceGateConfig = DEFAULT_VARIANCE_GATE_CONFIG,
|
|
86
|
+
): CaseVarianceResult {
|
|
87
|
+
const verdicts = obs.verdicts.map(asVerdict);
|
|
88
|
+
const sv = evalScoreVariance(verdicts);
|
|
89
|
+
const distinctVerdicts = new Set(verdicts).size;
|
|
90
|
+
const observed = verdicts.length;
|
|
91
|
+
const sufficientlySampled = observed >= config.repeatN;
|
|
92
|
+
const distinctTrajectories =
|
|
93
|
+
obs.trajectories !== undefined ? trajectoryVariance(obs.trajectories).distinct : 0;
|
|
94
|
+
const withinThreshold = sv.variance <= config.maxVariance;
|
|
95
|
+
return {
|
|
96
|
+
caseId: obs.caseId,
|
|
97
|
+
criterionId: obs.criterionId,
|
|
98
|
+
variance: sv.variance,
|
|
99
|
+
mean: sv.mean,
|
|
100
|
+
distinctVerdicts,
|
|
101
|
+
observed,
|
|
102
|
+
sufficientlySampled,
|
|
103
|
+
distinctTrajectories,
|
|
104
|
+
stable: withinThreshold && sufficientlySampled,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface VarianceGateResult {
|
|
109
|
+
/** the per-case grades (sorted by caseId then criterionId for C-PIN stability). */
|
|
110
|
+
cases: CaseVarianceResult[];
|
|
111
|
+
/** count of cases whose variance exceeds the ceiling. */
|
|
112
|
+
flapping: number;
|
|
113
|
+
/** count of cases sampled below repeatN. */
|
|
114
|
+
underSampled: number;
|
|
115
|
+
/** the worst (highest) per-case variance observed. */
|
|
116
|
+
maxVariance: number;
|
|
117
|
+
/**
|
|
118
|
+
* THE GATE: true iff EVERY case is variance-stable (within threshold AND
|
|
119
|
+
* sufficiently sampled). The accuracy phase MUST NOT be entered until this
|
|
120
|
+
* is true (F19). A run with zero cases is NOT passed (nothing was measured).
|
|
121
|
+
*/
|
|
122
|
+
passed: boolean;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Roll up the per-case grades into the run-level variance gate. PURE +
|
|
127
|
+
* deterministic: the case list is sorted so the artifact is byte-identical
|
|
128
|
+
* across reruns (C-PIN). An empty case set fails the gate (you cannot certify
|
|
129
|
+
* stability you never measured).
|
|
130
|
+
*/
|
|
131
|
+
export function evaluateVarianceGate(
|
|
132
|
+
observations: CaseVarianceObservation[],
|
|
133
|
+
config: VarianceGateConfig = DEFAULT_VARIANCE_GATE_CONFIG,
|
|
134
|
+
): VarianceGateResult {
|
|
135
|
+
const cases = observations
|
|
136
|
+
.map((o) => gradeCaseVariance(o, config))
|
|
137
|
+
.sort((a, b) =>
|
|
138
|
+
a.caseId === b.caseId
|
|
139
|
+
? a.criterionId.localeCompare(b.criterionId)
|
|
140
|
+
: a.caseId.localeCompare(b.caseId),
|
|
141
|
+
);
|
|
142
|
+
const flapping = cases.filter((c) => c.variance > config.maxVariance).length;
|
|
143
|
+
const underSampled = cases.filter((c) => !c.sufficientlySampled).length;
|
|
144
|
+
const maxVariance = cases.reduce((m, c) => Math.max(m, c.variance), 0);
|
|
145
|
+
const passed = cases.length > 0 && cases.every((c) => c.stable);
|
|
146
|
+
return { cases, flapping, underSampled, maxVariance, passed };
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* F19 phase-ordering guard. Given the current phase + the variance gate result,
|
|
151
|
+
* decide whether the loop MAY advance to the accuracy phase. This encodes the
|
|
152
|
+
* hard ordering: VARIANCE must pass BEFORE ACCURACY is entered.
|
|
153
|
+
*
|
|
154
|
+
* Returns the NEXT phase. PURE — a decision function, no side effects.
|
|
155
|
+
* - from `build`/`variance`: advance to `accuracy` ONLY if the gate passed;
|
|
156
|
+
* otherwise stay in `variance` (keep stabilizing).
|
|
157
|
+
* - from any other phase: returned unchanged (this guard owns only the
|
|
158
|
+
* variance→accuracy transition; DONE/STOPPED are owned by the loop controller).
|
|
159
|
+
*/
|
|
160
|
+
export function nextPhaseAfterVariance(
|
|
161
|
+
current: EddPhaseValue,
|
|
162
|
+
gate: VarianceGateResult,
|
|
163
|
+
): EddPhaseValue {
|
|
164
|
+
if (current === EddPhase.Build || current === EddPhase.Variance) {
|
|
165
|
+
return gate.passed ? EddPhase.Accuracy : EddPhase.Variance;
|
|
166
|
+
}
|
|
167
|
+
return current;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Hard assertion for callers that must NOT proceed to accuracy with a flapping
|
|
172
|
+
* suite. THROWS when accuracy is attempted before variance is stable (F19 — the
|
|
173
|
+
* "accuracy over big samples is wasted" guard). Use at the accuracy-run entry.
|
|
174
|
+
*/
|
|
175
|
+
export function assertVarianceStableBeforeAccuracy(gate: VarianceGateResult): void {
|
|
176
|
+
if (!gate.passed) {
|
|
177
|
+
const detail =
|
|
178
|
+
gate.cases.length === 0
|
|
179
|
+
? "no cases measured"
|
|
180
|
+
: `${gate.flapping} flapping, ${gate.underSampled} under-sampled (maxVariance=${gate.maxVariance})`;
|
|
181
|
+
throw new Error(
|
|
182
|
+
`variance-gate (F19): refusing to measure accuracy before variance is stable — ${detail}. ` +
|
|
183
|
+
`Stabilize per-case variance first; accuracy over big samples is wasted otherwise.`,
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/emit-completeness.ts — WS-1: the judge EMIT-CONTRACT completeness gate.
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* The §9.4 judge walk is OPTIONAL in the schema (`present iff the judge emitted
|
|
5
|
+
* it`), so a judge that drops the structured reasoning still produces a
|
|
6
|
+
* schema-valid verdict file. That silent gap is what starved the report's
|
|
7
|
+
* Trajectory (§2) + Self-Eval (§5) tabs: walk/understanding(M2)/expectedTrajectory(M3)
|
|
8
|
+
* were 0/500 and agentSteps only 200/500, while the verdicts themselves were
|
|
9
|
+
* fully reasoned (rich critiques). This module makes the gap MACHINE-VISIBLE.
|
|
10
|
+
*
|
|
11
|
+
* It assesses, over the COMPLETE-fidelity dispatched verdicts (an INCOMPLETE trace
|
|
12
|
+
* legitimately SKIPS the per-criterion walk via the deterministic node-1 gate, so
|
|
13
|
+
* it is EXEMPT — never counted as a missing emit), how many carry each required
|
|
14
|
+
* judge-walk field. PURE + ADVISORY: it NEVER throws and NEVER alters a verdict —
|
|
15
|
+
* it returns coverage counts + a loud `warning` when a required field is wholly
|
|
16
|
+
* absent. Two consumers read the SAME numbers: the engine's aggregate log (loud
|
|
17
|
+
* assert) and the report's §5 Self-Eval "Emit-Completeness" panel (honest coverage).
|
|
18
|
+
*/
|
|
19
|
+
import type { MatrixVerdictFile } from "./contracts/eval-matrix.ts";
|
|
20
|
+
|
|
21
|
+
/** The judge-walk fields the emit-contract REQUIRES on a complete-fidelity verdict. */
|
|
22
|
+
export const EMIT_FIELDS = ["agentSteps", "understanding", "expectedTrajectory", "judgeSteps"] as const;
|
|
23
|
+
export type EmitField = (typeof EMIT_FIELDS)[number];
|
|
24
|
+
|
|
25
|
+
/** Per-field coverage over the eligible (complete-fidelity) dispatched verdicts. */
|
|
26
|
+
export interface EmitFieldCoverage {
|
|
27
|
+
field: EmitField;
|
|
28
|
+
/** how many eligible verdicts carry a NON-EMPTY value for this field. */
|
|
29
|
+
present: number;
|
|
30
|
+
/** trajectoryIds of the eligible verdicts MISSING this field. */
|
|
31
|
+
missing: string[];
|
|
32
|
+
/** present / eligible, as a 0..100 integer (100 when there are 0 eligible). */
|
|
33
|
+
pct: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface EmitCompleteness {
|
|
37
|
+
/** dispatched verdicts total (complete + incomplete). */
|
|
38
|
+
total: number;
|
|
39
|
+
/** the DENOMINATOR — complete-fidelity verdicts that SHOULD carry the walk. */
|
|
40
|
+
eligible: number;
|
|
41
|
+
/** INCOMPLETE-fidelity verdicts, exempt from the walk contract (node-1 short-circuit). */
|
|
42
|
+
exemptIncomplete: number;
|
|
43
|
+
/** per-field coverage. */
|
|
44
|
+
fields: EmitFieldCoverage[];
|
|
45
|
+
/** eligible verdicts carrying ALL required fields (a fully-complete emit). */
|
|
46
|
+
completeEmits: number;
|
|
47
|
+
/** completeEmits / eligible, 0..100 integer. */
|
|
48
|
+
completePct: number;
|
|
49
|
+
/** SET (loud) when ≥1 required field is wholly absent across all eligible verdicts. */
|
|
50
|
+
warning?: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** A verdict file is eligible for the walk contract iff its fidelity is COMPLETE. */
|
|
54
|
+
function isCompleteFidelity(f: MatrixVerdictFile): boolean {
|
|
55
|
+
// fidelity is required on the schema; `complete:false` is the node-1 INCOMPLETE gate.
|
|
56
|
+
return f.fidelity?.complete !== false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Non-empty test for one emit field on a verdict file. */
|
|
60
|
+
function fieldPresent(f: MatrixVerdictFile, field: EmitField): boolean {
|
|
61
|
+
const v = (f as Record<string, unknown>)[field];
|
|
62
|
+
if (Array.isArray(v)) return v.length > 0;
|
|
63
|
+
if (field === "understanding") {
|
|
64
|
+
// M2 is an object — present iff it carries a non-empty rephrase/understanding.
|
|
65
|
+
if (v === undefined || v === null || typeof v !== "object") return false;
|
|
66
|
+
return Object.keys(v as object).length > 0;
|
|
67
|
+
}
|
|
68
|
+
return v !== undefined && v !== null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Assess the judge emit-contract completeness over the dispatched verdict files.
|
|
73
|
+
* PURE. NEVER throws. The denominator is the COMPLETE-fidelity verdicts (INCOMPLETE
|
|
74
|
+
* traces are exempt — they short-circuit the walk by design).
|
|
75
|
+
*/
|
|
76
|
+
export function assessEmitCompleteness(files: MatrixVerdictFile[]): EmitCompleteness {
|
|
77
|
+
const total = files.length;
|
|
78
|
+
const eligibleFiles = files.filter(isCompleteFidelity);
|
|
79
|
+
const exemptIncomplete = total - eligibleFiles.length;
|
|
80
|
+
const eligible = eligibleFiles.length;
|
|
81
|
+
|
|
82
|
+
const fields: EmitFieldCoverage[] = EMIT_FIELDS.map((field) => {
|
|
83
|
+
const missing = eligibleFiles.filter((f) => !fieldPresent(f, field)).map((f) => f.trajectoryId);
|
|
84
|
+
const present = eligible - missing.length;
|
|
85
|
+
return { field, present, missing, pct: eligible > 0 ? Math.round((100 * present) / eligible) : 100 };
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
const completeEmits = eligibleFiles.filter((f) => EMIT_FIELDS.every((field) => fieldPresent(f, field))).length;
|
|
89
|
+
const completePct = eligible > 0 ? Math.round((100 * completeEmits) / eligible) : 100;
|
|
90
|
+
|
|
91
|
+
const result: EmitCompleteness = {
|
|
92
|
+
total,
|
|
93
|
+
eligible,
|
|
94
|
+
exemptIncomplete,
|
|
95
|
+
fields,
|
|
96
|
+
completeEmits,
|
|
97
|
+
completePct,
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const whollyAbsent = fields.filter((f) => eligible > 0 && f.present === 0).map((f) => f.field);
|
|
101
|
+
if (whollyAbsent.length > 0) {
|
|
102
|
+
result.warning =
|
|
103
|
+
`JUDGE EMIT-CONTRACT GAP: ${whollyAbsent.join(", ")} absent on ALL ${eligible} complete-fidelity ` +
|
|
104
|
+
`verdict(s) — the §9.4 judge walk was dropped. The Trajectory (§2) + Self-Eval (§5) tabs read ` +
|
|
105
|
+
`these as starved. The judge (#mode-judge-trajectory) MUST emit M2 understanding, M3 ` +
|
|
106
|
+
`expectedTrajectory, agentSteps and judgeSteps on every complete-fidelity trajectory ` +
|
|
107
|
+
`(assets/agents/evaluator.md §9.4 walk). agentSteps is factual trace data — reconstruct it ` +
|
|
108
|
+
`deterministically when the judge omits it; M2/M3/judgeSteps are judge reasoning — resend on absence.`;
|
|
109
|
+
}
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/eval-engine.ts — the ADL EVAL-stage ENGINE FORK resolver (Type A — PURE).
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* F7 / F9 / F14. When the ADL `*build` stage hands the evaluator a freshly-built
|
|
5
|
+
* agent, `*build-evals` / `*evaluate` must ASK which eval engine to implement:
|
|
6
|
+
*
|
|
7
|
+
* - Path A `native-matrix` — mutagent NATIVE eval-matrix + LLM-judge SUB-AGENTS.
|
|
8
|
+
* HARD DEPENDENCY on a Claude-Code host (to spawn the judges). For a CODE
|
|
9
|
+
* framework target (Mastra/TS) it ALSO needs the built agent to EMIT
|
|
10
|
+
* logs/traces to a known sink for the judge to read (F9). The CC dependency +
|
|
11
|
+
* sink requirement are SURFACED in the menu (F7) — never discovered late.
|
|
12
|
+
* - Path B `code-written` — evals written in the TARGET'S OWN language
|
|
13
|
+
* (bun/TS for Mastra): deterministic code-checks + an LLM-judge call VIA SDK +
|
|
14
|
+
* eval-criteria checks. PORTABLE — no CC sub-agents, so a non-CC user is not
|
|
15
|
+
* trapped in the matrix (F14).
|
|
16
|
+
*
|
|
17
|
+
* The fork is TARGET-CONDITIONAL (F9): a code FRAMEWORK target may pick EITHER
|
|
18
|
+
* engine; a `harness:*` target is native-only (there is no target language to
|
|
19
|
+
* write portable evals into). This module is PURE DATA + gates — the
|
|
20
|
+
* AskUserQuestion prompt and the actual codegen live elsewhere
|
|
21
|
+
* (codegen-evals.ts). Subject-agnostic; no clock / random / network.
|
|
22
|
+
*/
|
|
23
|
+
import {
|
|
24
|
+
EvalEngine,
|
|
25
|
+
type EvalEngineValue,
|
|
26
|
+
type EvalEngineOption,
|
|
27
|
+
type EvalEnginePlan,
|
|
28
|
+
type EngineTargetInput,
|
|
29
|
+
} from "./contracts/eval-engine.ts";
|
|
30
|
+
|
|
31
|
+
const HARNESS_PREFIX = "harness:";
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Is the target a coding FRAMEWORK (mastra · langgraph · pydantic-ai · …) rather
|
|
35
|
+
* than a `harness:*` runtime? A framework has a target LANGUAGE we can write
|
|
36
|
+
* portable code-written evals into; a harness does not. PURE.
|
|
37
|
+
*/
|
|
38
|
+
export function isFrameworkTarget(target: EngineTargetInput): boolean {
|
|
39
|
+
return !target.targetFramework.startsWith(HARNESS_PREFIX);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The discoverable OUTPUT SINK an engine writes (and, for native-on-framework,
|
|
44
|
+
* the sink the built agent must EMIT to). Always relative to the host project
|
|
45
|
+
* root — the discoverability success-gate ("outputs land in a discoverable
|
|
46
|
+
* sink"). PURE.
|
|
47
|
+
*/
|
|
48
|
+
export function defaultOutputSink(engine: EvalEngineValue, target: EngineTargetInput): string {
|
|
49
|
+
if (engine === EvalEngine.CodeWritten) {
|
|
50
|
+
// Path B writes the eval suite + its results in the target's own tree.
|
|
51
|
+
return ".mutagent/evaluator/code-evals/";
|
|
52
|
+
}
|
|
53
|
+
// Path A. On a CODE framework the built agent emits logs/traces HERE for the
|
|
54
|
+
// matrix judge to read; on a harness target the judge reads CC transcripts
|
|
55
|
+
// directly, but the verdicts + scorecard still land under the run dir.
|
|
56
|
+
return isFrameworkTarget(target)
|
|
57
|
+
? ".mutagent/evaluator/agent-logs/"
|
|
58
|
+
: ".mutagent/evaluator/runs/";
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* The target-conditional ENGINE MENU (F9). A code framework offers BOTH paths
|
|
63
|
+
* (Path A + Path B); a `harness:*` target is native-only. The Claude-Code
|
|
64
|
+
* dependency + the log-sink requirement are SURFACED on each option (F7) so the
|
|
65
|
+
* picker never silently traps a user in the matrix. Deterministic order:
|
|
66
|
+
* code-written first (the recommended, portable default for a framework), then
|
|
67
|
+
* native-matrix. PURE.
|
|
68
|
+
*/
|
|
69
|
+
export function chooseEvalEngineOptions(target: EngineTargetInput): EvalEngineOption[] {
|
|
70
|
+
const framework = isFrameworkTarget(target);
|
|
71
|
+
const nativeNeedsSink = framework; // a code framework must emit to a sink (F9)
|
|
72
|
+
const nativeOption: EvalEngineOption = {
|
|
73
|
+
engine: EvalEngine.NativeMatrix,
|
|
74
|
+
label: "Path A — mutagent native eval-matrix (LLM-judge sub-agents)",
|
|
75
|
+
summary: framework
|
|
76
|
+
? "Eval-matrix judged by Claude-Code sub-agents. Requires a Claude-Code host AND the " +
|
|
77
|
+
"built agent to emit logs/traces to a known sink for the judge to read."
|
|
78
|
+
: "Eval-matrix judged by Claude-Code sub-agents reading the harness session transcripts. " +
|
|
79
|
+
"Requires a Claude-Code host.",
|
|
80
|
+
requiresClaudeCode: true,
|
|
81
|
+
requiresLogSink: nativeNeedsSink,
|
|
82
|
+
portable: false,
|
|
83
|
+
recommended: !framework, // native is the only (thus default) choice for a harness
|
|
84
|
+
};
|
|
85
|
+
if (!framework) {
|
|
86
|
+
// harness:* — native-only (no target language for portable code-written evals).
|
|
87
|
+
return [nativeOption];
|
|
88
|
+
}
|
|
89
|
+
const codeOption: EvalEngineOption = {
|
|
90
|
+
engine: EvalEngine.CodeWritten,
|
|
91
|
+
label: `Path B — code-written evals in ${target.runtime}/${target.targetFramework}`,
|
|
92
|
+
summary:
|
|
93
|
+
"Evals written in the target's own language: deterministic code-checks + an LLM-judge " +
|
|
94
|
+
"call via SDK + eval-criteria checks. Portable — runs WITHOUT Claude Code.",
|
|
95
|
+
requiresClaudeCode: false,
|
|
96
|
+
requiresLogSink: false,
|
|
97
|
+
portable: true,
|
|
98
|
+
recommended: true, // portability-first default for a code framework
|
|
99
|
+
};
|
|
100
|
+
return [codeOption, nativeOption];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Gate: an engine choice must MATCH the target (F9). `code-written` needs a
|
|
105
|
+
* target LANGUAGE — it is rejected on a `harness:*` target. `native-matrix`
|
|
106
|
+
* matches any target. THROWS (fail-loud, no silent re-route). PURE.
|
|
107
|
+
*/
|
|
108
|
+
export function assertEngineMatchesTarget(
|
|
109
|
+
engine: EvalEngineValue,
|
|
110
|
+
target: EngineTargetInput,
|
|
111
|
+
): void {
|
|
112
|
+
if (engine === EvalEngine.CodeWritten && !isFrameworkTarget(target)) {
|
|
113
|
+
throw new Error(
|
|
114
|
+
`assertEngineMatchesTarget: code-written evals require a code-FRAMEWORK target ` +
|
|
115
|
+
`with a writable language, but target_framework='${target.targetFramework}' is a ` +
|
|
116
|
+
`harness target. A harness target is native-matrix only (Path A). ` +
|
|
117
|
+
`Choose native-matrix or re-target to a code framework.`,
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Resolve a user's engine choice into the RESOLVED plan `*evaluate` runs against.
|
|
124
|
+
* Surfaces the Path-A dependencies (Claude Code + log sink) explicitly. Unknown
|
|
125
|
+
* engine → THROW (no silent default). PURE.
|
|
126
|
+
*/
|
|
127
|
+
export function resolveEvalEngine(
|
|
128
|
+
choice: EvalEngineValue,
|
|
129
|
+
target: EngineTargetInput,
|
|
130
|
+
): EvalEnginePlan {
|
|
131
|
+
if (choice !== EvalEngine.NativeMatrix && choice !== EvalEngine.CodeWritten) {
|
|
132
|
+
throw new Error(
|
|
133
|
+
`resolveEvalEngine: unknown eval engine '${String(choice)}'. ` +
|
|
134
|
+
`Choose one of {${EvalEngine.NativeMatrix}, ${EvalEngine.CodeWritten}}.`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
assertEngineMatchesTarget(choice, target);
|
|
138
|
+
const framework = isFrameworkTarget(target);
|
|
139
|
+
const requiresClaudeCode = choice === EvalEngine.NativeMatrix;
|
|
140
|
+
const requiresLogSink = choice === EvalEngine.NativeMatrix && framework;
|
|
141
|
+
const outputSink = defaultOutputSink(choice, target);
|
|
142
|
+
const rationale =
|
|
143
|
+
choice === EvalEngine.CodeWritten
|
|
144
|
+
? `Code-written evals in ${target.runtime}/${target.targetFramework} — portable, ` +
|
|
145
|
+
`runs without Claude Code (F14). Results land in ${outputSink}.`
|
|
146
|
+
: framework
|
|
147
|
+
? `Native eval-matrix judged by Claude-Code sub-agents. The built agent MUST emit ` +
|
|
148
|
+
`logs/traces to ${outputSink} for the judge to read (F9).`
|
|
149
|
+
: `Native eval-matrix judged by Claude-Code sub-agents reading the harness ` +
|
|
150
|
+
`session transcripts directly.`;
|
|
151
|
+
return {
|
|
152
|
+
engine: choice,
|
|
153
|
+
target,
|
|
154
|
+
targetIsFramework: framework,
|
|
155
|
+
requiresClaudeCode,
|
|
156
|
+
requiresLogSink,
|
|
157
|
+
outputSink,
|
|
158
|
+
rationale,
|
|
159
|
+
};
|
|
160
|
+
}
|