@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,503 @@
1
+ // ---------------------------------------------------------------------------
2
+ // mutagent-optimize — the UNIFIED amend contract (`AmendRequest`) + adapters.
3
+ //
4
+ // WHY: the ⑤ IMPROVE S1 build handover is fed by TWO "amend request" dialects —
5
+ // • `EddChangeRequest` — what the EVALUATOR emits (eval→improve / EDD loop, F18).
6
+ // mutagent-evaluator/.../scripts/edd/edd-types.ts
7
+ // • `Remedy` (the diagnostics "RemedyPacket") — what DIAGNOSTICS emits
8
+ // (diagnose→improve). mutagent-diagnostics/.../scripts/normalize/trace.ts
9
+ // Two shapes for the same job = drift risk. This module is the ONE superset the
10
+ // optimize consumer accepts, plus lossless bidirectional adapters for each dialect.
11
+ //
12
+ // WHERE / STANDALONE INVARIANT: published skills NEVER cross-import (the config-schema
13
+ // precedent — parity is mirrored INLINE, not imported; see config/parity.test.ts in
14
+ // evaluator + diagnostics). So this contract is SELF-CONTAINED: the two dialect shapes
15
+ // are re-expressed here as local parity-mirror interfaces (`EddChangeRequestLike` /
16
+ // `RemedyLike`), and the round-trip test (amend-request.test.ts) mirrors the canonical
17
+ // field lists inline so a dialect change breaks the test until this superset follows.
18
+ // The unification is CONSUMER-SIDE: optimize adapts both dialects INBOUND; the emitters
19
+ // keep their native shipped output (each is a "view over the superset" via the round-trip).
20
+ //
21
+ // PURE: no clock, no random, no IO, no schema lib (matches optimize's pure-TS style —
22
+ // loop-state.ts / improve-loop-run.ts carry no TypeBox). The validator is hand-rolled.
23
+ // ---------------------------------------------------------------------------
24
+
25
+ /** The FROZEN contract version. Bump only via an explicit, reviewed migration. */
26
+ export const AMEND_REQUEST_VERSION = "0.1.0" as const;
27
+
28
+ /** Which emitter/dialect an amend originated from — the lossless back-map discriminant. */
29
+ export const AmendOrigin = {
30
+ /** the evaluator's EddChangeRequest (eval→improve / EDD F18). */
31
+ Eval: "eval",
32
+ /** the diagnostics Remedy bundle (diagnose→improve). */
33
+ Diagnostics: "diagnostics",
34
+ } as const;
35
+ export type AmendOriginValue = (typeof AmendOrigin)[keyof typeof AmendOrigin];
36
+
37
+ /** The amend lifecycle status (superset of the EDD ChangeRequestStatus). */
38
+ export const AmendStatus = {
39
+ Requested: "requested",
40
+ Amended: "amended",
41
+ Rejected: "rejected",
42
+ } as const;
43
+ export type AmendStatusValue = (typeof AmendStatus)[keyof typeof AmendStatus];
44
+
45
+ /** WHERE the engineer fixes (the evaluator's coarse target). */
46
+ export type AmendRemedyTarget = "agentspec" | "impl";
47
+
48
+ /** The change kind (the diagnostics changeType). */
49
+ export type AmendChangeType = "add" | "modify" | "delete" | "replace";
50
+
51
+ /** The categorical cost/correctness scale (the diagnostics scalars). */
52
+ export type AmendCostCorrectness = "low" | "medium" | "high";
53
+
54
+ /** The diagnostics diff absence marker. */
55
+ export type AmendDiffStatus = "source-unavailable" | "origin-unknown";
56
+
57
+ /**
58
+ * One grounded failing case (the evaluator's FailingCaseRef). A simple shape,
59
+ * typed precisely here (mirrors edd-types.ts `FailingCaseRefSchema`).
60
+ */
61
+ export interface AmendFailingCaseRef {
62
+ caseId: string;
63
+ criterionId: string;
64
+ critique: string;
65
+ refs: Array<{ obs: string; path: string; value: string }>;
66
+ }
67
+
68
+ /** A before/after diff (the diagnostics `Remedy.diff`). */
69
+ export interface AmendDiff {
70
+ before: string;
71
+ after: string;
72
+ }
73
+
74
+ // ── The superset ────────────────────────────────────────────────────────────
75
+ /**
76
+ * `AmendRequest` — the ONE amend contract the ⑤ IMPROVE consumer accepts. A strict
77
+ * superset of BOTH dialects: every field of an `EddChangeRequest` (7) and every field
78
+ * of a diagnostics `Remedy` (16, incl. nested) is representable, none lost.
79
+ *
80
+ * Shared fields (id, subject) appear once. Dialect-specific fields are optional — the
81
+ * `origin` discriminant tells the back-adapter which subset to reconstruct.
82
+ *
83
+ * The three complex nested diagnostics fields (`failureOrigin`, `plan`, `feedbackOnFix`)
84
+ * ride as structured PASS-THROUGH (`unknown`): they are validated on the diagnostics
85
+ * side and preserved verbatim so the round-trip is lossless WITHOUT duplicating the deep
86
+ * diagnostics type tree here (which the standalone invariant forbids importing).
87
+ */
88
+ export interface AmendRequest {
89
+ /** contract version — frozen. */
90
+ amendVersion: typeof AMEND_REQUEST_VERSION;
91
+ /** which dialect produced this (drives the lossless back-map). */
92
+ origin: AmendOriginValue;
93
+ /** superset of EddChangeRequest.requestId / Remedy.remedyId. */
94
+ amendId: string;
95
+ /** what is being amended. eval: EddChangeRequest.subject; diagnostics: injected by the caller. */
96
+ subject: string;
97
+ /** amend lifecycle. eval: the request's status; diagnostics: defaults to "requested". */
98
+ status: AmendStatusValue;
99
+
100
+ // ── WHERE (the target) ──
101
+ /** eval: REQUIRED coarse target (agentspec|impl); diagnostics: omitted. */
102
+ remedyTarget?: AmendRemedyTarget;
103
+ /** diagnostics: concrete file/module/agent the remedy patches. */
104
+ applyTarget?: string;
105
+ /** diagnostics: apply routing class (local-agent|local-code-construct|remote). */
106
+ targetClass?: string;
107
+ /** diagnostics: the kind of change. */
108
+ changeType?: AmendChangeType;
109
+
110
+ // ── WHY (evidence + justification) ──
111
+ /** eval: the grounded failing cases driving the request (≥1). */
112
+ failingCases?: AmendFailingCaseRef[];
113
+ /** eval: the NL proposed remedy (a hypothesis, not a mandate). */
114
+ proposedRemedy?: string;
115
+ /** diagnostics: comparative rationale (why THIS remedy). */
116
+ rationale?: string;
117
+ /** diagnostics: causal mechanism (why it works). */
118
+ whyWorks?: string;
119
+ /** diagnostics: the remedy title. */
120
+ title?: string;
121
+ /** diagnostics: implementation/operational cost. */
122
+ cost?: AmendCostCorrectness;
123
+ /** diagnostics: confidence the fix resolves the root cause. */
124
+ correctness?: AmendCostCorrectness;
125
+ /** diagnostics: enricher-derived priority (lower = higher). */
126
+ rank?: number;
127
+
128
+ // ── WHAT (the fix payload) ──
129
+ /** diagnostics: ordered apply instructions (≥1). */
130
+ applyInstructions?: string[];
131
+ /** diagnostics: before/after diff (present iff the source is findable). */
132
+ diff?: AmendDiff;
133
+ /** diagnostics: diff absence marker (present iff `diff` is omitted). */
134
+ diffStatus?: AmendDiffStatus;
135
+ /** eval: 1-based EDD swing index. */
136
+ swing?: number;
137
+
138
+ // ── Structured pass-through (diagnostics-only nested; validated diagnostics-side) ──
139
+ /** diagnostics: the structured FailureOrigin. Preserved verbatim. */
140
+ failureOrigin?: unknown;
141
+ /** diagnostics: the ActionablePlan. Preserved verbatim. */
142
+ plan?: unknown;
143
+ /** diagnostics: accumulated FeedbackOnFix[]. Preserved verbatim. */
144
+ feedbackOnFix?: unknown;
145
+ }
146
+
147
+ // ── Local parity-mirror dialect shapes ──────────────────────────────────────
148
+ // These mirror the canonical dialect definitions. Kept in lockstep by
149
+ // amend-request.test.ts (inline field-list parity, config-parity-test style).
150
+
151
+ /** Parity mirror of evaluator edd-types.ts `EddChangeRequestSchema` (Static type). */
152
+ export interface EddChangeRequestLike {
153
+ requestId: string;
154
+ swing: number;
155
+ subject: string;
156
+ remedyTarget: AmendRemedyTarget;
157
+ failingCases: AmendFailingCaseRef[];
158
+ proposedRemedy: string;
159
+ status: "requested";
160
+ }
161
+
162
+ /** Parity mirror of diagnostics trace.ts `Remedy` (interface). */
163
+ export interface RemedyLike {
164
+ remedyId: string;
165
+ title: string;
166
+ failureOrigin: unknown;
167
+ diff?: AmendDiff;
168
+ diffStatus?: AmendDiffStatus;
169
+ cost: AmendCostCorrectness;
170
+ correctness: AmendCostCorrectness;
171
+ rank: number;
172
+ targetClass: string;
173
+ plan?: unknown;
174
+ applyTarget: string;
175
+ rationale: string;
176
+ whyWorks: string;
177
+ applyInstructions: string[];
178
+ changeType?: AmendChangeType;
179
+ feedbackOnFix?: unknown;
180
+ }
181
+
182
+ // ── Dialect intake closure (fail-loud on an unknown inbound field) ───────────
183
+ // The adapters copy a KNOWN field set. Without a closed-key check on the INPUT, the
184
+ // instant an emitter grows a field (both dialects have — changeType/feedbackOnFix were
185
+ // later Remedy additions) it would vanish from the handover with ZERO signal — the exact
186
+ // drift W2I2 exists to close. So intake mirrors the canonical dialects' own
187
+ // `additionalProperties:false`: an unknown inbound key THROWS, it is never silently dropped.
188
+
189
+ /** The canonical `EddChangeRequest` key set (mirror of edd-types.ts `EddChangeRequestSchema`). */
190
+ export const EDD_CHANGE_REQUEST_KEYS: readonly string[] = [
191
+ "requestId",
192
+ "swing",
193
+ "subject",
194
+ "remedyTarget",
195
+ "failingCases",
196
+ "proposedRemedy",
197
+ "status",
198
+ ];
199
+
200
+ /** The canonical `Remedy` key set (mirror of trace.ts `Remedy`). */
201
+ export const REMEDY_KEYS: readonly string[] = [
202
+ "remedyId",
203
+ "title",
204
+ "failureOrigin",
205
+ "diff",
206
+ "diffStatus",
207
+ "cost",
208
+ "correctness",
209
+ "rank",
210
+ "targetClass",
211
+ "plan",
212
+ "applyTarget",
213
+ "rationale",
214
+ "whyWorks",
215
+ "applyInstructions",
216
+ "changeType",
217
+ "feedbackOnFix",
218
+ ];
219
+
220
+ /**
221
+ * Assert an inbound dialect object carries ONLY canonical keys. THROWS fail-loud (naming
222
+ * the offending field) on any unknown key — a new emitter field must be wired into
223
+ * AmendRequest + its adapter, never silently subset-copied away.
224
+ */
225
+ function assertClosedDialect(input: unknown, allowed: readonly string[], dialect: string): void {
226
+ if (typeof input !== "object" || input === null) {
227
+ throw new Error(`${dialect} intake rejected — expected an object`);
228
+ }
229
+ const unknownKeys = Object.keys(input as Record<string, unknown>).filter((k) => !allowed.includes(k));
230
+ if (unknownKeys.length > 0) {
231
+ throw new Error(
232
+ `${dialect} intake rejected — unknown field(s) [${unknownKeys.join(", ")}]: the dialect is closed ` +
233
+ `(additionalProperties:false). A new emitter field must be wired into AmendRequest + its adapter, ` +
234
+ `not silently dropped.`,
235
+ );
236
+ }
237
+ }
238
+
239
+ // ── Adapters — evaluator dialect ⇄ superset (lossless) ───────────────────────
240
+
241
+ /** `EddChangeRequest` → `AmendRequest`. Every EDD field is carried; none lost. */
242
+ export function eddChangeRequestToAmend(edd: EddChangeRequestLike): AmendRequest {
243
+ assertClosedDialect(edd, EDD_CHANGE_REQUEST_KEYS, "EddChangeRequest");
244
+ return {
245
+ amendVersion: AMEND_REQUEST_VERSION,
246
+ origin: AmendOrigin.Eval,
247
+ amendId: edd.requestId,
248
+ subject: edd.subject,
249
+ status: edd.status,
250
+ remedyTarget: edd.remedyTarget,
251
+ failingCases: edd.failingCases,
252
+ proposedRemedy: edd.proposedRemedy,
253
+ swing: edd.swing,
254
+ };
255
+ }
256
+
257
+ /** `AmendRequest` (eval origin) → `EddChangeRequest`. Reconstructs the 7 EDD fields exactly. */
258
+ export function amendToEddChangeRequest(a: AmendRequest): EddChangeRequestLike {
259
+ if (a.origin !== AmendOrigin.Eval) {
260
+ throw new Error(
261
+ `amendToEddChangeRequest: origin must be "eval" (got "${a.origin}") — a diagnostics amend has no EddChangeRequest view`,
262
+ );
263
+ }
264
+ if (a.remedyTarget === undefined) throw new Error("amendToEddChangeRequest: missing remedyTarget");
265
+ if (a.swing === undefined) throw new Error("amendToEddChangeRequest: missing swing");
266
+ if (a.failingCases === undefined) throw new Error("amendToEddChangeRequest: missing failingCases");
267
+ if (a.proposedRemedy === undefined) throw new Error("amendToEddChangeRequest: missing proposedRemedy");
268
+ if (a.status !== AmendStatus.Requested) {
269
+ throw new Error(`amendToEddChangeRequest: EddChangeRequest.status must be "requested" (got "${a.status}")`);
270
+ }
271
+ return {
272
+ requestId: a.amendId,
273
+ swing: a.swing,
274
+ subject: a.subject,
275
+ remedyTarget: a.remedyTarget,
276
+ failingCases: a.failingCases,
277
+ proposedRemedy: a.proposedRemedy,
278
+ status: "requested",
279
+ };
280
+ }
281
+
282
+ // ── Adapters — diagnostics dialect ⇄ superset (lossless) ─────────────────────
283
+
284
+ /**
285
+ * `Remedy` → `AmendRequest`. Every `Remedy` field is carried; none lost. `subject` is
286
+ * injected by the caller (a `Remedy` carries no subject — the diagnosed entity is
287
+ * supplied by the diagnostics context). Optional dialect fields are set only when
288
+ * present so absent stays absent across the round-trip.
289
+ */
290
+ export function remedyToAmend(rem: RemedyLike, subject: string): AmendRequest {
291
+ assertClosedDialect(rem, REMEDY_KEYS, "Remedy");
292
+ const a: AmendRequest = {
293
+ amendVersion: AMEND_REQUEST_VERSION,
294
+ origin: AmendOrigin.Diagnostics,
295
+ amendId: rem.remedyId,
296
+ subject,
297
+ status: AmendStatus.Requested,
298
+ title: rem.title,
299
+ failureOrigin: rem.failureOrigin,
300
+ cost: rem.cost,
301
+ correctness: rem.correctness,
302
+ rank: rem.rank,
303
+ targetClass: rem.targetClass,
304
+ applyTarget: rem.applyTarget,
305
+ rationale: rem.rationale,
306
+ whyWorks: rem.whyWorks,
307
+ applyInstructions: rem.applyInstructions,
308
+ };
309
+ if (rem.diff !== undefined) a.diff = rem.diff;
310
+ if (rem.diffStatus !== undefined) a.diffStatus = rem.diffStatus;
311
+ if (rem.plan !== undefined) a.plan = rem.plan;
312
+ if (rem.changeType !== undefined) a.changeType = rem.changeType;
313
+ if (rem.feedbackOnFix !== undefined) a.feedbackOnFix = rem.feedbackOnFix;
314
+ return a;
315
+ }
316
+
317
+ /** `AmendRequest` (diagnostics origin) → `Remedy`. Reconstructs the 16 Remedy fields exactly. */
318
+ export function amendToRemedy(a: AmendRequest): RemedyLike {
319
+ if (a.origin !== AmendOrigin.Diagnostics) {
320
+ throw new Error(
321
+ `amendToRemedy: origin must be "diagnostics" (got "${a.origin}") — an eval amend has no Remedy view`,
322
+ );
323
+ }
324
+ if (a.title === undefined) throw new Error("amendToRemedy: missing title");
325
+ if (a.cost === undefined) throw new Error("amendToRemedy: missing cost");
326
+ if (a.correctness === undefined) throw new Error("amendToRemedy: missing correctness");
327
+ if (a.rank === undefined) throw new Error("amendToRemedy: missing rank");
328
+ if (a.targetClass === undefined) throw new Error("amendToRemedy: missing targetClass");
329
+ if (a.applyTarget === undefined) throw new Error("amendToRemedy: missing applyTarget");
330
+ if (a.rationale === undefined) throw new Error("amendToRemedy: missing rationale");
331
+ if (a.whyWorks === undefined) throw new Error("amendToRemedy: missing whyWorks");
332
+ if (a.applyInstructions === undefined) throw new Error("amendToRemedy: missing applyInstructions");
333
+ const rem: RemedyLike = {
334
+ remedyId: a.amendId,
335
+ title: a.title,
336
+ failureOrigin: a.failureOrigin,
337
+ cost: a.cost,
338
+ correctness: a.correctness,
339
+ rank: a.rank,
340
+ targetClass: a.targetClass,
341
+ applyTarget: a.applyTarget,
342
+ rationale: a.rationale,
343
+ whyWorks: a.whyWorks,
344
+ applyInstructions: a.applyInstructions,
345
+ };
346
+ if (a.diff !== undefined) rem.diff = a.diff;
347
+ if (a.diffStatus !== undefined) rem.diffStatus = a.diffStatus;
348
+ if (a.plan !== undefined) rem.plan = a.plan;
349
+ if (a.changeType !== undefined) rem.changeType = a.changeType;
350
+ if (a.feedbackOnFix !== undefined) rem.feedbackOnFix = a.feedbackOnFix;
351
+ return rem;
352
+ }
353
+
354
+ // ── Consumer accept-gate — hand-rolled validator (fail-loud) ─────────────────
355
+
356
+ const AMEND_ORIGINS: readonly string[] = [AmendOrigin.Eval, AmendOrigin.Diagnostics];
357
+ const AMEND_STATUSES: readonly string[] = [AmendStatus.Requested, AmendStatus.Amended, AmendStatus.Rejected];
358
+ const COST_CORRECTNESS: readonly string[] = ["low", "medium", "high"];
359
+ const REMEDY_TARGETS: readonly string[] = ["agentspec", "impl"];
360
+ const CHANGE_TYPES: readonly string[] = ["add", "modify", "delete", "replace"];
361
+ const DIFF_STATUSES: readonly string[] = ["source-unavailable", "origin-unknown"];
362
+
363
+ /** The exact top-level key set of `AmendRequest` — closes the object (no smuggled fields). */
364
+ const AMEND_KEYS: readonly string[] = [
365
+ "amendVersion",
366
+ "origin",
367
+ "amendId",
368
+ "subject",
369
+ "status",
370
+ "remedyTarget",
371
+ "applyTarget",
372
+ "targetClass",
373
+ "changeType",
374
+ "failingCases",
375
+ "proposedRemedy",
376
+ "rationale",
377
+ "whyWorks",
378
+ "title",
379
+ "cost",
380
+ "correctness",
381
+ "rank",
382
+ "applyInstructions",
383
+ "diff",
384
+ "diffStatus",
385
+ "swing",
386
+ "failureOrigin",
387
+ "plan",
388
+ "feedbackOnFix",
389
+ ];
390
+
391
+ function isNonEmptyString(v: unknown): v is string {
392
+ return typeof v === "string" && v.length > 0;
393
+ }
394
+
395
+ /**
396
+ * Collect every contract violation on a candidate amend. Returns [] when valid.
397
+ * Enforces: required scalars, enum membership, the closed key set (no additional
398
+ * properties), the eval/diagnostics dialect-required fields, and the diff XOR
399
+ * diffStatus rule for a diagnostics amend that carries either.
400
+ */
401
+ export function amendRequestViolations(input: unknown): string[] {
402
+ const problems: string[] = [];
403
+ if (typeof input !== "object" || input === null) return ["not an object"];
404
+ const a = input as Record<string, unknown>;
405
+
406
+ for (const key of Object.keys(a)) {
407
+ if (!AMEND_KEYS.includes(key)) problems.push(`unknown field "${key}"`);
408
+ }
409
+
410
+ if (a.amendVersion !== AMEND_REQUEST_VERSION) {
411
+ problems.push(`amendVersion must be "${AMEND_REQUEST_VERSION}"`);
412
+ }
413
+ if (!isNonEmptyString(a.origin) || !AMEND_ORIGINS.includes(a.origin)) {
414
+ problems.push(`origin must be one of ${AMEND_ORIGINS.join("|")}`);
415
+ }
416
+ if (!isNonEmptyString(a.amendId)) problems.push("amendId must be a non-empty string");
417
+ if (!isNonEmptyString(a.subject)) problems.push("subject must be a non-empty string");
418
+ if (!isNonEmptyString(a.status) || !AMEND_STATUSES.includes(a.status)) {
419
+ problems.push(`status must be one of ${AMEND_STATUSES.join("|")}`);
420
+ }
421
+
422
+ if (a.remedyTarget !== undefined && !REMEDY_TARGETS.includes(a.remedyTarget as string)) {
423
+ problems.push(`remedyTarget must be one of ${REMEDY_TARGETS.join("|")}`);
424
+ }
425
+ if (a.changeType !== undefined && !CHANGE_TYPES.includes(a.changeType as string)) {
426
+ problems.push(`changeType must be one of ${CHANGE_TYPES.join("|")}`);
427
+ }
428
+ if (a.cost !== undefined && !COST_CORRECTNESS.includes(a.cost as string)) {
429
+ problems.push(`cost must be one of ${COST_CORRECTNESS.join("|")}`);
430
+ }
431
+ if (a.correctness !== undefined && !COST_CORRECTNESS.includes(a.correctness as string)) {
432
+ problems.push(`correctness must be one of ${COST_CORRECTNESS.join("|")}`);
433
+ }
434
+ if (a.diffStatus !== undefined && !DIFF_STATUSES.includes(a.diffStatus as string)) {
435
+ problems.push(`diffStatus must be one of ${DIFF_STATUSES.join("|")}`);
436
+ }
437
+ if (a.swing !== undefined && (typeof a.swing !== "number" || !Number.isInteger(a.swing) || a.swing < 1)) {
438
+ problems.push("swing must be a positive integer");
439
+ }
440
+ if (a.rank !== undefined && typeof a.rank !== "number") {
441
+ problems.push("rank must be a number");
442
+ }
443
+
444
+ // diff XOR diffStatus — a remedy must never claim BOTH a concrete diff and "source not found".
445
+ if (a.diff !== undefined && a.diffStatus !== undefined) {
446
+ problems.push("diff and diffStatus are mutually exclusive (exactly one, or neither)");
447
+ }
448
+
449
+ // Dialect-required fields (the strict-superset guarantee for each origin).
450
+ if (a.origin === AmendOrigin.Eval) {
451
+ if (a.remedyTarget === undefined) problems.push("eval amend requires remedyTarget");
452
+ if (a.swing === undefined) problems.push("eval amend requires swing");
453
+ if (!Array.isArray(a.failingCases) || a.failingCases.length === 0) {
454
+ problems.push("eval amend requires ≥1 failingCases");
455
+ }
456
+ if (!isNonEmptyString(a.proposedRemedy)) problems.push("eval amend requires proposedRemedy");
457
+ } else if (a.origin === AmendOrigin.Diagnostics) {
458
+ for (const f of ["title", "targetClass", "applyTarget", "rationale", "whyWorks"] as const) {
459
+ if (!isNonEmptyString(a[f])) problems.push(`diagnostics amend requires ${f}`);
460
+ }
461
+ if (a.cost === undefined) problems.push("diagnostics amend requires cost");
462
+ if (a.correctness === undefined) problems.push("diagnostics amend requires correctness");
463
+ if (typeof a.rank !== "number") problems.push("diagnostics amend requires rank");
464
+ if (!Array.isArray(a.applyInstructions) || a.applyInstructions.length === 0) {
465
+ problems.push("diagnostics amend requires ≥1 applyInstructions");
466
+ }
467
+ // canonical `Remedy.failureOrigin` is REQUIRED. It rides as structured pass-through
468
+ // (`unknown`) so we cannot type-check its interior, but a presence check is truer than
469
+ // silently accepting a diagnostics amend that dropped its origin.
470
+ if (a.failureOrigin === undefined) problems.push("diagnostics amend requires failureOrigin");
471
+ }
472
+
473
+ return problems;
474
+ }
475
+
476
+ /**
477
+ * The consumer accept-gate: validate a candidate amend, THROW-loud on any violation,
478
+ * return it typed on success. A malformed handover must never cross into the ⑤ IMPROVE
479
+ * S1 build silently.
480
+ */
481
+ export function validateAmendRequest(input: unknown): AmendRequest {
482
+ const problems = amendRequestViolations(input);
483
+ if (problems.length > 0) {
484
+ throw new Error(`AmendRequest invalid:\n - ${problems.join("\n - ")}`);
485
+ }
486
+ return input as AmendRequest;
487
+ }
488
+
489
+ /**
490
+ * Collapse a structured amend into the NL build brief the existing S1 build handover
491
+ * consumes (`TurnContext.remedy: string`). Deterministic. This is how the superset FEEDS
492
+ * the current consumer without breaking its string seam:
493
+ * - eval: the proposed remedy (+ the failing-case critiques for grounding).
494
+ * - diagnostics: the title + rationale + ordered apply instructions.
495
+ */
496
+ export function amendToBuildRemedy(a: AmendRequest): string {
497
+ if (a.origin === AmendOrigin.Eval) {
498
+ const critiques = (a.failingCases ?? []).map((c) => `• ${c.criterionId}: ${c.critique}`);
499
+ return [a.proposedRemedy ?? "", ...critiques].filter((s) => s.length > 0).join("\n");
500
+ }
501
+ const steps = (a.applyInstructions ?? []).map((s, i) => `${i + 1}. ${s}`);
502
+ return [a.title, a.rationale, ...steps].filter((s): s is string => isNonEmptyString(s)).join("\n");
503
+ }