@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,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/cli/audit-run.ts — Mode A entrypoint.
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* The harness spine: load the named subject profile + the run-bundle, run the
|
|
5
|
+
* deterministic pass, assemble the two-track scorecard, render the 4-tab report.
|
|
6
|
+
*
|
|
7
|
+
* audit-run.ts <runId> --subject <name> [--bundle-dir <dir>]
|
|
8
|
+
* [--subjects-root <dir>] [--out-dir <dir>]
|
|
9
|
+
* [--generated-at <iso>]
|
|
10
|
+
*
|
|
11
|
+
* The pinned-judge rows (trace-cross-ref / trajectory-diff) and the data-leak /
|
|
12
|
+
* variance tabs are JUDGE-EXECUTION SEAMS: this deterministic spine runs fully
|
|
13
|
+
* offline and emits the scorecard + report; the judge-filled tabs are composed
|
|
14
|
+
* by the workflow harness (workflows/audit.workflow.js) which dispatches the
|
|
15
|
+
* pinned judge. This CLI never silently fabricates judge verdicts.
|
|
16
|
+
*
|
|
17
|
+
* Deterministic spine: generatedAt is injected (default: a fixed sentinel so a
|
|
18
|
+
* bare run is reproducible; pass --generated-at for a real stamp).
|
|
19
|
+
*/
|
|
20
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
21
|
+
import { dirname, join } from "node:path";
|
|
22
|
+
import { fileURLToPath } from "node:url";
|
|
23
|
+
import {
|
|
24
|
+
countCriteria,
|
|
25
|
+
loadEvalMatrix,
|
|
26
|
+
resolveProfilePaths,
|
|
27
|
+
} from "../load-profile.ts";
|
|
28
|
+
import { loadBundle } from "../load-bundle.ts";
|
|
29
|
+
import { runDeterministic, reexecDeterministicCheck } from "../run-deterministic.ts";
|
|
30
|
+
import { assembleScorecard } from "../assemble-scorecard.ts";
|
|
31
|
+
import { renderReport } from "../render-report.ts";
|
|
32
|
+
import { maskedCanonicalJson } from "../mask.ts";
|
|
33
|
+
import { reportDir } from "../artifact-paths.ts";
|
|
34
|
+
|
|
35
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
36
|
+
const PKG_ROOT = join(HERE, "..", "..");
|
|
37
|
+
|
|
38
|
+
/** Fixed sentinel so a bare audit-run is byte-reproducible without a clock. */
|
|
39
|
+
export const DEFAULT_GENERATED_AT = "1970-01-01T00:00:00.000Z";
|
|
40
|
+
|
|
41
|
+
interface Args {
|
|
42
|
+
runId: string;
|
|
43
|
+
subject: string;
|
|
44
|
+
bundleDir: string;
|
|
45
|
+
subjectsRoot: string;
|
|
46
|
+
outDir?: string;
|
|
47
|
+
generatedAt: string;
|
|
48
|
+
emitMasked: boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function parseArgs(argv: string[]): Args {
|
|
52
|
+
const positional: string[] = [];
|
|
53
|
+
const flags: Record<string, string | boolean> = {};
|
|
54
|
+
for (let i = 0; i < argv.length; i++) {
|
|
55
|
+
const a = argv[i];
|
|
56
|
+
if (a.startsWith("--")) {
|
|
57
|
+
const key = a.slice(2);
|
|
58
|
+
const next = argv[i + 1];
|
|
59
|
+
if (next && !next.startsWith("--")) {
|
|
60
|
+
flags[key] = next;
|
|
61
|
+
i++;
|
|
62
|
+
} else {
|
|
63
|
+
flags[key] = true;
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
positional.push(a);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const subject = (flags.subject as string) || "";
|
|
70
|
+
const runId = positional[0] || "";
|
|
71
|
+
if (!runId || !subject) {
|
|
72
|
+
throw new Error(
|
|
73
|
+
"usage: audit-run.ts <runId> --subject <name> [--bundle-dir <dir>] [--subjects-root <dir>] [--out-dir <dir>] [--generated-at <iso>] [--emit-masked]",
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
runId,
|
|
78
|
+
subject,
|
|
79
|
+
bundleDir:
|
|
80
|
+
(flags["bundle-dir"] as string) ||
|
|
81
|
+
join(process.cwd(), ".mutagent/diagnostics", runId),
|
|
82
|
+
subjectsRoot:
|
|
83
|
+
(flags["subjects-root"] as string) || join(PKG_ROOT, "subjects"),
|
|
84
|
+
outDir: (flags["out-dir"] as string) || undefined,
|
|
85
|
+
generatedAt: (flags["generated-at"] as string) || DEFAULT_GENERATED_AT,
|
|
86
|
+
emitMasked: flags["emit-masked"] === true,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function main(argvIn?: string[]): number {
|
|
91
|
+
const argv =
|
|
92
|
+
argvIn ??
|
|
93
|
+
(typeof Bun !== "undefined" ? Bun.argv.slice(2) : process.argv.slice(2));
|
|
94
|
+
const args = parseArgs(argv);
|
|
95
|
+
|
|
96
|
+
// 1. Subject profile
|
|
97
|
+
const paths = resolveProfilePaths(args.subjectsRoot, args.subject);
|
|
98
|
+
const { matrix, errors } = loadEvalMatrix(paths.evalMatrix);
|
|
99
|
+
if (errors.length > 0) {
|
|
100
|
+
console.error(
|
|
101
|
+
`audit-run: subject '${args.subject}' eval-matrix has ${errors.length} schema error(s):`,
|
|
102
|
+
);
|
|
103
|
+
for (const e of errors) console.error(` - ${e}`);
|
|
104
|
+
return 1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// 2. Run-bundle
|
|
108
|
+
const { bundle } = loadBundle(args.bundleDir, args.runId);
|
|
109
|
+
|
|
110
|
+
// 3. Deterministic pass — WIRE the real live re-exec (Item #4): every mapped
|
|
111
|
+
// deterministic row runs an actual checkMethod-keyed check over the produced
|
|
112
|
+
// artifact instead of a presence proxy. In-cell, no sub-agents (PR-ORCH-01),
|
|
113
|
+
// judge-only (EV-051), C-PIN byte-stable.
|
|
114
|
+
const det = runDeterministic(matrix, bundle, { liveReexec: reexecDeterministicCheck });
|
|
115
|
+
|
|
116
|
+
// 4. Two-track scorecard
|
|
117
|
+
const scorecard = assembleScorecard({
|
|
118
|
+
subject: matrix.subject,
|
|
119
|
+
runId: bundle.runId,
|
|
120
|
+
generatedAt: args.generatedAt,
|
|
121
|
+
rows: det.rows,
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// 5. Render
|
|
125
|
+
const html = renderReport(scorecard);
|
|
126
|
+
|
|
127
|
+
// Output → the UNIFIED evaluator reports root (PRD R-3): reports/<runId>/master-audit.html
|
|
128
|
+
// (was under .mutagent/diagnostics/<runId>/audit/ — the wrong stage root). bundleDir stays the
|
|
129
|
+
// INPUT (the run-bundle being audited); the report is written to the evaluator namespace.
|
|
130
|
+
const outDir = args.outDir ?? reportDir(args.runId);
|
|
131
|
+
mkdirSync(outDir, { recursive: true });
|
|
132
|
+
const scPath = join(outDir, "master-audit.scorecard.json");
|
|
133
|
+
const htmlPath = join(outDir, "master-audit.html");
|
|
134
|
+
const scJson = args.emitMasked
|
|
135
|
+
? maskedCanonicalJson(scorecard)
|
|
136
|
+
: JSON.stringify(scorecard, null, 2);
|
|
137
|
+
writeFileSync(scPath, scJson + "\n");
|
|
138
|
+
writeFileSync(htmlPath, html);
|
|
139
|
+
|
|
140
|
+
const coverage = scorecard.coverage;
|
|
141
|
+
|
|
142
|
+
console.info(
|
|
143
|
+
JSON.stringify(
|
|
144
|
+
{
|
|
145
|
+
subject: matrix.subject,
|
|
146
|
+
runId: bundle.runId,
|
|
147
|
+
criteria: countCriteria(matrix),
|
|
148
|
+
deterministicRows: det.deterministicCount,
|
|
149
|
+
judgeRows: det.judgeCount,
|
|
150
|
+
gateRunPass: scorecard.gate.runPass,
|
|
151
|
+
coverage,
|
|
152
|
+
scorecard: scPath,
|
|
153
|
+
report: htmlPath,
|
|
154
|
+
bundleWarnings: bundle.warnings.length,
|
|
155
|
+
},
|
|
156
|
+
null,
|
|
157
|
+
2,
|
|
158
|
+
),
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
// Coverage honesty (EV-OUT-002): a near-vacuous PASS must never go out
|
|
162
|
+
// SILENTLY. Surface the skip-rate WARNING loudly on stderr — this is a
|
|
163
|
+
// warning ONLY; it does NOT change the exit code / gate decision.
|
|
164
|
+
if (coverage?.coverageWarning) {
|
|
165
|
+
console.warn(
|
|
166
|
+
`audit-run: COVERAGE WARNING — only ${coverage.graded}/${coverage.total} ` +
|
|
167
|
+
`criteria graded (skip-rate ${(coverage.skipRate * 100).toFixed(1)}% > ` +
|
|
168
|
+
`${(coverage.skipRateWarnThreshold * 100).toFixed(1)}% threshold). ` +
|
|
169
|
+
`gateRunPass=${scorecard.gate.runPass} is near-vacuous — most criteria were skipped.`,
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return scorecard.gate.runPass ? 0 : 1;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
declare const Bun: { argv: string[] } | undefined;
|
|
177
|
+
const isMain =
|
|
178
|
+
typeof import.meta !== "undefined" &&
|
|
179
|
+
(import.meta as unknown as { main?: boolean }).main === true;
|
|
180
|
+
if (isMain) {
|
|
181
|
+
process.exit(main());
|
|
182
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/cli/doctor.ts
|
|
3
|
+
* Runtime probe + environment validator + JSON health report.
|
|
4
|
+
* Type A — Pure Script (deterministic environment inspection; READ-ONLY).
|
|
5
|
+
*
|
|
6
|
+
* Detects the JS runtime (bun | pnpm-tsx | npx-tsx | node), checks required
|
|
7
|
+
* environment variables (name-level presence only — values are NEVER read or
|
|
8
|
+
* surfaced), reports SKILL.md version, lock-file presence, and git availability.
|
|
9
|
+
* Exits 0 with a structured JSON report — it mutates NOTHING (mirrors the
|
|
10
|
+
* diagnostics doctor; the evaluator is a reviewer, never an executor).
|
|
11
|
+
*
|
|
12
|
+
* Usage: scripts/cli/run.sh scripts/cli/doctor.ts
|
|
13
|
+
*
|
|
14
|
+
* Output shape:
|
|
15
|
+
* { runtime, env: { present[], missing[] }, version, lockFile, gitAvailable, errors[] }
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { existsSync, readFileSync, realpathSync } from "node:fs";
|
|
19
|
+
import { execSync } from "node:child_process";
|
|
20
|
+
import { join, resolve } from "node:path";
|
|
21
|
+
import { resolveCredential, readFileOrNull } from "../resolve-credential.ts";
|
|
22
|
+
|
|
23
|
+
// ── Types ─────────────────────────────────────────────────────────────────────
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* JS runtime executing this script. Corresponds to the runtime selector in
|
|
27
|
+
* scripts/cli/run.sh: bun → `bun run`, pnpm-tsx → `pnpm exec tsx`,
|
|
28
|
+
* npx-tsx → `npx tsx`, node → bare node.
|
|
29
|
+
*/
|
|
30
|
+
export type DoctorRuntime = "bun" | "pnpm-tsx" | "npx-tsx" | "node";
|
|
31
|
+
|
|
32
|
+
export interface DoctorEnvReport {
|
|
33
|
+
/** Env var names that are SET (non-empty). Values are never surfaced. */
|
|
34
|
+
present: string[];
|
|
35
|
+
/** Env var names that are ABSENT or empty. */
|
|
36
|
+
missing: string[];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface DoctorReport {
|
|
40
|
+
/** JS runtime executing this skill's scripts. */
|
|
41
|
+
runtime: DoctorRuntime;
|
|
42
|
+
/** Presence/absence of required env vars (name-level only). */
|
|
43
|
+
env: DoctorEnvReport;
|
|
44
|
+
/** Skill version string from SKILL.md frontmatter, or null if unreadable. */
|
|
45
|
+
version: string | null;
|
|
46
|
+
/** Lock-file detected in the skill root, or null. */
|
|
47
|
+
lockFile: string | null;
|
|
48
|
+
/** Whether `git` is available in PATH (branch-hygiene operations need it). */
|
|
49
|
+
gitAvailable: boolean;
|
|
50
|
+
/** Non-fatal warnings or missing-env notices. Exit code is still 0. */
|
|
51
|
+
errors: string[];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// ── Required env vars ──────────────────────────────────────────────────────────
|
|
55
|
+
//
|
|
56
|
+
// The evaluator's DEFAULT transport is host-runtime agent-dispatch (no provider
|
|
57
|
+
// SDK call), so none of these are hard requirements — they are surfaced as
|
|
58
|
+
// non-fatal notices. LANGFUSE_* enable a live trace SOURCE; GOOGLE_API_KEY is
|
|
59
|
+
// only needed on the OPTIONAL in-house AI-SDK judge substrate.
|
|
60
|
+
const REQUIRED_ENV_VARS: string[] = [
|
|
61
|
+
"LANGFUSE_PUBLIC_KEY",
|
|
62
|
+
"LANGFUSE_SECRET_KEY",
|
|
63
|
+
"LANGFUSE_BASEURL",
|
|
64
|
+
"GOOGLE_API_KEY",
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
// ── Runtime detection ─────────────────────────────────────────────────────────
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Detect the JS runtime executing this script.
|
|
71
|
+
* Order: Bun (process.versions.bun) → pnpm (npm_config_user_agent) →
|
|
72
|
+
* npx/npm (npm_execpath) → bare node.
|
|
73
|
+
*
|
|
74
|
+
* NOTE: this detects the SCRIPT RUNNER, not the coding-agent runtime. For the
|
|
75
|
+
* coding-agent runtime (claude-code, codex, cursor…) see cli/init.ts.
|
|
76
|
+
*/
|
|
77
|
+
export function detectJsRuntime(): DoctorRuntime {
|
|
78
|
+
const versions = process.versions as Record<string, string | undefined>;
|
|
79
|
+
if (versions.bun) return "bun";
|
|
80
|
+
|
|
81
|
+
const userAgent = process.env.npm_config_user_agent ?? "";
|
|
82
|
+
if (userAgent.startsWith("pnpm")) return "pnpm-tsx";
|
|
83
|
+
|
|
84
|
+
if (process.env.npm_execpath) return "npx-tsx";
|
|
85
|
+
|
|
86
|
+
return "node";
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// ── Env var check ─────────────────────────────────────────────────────────────
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Check which required env vars are present vs missing.
|
|
93
|
+
* Values are never read or returned — only name-level presence/absence.
|
|
94
|
+
*/
|
|
95
|
+
export function checkEnvVars(
|
|
96
|
+
required: string[] = REQUIRED_ENV_VARS,
|
|
97
|
+
projectRoot: string = process.cwd(),
|
|
98
|
+
): DoctorEnvReport {
|
|
99
|
+
const present: string[] = [];
|
|
100
|
+
const missing: string[] = [];
|
|
101
|
+
// Presence = resolvable via the 3-tier resolver (process.env → .env →
|
|
102
|
+
// .mutagentrc); a creds-store-only secret counts as PRESENT. Value read into
|
|
103
|
+
// memory only for the presence decision — NEVER surfaced (secret-safety).
|
|
104
|
+
for (const name of required) {
|
|
105
|
+
const res = resolveCredential(name, projectRoot, {
|
|
106
|
+
env: process.env,
|
|
107
|
+
readFile: readFileOrNull,
|
|
108
|
+
});
|
|
109
|
+
if (res.found) present.push(name);
|
|
110
|
+
else missing.push(name);
|
|
111
|
+
}
|
|
112
|
+
return { present, missing };
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// ── SKILL.md version ──────────────────────────────────────────────────────────
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Read the skill version from SKILL.md frontmatter (the `version:` key, which is
|
|
119
|
+
* nested under `metadata:` in the evaluator's frontmatter). Returns null if
|
|
120
|
+
* SKILL.md is absent or the version field is missing.
|
|
121
|
+
*
|
|
122
|
+
* SKILL.md lives at <skill-root>/SKILL.md; this script is at
|
|
123
|
+
* <skill-root>/scripts/cli/doctor.ts → two directories up.
|
|
124
|
+
*/
|
|
125
|
+
export function readSkillVersion(scriptDir: string): string | null {
|
|
126
|
+
const skillMd = resolve(scriptDir, "../..", "SKILL.md");
|
|
127
|
+
if (!existsSync(skillMd)) return null;
|
|
128
|
+
try {
|
|
129
|
+
const content = readFileSync(skillMd, "utf8");
|
|
130
|
+
// Match `version: "0.1.0"` or ` version: "0.1.0"` (indented in metadata: block)
|
|
131
|
+
const match = content.match(/^\s*version:\s*["']?([^"'\n\r]+?)["']?\s*$/m);
|
|
132
|
+
return match ? match[1].trim() : null;
|
|
133
|
+
} catch {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// ── Lock file detection ───────────────────────────────────────────────────────
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Detect the first lock file present in the given directory.
|
|
142
|
+
* Checks: bun.lockb, bun.lock, pnpm-lock.yaml, package-lock.json, yarn.lock.
|
|
143
|
+
*/
|
|
144
|
+
export function detectLockFile(dir: string): string | null {
|
|
145
|
+
const candidates = ["bun.lockb", "bun.lock", "pnpm-lock.yaml", "package-lock.json", "yarn.lock"];
|
|
146
|
+
for (const name of candidates) {
|
|
147
|
+
if (existsSync(join(dir, name))) return name;
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// ── Git availability ──────────────────────────────────────────────────────────
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Check whether `git` is available in PATH. Uses execSync with stdio suppressed —
|
|
156
|
+
* no shell expansion of user input.
|
|
157
|
+
*/
|
|
158
|
+
export function checkGitAvailable(): boolean {
|
|
159
|
+
try {
|
|
160
|
+
execSync("git --version", { stdio: "ignore" });
|
|
161
|
+
return true;
|
|
162
|
+
} catch {
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// ── Main doctor function ──────────────────────────────────────────────────────
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Run the full doctor probe and return a structured report. Never throws —
|
|
171
|
+
* errors are collected in report.errors[]. READ-ONLY: mutates nothing on disk.
|
|
172
|
+
*/
|
|
173
|
+
export function runDoctor(): DoctorReport {
|
|
174
|
+
const errors: string[] = [];
|
|
175
|
+
|
|
176
|
+
// Canonical script dir: realpath-resolve through any symlink chain (the skill
|
|
177
|
+
// is often dev-symlinked into a worktree; mirrors init.ts cwd-leak safety).
|
|
178
|
+
const scriptDir = realpathSync(
|
|
179
|
+
import.meta.dirname ?? import.meta.url.replace(/^file:\/\//, "").replace(/\/[^/]+$/, "")
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
const runtime = detectJsRuntime();
|
|
183
|
+
const env = checkEnvVars();
|
|
184
|
+
const version = readSkillVersion(scriptDir);
|
|
185
|
+
const lockFile = detectLockFile(resolve(scriptDir, "../.."));
|
|
186
|
+
const gitAvailable = checkGitAvailable();
|
|
187
|
+
|
|
188
|
+
if (env.missing.length > 0) {
|
|
189
|
+
errors.push(
|
|
190
|
+
`Missing env vars: ${env.missing.join(", ")} ` +
|
|
191
|
+
`(non-fatal — the DEFAULT agent-dispatch transport needs none; LANGFUSE_* enable a live ` +
|
|
192
|
+
`trace source, GOOGLE_API_KEY only the OPTIONAL in-house judge substrate)`
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
if (!gitAvailable) {
|
|
196
|
+
errors.push("git not found in PATH — branch-hygiene / route-to-diagnostics operations will fail");
|
|
197
|
+
}
|
|
198
|
+
if (version === null) {
|
|
199
|
+
errors.push("Could not read SKILL.md version");
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
return { runtime, env, version, lockFile, gitAvailable, errors };
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// ── CLI entrypoint ────────────────────────────────────────────────────────────
|
|
206
|
+
|
|
207
|
+
if (import.meta.main) {
|
|
208
|
+
const report = runDoctor();
|
|
209
|
+
process.stdout.write(JSON.stringify(report, null, 2) + "\n");
|
|
210
|
+
process.exit(0);
|
|
211
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/cli/dogfood.ts — EV-041..052 AGGREGATE runner (the #7 RUN entrypoint).
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* Wires the W1 engine cores against a real trace export. This is the I/O shell —
|
|
5
|
+
* it is reached ONLY from the CLI, never from the `bun test` gate (which
|
|
6
|
+
* exercises the pure cores + a stub judge). The composition it calls
|
|
7
|
+
* (run-pipeline.ts) is fully unit-tested.
|
|
8
|
+
*
|
|
9
|
+
* # DEFAULT — agent-dispatch: AGGREGATE the verdict files dispatched subagents
|
|
10
|
+
* # wrote on the host runtime (PREP + dispatch happen first — see the protocol).
|
|
11
|
+
* dogfood.ts --traces <handover.jsonl|.gz> --criteria <criteria.json>
|
|
12
|
+
* --substrate agent-dispatch --verdict-dir <dir> --model <pinned> [--out <report.json>]
|
|
13
|
+
*
|
|
14
|
+
* # OPTIONAL — in-house: run the LIVE google-genai judge (CI/code-based export).
|
|
15
|
+
* dogfood.ts --traces <f> --criteria <criteria.json> --substrate in-house --model <gemini-*>
|
|
16
|
+
*
|
|
17
|
+
* The DEFAULT substrate (agent-dispatch) calls NO provider — it reads the
|
|
18
|
+
* verdict files. The in-house substrate THROWS on an unsupported model / missing
|
|
19
|
+
* GOOGLE_API_KEY (blocked, never a silent swap — model intent sacred). The
|
|
20
|
+
* criteria come from `*discover-evals` — this CLI does NOT fabricate them; it reads
|
|
21
|
+
* them from --criteria so the run is grounded, never invented.
|
|
22
|
+
*/
|
|
23
|
+
import { execSync } from "node:child_process";
|
|
24
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
25
|
+
import { parseUnitfJsonl } from "../read-unitf-traces.ts";
|
|
26
|
+
import { runEvalPipeline } from "../run-pipeline.ts";
|
|
27
|
+
import { resolveJudgeModel } from "../judge-provider.ts";
|
|
28
|
+
import { resolveJudgeRuntime, judgeForRuntime, describeSubstrate } from "../substrate.ts";
|
|
29
|
+
import type { JudgeInvoke } from "../determine-outcome.ts";
|
|
30
|
+
import { Substrate, type DiscoveredCriterion } from "../contracts/eval-types.ts";
|
|
31
|
+
import { SubjectKind } from "../route-failures.ts";
|
|
32
|
+
|
|
33
|
+
function flag(argv: string[], name: string): string | undefined {
|
|
34
|
+
const i = argv.indexOf(`--${name}`);
|
|
35
|
+
return i >= 0 && i + 1 < argv.length ? argv[i + 1] : undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Load the handed-over UniTF trace file as text (`mutagent-cli trace fetch
|
|
40
|
+
* --export` writes one `UnifiedTrace` record per line). `.gz` → gunzip | jq -c;
|
|
41
|
+
* else read text. `parseUnitfJsonl` projects each UniTF record → EvalTrace. The
|
|
42
|
+
* skill NEVER fetches — Helix runs `mutagent-cli trace fetch` before dispatch.
|
|
43
|
+
*/
|
|
44
|
+
function loadNdjson(file: string, limit?: number): string {
|
|
45
|
+
const headN = limit !== undefined ? ` | head -n ${limit}` : "";
|
|
46
|
+
if (file.endsWith(".gz")) {
|
|
47
|
+
// jq -c normalizes the multi-line JSON stream to one compact record per line.
|
|
48
|
+
return execSync(`gunzip -c ${JSON.stringify(file)} | jq -c '.'${headN}`, {
|
|
49
|
+
maxBuffer: 1024 * 1024 * 512,
|
|
50
|
+
encoding: "utf8",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
const text = readFileSync(file, "utf8");
|
|
54
|
+
if (limit === undefined) return text;
|
|
55
|
+
return text.split("\n").slice(0, limit).join("\n");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function main(): Promise<void> {
|
|
59
|
+
const argv = process.argv.slice(2);
|
|
60
|
+
const tracesFile = flag(argv, "traces");
|
|
61
|
+
const criteriaFile = flag(argv, "criteria");
|
|
62
|
+
const model = flag(argv, "model");
|
|
63
|
+
const limit = flag(argv, "limit");
|
|
64
|
+
const out = flag(argv, "out");
|
|
65
|
+
|
|
66
|
+
if (tracesFile === undefined || criteriaFile === undefined) {
|
|
67
|
+
throw new Error("dogfood: --traces <file> and --criteria <criteria.json> are required");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// EV-050 judge-runtime (DEFAULT = agent-dispatch). Model intent sacred: resolve
|
|
71
|
+
// the pinned model exactly (no swap). --model is authoritative for the dogfood.
|
|
72
|
+
// `--judge-runtime` is the v0.2.0 flag; `--substrate` stays a back-compat alias.
|
|
73
|
+
const substrate = resolveJudgeRuntime(flag(argv, "judge-runtime") ?? flag(argv, "substrate"));
|
|
74
|
+
const decision = resolveJudgeModel({ ...(model !== undefined ? { model } : {}) });
|
|
75
|
+
|
|
76
|
+
let judge: JudgeInvoke;
|
|
77
|
+
if (substrate === Substrate.AgentDispatch) {
|
|
78
|
+
const verdictDir = flag(argv, "verdict-dir");
|
|
79
|
+
if (verdictDir === undefined) {
|
|
80
|
+
throw new Error(
|
|
81
|
+
"dogfood --judge-runtime agent-dispatch: --verdict-dir <dir> is required (the dir the " +
|
|
82
|
+
"dispatched eval-judge/error-analyst subagents wrote their verdict files into). " +
|
|
83
|
+
"Run PREP + dispatch first (references/workflows/orchestrator-protocol.md).",
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
judge = judgeForRuntime({ substrate, verdictDir }); // reads verdict files — NO provider
|
|
87
|
+
} else {
|
|
88
|
+
judge = judgeForRuntime({ substrate, model: decision.model }); // in-house: THROWS if creds absent
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const ndjson = loadNdjson(tracesFile, limit !== undefined ? Number.parseInt(limit, 10) : undefined);
|
|
92
|
+
const { traces, skipped } = parseUnitfJsonl(ndjson);
|
|
93
|
+
const criteria = JSON.parse(readFileSync(criteriaFile, "utf8")) as DiscoveredCriterion[];
|
|
94
|
+
|
|
95
|
+
const subjectName = traces[0]?.name ?? "unknown-subject";
|
|
96
|
+
const result = await runEvalPipeline(traces, judge, {
|
|
97
|
+
criteria,
|
|
98
|
+
pin: { modelId: decision.model, temperature: 0 },
|
|
99
|
+
subject: { kind: SubjectKind.Agent, name: subjectName, path: `subjects/${subjectName}` },
|
|
100
|
+
producedBy: "mutagent-evaluator/dogfood",
|
|
101
|
+
// a real run stamp is acceptable here (CLI side); the cores stay clock-free.
|
|
102
|
+
producedAt: new Date().toISOString(),
|
|
103
|
+
artifacts: [{ id: "traces", kind: "trace", path: tracesFile }],
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
const substrateDesc = describeSubstrate(substrate);
|
|
107
|
+
const summary = {
|
|
108
|
+
substrate,
|
|
109
|
+
judgeTransport: substrateDesc.transport,
|
|
110
|
+
callsProvider: substrateDesc.callsProvider,
|
|
111
|
+
model: decision.model,
|
|
112
|
+
modelSource: decision.source,
|
|
113
|
+
tracesLoaded: traces.length,
|
|
114
|
+
tracesSkipped: skipped,
|
|
115
|
+
profile: result.profile,
|
|
116
|
+
gate: result.scorecard.gate,
|
|
117
|
+
verdicts: result.verdicts,
|
|
118
|
+
routedFailures: result.handoff.acceptance.criteria,
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const json = JSON.stringify(summary, null, 2);
|
|
122
|
+
if (out !== undefined) {
|
|
123
|
+
writeFileSync(out, json);
|
|
124
|
+
process.stdout.write(`dogfood: wrote ${out} (gate.passed=${result.scorecard.gate.passed})\n`);
|
|
125
|
+
} else {
|
|
126
|
+
process.stdout.write(json + "\n");
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
main().catch((err: unknown) => {
|
|
131
|
+
process.stderr.write(`dogfood FAILED: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
});
|