@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
package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/methodology-review.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/cli/methodology-review.ts — Mode C entrypoint.
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* Mode C emits process self-feedback: is the methodology the RIGHT/efficient
|
|
5
|
+
* choice + how to rearrange (advisory, NOT pass/fail). §1.5 family / MR-1..9.
|
|
6
|
+
*
|
|
7
|
+
* MATURITY — functional seam, not fully wired:
|
|
8
|
+
* The deterministic spine here is REAL: it loads the subject's behavior-tree +
|
|
9
|
+
* methodology-review rubric, loads the run-bundle, and assembles the JUDGE
|
|
10
|
+
* PROMPT CONTEXT (the behavior-tree nodes + the run trajectory + the MR rubric)
|
|
11
|
+
* that the methodology-critic lens consumes. The actual fitness REASONING
|
|
12
|
+
* (decision-tree fitness · data-flow efficiency · ranked self-feedback) is a
|
|
13
|
+
* PINNED-JUDGE SEAM — it requires the pinned model running the
|
|
14
|
+
* lenses/methodology-critic-lens.md prompt. This CLI prepares + emits the
|
|
15
|
+
* judge context (so the judge has a complete, deterministic input) and marks
|
|
16
|
+
* the seam; it never fabricates fitness verdicts.
|
|
17
|
+
*
|
|
18
|
+
* methodology-review.ts <runId> --subject <name> [--bundle-dir <dir>]
|
|
19
|
+
* [--subjects-root <dir>]
|
|
20
|
+
*/
|
|
21
|
+
import { writeFileSync } from "node:fs";
|
|
22
|
+
import { dirname, join } from "node:path";
|
|
23
|
+
import { fileURLToPath } from "node:url";
|
|
24
|
+
import { resolveProfilePaths, loadYamlFile } from "../load-profile.ts";
|
|
25
|
+
import { loadBundle } from "../load-bundle.ts";
|
|
26
|
+
|
|
27
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
28
|
+
const PKG_ROOT = join(HERE, "..", "..");
|
|
29
|
+
|
|
30
|
+
interface Args {
|
|
31
|
+
runId: string;
|
|
32
|
+
subject: string;
|
|
33
|
+
bundleDir: string;
|
|
34
|
+
subjectsRoot: string;
|
|
35
|
+
out?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function parseArgs(argv: string[]): Args {
|
|
39
|
+
const positional: string[] = [];
|
|
40
|
+
const flags: Record<string, string> = {};
|
|
41
|
+
for (let i = 0; i < argv.length; i++) {
|
|
42
|
+
const a = argv[i];
|
|
43
|
+
if (a.startsWith("--")) {
|
|
44
|
+
flags[a.slice(2)] = argv[i + 1] ?? "";
|
|
45
|
+
i++;
|
|
46
|
+
} else positional.push(a);
|
|
47
|
+
}
|
|
48
|
+
if (!positional[0] || !flags.subject) {
|
|
49
|
+
throw new Error(
|
|
50
|
+
"usage: methodology-review.ts <runId> --subject <name> [--bundle-dir <dir>] [--subjects-root <dir>] [--out <file>]",
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
runId: positional[0],
|
|
55
|
+
subject: flags.subject,
|
|
56
|
+
bundleDir:
|
|
57
|
+
flags["bundle-dir"] ||
|
|
58
|
+
join(process.cwd(), ".mutagent/diagnostics", positional[0]),
|
|
59
|
+
subjectsRoot: flags["subjects-root"] || join(PKG_ROOT, "subjects"),
|
|
60
|
+
out: flags.out || undefined,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function main(argvIn?: string[]): number {
|
|
65
|
+
const argv =
|
|
66
|
+
argvIn ??
|
|
67
|
+
(typeof Bun !== "undefined" ? Bun.argv.slice(2) : process.argv.slice(2));
|
|
68
|
+
const args = parseArgs(argv);
|
|
69
|
+
|
|
70
|
+
const paths = resolveProfilePaths(args.subjectsRoot, args.subject);
|
|
71
|
+
const behaviorTree = loadYamlFile(paths.behaviorTree);
|
|
72
|
+
const mrRubric = loadYamlFile(paths.methodologyReview);
|
|
73
|
+
const { bundle } = loadBundle(args.bundleDir, args.runId);
|
|
74
|
+
|
|
75
|
+
// Assemble the COMPLETE, deterministic judge context. The judge (the pinned
|
|
76
|
+
// model running the methodology-critic lens) consumes exactly this.
|
|
77
|
+
const judgeContext = {
|
|
78
|
+
subject: args.subject,
|
|
79
|
+
runId: bundle.runId,
|
|
80
|
+
behaviorTree,
|
|
81
|
+
methodologyRubric: mrRubric,
|
|
82
|
+
runTrajectory: {
|
|
83
|
+
runMeta: bundle.data.runMeta ?? null,
|
|
84
|
+
renderInput: bundle.data.renderInput ?? null,
|
|
85
|
+
evidence: bundle.data.evidence ?? null,
|
|
86
|
+
},
|
|
87
|
+
seam: "PINNED-JUDGE: the fitness reasoning (decision-tree fitness, data-flow efficiency, ranked self-feedback) is produced by the pinned model running lenses/methodology-critic-lens.md over this context. This CLI emits the context; it does not fabricate fitness verdicts.",
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const json = JSON.stringify(judgeContext, null, 2);
|
|
91
|
+
if (args.out) writeFileSync(args.out, json + "\n");
|
|
92
|
+
|
|
93
|
+
console.info(
|
|
94
|
+
JSON.stringify(
|
|
95
|
+
{
|
|
96
|
+
subject: args.subject,
|
|
97
|
+
runId: bundle.runId,
|
|
98
|
+
behaviorTreeNodes: Array.isArray(
|
|
99
|
+
(behaviorTree as { nodes?: unknown[] })?.nodes,
|
|
100
|
+
)
|
|
101
|
+
? (behaviorTree as { nodes: unknown[] }).nodes.length
|
|
102
|
+
: 0,
|
|
103
|
+
mrItems: Array.isArray((mrRubric as { items?: unknown[] })?.items)
|
|
104
|
+
? (mrRubric as { items: unknown[] }).items.length
|
|
105
|
+
: 0,
|
|
106
|
+
judgeContextOut: args.out ?? "(stdout only)",
|
|
107
|
+
seam: judgeContext.seam,
|
|
108
|
+
},
|
|
109
|
+
null,
|
|
110
|
+
2,
|
|
111
|
+
),
|
|
112
|
+
);
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
declare const Bun: { argv: string[] } | undefined;
|
|
117
|
+
const isMain =
|
|
118
|
+
typeof import.meta !== "undefined" &&
|
|
119
|
+
(import.meta as unknown as { main?: boolean }).main === true;
|
|
120
|
+
if (isMain) {
|
|
121
|
+
process.exit(main());
|
|
122
|
+
}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/cli/prep.ts — the PREP entrypoint for the agent-dispatch engine.
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* Emits the task-spec files the parent session dispatches to eval-judge /
|
|
5
|
+
* error-analyst subagents (references/workflows/orchestrator-protocol.md). This
|
|
6
|
+
* is the I/O shell over the TESTED PREP cores (scripts/prep-tasks.ts); it calls
|
|
7
|
+
* NO LLM and NO provider — it only writes the EXACT prompts to be judged on the
|
|
8
|
+
* host runtime, keyed by content hash.
|
|
9
|
+
*
|
|
10
|
+
* prep.ts --stage determiner --traces <handover.jsonl|.gz> --task-dir <dir> --model <pinned>
|
|
11
|
+
* [--profile <vocab.json|.yaml>] # operator-supplied SubjectVocab (EV-049)
|
|
12
|
+
* [--source <name>] # SELECTION override — pick a source by name
|
|
13
|
+
* prep.ts --stage judge --traces <f> --criteria <criteria.json> \
|
|
14
|
+
* --verdict-dir <discover-verdicts> --task-dir <dir> --model <pinned>
|
|
15
|
+
*
|
|
16
|
+
* SOURCE SELECTION (--source): when `global.sources[]` has >1 entry and none is
|
|
17
|
+
* `default:true`, the run-start config surfaces a `needs-selection` state; the
|
|
18
|
+
* PARENT session then ASKS the operator to pick one (AskUserQuestion / chat
|
|
19
|
+
* multi-choice) and re-invokes with `--source <name>`. When >1 entry has exactly
|
|
20
|
+
* one `default:true`, the config surfaces `confirm-default` (F2) — the PARENT
|
|
21
|
+
* CONFIRMS the preselected default (a yes/no ask; distinct from the open pick)
|
|
22
|
+
* before it is used. A single source or an explicit `--source` skips the prompt.
|
|
23
|
+
*
|
|
24
|
+
* MODEL INTENT SACRED: --model is the pinned host model (temperature pinned 0,
|
|
25
|
+
* C-PIN); it is carried verbatim on every task spec for the subagent to honor —
|
|
26
|
+
* never swapped. The `judge` stage REQUIRES the determiner verdict files
|
|
27
|
+
* (--verdict-dir) already collected (Stage A done) — see the protocol.
|
|
28
|
+
*/
|
|
29
|
+
import { execSync } from "node:child_process";
|
|
30
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
31
|
+
import { join, resolve } from "node:path";
|
|
32
|
+
import { parseUnitfJsonl } from "../read-unitf-traces.ts";
|
|
33
|
+
import { prepDeterminerTasks, prepJudgeTasks } from "../prep-tasks.ts";
|
|
34
|
+
import { selectColdStartSuite, type ColdStartMeta } from "../cold-start-project.ts";
|
|
35
|
+
import { profileSubject } from "../profile-subject.ts";
|
|
36
|
+
import { loadProfileVocab } from "../load-profile-vocab.ts";
|
|
37
|
+
import { buildMatrixPacket, writeMatrixPacket, packetFileName } from "../matrix-judge.ts";
|
|
38
|
+
import { configPathFor, loadEvaluatorConfig, type SourceBinding } from "../config/load.ts";
|
|
39
|
+
import { readMemoryDir, renderRecallContext } from "../memory/read.ts";
|
|
40
|
+
import type { ContextLink } from "../config/schema.ts";
|
|
41
|
+
import type { JudgeTaskSpec, PinnedEnvelope } from "../agent-dispatch.ts";
|
|
42
|
+
import type { PipelineOptions } from "../run-pipeline.ts";
|
|
43
|
+
import type { DiscoveredCriterion } from "../contracts/eval-types.ts";
|
|
44
|
+
import type { MatrixCriterion } from "../contracts/eval-matrix.ts";
|
|
45
|
+
import { SubjectKind } from "../route-failures.ts";
|
|
46
|
+
|
|
47
|
+
function flag(argv: string[], name: string): string | undefined {
|
|
48
|
+
const i = argv.indexOf(`--${name}`);
|
|
49
|
+
return i >= 0 && i + 1 < argv.length ? argv[i + 1] : undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Surface the SELECTION contract's source-binding state so the PARENT session can
|
|
54
|
+
* wire the run-start ASK. prep runs in a subagent-context I/O shell that CANNOT
|
|
55
|
+
* invoke AskUserQuestion — so it prints the binding + candidate names; the parent
|
|
56
|
+
* (which owns the ask mechanism: AskUserQuestion on Claude Code / chat multi-choice
|
|
57
|
+
* elsewhere) does the actual PROMPT. `bound` (single · `default:true` · `--source`)
|
|
58
|
+
* ⇒ silent, no prompt. `needs-selection` is NON-fatal for gating (the source EXISTS;
|
|
59
|
+
* only DISCOVER needs a pick — code/dataset runs need no source at all).
|
|
60
|
+
*/
|
|
61
|
+
function surfaceSourceBinding(binding: SourceBinding): void {
|
|
62
|
+
switch (binding.kind) {
|
|
63
|
+
case "confirm-default": {
|
|
64
|
+
// F2 — a preselected default among many: surface a CONFIRM ask (yes/no),
|
|
65
|
+
// distinct from the open needs-selection pick. NON-fatal: the default is usable
|
|
66
|
+
// as-is on accept / non-interactive / --source.
|
|
67
|
+
const names = binding.sources.map((s) => s.name).join(", ");
|
|
68
|
+
process.stdout.write(
|
|
69
|
+
`prep: source CONFIRM-DEFAULT — ${binding.sources.length} sources, default is ` +
|
|
70
|
+
`'${binding.source.name}'. PARENT: confirm the default via the platform ask ` +
|
|
71
|
+
`mechanism (AskUserQuestion / chat multi-choice; '${binding.source.name}' PRESELECTED, ` +
|
|
72
|
+
`operator may override), or accept it non-interactively (--source <name> / CI). ` +
|
|
73
|
+
`Candidates: ${names}\n`,
|
|
74
|
+
);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case "needs-selection": {
|
|
78
|
+
const names = binding.sources.map((s) => s.name).join(", ");
|
|
79
|
+
process.stdout.write(
|
|
80
|
+
`prep: source SELECTION required — ${binding.sources.length} sources, none default. ` +
|
|
81
|
+
`PARENT: ask the operator to pick one via the platform ask mechanism ` +
|
|
82
|
+
`(AskUserQuestion / chat multi-choice), then re-run with --source <name>. ` +
|
|
83
|
+
`Candidates: ${names}\n`,
|
|
84
|
+
);
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
case "multiple-defaults": {
|
|
88
|
+
const names = binding.sources.filter((s) => s.default === true).map((s) => s.name).join(", ");
|
|
89
|
+
process.stderr.write(
|
|
90
|
+
`prep: ambiguous config — >1 source marked default:true (${names}). ` +
|
|
91
|
+
`Fix the config (exactly one default) or pass --source <name>.\n`,
|
|
92
|
+
);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
case "unknown-name":
|
|
96
|
+
process.stderr.write(
|
|
97
|
+
`prep: --source "${binding.name}" matched no source in global.sources[].\n`,
|
|
98
|
+
);
|
|
99
|
+
break;
|
|
100
|
+
// `bound` (silent — nothing to ask) / `none` (no source; code/dataset runs are fine): no output.
|
|
101
|
+
case "bound":
|
|
102
|
+
case "none":
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Config → flag precedence for the pinned judge model. The `--model` FLAG WINS;
|
|
109
|
+
* the unified `.mutagent/config.yaml` (`global.models.{judge_model,default}`)
|
|
110
|
+
* fills the gap. Model-intent-sacred: no silent swap — this only supplies a
|
|
111
|
+
* DEFAULT when the operator gave no `--model`. Also reads AutoMemory + context
|
|
112
|
+
* links at run start (additive; an absent config is a no-op). `--project-root`
|
|
113
|
+
* (default cwd) locates the LOCAL `.mutagent/`. Returns the resolved model (or
|
|
114
|
+
* undefined) + a compact run-start context banner (recall + context links).
|
|
115
|
+
*/
|
|
116
|
+
function resolveRunStartConfig(argv: string[]): {
|
|
117
|
+
modelFromConfig: string | undefined;
|
|
118
|
+
startContext: string;
|
|
119
|
+
} {
|
|
120
|
+
const projectRoot = resolve(flag(argv, "project-root") ?? process.cwd());
|
|
121
|
+
// SELECTION contract: `--source <name>` is the explicit run-time source override
|
|
122
|
+
// (WINS over `default:true` / auto-bind); absent ⇒ default precedence.
|
|
123
|
+
const selectSourceName = flag(argv, "source");
|
|
124
|
+
const cfg = loadEvaluatorConfig(configPathFor(projectRoot), { selectSourceName });
|
|
125
|
+
|
|
126
|
+
let modelFromConfig: string | undefined;
|
|
127
|
+
const contextLinks: ContextLink[] = [];
|
|
128
|
+
if (cfg.status === "migration-required") {
|
|
129
|
+
// Fork B — surface the migration directive; do NOT parse the old shape.
|
|
130
|
+
process.stderr.write(`prep: ${cfg.error}\n`);
|
|
131
|
+
} else if (cfg.status === "ok") {
|
|
132
|
+
if (cfg.config.judgeModel.kind === "resolved") modelFromConfig = cfg.config.judgeModel.model;
|
|
133
|
+
// PHASE 4 — load global.context[] (every run) + lifecycle.evaluator.context[].
|
|
134
|
+
contextLinks.push(...cfg.config.globalContext, ...cfg.config.evaluatorContext);
|
|
135
|
+
// SELECTION — surface the source-binding state so the PARENT session can wire
|
|
136
|
+
// the run-start ASK (prep is a subagent-context I/O shell — it cannot invoke
|
|
137
|
+
// AskUserQuestion; it SURFACES the state + candidate names, the parent prompts).
|
|
138
|
+
surfaceSourceBinding(cfg.config.source);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// PHASE 3 — read AutoMemory at run start, filtered to {evaluate, general}.
|
|
142
|
+
const memory = readMemoryDir(join(projectRoot, ".mutagent", "memory"));
|
|
143
|
+
const parts: string[] = [];
|
|
144
|
+
const recall = renderRecallContext(memory.entries);
|
|
145
|
+
if (recall !== "") parts.push(recall);
|
|
146
|
+
if (contextLinks.length > 0) {
|
|
147
|
+
parts.push(
|
|
148
|
+
"Context links:\n" +
|
|
149
|
+
contextLinks.map((c) => `- ${c.path} — ${c.what} (why: ${c.why}; when: ${c.when})`).join("\n"),
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
return { modelFromConfig, startContext: parts.join("\n\n") };
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Load the handed-over UniTF trace file as text (`mutagent-cli trace fetch
|
|
157
|
+
* --export` writes one `UnifiedTrace` record per line). `.gz` → gunzip | jq -c;
|
|
158
|
+
* else read text. `parseUnitfJsonl` projects each UniTF record → EvalTrace. The
|
|
159
|
+
* skill NEVER fetches — Helix runs `mutagent-cli trace fetch` before dispatch.
|
|
160
|
+
*/
|
|
161
|
+
function loadNdjson(file: string, limit?: number): string {
|
|
162
|
+
const headN = limit !== undefined ? ` | head -n ${limit}` : "";
|
|
163
|
+
if (file.endsWith(".gz")) {
|
|
164
|
+
return execSync(`gunzip -c ${JSON.stringify(file)} | jq -c '.'${headN}`, {
|
|
165
|
+
maxBuffer: 1024 * 1024 * 512,
|
|
166
|
+
encoding: "utf8",
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
const text = readFileSync(file, "utf8");
|
|
170
|
+
if (limit === undefined) return text;
|
|
171
|
+
return text.split("\n").slice(0, limit).join("\n");
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Write a manifest of emitted task keys → verdict files (what the parent must
|
|
176
|
+
* dispatch + collect). When the determiner (cold discover) stage subsamples via
|
|
177
|
+
* the cold-start sampler, its `coldStart` block rides along so a thin-negative
|
|
178
|
+
* cold suite is surfaced to the parent as LOW-CONFIDENCE (the report metadata).
|
|
179
|
+
*/
|
|
180
|
+
function writeManifest(taskDir: string, specs: JudgeTaskSpec[], coldStart?: ColdStartMeta): void {
|
|
181
|
+
const manifest = {
|
|
182
|
+
count: specs.length,
|
|
183
|
+
tasks: specs.map((s) => ({ key: s.key, unit: s.unit, taskFile: `${s.key}.task.json`, verdictFile: s.verdictFile })),
|
|
184
|
+
...(coldStart !== undefined ? { coldStart } : {}),
|
|
185
|
+
};
|
|
186
|
+
writeFileSync(join(taskDir, "manifest.json"), JSON.stringify(manifest, null, 2));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
async function main(): Promise<void> {
|
|
190
|
+
const argv = process.argv.slice(2);
|
|
191
|
+
const stage = flag(argv, "stage");
|
|
192
|
+
const tracesFile = flag(argv, "traces");
|
|
193
|
+
const taskDir = flag(argv, "task-dir");
|
|
194
|
+
const limit = flag(argv, "limit");
|
|
195
|
+
|
|
196
|
+
// Config → flag precedence: --model WINS; the unified config supplies the
|
|
197
|
+
// default (global.models.judge_model/default). Also reads AutoMemory + context
|
|
198
|
+
// links at run start (additive — absent config/memory is a no-op).
|
|
199
|
+
const { modelFromConfig, startContext } = resolveRunStartConfig(argv);
|
|
200
|
+
const model = flag(argv, "model") ?? modelFromConfig;
|
|
201
|
+
|
|
202
|
+
if (tracesFile === undefined || taskDir === undefined || model === undefined) {
|
|
203
|
+
throw new Error(
|
|
204
|
+
"prep: --traces <f>, --task-dir <dir> and a pinned model are required " +
|
|
205
|
+
"(--model <pinned> OR global.models.judge_model/default in .mutagent/config.yaml)",
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
if (startContext !== "") process.stdout.write(`prep: run-start context —\n${startContext}\n`);
|
|
209
|
+
const pin: PinnedEnvelope = { model, temperature: 0 };
|
|
210
|
+
const ndjson = loadNdjson(tracesFile, limit !== undefined ? Number.parseInt(limit, 10) : undefined);
|
|
211
|
+
const { traces } = parseUnitfJsonl(ndjson);
|
|
212
|
+
|
|
213
|
+
// DEFAULT *evaluate PREP — one eval-matrix packet per trajectory (the headline cell).
|
|
214
|
+
if (stage === "matrix") {
|
|
215
|
+
const criteriaFile = flag(argv, "criteria");
|
|
216
|
+
if (criteriaFile === undefined) {
|
|
217
|
+
throw new Error("prep --stage matrix: --criteria <matrix.json> is required");
|
|
218
|
+
}
|
|
219
|
+
const matrix = JSON.parse(readFileSync(criteriaFile, "utf8")) as MatrixCriterion[];
|
|
220
|
+
const subjectName = traces[0]?.name ?? "unknown-subject";
|
|
221
|
+
const ids = traces.map((trace) => writeMatrixPacket(taskDir, buildMatrixPacket(subjectName, trace, matrix, pin)));
|
|
222
|
+
writeFileSync(
|
|
223
|
+
join(taskDir, "manifest.json"),
|
|
224
|
+
JSON.stringify({ count: ids.length, packets: ids.map((id) => ({ trajectoryId: id, packetFile: packetFileName(id) })) }, null, 2),
|
|
225
|
+
);
|
|
226
|
+
process.stdout.write(`prep: stage=matrix emitted ${ids.length} trajectory packet(s) → ${taskDir}\n`);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
let specs: JudgeTaskSpec[];
|
|
231
|
+
let coldStartMeta: ColdStartMeta | undefined;
|
|
232
|
+
if (stage === "determiner") {
|
|
233
|
+
// The determiner reads its subject vocab off the profile (EV-002 / EV-049).
|
|
234
|
+
// The profiler auto-infers a best-effort vocab; the SEMANTIC fields it can't
|
|
235
|
+
// infer (sendTool / recoveryTools / guardCounterAttr) stay empty → the engine
|
|
236
|
+
// reports those signals as UNKNOWN (honest-null). An operator may supply them
|
|
237
|
+
// via `--profile <f>` (JSON/YAML), which OVERLAYS the inferred-vocab base —
|
|
238
|
+
// e.g. `{"sendTool":"sendMessage"}` for a sample subject — with NO subject
|
|
239
|
+
// name hardcoded in the engine.
|
|
240
|
+
const inferred = profileSubject(traces).vocab;
|
|
241
|
+
const profileFile = flag(argv, "profile");
|
|
242
|
+
const vocab =
|
|
243
|
+
profileFile !== undefined ? loadProfileVocab(profileFile, inferred) : inferred;
|
|
244
|
+
// EV-5.3 COLD-START SUBSAMPLE (the SAFE call site) — the determiner IS the cold
|
|
245
|
+
// discover front-door: there is NO suite/judge yet, so we balance a ✓/✗ bootstrap
|
|
246
|
+
// from mechanical labels FIRST, then hand the SELECTED traces to the untouched
|
|
247
|
+
// `prepDeterminerTasks` (which still emits exactly one determiner task per
|
|
248
|
+
// selected trace). `--cold-size` caps the suite; absent ⇒ the incoming trace
|
|
249
|
+
// count, a PASS-THROUGH that only subsamples when an explicit cap is given (its
|
|
250
|
+
// own ✓/✗ imbalance still flags low-confidence). Cold path ONLY — the warm
|
|
251
|
+
// (suite-present) judge stage below NEVER touches the sampler.
|
|
252
|
+
const coldSizeFlag = flag(argv, "cold-size");
|
|
253
|
+
const coldSize = coldSizeFlag !== undefined ? Number.parseInt(coldSizeFlag, 10) : traces.length;
|
|
254
|
+
const cold = selectColdStartSuite(traces, { size: coldSize });
|
|
255
|
+
coldStartMeta = cold.meta;
|
|
256
|
+
specs = prepDeterminerTasks(cold.selected, { dir: taskDir, pin, vocab });
|
|
257
|
+
} else if (stage === "judge") {
|
|
258
|
+
const criteriaFile = flag(argv, "criteria");
|
|
259
|
+
const verdictDir = flag(argv, "verdict-dir");
|
|
260
|
+
if (criteriaFile === undefined || verdictDir === undefined) {
|
|
261
|
+
throw new Error("prep --stage judge: --criteria <f> and --verdict-dir <discover-verdicts> are required");
|
|
262
|
+
}
|
|
263
|
+
const criteria = JSON.parse(readFileSync(criteriaFile, "utf8")) as DiscoveredCriterion[];
|
|
264
|
+
const subjectName = traces[0]?.name ?? "unknown-subject";
|
|
265
|
+
const pipeline: PipelineOptions = {
|
|
266
|
+
criteria,
|
|
267
|
+
pin: { modelId: model, temperature: 0 },
|
|
268
|
+
subject: { kind: SubjectKind.Agent, name: subjectName, path: `subjects/${subjectName}` },
|
|
269
|
+
producedBy: "mutagent-evaluator/prep",
|
|
270
|
+
producedAt: "1970-01-01T00:00:00Z", // PREP-only stamp — judge prompts don't depend on it
|
|
271
|
+
};
|
|
272
|
+
specs = await prepJudgeTasks(traces, { verdictDir, taskDir, pin, pipeline });
|
|
273
|
+
} else {
|
|
274
|
+
throw new Error("prep: --stage must be 'matrix' (default *evaluate), 'determiner', or 'judge'");
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
writeManifest(taskDir, specs, coldStartMeta);
|
|
278
|
+
process.stdout.write(
|
|
279
|
+
`prep: stage=${stage} emitted ${specs.length} task-spec(s) → ${taskDir} ` +
|
|
280
|
+
`(unique by content key: ${new Set(specs.map((s) => s.key)).size})\n`,
|
|
281
|
+
);
|
|
282
|
+
if (coldStartMeta !== undefined) {
|
|
283
|
+
process.stdout.write(
|
|
284
|
+
`prep: cold-start suite ${coldStartMeta.selected}/${coldStartMeta.input} traces ` +
|
|
285
|
+
`(✓${coldStartMeta.passCount} ✗${coldStartMeta.failCount}` +
|
|
286
|
+
`${coldStartMeta.minBothHeld ? "" : ", MIN-BOTH BROKEN"})` +
|
|
287
|
+
`${coldStartMeta.lowConfidence ? " — LOW-CONFIDENCE (thin negatives; re-balance after real verdicts)" : ""}\n`,
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
main().catch((err: unknown) => {
|
|
293
|
+
process.stderr.write(`prep FAILED: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
294
|
+
process.exit(1);
|
|
295
|
+
});
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/cli/profile-subject.ts — Mode B entrypoint.
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* Mode B GENERATES a subject profile (subjects/<name>/{eval-matrix,behavior-tree,
|
|
5
|
+
* methodology-review}.yaml) from a skill/agent definition + traces. This is how
|
|
6
|
+
* the matrix is BORN — generated, not embedded in the agent.
|
|
7
|
+
*
|
|
8
|
+
* MATURITY — functional seam, not fully wired:
|
|
9
|
+
* The deterministic spine here is REAL: it (a) validates inputs exist, (b)
|
|
10
|
+
* scaffolds the subjects/<name>/ directory, and (c) writes schema-conformant
|
|
11
|
+
* SEED YAML files (empty-but-valid frames carrying subject/version/generatedAt
|
|
12
|
+
* + the 12 design principles + the MR-1..9 rubric skeleton) that pass the
|
|
13
|
+
* shape contracts. The criteria-DERIVATION step (reading the def + traces and
|
|
14
|
+
* proposing component x dimension x checkMethod rows + an interesting-dataset
|
|
15
|
+
* shortlist) is a PINNED-JUDGE SEAM — it requires the pinned model reasoning
|
|
16
|
+
* over the subject's source + traces. The agent card's Mode-B workflow + the
|
|
17
|
+
* audit workflow dispatch that judge. This CLI writes the SEED + marks the
|
|
18
|
+
* seam; it never fabricates derived criteria silently.
|
|
19
|
+
*
|
|
20
|
+
* profile-subject.ts <defPath> <tracesPath> --name <subject>
|
|
21
|
+
* [--subjects-root <dir>] [--generated-at <iso>]
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
24
|
+
import { dirname, join } from "node:path";
|
|
25
|
+
import { fileURLToPath } from "node:url";
|
|
26
|
+
import { stringify as stringifyYaml } from "yaml";
|
|
27
|
+
import { DEFAULT_GENERATED_AT } from "./audit-run.ts";
|
|
28
|
+
|
|
29
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
30
|
+
const PKG_ROOT = join(HERE, "..", "..");
|
|
31
|
+
|
|
32
|
+
const MR_RUBRIC_SKELETON = [
|
|
33
|
+
{ id: "MR-1", title: "Decision-tree fitness", reads: "behavior-tree + run outcomes", how: "judge reasons over each fork vs what the run needed", family: "decision-tree-fitness", advisory: true },
|
|
34
|
+
{ id: "MR-2", title: "Data-flow efficiency", reads: "pipeline trace", how: "scan for redundant/recomputed transforms, collapsible stages", family: "data-flow-efficiency", advisory: true },
|
|
35
|
+
{ id: "MR-3", title: "Methodology fitness given findings", reads: "run trajectory + findings", how: "did depth/breadth match the need?", family: "methodology-fitness", advisory: true },
|
|
36
|
+
{ id: "MR-4", title: "Sequence soundness", reads: "transcript trajectory", how: "does later work invalidate earlier work?", family: "sequence-soundness", advisory: true },
|
|
37
|
+
{ id: "MR-5", title: "Process self-feedback", reads: "all of the above", how: "ranked rearrange/improve proposals", family: "process-self-feedback", advisory: true },
|
|
38
|
+
{ id: "MR-6", title: "Followed != Right", reads: "matrix (Tab-1) vs this (Tab-4)", how: "separate conformance from fitness", family: "conformance-vs-fitness", advisory: true },
|
|
39
|
+
{ id: "MR-7", title: "Signal/failure-mode selection", reads: "tier0 -> awareness -> deep-read chain", how: "was the primary signal grounded in the right evidence tier?", family: "signal-selection", advisory: true },
|
|
40
|
+
{ id: "MR-8", title: "Confidence derivation", reads: "coverageConfidence vs deep-read sample", how: "does the confidence FOLLOW from the LLM-trace evidence?", family: "confidence-derivation", advisory: true },
|
|
41
|
+
{ id: "MR-9", title: "Focus determination -> search-shaping", reads: "scope/focus decision + examined traces", how: "expected-focus vs observed-focus given brief + tier-0 signals", family: "focus-determination", advisory: true },
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
const DESIGN_PRINCIPLES_SEED = [
|
|
45
|
+
"Determinism-before-judgment: prefer deterministic-script / typebox-schema / gate; reserve llm-judge + trajectory-diff for genuinely behavioral rows.",
|
|
46
|
+
"Severity by variance-impact, not code size.",
|
|
47
|
+
"Three-dimension MECE coverage per component (operation-correctness / data-correctness / operational-deviation).",
|
|
48
|
+
"Full-dereference-surface gate principle (C-GATE).",
|
|
49
|
+
"Pin-and-record every stochastic/environmental variable (C-PIN), honoring model-intent-sacred.",
|
|
50
|
+
"Byte-identity masking contract as the determinism acceptance test.",
|
|
51
|
+
"Scope-locus attribution for every criterion (MECE SKILL/AGENT/COMMAND).",
|
|
52
|
+
"Existing-coverage honesty: covered/partial/none against the actual test+gate inventory.",
|
|
53
|
+
"No-filler rule: every criterion grounded in a cited intended behavior or observed deviation.",
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
interface Args {
|
|
57
|
+
defPath: string;
|
|
58
|
+
tracesPath: string;
|
|
59
|
+
name: string;
|
|
60
|
+
subjectsRoot: string;
|
|
61
|
+
generatedAt: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function parseArgs(argv: string[]): Args {
|
|
65
|
+
const positional: string[] = [];
|
|
66
|
+
const flags: Record<string, string> = {};
|
|
67
|
+
for (let i = 0; i < argv.length; i++) {
|
|
68
|
+
const a = argv[i];
|
|
69
|
+
if (a.startsWith("--")) {
|
|
70
|
+
flags[a.slice(2)] = argv[i + 1] ?? "";
|
|
71
|
+
i++;
|
|
72
|
+
} else positional.push(a);
|
|
73
|
+
}
|
|
74
|
+
if (positional.length < 2 || !flags.name) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
"usage: profile-subject.ts <defPath> <tracesPath> --name <subject> [--subjects-root <dir>] [--generated-at <iso>]",
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
defPath: positional[0],
|
|
81
|
+
tracesPath: positional[1],
|
|
82
|
+
name: flags.name,
|
|
83
|
+
subjectsRoot: flags["subjects-root"] || join(PKG_ROOT, "subjects"),
|
|
84
|
+
generatedAt: flags["generated-at"] || DEFAULT_GENERATED_AT,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function main(argvIn?: string[]): number {
|
|
89
|
+
const argv =
|
|
90
|
+
argvIn ??
|
|
91
|
+
(typeof Bun !== "undefined" ? Bun.argv.slice(2) : process.argv.slice(2));
|
|
92
|
+
const args = parseArgs(argv);
|
|
93
|
+
|
|
94
|
+
if (!existsSync(args.defPath)) {
|
|
95
|
+
console.error(`profile-subject: definition not found: ${args.defPath}`);
|
|
96
|
+
return 2;
|
|
97
|
+
}
|
|
98
|
+
if (!existsSync(args.tracesPath)) {
|
|
99
|
+
console.error(`profile-subject: traces not found: ${args.tracesPath}`);
|
|
100
|
+
return 2;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const dir = join(args.subjectsRoot, args.name);
|
|
104
|
+
mkdirSync(dir, { recursive: true });
|
|
105
|
+
|
|
106
|
+
// SEED frames — schema-conformant, empty components/nodes awaiting the judge.
|
|
107
|
+
const evalMatrixSeed = {
|
|
108
|
+
subject: args.name,
|
|
109
|
+
version: "v1",
|
|
110
|
+
generatedAt: args.generatedAt,
|
|
111
|
+
designPrinciples: DESIGN_PRINCIPLES_SEED,
|
|
112
|
+
components: [] as unknown[],
|
|
113
|
+
};
|
|
114
|
+
const behaviorTreeSeed = {
|
|
115
|
+
subject: args.name,
|
|
116
|
+
version: "v1",
|
|
117
|
+
generatedAt: args.generatedAt,
|
|
118
|
+
root: "ROOT",
|
|
119
|
+
nodes: [] as unknown[],
|
|
120
|
+
};
|
|
121
|
+
const methodologyReviewSeed = {
|
|
122
|
+
subject: args.name,
|
|
123
|
+
version: "v1",
|
|
124
|
+
generatedAt: args.generatedAt,
|
|
125
|
+
items: MR_RUBRIC_SKELETON,
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
writeFileSync(
|
|
129
|
+
join(dir, "eval-matrix.yaml"),
|
|
130
|
+
"# SEED profile — components[] derived by the Mode-B pinned-judge seam.\n" +
|
|
131
|
+
stringifyYaml(evalMatrixSeed),
|
|
132
|
+
);
|
|
133
|
+
writeFileSync(
|
|
134
|
+
join(dir, "behavior-tree.yaml"),
|
|
135
|
+
"# SEED behavior-tree — nodes[] derived by the Mode-B pinned-judge seam.\n" +
|
|
136
|
+
stringifyYaml(behaviorTreeSeed),
|
|
137
|
+
);
|
|
138
|
+
writeFileSync(
|
|
139
|
+
join(dir, "methodology-review.yaml"),
|
|
140
|
+
"# MR rubric — MR-1..9 skeleton (generic, reused per subject).\n" +
|
|
141
|
+
stringifyYaml(methodologyReviewSeed),
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
console.info(
|
|
145
|
+
JSON.stringify(
|
|
146
|
+
{
|
|
147
|
+
subject: args.name,
|
|
148
|
+
seededAt: dir,
|
|
149
|
+
files: ["eval-matrix.yaml", "behavior-tree.yaml", "methodology-review.yaml"],
|
|
150
|
+
seam: "PINNED-JUDGE: criteria + behavior-tree nodes + interesting-dataset shortlist are derived by the Mode-B judge reading the def + traces. SEED frames written; derived rows NOT fabricated.",
|
|
151
|
+
},
|
|
152
|
+
null,
|
|
153
|
+
2,
|
|
154
|
+
),
|
|
155
|
+
);
|
|
156
|
+
return 0;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
declare const Bun: { argv: string[] } | undefined;
|
|
160
|
+
const isMain =
|
|
161
|
+
typeof import.meta !== "undefined" &&
|
|
162
|
+
(import.meta as unknown as { main?: boolean }).main === true;
|
|
163
|
+
if (isMain) {
|
|
164
|
+
process.exit(main());
|
|
165
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# scripts/cli/run.sh — bun -> pnpm-tsx -> npx-tsx fallback selector + .sh dispatch.
|
|
3
|
+
# Usage: scripts/cli/run.sh <script-path.{ts|sh}> [args...]
|
|
4
|
+
# scripts/cli/run.sh --selftest
|
|
5
|
+
#
|
|
6
|
+
# All engine invocations go through this wrapper so the package stays portable
|
|
7
|
+
# across bun/pnpm/npm hosts with zero Bun.* API dependence.
|
|
8
|
+
#
|
|
9
|
+
# Platform matrix — which tier fires when:
|
|
10
|
+
# Tier 1 (bun) : bun is on PATH
|
|
11
|
+
# Tier 2 (pnpm-tsx) : bun absent, pnpm on PATH
|
|
12
|
+
# Tier 3 (npx-tsx) : bun + pnpm absent, npx on PATH
|
|
13
|
+
# Tier 4 (error) : none of the above — exits 1 with install guidance
|
|
14
|
+
|
|
15
|
+
set -e
|
|
16
|
+
|
|
17
|
+
SCRIPT="$1"
|
|
18
|
+
|
|
19
|
+
if [ "$SCRIPT" = "--selftest" ]; then
|
|
20
|
+
if command -v bun >/dev/null 2>&1; then
|
|
21
|
+
echo "run.sh selftest: tier=1 runtime=bun version=$(bun --version 2>/dev/null || echo unknown)"
|
|
22
|
+
elif command -v pnpm >/dev/null 2>&1; then
|
|
23
|
+
echo "run.sh selftest: tier=2 runtime=pnpm-tsx version=$(pnpm --version 2>/dev/null || echo unknown)"
|
|
24
|
+
elif command -v npx >/dev/null 2>&1; then
|
|
25
|
+
echo "run.sh selftest: tier=3 runtime=npx-tsx version=$(node --version 2>/dev/null || echo unknown)"
|
|
26
|
+
else
|
|
27
|
+
echo "run.sh selftest: tier=4 runtime=none (install bun: curl -fsSL https://bun.sh/install | bash)"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
exit 0
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
shift || true
|
|
34
|
+
|
|
35
|
+
if [ -z "$SCRIPT" ]; then
|
|
36
|
+
echo "ERROR: no script path provided" >&2
|
|
37
|
+
echo "Usage: run.sh <script.{ts|sh}> [args...]" >&2
|
|
38
|
+
echo " run.sh --selftest" >&2
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
case "$SCRIPT" in
|
|
43
|
+
*.sh) exec bash "$SCRIPT" "$@" ;;
|
|
44
|
+
esac
|
|
45
|
+
|
|
46
|
+
if command -v bun >/dev/null 2>&1; then
|
|
47
|
+
exec bun run "$SCRIPT" "$@"
|
|
48
|
+
elif command -v pnpm >/dev/null 2>&1; then
|
|
49
|
+
exec pnpm exec tsx "$SCRIPT" "$@"
|
|
50
|
+
elif command -v npx >/dev/null 2>&1; then
|
|
51
|
+
exec npx tsx "$SCRIPT" "$@"
|
|
52
|
+
else
|
|
53
|
+
echo "ERROR: mutagent-evaluator requires bun, pnpm, or npm/npx to run TypeScript scripts" >&2
|
|
54
|
+
echo "Install bun: curl -fsSL https://bun.sh/install | bash" >&2
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|