@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,219 @@
1
+ import { lookupRoute } from "./dispatch.ts";
2
+ import {
3
+ checkOnboardingComplete,
4
+ SOURCE_STAGES,
5
+ TARGET_STAGES,
6
+ } from "./onboarding-check.ts";
7
+ import type { MissingKey, OnboardingRunContext } from "./onboarding-check.ts";
8
+ import type { MutagentConfig } from "./config-schema.ts";
9
+ import type { AdlStageValue } from "./handover-contract.ts";
10
+
11
+ // ---------------------------------------------------------------------------
12
+ // O8 — execution gating (v0.2.0).
13
+ //
14
+ // gateExecution adjudicates whether a resolved *command may EXECUTE, given the
15
+ // current config + a small run-ctx. It enforces the SCOPED floors of the v0.2.0
16
+ // contract and nothing else:
17
+ //
18
+ // 1. MIGRATION floor — if the config is a LEGACY (pre-v0.2.0) config (loadConfig
19
+ // returned `{ ok:false, legacy:true }`), block with `migration-required`. No
20
+ // other floor runs — you must migrate before anything can gate.
21
+ //
22
+ // 2. ONBOARDING floor — for a command whose ROUTING stage needs a source and/or
23
+ // a target and/or a provider, it calls checkOnboardingComplete(config,
24
+ // [stage], runCtx) and, if incomplete, splits the result into the specific
25
+ // blocker kinds (`source-required` / `target-required` / `provider-required`
26
+ // / `config-error` for a broken SELECTION default (>1 `default: true`) /
27
+ // `onboarding-incomplete` for the base keys). CRITICAL: this is the
28
+ // shape-vs-completeness split — completeness is the completion-check's job;
29
+ // this gate calls it, it does NOT tighten the config schema. *audit routes
30
+ // to the evaluator but its routing stage is Audit — not a source stage — so
31
+ // *audit demands no source (its judge_model base-floor still applies when
32
+ // relevant, via checkOnboardingComplete).
33
+ //
34
+ // 3. APPROVAL floor — a `gated` command (CLI install / apply: *build, *diagnose,
35
+ // *improve, *onboard) is blocked `approval-required` unless
36
+ // ctx.approval_granted.
37
+ //
38
+ // allowed = blockers.length === 0.
39
+ //
40
+ // Pure + deterministic: no I/O, no clock, no random. Reuses the SAME route table
41
+ // as scripts/dispatch.ts via lookupRoute — one source of truth for the routing
42
+ // stage + the gated flag (same-package import, not a sealed-sibling cross-ref).
43
+ // ---------------------------------------------------------------------------
44
+
45
+ /** A single reason a command is blocked from executing. Discriminated on `kind`. */
46
+ export type Blocker =
47
+ | {
48
+ kind: "onboarding-incomplete";
49
+ /** The exact base config keys still required (from checkOnboardingComplete). */
50
+ missing: MissingKey[];
51
+ reason: string;
52
+ }
53
+ | {
54
+ kind: "source-required";
55
+ reason: string;
56
+ }
57
+ | {
58
+ kind: "target-required";
59
+ reason: string;
60
+ }
61
+ | {
62
+ kind: "provider-required";
63
+ reason: string;
64
+ }
65
+ | {
66
+ kind: "config-error";
67
+ /** Which role's selector is broken (source | target) — the ambiguous default. */
68
+ key: "source-config-error" | "target-config-error";
69
+ reason: string;
70
+ }
71
+ | {
72
+ kind: "migration-required";
73
+ reason: string;
74
+ }
75
+ | {
76
+ kind: "approval-required";
77
+ reason: string;
78
+ };
79
+
80
+ export interface GateResult {
81
+ /** True iff there are no blockers. */
82
+ allowed: boolean;
83
+ blockers: Blocker[];
84
+ }
85
+
86
+ /** The small injected context the gate reads (run-aware floors + approval). */
87
+ export interface GateContext {
88
+ /**
89
+ * Set when the operator has granted approval for a gated command (the
90
+ * orchestrator-led batch-approval after platforms are configured). Absent /
91
+ * false ⇒ a gated command is blocked.
92
+ */
93
+ approval_granted?: boolean;
94
+ /** Evaluate mode — `discover` makes evaluate a source-consuming stage. */
95
+ mode?: OnboardingRunContext["mode"];
96
+ /** Evaluator judge runtime (renamed from substrate) — `in-house` needs a provider. */
97
+ judge_runtime?: OnboardingRunContext["substrate"];
98
+ /** True when APPLY is requested (build/improve/diagnose write a fix ⇒ target floor). */
99
+ apply_requested?: boolean;
100
+ /**
101
+ * Set true when the config is a LEGACY (pre-v0.2.0) config (loadConfig returned
102
+ * `{ ok:false, legacy:true }`). Drives the migration-required floor.
103
+ */
104
+ legacy_config?: boolean;
105
+ }
106
+
107
+ /** True iff `stage` is a SOURCE stage (evaluate/diagnose — may consume a source). */
108
+ function isSourceStage(stage: AdlStageValue): boolean {
109
+ return SOURCE_STAGES.includes(stage);
110
+ }
111
+
112
+ /** True iff `stage` is a TARGET-writing stage (build/improve/diagnose). */
113
+ function isTargetStage(stage: AdlStageValue): boolean {
114
+ return TARGET_STAGES.includes(stage);
115
+ }
116
+
117
+ /** Base-floor missing keys (everything NOT already surfaced as its own blocker kind). */
118
+ const SPECIFIC_KEYS = new Set([
119
+ "source-required",
120
+ "target-required",
121
+ "provider-required",
122
+ "source-config-error",
123
+ "target-config-error",
124
+ ]);
125
+
126
+ /**
127
+ * Adjudicate whether `command` may execute against `config`.
128
+ *
129
+ * @param command the resolved *command (with or without a leading `*`).
130
+ * @param config the parsed (possibly partial) MutagentConfig (v0.2.0).
131
+ * @param ctx gate context: approval + run-aware floors (mode / judge_runtime /
132
+ * apply_requested) + legacy_config.
133
+ * @returns { allowed, blockers } — allowed iff blockers is empty.
134
+ *
135
+ * Pure + deterministic. An unrecognized command (no route) has no applicable
136
+ * floor and returns allowed:true with no blockers — command recognition is the
137
+ * dispatch layer's job (it returns an explicit `unknown` descriptor); the gate
138
+ * only adjudicates the migration + onboarding + approval floors.
139
+ */
140
+ export function gateExecution(
141
+ command: string,
142
+ config: MutagentConfig,
143
+ ctx: GateContext = {},
144
+ ): GateResult {
145
+ const blockers: Blocker[] = [];
146
+
147
+ // ── 1. MIGRATION floor (legacy config short-circuits everything) ────────────
148
+ if (ctx.legacy_config === true) {
149
+ blockers.push({
150
+ kind: "migration-required",
151
+ reason:
152
+ "the config is a legacy (pre-v0.2.0) shape — run the migration directive (references/config-migration.md) before any stage can execute",
153
+ });
154
+ return { allowed: false, blockers };
155
+ }
156
+
157
+ const route = lookupRoute(command);
158
+ const stage = route?.adl_stage;
159
+
160
+ // ── 2. ONBOARDING floor (scoped by the routing stage + run ctx) ─────────────
161
+ // Only a dispatch command carries a routing adl_stage. Evaluate the scoped
162
+ // floors only when the stage could demand a source, a target, a provider, or a
163
+ // judging base field. `checkOnboardingComplete` decides which floors actually
164
+ // apply given the run ctx (discover-only source, at-apply target, in-house
165
+ // provider); the gate just routes each missing key into its blocker kind.
166
+ // NOTE (F2): a `resolved-default` role binding (many entries + exactly one
167
+ // `default: true`) SATISFIES the source/target floor exactly like a
168
+ // `resolved-single` — it surfaces NO missing key here, so it adds NO blocker.
169
+ // The default-CONFIRM prompt is a run-time skill concern, not a gate. Only
170
+ // `multiple-defaults` (>1 default) surfaces a `config-error` blocker below.
171
+ if (stage !== undefined) {
172
+ const runCtx: OnboardingRunContext = {
173
+ mode: ctx.mode,
174
+ substrate: ctx.judge_runtime,
175
+ apply: ctx.apply_requested,
176
+ };
177
+ const status = checkOnboardingComplete(config, [stage], runCtx);
178
+ if (!status.complete) {
179
+ // Split the specific role floors into their own blocker kinds.
180
+ for (const m of status.missing) {
181
+ if (m.key === "source-required") {
182
+ blockers.push({ kind: "source-required", reason: m.reason });
183
+ } else if (m.key === "target-required") {
184
+ blockers.push({ kind: "target-required", reason: m.reason });
185
+ } else if (m.key === "provider-required") {
186
+ blockers.push({ kind: "provider-required", reason: m.reason });
187
+ } else if (m.key === "source-config-error" || m.key === "target-config-error") {
188
+ // SELECTION config error — >1 catalog entry marked `default: true`.
189
+ blockers.push({ kind: "config-error", key: m.key, reason: m.reason });
190
+ }
191
+ }
192
+ // The remaining base keys collapse into one onboarding-incomplete blocker.
193
+ const baseMissing = status.missing.filter((m) => !SPECIFIC_KEYS.has(m.key));
194
+ if (baseMissing.length > 0) {
195
+ blockers.push({
196
+ kind: "onboarding-incomplete",
197
+ missing: baseMissing,
198
+ reason: `onboarding is incomplete for the ${stage} stage — ${baseMissing
199
+ .map((m) => m.key)
200
+ .join(", ")}`,
201
+ });
202
+ }
203
+ }
204
+ }
205
+
206
+ // ── 3. APPROVAL floor (gated commands) ──────────────────────────────────────
207
+ if (route?.gated === true && ctx.approval_granted !== true) {
208
+ blockers.push({
209
+ kind: "approval-required",
210
+ reason:
211
+ "this command is gated (CLI install / apply) — explicit operator approval is required",
212
+ });
213
+ }
214
+
215
+ return { allowed: blockers.length === 0, blockers };
216
+ }
217
+
218
+ // Re-export for callers that want the membership sets alongside the gate.
219
+ export { isSourceStage, isTargetStage };
@@ -0,0 +1,362 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { type Static, Type } from "@sinclair/typebox";
4
+ import { TypeCompiler } from "@sinclair/typebox/compiler";
5
+
6
+ // ---------------------------------------------------------------------------
7
+ // O7 — the HandoverBundle contract BLUEPRINT.
8
+ //
9
+ // The typed contract the orchestrator EMITS when routing an ADL stage to a
10
+ // skill/agent (evaluate → diagnose → improve, plus the audit sibling). One
11
+ // bundle = one stage→stage handover.
12
+ //
13
+ // It is the EXPLICIT, AUDITABLE inter-stage boundary: every artifact that
14
+ // crosses between stages is enumerated in `inputs`, and the curated context
15
+ // handed down is enumerated in `context_pack` — so a downstream data-leak /
16
+ // context-flow audit (ADL Evaluator §7) can see exactly WHAT crossed the
17
+ // boundary and what was withheld (`partial_loads`). The object is CLOSED
18
+ // (additionalProperties:false at every level) so an undeclared field smuggled
19
+ // across the boundary is caught rather than silently passed.
20
+ //
21
+ // Producer-side, orchestrator-owned this iteration. Dispatch wiring (O6) lands
22
+ // later — this file only DECLARES the contract that future dispatch satisfies.
23
+ //
24
+ // Design invariants (mirror scripts/sync-index.ts):
25
+ // - Pure functions + a thin CLI wrapper. No clock, no random, no network.
26
+ // - Any timestamp / id / path is an INJECTED input, never self-generated, so
27
+ // makeHandoverBundle is deterministic (same input ⇒ identical bundle) and
28
+ // serialized fixtures are machine-independent (relative / placeholder
29
+ // locators only).
30
+ //
31
+ // NOTE: the `adl_stage` enum here (spec|build|evaluate|diagnose|improve|audit) is the
32
+ // ROUTING-stage set. It intentionally differs from the TOPOLOGY `AdlStage` in
33
+ // sync-index.ts (which adds orchestrator|shared|unknown and omits improve|audit):
34
+ // one classifies a routed action, the other classifies a directory on disk.
35
+ // ---------------------------------------------------------------------------
36
+
37
+ /** The FROZEN contract version. Bump only via an explicit, reviewed migration. */
38
+ export const HANDOVER_BUNDLE_VERSION = "0.1.0" as const;
39
+
40
+ // ── Categorical constants (no magic strings) ───────────────────────────────
41
+ export const AdlStage = {
42
+ Spec: "spec",
43
+ Build: "build",
44
+ Evaluate: "evaluate",
45
+ Diagnose: "diagnose",
46
+ Improve: "improve",
47
+ Audit: "audit",
48
+ } as const;
49
+ export type AdlStageValue = (typeof AdlStage)[keyof typeof AdlStage];
50
+
51
+ // The CANONICAL inter-stage subject vocabulary is `agent | skill | code` — it
52
+ // matches config-schema `TargetSubject` (the widest shipped target set) so a
53
+ // `code` subject can flow through the routed HandoverBundle to *evaluate's
54
+ // failure routing. `code` (Wave-2 follow-up) is ADDITIVE: it only widens the
55
+ // closed union; every previously-valid `skill`/`agent` bundle still validates,
56
+ // and dispatch's `toSubjectKind` (topology → skill|agent) is unchanged — it
57
+ // simply never emits `code` (no topology entry is a code subject today), so the
58
+ // widening carries a code subject WITHOUT changing any existing producer.
59
+ // (optimize's `SubjectKind` additionally recognizes a `platform` goal-legality
60
+ // kind; `platform` is intentionally NOT added here — nothing produces a platform
61
+ // handover subject, and the closed union stays minimal.)
62
+ export const SubjectKind = {
63
+ Skill: "skill",
64
+ Agent: "agent",
65
+ Code: "code",
66
+ } as const;
67
+ export type SubjectKindValue = (typeof SubjectKind)[keyof typeof SubjectKind];
68
+
69
+ /** The artifact kinds that cross an ADL stage boundary. Closed → auditable. */
70
+ export const ArtifactKind = {
71
+ Trace: "trace",
72
+ Dataset: "dataset",
73
+ Verdict: "verdict",
74
+ Scorecard: "scorecard",
75
+ Findings: "findings",
76
+ Report: "report",
77
+ Source: "source",
78
+ Spec: "spec",
79
+ Config: "config",
80
+ } as const;
81
+ export type ArtifactKindValue = (typeof ArtifactKind)[keyof typeof ArtifactKind];
82
+
83
+ export const EscalationPolicy = {
84
+ Escalate: "escalate",
85
+ Abort: "abort",
86
+ Proceed: "proceed",
87
+ } as const;
88
+ export type EscalationPolicyValue =
89
+ (typeof EscalationPolicy)[keyof typeof EscalationPolicy];
90
+
91
+ // ── TypeBox schemas (closed objects at every level) ─────────────────────────
92
+
93
+ /** What is being acted on. `path` mirrors the *sync index entry path. */
94
+ export const SubjectSchema = Type.Object(
95
+ {
96
+ kind: Type.Union([
97
+ Type.Literal(SubjectKind.Skill),
98
+ Type.Literal(SubjectKind.Agent),
99
+ Type.Literal(SubjectKind.Code),
100
+ ]),
101
+ name: Type.String({ minLength: 1 }),
102
+ // Relative path under mutagent-system/ (determinism: never absolute).
103
+ path: Type.String({ minLength: 1 }),
104
+ },
105
+ { additionalProperties: false },
106
+ );
107
+ export type Subject = Static<typeof SubjectSchema>;
108
+
109
+ /** The NL ask + the resolved *command that triggered the route. */
110
+ export const IntentSchema = Type.Object(
111
+ {
112
+ // The resolved *command, e.g. "*evaluate" / "*diagnose".
113
+ command: Type.String({ minLength: 1 }),
114
+ // The raw NL ask, when one triggered the route (absent for direct commands).
115
+ utterance: Type.Optional(Type.String()),
116
+ },
117
+ { additionalProperties: false },
118
+ );
119
+ export type Intent = Static<typeof IntentSchema>;
120
+
121
+ /**
122
+ * A reference to a single artifact crossing the boundary. `path` (relative) OR
123
+ * `uri` locates it — the at-least-one rule is enforced in validateHandoverBundle
124
+ * (TypeBox alone cannot express "at least one of"). `sha` / `bytes` are optional
125
+ * integrity / size hints.
126
+ */
127
+ export const ArtifactRefSchema = Type.Object(
128
+ {
129
+ id: Type.String({ minLength: 1 }),
130
+ kind: Type.Union([
131
+ Type.Literal(ArtifactKind.Trace),
132
+ Type.Literal(ArtifactKind.Dataset),
133
+ Type.Literal(ArtifactKind.Verdict),
134
+ Type.Literal(ArtifactKind.Scorecard),
135
+ Type.Literal(ArtifactKind.Findings),
136
+ Type.Literal(ArtifactKind.Report),
137
+ Type.Literal(ArtifactKind.Source),
138
+ Type.Literal(ArtifactKind.Spec),
139
+ Type.Literal(ArtifactKind.Config),
140
+ ]),
141
+ // Relative path (determinism: never absolute / machine-specific).
142
+ path: Type.Optional(Type.String({ minLength: 1 })),
143
+ // Remote locator (e.g. a langfuse:// session uri).
144
+ uri: Type.Optional(Type.String({ minLength: 1 })),
145
+ sha: Type.Optional(Type.String({ minLength: 1 })),
146
+ bytes: Type.Optional(Type.Integer({ minimum: 0 })),
147
+ },
148
+ { additionalProperties: false },
149
+ );
150
+ export type ArtifactRef = Static<typeof ArtifactRefSchema>;
151
+
152
+ /** One context item that was withheld / only partially loaded, with the why. */
153
+ export const PartialLoadSchema = Type.Object(
154
+ {
155
+ path: Type.String({ minLength: 1 }),
156
+ reason: Type.String({ minLength: 1 }),
157
+ },
158
+ { additionalProperties: false },
159
+ );
160
+ export type PartialLoad = Static<typeof PartialLoadSchema>;
161
+
162
+ /**
163
+ * The curated context handed down (mirrors the diagnostics CONTEXT_PACK).
164
+ * `partial_loads` is how a downstream auditor sees what was withheld / missing.
165
+ */
166
+ export const ContextPackSchema = Type.Object(
167
+ {
168
+ rules: Type.Array(Type.String()),
169
+ memory: Type.Array(Type.String()),
170
+ partial_loads: Type.Array(PartialLoadSchema),
171
+ },
172
+ { additionalProperties: false },
173
+ );
174
+ export type ContextPack = Static<typeof ContextPackSchema>;
175
+
176
+ /** The goal + criteria the downstream stage must satisfy. */
177
+ export const AcceptanceSchema = Type.Object(
178
+ {
179
+ goal: Type.String({ minLength: 1 }),
180
+ criteria: Type.Array(Type.String()),
181
+ },
182
+ { additionalProperties: false },
183
+ );
184
+ export type Acceptance = Static<typeof AcceptanceSchema>;
185
+
186
+ /** Who produced the bundle, and when — both INJECTED, never self-generated. */
187
+ export const ProvenanceSchema = Type.Object(
188
+ {
189
+ produced_by: Type.String({ minLength: 1 }),
190
+ // INJECTED ISO-8601 stamp (never a self-read clock — keeps builds machine-independent).
191
+ produced_at: Type.String({ minLength: 1 }),
192
+ },
193
+ { additionalProperties: false },
194
+ );
195
+ export type Provenance = Static<typeof ProvenanceSchema>;
196
+
197
+ /** The full handover-contract bundle. Closed object — undeclared fields rejected. */
198
+ export const HandoverBundleSchema = Type.Object(
199
+ {
200
+ bundle_version: Type.Literal(HANDOVER_BUNDLE_VERSION),
201
+ adl_stage: Type.Union([
202
+ Type.Literal(AdlStage.Spec),
203
+ Type.Literal(AdlStage.Build),
204
+ Type.Literal(AdlStage.Evaluate),
205
+ Type.Literal(AdlStage.Diagnose),
206
+ Type.Literal(AdlStage.Improve),
207
+ Type.Literal(AdlStage.Audit),
208
+ ]),
209
+ subject: SubjectSchema,
210
+ intent: IntentSchema,
211
+ // The data that crosses the boundary — explicit + enumerable (leak-auditable).
212
+ inputs: Type.Array(ArtifactRefSchema),
213
+ context_pack: ContextPackSchema,
214
+ acceptance: AcceptanceSchema,
215
+ provenance: ProvenanceSchema,
216
+ escalation_policy: Type.Union([
217
+ Type.Literal(EscalationPolicy.Escalate),
218
+ Type.Literal(EscalationPolicy.Abort),
219
+ Type.Literal(EscalationPolicy.Proceed),
220
+ ]),
221
+ },
222
+ { additionalProperties: false },
223
+ );
224
+ export type HandoverBundle = Static<typeof HandoverBundleSchema>;
225
+
226
+ // ── Validation ──────────────────────────────────────────────────────────────
227
+
228
+ export interface ValidationResult {
229
+ ok: boolean;
230
+ /** Human-readable error strings (path: message), empty when ok. */
231
+ errors: string[];
232
+ }
233
+
234
+ // Compiled checker — the "compiled checker" path (compiled once at module load).
235
+ const HandoverBundleChecker = TypeCompiler.Compile(HandoverBundleSchema);
236
+
237
+ /**
238
+ * Validate an arbitrary value against the HandoverBundle contract.
239
+ *
240
+ * Two floors:
241
+ * 1. STRUCTURAL — the compiled TypeBox checker. Catches missing / wrong-typed
242
+ * / out-of-enum / non-frozen-version fields AND undeclared extra fields
243
+ * (additionalProperties:false — the data-leak case).
244
+ * 2. SEMANTIC — every `inputs[]` artifact must be LOCATABLE: a relative `path`
245
+ * or a `uri`. An artifact with neither is an unlocatable / missing-data
246
+ * smell that TypeBox cannot express ("at least one of").
247
+ *
248
+ * Pure: no I/O, no clock. Never throws — a non-object input yields ok:false.
249
+ */
250
+ export function validateHandoverBundle(obj: unknown): ValidationResult {
251
+ const errors: string[] = [];
252
+
253
+ if (!HandoverBundleChecker.Check(obj)) {
254
+ for (const e of HandoverBundleChecker.Errors(obj)) {
255
+ errors.push(`${e.path === "" ? "/" : e.path}: ${e.message}`);
256
+ }
257
+ }
258
+
259
+ const inputs = (obj as { inputs?: unknown } | null)?.inputs;
260
+ if (Array.isArray(inputs)) {
261
+ inputs.forEach((raw, i) => {
262
+ const a = (raw ?? {}) as Record<string, unknown>;
263
+ const hasPath = typeof a.path === "string" && a.path.trim() !== "";
264
+ const hasUri = typeof a.uri === "string" && a.uri.trim() !== "";
265
+ if (!hasPath && !hasUri) {
266
+ errors.push(
267
+ `/inputs/${i}: artifact must carry a relative \`path\` or a \`uri\` (unlocatable artifact)`,
268
+ );
269
+ }
270
+ });
271
+ }
272
+
273
+ return { ok: errors.length === 0, errors };
274
+ }
275
+
276
+ // ── Builder ───────────────────────────────────────────────────────────────
277
+
278
+ /**
279
+ * Input to makeHandoverBundle. `bundle_version` is NOT accepted — the builder
280
+ * stamps the frozen constant. `provenance` (produced_by + produced_at) is fully
281
+ * INJECTED by the caller; the builder never generates a timestamp or id.
282
+ * `inputs` / `context_pack` are optional and default to empty.
283
+ */
284
+ export interface HandoverBundleInput {
285
+ adl_stage: AdlStageValue;
286
+ subject: Subject;
287
+ intent: Intent;
288
+ acceptance: Acceptance;
289
+ provenance: Provenance;
290
+ escalation_policy: EscalationPolicyValue;
291
+ inputs?: ArtifactRef[];
292
+ context_pack?: Partial<ContextPack>;
293
+ }
294
+
295
+ /**
296
+ * Assemble a HandoverBundle from injected input. Pure + deterministic: the same
297
+ * input always yields a deep-equal bundle (no clock, no random). Defaults the
298
+ * optional collections to empty so a minimal route still produces a valid,
299
+ * fully-enumerated bundle.
300
+ */
301
+ export function makeHandoverBundle(input: HandoverBundleInput): HandoverBundle {
302
+ return {
303
+ bundle_version: HANDOVER_BUNDLE_VERSION,
304
+ adl_stage: input.adl_stage,
305
+ subject: input.subject,
306
+ intent: input.intent,
307
+ inputs: input.inputs ?? [],
308
+ context_pack: {
309
+ rules: input.context_pack?.rules ?? [],
310
+ memory: input.context_pack?.memory ?? [],
311
+ partial_loads: input.context_pack?.partial_loads ?? [],
312
+ },
313
+ acceptance: input.acceptance,
314
+ provenance: input.provenance,
315
+ escalation_policy: input.escalation_policy,
316
+ };
317
+ }
318
+
319
+ // ---------------------------------------------------------------------------
320
+ // CLI — thin wrapper. Validates a serialized HandoverBundle JSON file:
321
+ // bun run scripts/handover-contract.ts <bundle.json>
322
+ // Exit 0 = valid; exit 1 = invalid (errors on stdout) or bad usage. Guarded
323
+ // parsing; deterministic (the only input is the file argument).
324
+ // ---------------------------------------------------------------------------
325
+ function runCli(argv: string[]): number {
326
+ const inputPath = argv.slice(2).find((a) => !a.startsWith("--"));
327
+ if (inputPath === undefined) {
328
+ process.stderr.write(
329
+ "Usage: bun run scripts/handover-contract.ts <bundle.json>\n" +
330
+ `Validates a serialized HandoverBundle against the frozen v${HANDOVER_BUNDLE_VERSION} ` +
331
+ "contract. Exit 0 = valid; exit 1 = invalid (errors on stdout).\n",
332
+ );
333
+ return 1;
334
+ }
335
+
336
+ let parsed: unknown;
337
+ try {
338
+ parsed = JSON.parse(fs.readFileSync(path.resolve(inputPath), "utf-8"));
339
+ } catch (err) {
340
+ process.stderr.write(`Error reading ${inputPath}: ${String(err)}\n`);
341
+ return 1;
342
+ }
343
+
344
+ const result = validateHandoverBundle(parsed);
345
+ if (result.ok) {
346
+ console.info("[handover-contract] PASS — valid HandoverBundle.");
347
+ return 0;
348
+ }
349
+ for (const e of result.errors) console.info(e);
350
+ process.stderr.write(
351
+ `[handover-contract] FAIL — ${result.errors.length} error(s).\n`,
352
+ );
353
+ return 1;
354
+ }
355
+
356
+ const isMain =
357
+ typeof import.meta !== "undefined" &&
358
+ (import.meta as unknown as { main?: boolean }).main === true;
359
+ if (isMain) {
360
+ const argv = typeof Bun !== "undefined" ? Bun.argv : process.argv;
361
+ process.exit(runCli(argv));
362
+ }