@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,168 @@
1
+ /**
2
+ * scripts/lint-uniformity.ts — the UNIFORM EVAL-STANDARD validator (loud, deterministic).
3
+ * ---------------------------------------------------------------------------
4
+ * The operator-signed-off "uniform eval standard": every MinedCriterion carries a
5
+ * uniform check representation, and the EXECUTABLE half (`codeEval`) must MATCH
6
+ * the declared `check_method`. This is the deterministic, code-only gate that
7
+ * makes the standard real — it kills the "tier-0 inert" defect where a criterion
8
+ * is TYPED code/hybrid but ships no runnable `codeEval`, so the tier-0 pre-pass
9
+ * silently falls back to the LLM judge (wasting the deterministic signal +
10
+ * breaking C-PIN). Mirrors `lint-grounding.ts`: pure, criterion-ordered findings.
11
+ *
12
+ * THE STANDARD (per `metadata.check_method`):
13
+ * - `deterministic` ⇒ codeEval REQUIRED (pure code row — runs in tier-0)
14
+ * - `hybrid` ⇒ codeEval REQUIRED + judge_inputs non-empty
15
+ * (code pre-filter THEN judge)
16
+ * - `llm-judge` ⇒ judge_inputs non-empty + NO codeEval
17
+ * (subjective — judge owns it)
18
+ *
19
+ * A code/hybrid criterion WITHOUT a `codeEval` is a HARD error — not a warning,
20
+ * not grandfathered. Uniformity is a structural contract: a violation means the
21
+ * suite is mis-built (a row that claims to be deterministic but can't run
22
+ * deterministically), so EVERY finding is an ERROR (`ok=false`). PURE — no
23
+ * clock/random/network.
24
+ */
25
+ import {
26
+ CheckMethod,
27
+ type MinedCriterion,
28
+ } from "./contracts/eval-types.ts";
29
+
30
+ export type UniformityRule =
31
+ | "U1-deterministic-requires-codeeval"
32
+ | "U2-hybrid-requires-codeeval"
33
+ | "U3-llm-judge-forbids-codeeval"
34
+ | "U4-judge-inputs-required";
35
+
36
+ export interface UniformityFinding {
37
+ criterionId: string;
38
+ rule: UniformityRule;
39
+ /** always "error" — a uniformity breach means the suite is mis-built. */
40
+ level: "error";
41
+ message: string;
42
+ }
43
+
44
+ export interface UniformityResult {
45
+ findings: UniformityFinding[];
46
+ errorCount: number;
47
+ /** false iff ≥1 finding — uniformity is all-or-nothing (no warn tier). */
48
+ ok: boolean;
49
+ }
50
+
51
+ /** Does this criterion carry a runnable code-eval spec? */
52
+ function hasCodeEval(c: MinedCriterion): boolean {
53
+ return c.codeEval !== undefined;
54
+ }
55
+
56
+ /** Does this criterion declare the minimal judge inputs a judge row needs? */
57
+ function hasJudgeInputs(c: MinedCriterion): boolean {
58
+ return Array.isArray(c.metadata.judge_inputs) && c.metadata.judge_inputs.length > 0;
59
+ }
60
+
61
+ /**
62
+ * Validate ONE mined criterion against the uniform standard. Returns the findings
63
+ * (all ERROR-level). PURE.
64
+ */
65
+ export function lintUniformityCriterion(c: MinedCriterion): UniformityFinding[] {
66
+ const out: UniformityFinding[] = [];
67
+ const cm = c.metadata.check_method;
68
+
69
+ if (cm === CheckMethod.Deterministic) {
70
+ // pure code row — MUST carry a runnable codeEval (else tier-0 inert).
71
+ if (!hasCodeEval(c)) {
72
+ out.push({
73
+ criterionId: c.id,
74
+ rule: "U1-deterministic-requires-codeeval",
75
+ level: "error",
76
+ message:
77
+ "check_method=deterministic but NO codeEval — a deterministic row MUST ship a runnable " +
78
+ "code-eval spec (else the tier-0 pre-pass silently falls back to the LLM judge: tier-0 inert).",
79
+ });
80
+ }
81
+ return out;
82
+ }
83
+
84
+ if (cm === CheckMethod.Hybrid) {
85
+ // code pre-filter THEN judge — needs BOTH halves.
86
+ if (!hasCodeEval(c)) {
87
+ out.push({
88
+ criterionId: c.id,
89
+ rule: "U2-hybrid-requires-codeeval",
90
+ level: "error",
91
+ message:
92
+ "check_method=hybrid but NO codeEval — a hybrid row MUST ship a code-eval spec for the " +
93
+ "deterministic pre-filter half (else there is nothing to pre-filter: tier-0 inert).",
94
+ });
95
+ }
96
+ if (!hasJudgeInputs(c)) {
97
+ out.push({
98
+ criterionId: c.id,
99
+ rule: "U4-judge-inputs-required",
100
+ level: "error",
101
+ message:
102
+ "check_method=hybrid but judge_inputs is empty — a hybrid row MUST declare the judge_inputs " +
103
+ "the LLM judge reads for the subjective half.",
104
+ });
105
+ }
106
+ return out;
107
+ }
108
+
109
+ if (cm === CheckMethod.LlmJudge) {
110
+ // subjective row — judge owns it; a codeEval here is contradictory.
111
+ if (hasCodeEval(c)) {
112
+ out.push({
113
+ criterionId: c.id,
114
+ rule: "U3-llm-judge-forbids-codeeval",
115
+ level: "error",
116
+ message:
117
+ "check_method=llm-judge but a codeEval is present — a judge-only row must NOT carry a " +
118
+ "code-eval (it would never run: tier-0 routes only deterministic/hybrid). Re-tag the " +
119
+ "criterion deterministic|hybrid, or drop the codeEval.",
120
+ });
121
+ }
122
+ if (!hasJudgeInputs(c)) {
123
+ out.push({
124
+ criterionId: c.id,
125
+ rule: "U4-judge-inputs-required",
126
+ level: "error",
127
+ message:
128
+ "check_method=llm-judge but judge_inputs is empty — a judge row MUST declare the judge_inputs " +
129
+ "the LLM judge reads.",
130
+ });
131
+ }
132
+ return out;
133
+ }
134
+
135
+ // unreachable for a parsed MinedCriterion (check_method is a closed union), but
136
+ // fail-loud rather than silently pass an unknown method.
137
+ out.push({
138
+ criterionId: c.id,
139
+ rule: "U1-deterministic-requires-codeeval",
140
+ level: "error",
141
+ message: `unknown check_method '${String(cm)}' — cannot validate uniformity (no silent pass).`,
142
+ });
143
+ return out;
144
+ }
145
+
146
+ /**
147
+ * Validate a batch of mined criteria against the uniform standard. PURE —
148
+ * deterministic, criterion order. `ok` is false iff ANY finding exists.
149
+ */
150
+ export function lintUniformity(criteria: MinedCriterion[]): UniformityResult {
151
+ const findings = criteria.flatMap((c) => lintUniformityCriterion(c));
152
+ return { findings, errorCount: findings.length, ok: findings.length === 0 };
153
+ }
154
+
155
+ /**
156
+ * Assert the uniform standard — THROWS with a loud, multi-line summary on ANY
157
+ * violation. The hard gate the discover AGGREGATE / build path can call to refuse
158
+ * shipping a mis-built suite. PURE (throws or returns void).
159
+ */
160
+ export function assertUniform(criteria: MinedCriterion[]): void {
161
+ const { findings, ok } = lintUniformity(criteria);
162
+ if (ok) return;
163
+ const lines = findings.map((f) => ` - [${f.rule}] ${f.criterionId}: ${f.message}`);
164
+ throw new Error(
165
+ `assertUniform: ${findings.length} uniform-standard violation(s) — the eval suite is mis-built ` +
166
+ `(a criterion's executable codeEval does not match its declared check_method):\n${lines.join("\n")}`,
167
+ );
168
+ }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * scripts/living-suite.ts — EV-053 the append-only LIVING-SUITE writer (Type A — Code-only).
3
+ * ---------------------------------------------------------------------------
4
+ * The cross-cutting monotonic-growth primitive shared by the eval-suite (the
5
+ * discovered criteria / judges) AND the datasets (`*build-dataset` /
6
+ * `*discover-dataset`). Its single invariant: a living artifact NEVER shrinks —
7
+ * every entry once added is retained; appends only grow it.
8
+ *
9
+ * Generic over the entry type `T` + a caller-supplied `keyOf` so it serves any
10
+ * keyed collection (DatasetCase by id, DiscoveredCriterion by id, …). Carries
11
+ * provenance (a monotonically-increasing version + counts) WITHOUT a clock —
12
+ * stamping `appendedAt` would break byte-identity (C-PIN), so provenance is a
13
+ * pure counter. PURE — no clock / random / network; same (suite, incoming) →
14
+ * same grown suite.
15
+ *
16
+ * Austerity: holds NO LLM reasoning, makes NO pass/fail decision — it is pure
17
+ * set algebra with a fail-loud monotonicity guard. The dataset scripts route
18
+ * their appends through `appendOnly` + `assertMonotonicGrowth` here.
19
+ */
20
+
21
+ /**
22
+ * Append `incoming` onto `existing`, deduped by `keyOf`, MONOTONICALLY: every
23
+ * existing entry is retained (in its original order) and only entries with a
24
+ * not-yet-seen key are appended (in input order). DETERMINISTIC. PURE.
25
+ */
26
+ export function appendOnly<T>(existing: T[], incoming: T[], keyOf: (t: T) => string): T[] {
27
+ const seen = new Set(existing.map(keyOf));
28
+ const out = [...existing];
29
+ for (const item of incoming) {
30
+ const k = keyOf(item);
31
+ if (!seen.has(k)) {
32
+ seen.add(k);
33
+ out.push(item);
34
+ }
35
+ }
36
+ return out;
37
+ }
38
+
39
+ /**
40
+ * Enforce the monotonic-growth invariant: every key present in `before` MUST
41
+ * still be present in `after`, and the set never shrinks. THROWS on any
42
+ * violation — a living suite/dataset that lost an entry is a contract breach
43
+ * (EV-053), never silently accepted. PURE.
44
+ */
45
+ export function assertMonotonicGrowth<T>(
46
+ before: T[],
47
+ after: T[],
48
+ keyOf: (t: T) => string,
49
+ ): void {
50
+ const afterKeys = new Set(after.map(keyOf));
51
+ for (const b of before) {
52
+ const k = keyOf(b);
53
+ if (!afterKeys.has(k)) {
54
+ throw new Error(
55
+ `assertMonotonicGrowth: entry '${k}' was DROPPED — a living suite must never ` +
56
+ "shrink (EV-053). Appends may only grow the set.",
57
+ );
58
+ }
59
+ }
60
+ if (after.length < before.length) {
61
+ throw new Error(
62
+ `assertMonotonicGrowth: suite shrank from ${before.length} to ${after.length} entries ` +
63
+ "(EV-053 monotonic-growth violation).",
64
+ );
65
+ }
66
+ }
67
+
68
+ /** Provenance for a living suite — a pure counter (NO clock, for byte-identity). */
69
+ export interface SuiteProvenance {
70
+ /** monotonically-increasing version, bumped on every append. */
71
+ version: number;
72
+ /** total entries after the append. */
73
+ total: number;
74
+ /** how many genuinely-novel entries the last append added. */
75
+ lastAppended: number;
76
+ }
77
+
78
+ /** A keyed, append-only growing collection. */
79
+ export interface LivingSuite<T> {
80
+ entries: T[];
81
+ provenance: SuiteProvenance;
82
+ }
83
+
84
+ /** A fresh empty living suite (version 0, no entries). PURE. */
85
+ export function emptySuite<T>(): LivingSuite<T> {
86
+ return { entries: [], provenance: { version: 0, total: 0, lastAppended: 0 } };
87
+ }
88
+
89
+ /**
90
+ * Grow a living suite by appending `incoming` (deduped by `keyOf`). Enforces the
91
+ * monotonic-growth invariant, bumps the version, and records how many novel
92
+ * entries landed. Returns a NEW suite (no mutation). DETERMINISTIC. PURE.
93
+ */
94
+ export function growLivingSuite<T>(
95
+ suite: LivingSuite<T>,
96
+ incoming: T[],
97
+ keyOf: (t: T) => string,
98
+ ): LivingSuite<T> {
99
+ const entries = appendOnly(suite.entries, incoming, keyOf);
100
+ assertMonotonicGrowth(suite.entries, entries, keyOf);
101
+ return {
102
+ entries,
103
+ provenance: {
104
+ version: suite.provenance.version + 1,
105
+ total: entries.length,
106
+ lastAppended: entries.length - suite.entries.length,
107
+ },
108
+ };
109
+ }
@@ -0,0 +1,203 @@
1
+ /**
2
+ * scripts/load-bundle.ts
3
+ * ---------------------------------------------------------------------------
4
+ * The bundle loader: takes a run-bundle directory (.mutagent/diagnostics/{runId}/)
5
+ * and the loaded subject profile, discovers + parses the run artifacts, and
6
+ * returns a validated RunBundle (the "validated audit input" of the data-flow).
7
+ *
8
+ * Subject-agnostic: it does not hard-code which artifacts a subject produces. It
9
+ * discovers a known set of well-known artifact names (best-effort), records
10
+ * absolute paths, parses any JSON, and surfaces missing-but-optional artifacts
11
+ * as warnings rather than throwing. Only the bundle directory itself must exist.
12
+ *
13
+ * Deterministic: directory entries are sorted before processing; no clock/random.
14
+ */
15
+ import {
16
+ existsSync,
17
+ readFileSync,
18
+ readdirSync,
19
+ statSync,
20
+ } from "node:fs";
21
+ import { basename, join } from "node:path";
22
+ import { type RunBundle } from "./contracts/types.ts";
23
+
24
+ /**
25
+ * Well-known artifacts the evaluator looks for in a run-bundle. The KEY is the
26
+ * logical name used downstream (run-deterministic / lenses); the VALUE is the
27
+ * relative filename within the bundle. Missing entries become warnings.
28
+ */
29
+ export const WELL_KNOWN_ARTIFACTS: Readonly<Record<string, string>> = {
30
+ runMeta: "runMeta.json",
31
+ tracesMetadata: "traces-metadata.json",
32
+ entityContext: "entity-context.json",
33
+ renderInput: "render-input.json",
34
+ report: "evaluation-report.html",
35
+ };
36
+
37
+ /** Logical names whose VALUE is a sub-directory of evidence files. */
38
+ export const WELL_KNOWN_DIRS: Readonly<Record<string, string>> = {
39
+ evidence: "evidence",
40
+ wave6: "wave6",
41
+ };
42
+
43
+ export interface LoadBundleResult {
44
+ bundle: RunBundle;
45
+ ok: boolean;
46
+ }
47
+
48
+ /**
49
+ * Identities that mean "this bundle was produced BY the evaluator itself".
50
+ * Self-grading violates EV-PR-001 (reviewer ≠ executor): an audit must never
51
+ * grade a run it produced, or it can launder its own non-determinism into a
52
+ * pass. Compared case-insensitively against the known producer fields.
53
+ */
54
+ const SELF_PRODUCER_IDENTITIES: ReadonlySet<string> = new Set([
55
+ "mutagent-evaluator",
56
+ "@mutagent/evaluator",
57
+ ]);
58
+
59
+ /**
60
+ * runMeta fields that, by convention, name the process that produced the run.
61
+ * Checked in order; the first present string value is taken as the producer.
62
+ */
63
+ const PRODUCER_FIELDS: readonly string[] = ["producer", "tool", "generator"];
64
+
65
+ /**
66
+ * EV-PR-001 provenance guard. Inspects the audited run's runMeta for a
67
+ * producer/tool/generator marker. If it explicitly identifies the evaluator
68
+ * itself, THROW — a self-produced bundle must not be silently audited.
69
+ *
70
+ * ABSENCE of any producer field is OK (the common case; the bundle was produced
71
+ * by some other process that simply doesn't stamp provenance).
72
+ */
73
+ function assertNotSelfProduced(runMeta: unknown, bundleDir: string): void {
74
+ if (typeof runMeta !== "object" || runMeta === null) return;
75
+ const meta = runMeta as Record<string, unknown>;
76
+ for (const field of PRODUCER_FIELDS) {
77
+ const value = meta[field];
78
+ if (typeof value !== "string") continue;
79
+ if (SELF_PRODUCER_IDENTITIES.has(value.trim().toLowerCase())) {
80
+ throw new Error(
81
+ `load-bundle: reviewer ≠ executor (EV-PR-001) — this bundle is marked as ` +
82
+ `self-produced (runMeta.${field} = "${value}"); the evaluator must not ` +
83
+ `audit a run it produced itself: ${bundleDir}`,
84
+ );
85
+ }
86
+ }
87
+ }
88
+
89
+ function parseJsonSafe(path: string): { value?: unknown; error?: string } {
90
+ try {
91
+ return { value: JSON.parse(readFileSync(path, "utf8")) };
92
+ } catch (e) {
93
+ return { error: e instanceof Error ? e.message : String(e) };
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Load + validate a run-bundle. Throws ONLY when the bundle directory does not
99
+ * exist (the one structural prerequisite). Everything else is a warning.
100
+ */
101
+ export function loadBundle(bundleDir: string, runId?: string): LoadBundleResult {
102
+ if (!existsSync(bundleDir) || !statSync(bundleDir).isDirectory()) {
103
+ throw new Error(
104
+ `load-bundle: bundle directory not found or not a directory: ${bundleDir}`,
105
+ );
106
+ }
107
+
108
+ const artifacts: Record<string, string> = {};
109
+ const data: Record<string, unknown> = {};
110
+ const warnings: string[] = [];
111
+
112
+ for (const [logical, rel] of Object.entries(WELL_KNOWN_ARTIFACTS)) {
113
+ const abs = join(bundleDir, rel);
114
+ if (!existsSync(abs)) {
115
+ warnings.push(`optional artifact missing: ${rel}`);
116
+ continue;
117
+ }
118
+ artifacts[logical] = abs;
119
+ if (rel.endsWith(".json")) {
120
+ const { value, error } = parseJsonSafe(abs);
121
+ if (error) {
122
+ warnings.push(`artifact ${rel} present but failed to parse: ${error}`);
123
+ } else {
124
+ data[logical] = value;
125
+ }
126
+ }
127
+ }
128
+
129
+ // EV-PR-001 provenance guard: a bundle the evaluator produced itself must not
130
+ // be silently audited (reviewer ≠ executor). Runs as soon as runMeta is
131
+ // parsed; absence of a producer marker is OK (the common case).
132
+ assertNotSelfProduced(data.runMeta, bundleDir);
133
+
134
+ // Directory-shaped artifacts: record the sorted file listing (deterministic).
135
+ for (const [logical, rel] of Object.entries(WELL_KNOWN_DIRS)) {
136
+ const abs = join(bundleDir, rel);
137
+ if (!existsSync(abs) || !statSync(abs).isDirectory()) {
138
+ warnings.push(`optional artifact dir missing: ${rel}/`);
139
+ continue;
140
+ }
141
+ artifacts[logical] = abs;
142
+ const files = readdirSync(abs)
143
+ .filter((f) => statSync(join(abs, f)).isFile())
144
+ .sort();
145
+ data[logical] = files.map((f) => ({
146
+ file: f,
147
+ path: join(abs, f),
148
+ }));
149
+ }
150
+
151
+ const resolvedRunId =
152
+ runId ??
153
+ (typeof (data.runMeta as { runId?: unknown } | undefined)?.runId ===
154
+ "string"
155
+ ? (data.runMeta as { runId: string }).runId
156
+ : basename(bundleDir));
157
+
158
+ const bundle: RunBundle = {
159
+ runId: resolvedRunId,
160
+ bundleDir,
161
+ artifacts,
162
+ data,
163
+ warnings,
164
+ };
165
+
166
+ // "ok" = at least one well-known artifact was found; a totally empty dir is a
167
+ // load failure worth surfacing (but not a throw — the caller decides).
168
+ const ok = Object.keys(artifacts).length > 0;
169
+ return { bundle, ok };
170
+ }
171
+
172
+ // ── CLI entrypoint ──────────────────────────────────────────────────────────
173
+ declare const Bun: { argv: string[] } | undefined;
174
+ async function main(): Promise<void> {
175
+ const argv =
176
+ typeof Bun !== "undefined" ? Bun.argv.slice(2) : process.argv.slice(2);
177
+ const bundleDir = argv[0];
178
+ if (!bundleDir) {
179
+ console.error("usage: load-bundle.ts <bundleDir> [runId]");
180
+ process.exit(2);
181
+ }
182
+ const { bundle, ok } = loadBundle(bundleDir, argv[1]);
183
+ console.info(
184
+ JSON.stringify(
185
+ {
186
+ runId: bundle.runId,
187
+ artifacts: Object.keys(bundle.artifacts),
188
+ warnings: bundle.warnings,
189
+ ok,
190
+ },
191
+ null,
192
+ 2,
193
+ ),
194
+ );
195
+ process.exit(ok ? 0 : 1);
196
+ }
197
+
198
+ const isMain =
199
+ typeof import.meta !== "undefined" &&
200
+ (import.meta as unknown as { main?: boolean }).main === true;
201
+ if (isMain) {
202
+ void main();
203
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * scripts/load-profile-vocab.ts — EV-049 operator-supplied SubjectVocab injection.
3
+ * ---------------------------------------------------------------------------
4
+ * `inferVocab` (profile-subject.ts) cannot infer the SEMANTIC vocab fields from
5
+ * traces alone — which tool is the "send" action, which are "recovery", the guard
6
+ * counter attribute. It honestly leaves them empty (`sendTool=""`, etc.), and the
7
+ * engine's honest-null path reports those signals as UNKNOWN rather than a false
8
+ * `false`. This module is the LEAN injection seam: an operator passes a small
9
+ * profile file (JSON or YAML) supplying those fields, and we OVERLAY them onto the
10
+ * inferred-vocab base — WITHOUT hardcoding any subject name in the engine.
11
+ *
12
+ * Pure: parse + merge + TypeBox-validate. No clock / random / network.
13
+ */
14
+ import { existsSync, readFileSync } from "node:fs";
15
+ import { parse as parseYaml } from "yaml";
16
+ import {
17
+ parseSubjectVocab,
18
+ type SubjectVocab,
19
+ } from "./contracts/eval-types.ts";
20
+
21
+ /**
22
+ * Overlay a partial vocab (the operator's profile) onto an inferred-vocab base.
23
+ * Only fields PRESENT in `partial` override; everything else keeps the base
24
+ * (inferred) value. Returns a fresh object (no mutation of either input).
25
+ */
26
+ export function mergeVocab(
27
+ base: SubjectVocab,
28
+ partial: Partial<SubjectVocab>,
29
+ ): SubjectVocab {
30
+ return {
31
+ recoveryTools: partial.recoveryTools ?? base.recoveryTools,
32
+ eventTags: partial.eventTags ?? base.eventTags,
33
+ sendTool: partial.sendTool ?? base.sendTool,
34
+ guardCounterAttr:
35
+ partial.guardCounterAttr !== undefined
36
+ ? partial.guardCounterAttr
37
+ : base.guardCounterAttr,
38
+ };
39
+ }
40
+
41
+ /**
42
+ * Load a profile file (`.json` or `.yaml`/`.yml`), overlay it onto `base`, and
43
+ * VALIDATE the result against the SubjectVocab schema (fail-loud on a bad field
44
+ * type — a malformed profile must never silently reach the determiner). A
45
+ * missing file throws.
46
+ */
47
+ export function loadProfileVocab(path: string, base: SubjectVocab): SubjectVocab {
48
+ if (!existsSync(path)) {
49
+ throw new Error(`load-profile-vocab: profile file not found: ${path}`);
50
+ }
51
+ const raw = readFileSync(path, "utf8");
52
+ const parsed = /\.ya?ml$/i.test(path)
53
+ ? (parseYaml(raw) as unknown)
54
+ : (JSON.parse(raw) as unknown);
55
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
56
+ throw new Error(
57
+ `load-profile-vocab: profile must be a JSON/YAML object of vocab fields: ${path}`,
58
+ );
59
+ }
60
+ const merged = mergeVocab(base, parsed as Partial<SubjectVocab>);
61
+ // Validate the merged result — overlaying a bad type (e.g. sendTool: 123) must
62
+ // throw here, not corrupt the determiner's signals downstream.
63
+ return parseSubjectVocab(merged);
64
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * scripts/load-profile.ts
3
+ * ---------------------------------------------------------------------------
4
+ * Loads + validates a subject profile (subjects/<name>/eval-matrix.yaml and its
5
+ * siblings) against the TypeBox contracts. The agent ships ZERO subject-specific
6
+ * logic — everything skill-specific lives in these generated YAML profiles, so
7
+ * this loader is the gateway that turns profile DATA into typed, validated input
8
+ * for the deterministic engine.
9
+ *
10
+ * Deterministic: pure parse + validate, no clock/random/network.
11
+ */
12
+ import { existsSync, readFileSync } from "node:fs";
13
+ import { join } from "node:path";
14
+ import { parse as parseYaml } from "yaml";
15
+ import { Value } from "@sinclair/typebox/value";
16
+ import { type EvalMatrix, EvalMatrixSchema } from "./contracts/types.ts";
17
+
18
+ export interface ProfilePaths {
19
+ evalMatrix: string;
20
+ behaviorTree: string;
21
+ methodologyReview: string;
22
+ }
23
+
24
+ export function resolveProfilePaths(
25
+ subjectsRoot: string,
26
+ subject: string,
27
+ ): ProfilePaths {
28
+ const dir = join(subjectsRoot, subject);
29
+ return {
30
+ evalMatrix: join(dir, "eval-matrix.yaml"),
31
+ behaviorTree: join(dir, "behavior-tree.yaml"),
32
+ methodologyReview: join(dir, "methodology-review.yaml"),
33
+ };
34
+ }
35
+
36
+ export interface LoadedEvalMatrix {
37
+ matrix: EvalMatrix;
38
+ errors: string[];
39
+ }
40
+
41
+ /**
42
+ * Load + TypeBox-validate the eval-matrix. Returns structured errors (never a
43
+ * boolean-only verdict) so callers can fail-loud with all schema violations.
44
+ */
45
+ export function loadEvalMatrix(path: string): LoadedEvalMatrix {
46
+ if (!existsSync(path)) {
47
+ throw new Error(`load-profile: eval-matrix not found: ${path}`);
48
+ }
49
+ const raw = readFileSync(path, "utf8");
50
+ const parsed = parseYaml(raw) as unknown;
51
+
52
+ const errors: string[] = [];
53
+ for (const err of Value.Errors(EvalMatrixSchema, parsed)) {
54
+ errors.push(`${err.path || "/"}: ${err.message}`);
55
+ }
56
+ // Even on schema errors we return the parsed value so a count assertion can
57
+ // still run; callers decide whether to proceed.
58
+ return { matrix: parsed as EvalMatrix, errors };
59
+ }
60
+
61
+ /** Raw YAML loader for the behavior-tree / methodology-review (judge-side). */
62
+ export function loadYamlFile(path: string): unknown {
63
+ if (!existsSync(path)) {
64
+ throw new Error(`load-profile: file not found: ${path}`);
65
+ }
66
+ return parseYaml(readFileSync(path, "utf8")) as unknown;
67
+ }
68
+
69
+ /** Total criteria across all components — used by the 132-count acceptance. */
70
+ export function countCriteria(matrix: EvalMatrix): number {
71
+ return matrix.components.reduce((n, c) => n + c.criteria.length, 0);
72
+ }
73
+
74
+ // ── CLI entrypoint ──────────────────────────────────────────────────────────
75
+ declare const Bun: { argv: string[] } | undefined;
76
+ function main(): void {
77
+ const argv =
78
+ typeof Bun !== "undefined" ? Bun.argv.slice(2) : process.argv.slice(2);
79
+ const path = argv[0];
80
+ if (!path) {
81
+ console.error("usage: load-profile.ts <eval-matrix.yaml>");
82
+ process.exit(2);
83
+ }
84
+ const { matrix, errors } = loadEvalMatrix(path);
85
+ console.info(
86
+ JSON.stringify(
87
+ {
88
+ subject: matrix.subject,
89
+ version: matrix.version,
90
+ components: matrix.components?.length ?? 0,
91
+ criteria: errors.length === 0 ? countCriteria(matrix) : "n/a",
92
+ schemaErrors: errors,
93
+ },
94
+ null,
95
+ 2,
96
+ ),
97
+ );
98
+ process.exit(errors.length === 0 ? 0 : 1);
99
+ }
100
+
101
+ const isMain =
102
+ typeof import.meta !== "undefined" &&
103
+ (import.meta as unknown as { main?: boolean }).main === true;
104
+ if (isMain) {
105
+ main();
106
+ }