@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,182 @@
1
+ /**
2
+ * scripts/cli/audit-run.ts — Mode A entrypoint.
3
+ * ---------------------------------------------------------------------------
4
+ * The harness spine: load the named subject profile + the run-bundle, run the
5
+ * deterministic pass, assemble the two-track scorecard, render the 4-tab report.
6
+ *
7
+ * audit-run.ts <runId> --subject <name> [--bundle-dir <dir>]
8
+ * [--subjects-root <dir>] [--out-dir <dir>]
9
+ * [--generated-at <iso>]
10
+ *
11
+ * The pinned-judge rows (trace-cross-ref / trajectory-diff) and the data-leak /
12
+ * variance tabs are JUDGE-EXECUTION SEAMS: this deterministic spine runs fully
13
+ * offline and emits the scorecard + report; the judge-filled tabs are composed
14
+ * by the workflow harness (workflows/audit.workflow.js) which dispatches the
15
+ * pinned judge. This CLI never silently fabricates judge verdicts.
16
+ *
17
+ * Deterministic spine: generatedAt is injected (default: a fixed sentinel so a
18
+ * bare run is reproducible; pass --generated-at for a real stamp).
19
+ */
20
+ import { mkdirSync, writeFileSync } from "node:fs";
21
+ import { dirname, join } from "node:path";
22
+ import { fileURLToPath } from "node:url";
23
+ import {
24
+ countCriteria,
25
+ loadEvalMatrix,
26
+ resolveProfilePaths,
27
+ } from "../load-profile.ts";
28
+ import { loadBundle } from "../load-bundle.ts";
29
+ import { runDeterministic, reexecDeterministicCheck } from "../run-deterministic.ts";
30
+ import { assembleScorecard } from "../assemble-scorecard.ts";
31
+ import { renderReport } from "../render-report.ts";
32
+ import { maskedCanonicalJson } from "../mask.ts";
33
+ import { reportDir } from "../artifact-paths.ts";
34
+
35
+ const HERE = dirname(fileURLToPath(import.meta.url));
36
+ const PKG_ROOT = join(HERE, "..", "..");
37
+
38
+ /** Fixed sentinel so a bare audit-run is byte-reproducible without a clock. */
39
+ export const DEFAULT_GENERATED_AT = "1970-01-01T00:00:00.000Z";
40
+
41
+ interface Args {
42
+ runId: string;
43
+ subject: string;
44
+ bundleDir: string;
45
+ subjectsRoot: string;
46
+ outDir?: string;
47
+ generatedAt: string;
48
+ emitMasked: boolean;
49
+ }
50
+
51
+ function parseArgs(argv: string[]): Args {
52
+ const positional: string[] = [];
53
+ const flags: Record<string, string | boolean> = {};
54
+ for (let i = 0; i < argv.length; i++) {
55
+ const a = argv[i];
56
+ if (a.startsWith("--")) {
57
+ const key = a.slice(2);
58
+ const next = argv[i + 1];
59
+ if (next && !next.startsWith("--")) {
60
+ flags[key] = next;
61
+ i++;
62
+ } else {
63
+ flags[key] = true;
64
+ }
65
+ } else {
66
+ positional.push(a);
67
+ }
68
+ }
69
+ const subject = (flags.subject as string) || "";
70
+ const runId = positional[0] || "";
71
+ if (!runId || !subject) {
72
+ throw new Error(
73
+ "usage: audit-run.ts <runId> --subject <name> [--bundle-dir <dir>] [--subjects-root <dir>] [--out-dir <dir>] [--generated-at <iso>] [--emit-masked]",
74
+ );
75
+ }
76
+ return {
77
+ runId,
78
+ subject,
79
+ bundleDir:
80
+ (flags["bundle-dir"] as string) ||
81
+ join(process.cwd(), ".mutagent/diagnostics", runId),
82
+ subjectsRoot:
83
+ (flags["subjects-root"] as string) || join(PKG_ROOT, "subjects"),
84
+ outDir: (flags["out-dir"] as string) || undefined,
85
+ generatedAt: (flags["generated-at"] as string) || DEFAULT_GENERATED_AT,
86
+ emitMasked: flags["emit-masked"] === true,
87
+ };
88
+ }
89
+
90
+ export function main(argvIn?: string[]): number {
91
+ const argv =
92
+ argvIn ??
93
+ (typeof Bun !== "undefined" ? Bun.argv.slice(2) : process.argv.slice(2));
94
+ const args = parseArgs(argv);
95
+
96
+ // 1. Subject profile
97
+ const paths = resolveProfilePaths(args.subjectsRoot, args.subject);
98
+ const { matrix, errors } = loadEvalMatrix(paths.evalMatrix);
99
+ if (errors.length > 0) {
100
+ console.error(
101
+ `audit-run: subject '${args.subject}' eval-matrix has ${errors.length} schema error(s):`,
102
+ );
103
+ for (const e of errors) console.error(` - ${e}`);
104
+ return 1;
105
+ }
106
+
107
+ // 2. Run-bundle
108
+ const { bundle } = loadBundle(args.bundleDir, args.runId);
109
+
110
+ // 3. Deterministic pass — WIRE the real live re-exec (Item #4): every mapped
111
+ // deterministic row runs an actual checkMethod-keyed check over the produced
112
+ // artifact instead of a presence proxy. In-cell, no sub-agents (PR-ORCH-01),
113
+ // judge-only (EV-051), C-PIN byte-stable.
114
+ const det = runDeterministic(matrix, bundle, { liveReexec: reexecDeterministicCheck });
115
+
116
+ // 4. Two-track scorecard
117
+ const scorecard = assembleScorecard({
118
+ subject: matrix.subject,
119
+ runId: bundle.runId,
120
+ generatedAt: args.generatedAt,
121
+ rows: det.rows,
122
+ });
123
+
124
+ // 5. Render
125
+ const html = renderReport(scorecard);
126
+
127
+ // Output → the UNIFIED evaluator reports root (PRD R-3): reports/<runId>/master-audit.html
128
+ // (was under .mutagent/diagnostics/<runId>/audit/ — the wrong stage root). bundleDir stays the
129
+ // INPUT (the run-bundle being audited); the report is written to the evaluator namespace.
130
+ const outDir = args.outDir ?? reportDir(args.runId);
131
+ mkdirSync(outDir, { recursive: true });
132
+ const scPath = join(outDir, "master-audit.scorecard.json");
133
+ const htmlPath = join(outDir, "master-audit.html");
134
+ const scJson = args.emitMasked
135
+ ? maskedCanonicalJson(scorecard)
136
+ : JSON.stringify(scorecard, null, 2);
137
+ writeFileSync(scPath, scJson + "\n");
138
+ writeFileSync(htmlPath, html);
139
+
140
+ const coverage = scorecard.coverage;
141
+
142
+ console.info(
143
+ JSON.stringify(
144
+ {
145
+ subject: matrix.subject,
146
+ runId: bundle.runId,
147
+ criteria: countCriteria(matrix),
148
+ deterministicRows: det.deterministicCount,
149
+ judgeRows: det.judgeCount,
150
+ gateRunPass: scorecard.gate.runPass,
151
+ coverage,
152
+ scorecard: scPath,
153
+ report: htmlPath,
154
+ bundleWarnings: bundle.warnings.length,
155
+ },
156
+ null,
157
+ 2,
158
+ ),
159
+ );
160
+
161
+ // Coverage honesty (EV-OUT-002): a near-vacuous PASS must never go out
162
+ // SILENTLY. Surface the skip-rate WARNING loudly on stderr — this is a
163
+ // warning ONLY; it does NOT change the exit code / gate decision.
164
+ if (coverage?.coverageWarning) {
165
+ console.warn(
166
+ `audit-run: COVERAGE WARNING — only ${coverage.graded}/${coverage.total} ` +
167
+ `criteria graded (skip-rate ${(coverage.skipRate * 100).toFixed(1)}% > ` +
168
+ `${(coverage.skipRateWarnThreshold * 100).toFixed(1)}% threshold). ` +
169
+ `gateRunPass=${scorecard.gate.runPass} is near-vacuous — most criteria were skipped.`,
170
+ );
171
+ }
172
+
173
+ return scorecard.gate.runPass ? 0 : 1;
174
+ }
175
+
176
+ declare const Bun: { argv: string[] } | undefined;
177
+ const isMain =
178
+ typeof import.meta !== "undefined" &&
179
+ (import.meta as unknown as { main?: boolean }).main === true;
180
+ if (isMain) {
181
+ process.exit(main());
182
+ }
@@ -0,0 +1,211 @@
1
+ /**
2
+ * scripts/cli/doctor.ts
3
+ * Runtime probe + environment validator + JSON health report.
4
+ * Type A — Pure Script (deterministic environment inspection; READ-ONLY).
5
+ *
6
+ * Detects the JS runtime (bun | pnpm-tsx | npx-tsx | node), checks required
7
+ * environment variables (name-level presence only — values are NEVER read or
8
+ * surfaced), reports SKILL.md version, lock-file presence, and git availability.
9
+ * Exits 0 with a structured JSON report — it mutates NOTHING (mirrors the
10
+ * diagnostics doctor; the evaluator is a reviewer, never an executor).
11
+ *
12
+ * Usage: scripts/cli/run.sh scripts/cli/doctor.ts
13
+ *
14
+ * Output shape:
15
+ * { runtime, env: { present[], missing[] }, version, lockFile, gitAvailable, errors[] }
16
+ */
17
+
18
+ import { existsSync, readFileSync, realpathSync } from "node:fs";
19
+ import { execSync } from "node:child_process";
20
+ import { join, resolve } from "node:path";
21
+ import { resolveCredential, readFileOrNull } from "../resolve-credential.ts";
22
+
23
+ // ── Types ─────────────────────────────────────────────────────────────────────
24
+
25
+ /**
26
+ * JS runtime executing this script. Corresponds to the runtime selector in
27
+ * scripts/cli/run.sh: bun → `bun run`, pnpm-tsx → `pnpm exec tsx`,
28
+ * npx-tsx → `npx tsx`, node → bare node.
29
+ */
30
+ export type DoctorRuntime = "bun" | "pnpm-tsx" | "npx-tsx" | "node";
31
+
32
+ export interface DoctorEnvReport {
33
+ /** Env var names that are SET (non-empty). Values are never surfaced. */
34
+ present: string[];
35
+ /** Env var names that are ABSENT or empty. */
36
+ missing: string[];
37
+ }
38
+
39
+ export interface DoctorReport {
40
+ /** JS runtime executing this skill's scripts. */
41
+ runtime: DoctorRuntime;
42
+ /** Presence/absence of required env vars (name-level only). */
43
+ env: DoctorEnvReport;
44
+ /** Skill version string from SKILL.md frontmatter, or null if unreadable. */
45
+ version: string | null;
46
+ /** Lock-file detected in the skill root, or null. */
47
+ lockFile: string | null;
48
+ /** Whether `git` is available in PATH (branch-hygiene operations need it). */
49
+ gitAvailable: boolean;
50
+ /** Non-fatal warnings or missing-env notices. Exit code is still 0. */
51
+ errors: string[];
52
+ }
53
+
54
+ // ── Required env vars ──────────────────────────────────────────────────────────
55
+ //
56
+ // The evaluator's DEFAULT transport is host-runtime agent-dispatch (no provider
57
+ // SDK call), so none of these are hard requirements — they are surfaced as
58
+ // non-fatal notices. LANGFUSE_* enable a live trace SOURCE; GOOGLE_API_KEY is
59
+ // only needed on the OPTIONAL in-house AI-SDK judge substrate.
60
+ const REQUIRED_ENV_VARS: string[] = [
61
+ "LANGFUSE_PUBLIC_KEY",
62
+ "LANGFUSE_SECRET_KEY",
63
+ "LANGFUSE_BASEURL",
64
+ "GOOGLE_API_KEY",
65
+ ];
66
+
67
+ // ── Runtime detection ─────────────────────────────────────────────────────────
68
+
69
+ /**
70
+ * Detect the JS runtime executing this script.
71
+ * Order: Bun (process.versions.bun) → pnpm (npm_config_user_agent) →
72
+ * npx/npm (npm_execpath) → bare node.
73
+ *
74
+ * NOTE: this detects the SCRIPT RUNNER, not the coding-agent runtime. For the
75
+ * coding-agent runtime (claude-code, codex, cursor…) see cli/init.ts.
76
+ */
77
+ export function detectJsRuntime(): DoctorRuntime {
78
+ const versions = process.versions as Record<string, string | undefined>;
79
+ if (versions.bun) return "bun";
80
+
81
+ const userAgent = process.env.npm_config_user_agent ?? "";
82
+ if (userAgent.startsWith("pnpm")) return "pnpm-tsx";
83
+
84
+ if (process.env.npm_execpath) return "npx-tsx";
85
+
86
+ return "node";
87
+ }
88
+
89
+ // ── Env var check ─────────────────────────────────────────────────────────────
90
+
91
+ /**
92
+ * Check which required env vars are present vs missing.
93
+ * Values are never read or returned — only name-level presence/absence.
94
+ */
95
+ export function checkEnvVars(
96
+ required: string[] = REQUIRED_ENV_VARS,
97
+ projectRoot: string = process.cwd(),
98
+ ): DoctorEnvReport {
99
+ const present: string[] = [];
100
+ const missing: string[] = [];
101
+ // Presence = resolvable via the 3-tier resolver (process.env → .env →
102
+ // .mutagentrc); a creds-store-only secret counts as PRESENT. Value read into
103
+ // memory only for the presence decision — NEVER surfaced (secret-safety).
104
+ for (const name of required) {
105
+ const res = resolveCredential(name, projectRoot, {
106
+ env: process.env,
107
+ readFile: readFileOrNull,
108
+ });
109
+ if (res.found) present.push(name);
110
+ else missing.push(name);
111
+ }
112
+ return { present, missing };
113
+ }
114
+
115
+ // ── SKILL.md version ──────────────────────────────────────────────────────────
116
+
117
+ /**
118
+ * Read the skill version from SKILL.md frontmatter (the `version:` key, which is
119
+ * nested under `metadata:` in the evaluator's frontmatter). Returns null if
120
+ * SKILL.md is absent or the version field is missing.
121
+ *
122
+ * SKILL.md lives at <skill-root>/SKILL.md; this script is at
123
+ * <skill-root>/scripts/cli/doctor.ts → two directories up.
124
+ */
125
+ export function readSkillVersion(scriptDir: string): string | null {
126
+ const skillMd = resolve(scriptDir, "../..", "SKILL.md");
127
+ if (!existsSync(skillMd)) return null;
128
+ try {
129
+ const content = readFileSync(skillMd, "utf8");
130
+ // Match `version: "0.1.0"` or ` version: "0.1.0"` (indented in metadata: block)
131
+ const match = content.match(/^\s*version:\s*["']?([^"'\n\r]+?)["']?\s*$/m);
132
+ return match ? match[1].trim() : null;
133
+ } catch {
134
+ return null;
135
+ }
136
+ }
137
+
138
+ // ── Lock file detection ───────────────────────────────────────────────────────
139
+
140
+ /**
141
+ * Detect the first lock file present in the given directory.
142
+ * Checks: bun.lockb, bun.lock, pnpm-lock.yaml, package-lock.json, yarn.lock.
143
+ */
144
+ export function detectLockFile(dir: string): string | null {
145
+ const candidates = ["bun.lockb", "bun.lock", "pnpm-lock.yaml", "package-lock.json", "yarn.lock"];
146
+ for (const name of candidates) {
147
+ if (existsSync(join(dir, name))) return name;
148
+ }
149
+ return null;
150
+ }
151
+
152
+ // ── Git availability ──────────────────────────────────────────────────────────
153
+
154
+ /**
155
+ * Check whether `git` is available in PATH. Uses execSync with stdio suppressed —
156
+ * no shell expansion of user input.
157
+ */
158
+ export function checkGitAvailable(): boolean {
159
+ try {
160
+ execSync("git --version", { stdio: "ignore" });
161
+ return true;
162
+ } catch {
163
+ return false;
164
+ }
165
+ }
166
+
167
+ // ── Main doctor function ──────────────────────────────────────────────────────
168
+
169
+ /**
170
+ * Run the full doctor probe and return a structured report. Never throws —
171
+ * errors are collected in report.errors[]. READ-ONLY: mutates nothing on disk.
172
+ */
173
+ export function runDoctor(): DoctorReport {
174
+ const errors: string[] = [];
175
+
176
+ // Canonical script dir: realpath-resolve through any symlink chain (the skill
177
+ // is often dev-symlinked into a worktree; mirrors init.ts cwd-leak safety).
178
+ const scriptDir = realpathSync(
179
+ import.meta.dirname ?? import.meta.url.replace(/^file:\/\//, "").replace(/\/[^/]+$/, "")
180
+ );
181
+
182
+ const runtime = detectJsRuntime();
183
+ const env = checkEnvVars();
184
+ const version = readSkillVersion(scriptDir);
185
+ const lockFile = detectLockFile(resolve(scriptDir, "../.."));
186
+ const gitAvailable = checkGitAvailable();
187
+
188
+ if (env.missing.length > 0) {
189
+ errors.push(
190
+ `Missing env vars: ${env.missing.join(", ")} ` +
191
+ `(non-fatal — the DEFAULT agent-dispatch transport needs none; LANGFUSE_* enable a live ` +
192
+ `trace source, GOOGLE_API_KEY only the OPTIONAL in-house judge substrate)`
193
+ );
194
+ }
195
+ if (!gitAvailable) {
196
+ errors.push("git not found in PATH — branch-hygiene / route-to-diagnostics operations will fail");
197
+ }
198
+ if (version === null) {
199
+ errors.push("Could not read SKILL.md version");
200
+ }
201
+
202
+ return { runtime, env, version, lockFile, gitAvailable, errors };
203
+ }
204
+
205
+ // ── CLI entrypoint ────────────────────────────────────────────────────────────
206
+
207
+ if (import.meta.main) {
208
+ const report = runDoctor();
209
+ process.stdout.write(JSON.stringify(report, null, 2) + "\n");
210
+ process.exit(0);
211
+ }
@@ -0,0 +1,133 @@
1
+ /**
2
+ * scripts/cli/dogfood.ts — EV-041..052 AGGREGATE runner (the #7 RUN entrypoint).
3
+ * ---------------------------------------------------------------------------
4
+ * Wires the W1 engine cores against a real trace export. This is the I/O shell —
5
+ * it is reached ONLY from the CLI, never from the `bun test` gate (which
6
+ * exercises the pure cores + a stub judge). The composition it calls
7
+ * (run-pipeline.ts) is fully unit-tested.
8
+ *
9
+ * # DEFAULT — agent-dispatch: AGGREGATE the verdict files dispatched subagents
10
+ * # wrote on the host runtime (PREP + dispatch happen first — see the protocol).
11
+ * dogfood.ts --traces <handover.jsonl|.gz> --criteria <criteria.json>
12
+ * --substrate agent-dispatch --verdict-dir <dir> --model <pinned> [--out <report.json>]
13
+ *
14
+ * # OPTIONAL — in-house: run the LIVE google-genai judge (CI/code-based export).
15
+ * dogfood.ts --traces <f> --criteria <criteria.json> --substrate in-house --model <gemini-*>
16
+ *
17
+ * The DEFAULT substrate (agent-dispatch) calls NO provider — it reads the
18
+ * verdict files. The in-house substrate THROWS on an unsupported model / missing
19
+ * GOOGLE_API_KEY (blocked, never a silent swap — model intent sacred). The
20
+ * criteria come from `*discover-evals` — this CLI does NOT fabricate them; it reads
21
+ * them from --criteria so the run is grounded, never invented.
22
+ */
23
+ import { execSync } from "node:child_process";
24
+ import { readFileSync, writeFileSync } from "node:fs";
25
+ import { parseUnitfJsonl } from "../read-unitf-traces.ts";
26
+ import { runEvalPipeline } from "../run-pipeline.ts";
27
+ import { resolveJudgeModel } from "../judge-provider.ts";
28
+ import { resolveJudgeRuntime, judgeForRuntime, describeSubstrate } from "../substrate.ts";
29
+ import type { JudgeInvoke } from "../determine-outcome.ts";
30
+ import { Substrate, type DiscoveredCriterion } from "../contracts/eval-types.ts";
31
+ import { SubjectKind } from "../route-failures.ts";
32
+
33
+ function flag(argv: string[], name: string): string | undefined {
34
+ const i = argv.indexOf(`--${name}`);
35
+ return i >= 0 && i + 1 < argv.length ? argv[i + 1] : undefined;
36
+ }
37
+
38
+ /**
39
+ * Load the handed-over UniTF trace file as text (`mutagent-cli trace fetch
40
+ * --export` writes one `UnifiedTrace` record per line). `.gz` → gunzip | jq -c;
41
+ * else read text. `parseUnitfJsonl` projects each UniTF record → EvalTrace. The
42
+ * skill NEVER fetches — Helix runs `mutagent-cli trace fetch` before dispatch.
43
+ */
44
+ function loadNdjson(file: string, limit?: number): string {
45
+ const headN = limit !== undefined ? ` | head -n ${limit}` : "";
46
+ if (file.endsWith(".gz")) {
47
+ // jq -c normalizes the multi-line JSON stream to one compact record per line.
48
+ return execSync(`gunzip -c ${JSON.stringify(file)} | jq -c '.'${headN}`, {
49
+ maxBuffer: 1024 * 1024 * 512,
50
+ encoding: "utf8",
51
+ });
52
+ }
53
+ const text = readFileSync(file, "utf8");
54
+ if (limit === undefined) return text;
55
+ return text.split("\n").slice(0, limit).join("\n");
56
+ }
57
+
58
+ async function main(): Promise<void> {
59
+ const argv = process.argv.slice(2);
60
+ const tracesFile = flag(argv, "traces");
61
+ const criteriaFile = flag(argv, "criteria");
62
+ const model = flag(argv, "model");
63
+ const limit = flag(argv, "limit");
64
+ const out = flag(argv, "out");
65
+
66
+ if (tracesFile === undefined || criteriaFile === undefined) {
67
+ throw new Error("dogfood: --traces <file> and --criteria <criteria.json> are required");
68
+ }
69
+
70
+ // EV-050 judge-runtime (DEFAULT = agent-dispatch). Model intent sacred: resolve
71
+ // the pinned model exactly (no swap). --model is authoritative for the dogfood.
72
+ // `--judge-runtime` is the v0.2.0 flag; `--substrate` stays a back-compat alias.
73
+ const substrate = resolveJudgeRuntime(flag(argv, "judge-runtime") ?? flag(argv, "substrate"));
74
+ const decision = resolveJudgeModel({ ...(model !== undefined ? { model } : {}) });
75
+
76
+ let judge: JudgeInvoke;
77
+ if (substrate === Substrate.AgentDispatch) {
78
+ const verdictDir = flag(argv, "verdict-dir");
79
+ if (verdictDir === undefined) {
80
+ throw new Error(
81
+ "dogfood --judge-runtime agent-dispatch: --verdict-dir <dir> is required (the dir the " +
82
+ "dispatched eval-judge/error-analyst subagents wrote their verdict files into). " +
83
+ "Run PREP + dispatch first (references/workflows/orchestrator-protocol.md).",
84
+ );
85
+ }
86
+ judge = judgeForRuntime({ substrate, verdictDir }); // reads verdict files — NO provider
87
+ } else {
88
+ judge = judgeForRuntime({ substrate, model: decision.model }); // in-house: THROWS if creds absent
89
+ }
90
+
91
+ const ndjson = loadNdjson(tracesFile, limit !== undefined ? Number.parseInt(limit, 10) : undefined);
92
+ const { traces, skipped } = parseUnitfJsonl(ndjson);
93
+ const criteria = JSON.parse(readFileSync(criteriaFile, "utf8")) as DiscoveredCriterion[];
94
+
95
+ const subjectName = traces[0]?.name ?? "unknown-subject";
96
+ const result = await runEvalPipeline(traces, judge, {
97
+ criteria,
98
+ pin: { modelId: decision.model, temperature: 0 },
99
+ subject: { kind: SubjectKind.Agent, name: subjectName, path: `subjects/${subjectName}` },
100
+ producedBy: "mutagent-evaluator/dogfood",
101
+ // a real run stamp is acceptable here (CLI side); the cores stay clock-free.
102
+ producedAt: new Date().toISOString(),
103
+ artifacts: [{ id: "traces", kind: "trace", path: tracesFile }],
104
+ });
105
+
106
+ const substrateDesc = describeSubstrate(substrate);
107
+ const summary = {
108
+ substrate,
109
+ judgeTransport: substrateDesc.transport,
110
+ callsProvider: substrateDesc.callsProvider,
111
+ model: decision.model,
112
+ modelSource: decision.source,
113
+ tracesLoaded: traces.length,
114
+ tracesSkipped: skipped,
115
+ profile: result.profile,
116
+ gate: result.scorecard.gate,
117
+ verdicts: result.verdicts,
118
+ routedFailures: result.handoff.acceptance.criteria,
119
+ };
120
+
121
+ const json = JSON.stringify(summary, null, 2);
122
+ if (out !== undefined) {
123
+ writeFileSync(out, json);
124
+ process.stdout.write(`dogfood: wrote ${out} (gate.passed=${result.scorecard.gate.passed})\n`);
125
+ } else {
126
+ process.stdout.write(json + "\n");
127
+ }
128
+ }
129
+
130
+ main().catch((err: unknown) => {
131
+ process.stderr.write(`dogfood FAILED: ${err instanceof Error ? err.message : String(err)}\n`);
132
+ process.exit(1);
133
+ });