@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,115 @@
1
+ /**
2
+ * scripts/artifact-paths.ts — P8 (EV-REQ-058): the localized artifact hierarchy resolver.
3
+ * ---------------------------------------------------------------------------
4
+ * The EVALUATOR reference implementation of the operator's NO-SPILLOVER goal:
5
+ * every durable artifact the engine writes resolves under ONE namespaced root
6
+ * — `<workspace>/.mutagent/evaluator/` — the evaluator's stage sub-dir of the
7
+ * unified LOCAL `.mutagent/` (sibling to the diagnostics `.mutagent/diagnostics/`
8
+ * precedent; pattern, not import). A published skill
9
+ * running in a CONSUMER's repo therefore never litters their tracked source tree:
10
+ * the root is auto-gitignored (parity with `.mutagent/`).
11
+ *
12
+ * Hierarchy (deterministic):
13
+ * .mutagent/evaluator/
14
+ * runs/<runId>/{ingest,tasks,verdicts,packets,source-map,scorecard}/
15
+ * reports/<runId>/
16
+ * living-suite/
17
+ * datasets/
18
+ *
19
+ * PURE + deterministic: `runId` + `cwd` are PASSED IN — there is NO clock/random in
20
+ * path construction (a runId is never `Date.now()` here), so the same inputs always
21
+ * yield the same paths (C-PIN-safe: P8 changes WHERE artifacts land, never WHAT).
22
+ *
23
+ * NO-SPILLOVER guard: every resolver output flows through `assertUnderRoot`, which
24
+ * THROWS if a path escapes the root (a `..` traversal or an absolute path outside)
25
+ * — so even a malicious path-traversal `runId` fails loud instead of writing
26
+ * outside the namespace.
27
+ */
28
+ import { isAbsolute, join, relative, resolve } from "node:path";
29
+
30
+ /**
31
+ * The single namespaced root every durable artifact lives under — the evaluator's
32
+ * stage sub-dir of the unified LOCAL `.mutagent/` (operator decision 2026-06-29;
33
+ * relocated from the former per-stage dot-root).
34
+ */
35
+ export const ARTIFACT_ROOT_NAME = ".mutagent/evaluator";
36
+
37
+ /** Resolve the artifact root: `<cwd>/.mutagent/evaluator`. `cwd` passed in (pure). */
38
+ export function artifactRoot(cwd: string = process.cwd()): string {
39
+ return resolve(cwd, ARTIFACT_ROOT_NAME);
40
+ }
41
+
42
+ /**
43
+ * NO-SPILLOVER guard. Resolve `path` and assert it is INSIDE `artifactRoot(cwd)`;
44
+ * THROW otherwise (a `..` escape or an absolute path outside the root). Returns the
45
+ * input path unchanged on success (so resolvers can `return assertUnderRoot(...)`).
46
+ */
47
+ export function assertUnderRoot(path: string, cwd?: string): string {
48
+ const root = artifactRoot(cwd);
49
+ const rel = relative(root, resolve(path));
50
+ if (rel === ".." || rel.startsWith(".." + "/") || rel.startsWith("..\\") || isAbsolute(rel)) {
51
+ throw new Error(
52
+ `assertUnderRoot: path '${path}' ESCAPES the artifact root '${root}' — ` +
53
+ "no-spillover invariant (EV-REQ-058): the engine writes ONLY under its " +
54
+ "namespaced dot-root, never the consumer's tracked source tree.",
55
+ );
56
+ }
57
+ return path;
58
+ }
59
+
60
+ /** Internal: join under the root + assert no escape (catches a traversal runId). */
61
+ function underRoot(cwd: string | undefined, ...segments: string[]): string {
62
+ return assertUnderRoot(join(artifactRoot(cwd), ...segments), cwd);
63
+ }
64
+
65
+ // ── per-run hierarchy ───────────────────────────────────────────────────────
66
+
67
+ export function runDir(runId: string, cwd?: string): string {
68
+ return underRoot(cwd, "runs", runId);
69
+ }
70
+ export function ingestDir(runId: string, cwd?: string): string {
71
+ return underRoot(cwd, "runs", runId, "ingest");
72
+ }
73
+ export function tasksDir(runId: string, cwd?: string): string {
74
+ return underRoot(cwd, "runs", runId, "tasks");
75
+ }
76
+ export function verdictsDir(runId: string, cwd?: string): string {
77
+ return underRoot(cwd, "runs", runId, "verdicts");
78
+ }
79
+ export function packetsDir(runId: string, cwd?: string): string {
80
+ return underRoot(cwd, "runs", runId, "packets");
81
+ }
82
+ export function sourceMapDir(runId: string, cwd?: string): string {
83
+ return underRoot(cwd, "runs", runId, "source-map");
84
+ }
85
+ export function scorecardDir(runId: string, cwd?: string): string {
86
+ return underRoot(cwd, "runs", runId, "scorecard");
87
+ }
88
+
89
+ // ── cross-run hierarchy ─────────────────────────────────────────────────────
90
+
91
+ export function reportDir(runId: string, cwd?: string): string {
92
+ return underRoot(cwd, "reports", runId);
93
+ }
94
+
95
+ // ── the three named report artifacts (evaluator-reports PRD R-1/R-3) ──────────
96
+ // Distinct names under ONE run folder — no `report.html` collision, and *audit no longer
97
+ // writes under `.mutagent/diagnostics/`. Single resolver = single source of truth.
98
+ /** `*evaluate` → the 5-tab judge report. */
99
+ export function evaluationReportPath(runId: string, cwd?: string): string {
100
+ return underRoot(cwd, "reports", runId, "evaluation-report.html");
101
+ }
102
+ /** `*discover-evals` → the mined-criteria report. */
103
+ export function discoveryReportPath(runId: string, cwd?: string): string {
104
+ return underRoot(cwd, "reports", runId, "discovery-report.html");
105
+ }
106
+ /** `*audit` → the 4-tab master-audit (now under the evaluator root, not diagnostics). */
107
+ export function masterAuditPath(runId: string, cwd?: string): string {
108
+ return underRoot(cwd, "reports", runId, "master-audit.html");
109
+ }
110
+ export function livingSuiteDir(cwd?: string): string {
111
+ return underRoot(cwd, "living-suite");
112
+ }
113
+ export function datasetsDir(cwd?: string): string {
114
+ return underRoot(cwd, "datasets");
115
+ }
@@ -0,0 +1,172 @@
1
+ /**
2
+ * scripts/assemble-scorecard.ts
3
+ * ---------------------------------------------------------------------------
4
+ * The two-track rollup (decision #5). GATE and TREND are assembled SEPARATELY
5
+ * and NEVER merged.
6
+ *
7
+ * Track-1 GATE — binary, severity-gated. Component PASS iff 0 CRIT/HIGH rows
8
+ * FAIL. Run PASS iff every component passes. (skip != fail.)
9
+ * Track-2 TREND — the manual's 15-dim variance score, carried verbatim from
10
+ * the variance comparator (or an empty/zeroed frame on a
11
+ * single-run audit).
12
+ *
13
+ * Pure + deterministic: rows are grouped in stable order; no clock/random. The
14
+ * generatedAt is injected by the caller so byte-identity masking is satisfiable.
15
+ */
16
+ import {
17
+ type CoverageOptions,
18
+ type DeterministicRowResult,
19
+ computeCoverage,
20
+ } from "./run-deterministic.ts";
21
+ import {
22
+ type GateComponent,
23
+ type RunVerdictValue,
24
+ type Scorecard,
25
+ type ScorecardCriterion,
26
+ type TrendDimension,
27
+ RowResult,
28
+ RunVerdict,
29
+ Severity,
30
+ } from "./contracts/types.ts";
31
+
32
+ const GATING_SEVERITIES: ReadonlySet<string> = new Set([
33
+ Severity.Crit,
34
+ Severity.High,
35
+ ]);
36
+
37
+ export interface AssembleInput {
38
+ subject: string;
39
+ runId: string;
40
+ generatedAt: string;
41
+ rows: DeterministicRowResult[];
42
+ /** Track-2 trend dimensions (from variance-compare). Empty on single-run. */
43
+ trendDimensions?: TrendDimension[];
44
+ trendRunPair?: { a: string; b: string };
45
+ /**
46
+ * Coverage-honesty options (EV-OUT-002). Controls the skip-rate WARNING
47
+ * threshold only — never alters gate pass/fail. Defaults preserve behavior.
48
+ */
49
+ coverageOptions?: CoverageOptions;
50
+ }
51
+
52
+ /** Group rows by componentId, preserving first-seen order. */
53
+ function groupByComponent(
54
+ rows: DeterministicRowResult[],
55
+ ): { componentId: string; criteria: ScorecardCriterion[] }[] {
56
+ const order: string[] = [];
57
+ const map = new Map<string, ScorecardCriterion[]>();
58
+ for (const r of rows) {
59
+ if (!map.has(r.componentId)) {
60
+ map.set(r.componentId, []);
61
+ order.push(r.componentId);
62
+ }
63
+ map.get(r.componentId)!.push(r.criterion);
64
+ }
65
+ return order.map((componentId) => ({
66
+ componentId,
67
+ criteria: map.get(componentId)!,
68
+ }));
69
+ }
70
+
71
+ /** Track-1: a component passes iff no CRIT/HIGH criterion FAILED (skip != fail). */
72
+ function componentPass(criteria: ScorecardCriterion[]): boolean {
73
+ return !criteria.some(
74
+ (c) => c.result === RowResult.Fail && GATING_SEVERITIES.has(c.severity),
75
+ );
76
+ }
77
+
78
+ /**
79
+ * GA — the component TERNARY verdict `fail ▸ incomplete ▸ pass`:
80
+ * fail iff a CRIT/HIGH criterion FAILED.
81
+ * incomplete iff (no CRIT/HIGH fail) AND a CRIT/HIGH criterion was INDETERMINATE.
82
+ * pass otherwise.
83
+ * The v1 audit path never emits `incomplete` rows ⇒ this returns pass/fail only
84
+ * there (byte-compatible with `componentPass`).
85
+ */
86
+ function componentVerdict(criteria: ScorecardCriterion[]): RunVerdictValue {
87
+ const gatingFail = criteria.some(
88
+ (c) => c.result === RowResult.Fail && GATING_SEVERITIES.has(c.severity),
89
+ );
90
+ if (gatingFail) return RunVerdict.Fail;
91
+ const gatingIndeterminate = criteria.some(
92
+ (c) => c.result === RowResult.Incomplete && GATING_SEVERITIES.has(c.severity),
93
+ );
94
+ return gatingIndeterminate ? RunVerdict.Incomplete : RunVerdict.Pass;
95
+ }
96
+
97
+ export function assembleScorecard(input: AssembleInput): Scorecard {
98
+ const grouped = groupByComponent(input.rows);
99
+
100
+ const gateComponents: GateComponent[] = grouped.map((g) => ({
101
+ componentId: g.componentId,
102
+ pass: componentPass(g.criteria),
103
+ verdict: componentVerdict(g.criteria),
104
+ criteria: g.criteria,
105
+ }));
106
+
107
+ // Totals across ALL criteria (both tracks).
108
+ let pass = 0;
109
+ let fail = 0;
110
+ let skip = 0;
111
+ let critFail = 0;
112
+ let highFail = 0;
113
+ let incomplete = 0;
114
+ for (const g of gateComponents) {
115
+ for (const c of g.criteria) {
116
+ if (c.result === RowResult.Pass) pass += 1;
117
+ else if (c.result === RowResult.Fail) {
118
+ fail += 1;
119
+ if (c.severity === Severity.Crit) critFail += 1;
120
+ else if (c.severity === Severity.High) highFail += 1;
121
+ } else if (c.result === RowResult.Incomplete) incomplete += 1;
122
+ else skip += 1;
123
+ }
124
+ }
125
+
126
+ // GA — the ternary run verdict: fail ▸ incomplete ▸ pass.
127
+ const runVerdict: RunVerdictValue = gateComponents.some(
128
+ (g) => g.verdict === RunVerdict.Fail,
129
+ )
130
+ ? RunVerdict.Fail
131
+ : gateComponents.some((g) => g.verdict === RunVerdict.Incomplete)
132
+ ? RunVerdict.Incomplete
133
+ : RunVerdict.Pass;
134
+ // back-compat: runPass is now exactly `runVerdict === "pass"`. For the v1 audit
135
+ // path (which never emits `incomplete` rows) this is byte-identical to the old
136
+ // `every(component.pass)`; GA's only behavior delta is incomplete ⇒ runPass=false.
137
+ const runPass = runVerdict === RunVerdict.Pass;
138
+
139
+ // Coverage honesty (EV-OUT-002): graded-vs-total + skip-rate warning, derived
140
+ // from the SAME totals the gate uses. Warning-only — `runPass` above is the
141
+ // sole pass/fail authority; coverage NEVER mutates it.
142
+ const coverage = computeCoverage(
143
+ { pass, fail, skip },
144
+ input.coverageOptions,
145
+ );
146
+
147
+ // Track-2 TREND: assembled SEPARATELY. varianceScore = count of dimensions
148
+ // that diverged beyond target.
149
+ const dimensions = input.trendDimensions ?? [];
150
+ const varianceScore = dimensions.filter(
151
+ (d) => d.divergence === "diverged",
152
+ ).length;
153
+
154
+ const scorecard: Scorecard = {
155
+ subject: input.subject,
156
+ runId: input.runId,
157
+ generatedAt: input.generatedAt,
158
+ coverage,
159
+ gate: {
160
+ runPass,
161
+ runVerdict,
162
+ components: gateComponents,
163
+ totals: { pass, fail, skip, critFail, highFail, incomplete },
164
+ },
165
+ trend: {
166
+ ...(input.trendRunPair ? { runPair: input.trendRunPair } : {}),
167
+ dimensions,
168
+ varianceScore,
169
+ },
170
+ };
171
+ return scorecard;
172
+ }
@@ -0,0 +1,186 @@
1
+ /**
2
+ * scripts/build-dataset.ts — EV-046 `*build-dataset` deterministic half (Type A — DATA only).
3
+ * ---------------------------------------------------------------------------
4
+ * The Code-only piece of the 3-way `*build-dataset` Hybrid (operation-inventory):
5
+ * - HITL seed interview (~10 tuples) → AskUserQuestion / chat gate
6
+ * - tuple gen · NL query · quality judgment → `assets/agents/dataset-builder.md`
7
+ * - cartesian expand · dedup · near-dup · id · append → THIS FILE
8
+ *
9
+ * Holds NO prompt prose and makes NO realism judgment (that is the agent's). It
10
+ * only does the deterministic shape: enumerate the dimension cartesian product,
11
+ * drop exact + near-duplicate cases, assign a content-derived id, and merge into
12
+ * the growing dataset MONOTONICALLY (existing cases are never dropped). The
13
+ * near-duplicate REMOVAL is deterministic token-Jaccard — the agent PROPOSES
14
+ * realism, the script ENFORCES non-redundancy.
15
+ *
16
+ * PURE — no clock / random / network. Same (input) → same output (reproducible
17
+ * datasets, C-PIN-adjacent). Subject-agnostic (dimensions are DATA).
18
+ */
19
+ import {
20
+ type Dataset,
21
+ type DatasetCase,
22
+ type DatasetTuple,
23
+ type Dimension,
24
+ type CaseSourceValue,
25
+ tupleKey,
26
+ } from "./contracts/dataset.ts";
27
+ import { appendOnly, assertMonotonicGrowth } from "./living-suite.ts";
28
+
29
+ // ── cartesian tuples (generate-synthetic-data Step 2 mechanics) ──────────────
30
+
31
+ /** Guard so a pathological dimension set can't blow up memory. */
32
+ const DEFAULT_MAX_TUPLES = 5000;
33
+
34
+ /**
35
+ * The full cartesian product of the dimensions' values, in a DETERMINISTIC
36
+ * order (dimensions in given order, values in given order). THROWS if the
37
+ * product would exceed `maxTuples` (fail-loud, not silent truncation). PURE.
38
+ */
39
+ export function cartesianTuples(
40
+ dimensions: Dimension[],
41
+ maxTuples = DEFAULT_MAX_TUPLES,
42
+ ): DatasetTuple[] {
43
+ if (dimensions.length === 0) return [];
44
+ const total = dimensions.reduce((n, d) => n * d.values.length, 1);
45
+ if (total > maxTuples) {
46
+ throw new Error(
47
+ `cartesianTuples: ${total} combinations exceeds maxTuples=${maxTuples}. ` +
48
+ "Reduce dimensions/values or raise the cap explicitly (no silent truncation).",
49
+ );
50
+ }
51
+ let acc: DatasetTuple[] = [{}];
52
+ for (const dim of dimensions) {
53
+ const next: DatasetTuple[] = [];
54
+ for (const partial of acc) {
55
+ for (const v of dim.values) next.push({ ...partial, [dim.name]: v });
56
+ }
57
+ acc = next;
58
+ }
59
+ return acc;
60
+ }
61
+
62
+ /** Remove exact-duplicate tuples by canonical key, preserving first-seen order. PURE. */
63
+ export function dedupTuples(tuples: DatasetTuple[]): DatasetTuple[] {
64
+ const seen = new Set<string>();
65
+ const out: DatasetTuple[] = [];
66
+ for (const t of tuples) {
67
+ const k = tupleKey(t);
68
+ if (!seen.has(k)) {
69
+ seen.add(k);
70
+ out.push(t);
71
+ }
72
+ }
73
+ return out;
74
+ }
75
+
76
+ // ── near-duplicate query filter (generate-synthetic-data Step 5) ─────────────
77
+
78
+ /** Normalize a query to a token set (lowercase word tokens). PURE. */
79
+ export function queryTokens(q: string): Set<string> {
80
+ return new Set(
81
+ q
82
+ .toLowerCase()
83
+ .split(/[^a-z0-9]+/)
84
+ .filter((t) => t.length > 0),
85
+ );
86
+ }
87
+
88
+ /** Token-set Jaccard similarity in [0,1]. Two empty sets → 1 (identical). PURE. */
89
+ export function jaccard(a: Set<string>, b: Set<string>): number {
90
+ if (a.size === 0 && b.size === 0) return 1;
91
+ let inter = 0;
92
+ for (const t of a) if (b.has(t)) inter++;
93
+ const union = a.size + b.size - inter;
94
+ return union === 0 ? 0 : inter / union;
95
+ }
96
+
97
+ /**
98
+ * Drop cases whose query is ≥ `threshold` Jaccard-similar to an already-kept
99
+ * case (the "queries too similar to each other" filter). DETERMINISTIC — first
100
+ * occurrence in input order is kept. PURE.
101
+ */
102
+ export function dedupNearQueries(cases: DatasetCase[], threshold = 0.8): DatasetCase[] {
103
+ const keptTokens: Set<string>[] = [];
104
+ const out: DatasetCase[] = [];
105
+ for (const c of cases) {
106
+ const toks = queryTokens(c.query);
107
+ const dup = keptTokens.some((k) => jaccard(toks, k) >= threshold);
108
+ if (!dup) {
109
+ keptTokens.push(toks);
110
+ out.push(c);
111
+ }
112
+ }
113
+ return out;
114
+ }
115
+
116
+ // ── deterministic content-derived case id (no clock/random) ──────────────────
117
+
118
+ /** FNV-1a 32-bit hex of a string — a stable, dependency-free content hash. PURE. */
119
+ export function fnv1aHex(s: string): string {
120
+ let h = 0x811c9dc5;
121
+ for (let i = 0; i < s.length; i++) {
122
+ h ^= s.charCodeAt(i);
123
+ h = Math.imul(h, 0x01000193);
124
+ }
125
+ return (h >>> 0).toString(16).padStart(8, "0");
126
+ }
127
+
128
+ /** A stable id derived from the tuple + query (so re-builds collide → dedup). PURE. */
129
+ export function caseId(tuple: DatasetTuple, query: string): string {
130
+ return `case-${fnv1aHex(`${tupleKey(tuple)}::${query}`)}`;
131
+ }
132
+
133
+ /** Assemble a DatasetCase with a content-derived id. PURE. */
134
+ export function buildCase(
135
+ tuple: DatasetTuple,
136
+ query: string,
137
+ source: CaseSourceValue,
138
+ originTraceId?: string,
139
+ extra?: { selectedBy?: string; rationale?: string },
140
+ ): DatasetCase {
141
+ const c: DatasetCase = { id: caseId(tuple, query), tuple, query, source };
142
+ if (originTraceId !== undefined) c.originTraceId = originTraceId;
143
+ if (extra?.selectedBy !== undefined) c.selectedBy = extra.selectedBy;
144
+ if (extra?.rationale !== undefined) c.rationale = extra.rationale;
145
+ return c;
146
+ }
147
+
148
+ // ── monotonic merge into the growing dataset (EV-053 co-develop) ─────────────
149
+
150
+ /**
151
+ * Merge incoming cases into existing, deduped by id AND near-duplicate query,
152
+ * MONOTONICALLY — every existing case is retained (the suite never shrinks); only
153
+ * genuinely-novel, non-near-duplicate incoming cases are added. DETERMINISTIC.
154
+ * Routes the append through `living-suite.ts` (`appendOnly` for the id-dedup +
155
+ * `assertMonotonicGrowth` for the EV-053 invariant); the near-duplicate-query
156
+ * filter is the dataset-specific specialization layered on top.
157
+ */
158
+ export function mergeCases(
159
+ existing: DatasetCase[],
160
+ incoming: DatasetCase[],
161
+ threshold = 0.8,
162
+ ): DatasetCase[] {
163
+ const byId = new Set(existing.map((c) => c.id));
164
+ // near-dup filter the novel cases against the existing queries first, then each other.
165
+ const keptTokens: Set<string>[] = existing.map((c) => queryTokens(c.query));
166
+ const novel: DatasetCase[] = [];
167
+ for (const c of incoming) {
168
+ if (byId.has(c.id)) continue;
169
+ const toks = queryTokens(c.query);
170
+ if (keptTokens.some((k) => jaccard(toks, k) >= threshold)) continue;
171
+ keptTokens.push(toks);
172
+ novel.push(c);
173
+ }
174
+ const out = appendOnly(existing, novel, (c) => c.id); // monotonic append via living-suite
175
+ assertMonotonicGrowth(existing, out, (c) => c.id); // EV-053 invariant (fail-loud)
176
+ return out;
177
+ }
178
+
179
+ /**
180
+ * Append cases into a Dataset, bumping the version. MONOTONIC: `cases` only
181
+ * grows. Returns a NEW Dataset (no mutation). DETERMINISTIC.
182
+ */
183
+ export function appendToDataset(dataset: Dataset, incoming: DatasetCase[], threshold = 0.8): Dataset {
184
+ const cases = mergeCases(dataset.cases, incoming, threshold);
185
+ return { ...dataset, cases, version: dataset.version + 1 };
186
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * scripts/build-evals.ts — EV-043 `*build-evals` judge-SPEC builder (Type A — DATA only).
3
+ * ---------------------------------------------------------------------------
4
+ * Assembles the DATA a per-criterion judge needs (the 4-component judge SPEC) +
5
+ * the held-out TRAIN/EVAL split + the data-leakage guard. The judging itself —
6
+ * rendering the prompt + producing the verdict — is NOT here:
7
+ * - under the DEFAULT agent-dispatch substrate the verdict comes from a
8
+ * dispatched `eval-judge` subagent (the rubric is in `eval-judge.md`);
9
+ * - the OPTIONAL in-house/export prompt rendering + run-wrapper (`runJudge`)
10
+ * live in `judge-prompt-template.ts` (the EV-050 exception).
11
+ *
12
+ * Script austerity (operator directive): this script holds NO judge prompt and
13
+ * NO LLM-reasoning logic. It keeps only the Type-A pieces:
14
+ * 1. the held-out split (`splitTrainEval`) — deterministic, reproducible;
15
+ * 2. the data-leakage guard (`assertExemplarsFromTrain`) — few-shot from TRAIN
16
+ * only, or THROW;
17
+ * 3. the 4-component judge SPEC (`buildJudgeSpec`) — DATA (criterion statement,
18
+ * binary Pass/Fail definitions, few-shot), NO Likert.
19
+ * PURE — no clock/random/network.
20
+ */
21
+ import type { LabeledTrace } from "./sample-traces.ts";
22
+ import {
23
+ type DiscoveredCriterion,
24
+ type JudgeExemplar,
25
+ type JudgeSpec,
26
+ } from "./contracts/eval-types.ts";
27
+
28
+ /** A pinned judge declaration. Pinned iff modelId present AND temperature===0. */
29
+ export interface JudgePin {
30
+ modelId: string;
31
+ temperature: number;
32
+ }
33
+
34
+ export interface TrainEvalSplit {
35
+ /** the small TRAIN split — few-shot exemplars are drawn ONLY from here. */
36
+ train: LabeledTrace[];
37
+ /** the held-out EVAL split — judges are validated/run against this. */
38
+ evalSet: LabeledTrace[];
39
+ }
40
+
41
+ /**
42
+ * Set aside a TRAIN split (default 15%, the 10-20% band) for few-shot, holding
43
+ * out the rest for eval. Deterministic: orders by traceId, takes the first
44
+ * fraction as train (no random, no clock) so splits are reproducible.
45
+ */
46
+ export function splitTrainEval(
47
+ labeled: LabeledTrace[],
48
+ trainFraction = 0.15,
49
+ ): TrainEvalSplit {
50
+ const ordered = [...labeled].sort((a, b) => a.trace.id.localeCompare(b.trace.id));
51
+ const n = Math.max(0, Math.min(ordered.length, Math.round(ordered.length * trainFraction)));
52
+ return { train: ordered.slice(0, n), evalSet: ordered.slice(n) };
53
+ }
54
+
55
+ /**
56
+ * Guard against data leakage: every few-shot exemplar MUST come from the train
57
+ * split. A dev/test exemplar used as few-shot is leakage — THROW.
58
+ */
59
+ export function assertExemplarsFromTrain(
60
+ exemplars: JudgeExemplar[],
61
+ trainIds: ReadonlySet<string>,
62
+ ): void {
63
+ for (const ex of exemplars) {
64
+ if (!trainIds.has(ex.traceId)) {
65
+ throw new Error(
66
+ `assertExemplarsFromTrain: exemplar '${ex.traceId}' is NOT in the train ` +
67
+ "split — using a dev/test trace as a few-shot example is DATA LEAKAGE. " +
68
+ "Draw few-shot only from splitTrainEval().train.",
69
+ );
70
+ }
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Build the judge spec (4 components) for one criterion. Pass def = the
76
+ * criterion statement; fail def = its negation. Few-shot is validated against
77
+ * the train split (leakage guard). PURE.
78
+ */
79
+ export function buildJudgeSpec(
80
+ criterion: DiscoveredCriterion,
81
+ fewShot: JudgeExemplar[],
82
+ trainIds: ReadonlySet<string>,
83
+ ): JudgeSpec {
84
+ assertExemplarsFromTrain(fewShot, trainIds);
85
+ return {
86
+ criterionId: criterion.id,
87
+ statement: criterion.statement,
88
+ passDefinition: `Pass = ${criterion.statement}.`,
89
+ failDefinition: `Fail = the agent fails to satisfy: ${criterion.statement}.`,
90
+ fewShot,
91
+ judgeKind: criterion.judgeKind,
92
+ };
93
+ }