@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,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/config/schema.ts — the evaluator's FIRST config contract (v0.2.0).
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* PORTED IN, standalone. The evaluator reads the UNIFIED local
|
|
5
|
+
* `.mutagent/config.yaml` (operator decision 2026-06-29): ONE file drives the
|
|
6
|
+
* orchestrator + every skill. This module TypeBox-types the two blocks the
|
|
7
|
+
* evaluator reads:
|
|
8
|
+
*
|
|
9
|
+
* global.sources[] — the SOURCE catalog (where traces live). Bound BY ROLE
|
|
10
|
+
* (the evaluator is a source-CONSUMER → it binds
|
|
11
|
+
* `global.sources`). A single entry auto-binds; multiple
|
|
12
|
+
* ⇒ disambiguation is deferred (Fork A).
|
|
13
|
+
* global.models — { default, judge_model }. `judge_model` (renamed from
|
|
14
|
+
* `pinned_judge` in v0.2.0) is the C-PIN pinned judge.
|
|
15
|
+
* lifecycle.evaluator — the evaluator's OWN section: `context[]` (stage-
|
|
16
|
+
* specific links) + `judge_runtime` (renamed from
|
|
17
|
+
* `substrate` in v0.2.0 — HOW judges run).
|
|
18
|
+
*
|
|
19
|
+
* SEALED-SIBLING (coding-rules): the source/target SHAPE is a PARITY PORT of
|
|
20
|
+
* mutagent-orchestrator's `scripts/config-schema.ts` GlobalSourceSchema /
|
|
21
|
+
* GlobalTargetSchema — NEVER cross-imported (like resolve-credential.ts). A
|
|
22
|
+
* parity test asserts the shapes stay in lockstep.
|
|
23
|
+
*
|
|
24
|
+
* SHAPE vs COMPLETENESS (mirrors the orchestrator): this schema enforces SHAPE
|
|
25
|
+
* only. Sub-fields of `global` are OPTIONAL so a partial, mid-onboarding config
|
|
26
|
+
* still validates structurally. The per-skill `lifecycle.evaluator` section is
|
|
27
|
+
* OPEN (additionalProperties:true) beyond the typed fields — the evaluator owns
|
|
28
|
+
* the rest of its knobs; the orchestrator types only the gate-relevant ones.
|
|
29
|
+
*
|
|
30
|
+
* Determinism: pure schema + a `Value.Check` validator. No clock, no random, no
|
|
31
|
+
* network. The loader (config/load.ts) reads an INJECTED path; the pure core
|
|
32
|
+
* never resolves a path on its own (tests run against committed fixtures).
|
|
33
|
+
*
|
|
34
|
+
* NO raw secrets: a `credential_ref` is an env-var NAME (or `{env,path}`),
|
|
35
|
+
* resolved at use-time via resolve-credential.ts (env → .env → .mutagentrc).
|
|
36
|
+
*/
|
|
37
|
+
import { type Static, Type } from "@sinclair/typebox";
|
|
38
|
+
import { Value } from "@sinclair/typebox/value";
|
|
39
|
+
|
|
40
|
+
/** The FROZEN config-contract version this loader understands. */
|
|
41
|
+
export const CONFIG_VERSION = "0.2.0" as const;
|
|
42
|
+
|
|
43
|
+
/** Legacy version(s) whose configs must NOT be parsed at runtime (hard-cut). */
|
|
44
|
+
export const LEGACY_CONFIG_VERSIONS = ["0.1.0"] as const;
|
|
45
|
+
|
|
46
|
+
// ── Categorical constants (no magic strings — coding-rules) ──────────────────
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Source platforms a `global.sources[]` entry can pull traces from.
|
|
50
|
+
* CONSUMER: the trace-fetch layer (`mutagent-cli trace fetch`, run by Helix BEFORE
|
|
51
|
+
* dispatch — the evaluator never fetches) selects the adapter by this value.
|
|
52
|
+
* PURPOSE: names WHERE the subject's traces live so they can be normalized to UniTF.
|
|
53
|
+
*/
|
|
54
|
+
export const SourcePlatform = {
|
|
55
|
+
Langfuse: "langfuse",
|
|
56
|
+
Otel: "otel",
|
|
57
|
+
LocalJsonl: "local-jsonl",
|
|
58
|
+
ClaudeCode: "claude-code",
|
|
59
|
+
Codex: "codex",
|
|
60
|
+
} as const;
|
|
61
|
+
export type SourcePlatformValue =
|
|
62
|
+
(typeof SourcePlatform)[keyof typeof SourcePlatform];
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Normalizer format hint for a source (how to parse the records).
|
|
66
|
+
* CONSUMER: the trace-fetch/normalize layer (`@mutagent/tools` adapters) — picks the
|
|
67
|
+
* parser for a source's records. PURPOSE: disambiguates record shape within a platform.
|
|
68
|
+
* `unitf` (F1) — the records are ALREADY conformant UniTF jsonl (e.g. emitted by the
|
|
69
|
+
* code-run capture WRAP, `captureUniTF` in `@mutagent/tools`). The fetch layer then
|
|
70
|
+
* SKIPS per-platform normalization and reads the jsonl DIRECTLY. Pairs with
|
|
71
|
+
* `platform: local-jsonl` + `paths:[…]`. PARITY PORT of the orchestrator's SourceFormat.
|
|
72
|
+
*/
|
|
73
|
+
export const SourceFormat = {
|
|
74
|
+
LangfuseExport: "langfuse-export",
|
|
75
|
+
ClaudeCode: "claude-code",
|
|
76
|
+
Codex: "codex",
|
|
77
|
+
Raw: "raw",
|
|
78
|
+
Unitf: "unitf",
|
|
79
|
+
} as const;
|
|
80
|
+
export type SourceFormatValue = (typeof SourceFormat)[keyof typeof SourceFormat];
|
|
81
|
+
|
|
82
|
+
/** Latency-unit override for a source (`auto` = infer from the record). */
|
|
83
|
+
export const LatencyUnit = {
|
|
84
|
+
Auto: "auto",
|
|
85
|
+
Ms: "ms",
|
|
86
|
+
S: "s",
|
|
87
|
+
} as const;
|
|
88
|
+
export type LatencyUnitValue = (typeof LatencyUnit)[keyof typeof LatencyUnit];
|
|
89
|
+
|
|
90
|
+
/** Target platforms a `global.targets[]` entry can write a fix TO. */
|
|
91
|
+
export const TargetPlatform = {
|
|
92
|
+
LocalClaude: "local-claude",
|
|
93
|
+
LocalCodex: "local-codex",
|
|
94
|
+
LocalCursor: "local-cursor",
|
|
95
|
+
LocalOpencode: "local-opencode",
|
|
96
|
+
LocalMastra: "local-mastra",
|
|
97
|
+
LocalCloudAgentSdk: "local-cloud-agent-sdk",
|
|
98
|
+
CloudRest: "cloud-rest",
|
|
99
|
+
ReportOnly: "report-only",
|
|
100
|
+
} as const;
|
|
101
|
+
export type TargetPlatformValue =
|
|
102
|
+
(typeof TargetPlatform)[keyof typeof TargetPlatform];
|
|
103
|
+
|
|
104
|
+
/** Whether a target's writes go through local files (worktree) or a remote API. */
|
|
105
|
+
export const TargetMode = {
|
|
106
|
+
Local: "local",
|
|
107
|
+
Remote: "remote",
|
|
108
|
+
} as const;
|
|
109
|
+
export type TargetModeValue = (typeof TargetMode)[keyof typeof TargetMode];
|
|
110
|
+
|
|
111
|
+
/** HOW a fix is applied to a target (`report-only` ⇒ no target write). */
|
|
112
|
+
export const ApplyKind = {
|
|
113
|
+
CodePr: "code-pr",
|
|
114
|
+
Markdown: "markdown",
|
|
115
|
+
CloudDeploy: "cloud-deploy",
|
|
116
|
+
ReportOnly: "report-only",
|
|
117
|
+
} as const;
|
|
118
|
+
export type ApplyKindValue = (typeof ApplyKind)[keyof typeof ApplyKind];
|
|
119
|
+
|
|
120
|
+
// ── Shared building-block schemas (PARITY PORT — orchestrator config-schema) ──
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* A credential REFERENCE — an ENV-VAR NAME (string) or `{ env, path? }`. NEVER a
|
|
124
|
+
* raw secret value (mirrors resolve-credential.ts CredentialRef; no cross-import).
|
|
125
|
+
*/
|
|
126
|
+
export const CredentialRefSchema = Type.Union([
|
|
127
|
+
Type.String({ minLength: 1 }),
|
|
128
|
+
Type.Object(
|
|
129
|
+
{
|
|
130
|
+
env: Type.String({ minLength: 1 }),
|
|
131
|
+
path: Type.Optional(Type.String({ minLength: 1 })),
|
|
132
|
+
},
|
|
133
|
+
{ additionalProperties: false },
|
|
134
|
+
),
|
|
135
|
+
]);
|
|
136
|
+
export type CredentialRefValue = Static<typeof CredentialRefSchema>;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* A PROJECT-WIDE (or stage-specific) context link — a pointer to a supplementary
|
|
140
|
+
* doc with WHAT / WHY / WHEN. All four fields REQUIRED (a link with no rationale
|
|
141
|
+
* is noise).
|
|
142
|
+
*/
|
|
143
|
+
export const ContextLinkSchema = Type.Object(
|
|
144
|
+
{
|
|
145
|
+
path: Type.String({ minLength: 1 }),
|
|
146
|
+
what: Type.String({ minLength: 1 }),
|
|
147
|
+
why: Type.String({ minLength: 1 }),
|
|
148
|
+
when: Type.String({ minLength: 1 }),
|
|
149
|
+
},
|
|
150
|
+
{ additionalProperties: false },
|
|
151
|
+
);
|
|
152
|
+
export type ContextLink = Static<typeof ContextLinkSchema>;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* The default model + the pinned judge model (`judge_model` — was `pinned_judge`).
|
|
156
|
+
* CONSUMER: config/load.ts `resolveJudgeModel` → prep.ts `--model` gap-fill.
|
|
157
|
+
* default — the project-wide fallback judge model. PURPOSE: used ONLY when
|
|
158
|
+
* `judge_model` is absent (`from: "default"`). ASYMMETRY: diagnostics
|
|
159
|
+
* IGNORES `models.default` for its judge (it pins its own) — the field
|
|
160
|
+
* is a shared config key that the two skills consume differently.
|
|
161
|
+
* judge_model — the C-PIN pinned judge (model-intent-sacred; temp pinned 0). PURPOSE:
|
|
162
|
+
* the authoritative judge model; wins over `default` (`from: "judge_model"`).
|
|
163
|
+
*/
|
|
164
|
+
export const ModelsSchema = Type.Object(
|
|
165
|
+
{
|
|
166
|
+
default: Type.Optional(Type.String({ minLength: 1 })),
|
|
167
|
+
judge_model: Type.Optional(Type.String({ minLength: 1 })),
|
|
168
|
+
},
|
|
169
|
+
{ additionalProperties: false },
|
|
170
|
+
);
|
|
171
|
+
export type Models = Static<typeof ModelsSchema>;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* One SOURCE catalog entry — where traces live. PARITY PORT of the orchestrator's
|
|
175
|
+
* GlobalSourceSchema. `paths` (file sources) is mutually exclusive with `endpoint`
|
|
176
|
+
* (remote); the schema tolerates both — onboarding cares.
|
|
177
|
+
*/
|
|
178
|
+
export const GlobalSourceSchema = Type.Object(
|
|
179
|
+
{
|
|
180
|
+
// name — the catalog key. CONSUMER: config/load.ts `bindSourceByRole` (matched by
|
|
181
|
+
// `--source <name>`) + prep.ts surface messages. PURPOSE: stable id for selection.
|
|
182
|
+
name: Type.String({ minLength: 1 }),
|
|
183
|
+
// platform — see SourcePlatform. CONSUMER: the fetch/normalize adapter selector.
|
|
184
|
+
platform: Type.Union([
|
|
185
|
+
Type.Literal(SourcePlatform.Langfuse),
|
|
186
|
+
Type.Literal(SourcePlatform.Otel),
|
|
187
|
+
Type.Literal(SourcePlatform.LocalJsonl),
|
|
188
|
+
Type.Literal(SourcePlatform.ClaudeCode),
|
|
189
|
+
Type.Literal(SourcePlatform.Codex),
|
|
190
|
+
]),
|
|
191
|
+
// project — remote-source project/scope id. CONSUMER: the remote fetch adapter
|
|
192
|
+
// (e.g. Langfuse project). PURPOSE: scopes a pull on a multi-project backend.
|
|
193
|
+
project: Type.Optional(Type.String({ minLength: 1 })),
|
|
194
|
+
// endpoint — remote base URL. CONSUMER: the remote fetch adapter. PURPOSE: where to
|
|
195
|
+
// pull from (mutually exclusive with `paths`; onboarding enforces, schema tolerates).
|
|
196
|
+
endpoint: Type.Optional(Type.String({ minLength: 1 })),
|
|
197
|
+
// credential_ref — env-var NAME / {env,path} (NEVER a secret). CONSUMER: resolve-
|
|
198
|
+
// credential.ts at fetch-time. PURPOSE: names the key for a remote pull.
|
|
199
|
+
credential_ref: Type.Optional(CredentialRefSchema),
|
|
200
|
+
// paths — file-source globs. CONSUMER: the local-jsonl fetch adapter. PURPOSE: the
|
|
201
|
+
// on-disk jsonl location (pairs with `platform: local-jsonl`; see `format: unitf`).
|
|
202
|
+
paths: Type.Optional(Type.Array(Type.String({ minLength: 1 }))),
|
|
203
|
+
// format — see SourceFormat. CONSUMER: the normalize step (`unitf` ⇒ skip normalize,
|
|
204
|
+
// read jsonl direct). PURPOSE: record-shape hint within a platform.
|
|
205
|
+
format: Type.Optional(
|
|
206
|
+
Type.Union([
|
|
207
|
+
Type.Literal(SourceFormat.LangfuseExport),
|
|
208
|
+
Type.Literal(SourceFormat.ClaudeCode),
|
|
209
|
+
Type.Literal(SourceFormat.Codex),
|
|
210
|
+
Type.Literal(SourceFormat.Raw),
|
|
211
|
+
Type.Literal(SourceFormat.Unitf),
|
|
212
|
+
]),
|
|
213
|
+
),
|
|
214
|
+
// agent_field — record path naming the agent/subject. CONSUMER: the normalizer's
|
|
215
|
+
// subject-grouping. PURPOSE: which field identifies the agent when a trace is multi-agent.
|
|
216
|
+
agent_field: Type.Optional(Type.String({ minLength: 1 })),
|
|
217
|
+
// latency_unit — see LatencyUnit (`auto` = infer). CONSUMER: the normalizer's
|
|
218
|
+
// latency projection. PURPOSE: overrides ambiguous ms-vs-s latency records.
|
|
219
|
+
latency_unit: Type.Optional(
|
|
220
|
+
Type.Union([
|
|
221
|
+
Type.Literal(LatencyUnit.Auto),
|
|
222
|
+
Type.Literal(LatencyUnit.Ms),
|
|
223
|
+
Type.Literal(LatencyUnit.S),
|
|
224
|
+
]),
|
|
225
|
+
),
|
|
226
|
+
// default — PARITY (orchestrator SourceSchema): the catalog's DEFAULT pick when >1
|
|
227
|
+
// entry exists. CONSUMER: config/load.ts `bindSourceByRole` — exactly one `default:true`
|
|
228
|
+
// ⇒ `confirm-default` (F2: preselected, operator confirms), not a silent bind. PURPOSE:
|
|
229
|
+
// marks the preferred source among many. Optional: absent ⇒ no default.
|
|
230
|
+
default: Type.Optional(Type.Boolean()),
|
|
231
|
+
},
|
|
232
|
+
{ additionalProperties: false },
|
|
233
|
+
);
|
|
234
|
+
export type GlobalSource = Static<typeof GlobalSourceSchema>;
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* A precise link to an Agent / Tooling definition file in a code target.
|
|
238
|
+
* RESERVED — consumed by Build/Improve (future). The evaluator is JUDGE-ONLY (EV-051)
|
|
239
|
+
* and never writes a target; `targets[].code_refs` is ported for shape parity only and
|
|
240
|
+
* has NO evaluator consumer today. PURPOSE (future): tells BUILD/IMPROVE which files
|
|
241
|
+
* realize the agent so a fix lands on the right def.
|
|
242
|
+
*/
|
|
243
|
+
export const CodeRefSchema = Type.Object(
|
|
244
|
+
{
|
|
245
|
+
path: Type.String({ minLength: 1 }),
|
|
246
|
+
why: Type.String({ minLength: 1 }),
|
|
247
|
+
},
|
|
248
|
+
{ additionalProperties: false },
|
|
249
|
+
);
|
|
250
|
+
export type CodeRef = Static<typeof CodeRefSchema>;
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* HOW a fix is applied for a target. `kind` gates the report-only branch.
|
|
254
|
+
* CONSUMER: the diagnostics APPLY path (not the evaluator — judge-only). PURPOSE:
|
|
255
|
+
* selects the write mechanism for a fix.
|
|
256
|
+
* versioning / pr — RESERVED, consumed by Build/Improve (future). No evaluator
|
|
257
|
+
* consumer; ported for parity. PURPOSE (future): toggle spec-bump /
|
|
258
|
+
* open-a-PR on apply.
|
|
259
|
+
*/
|
|
260
|
+
export const ApplySchema = Type.Object(
|
|
261
|
+
{
|
|
262
|
+
kind: Type.Union([
|
|
263
|
+
Type.Literal(ApplyKind.CodePr),
|
|
264
|
+
Type.Literal(ApplyKind.Markdown),
|
|
265
|
+
Type.Literal(ApplyKind.CloudDeploy),
|
|
266
|
+
Type.Literal(ApplyKind.ReportOnly),
|
|
267
|
+
]),
|
|
268
|
+
versioning: Type.Optional(Type.Boolean()),
|
|
269
|
+
pr: Type.Optional(Type.Boolean()),
|
|
270
|
+
},
|
|
271
|
+
{ additionalProperties: false },
|
|
272
|
+
);
|
|
273
|
+
export type Apply = Static<typeof ApplySchema>;
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* One TARGET catalog entry — where agent defs live + how a fix is applied. PARITY
|
|
277
|
+
* PORT of the orchestrator's GlobalTargetSchema. The evaluator is JUDGE-ONLY
|
|
278
|
+
* (EV-051) so it never WRITES a target; it ports the shape for parity + so the
|
|
279
|
+
* loader can validate a full `global` block without rejecting a present target.
|
|
280
|
+
*/
|
|
281
|
+
export const GlobalTargetSchema = Type.Object(
|
|
282
|
+
{
|
|
283
|
+
name: Type.String({ minLength: 1 }),
|
|
284
|
+
platform: Type.Union([
|
|
285
|
+
Type.Literal(TargetPlatform.LocalClaude),
|
|
286
|
+
Type.Literal(TargetPlatform.LocalCodex),
|
|
287
|
+
Type.Literal(TargetPlatform.LocalCursor),
|
|
288
|
+
Type.Literal(TargetPlatform.LocalOpencode),
|
|
289
|
+
Type.Literal(TargetPlatform.LocalMastra),
|
|
290
|
+
Type.Literal(TargetPlatform.LocalCloudAgentSdk),
|
|
291
|
+
Type.Literal(TargetPlatform.CloudRest),
|
|
292
|
+
Type.Literal(TargetPlatform.ReportOnly),
|
|
293
|
+
]),
|
|
294
|
+
mode: Type.Union([
|
|
295
|
+
Type.Literal(TargetMode.Local),
|
|
296
|
+
Type.Literal(TargetMode.Remote),
|
|
297
|
+
]),
|
|
298
|
+
root: Type.Optional(Type.String({ minLength: 1 })),
|
|
299
|
+
rest_base_url: Type.Optional(Type.String({ minLength: 1 })),
|
|
300
|
+
repo_url: Type.Optional(Type.String({ minLength: 1 })),
|
|
301
|
+
code_refs: Type.Optional(Type.Array(CodeRefSchema)),
|
|
302
|
+
credential_ref: Type.Optional(CredentialRefSchema),
|
|
303
|
+
apply: ApplySchema,
|
|
304
|
+
// PARITY (orchestrator TargetSchema): the catalog's DEFAULT pick when >1 entry
|
|
305
|
+
// exists. The evaluator is JUDGE-ONLY (EV-051) and never binds a target, but the
|
|
306
|
+
// shape stays in lockstep with the orchestrator (parity test). Optional.
|
|
307
|
+
default: Type.Optional(Type.Boolean()),
|
|
308
|
+
},
|
|
309
|
+
{ additionalProperties: false },
|
|
310
|
+
);
|
|
311
|
+
export type GlobalTarget = Static<typeof GlobalTargetSchema>;
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* The GLOBAL cross-cutting resources the evaluator reads. Sub-fields OPTIONAL (a
|
|
315
|
+
* partial mid-onboarding config still validates). The evaluator only READS
|
|
316
|
+
* `models` + `sources` (+ `targets` for shape parity); the orchestrator owns the
|
|
317
|
+
* rest of `global` (providers/workspace/brand/context) — passed through here as
|
|
318
|
+
* OPEN so a full unified config doesn't fail the evaluator's structural check.
|
|
319
|
+
*/
|
|
320
|
+
export const GlobalSchema = Type.Object(
|
|
321
|
+
{
|
|
322
|
+
models: Type.Optional(ModelsSchema),
|
|
323
|
+
context: Type.Optional(Type.Array(ContextLinkSchema)),
|
|
324
|
+
sources: Type.Optional(Type.Array(GlobalSourceSchema)),
|
|
325
|
+
targets: Type.Optional(Type.Array(GlobalTargetSchema)),
|
|
326
|
+
},
|
|
327
|
+
// OPEN: the orchestrator-owned global fields (providers/workspace/brand) pass
|
|
328
|
+
// through — the evaluator doesn't type them but must not reject them.
|
|
329
|
+
{ additionalProperties: true },
|
|
330
|
+
);
|
|
331
|
+
export type Global = Static<typeof GlobalSchema>;
|
|
332
|
+
|
|
333
|
+
// ── `lifecycle.evaluator` — the evaluator's OWN section ───────────────────────
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* `lifecycle.evaluator` — the evaluator's config section. The typed fields:
|
|
337
|
+
* context[] — stage-specific supplementary context links (eval rubric).
|
|
338
|
+
* judge_runtime — HOW judges run (renamed from `substrate` in v0.2.0):
|
|
339
|
+
* agent-dispatch (DEFAULT) | in-house | code-based | user-framework.
|
|
340
|
+
* OPEN (additionalProperties:true): the evaluator owns any further knobs
|
|
341
|
+
* (subject profile path, dataset opts, …) — passthrough, validated elsewhere.
|
|
342
|
+
*/
|
|
343
|
+
export const LifecycleEvaluatorSchema = Type.Object(
|
|
344
|
+
{
|
|
345
|
+
context: Type.Optional(Type.Array(ContextLinkSchema)),
|
|
346
|
+
judge_runtime: Type.Optional(Type.String({ minLength: 1 })),
|
|
347
|
+
},
|
|
348
|
+
{ additionalProperties: true },
|
|
349
|
+
);
|
|
350
|
+
export type LifecycleEvaluator = Static<typeof LifecycleEvaluatorSchema>;
|
|
351
|
+
|
|
352
|
+
// ── Validation ────────────────────────────────────────────────────────────────
|
|
353
|
+
|
|
354
|
+
export interface ValidationResult {
|
|
355
|
+
ok: boolean;
|
|
356
|
+
/** Human-readable error strings (path: message), empty when ok. */
|
|
357
|
+
errors: string[];
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/** Validate a value against the evaluator's `global` block. Pure; never throws. */
|
|
361
|
+
export function validateGlobal(obj: unknown): ValidationResult {
|
|
362
|
+
const errors: string[] = [];
|
|
363
|
+
if (!Value.Check(GlobalSchema, obj)) {
|
|
364
|
+
for (const e of Value.Errors(GlobalSchema, obj)) {
|
|
365
|
+
errors.push(`${e.path === "" ? "/" : e.path}: ${e.message}`);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return { ok: errors.length === 0, errors };
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/** Validate a value against `lifecycle.evaluator`. Pure; never throws. */
|
|
372
|
+
export function validateLifecycleEvaluator(obj: unknown): ValidationResult {
|
|
373
|
+
const errors: string[] = [];
|
|
374
|
+
if (!Value.Check(LifecycleEvaluatorSchema, obj)) {
|
|
375
|
+
for (const e of Value.Errors(LifecycleEvaluatorSchema, obj)) {
|
|
376
|
+
errors.push(`${e.path === "" ? "/" : e.path}: ${e.message}`);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return { ok: errors.length === 0, errors };
|
|
380
|
+
}
|
package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/agentspec-evals.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/contracts/agentspec-evals.ts — the MINIMAL agentspec.evals slice the
|
|
3
|
+
* EVAL stage consumes (standalone — NEVER imports the agentspec skill's schema).
|
|
4
|
+
* ---------------------------------------------------------------------------
|
|
5
|
+
* The ADL `*build` stage emits an agentspec whose `definition.evals` block carries
|
|
6
|
+
* the SEED material the evaluator materializes into a real dataset (F8) + criteria:
|
|
7
|
+
*
|
|
8
|
+
* - dataset_categories[] — `{ id, description, edge_cases[] }` — the golden
|
|
9
|
+
* eval-suite slices + the explicit edge_cases each must exercise (the dataset
|
|
10
|
+
* DEFINITION the spec hands forward; "seed, don't duplicate").
|
|
11
|
+
* - scenarios[] — `{ id, description, expected_behavior, category?,
|
|
12
|
+
* edge_case? }` — representative situations + the correct behavior (extra seed
|
|
13
|
+
* material, optionally tagged into a category).
|
|
14
|
+
* - success_criteria[] — `{ id, criterion, type, goal }` — binary-actionable
|
|
15
|
+
* pass/fail criteria (type ∈ llm-judge | code-check).
|
|
16
|
+
*
|
|
17
|
+
* We DECLARE only the fields we read, with `additionalProperties: true` on the
|
|
18
|
+
* objects so a richer agentspec still parses (forward-compatible). The cross-skill
|
|
19
|
+
* import ban (coding-rules "Sealed-Sibling" + standalone discipline) is why this is
|
|
20
|
+
* a local re-declaration, not an import. PURE — no clock / random / network.
|
|
21
|
+
*/
|
|
22
|
+
import { type Static, Type } from "@sinclair/typebox";
|
|
23
|
+
import { Value } from "@sinclair/typebox/value";
|
|
24
|
+
|
|
25
|
+
/** A dataset CATEGORY slice + the edge-cases it must exercise. */
|
|
26
|
+
export const AgentspecDatasetCategorySchema = Type.Object(
|
|
27
|
+
{
|
|
28
|
+
id: Type.String({ minLength: 1 }),
|
|
29
|
+
description: Type.String({ minLength: 1 }),
|
|
30
|
+
edge_cases: Type.Array(Type.String()),
|
|
31
|
+
},
|
|
32
|
+
{ additionalProperties: true },
|
|
33
|
+
);
|
|
34
|
+
export type AgentspecDatasetCategory = Static<typeof AgentspecDatasetCategorySchema>;
|
|
35
|
+
|
|
36
|
+
/** A representative SCENARIO (the situation + correct behavior). */
|
|
37
|
+
export const AgentspecScenarioSchema = Type.Object(
|
|
38
|
+
{
|
|
39
|
+
id: Type.String({ minLength: 1 }),
|
|
40
|
+
description: Type.String({ minLength: 1 }),
|
|
41
|
+
expected_behavior: Type.String({ minLength: 1 }),
|
|
42
|
+
category: Type.Optional(Type.String()),
|
|
43
|
+
edge_case: Type.Optional(Type.Boolean()),
|
|
44
|
+
},
|
|
45
|
+
{ additionalProperties: true },
|
|
46
|
+
);
|
|
47
|
+
export type AgentspecScenario = Static<typeof AgentspecScenarioSchema>;
|
|
48
|
+
|
|
49
|
+
/** A binary-actionable SUCCESS CRITERION. */
|
|
50
|
+
export const AgentspecSuccessCriterionSchema = Type.Object(
|
|
51
|
+
{
|
|
52
|
+
id: Type.String({ minLength: 1 }),
|
|
53
|
+
criterion: Type.String({ minLength: 1 }),
|
|
54
|
+
type: Type.Union([Type.Literal("llm-judge"), Type.Literal("code-check")]),
|
|
55
|
+
goal: Type.String({ minLength: 1 }),
|
|
56
|
+
},
|
|
57
|
+
{ additionalProperties: true },
|
|
58
|
+
);
|
|
59
|
+
export type AgentspecSuccessCriterion = Static<typeof AgentspecSuccessCriterionSchema>;
|
|
60
|
+
|
|
61
|
+
/** The `definition.evals` slice. Each array may be empty structurally. */
|
|
62
|
+
export const AgentspecEvalsSchema = Type.Object(
|
|
63
|
+
{
|
|
64
|
+
success_criteria: Type.Array(AgentspecSuccessCriterionSchema),
|
|
65
|
+
scenarios: Type.Array(AgentspecScenarioSchema),
|
|
66
|
+
dataset_categories: Type.Array(AgentspecDatasetCategorySchema),
|
|
67
|
+
},
|
|
68
|
+
{ additionalProperties: true },
|
|
69
|
+
);
|
|
70
|
+
export type AgentspecEvals = Static<typeof AgentspecEvalsSchema>;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Parse + narrow the agentspec.evals slice (guarded). THROWS on schema violation —
|
|
74
|
+
* a malformed seed must never silently reach materialization. PURE.
|
|
75
|
+
*/
|
|
76
|
+
export function parseAgentspecEvals(value: unknown): AgentspecEvals {
|
|
77
|
+
if (!Value.Check(AgentspecEvalsSchema, value)) {
|
|
78
|
+
const first = [...Value.Errors(AgentspecEvalsSchema, value)][0];
|
|
79
|
+
throw new Error(
|
|
80
|
+
`parseAgentspecEvals: schema violation at '${first?.path ?? "(root)"}': ` +
|
|
81
|
+
`${first?.message ?? "invalid agentspec evals slice"}`,
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/contracts/dataset.ts — the W2 DATASET data contract.
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* The executable (TypeBox) companion to `schemas/dataset.schema.yaml`. Declares
|
|
5
|
+
* the shapes for `*build-dataset` (EV-046, synthetic) + `*discover-dataset`
|
|
6
|
+
* (EV-047, distilled-from-traces) + the `living-suite` (EV-053) append target:
|
|
7
|
+
*
|
|
8
|
+
* - `Dimension` — one axis of variation (generate-synthetic-data Step 1).
|
|
9
|
+
* - `DatasetTuple` — one combination of dimension→value (Step 2).
|
|
10
|
+
* - `DatasetCase` — a tuple + its natural-language query + provenance.
|
|
11
|
+
* - `Dataset` — the subject's growing case set (append-only, EV-053).
|
|
12
|
+
*
|
|
13
|
+
* Strict austerity: Type A — data contract only. NO judge prompt, NO LLM
|
|
14
|
+
* reasoning, NO pass/fail decision. The LLM tuple/query GENERATION lives in
|
|
15
|
+
* `assets/agents/dataset-builder.md`; this file only declares + validates the
|
|
16
|
+
* DATA. PURE — no clock / random / network.
|
|
17
|
+
*
|
|
18
|
+
* Disjointness (W2-OWN): NEW W2 contract file — does NOT touch the shared
|
|
19
|
+
* `contracts/eval-types.ts`. Subject-agnostic (EV-002): dimensions + values are
|
|
20
|
+
* DATA carried here, never hard-coded engine constants.
|
|
21
|
+
*/
|
|
22
|
+
import { type Static, Type } from "@sinclair/typebox";
|
|
23
|
+
import { Value } from "@sinclair/typebox/value";
|
|
24
|
+
|
|
25
|
+
// ── Dimension — one axis of variation (target a failure-prone region) ────────
|
|
26
|
+
export const DimensionSchema = Type.Object(
|
|
27
|
+
{
|
|
28
|
+
name: Type.String({ minLength: 1 }),
|
|
29
|
+
description: Type.Optional(Type.String()),
|
|
30
|
+
/** the discrete values this dimension can take (≥1). */
|
|
31
|
+
values: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),
|
|
32
|
+
},
|
|
33
|
+
{ additionalProperties: false },
|
|
34
|
+
);
|
|
35
|
+
export type Dimension = Static<typeof DimensionSchema>;
|
|
36
|
+
|
|
37
|
+
// ── DatasetTuple — one combination of dimension→value ────────────────────────
|
|
38
|
+
//
|
|
39
|
+
// A flat map (dimension name → chosen value). Canonicalized for dedup by
|
|
40
|
+
// `tupleKey` (sorted dimension names) so two tuples with the same assignments
|
|
41
|
+
// in any insertion order collapse to one.
|
|
42
|
+
export const DatasetTupleSchema = Type.Record(Type.String({ minLength: 1 }), Type.String(), {
|
|
43
|
+
minProperties: 1,
|
|
44
|
+
});
|
|
45
|
+
export type DatasetTuple = Static<typeof DatasetTupleSchema>;
|
|
46
|
+
|
|
47
|
+
// ── Case provenance + source ─────────────────────────────────────────────────
|
|
48
|
+
export const CaseSource = {
|
|
49
|
+
/** a user-confirmed seed tuple (the ~10 HITL interview). */
|
|
50
|
+
Seed: "seed",
|
|
51
|
+
/** LLM-generated by the dataset-builder agent (synthetic extension). */
|
|
52
|
+
Synthetic: "synthetic",
|
|
53
|
+
/** distilled from a real past trace (`*discover-dataset`, EV-047). */
|
|
54
|
+
Derived: "derived",
|
|
55
|
+
} as const;
|
|
56
|
+
export type CaseSourceValue = (typeof CaseSource)[keyof typeof CaseSource];
|
|
57
|
+
|
|
58
|
+
// ── DatasetCase — a tuple + its NL query + provenance ────────────────────────
|
|
59
|
+
export const DatasetCaseSchema = Type.Object(
|
|
60
|
+
{
|
|
61
|
+
/** deterministic stable id (content-derived; never a clock/random). */
|
|
62
|
+
id: Type.String({ minLength: 1 }),
|
|
63
|
+
/** the dimension assignment this case realizes. */
|
|
64
|
+
tuple: DatasetTupleSchema,
|
|
65
|
+
/** the natural-language query (Step 4 — from the dataset-builder agent). */
|
|
66
|
+
query: Type.String({ minLength: 1 }),
|
|
67
|
+
source: Type.Union([
|
|
68
|
+
Type.Literal(CaseSource.Seed),
|
|
69
|
+
Type.Literal(CaseSource.Synthetic),
|
|
70
|
+
Type.Literal(CaseSource.Derived),
|
|
71
|
+
]),
|
|
72
|
+
/** optional pointer back to the originating trace (for `derived` cases). */
|
|
73
|
+
originTraceId: Type.Optional(Type.String()),
|
|
74
|
+
/**
|
|
75
|
+
* DETERMINISTIC provenance — which EV-052 regression selector nominated this
|
|
76
|
+
* case ("the data link"). One of: failure-driven (a confirmed ✗ catastrophe) ·
|
|
77
|
+
* outlier (an edge metric) · uncertainty (a brittle boundary call) · stratified
|
|
78
|
+
* (a known-✓ anchor). Code-derived, byte-identical on re-derive. Optional so
|
|
79
|
+
* non-derived (seed/synthetic) cases omit it.
|
|
80
|
+
*/
|
|
81
|
+
selectedBy: Type.Optional(Type.String()),
|
|
82
|
+
/**
|
|
83
|
+
* The HUMAN-READABLE "why is this item high-value as a held-out test" — a
|
|
84
|
+
* JUDGMENT authored by whoever SELECTS the case (the discover/judge agent),
|
|
85
|
+
* not a code derivation. Explains what failure mode / uncertainty / coverage
|
|
86
|
+
* gap makes this trace worth keeping in the suite forever. Grounded in the
|
|
87
|
+
* originating trace. Optional (populated at selection time).
|
|
88
|
+
*/
|
|
89
|
+
rationale: Type.Optional(Type.String()),
|
|
90
|
+
},
|
|
91
|
+
{ additionalProperties: false },
|
|
92
|
+
);
|
|
93
|
+
export type DatasetCase = Static<typeof DatasetCaseSchema>;
|
|
94
|
+
|
|
95
|
+
// ── Dataset — the subject's growing case set (append-only, EV-053) ───────────
|
|
96
|
+
export const DatasetSchema = Type.Object(
|
|
97
|
+
{
|
|
98
|
+
/** subject display name (from the subject profile — subject-agnostic). */
|
|
99
|
+
subject: Type.String({ minLength: 1 }),
|
|
100
|
+
/** the dimensions this dataset varies over. */
|
|
101
|
+
dimensions: Type.Array(DimensionSchema),
|
|
102
|
+
/** the cases (append-only; monotonic-growth enforced by living-suite). */
|
|
103
|
+
cases: Type.Array(DatasetCaseSchema),
|
|
104
|
+
/** monotonically-increasing version (bumped on every append). */
|
|
105
|
+
version: Type.Integer({ minimum: 0 }),
|
|
106
|
+
},
|
|
107
|
+
{ additionalProperties: false },
|
|
108
|
+
);
|
|
109
|
+
export type Dataset = Static<typeof DatasetSchema>;
|
|
110
|
+
|
|
111
|
+
/** Parse a dataset file (raw JSON). THROWS on schema violation. PURE. */
|
|
112
|
+
export function parseDataset(raw: string): Dataset {
|
|
113
|
+
let parsed: unknown;
|
|
114
|
+
try {
|
|
115
|
+
parsed = JSON.parse(raw);
|
|
116
|
+
} catch {
|
|
117
|
+
throw new Error(`parseDataset: not valid JSON: ${raw.slice(0, 120)}`);
|
|
118
|
+
}
|
|
119
|
+
if (!Value.Check(DatasetSchema, parsed)) {
|
|
120
|
+
const first = [...Value.Errors(DatasetSchema, parsed)][0];
|
|
121
|
+
throw new Error(
|
|
122
|
+
`parseDataset: schema violation at '${first?.path ?? "?"}': ` +
|
|
123
|
+
`${first?.message ?? "invalid Dataset"}`,
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
return parsed;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/** Assert a DatasetCase conforms (used before append). THROWS on violation. */
|
|
130
|
+
export function assertDatasetCase(c: unknown): asserts c is DatasetCase {
|
|
131
|
+
if (!Value.Check(DatasetCaseSchema, c)) {
|
|
132
|
+
const first = [...Value.Errors(DatasetCaseSchema, c)][0];
|
|
133
|
+
throw new Error(
|
|
134
|
+
`assertDatasetCase: schema violation at '${first?.path ?? "?"}': ` +
|
|
135
|
+
`${first?.message ?? "invalid DatasetCase"}`,
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Canonical dedup key for a tuple — dimension names sorted, so assignment order
|
|
142
|
+
* never matters. PURE + deterministic.
|
|
143
|
+
*/
|
|
144
|
+
export function tupleKey(tuple: DatasetTuple): string {
|
|
145
|
+
return Object.keys(tuple)
|
|
146
|
+
.sort()
|
|
147
|
+
.map((k) => `${k}=${tuple[k]}`)
|
|
148
|
+
.join("");
|
|
149
|
+
}
|