@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,155 @@
1
+ /**
2
+ * scripts/run-judge.ts
3
+ * ---------------------------------------------------------------------------
4
+ * The pinned-judge applicator seam (EV-REQ-024 / GAP-JUDGE-SEAM).
5
+ *
6
+ * This is the INNER, deterministic, testable HALF of the judge track. The OTHER
7
+ * half — the live LLM call that PRODUCES verdicts by reading a transcript vs the
8
+ * behavior-tree — is a documented integration seam at the WORKFLOW layer, never
9
+ * in this script. Keeping the engine PURE is what makes the judge track
10
+ * reproducible and unit-testable.
11
+ *
12
+ * `applyJudgeVerdicts(rows, verdictMap, judgePin?)` consumes the scorecard rows
13
+ * (incl. the `judgePlaceholder()` skip rows emitted by run-deterministic.ts —
14
+ * we CONSUME that placeholder, we do NOT redefine it) plus a CALLER-SUPPLIED
15
+ * verdict map keyed by a stable per-row id, and resolves each judge placeholder:
16
+ *
17
+ * - no verdict in the map -> STAYS skip (the judge never fabricates)
18
+ * - a non-pinned verdict (temp != 0
19
+ * OR missing modelId) -> REJECTED -> stays skip + records a
20
+ * determinism-defect detail. A non-pinned
21
+ * judge can NEVER produce a pass (C-PIN).
22
+ * - a pinned pass/fail verdict -> applies (sets result + records modelId)
23
+ * - deterministic-track rows -> passed through UNTOUCHED
24
+ *
25
+ * ── Row-keying convention (needed so the verdictMap key is unambiguous) ───────
26
+ * ScorecardCriterion carries no stable per-row id. The applicator receives the
27
+ * flat row list in MATRIX ORDER (the order run-deterministic emits), so the
28
+ * stable key is `componentId#<indexWithinComponent>` — i.e. the Nth row of a
29
+ * given component. `rowKey(componentId, indexInComponent)` builds it; callers
30
+ * that produce verdicts MUST key the map with this same convention.
31
+ *
32
+ * Pure + deterministic: a fresh array is returned; inputs are never mutated; no
33
+ * clock/random/network. Same (rows, verdictMap) -> deep-equal output, always.
34
+ */
35
+ import { type DeterministicRowResult } from "./run-deterministic.ts";
36
+ import {
37
+ type RowResultValue,
38
+ type ScorecardCriterion,
39
+ RowResult,
40
+ Track,
41
+ } from "./contracts/types.ts";
42
+
43
+ /**
44
+ * A caller-supplied judge verdict for one row. The live judge layer fills these
45
+ * in; this engine only APPLIES them under the C-PIN invariant. A verdict is
46
+ * "pinned" iff it carries a modelId AND temperature === 0.
47
+ */
48
+ export interface JudgeVerdict {
49
+ /** The pinned model id the judge ran under. Absent => not pinned => rejected. */
50
+ modelId?: string;
51
+ /** Sampling temperature. Anything other than 0 => not pinned => rejected. */
52
+ temperature?: number;
53
+ /** The judge's claimed result. Only `pass`/`fail` are meaningful; a pinned
54
+ * verdict applies it. (A `skip` verdict is treated as no decision.) */
55
+ result: RowResultValue;
56
+ /** Optional free-text rationale from the judge (masked downstream). */
57
+ detail?: string;
58
+ }
59
+
60
+ /** verdictMap: stable rowKey -> verdict. Keyed by `rowKey(componentId, idx)`. */
61
+ export type JudgeVerdictMap = Record<string, JudgeVerdict>;
62
+
63
+ /**
64
+ * Stable per-row key: the Nth criterion of a given component. This is the
65
+ * documented row-keying convention the verdictMap is keyed by.
66
+ */
67
+ export function rowKey(componentId: string, indexInComponent: number): string {
68
+ return `${componentId}#${indexInComponent}`;
69
+ }
70
+
71
+ /** A verdict is pinned iff it declares a modelId AND temperature === 0. */
72
+ function isPinned(verdict: JudgeVerdict): boolean {
73
+ return (
74
+ typeof verdict.modelId === "string" &&
75
+ verdict.modelId.length > 0 &&
76
+ verdict.temperature === 0
77
+ );
78
+ }
79
+
80
+ /** Build the resolved criterion for a pinned, applicable verdict. */
81
+ function resolvePinned(
82
+ placeholder: ScorecardCriterion,
83
+ verdict: JudgeVerdict,
84
+ ): ScorecardCriterion {
85
+ const judged =
86
+ verdict.result === RowResult.Pass || verdict.result === RowResult.Fail
87
+ ? verdict.result
88
+ : RowResult.Skip;
89
+ const base = `pinned judge '${verdict.modelId}' (temp=0) -> ${judged}`;
90
+ return {
91
+ ...placeholder,
92
+ result: judged,
93
+ detail: verdict.detail ? `${base}; ${verdict.detail}` : base,
94
+ };
95
+ }
96
+
97
+ /** Build the skip+defect criterion for a rejected (non-pinned) verdict. */
98
+ function rejectNonPinned(
99
+ placeholder: ScorecardCriterion,
100
+ verdict: JudgeVerdict,
101
+ ): ScorecardCriterion {
102
+ const reason =
103
+ verdict.modelId == null || verdict.modelId.length === 0
104
+ ? "missing modelId"
105
+ : `temperature=${String(verdict.temperature)} (!= 0)`;
106
+ return {
107
+ ...placeholder,
108
+ // C-PIN: a non-pinned judge can NEVER produce a pass — force skip.
109
+ result: RowResult.Skip,
110
+ detail:
111
+ `DETERMINISM DEFECT: verdict is not pinned (${reason}); ` +
112
+ "a non-pinned judge can never produce a pass — staying skip",
113
+ };
114
+ }
115
+
116
+ /**
117
+ * Apply caller-supplied judge verdicts to the scorecard rows.
118
+ *
119
+ * @param rows scorecard rows in matrix order (deterministic + judge).
120
+ * @param verdictMap rowKey -> verdict, keyed via `rowKey(componentId, idx)`.
121
+ * @param _judgePin reserved: a future global pin assertion hook. Per-verdict
122
+ * pinning (modelId + temp=0) is the enforced contract today.
123
+ */
124
+ export function applyJudgeVerdicts(
125
+ rows: DeterministicRowResult[],
126
+ verdictMap: JudgeVerdictMap,
127
+ _judgePin?: { modelId: string; temperature: number },
128
+ ): DeterministicRowResult[] {
129
+ // Per-component running index -> the stable rowKey for each judge row.
130
+ const perComponentIndex = new Map<string, number>();
131
+
132
+ return rows.map((r) => {
133
+ const idx = perComponentIndex.get(r.componentId) ?? 0;
134
+ perComponentIndex.set(r.componentId, idx + 1);
135
+
136
+ // Deterministic-track rows pass through UNTOUCHED.
137
+ if (r.criterion.track !== Track.Judge) {
138
+ return { componentId: r.componentId, criterion: { ...r.criterion } };
139
+ }
140
+
141
+ const key = rowKey(r.componentId, idx);
142
+ const verdict = verdictMap[key];
143
+
144
+ // No verdict -> the judge never fabricates -> stay skip (untouched).
145
+ if (verdict == null) {
146
+ return { componentId: r.componentId, criterion: { ...r.criterion } };
147
+ }
148
+
149
+ const criterion = isPinned(verdict)
150
+ ? resolvePinned(r.criterion, verdict)
151
+ : rejectNonPinned(r.criterion, verdict);
152
+
153
+ return { componentId: r.componentId, criterion };
154
+ });
155
+ }
@@ -0,0 +1,175 @@
1
+ /**
2
+ * scripts/run-pipeline.ts — the W1 engine composed end-to-end.
3
+ * ---------------------------------------------------------------------------
4
+ * Wires the eight engine cores into one pass so the dogfood (#7) is a pure
5
+ * RUN with no new logic:
6
+ *
7
+ * profileSubject (EV-049)
8
+ * → determineOutcome per trace (EV-042, via the DI judge seam)
9
+ * → label + balancedSample with a held-out TRAIN/EVAL split (EV-052)
10
+ * → build ONE judge per EVAL-WORTHY criterion (EV-043; few-shot from TRAIN
11
+ * only, judged on the EVAL split — held-out discipline)
12
+ * → severity-gated GATE + variance (EV-048)
13
+ * → route ALL fixable + any failing criteria to diagnostics (EV-051)
14
+ *
15
+ * Substrate (EV-050) is chosen by the CALLER and handed in as the `judge` seam
16
+ * (in-house = createInHouseJudge; the gate passes a stub). FIXABLE criteria are
17
+ * NEVER judged — they route straight to diagnostics (a judge is only a judge).
18
+ *
19
+ * PURE composition: no clock/random/network here; determinism comes from the
20
+ * cores + the injected judge + injected provenance.
21
+ */
22
+ import type { JudgeInvoke } from "./determine-outcome.ts";
23
+ import { determineOutcome, runJudge } from "./judge-prompt-template.ts";
24
+ import { profileSubject, type SubjectProfile } from "./profile-subject.ts";
25
+ import { splitTrainEval, buildJudgeSpec, type JudgePin } from "./build-evals.ts";
26
+ import { rollupScorecard, type GradedCriterion, type Scorecard } from "./evaluate.ts";
27
+ import {
28
+ routeFailures,
29
+ type ArtifactRef,
30
+ type FailureRef,
31
+ type HandoverBundle,
32
+ type SubjectKindValue,
33
+ } from "./route-failures.ts";
34
+ import type { LabeledTrace } from "./sample-traces.ts";
35
+ import {
36
+ CriterionFlag,
37
+ OutcomeVerdict,
38
+ type CriterionVerdict,
39
+ type DiscoveredCriterion,
40
+ type EvalTrace,
41
+ type JudgeExemplar,
42
+ type OutcomeResult,
43
+ type SubjectVocab,
44
+ } from "./contracts/eval-types.ts";
45
+ import { Severity } from "./contracts/types.ts";
46
+
47
+ export interface PipelineOptions {
48
+ criteria: DiscoveredCriterion[];
49
+ pin: JudgePin;
50
+ subject: { kind: SubjectKindValue; name: string; path: string };
51
+ producedBy: string;
52
+ /** INJECTED provenance stamp (no self-read clock). */
53
+ producedAt: string;
54
+ /**
55
+ * AUTHORED subject vocab (EV-002 / EV-049). When supplied it is stamped onto
56
+ * the profile and injected into the determiner; when omitted the profiler
57
+ * auto-infers a best-effort vocab from the traces. Either way the engine reads
58
+ * the vocab off the profile, never a module constant.
59
+ */
60
+ vocab?: SubjectVocab;
61
+ /** sample budget (default = all traces). */
62
+ sampleSize?: number;
63
+ /** per-criterion gating severity (default HIGH). */
64
+ severityById?: Record<string, string>;
65
+ /** artifact refs to enumerate on the handoff (caller-injected locators). */
66
+ artifacts?: ArtifactRef[];
67
+ }
68
+
69
+ export interface PipelineResult {
70
+ profile: SubjectProfile;
71
+ outcomes: OutcomeResult[];
72
+ sample: LabeledTrace[];
73
+ verdicts: CriterionVerdict[];
74
+ scorecard: Scorecard;
75
+ handoff: HandoverBundle;
76
+ }
77
+
78
+ /** Map a determiner outcome → a sampling LabeledTrace. */
79
+ function toLabeled(trace: EvalTrace, outcome: OutcomeResult): LabeledTrace {
80
+ return { trace, label: outcome.reached, confidence: outcome.confidence };
81
+ }
82
+
83
+ /** Build few-shot exemplars from the TRAIN split (label from the determiner). */
84
+ function exemplarsFromTrain(train: LabeledTrace[], limit = 2): JudgeExemplar[] {
85
+ return train.slice(0, limit).map((l) => ({
86
+ traceId: l.trace.id,
87
+ label: l.label,
88
+ why: `determiner labeled this ${l.label} (confidence ${l.confidence})`,
89
+ }));
90
+ }
91
+
92
+ /**
93
+ * Run the full W1 engine over a trace set. The `judge` seam is the substrate's
94
+ * judge (live in CLI, stub in the gate). Deterministic given its inputs.
95
+ */
96
+ export async function runEvalPipeline(
97
+ traces: EvalTrace[],
98
+ judge: JudgeInvoke,
99
+ opts: PipelineOptions,
100
+ ): Promise<PipelineResult> {
101
+ // EV-049 — subject profile (carries the subject vocab the engine reads).
102
+ const profile = profileSubject(traces, opts.vocab);
103
+
104
+ // EV-042 — determine an outcome per trace (sequential → deterministic order).
105
+ // The determiner reads the subject vocab off the profile (EV-002).
106
+ const outcomes: OutcomeResult[] = [];
107
+ for (const t of traces) {
108
+ outcomes.push(await determineOutcome(t, judge, profile.vocab));
109
+ }
110
+ const labeled = traces.map((t, i) => toLabeled(t, outcomes[i]));
111
+
112
+ // EV-052 — sample + held-out TRAIN/EVAL split.
113
+ const size = opts.sampleSize ?? labeled.length;
114
+ const sample = labeled.slice(0, size);
115
+ const { train, evalSet } = splitTrainEval(sample, 0.34);
116
+ const trainIds = new Set(train.map((l) => l.trace.id));
117
+ // judge on the held-out split (fall back to the whole sample if eval is empty).
118
+ const judgeTargets = evalSet.length > 0 ? evalSet : sample;
119
+
120
+ // EV-043 — one judge per EVAL-WORTHY criterion (fixables are NEVER judged).
121
+ const evalWorthy = opts.criteria.filter((c) => c.flag === CriterionFlag.EvalWorthy);
122
+ const verdicts: CriterionVerdict[] = [];
123
+ const graded: GradedCriterion[] = [];
124
+ for (const criterion of evalWorthy) {
125
+ const spec = buildJudgeSpec(criterion, exemplarsFromTrain(train), trainIds);
126
+ // judge a representative held-out subject trace (first eval target).
127
+ const subjectTrace = judgeTargets[0]?.trace ?? sample[0]?.trace ?? traces[0];
128
+ const verdict = await runJudge(spec, subjectTrace, judge, opts.pin);
129
+ verdicts.push(verdict);
130
+ graded.push({
131
+ criterionId: criterion.id,
132
+ severity: opts.severityById?.[criterion.id] ?? Severity.High,
133
+ verdict,
134
+ });
135
+ }
136
+
137
+ // EV-048 — severity-gated GATE + variance.
138
+ const scorecard = rollupScorecard({ criteria: graded });
139
+
140
+ // EV-051 — route ALL fixable criteria + any failing eval-worthy verdicts.
141
+ const failures: FailureRef[] = [];
142
+ for (const criterion of opts.criteria) {
143
+ if (criterion.flag === CriterionFlag.Fixable) {
144
+ failures.push({
145
+ criterionId: criterion.id,
146
+ severity: opts.severityById?.[criterion.id] ?? Severity.High,
147
+ flag: CriterionFlag.Fixable,
148
+ traceId: "(suite)",
149
+ result: OutcomeVerdict.Fail,
150
+ critique: `infra/dependency criterion — routed to diagnostics: ${criterion.statement}`,
151
+ });
152
+ }
153
+ }
154
+ for (const v of verdicts) {
155
+ if (v.result !== OutcomeVerdict.Pass) {
156
+ failures.push({
157
+ criterionId: v.criterionId,
158
+ severity: opts.severityById?.[v.criterionId] ?? Severity.High,
159
+ flag: CriterionFlag.EvalWorthy,
160
+ traceId: v.traceId,
161
+ result: v.result,
162
+ critique: v.critique,
163
+ });
164
+ }
165
+ }
166
+ const handoff = routeFailures({
167
+ subject: opts.subject,
168
+ failures,
169
+ artifacts: opts.artifacts ?? [],
170
+ producedBy: opts.producedBy,
171
+ producedAt: opts.producedAt,
172
+ });
173
+
174
+ return { profile, outcomes, sample, verdicts, scorecard, handoff };
175
+ }
@@ -0,0 +1,210 @@
1
+ /**
2
+ * scripts/sample-traces.ts — EV-052 trace filtering + sampling.
3
+ * ---------------------------------------------------------------------------
4
+ * The 5 sampling strategies from the error-analysis CORE source, as one
5
+ * deterministic mix:
6
+ * - Random — uniform spread (a stable seeded STRIDE, not Math.random)
7
+ * - Outlier — extremes by response length / latency / tool-call count
8
+ * - Failure-driven— prioritize ✗-labeled traces
9
+ * - Uncertainty — lowest-confidence labels (judge disagreement proxy)
10
+ * - Stratified — even coverage across the pass/fail strata (validate-
11
+ * evaluator's ~50✓/50✗ balance)
12
+ *
13
+ * Sealed-sibling: this RE-IMPLEMENTS the diagnostics filtering *pattern* — it
14
+ * NEVER imports the diagnostics package. PURE + deterministic: no Math.random,
15
+ * no clock, no network. The "random" strategy is a fixed stride over the
16
+ * stable input order, so the same (traces, opts) always yields the identical
17
+ * sample (reproducible eval datasets — C-PIN-adjacent).
18
+ */
19
+ import { OutcomeVerdict, type EvalTrace, type OutcomeVerdictValue } from "./contracts/eval-types.ts";
20
+
21
+ /** A trace plus its determiner label (from EV-042) — the unit `*discover-evals` mines. */
22
+ export interface LabeledTrace {
23
+ trace: EvalTrace;
24
+ label: OutcomeVerdictValue;
25
+ /** the determiner's confidence (drives uncertainty sampling). */
26
+ confidence: number;
27
+ }
28
+
29
+ export const SampleStrategy = {
30
+ Random: "random",
31
+ Outlier: "outlier",
32
+ FailureDriven: "failure-driven",
33
+ Uncertainty: "uncertainty",
34
+ Stratified: "stratified",
35
+ } as const;
36
+ export type SampleStrategyValue =
37
+ (typeof SampleStrategy)[keyof typeof SampleStrategy];
38
+
39
+ /** All five, in a stable priority order (the default mix). */
40
+ const ALL_STRATEGIES: readonly SampleStrategyValue[] = [
41
+ SampleStrategy.Stratified,
42
+ SampleStrategy.FailureDriven,
43
+ SampleStrategy.Outlier,
44
+ SampleStrategy.Uncertainty,
45
+ SampleStrategy.Random,
46
+ ];
47
+
48
+ // ── filterTraces (the re-implemented filtering pattern) ─────────────────────
49
+
50
+ export interface TraceFilter {
51
+ /** exact trace.name match. */
52
+ name?: string;
53
+ /** minimum tool-call count. */
54
+ minTools?: number;
55
+ /** maximum tool-call count. */
56
+ maxTools?: number;
57
+ }
58
+
59
+ function toolCount(t: EvalTrace): number {
60
+ return t.observations.filter((o) => o.type === "TOOL").length;
61
+ }
62
+
63
+ /** Apply a filter (re-implemented diagnostics pattern; no cross-package import). */
64
+ export function filterTraces(traces: EvalTrace[], filter: TraceFilter): EvalTrace[] {
65
+ return traces.filter((t) => {
66
+ if (filter.name !== undefined && t.name !== filter.name) return false;
67
+ const n = toolCount(t);
68
+ if (filter.minTools !== undefined && n < filter.minTools) return false;
69
+ if (filter.maxTools !== undefined && n > filter.maxTools) return false;
70
+ return true;
71
+ });
72
+ }
73
+
74
+ // ── outlierScore ─────────────────────────────────────────────────────────────
75
+
76
+ /** A monotone "how unusual" score: tools + latency + response length, scaled. */
77
+ export function outlierScore(t: EvalTrace): number {
78
+ const tools = toolCount(t);
79
+ const latency = typeof t.latencyMs === "number" ? t.latencyMs : 0;
80
+ const respLen =
81
+ typeof t.output?.response === "string" ? t.output.response.length : 0;
82
+ // weights chosen so each axis can dominate at its extreme; pure arithmetic.
83
+ return tools * 100 + latency + respLen;
84
+ }
85
+
86
+ // ── balancedSample — ~50/50 ✓/✗, never fabricated ───────────────────────────
87
+
88
+ /**
89
+ * Pick up to `size` labeled traces with an even pass/fail balance. NEVER
90
+ * invents items: if one class is scarcer, all of it is included and the other
91
+ * class is capped to match (so the result is <= size and as balanced as the
92
+ * data allows). Deterministic — preserves input order within each class.
93
+ */
94
+ export function balancedSample(labeled: LabeledTrace[], size: number): LabeledTrace[] {
95
+ const passes = labeled.filter((l) => l.label === OutcomeVerdict.Pass);
96
+ const fails = labeled.filter((l) => l.label === OutcomeVerdict.Fail);
97
+ const perSide = Math.floor(size / 2);
98
+ // balance to the scarcer side so neither class is over-represented vs the other.
99
+ const take = Math.min(perSide, passes.length, fails.length);
100
+ const out: LabeledTrace[] = [...passes.slice(0, take), ...fails.slice(0, take)];
101
+
102
+ // if balanced take didn't fill the budget AND one side has leftovers, top up
103
+ // from the larger side up to `size` (still never fabricating).
104
+ if (out.length < size) {
105
+ const remaining = size - out.length;
106
+ const leftover = [...passes.slice(take), ...fails.slice(take)];
107
+ out.push(...leftover.slice(0, remaining));
108
+ }
109
+ return out;
110
+ }
111
+
112
+ // ── sampleTraces — the mixed strategy sample ────────────────────────────────
113
+
114
+ export interface SampleOptions {
115
+ size: number;
116
+ /** which strategies to mix (default: all five). */
117
+ strategies?: SampleStrategyValue[];
118
+ }
119
+
120
+ /** Stable stride indices over [0,n) yielding ~count evenly-spread positions. */
121
+ function strideIndices(n: number, count: number): number[] {
122
+ if (n <= 0 || count <= 0) return [];
123
+ if (count >= n) return Array.from({ length: n }, (_v, i) => i);
124
+ const step = n / count;
125
+ const out: number[] = [];
126
+ for (let k = 0; k < count; k++) out.push(Math.floor(k * step));
127
+ return out;
128
+ }
129
+
130
+ /** A selected trace plus the DETERMINISTIC strategy that nominated it ("data link"). */
131
+ export interface AttributedTrace {
132
+ trace: LabeledTrace;
133
+ /** which strategy's queue this trace was first picked from. */
134
+ selectedBy: SampleStrategyValue;
135
+ }
136
+
137
+ /**
138
+ * Build a deduped sample (<= size) mixing the requested strategies. Each
139
+ * strategy contributes candidates in a fixed order; we round-robin across the
140
+ * strategies and add the next not-yet-picked candidate from each until the
141
+ * budget is met. Deterministic for a given (labeled, opts).
142
+ */
143
+ export function sampleTraces(labeled: LabeledTrace[], opts: SampleOptions): LabeledTrace[] {
144
+ return sampleTracesAttributed(labeled, opts).map((a) => a.trace);
145
+ }
146
+
147
+ /**
148
+ * Like {@link sampleTraces}, but each result carries `selectedBy` — the strategy
149
+ * whose queue first nominated it. This is the deterministic provenance ("data
150
+ * link") surfaced on derived dataset cases; the human "why high-value" rationale
151
+ * is authored separately by the selecting agent. Deterministic for (labeled, opts).
152
+ */
153
+ export function sampleTracesAttributed(labeled: LabeledTrace[], opts: SampleOptions): AttributedTrace[] {
154
+ const strategies = opts.strategies ?? ALL_STRATEGIES;
155
+ const byId = new Map(labeled.map((l) => [l.trace.id, l]));
156
+
157
+ // Per-strategy ordered candidate id lists (pure, stable).
158
+ const queues: string[][] = strategies.map((s) => {
159
+ switch (s) {
160
+ case SampleStrategy.FailureDriven:
161
+ return labeled.filter((l) => l.label === OutcomeVerdict.Fail).map((l) => l.trace.id);
162
+ case SampleStrategy.Outlier:
163
+ return [...labeled]
164
+ .sort((a, b) => outlierScore(b.trace) - outlierScore(a.trace))
165
+ .map((l) => l.trace.id);
166
+ case SampleStrategy.Uncertainty:
167
+ return [...labeled]
168
+ .sort((a, b) => a.confidence - b.confidence)
169
+ .map((l) => l.trace.id);
170
+ case SampleStrategy.Stratified: {
171
+ // interleave pass/fail so coverage spans both strata.
172
+ const p = labeled.filter((l) => l.label === OutcomeVerdict.Pass).map((l) => l.trace.id);
173
+ const f = labeled.filter((l) => l.label === OutcomeVerdict.Fail).map((l) => l.trace.id);
174
+ const out: string[] = [];
175
+ for (let i = 0; i < Math.max(p.length, f.length); i++) {
176
+ if (i < f.length) out.push(f[i]);
177
+ if (i < p.length) out.push(p[i]);
178
+ }
179
+ return out;
180
+ }
181
+ case SampleStrategy.Random:
182
+ default:
183
+ return strideIndices(labeled.length, labeled.length).map((i) => labeled[i].trace.id);
184
+ }
185
+ });
186
+
187
+ const picked = new Set<string>();
188
+ const result: AttributedTrace[] = [];
189
+ const cursors = new Array<number>(queues.length).fill(0);
190
+
191
+ // round-robin across strategies until budget met or all queues exhausted.
192
+ let progressed = true;
193
+ while (result.length < opts.size && progressed) {
194
+ progressed = false;
195
+ for (let qi = 0; qi < queues.length && result.length < opts.size; qi++) {
196
+ const q = queues[qi];
197
+ while (cursors[qi] < q.length) {
198
+ const id = q[cursors[qi]++];
199
+ if (!picked.has(id)) {
200
+ picked.add(id);
201
+ const lt = byId.get(id);
202
+ if (lt !== undefined) result.push({ trace: lt, selectedBy: strategies[qi] });
203
+ progressed = true;
204
+ break;
205
+ }
206
+ }
207
+ }
208
+ }
209
+ return result;
210
+ }