@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,122 @@
1
+ /**
2
+ * scripts/cli/methodology-review.ts — Mode C entrypoint.
3
+ * ---------------------------------------------------------------------------
4
+ * Mode C emits process self-feedback: is the methodology the RIGHT/efficient
5
+ * choice + how to rearrange (advisory, NOT pass/fail). §1.5 family / MR-1..9.
6
+ *
7
+ * MATURITY — functional seam, not fully wired:
8
+ * The deterministic spine here is REAL: it loads the subject's behavior-tree +
9
+ * methodology-review rubric, loads the run-bundle, and assembles the JUDGE
10
+ * PROMPT CONTEXT (the behavior-tree nodes + the run trajectory + the MR rubric)
11
+ * that the methodology-critic lens consumes. The actual fitness REASONING
12
+ * (decision-tree fitness · data-flow efficiency · ranked self-feedback) is a
13
+ * PINNED-JUDGE SEAM — it requires the pinned model running the
14
+ * lenses/methodology-critic-lens.md prompt. This CLI prepares + emits the
15
+ * judge context (so the judge has a complete, deterministic input) and marks
16
+ * the seam; it never fabricates fitness verdicts.
17
+ *
18
+ * methodology-review.ts <runId> --subject <name> [--bundle-dir <dir>]
19
+ * [--subjects-root <dir>]
20
+ */
21
+ import { writeFileSync } from "node:fs";
22
+ import { dirname, join } from "node:path";
23
+ import { fileURLToPath } from "node:url";
24
+ import { resolveProfilePaths, loadYamlFile } from "../load-profile.ts";
25
+ import { loadBundle } from "../load-bundle.ts";
26
+
27
+ const HERE = dirname(fileURLToPath(import.meta.url));
28
+ const PKG_ROOT = join(HERE, "..", "..");
29
+
30
+ interface Args {
31
+ runId: string;
32
+ subject: string;
33
+ bundleDir: string;
34
+ subjectsRoot: string;
35
+ out?: string;
36
+ }
37
+
38
+ function parseArgs(argv: string[]): Args {
39
+ const positional: string[] = [];
40
+ const flags: Record<string, string> = {};
41
+ for (let i = 0; i < argv.length; i++) {
42
+ const a = argv[i];
43
+ if (a.startsWith("--")) {
44
+ flags[a.slice(2)] = argv[i + 1] ?? "";
45
+ i++;
46
+ } else positional.push(a);
47
+ }
48
+ if (!positional[0] || !flags.subject) {
49
+ throw new Error(
50
+ "usage: methodology-review.ts <runId> --subject <name> [--bundle-dir <dir>] [--subjects-root <dir>] [--out <file>]",
51
+ );
52
+ }
53
+ return {
54
+ runId: positional[0],
55
+ subject: flags.subject,
56
+ bundleDir:
57
+ flags["bundle-dir"] ||
58
+ join(process.cwd(), ".mutagent/diagnostics", positional[0]),
59
+ subjectsRoot: flags["subjects-root"] || join(PKG_ROOT, "subjects"),
60
+ out: flags.out || undefined,
61
+ };
62
+ }
63
+
64
+ export function main(argvIn?: string[]): number {
65
+ const argv =
66
+ argvIn ??
67
+ (typeof Bun !== "undefined" ? Bun.argv.slice(2) : process.argv.slice(2));
68
+ const args = parseArgs(argv);
69
+
70
+ const paths = resolveProfilePaths(args.subjectsRoot, args.subject);
71
+ const behaviorTree = loadYamlFile(paths.behaviorTree);
72
+ const mrRubric = loadYamlFile(paths.methodologyReview);
73
+ const { bundle } = loadBundle(args.bundleDir, args.runId);
74
+
75
+ // Assemble the COMPLETE, deterministic judge context. The judge (the pinned
76
+ // model running the methodology-critic lens) consumes exactly this.
77
+ const judgeContext = {
78
+ subject: args.subject,
79
+ runId: bundle.runId,
80
+ behaviorTree,
81
+ methodologyRubric: mrRubric,
82
+ runTrajectory: {
83
+ runMeta: bundle.data.runMeta ?? null,
84
+ renderInput: bundle.data.renderInput ?? null,
85
+ evidence: bundle.data.evidence ?? null,
86
+ },
87
+ seam: "PINNED-JUDGE: the fitness reasoning (decision-tree fitness, data-flow efficiency, ranked self-feedback) is produced by the pinned model running lenses/methodology-critic-lens.md over this context. This CLI emits the context; it does not fabricate fitness verdicts.",
88
+ };
89
+
90
+ const json = JSON.stringify(judgeContext, null, 2);
91
+ if (args.out) writeFileSync(args.out, json + "\n");
92
+
93
+ console.info(
94
+ JSON.stringify(
95
+ {
96
+ subject: args.subject,
97
+ runId: bundle.runId,
98
+ behaviorTreeNodes: Array.isArray(
99
+ (behaviorTree as { nodes?: unknown[] })?.nodes,
100
+ )
101
+ ? (behaviorTree as { nodes: unknown[] }).nodes.length
102
+ : 0,
103
+ mrItems: Array.isArray((mrRubric as { items?: unknown[] })?.items)
104
+ ? (mrRubric as { items: unknown[] }).items.length
105
+ : 0,
106
+ judgeContextOut: args.out ?? "(stdout only)",
107
+ seam: judgeContext.seam,
108
+ },
109
+ null,
110
+ 2,
111
+ ),
112
+ );
113
+ return 0;
114
+ }
115
+
116
+ declare const Bun: { argv: string[] } | undefined;
117
+ const isMain =
118
+ typeof import.meta !== "undefined" &&
119
+ (import.meta as unknown as { main?: boolean }).main === true;
120
+ if (isMain) {
121
+ process.exit(main());
122
+ }
@@ -0,0 +1,295 @@
1
+ /**
2
+ * scripts/cli/prep.ts — the PREP entrypoint for the agent-dispatch engine.
3
+ * ---------------------------------------------------------------------------
4
+ * Emits the task-spec files the parent session dispatches to eval-judge /
5
+ * error-analyst subagents (references/workflows/orchestrator-protocol.md). This
6
+ * is the I/O shell over the TESTED PREP cores (scripts/prep-tasks.ts); it calls
7
+ * NO LLM and NO provider — it only writes the EXACT prompts to be judged on the
8
+ * host runtime, keyed by content hash.
9
+ *
10
+ * prep.ts --stage determiner --traces <handover.jsonl|.gz> --task-dir <dir> --model <pinned>
11
+ * [--profile <vocab.json|.yaml>] # operator-supplied SubjectVocab (EV-049)
12
+ * [--source <name>] # SELECTION override — pick a source by name
13
+ * prep.ts --stage judge --traces <f> --criteria <criteria.json> \
14
+ * --verdict-dir <discover-verdicts> --task-dir <dir> --model <pinned>
15
+ *
16
+ * SOURCE SELECTION (--source): when `global.sources[]` has >1 entry and none is
17
+ * `default:true`, the run-start config surfaces a `needs-selection` state; the
18
+ * PARENT session then ASKS the operator to pick one (AskUserQuestion / chat
19
+ * multi-choice) and re-invokes with `--source <name>`. When >1 entry has exactly
20
+ * one `default:true`, the config surfaces `confirm-default` (F2) — the PARENT
21
+ * CONFIRMS the preselected default (a yes/no ask; distinct from the open pick)
22
+ * before it is used. A single source or an explicit `--source` skips the prompt.
23
+ *
24
+ * MODEL INTENT SACRED: --model is the pinned host model (temperature pinned 0,
25
+ * C-PIN); it is carried verbatim on every task spec for the subagent to honor —
26
+ * never swapped. The `judge` stage REQUIRES the determiner verdict files
27
+ * (--verdict-dir) already collected (Stage A done) — see the protocol.
28
+ */
29
+ import { execSync } from "node:child_process";
30
+ import { readFileSync, writeFileSync } from "node:fs";
31
+ import { join, resolve } from "node:path";
32
+ import { parseUnitfJsonl } from "../read-unitf-traces.ts";
33
+ import { prepDeterminerTasks, prepJudgeTasks } from "../prep-tasks.ts";
34
+ import { selectColdStartSuite, type ColdStartMeta } from "../cold-start-project.ts";
35
+ import { profileSubject } from "../profile-subject.ts";
36
+ import { loadProfileVocab } from "../load-profile-vocab.ts";
37
+ import { buildMatrixPacket, writeMatrixPacket, packetFileName } from "../matrix-judge.ts";
38
+ import { configPathFor, loadEvaluatorConfig, type SourceBinding } from "../config/load.ts";
39
+ import { readMemoryDir, renderRecallContext } from "../memory/read.ts";
40
+ import type { ContextLink } from "../config/schema.ts";
41
+ import type { JudgeTaskSpec, PinnedEnvelope } from "../agent-dispatch.ts";
42
+ import type { PipelineOptions } from "../run-pipeline.ts";
43
+ import type { DiscoveredCriterion } from "../contracts/eval-types.ts";
44
+ import type { MatrixCriterion } from "../contracts/eval-matrix.ts";
45
+ import { SubjectKind } from "../route-failures.ts";
46
+
47
+ function flag(argv: string[], name: string): string | undefined {
48
+ const i = argv.indexOf(`--${name}`);
49
+ return i >= 0 && i + 1 < argv.length ? argv[i + 1] : undefined;
50
+ }
51
+
52
+ /**
53
+ * Surface the SELECTION contract's source-binding state so the PARENT session can
54
+ * wire the run-start ASK. prep runs in a subagent-context I/O shell that CANNOT
55
+ * invoke AskUserQuestion — so it prints the binding + candidate names; the parent
56
+ * (which owns the ask mechanism: AskUserQuestion on Claude Code / chat multi-choice
57
+ * elsewhere) does the actual PROMPT. `bound` (single · `default:true` · `--source`)
58
+ * ⇒ silent, no prompt. `needs-selection` is NON-fatal for gating (the source EXISTS;
59
+ * only DISCOVER needs a pick — code/dataset runs need no source at all).
60
+ */
61
+ function surfaceSourceBinding(binding: SourceBinding): void {
62
+ switch (binding.kind) {
63
+ case "confirm-default": {
64
+ // F2 — a preselected default among many: surface a CONFIRM ask (yes/no),
65
+ // distinct from the open needs-selection pick. NON-fatal: the default is usable
66
+ // as-is on accept / non-interactive / --source.
67
+ const names = binding.sources.map((s) => s.name).join(", ");
68
+ process.stdout.write(
69
+ `prep: source CONFIRM-DEFAULT — ${binding.sources.length} sources, default is ` +
70
+ `'${binding.source.name}'. PARENT: confirm the default via the platform ask ` +
71
+ `mechanism (AskUserQuestion / chat multi-choice; '${binding.source.name}' PRESELECTED, ` +
72
+ `operator may override), or accept it non-interactively (--source <name> / CI). ` +
73
+ `Candidates: ${names}\n`,
74
+ );
75
+ break;
76
+ }
77
+ case "needs-selection": {
78
+ const names = binding.sources.map((s) => s.name).join(", ");
79
+ process.stdout.write(
80
+ `prep: source SELECTION required — ${binding.sources.length} sources, none default. ` +
81
+ `PARENT: ask the operator to pick one via the platform ask mechanism ` +
82
+ `(AskUserQuestion / chat multi-choice), then re-run with --source <name>. ` +
83
+ `Candidates: ${names}\n`,
84
+ );
85
+ break;
86
+ }
87
+ case "multiple-defaults": {
88
+ const names = binding.sources.filter((s) => s.default === true).map((s) => s.name).join(", ");
89
+ process.stderr.write(
90
+ `prep: ambiguous config — >1 source marked default:true (${names}). ` +
91
+ `Fix the config (exactly one default) or pass --source <name>.\n`,
92
+ );
93
+ break;
94
+ }
95
+ case "unknown-name":
96
+ process.stderr.write(
97
+ `prep: --source "${binding.name}" matched no source in global.sources[].\n`,
98
+ );
99
+ break;
100
+ // `bound` (silent — nothing to ask) / `none` (no source; code/dataset runs are fine): no output.
101
+ case "bound":
102
+ case "none":
103
+ break;
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Config → flag precedence for the pinned judge model. The `--model` FLAG WINS;
109
+ * the unified `.mutagent/config.yaml` (`global.models.{judge_model,default}`)
110
+ * fills the gap. Model-intent-sacred: no silent swap — this only supplies a
111
+ * DEFAULT when the operator gave no `--model`. Also reads AutoMemory + context
112
+ * links at run start (additive; an absent config is a no-op). `--project-root`
113
+ * (default cwd) locates the LOCAL `.mutagent/`. Returns the resolved model (or
114
+ * undefined) + a compact run-start context banner (recall + context links).
115
+ */
116
+ function resolveRunStartConfig(argv: string[]): {
117
+ modelFromConfig: string | undefined;
118
+ startContext: string;
119
+ } {
120
+ const projectRoot = resolve(flag(argv, "project-root") ?? process.cwd());
121
+ // SELECTION contract: `--source <name>` is the explicit run-time source override
122
+ // (WINS over `default:true` / auto-bind); absent ⇒ default precedence.
123
+ const selectSourceName = flag(argv, "source");
124
+ const cfg = loadEvaluatorConfig(configPathFor(projectRoot), { selectSourceName });
125
+
126
+ let modelFromConfig: string | undefined;
127
+ const contextLinks: ContextLink[] = [];
128
+ if (cfg.status === "migration-required") {
129
+ // Fork B — surface the migration directive; do NOT parse the old shape.
130
+ process.stderr.write(`prep: ${cfg.error}\n`);
131
+ } else if (cfg.status === "ok") {
132
+ if (cfg.config.judgeModel.kind === "resolved") modelFromConfig = cfg.config.judgeModel.model;
133
+ // PHASE 4 — load global.context[] (every run) + lifecycle.evaluator.context[].
134
+ contextLinks.push(...cfg.config.globalContext, ...cfg.config.evaluatorContext);
135
+ // SELECTION — surface the source-binding state so the PARENT session can wire
136
+ // the run-start ASK (prep is a subagent-context I/O shell — it cannot invoke
137
+ // AskUserQuestion; it SURFACES the state + candidate names, the parent prompts).
138
+ surfaceSourceBinding(cfg.config.source);
139
+ }
140
+
141
+ // PHASE 3 — read AutoMemory at run start, filtered to {evaluate, general}.
142
+ const memory = readMemoryDir(join(projectRoot, ".mutagent", "memory"));
143
+ const parts: string[] = [];
144
+ const recall = renderRecallContext(memory.entries);
145
+ if (recall !== "") parts.push(recall);
146
+ if (contextLinks.length > 0) {
147
+ parts.push(
148
+ "Context links:\n" +
149
+ contextLinks.map((c) => `- ${c.path} — ${c.what} (why: ${c.why}; when: ${c.when})`).join("\n"),
150
+ );
151
+ }
152
+ return { modelFromConfig, startContext: parts.join("\n\n") };
153
+ }
154
+
155
+ /**
156
+ * Load the handed-over UniTF trace file as text (`mutagent-cli trace fetch
157
+ * --export` writes one `UnifiedTrace` record per line). `.gz` → gunzip | jq -c;
158
+ * else read text. `parseUnitfJsonl` projects each UniTF record → EvalTrace. The
159
+ * skill NEVER fetches — Helix runs `mutagent-cli trace fetch` before dispatch.
160
+ */
161
+ function loadNdjson(file: string, limit?: number): string {
162
+ const headN = limit !== undefined ? ` | head -n ${limit}` : "";
163
+ if (file.endsWith(".gz")) {
164
+ return execSync(`gunzip -c ${JSON.stringify(file)} | jq -c '.'${headN}`, {
165
+ maxBuffer: 1024 * 1024 * 512,
166
+ encoding: "utf8",
167
+ });
168
+ }
169
+ const text = readFileSync(file, "utf8");
170
+ if (limit === undefined) return text;
171
+ return text.split("\n").slice(0, limit).join("\n");
172
+ }
173
+
174
+ /**
175
+ * Write a manifest of emitted task keys → verdict files (what the parent must
176
+ * dispatch + collect). When the determiner (cold discover) stage subsamples via
177
+ * the cold-start sampler, its `coldStart` block rides along so a thin-negative
178
+ * cold suite is surfaced to the parent as LOW-CONFIDENCE (the report metadata).
179
+ */
180
+ function writeManifest(taskDir: string, specs: JudgeTaskSpec[], coldStart?: ColdStartMeta): void {
181
+ const manifest = {
182
+ count: specs.length,
183
+ tasks: specs.map((s) => ({ key: s.key, unit: s.unit, taskFile: `${s.key}.task.json`, verdictFile: s.verdictFile })),
184
+ ...(coldStart !== undefined ? { coldStart } : {}),
185
+ };
186
+ writeFileSync(join(taskDir, "manifest.json"), JSON.stringify(manifest, null, 2));
187
+ }
188
+
189
+ async function main(): Promise<void> {
190
+ const argv = process.argv.slice(2);
191
+ const stage = flag(argv, "stage");
192
+ const tracesFile = flag(argv, "traces");
193
+ const taskDir = flag(argv, "task-dir");
194
+ const limit = flag(argv, "limit");
195
+
196
+ // Config → flag precedence: --model WINS; the unified config supplies the
197
+ // default (global.models.judge_model/default). Also reads AutoMemory + context
198
+ // links at run start (additive — absent config/memory is a no-op).
199
+ const { modelFromConfig, startContext } = resolveRunStartConfig(argv);
200
+ const model = flag(argv, "model") ?? modelFromConfig;
201
+
202
+ if (tracesFile === undefined || taskDir === undefined || model === undefined) {
203
+ throw new Error(
204
+ "prep: --traces <f>, --task-dir <dir> and a pinned model are required " +
205
+ "(--model <pinned> OR global.models.judge_model/default in .mutagent/config.yaml)",
206
+ );
207
+ }
208
+ if (startContext !== "") process.stdout.write(`prep: run-start context —\n${startContext}\n`);
209
+ const pin: PinnedEnvelope = { model, temperature: 0 };
210
+ const ndjson = loadNdjson(tracesFile, limit !== undefined ? Number.parseInt(limit, 10) : undefined);
211
+ const { traces } = parseUnitfJsonl(ndjson);
212
+
213
+ // DEFAULT *evaluate PREP — one eval-matrix packet per trajectory (the headline cell).
214
+ if (stage === "matrix") {
215
+ const criteriaFile = flag(argv, "criteria");
216
+ if (criteriaFile === undefined) {
217
+ throw new Error("prep --stage matrix: --criteria <matrix.json> is required");
218
+ }
219
+ const matrix = JSON.parse(readFileSync(criteriaFile, "utf8")) as MatrixCriterion[];
220
+ const subjectName = traces[0]?.name ?? "unknown-subject";
221
+ const ids = traces.map((trace) => writeMatrixPacket(taskDir, buildMatrixPacket(subjectName, trace, matrix, pin)));
222
+ writeFileSync(
223
+ join(taskDir, "manifest.json"),
224
+ JSON.stringify({ count: ids.length, packets: ids.map((id) => ({ trajectoryId: id, packetFile: packetFileName(id) })) }, null, 2),
225
+ );
226
+ process.stdout.write(`prep: stage=matrix emitted ${ids.length} trajectory packet(s) → ${taskDir}\n`);
227
+ return;
228
+ }
229
+
230
+ let specs: JudgeTaskSpec[];
231
+ let coldStartMeta: ColdStartMeta | undefined;
232
+ if (stage === "determiner") {
233
+ // The determiner reads its subject vocab off the profile (EV-002 / EV-049).
234
+ // The profiler auto-infers a best-effort vocab; the SEMANTIC fields it can't
235
+ // infer (sendTool / recoveryTools / guardCounterAttr) stay empty → the engine
236
+ // reports those signals as UNKNOWN (honest-null). An operator may supply them
237
+ // via `--profile <f>` (JSON/YAML), which OVERLAYS the inferred-vocab base —
238
+ // e.g. `{"sendTool":"sendMessage"}` for a sample subject — with NO subject
239
+ // name hardcoded in the engine.
240
+ const inferred = profileSubject(traces).vocab;
241
+ const profileFile = flag(argv, "profile");
242
+ const vocab =
243
+ profileFile !== undefined ? loadProfileVocab(profileFile, inferred) : inferred;
244
+ // EV-5.3 COLD-START SUBSAMPLE (the SAFE call site) — the determiner IS the cold
245
+ // discover front-door: there is NO suite/judge yet, so we balance a ✓/✗ bootstrap
246
+ // from mechanical labels FIRST, then hand the SELECTED traces to the untouched
247
+ // `prepDeterminerTasks` (which still emits exactly one determiner task per
248
+ // selected trace). `--cold-size` caps the suite; absent ⇒ the incoming trace
249
+ // count, a PASS-THROUGH that only subsamples when an explicit cap is given (its
250
+ // own ✓/✗ imbalance still flags low-confidence). Cold path ONLY — the warm
251
+ // (suite-present) judge stage below NEVER touches the sampler.
252
+ const coldSizeFlag = flag(argv, "cold-size");
253
+ const coldSize = coldSizeFlag !== undefined ? Number.parseInt(coldSizeFlag, 10) : traces.length;
254
+ const cold = selectColdStartSuite(traces, { size: coldSize });
255
+ coldStartMeta = cold.meta;
256
+ specs = prepDeterminerTasks(cold.selected, { dir: taskDir, pin, vocab });
257
+ } else if (stage === "judge") {
258
+ const criteriaFile = flag(argv, "criteria");
259
+ const verdictDir = flag(argv, "verdict-dir");
260
+ if (criteriaFile === undefined || verdictDir === undefined) {
261
+ throw new Error("prep --stage judge: --criteria <f> and --verdict-dir <discover-verdicts> are required");
262
+ }
263
+ const criteria = JSON.parse(readFileSync(criteriaFile, "utf8")) as DiscoveredCriterion[];
264
+ const subjectName = traces[0]?.name ?? "unknown-subject";
265
+ const pipeline: PipelineOptions = {
266
+ criteria,
267
+ pin: { modelId: model, temperature: 0 },
268
+ subject: { kind: SubjectKind.Agent, name: subjectName, path: `subjects/${subjectName}` },
269
+ producedBy: "mutagent-evaluator/prep",
270
+ producedAt: "1970-01-01T00:00:00Z", // PREP-only stamp — judge prompts don't depend on it
271
+ };
272
+ specs = await prepJudgeTasks(traces, { verdictDir, taskDir, pin, pipeline });
273
+ } else {
274
+ throw new Error("prep: --stage must be 'matrix' (default *evaluate), 'determiner', or 'judge'");
275
+ }
276
+
277
+ writeManifest(taskDir, specs, coldStartMeta);
278
+ process.stdout.write(
279
+ `prep: stage=${stage} emitted ${specs.length} task-spec(s) → ${taskDir} ` +
280
+ `(unique by content key: ${new Set(specs.map((s) => s.key)).size})\n`,
281
+ );
282
+ if (coldStartMeta !== undefined) {
283
+ process.stdout.write(
284
+ `prep: cold-start suite ${coldStartMeta.selected}/${coldStartMeta.input} traces ` +
285
+ `(✓${coldStartMeta.passCount} ✗${coldStartMeta.failCount}` +
286
+ `${coldStartMeta.minBothHeld ? "" : ", MIN-BOTH BROKEN"})` +
287
+ `${coldStartMeta.lowConfidence ? " — LOW-CONFIDENCE (thin negatives; re-balance after real verdicts)" : ""}\n`,
288
+ );
289
+ }
290
+ }
291
+
292
+ main().catch((err: unknown) => {
293
+ process.stderr.write(`prep FAILED: ${err instanceof Error ? err.message : String(err)}\n`);
294
+ process.exit(1);
295
+ });
@@ -0,0 +1,165 @@
1
+ /**
2
+ * scripts/cli/profile-subject.ts — Mode B entrypoint.
3
+ * ---------------------------------------------------------------------------
4
+ * Mode B GENERATES a subject profile (subjects/<name>/{eval-matrix,behavior-tree,
5
+ * methodology-review}.yaml) from a skill/agent definition + traces. This is how
6
+ * the matrix is BORN — generated, not embedded in the agent.
7
+ *
8
+ * MATURITY — functional seam, not fully wired:
9
+ * The deterministic spine here is REAL: it (a) validates inputs exist, (b)
10
+ * scaffolds the subjects/<name>/ directory, and (c) writes schema-conformant
11
+ * SEED YAML files (empty-but-valid frames carrying subject/version/generatedAt
12
+ * + the 12 design principles + the MR-1..9 rubric skeleton) that pass the
13
+ * shape contracts. The criteria-DERIVATION step (reading the def + traces and
14
+ * proposing component x dimension x checkMethod rows + an interesting-dataset
15
+ * shortlist) is a PINNED-JUDGE SEAM — it requires the pinned model reasoning
16
+ * over the subject's source + traces. The agent card's Mode-B workflow + the
17
+ * audit workflow dispatch that judge. This CLI writes the SEED + marks the
18
+ * seam; it never fabricates derived criteria silently.
19
+ *
20
+ * profile-subject.ts <defPath> <tracesPath> --name <subject>
21
+ * [--subjects-root <dir>] [--generated-at <iso>]
22
+ */
23
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
24
+ import { dirname, join } from "node:path";
25
+ import { fileURLToPath } from "node:url";
26
+ import { stringify as stringifyYaml } from "yaml";
27
+ import { DEFAULT_GENERATED_AT } from "./audit-run.ts";
28
+
29
+ const HERE = dirname(fileURLToPath(import.meta.url));
30
+ const PKG_ROOT = join(HERE, "..", "..");
31
+
32
+ const MR_RUBRIC_SKELETON = [
33
+ { id: "MR-1", title: "Decision-tree fitness", reads: "behavior-tree + run outcomes", how: "judge reasons over each fork vs what the run needed", family: "decision-tree-fitness", advisory: true },
34
+ { id: "MR-2", title: "Data-flow efficiency", reads: "pipeline trace", how: "scan for redundant/recomputed transforms, collapsible stages", family: "data-flow-efficiency", advisory: true },
35
+ { id: "MR-3", title: "Methodology fitness given findings", reads: "run trajectory + findings", how: "did depth/breadth match the need?", family: "methodology-fitness", advisory: true },
36
+ { id: "MR-4", title: "Sequence soundness", reads: "transcript trajectory", how: "does later work invalidate earlier work?", family: "sequence-soundness", advisory: true },
37
+ { id: "MR-5", title: "Process self-feedback", reads: "all of the above", how: "ranked rearrange/improve proposals", family: "process-self-feedback", advisory: true },
38
+ { id: "MR-6", title: "Followed != Right", reads: "matrix (Tab-1) vs this (Tab-4)", how: "separate conformance from fitness", family: "conformance-vs-fitness", advisory: true },
39
+ { id: "MR-7", title: "Signal/failure-mode selection", reads: "tier0 -> awareness -> deep-read chain", how: "was the primary signal grounded in the right evidence tier?", family: "signal-selection", advisory: true },
40
+ { id: "MR-8", title: "Confidence derivation", reads: "coverageConfidence vs deep-read sample", how: "does the confidence FOLLOW from the LLM-trace evidence?", family: "confidence-derivation", advisory: true },
41
+ { id: "MR-9", title: "Focus determination -> search-shaping", reads: "scope/focus decision + examined traces", how: "expected-focus vs observed-focus given brief + tier-0 signals", family: "focus-determination", advisory: true },
42
+ ];
43
+
44
+ const DESIGN_PRINCIPLES_SEED = [
45
+ "Determinism-before-judgment: prefer deterministic-script / typebox-schema / gate; reserve llm-judge + trajectory-diff for genuinely behavioral rows.",
46
+ "Severity by variance-impact, not code size.",
47
+ "Three-dimension MECE coverage per component (operation-correctness / data-correctness / operational-deviation).",
48
+ "Full-dereference-surface gate principle (C-GATE).",
49
+ "Pin-and-record every stochastic/environmental variable (C-PIN), honoring model-intent-sacred.",
50
+ "Byte-identity masking contract as the determinism acceptance test.",
51
+ "Scope-locus attribution for every criterion (MECE SKILL/AGENT/COMMAND).",
52
+ "Existing-coverage honesty: covered/partial/none against the actual test+gate inventory.",
53
+ "No-filler rule: every criterion grounded in a cited intended behavior or observed deviation.",
54
+ ];
55
+
56
+ interface Args {
57
+ defPath: string;
58
+ tracesPath: string;
59
+ name: string;
60
+ subjectsRoot: string;
61
+ generatedAt: string;
62
+ }
63
+
64
+ function parseArgs(argv: string[]): Args {
65
+ const positional: string[] = [];
66
+ const flags: Record<string, string> = {};
67
+ for (let i = 0; i < argv.length; i++) {
68
+ const a = argv[i];
69
+ if (a.startsWith("--")) {
70
+ flags[a.slice(2)] = argv[i + 1] ?? "";
71
+ i++;
72
+ } else positional.push(a);
73
+ }
74
+ if (positional.length < 2 || !flags.name) {
75
+ throw new Error(
76
+ "usage: profile-subject.ts <defPath> <tracesPath> --name <subject> [--subjects-root <dir>] [--generated-at <iso>]",
77
+ );
78
+ }
79
+ return {
80
+ defPath: positional[0],
81
+ tracesPath: positional[1],
82
+ name: flags.name,
83
+ subjectsRoot: flags["subjects-root"] || join(PKG_ROOT, "subjects"),
84
+ generatedAt: flags["generated-at"] || DEFAULT_GENERATED_AT,
85
+ };
86
+ }
87
+
88
+ export function main(argvIn?: string[]): number {
89
+ const argv =
90
+ argvIn ??
91
+ (typeof Bun !== "undefined" ? Bun.argv.slice(2) : process.argv.slice(2));
92
+ const args = parseArgs(argv);
93
+
94
+ if (!existsSync(args.defPath)) {
95
+ console.error(`profile-subject: definition not found: ${args.defPath}`);
96
+ return 2;
97
+ }
98
+ if (!existsSync(args.tracesPath)) {
99
+ console.error(`profile-subject: traces not found: ${args.tracesPath}`);
100
+ return 2;
101
+ }
102
+
103
+ const dir = join(args.subjectsRoot, args.name);
104
+ mkdirSync(dir, { recursive: true });
105
+
106
+ // SEED frames — schema-conformant, empty components/nodes awaiting the judge.
107
+ const evalMatrixSeed = {
108
+ subject: args.name,
109
+ version: "v1",
110
+ generatedAt: args.generatedAt,
111
+ designPrinciples: DESIGN_PRINCIPLES_SEED,
112
+ components: [] as unknown[],
113
+ };
114
+ const behaviorTreeSeed = {
115
+ subject: args.name,
116
+ version: "v1",
117
+ generatedAt: args.generatedAt,
118
+ root: "ROOT",
119
+ nodes: [] as unknown[],
120
+ };
121
+ const methodologyReviewSeed = {
122
+ subject: args.name,
123
+ version: "v1",
124
+ generatedAt: args.generatedAt,
125
+ items: MR_RUBRIC_SKELETON,
126
+ };
127
+
128
+ writeFileSync(
129
+ join(dir, "eval-matrix.yaml"),
130
+ "# SEED profile — components[] derived by the Mode-B pinned-judge seam.\n" +
131
+ stringifyYaml(evalMatrixSeed),
132
+ );
133
+ writeFileSync(
134
+ join(dir, "behavior-tree.yaml"),
135
+ "# SEED behavior-tree — nodes[] derived by the Mode-B pinned-judge seam.\n" +
136
+ stringifyYaml(behaviorTreeSeed),
137
+ );
138
+ writeFileSync(
139
+ join(dir, "methodology-review.yaml"),
140
+ "# MR rubric — MR-1..9 skeleton (generic, reused per subject).\n" +
141
+ stringifyYaml(methodologyReviewSeed),
142
+ );
143
+
144
+ console.info(
145
+ JSON.stringify(
146
+ {
147
+ subject: args.name,
148
+ seededAt: dir,
149
+ files: ["eval-matrix.yaml", "behavior-tree.yaml", "methodology-review.yaml"],
150
+ seam: "PINNED-JUDGE: criteria + behavior-tree nodes + interesting-dataset shortlist are derived by the Mode-B judge reading the def + traces. SEED frames written; derived rows NOT fabricated.",
151
+ },
152
+ null,
153
+ 2,
154
+ ),
155
+ );
156
+ return 0;
157
+ }
158
+
159
+ declare const Bun: { argv: string[] } | undefined;
160
+ const isMain =
161
+ typeof import.meta !== "undefined" &&
162
+ (import.meta as unknown as { main?: boolean }).main === true;
163
+ if (isMain) {
164
+ process.exit(main());
165
+ }
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env bash
2
+ # scripts/cli/run.sh — bun -> pnpm-tsx -> npx-tsx fallback selector + .sh dispatch.
3
+ # Usage: scripts/cli/run.sh <script-path.{ts|sh}> [args...]
4
+ # scripts/cli/run.sh --selftest
5
+ #
6
+ # All engine invocations go through this wrapper so the package stays portable
7
+ # across bun/pnpm/npm hosts with zero Bun.* API dependence.
8
+ #
9
+ # Platform matrix — which tier fires when:
10
+ # Tier 1 (bun) : bun is on PATH
11
+ # Tier 2 (pnpm-tsx) : bun absent, pnpm on PATH
12
+ # Tier 3 (npx-tsx) : bun + pnpm absent, npx on PATH
13
+ # Tier 4 (error) : none of the above — exits 1 with install guidance
14
+
15
+ set -e
16
+
17
+ SCRIPT="$1"
18
+
19
+ if [ "$SCRIPT" = "--selftest" ]; then
20
+ if command -v bun >/dev/null 2>&1; then
21
+ echo "run.sh selftest: tier=1 runtime=bun version=$(bun --version 2>/dev/null || echo unknown)"
22
+ elif command -v pnpm >/dev/null 2>&1; then
23
+ echo "run.sh selftest: tier=2 runtime=pnpm-tsx version=$(pnpm --version 2>/dev/null || echo unknown)"
24
+ elif command -v npx >/dev/null 2>&1; then
25
+ echo "run.sh selftest: tier=3 runtime=npx-tsx version=$(node --version 2>/dev/null || echo unknown)"
26
+ else
27
+ echo "run.sh selftest: tier=4 runtime=none (install bun: curl -fsSL https://bun.sh/install | bash)"
28
+ exit 1
29
+ fi
30
+ exit 0
31
+ fi
32
+
33
+ shift || true
34
+
35
+ if [ -z "$SCRIPT" ]; then
36
+ echo "ERROR: no script path provided" >&2
37
+ echo "Usage: run.sh <script.{ts|sh}> [args...]" >&2
38
+ echo " run.sh --selftest" >&2
39
+ exit 1
40
+ fi
41
+
42
+ case "$SCRIPT" in
43
+ *.sh) exec bash "$SCRIPT" "$@" ;;
44
+ esac
45
+
46
+ if command -v bun >/dev/null 2>&1; then
47
+ exec bun run "$SCRIPT" "$@"
48
+ elif command -v pnpm >/dev/null 2>&1; then
49
+ exec pnpm exec tsx "$SCRIPT" "$@"
50
+ elif command -v npx >/dev/null 2>&1; then
51
+ exec npx tsx "$SCRIPT" "$@"
52
+ else
53
+ echo "ERROR: mutagent-evaluator requires bun, pnpm, or npm/npx to run TypeScript scripts" >&2
54
+ echo "Install bun: curl -fsSL https://bun.sh/install | bash" >&2
55
+ exit 1
56
+ fi