@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,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/derive-dataset.ts — EV-047 `*discover-dataset` (Type A — Code-only).
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* Distill a LIVING REGRESSION SET from past ✓/✗ traces: pick the cases worth
|
|
5
|
+
* keeping forever (catastrophes, edges, outliers, low-confidence calls), turn
|
|
6
|
+
* each into a `DatasetCase` whose query IS the real input that produced the
|
|
7
|
+
* outcome, and append them MONOTONICALLY into the growing dataset.
|
|
8
|
+
*
|
|
9
|
+
* Reuses (does NOT re-implement) the EV-052 selectors in `sample-traces.ts`
|
|
10
|
+
* (failure-driven = catastrophe · outlier = edge · uncertainty = low-confidence)
|
|
11
|
+
* and the EV-046 monotonic merge in `build-dataset.ts`. The NEW work here is the
|
|
12
|
+
* distillation: trace → regression case + the append-only living set. Holds NO
|
|
13
|
+
* LLM reasoning and makes NO pass/fail decision (the labels are already on the
|
|
14
|
+
* traces, from `*discover-evals`). PURE — no clock / random / network; same input →
|
|
15
|
+
* same regression set (reproducible).
|
|
16
|
+
*/
|
|
17
|
+
import { OutcomeVerdict, type OutcomeVerdictValue } from "./contracts/eval-types.ts";
|
|
18
|
+
import {
|
|
19
|
+
sampleTracesAttributed,
|
|
20
|
+
SampleStrategy,
|
|
21
|
+
type LabeledTrace,
|
|
22
|
+
type AttributedTrace,
|
|
23
|
+
type SampleStrategyValue,
|
|
24
|
+
} from "./sample-traces.ts";
|
|
25
|
+
import { buildCase, mergeCases } from "./build-dataset.ts";
|
|
26
|
+
import { CaseSource, type DatasetCase } from "./contracts/dataset.ts";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The regression-worthy selection strategies, in priority order:
|
|
30
|
+
* - failure-driven (catastrophes — known ✗ we must never regress on)
|
|
31
|
+
* - outlier (edges — unusual length / latency / tool-call count)
|
|
32
|
+
* - uncertainty (low-confidence determinations — the brittle boundary)
|
|
33
|
+
* Stratified is appended so a balanced ✓/✗ spread is preserved (a regression set
|
|
34
|
+
* needs known-GOOD anchors too, not only failures).
|
|
35
|
+
*/
|
|
36
|
+
const REGRESSION_STRATEGIES = [
|
|
37
|
+
SampleStrategy.FailureDriven,
|
|
38
|
+
SampleStrategy.Outlier,
|
|
39
|
+
SampleStrategy.Uncertainty,
|
|
40
|
+
SampleStrategy.Stratified,
|
|
41
|
+
] as const;
|
|
42
|
+
|
|
43
|
+
/** Map a determiner verdict onto the outcome tag carried in a derived tuple. */
|
|
44
|
+
function outcomeTag(label: OutcomeVerdictValue): string {
|
|
45
|
+
return label === OutcomeVerdict.Pass ? "pass" : label === OutcomeVerdict.Fail ? "fail" : "uncertain";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Human-readable DETERMINISTIC provenance label for the selecting strategy — the
|
|
50
|
+
* "data link" half of the why (what objective signal nominated this trace). The
|
|
51
|
+
* JUDGMENT half (why it's high-value as a test) is authored separately. PURE.
|
|
52
|
+
*/
|
|
53
|
+
export function selectedByLabel(s: SampleStrategyValue): string {
|
|
54
|
+
switch (s) {
|
|
55
|
+
case SampleStrategy.FailureDriven:
|
|
56
|
+
return "failure-driven — a confirmed ✗ catastrophe the suite must never regress on";
|
|
57
|
+
case SampleStrategy.Outlier:
|
|
58
|
+
return "outlier — an edge trajectory (unusual length / latency / tool-call count)";
|
|
59
|
+
case SampleStrategy.Uncertainty:
|
|
60
|
+
return "uncertainty — a low-confidence boundary call (the brittle decision edge)";
|
|
61
|
+
case SampleStrategy.Stratified:
|
|
62
|
+
return "stratified — a known-✓ anchor (keeps the regression set ✓/✗ balanced)";
|
|
63
|
+
default:
|
|
64
|
+
return String(s);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Authors the human "why high-value as a test" rationale for a selected trace.
|
|
70
|
+
* This is the JUDGMENT — supplied by whoever SELECTS the case (the discover/judge
|
|
71
|
+
* agent reasoning over the trace). Receives the attributed trace; returns the
|
|
72
|
+
* rationale string, or undefined to leave it unauthored (renderer shows the
|
|
73
|
+
* deterministic provenance + a "rationale pending" note).
|
|
74
|
+
*/
|
|
75
|
+
export type RationaleAuthor = (a: AttributedTrace) => string | undefined;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Convert one labeled trace into a regression `DatasetCase`. The query IS the
|
|
79
|
+
* trace's real input prompt (the input that produced the ✓/✗); the tuple records
|
|
80
|
+
* the salient axis (the known outcome) so the case is self-describing; the source
|
|
81
|
+
* is `derived` with `originTraceId` for provenance. `selectedBy` carries the
|
|
82
|
+
* DETERMINISTIC strategy label; `rationale` (when `author` supplies one) carries
|
|
83
|
+
* the LLM JUDGMENT of why this is high-value. Returns null when the trace has no
|
|
84
|
+
* input prompt (a regression case needs a replayable input).
|
|
85
|
+
*/
|
|
86
|
+
export function traceToRegressionCase(a: AttributedTrace, author?: RationaleAuthor): DatasetCase | null {
|
|
87
|
+
const lt = a.trace;
|
|
88
|
+
const prompt = lt.trace.input?.prompt;
|
|
89
|
+
if (typeof prompt !== "string" || prompt.length === 0) return null;
|
|
90
|
+
return buildCase({ outcome: outcomeTag(lt.label) }, prompt, CaseSource.Derived, lt.trace.id, {
|
|
91
|
+
selectedBy: selectedByLabel(a.selectedBy),
|
|
92
|
+
rationale: author?.(a),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface DeriveOptions {
|
|
97
|
+
/**
|
|
98
|
+
* GA — exclude INDETERMINATE (`uncertain`) traces from the held-out set
|
|
99
|
+
* (DEFAULT true). A held-out regression case needs a CONFIRMED ✓/✗ anchor; an
|
|
100
|
+
* indeterminate outcome is unresolved (it belongs in the calibration loop, not
|
|
101
|
+
* the gate-eligible regression set). Set false to keep them tagged
|
|
102
|
+
* `needs-resolution` instead of dropping.
|
|
103
|
+
*/
|
|
104
|
+
excludeIndeterminate?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Authors the per-case "why high-value as a test" rationale (the JUDGMENT). The
|
|
107
|
+
* selecting agent supplies it; when omitted the cases carry only the
|
|
108
|
+
* deterministic `selectedBy` provenance.
|
|
109
|
+
*/
|
|
110
|
+
authorRationale?: RationaleAuthor;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Select the regression-worthy traces (reusing the EV-052 selectors) and distill
|
|
115
|
+
* each into a `DatasetCase`. Traces without a replayable input are dropped, and
|
|
116
|
+
* (GA, default) INDETERMINATE traces are excluded from the held-out set. The
|
|
117
|
+
* result is deduped (content-id + near-duplicate query) so the same brittle case
|
|
118
|
+
* isn't kept twice. DETERMINISTIC for a given (labeled, size).
|
|
119
|
+
*/
|
|
120
|
+
export function deriveRegressionCases(
|
|
121
|
+
labeled: LabeledTrace[],
|
|
122
|
+
size: number,
|
|
123
|
+
opts: DeriveOptions = {},
|
|
124
|
+
): DatasetCase[] {
|
|
125
|
+
const excludeIndeterminate = opts.excludeIndeterminate ?? true;
|
|
126
|
+
const pool = excludeIndeterminate
|
|
127
|
+
? labeled.filter((lt) => lt.label !== OutcomeVerdict.Uncertain)
|
|
128
|
+
: labeled;
|
|
129
|
+
const selected = sampleTracesAttributed(pool, { size, strategies: [...REGRESSION_STRATEGIES] });
|
|
130
|
+
const cases: DatasetCase[] = [];
|
|
131
|
+
for (const a of selected) {
|
|
132
|
+
const c = traceToRegressionCase(a, opts.authorRationale);
|
|
133
|
+
if (c !== null) cases.push(c);
|
|
134
|
+
}
|
|
135
|
+
// dedup within the freshly-derived batch (id + near-dup) via the shared merge.
|
|
136
|
+
return mergeCases([], cases);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Grow an existing regression set with newly-derived cases — APPEND-ONLY: every
|
|
141
|
+
* existing case is retained, only genuinely-novel (non-near-duplicate) derived
|
|
142
|
+
* cases are added. The living regression set never shrinks (EV-053). DETERMINISTIC.
|
|
143
|
+
*/
|
|
144
|
+
export function growRegressionSet(
|
|
145
|
+
existing: DatasetCase[],
|
|
146
|
+
labeled: LabeledTrace[],
|
|
147
|
+
size: number,
|
|
148
|
+
opts: DeriveOptions = {},
|
|
149
|
+
): DatasetCase[] {
|
|
150
|
+
const derived = deriveRegressionCases(labeled, size, opts);
|
|
151
|
+
return mergeCases(existing, derived);
|
|
152
|
+
}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/determine-outcome.ts — EV-042 success/failure determiner (Type A — DATA only).
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* The deterministic FOUNDATION of the W1 eval engine. sample traces are UNLABELED
|
|
5
|
+
* (0 scores / 0 tags), so `*discover-evals` has no ✓/✗ to mine until a trace is
|
|
6
|
+
* deep-read and labeled. The DEEP-READ + the success/failure DECISION is an
|
|
7
|
+
* LLM-only operation → it lives in the `error-analyst` subagent def (the host
|
|
8
|
+
* runtime reasons; "inaction can be success" is the rubric encoded THERE).
|
|
9
|
+
*
|
|
10
|
+
* Script austerity (operator directive): this script holds NO judge prompt and
|
|
11
|
+
* NO LLM-reasoning logic. It keeps only the Type-A pieces:
|
|
12
|
+
* - deterministic SIGNAL extraction (event kind · tool count · guard count · …)
|
|
13
|
+
* fed to the judge — NEVER a verdict (toolCount is a signal, never a proxy);
|
|
14
|
+
* - the verdict PARSER (critique-before-verdict schema enforcement);
|
|
15
|
+
* - the deterministic OUTCOME ASSEMBLER (parsed verdict + signals → result).
|
|
16
|
+
* The judge-prompt rendering + the in-house/export run-wrapper (`determineOutcome`)
|
|
17
|
+
* live in `judge-prompt-template.ts` (the EV-050 in-house/export exception). The
|
|
18
|
+
* DEFAULT agent-dispatch path reads a verdict file the subagent wrote — no
|
|
19
|
+
* prompt is rendered here, and no provider is ever constructed.
|
|
20
|
+
*/
|
|
21
|
+
import {
|
|
22
|
+
OutcomeVerdict,
|
|
23
|
+
UNCLASSIFIED_EVENT,
|
|
24
|
+
type CritiqueVerdict,
|
|
25
|
+
type EvalTrace,
|
|
26
|
+
type OutcomeResult,
|
|
27
|
+
type OutcomeSignals,
|
|
28
|
+
type SubjectVocab,
|
|
29
|
+
type TraceObservation,
|
|
30
|
+
} from "./contracts/eval-types.ts";
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The judge DI seam — `(systemPrompt, userPrompt) => raw text`. Under the DEFAULT
|
|
34
|
+
* agent-dispatch substrate the verdict comes from a dispatched subagent (a
|
|
35
|
+
* verdict file); under the OPTIONAL in-house substrate it is a provider call.
|
|
36
|
+
* This module never builds a provider and never renders a prompt — it only
|
|
37
|
+
* declares the seam type the in-house/export wrapper consumes.
|
|
38
|
+
*/
|
|
39
|
+
export type JudgeInvoke = (
|
|
40
|
+
systemPrompt: string,
|
|
41
|
+
userPrompt: string,
|
|
42
|
+
) => Promise<string>;
|
|
43
|
+
|
|
44
|
+
// ── Event classification (the intended-goal half of the read) ───────────────
|
|
45
|
+
//
|
|
46
|
+
// SUBJECT-AGNOSTIC: the tag→kind rules come from the injected `vocab` (EV-002 /
|
|
47
|
+
// EV-049). This module holds NO subject tag names — only the generic matching
|
|
48
|
+
// machinery + the `UNCLASSIFIED_EVENT` sentinel.
|
|
49
|
+
|
|
50
|
+
/** Escape a vocab token so it is matched literally inside a RegExp. */
|
|
51
|
+
function escapeRegExp(token: string): string {
|
|
52
|
+
return token.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Classify the event block → the intended goal, using the subject's tag rules.
|
|
57
|
+
* Rules are tried in order; the first whose stem appears as an opening tag
|
|
58
|
+
* (`<{tag}`, case-insensitive, prefix match) wins. No match → UNCLASSIFIED_EVENT.
|
|
59
|
+
*/
|
|
60
|
+
export function classifyEvent(prompt: string, vocab: SubjectVocab): string {
|
|
61
|
+
for (const rule of vocab.eventTags) {
|
|
62
|
+
if (new RegExp(`<${escapeRegExp(rule.tag)}`, "i").test(prompt)) return rule.kind;
|
|
63
|
+
}
|
|
64
|
+
return UNCLASSIFIED_EVENT;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Parse a guard's consecutive-action count (`{attr}="N"`) from the prompt, using
|
|
69
|
+
* the subject's `guardCounterAttr`. Returns null when the subject declares no
|
|
70
|
+
* guard counter (`attr === null`) or the attribute is absent/non-numeric.
|
|
71
|
+
*/
|
|
72
|
+
export function extractGuardConsecutive(prompt: string, attr: string | null): number | null {
|
|
73
|
+
if (attr === null) return null;
|
|
74
|
+
const m = new RegExp(`${escapeRegExp(attr)}\\s*=\\s*"(\\d+)"`, "i").exec(prompt);
|
|
75
|
+
if (m === null) return null;
|
|
76
|
+
const n = Number.parseInt(m[1], 10);
|
|
77
|
+
return Number.isNaN(n) ? null : n;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// ── Tool-trajectory inspection ──────────────────────────────────────────────
|
|
81
|
+
|
|
82
|
+
function isTool(obs: TraceObservation): boolean {
|
|
83
|
+
return obs.type === "TOOL";
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Read `output.success` (boolean) off a tool observation, else null. */
|
|
87
|
+
function toolSuccess(obs: TraceObservation): boolean | null {
|
|
88
|
+
const out = obs.output;
|
|
89
|
+
if (out !== null && typeof out === "object" && "success" in out) {
|
|
90
|
+
const s = (out as { success: unknown }).success;
|
|
91
|
+
if (typeof s === "boolean") return s;
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function promptOf(trace: EvalTrace): string {
|
|
97
|
+
return typeof trace.input?.prompt === "string" ? trace.input.prompt : "";
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Extract the deterministic signals. PURE — reads only what's in the trace, and
|
|
102
|
+
* the subject NAMES (send tool · recovery tools · event tags · guard attr) from
|
|
103
|
+
* the injected `vocab` (EV-002 / EV-049 — no module-level subject constants).
|
|
104
|
+
* Decides NOTHING about goal-attainment (that is the judge's job over these
|
|
105
|
+
* signals). In particular it does not map toolCount → pass/fail.
|
|
106
|
+
*/
|
|
107
|
+
export function extractOutcomeSignals(trace: EvalTrace, vocab: SubjectVocab): OutcomeSignals {
|
|
108
|
+
const prompt = promptOf(trace);
|
|
109
|
+
const tools = trace.observations.filter(isTool);
|
|
110
|
+
|
|
111
|
+
// EV-049 HONEST-NULL: when the subject's send tool is unset/uninferred, we
|
|
112
|
+
// CANNOT identify which observations are sends — so `sentMessage`/`sendSucceeded`
|
|
113
|
+
// are UNKNOWN (null), NOT a false `false`. A bare `false` here lies to the
|
|
114
|
+
// determiner ("Sent a message: false") even on traces that DID send. Only when
|
|
115
|
+
// the send tool IS named do we count and report a real true/false.
|
|
116
|
+
const sendToolKnown = vocab.sendTool.length > 0;
|
|
117
|
+
const sends = sendToolKnown
|
|
118
|
+
? tools.filter((t) => t.name === vocab.sendTool)
|
|
119
|
+
: [];
|
|
120
|
+
|
|
121
|
+
let sentMessage: boolean | null = null;
|
|
122
|
+
let sendSucceeded: boolean | null = null;
|
|
123
|
+
if (sendToolKnown) {
|
|
124
|
+
sentMessage = sends.length > 0;
|
|
125
|
+
if (sends.length > 0) {
|
|
126
|
+
// true if ANY send succeeded; false if every send failed/unknown-false.
|
|
127
|
+
sendSucceeded = sends.some((t) => toolSuccess(t) === true);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const recoverySet = new Set(vocab.recoveryTools);
|
|
132
|
+
const recoveryPresent = tools.some(
|
|
133
|
+
(t) => t.name !== undefined && recoverySet.has(t.name),
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
eventKind: classifyEvent(prompt, vocab),
|
|
138
|
+
toolCount: tools.length,
|
|
139
|
+
sentMessage,
|
|
140
|
+
sendSucceeded,
|
|
141
|
+
guardConsecutive: extractGuardConsecutive(prompt, vocab.guardCounterAttr),
|
|
142
|
+
recoveryPresent,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ── Verdict parsing (critique-before-verdict enforced) ──────────────────────
|
|
147
|
+
|
|
148
|
+
/** Strip a ```json … ``` (or bare ```) fence if present. */
|
|
149
|
+
function stripFence(raw: string): string {
|
|
150
|
+
const fenced = /```(?:json)?\s*([\s\S]*?)\s*```/i.exec(raw);
|
|
151
|
+
return fenced !== null ? fenced[1] : raw;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const VALID_RESULTS: ReadonlySet<string> = new Set([
|
|
155
|
+
OutcomeVerdict.Pass,
|
|
156
|
+
OutcomeVerdict.Fail,
|
|
157
|
+
OutcomeVerdict.Uncertain,
|
|
158
|
+
]);
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Parse a judge's structured answer, ENFORCING critique-before-verdict: a
|
|
162
|
+
* `critique` string MUST be present and non-empty (a bare verdict with no
|
|
163
|
+
* reasoning is rejected), and `result` must be in the closed set. This is the
|
|
164
|
+
* schema gate applied to a verdict file the subagent wrote (default path) OR the
|
|
165
|
+
* in-house provider's raw text — same enforcement either way.
|
|
166
|
+
*/
|
|
167
|
+
export function parseCritiqueVerdict(raw: string): CritiqueVerdict {
|
|
168
|
+
let parsed: unknown;
|
|
169
|
+
try {
|
|
170
|
+
parsed = JSON.parse(stripFence(raw).trim());
|
|
171
|
+
} catch {
|
|
172
|
+
throw new Error(`parseCritiqueVerdict: not valid JSON: ${raw.slice(0, 120)}`);
|
|
173
|
+
}
|
|
174
|
+
if (parsed === null || typeof parsed !== "object") {
|
|
175
|
+
throw new Error("parseCritiqueVerdict: expected a JSON object");
|
|
176
|
+
}
|
|
177
|
+
const o = parsed as Record<string, unknown>;
|
|
178
|
+
if (typeof o.critique !== "string" || o.critique.trim().length === 0) {
|
|
179
|
+
throw new Error(
|
|
180
|
+
"parseCritiqueVerdict: missing/empty `critique` — critique-before-verdict " +
|
|
181
|
+
"is mandatory (a bare verdict with no reasoning is rejected)",
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
if (typeof o.result !== "string" || !VALID_RESULTS.has(o.result)) {
|
|
185
|
+
throw new Error(
|
|
186
|
+
`parseCritiqueVerdict: result '${String(o.result)}' not in ` +
|
|
187
|
+
`{pass,fail,uncertain}`,
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
const confidence = typeof o.confidence === "number" ? o.confidence : 0;
|
|
191
|
+
return {
|
|
192
|
+
critique: o.critique,
|
|
193
|
+
result: o.result as CritiqueVerdict["result"],
|
|
194
|
+
confidence: Math.max(0, Math.min(1, confidence)),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// ── Deterministic outcome assembler (no judge call) ─────────────────────────
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Assemble the determiner's `OutcomeResult` from a trace's signals + a PARSED
|
|
202
|
+
* verdict (read from a dispatched error-analyst's verdict file, default path).
|
|
203
|
+
* PURE — no judge call, no clock/random. The verdict is the subagent's (never
|
|
204
|
+
* derived from tool-count). This is the Type-A AGGREGATE half of EV-042; the
|
|
205
|
+
* LLM-only DECISION lives in `error-analyst.md`.
|
|
206
|
+
*/
|
|
207
|
+
export function assembleOutcome(
|
|
208
|
+
trace: EvalTrace,
|
|
209
|
+
verdict: CritiqueVerdict,
|
|
210
|
+
vocab: SubjectVocab,
|
|
211
|
+
): OutcomeResult {
|
|
212
|
+
return {
|
|
213
|
+
traceId: trace.id,
|
|
214
|
+
reached: verdict.result as OutcomeResult["reached"],
|
|
215
|
+
confidence: verdict.confidence,
|
|
216
|
+
rationale: verdict.critique,
|
|
217
|
+
signals: extractOutcomeSignals(trace, vocab),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* scripts/diff-discriminate.ts — GA-11 observed-eligibility via the broken∧¬healthy diff.
|
|
3
|
+
* ---------------------------------------------------------------------------
|
|
4
|
+
* A criterion earns the `observed` grounding tier ONLY if it DISCRIMINATES: it
|
|
5
|
+
* must fire on a BROKEN trace AND NOT fire on a HEALTHY companion trace. A check
|
|
6
|
+
* that fires on both is not detecting THIS failure — it is noise (or garbage-in)
|
|
7
|
+
* and must NOT be presented as an observed defect.
|
|
8
|
+
*
|
|
9
|
+
* fires-on-broken ∧ ¬fires-on-healthy → OBSERVED-eligible (discriminates)
|
|
10
|
+
* fires-on-broken ∧ fires-on-healthy → DEMOTE → inferred (does not discriminate)
|
|
11
|
+
* · if FIXABLE infra → route→diagnostics
|
|
12
|
+
* ¬fires-on-broken → DEMOTE → inferred (no observed failure)
|
|
13
|
+
*
|
|
14
|
+
* GRANDFATHER (regression-safety rule #2): when there is NO healthy companion
|
|
15
|
+
* trace, this NEVER hard-fails — it gracefully falls back to single-trace +
|
|
16
|
+
* honest prevalence, keeps the `observed` tier, and TAGS the decision
|
|
17
|
+
* `single-trace-fallback`. The diff is skipped, not enforced.
|
|
18
|
+
*
|
|
19
|
+
* PURE — a decision function over boolean fire-signals; no clock/random/network.
|
|
20
|
+
* The actual "does it fire?" judgement is produced upstream (the judge/determiner
|
|
21
|
+
* leaf, LLM); this module only DECIDES eligibility from those signals (code).
|
|
22
|
+
*/
|
|
23
|
+
import {
|
|
24
|
+
CriterionFlag,
|
|
25
|
+
Grounding,
|
|
26
|
+
type GroundingValue,
|
|
27
|
+
type MinedCriterion,
|
|
28
|
+
} from "./contracts/eval-types.ts";
|
|
29
|
+
|
|
30
|
+
/** The upstream fire-signals for one criterion (produced by the judge leaf). */
|
|
31
|
+
export interface CriterionFireSignals {
|
|
32
|
+
criterionId: string;
|
|
33
|
+
/** did the criterion fire (detect its failure) on the BROKEN trace? */
|
|
34
|
+
firesOnBroken: boolean;
|
|
35
|
+
/** did it fire on the HEALTHY companion? (ignored when `hasHealthy` is false) */
|
|
36
|
+
firesOnHealthy: boolean;
|
|
37
|
+
/** is a healthy companion trace available at all? false ⇒ graceful fallback. */
|
|
38
|
+
hasHealthy: boolean;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const DiffDecision = {
|
|
42
|
+
/** discriminates → keep `observed`. */
|
|
43
|
+
Observed: "observed-eligible",
|
|
44
|
+
/** no healthy companion → keep `observed`, tagged single-trace. */
|
|
45
|
+
SingleTraceFallback: "single-trace-fallback",
|
|
46
|
+
/** fires on both / not on broken → demote to `inferred`. */
|
|
47
|
+
DemoteInferred: "demote-inferred",
|
|
48
|
+
/** fires on healthy too AND fixable infra → route to diagnostics (garbage-in). */
|
|
49
|
+
RouteDiagnostics: "route-diagnostics",
|
|
50
|
+
} as const;
|
|
51
|
+
export type DiffDecisionValue = (typeof DiffDecision)[keyof typeof DiffDecision];
|
|
52
|
+
|
|
53
|
+
export interface DiffResult {
|
|
54
|
+
criterionId: string;
|
|
55
|
+
decision: DiffDecisionValue;
|
|
56
|
+
/** the grounding the criterion should carry after the diff. */
|
|
57
|
+
grounding: GroundingValue;
|
|
58
|
+
/** true when the diff was skipped for lack of a healthy companion (tagged). */
|
|
59
|
+
tagged: boolean;
|
|
60
|
+
reason: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Decide observed-eligibility for ONE criterion from its fire-signals. PURE.
|
|
65
|
+
* `isFixable` lets a non-discriminating INFRA criterion route to diagnostics
|
|
66
|
+
* (garbage-in) rather than merely demote.
|
|
67
|
+
*/
|
|
68
|
+
export function discriminate(
|
|
69
|
+
signals: CriterionFireSignals,
|
|
70
|
+
isFixable = false,
|
|
71
|
+
): DiffResult {
|
|
72
|
+
const { criterionId, firesOnBroken, firesOnHealthy, hasHealthy } = signals;
|
|
73
|
+
|
|
74
|
+
if (!hasHealthy) {
|
|
75
|
+
return {
|
|
76
|
+
criterionId,
|
|
77
|
+
decision: DiffDecision.SingleTraceFallback,
|
|
78
|
+
grounding: Grounding.Observed,
|
|
79
|
+
tagged: true,
|
|
80
|
+
reason:
|
|
81
|
+
"no healthy companion trace — graceful single-trace fallback (diff skipped, " +
|
|
82
|
+
"honest prevalence retained); observed tier kept, tagged single-trace.",
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (!firesOnBroken) {
|
|
86
|
+
return {
|
|
87
|
+
criterionId,
|
|
88
|
+
decision: DiffDecision.DemoteInferred,
|
|
89
|
+
grounding: Grounding.Inferred,
|
|
90
|
+
tagged: false,
|
|
91
|
+
reason: "did not fire on the broken trace — no observed failure; demoted to inferred.",
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (firesOnHealthy) {
|
|
95
|
+
return isFixable
|
|
96
|
+
? {
|
|
97
|
+
criterionId,
|
|
98
|
+
decision: DiffDecision.RouteDiagnostics,
|
|
99
|
+
grounding: Grounding.Inferred,
|
|
100
|
+
tagged: false,
|
|
101
|
+
reason:
|
|
102
|
+
"fires on BOTH broken and healthy (does not discriminate) AND is fixable infra — " +
|
|
103
|
+
"garbage-in; route to diagnostics rather than judge.",
|
|
104
|
+
}
|
|
105
|
+
: {
|
|
106
|
+
criterionId,
|
|
107
|
+
decision: DiffDecision.DemoteInferred,
|
|
108
|
+
grounding: Grounding.Inferred,
|
|
109
|
+
tagged: false,
|
|
110
|
+
reason:
|
|
111
|
+
"fires on BOTH broken and healthy — does not discriminate this failure; demoted to inferred.",
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
criterionId,
|
|
116
|
+
decision: DiffDecision.Observed,
|
|
117
|
+
grounding: Grounding.Observed,
|
|
118
|
+
tagged: false,
|
|
119
|
+
reason: "fires on broken ∧ NOT on healthy — discriminates; observed-eligible.",
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Apply diff-discrimination to a batch of mined criteria, demoting grounding +
|
|
125
|
+
* tagging single-trace fallbacks. A criterion with NO matching fire-signal is
|
|
126
|
+
* left untouched (the diff was not run for it). Returns a NEW array; inputs are
|
|
127
|
+
* never mutated. PURE — same (criteria, signals) ⇒ identical output.
|
|
128
|
+
*
|
|
129
|
+
* When a criterion is demoted from `observed` → `inferred`, its evidence is
|
|
130
|
+
* updated honestly (grounding + seen_in_traces) and the decision is recorded in
|
|
131
|
+
* `discovery.reasoning` so the demotion is never silent (NO data loss — refs +
|
|
132
|
+
* assumptions are preserved verbatim).
|
|
133
|
+
*/
|
|
134
|
+
export function applyDiffDiscrimination(
|
|
135
|
+
criteria: MinedCriterion[],
|
|
136
|
+
signals: CriterionFireSignals[],
|
|
137
|
+
): MinedCriterion[] {
|
|
138
|
+
const byId = new Map(signals.map((s) => [s.criterionId, s]));
|
|
139
|
+
return criteria.map((c) => {
|
|
140
|
+
const sig = byId.get(c.id);
|
|
141
|
+
if (sig === undefined) return c; // diff not run for this criterion
|
|
142
|
+
if (c.discovery.evidence.grounding !== Grounding.Observed) return c; // only gate observed
|
|
143
|
+
const isFixable = c.flag === CriterionFlag.Fixable;
|
|
144
|
+
const res = discriminate(sig, isFixable);
|
|
145
|
+
if (res.grounding === Grounding.Observed && !res.tagged) return c; // unchanged
|
|
146
|
+
return {
|
|
147
|
+
...c,
|
|
148
|
+
discovery: {
|
|
149
|
+
...c.discovery,
|
|
150
|
+
evidence: {
|
|
151
|
+
...c.discovery.evidence,
|
|
152
|
+
grounding: res.grounding,
|
|
153
|
+
seen_in_traces:
|
|
154
|
+
res.grounding === Grounding.Observed ? c.discovery.evidence.seen_in_traces : false,
|
|
155
|
+
},
|
|
156
|
+
reasoning: `${c.discovery.reasoning} | diff-discriminate: ${res.reason}`,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
});
|
|
160
|
+
}
|