@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.
Files changed (357) hide show
  1. package/.claude/skills/mutagent-helix/SKILL.md +113 -0
  2. package/.claude/skills/mutagent-helix/scripts/cli/codex-transcode.ts +143 -0
  3. package/.claude/skills/mutagent-helix/scripts/cli/doctor.ts +111 -0
  4. package/.claude/skills/mutagent-helix/scripts/cli/init.ts +382 -0
  5. package/.claude/skills/mutagent-helix/scripts/cli/run.sh +61 -0
  6. package/CLAUDE.md +193 -0
  7. package/LICENSE +201 -0
  8. package/NOTICE +22 -0
  9. package/README.md +209 -0
  10. package/assets/adl-loop.svg +162 -0
  11. package/assets/system-status.svg +422 -0
  12. package/bin/mutagent-cli.mjs +9950 -0
  13. package/bin/mutagent-helix.mjs +78 -0
  14. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/CLAUDE.md +28 -0
  15. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/SKILL.md +138 -0
  16. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/assets/templates/agentspec.yaml.tpl +247 -0
  17. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/frameworks/doc-pins.md +53 -0
  18. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/principles.md +91 -0
  19. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/requirements.yaml +295 -0
  20. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/references/workflows/orchestrator-protocol.md +302 -0
  21. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/doctor.ts +116 -0
  22. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/init.ts +230 -0
  23. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/cli/run.sh +60 -0
  24. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/config/resolve-spec-dir.ts +199 -0
  25. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/contract/agentspec.schema.ts +455 -0
  26. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/setup/detect.ts +67 -0
  27. package/mutagent-agentspec/.claude/skills/mutagent-agentspec/scripts/validate/validate-spec.ts +93 -0
  28. package/mutagent-agentspec/LICENSE +201 -0
  29. package/mutagent-agentspec/NOTICE +19 -0
  30. package/mutagent-agentspec/README.md +44 -0
  31. package/mutagent-builder/.claude/skills/mutagent-builder/SKILL.md +100 -0
  32. package/mutagent-builder/.claude/skills/mutagent-builder/assets/agents/ai-architect.md +312 -0
  33. package/mutagent-builder/.claude/skills/mutagent-builder/assets/agents/ai-engineer.md +357 -0
  34. package/mutagent-builder/.claude/skills/mutagent-builder/assets/templates/build-report.md.tpl +39 -0
  35. package/mutagent-builder/.claude/skills/mutagent-builder/references/principles.md +31 -0
  36. package/mutagent-builder/.claude/skills/mutagent-builder/references/workflows/build-protocol.md +61 -0
  37. package/mutagent-builder/.claude/skills/mutagent-builder/references/workflows/improve-handoff.md +23 -0
  38. package/mutagent-builder/.claude/skills/mutagent-builder/scripts/cli/run.sh +60 -0
  39. package/mutagent-builder/.claude/skills/mutagent-builder/scripts/handoff/validate-build-input.ts +72 -0
  40. package/mutagent-builder/.claude/skills/mutagent-builder/scripts/sync-spec/check-sync-spec.ts +499 -0
  41. package/mutagent-builder/.claude/skills/mutagent-builder/scripts/verify/spec-impl-coverage.ts +182 -0
  42. package/mutagent-builder/CLAUDE.md +25 -0
  43. package/mutagent-builder/README.md +26 -0
  44. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/README.md +192 -0
  45. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/SKILL.md +352 -0
  46. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/ai-architect.md +256 -0
  47. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/ai-engineer.md +344 -0
  48. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/diagnostics-analyzer.md +576 -0
  49. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/agents/discovery.md +425 -0
  50. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/audit.json.tpl +24 -0
  51. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/audit.md.tpl +49 -0
  52. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/config.yaml.tpl +100 -0
  53. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/pr-body.md.tpl +56 -0
  54. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/report.html.tpl +327 -0
  55. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/README.md +27 -0
  56. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/iter-N-handover.md.tpl +125 -0
  57. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/self-diagnosis-contract.v0.1.0.yaml.tpl +234 -0
  58. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/spec.yaml.tpl +152 -0
  59. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/team.yaml.tpl +127 -0
  60. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/templates/shared/wave-N-dashboard.html.tpl +1712 -0
  61. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.1-nl-query.md +59 -0
  62. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.2-tier0-progress.md +58 -0
  63. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.3-analysis-progress.md +44 -0
  64. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.4-html-report.md +61 -0
  65. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.5-rca-detail.md +69 -0
  66. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/diagnostics/WF-2.6-stale-warning.md +53 -0
  67. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.1-welcome.md +60 -0
  68. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.2-source-platform-picker.md +41 -0
  69. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.3-source-auth.md +75 -0
  70. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.4-target-picker.md +48 -0
  71. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.5-ask-tool.md +43 -0
  72. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.6-config-review.md +57 -0
  73. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.7-filter-defaults.md +52 -0
  74. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/assets/wireframes/onboarding/WF-1.8-first-run.md +59 -0
  75. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/examples/sample-findings.json +92 -0
  76. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/examples/sample-meta.json +47 -0
  77. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/adapter-strategy.md +75 -0
  78. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/config-migration.md +84 -0
  79. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/config.md +159 -0
  80. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/filter-search-matrix.md +66 -0
  81. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/harness-knowledge.md +22 -0
  82. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/memory-format.md +78 -0
  83. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/onboarding-decisions.yaml +187 -0
  84. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/operation-inventory.md +59 -0
  85. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/overview.md +167 -0
  86. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/reference.md +119 -0
  87. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/script-index.md +101 -0
  88. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-adapter-contract.md +93 -0
  89. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/claude-code-transcripts.md +66 -0
  90. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/codex-transcripts.md +78 -0
  91. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/codex.md +145 -0
  92. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/install-paths.md +57 -0
  93. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/langfuse.md +178 -0
  94. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/local-jsonl.md +55 -0
  95. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/openobserve.md +102 -0
  96. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/source-platforms/otel.md +63 -0
  97. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/cloud-rest.md +84 -0
  98. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-claude.md +65 -0
  99. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-cloud-agent-sdk.md +92 -0
  100. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-codex.md +72 -0
  101. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-cursor.md +108 -0
  102. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-mastra.md +77 -0
  103. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/target-platforms/local-opencode.md +70 -0
  104. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/apply-pr-comment-format.md +82 -0
  105. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/diagnostics.md +35 -0
  106. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/handover-contract.md +247 -0
  107. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/onboarding.md +300 -0
  108. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/orchestrator-protocol.md +1861 -0
  109. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/rca.md +331 -0
  110. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/rendering-anatomy.md +314 -0
  111. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/schedule-prep.md +100 -0
  112. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/scope-model.md +128 -0
  113. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/references/workflows/verification-methodology.md +174 -0
  114. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/aggregate/sort-findings.ts +0 -0
  115. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/awareness/blind-spots.ts +167 -0
  116. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/awareness/llm-sample.ts +681 -0
  117. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/doctor.ts +215 -0
  118. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/init.ts +1013 -0
  119. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/install-agents.ts +350 -0
  120. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/run.sh +61 -0
  121. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/cli/shared-templates.ts +79 -0
  122. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/load.ts +392 -0
  123. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/resolve-credential.ts +120 -0
  124. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/schema.ts +641 -0
  125. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/config/validate.ts +134 -0
  126. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/context/build-diagnosis-context.ts +417 -0
  127. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/context/load-context.ts +105 -0
  128. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/contract/types.ts +166 -0
  129. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/build-render-input.ts +1964 -0
  130. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/corpus-severity.ts +172 -0
  131. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/dismissal-match.ts +270 -0
  132. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/enrich/rank-remedies.ts +75 -0
  133. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/hooks/install-hooks.sh +46 -0
  134. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/hooks/pre-push.sh +78 -0
  135. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/invocation/parse-brief.ts +188 -0
  136. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/match.ts +114 -0
  137. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/paths.ts +95 -0
  138. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/store.ts +535 -0
  139. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/library/types.ts +181 -0
  140. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/lint/template-inline-js.ts +267 -0
  141. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/memory/append.ts +188 -0
  142. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/memory/read.ts +218 -0
  143. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/platforms/entity-context.ts +686 -0
  144. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/read-unitf.ts +267 -0
  145. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/trace.ts +1078 -0
  146. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/unitf-adapter.ts +0 -0
  147. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/normalize/unitf-types.ts +213 -0
  148. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/report/persist-selections.ts +174 -0
  149. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/report/render.ts +3254 -0
  150. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/run/diagnose.ts +64 -0
  151. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/run/session.ts +167 -0
  152. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/caps.ts +345 -0
  153. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/deep-read-gate.ts +424 -0
  154. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/sample/representative.ts +584 -0
  155. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/scan/objection.ts +224 -0
  156. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/scan/trajectory.ts +489 -0
  157. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/self-diagnostics/dispatch.ts +135 -0
  158. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/self-diagnostics/probe.ts +170 -0
  159. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/detect.ts +307 -0
  160. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/ensure-cli.ts +315 -0
  161. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/reconfigure.ts +77 -0
  162. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/setup/verify-agents.ts +207 -0
  163. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/slicer.ts +166 -0
  164. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/claude-code.ts +17 -0
  165. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/codex.ts +11 -0
  166. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/langfuse.ts +17 -0
  167. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/local-jsonl.ts +12 -0
  168. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/adapters/otel.ts +12 -0
  169. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/index.ts +54 -0
  170. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/registry.ts +45 -0
  171. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/source/types.ts +86 -0
  172. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/stale-detector.ts +74 -0
  173. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/test/render-playwright.cli.ts +477 -0
  174. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0/claude-code.ts +133 -0
  175. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0/langfuse.ts +143 -0
  176. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/tier0-scan.ts +423 -0
  177. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/completeness-check.ts +436 -0
  178. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/doc-refs.ts +190 -0
  179. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/finalize-gate.ts +417 -0
  180. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/findings-contract.ts +628 -0
  181. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/render-js-syntax.ts +188 -0
  182. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/report-checklist.yaml +217 -0
  183. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/trace-shape.ts +262 -0
  184. package/mutagent-diagnostics/.claude/skills/mutagent-diagnostics/scripts/validate/wave6-checklist.ts +326 -0
  185. package/mutagent-diagnostics/CLAUDE.md +41 -0
  186. package/mutagent-diagnostics/LICENSE +201 -0
  187. package/mutagent-diagnostics/NOTICE +18 -0
  188. package/mutagent-diagnostics/README.md +343 -0
  189. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/SKILL.md +548 -0
  190. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/audit-executor.md +169 -0
  191. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/dataset-builder.md +160 -0
  192. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/discovery.md +425 -0
  193. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/agents/evaluator.md +1108 -0
  194. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/brand/theme.css +213 -0
  195. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/assets/brand/wordmark.html +9 -0
  196. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/context-flow-lens.md +85 -0
  197. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/data-lens.md +47 -0
  198. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/decision-lens.md +48 -0
  199. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/methodology-critic-lens.md +53 -0
  200. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/lenses/trajectory-lens.md +44 -0
  201. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/build-review-interface.md +83 -0
  202. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/edd-loop.md +134 -0
  203. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/error-analysis.md +113 -0
  204. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/eval-audit.md +154 -0
  205. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/eval-stage.md +168 -0
  206. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/generate-synthetic-data.md +81 -0
  207. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/grounded-adjudication.md +221 -0
  208. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/memory-format.md +65 -0
  209. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/methodology.md +201 -0
  210. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/operation-inventory.md +197 -0
  211. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/validate-evaluator.md +125 -0
  212. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/workflows/orchestrator-protocol.md +300 -0
  213. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/references/write-judge-prompt.md +123 -0
  214. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/behavior-tree.schema.yaml +73 -0
  215. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/dataset.schema.yaml +66 -0
  216. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/edd-change-request.schema.yaml +114 -0
  217. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/eval-matrix.schema.yaml +74 -0
  218. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/flow-graph.schema.yaml +69 -0
  219. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/flow-profile.schema.yaml +49 -0
  220. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/methodology-review.schema.yaml +40 -0
  221. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/schemas/scorecard.schema.yaml +85 -0
  222. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/agent-dispatch.ts +0 -0
  223. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/aggregate-discover.ts +543 -0
  224. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/artifact-paths.ts +115 -0
  225. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/assemble-scorecard.ts +172 -0
  226. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-dataset.ts +186 -0
  227. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-evals.ts +93 -0
  228. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/build-review-ui.ts +393 -0
  229. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/check-method-router.ts +170 -0
  230. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/aggregate.ts +112 -0
  231. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/audit-run.ts +182 -0
  232. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/doctor.ts +211 -0
  233. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/dogfood.ts +133 -0
  234. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/init.ts +601 -0
  235. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/methodology-review.ts +122 -0
  236. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/prep.ts +295 -0
  237. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/profile-subject.ts +165 -0
  238. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/run.sh +56 -0
  239. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cli/variance-check.ts +105 -0
  240. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/code-eval.ts +248 -0
  241. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/code-quality-verdict.ts +285 -0
  242. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/codegen-evals.ts +173 -0
  243. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cold-start-project.ts +151 -0
  244. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/cold-start-sampler.ts +267 -0
  245. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/config/load.ts +343 -0
  246. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/config/schema.ts +380 -0
  247. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/agentspec-evals.ts +85 -0
  248. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/dataset.ts +149 -0
  249. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-engine.ts +118 -0
  250. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-matrix.ts +577 -0
  251. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/eval-types.ts +1074 -0
  252. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/flow-graph.ts +194 -0
  253. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/types.ts +303 -0
  254. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/contracts/validation.ts +193 -0
  255. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/derive-dataset.ts +152 -0
  256. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/determine-outcome.ts +219 -0
  257. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/diff-discriminate.ts +160 -0
  258. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/discover-criteria.ts +348 -0
  259. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/change-request.ts +232 -0
  260. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/edd-types.ts +210 -0
  261. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/edd/variance-gate.ts +186 -0
  262. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/emit-completeness.ts +111 -0
  263. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/eval-engine.ts +160 -0
  264. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/evaluate.ts +333 -0
  265. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/flow-graph.ts +230 -0
  266. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/judge-prompt-template.ts +253 -0
  267. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/judge-provider.ts +135 -0
  268. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/lint-grounding.ts +229 -0
  269. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/lint-uniformity.ts +168 -0
  270. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/living-suite.ts +109 -0
  271. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-bundle.ts +203 -0
  272. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-profile-vocab.ts +64 -0
  273. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/load-profile.ts +106 -0
  274. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/mask.ts +138 -0
  275. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/materialize-dataset.ts +113 -0
  276. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/matrix-judge.ts +750 -0
  277. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/memory/append.ts +215 -0
  278. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/memory/read.ts +168 -0
  279. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/persist-eval-criteria.ts +232 -0
  280. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/prep-tasks.ts +125 -0
  281. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/profile-subject.ts +310 -0
  282. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/publish-report.ts +131 -0
  283. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/read-unitf-traces.ts +81 -0
  284. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-build-cards.ts +195 -0
  285. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-discover-report.ts +1640 -0
  286. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-eval-report.ts +3838 -0
  287. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/render-report.ts +212 -0
  288. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/resolve-credential.ts +110 -0
  289. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/resolve-ref.ts +98 -0
  290. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/result-verify.ts +129 -0
  291. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/route-failures.ts +330 -0
  292. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-deterministic.ts +367 -0
  293. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-evaluate.ts +719 -0
  294. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-judge.ts +155 -0
  295. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/run-pipeline.ts +175 -0
  296. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/sample-traces.ts +210 -0
  297. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/self-audit.ts +387 -0
  298. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/source-map.ts +106 -0
  299. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/subject-profile.ts +134 -0
  300. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/substrate.ts +162 -0
  301. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/sync-eval-criteria.ts +244 -0
  302. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/ui-slots.ts +119 -0
  303. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/unitf-to-evaltrace.ts +284 -0
  304. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/validate-judge.ts +358 -0
  305. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/scripts/variance-compare.ts +177 -0
  306. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/behavior-tree.yaml +140 -0
  307. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/eval-matrix.yaml +1270 -0
  308. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/subjects/mutagent-diagnostics/methodology-review.yaml +105 -0
  309. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/audit.workflow.js +82 -0
  310. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/data-leak.workflow.js +236 -0
  311. package/mutagent-evaluator/.claude/skills/mutagent-evaluator/workflows/variance.workflow.js +163 -0
  312. package/mutagent-evaluator/CLAUDE.md +45 -0
  313. package/mutagent-evaluator/LICENSE +201 -0
  314. package/mutagent-evaluator/NOTICE +23 -0
  315. package/mutagent-evaluator/README.md +88 -0
  316. package/mutagent-optimize/.claude/skills/mutagent-optimize/SKILL.md +287 -0
  317. package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/contracts/amend-request.ts +503 -0
  318. package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/improve-loop-run.ts +304 -0
  319. package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/loop-state-cli.ts +300 -0
  320. package/mutagent-optimize/.claude/skills/mutagent-optimize/scripts/loop-state.ts +440 -0
  321. package/mutagent-optimize/CLAUDE.md +49 -0
  322. package/mutagent-optimize/README.md +26 -0
  323. package/mutagent-orchestrator/CLAUDE.md +102 -0
  324. package/mutagent-orchestrator/README.md +20 -0
  325. package/mutagent-orchestrator/assets/agents/discovery.md +425 -0
  326. package/mutagent-orchestrator/assets/agents/dogfood-monitor.md +266 -0
  327. package/mutagent-orchestrator/assets/agents/monitor.md +258 -0
  328. package/mutagent-orchestrator/orchestrator.md +782 -0
  329. package/mutagent-orchestrator/references/MONITORING.md +209 -0
  330. package/mutagent-orchestrator/references/config-fields.md +132 -0
  331. package/mutagent-orchestrator/references/config-migration.md +132 -0
  332. package/mutagent-orchestrator/references/index-registry.md +92 -0
  333. package/mutagent-orchestrator/routing.yaml +391 -0
  334. package/mutagent-orchestrator/scripts/config-schema.ts +1010 -0
  335. package/mutagent-orchestrator/scripts/dispatch.ts +439 -0
  336. package/mutagent-orchestrator/scripts/dogfood/extract-feedback.ts +203 -0
  337. package/mutagent-orchestrator/scripts/dogfood/reconstruct-trajectory.ts +327 -0
  338. package/mutagent-orchestrator/scripts/dogfood/render-dogfood-report.ts +347 -0
  339. package/mutagent-orchestrator/scripts/dogfood/resolve-subagents.ts +160 -0
  340. package/mutagent-orchestrator/scripts/dogfood/run-report.ts +264 -0
  341. package/mutagent-orchestrator/scripts/dogfood/slack-thread.ts +106 -0
  342. package/mutagent-orchestrator/scripts/dogfood/types.ts +257 -0
  343. package/mutagent-orchestrator/scripts/eval-routing.ts +753 -0
  344. package/mutagent-orchestrator/scripts/gate.ts +219 -0
  345. package/mutagent-orchestrator/scripts/handover-contract.ts +362 -0
  346. package/mutagent-orchestrator/scripts/index/build-index.ts +351 -0
  347. package/mutagent-orchestrator/scripts/index/render-index.ts +110 -0
  348. package/mutagent-orchestrator/scripts/monitor/slack-notify.ts +111 -0
  349. package/mutagent-orchestrator/scripts/monitor/triggers.ts +162 -0
  350. package/mutagent-orchestrator/scripts/onboarding-check.ts +369 -0
  351. package/mutagent-orchestrator/scripts/render-roster.ts +308 -0
  352. package/mutagent-orchestrator/scripts/resolve-credential.ts +185 -0
  353. package/mutagent-orchestrator/scripts/resolve-paths.ts +114 -0
  354. package/mutagent-orchestrator/scripts/slack/format.ts +63 -0
  355. package/mutagent-orchestrator/scripts/slack/post.ts +115 -0
  356. package/mutagent-orchestrator/scripts/sync-index.ts +311 -0
  357. 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
+ }