@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,166 @@
1
+ /**
2
+ * scripts/slicer.ts
3
+ * Dynamic-cluster and window-based trace slicer — PR-017
4
+ * Type A — Pure Script (deterministic math + cap-of-5 clustering)
5
+ *
6
+ * Reads a Tier0Report + TraceMetadata list, emits a slice plan (array of slices,
7
+ * each being a list of traceIds for one analyzer to process).
8
+ *
9
+ * Usage: bun scripts/slicer.ts <tier0-report.json> <traces-metadata.json> [--cap N]
10
+ */
11
+
12
+ import { readFileSync } from "fs";
13
+ import type { TraceMetadata } from "./normalize/trace.ts";
14
+ import type { Tier0Report } from "./tier0-scan.ts";
15
+
16
+ export interface SlicePlan {
17
+ totalSlices: number;
18
+ slices: TraceSlice[];
19
+ /** Why this slicing strategy was chosen */
20
+ rationale: string;
21
+ }
22
+
23
+ export interface TraceSlice {
24
+ sliceId: string;
25
+ strategy: "dynamic-cluster" | "window-based";
26
+ /** Cluster label for dynamic-cluster slices */
27
+ clusterLabel?: string;
28
+ traceIds: string[];
29
+ /** Scope context passed to the analyzer */
30
+ scope: {
31
+ hasError: boolean;
32
+ hasFeedback: boolean;
33
+ isPrimarySignal: boolean;
34
+ estimatedComplexity: "low" | "medium" | "high";
35
+ };
36
+ }
37
+
38
+ const DEFAULT_CAP = 5;
39
+
40
+ export function computeSlicePlan(
41
+ tier0: Tier0Report,
42
+ traces: TraceMetadata[],
43
+ cap = DEFAULT_CAP
44
+ ): SlicePlan {
45
+ if (traces.length === 0) {
46
+ return {
47
+ totalSlices: 0,
48
+ slices: [],
49
+ rationale: "No traces to analyze.",
50
+ };
51
+ }
52
+
53
+ if (tier0.recommendedSlicing === "dynamic-cluster") {
54
+ return dynamicClusterSlice(tier0, traces, cap);
55
+ }
56
+
57
+ return windowBasedSlice(traces, cap);
58
+ }
59
+
60
+ function dynamicClusterSlice(
61
+ tier0: Tier0Report,
62
+ traces: TraceMetadata[],
63
+ cap: number
64
+ ): SlicePlan {
65
+ const clusters: Map<string, TraceMetadata[]> = new Map();
66
+
67
+ // Cluster 1: errors
68
+ const errors = traces.filter((t) => t.hasError);
69
+ if (errors.length > 0) clusters.set("errors", errors);
70
+
71
+ // Cluster 2: low-score + feedback
72
+ const scoredNegative = traces.filter(
73
+ (t) =>
74
+ t.hasFeedback ||
75
+ (t.normalizedScore !== undefined && t.normalizedScore <= 0.4)
76
+ );
77
+ if (scoredNegative.length > 0) clusters.set("negative-feedback", scoredNegative);
78
+
79
+ // Cluster 3: high-latency (not already in errors)
80
+ const highLatency = traces.filter(
81
+ (t) => !t.hasError && t.latencyMs !== undefined && t.latencyMs > 10_000
82
+ );
83
+ if (highLatency.length > 0) clusters.set("high-latency", highLatency);
84
+
85
+ // Fill remaining slots with unclustered traces
86
+ const clusteredIds = new Set([...clusters.values()].flatMap((ts) => ts.map((t) => t.traceId)));
87
+ const unclustered = traces.filter((t) => !clusteredIds.has(t.traceId));
88
+ if (unclustered.length > 0 && clusters.size < cap) {
89
+ clusters.set("remaining", unclustered);
90
+ }
91
+
92
+ const slices: TraceSlice[] = [...clusters.entries()]
93
+ .slice(0, cap)
94
+ .map(([label, ts], i) => ({
95
+ sliceId: `slice-${i + 1}`,
96
+ strategy: "dynamic-cluster" as const,
97
+ clusterLabel: label,
98
+ traceIds: ts.map((t) => t.traceId),
99
+ scope: {
100
+ hasError: ts.some((t) => t.hasError),
101
+ hasFeedback: ts.some((t) => t.hasFeedback),
102
+ isPrimarySignal: label === "negative-feedback" || label === "errors",
103
+ estimatedComplexity:
104
+ ts.length > 20 ? "high" : ts.length > 5 ? "medium" : "low",
105
+ },
106
+ }));
107
+
108
+ return {
109
+ totalSlices: slices.length,
110
+ slices,
111
+ rationale: `Dynamic-cluster slicing: ${slices.length} cluster(s) from ${traces.length} traces. Clusters: ${slices.map((s) => s.clusterLabel).join(", ")}.`,
112
+ };
113
+ }
114
+
115
+ function windowBasedSlice(traces: TraceMetadata[], cap: number): SlicePlan {
116
+ const windowSize = Math.ceil(traces.length / cap);
117
+ const slices: TraceSlice[] = [];
118
+
119
+ for (let i = 0; i < cap && i * windowSize < traces.length; i++) {
120
+ const window = traces.slice(i * windowSize, (i + 1) * windowSize);
121
+ slices.push({
122
+ sliceId: `slice-${i + 1}`,
123
+ strategy: "window-based",
124
+ traceIds: window.map((t) => t.traceId),
125
+ scope: {
126
+ hasError: window.some((t) => t.hasError),
127
+ hasFeedback: window.some((t) => t.hasFeedback),
128
+ isPrimarySignal: false,
129
+ estimatedComplexity:
130
+ window.length > 20 ? "high" : window.length > 5 ? "medium" : "low",
131
+ },
132
+ });
133
+ }
134
+
135
+ return {
136
+ totalSlices: slices.length,
137
+ slices,
138
+ rationale: `Window-based slicing (no a-priori signal): ${slices.length} window(s) of ~${windowSize} traces each.`,
139
+ };
140
+ }
141
+
142
+ // CLI entrypoint
143
+ if (import.meta.main) {
144
+ const tier0Path = process.argv[2];
145
+ const tracesPath = process.argv[3];
146
+ const capArg = process.argv.indexOf("--cap");
147
+ const cap = capArg >= 0 ? parseInt(process.argv[capArg + 1] ?? "5", 10) : DEFAULT_CAP;
148
+
149
+ if (!tier0Path || !tracesPath) {
150
+ process.stderr.write(
151
+ "Usage: bun scripts/slicer.ts <tier0-report.json> <traces-metadata.json> [--cap N]\n"
152
+ );
153
+ process.exit(1);
154
+ }
155
+
156
+ try {
157
+ const tier0: Tier0Report = JSON.parse(readFileSync(tier0Path, "utf8"));
158
+ const traces: TraceMetadata[] = JSON.parse(readFileSync(tracesPath, "utf8"));
159
+ const plan = computeSlicePlan(tier0, traces, cap);
160
+ process.stdout.write(JSON.stringify(plan, null, 2) + "\n");
161
+ process.exit(0);
162
+ } catch (err) {
163
+ process.stderr.write(`Error: ${err}\n`);
164
+ process.exit(1);
165
+ }
166
+ }
@@ -0,0 +1,17 @@
1
+ import { SourceAdapterId } from "../types.ts";
2
+ import type { SourceAdapter } from "../types.ts";
3
+
4
+ // Claude Code source adapter. The bespoke Tier-0 scanner (v0.3 apiErrors /
5
+ // compactionEvents / teammate-ratio patterns) lives in tier0/claude-code.ts and
6
+ // is loaded LAZILY — mirroring the pre-registry dynamic import. runClaudeCodeTier0
7
+ // takes no config, so the `config` param of the Tier0Scan signature is omitted here
8
+ // (TypeScript permits an implementation with fewer params than its type).
9
+ export const claudeCodeSourceAdapter: SourceAdapter = {
10
+ id: SourceAdapterId.ClaudeCode,
11
+ label: "Claude Code",
12
+ live: true,
13
+ async tier0Scan(traces) {
14
+ const mod = await import("../../tier0/claude-code.ts");
15
+ return mod.runClaudeCodeTier0(traces);
16
+ },
17
+ };
@@ -0,0 +1,11 @@
1
+ import { SourceAdapterId } from "../types.ts";
2
+ import type { SourceAdapter } from "../types.ts";
3
+
4
+ // Codex source adapter — Codex session transcripts. No bespoke Tier-0 scanner;
5
+ // uses the generic scan (omitting `tier0Scan`), unchanged from the pre-registry
6
+ // fallback path (Codex never had a per-platform Tier-0 branch).
7
+ export const codexSourceAdapter: SourceAdapter = {
8
+ id: SourceAdapterId.Codex,
9
+ label: "Codex",
10
+ live: true,
11
+ };
@@ -0,0 +1,17 @@
1
+ import { SourceAdapterId } from "../types.ts";
2
+ import type { SourceAdapter } from "../types.ts";
3
+
4
+ // Langfuse source adapter. The bespoke Tier-0 scanner (LF-001 low-score
5
+ // concentration + config-honoring IQR latency fence) lives in tier0/langfuse.ts;
6
+ // it is loaded LAZILY here — exactly as the pre-registry `dispatchPlatformTier0`
7
+ // did — so (a) registering the adapter set is cheap and (b) there is no eval-time
8
+ // import cycle (tier0/langfuse.ts imports iqrUpperFence from tier0-scan.ts).
9
+ export const langfuseSourceAdapter: SourceAdapter = {
10
+ id: SourceAdapterId.Langfuse,
11
+ label: "Langfuse",
12
+ live: true,
13
+ async tier0Scan(traces, config) {
14
+ const mod = await import("../../tier0/langfuse.ts");
15
+ return mod.runLangfuseTier0(traces, config);
16
+ },
17
+ };
@@ -0,0 +1,12 @@
1
+ import { SourceAdapterId } from "../types.ts";
2
+ import type { SourceAdapter } from "../types.ts";
3
+
4
+ // Local-JSONL source adapter — the UniTF handover format read directly off disk
5
+ // (no per-platform fetch/normalize; see normalize/read-unitf.ts). No bespoke
6
+ // Tier-0 scanner — uses the generic scan (omitting `tier0Scan`), unchanged from
7
+ // the pre-registry fallback path.
8
+ export const localJsonlSourceAdapter: SourceAdapter = {
9
+ id: SourceAdapterId.LocalJsonl,
10
+ label: "Local JSONL (UniTF)",
11
+ live: true,
12
+ };
@@ -0,0 +1,12 @@
1
+ import { SourceAdapterId } from "../types.ts";
2
+ import type { SourceAdapter } from "../types.ts";
3
+
4
+ // OpenTelemetry source adapter (also the transport for OpenObserve, ingested via
5
+ // the UniTF/local-jsonl handover). No bespoke Tier-0 scanner — OTel batches use
6
+ // the generic scan (omitting `tier0Scan` selects the generic path), preserving
7
+ // the exact pre-registry behavior where only langfuse/claude-code had a branch.
8
+ export const otelSourceAdapter: SourceAdapter = {
9
+ id: SourceAdapterId.Otel,
10
+ label: "OpenTelemetry",
11
+ live: true,
12
+ };
@@ -0,0 +1,54 @@
1
+ import { registerSourceAdapter, clearSourceAdapters } from "./registry.ts";
2
+ import { langfuseSourceAdapter } from "./adapters/langfuse.ts";
3
+ import { otelSourceAdapter } from "./adapters/otel.ts";
4
+ import { localJsonlSourceAdapter } from "./adapters/local-jsonl.ts";
5
+ import { claudeCodeSourceAdapter } from "./adapters/claude-code.ts";
6
+ import { codexSourceAdapter } from "./adapters/codex.ts";
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // Source-adapter registration entry point (mirrors apply/index.ts
10
+ // registerBuiltinAdapters). The five shipped sources register declaratively
11
+ // here; adding a source = drop an adapter file + one line below (+ the
12
+ // SourcePlatform literal in normalize/trace.ts & config/schema.ts). No consumer
13
+ // switch to edit — see references/source-adapter-contract.md.
14
+ // ---------------------------------------------------------------------------
15
+
16
+ /** Register the shipped source adapters (idempotent — clears then registers). */
17
+ export function registerBuiltinSourceAdapters(): void {
18
+ clearSourceAdapters();
19
+ registerSourceAdapter(langfuseSourceAdapter);
20
+ registerSourceAdapter(otelSourceAdapter);
21
+ registerSourceAdapter(localJsonlSourceAdapter);
22
+ registerSourceAdapter(claudeCodeSourceAdapter);
23
+ registerSourceAdapter(codexSourceAdapter);
24
+ }
25
+
26
+ let _builtinsRegistered = false;
27
+
28
+ /**
29
+ * Ensure the shipped adapters are registered EXACTLY once. Library callers (e.g.
30
+ * tier0-scan's platform-aware dispatch) invoke this instead of
31
+ * registerBuiltinSourceAdapters so a caller-registered custom/fake adapter is not
32
+ * clobbered on every scan. Tests reset via clearSourceAdapters() +
33
+ * resetBuiltinSourceAdaptersForTest().
34
+ */
35
+ export function ensureBuiltinSourceAdapters(): void {
36
+ if (_builtinsRegistered) return;
37
+ registerBuiltinSourceAdapters();
38
+ _builtinsRegistered = true;
39
+ }
40
+
41
+ /** Test seam — reset the ensure-once latch so a suite can re-exercise registration. */
42
+ export function resetBuiltinSourceAdaptersForTest(): void {
43
+ _builtinsRegistered = false;
44
+ }
45
+
46
+ export type { SourceAdapter, SourceAdapterIdValue } from "./types.ts";
47
+ export { SourceAdapterId } from "./types.ts";
48
+ export {
49
+ registerSourceAdapter,
50
+ getSourceAdapter,
51
+ tryGetSourceAdapter,
52
+ listSourceAdapters,
53
+ clearSourceAdapters,
54
+ } from "./registry.ts";
@@ -0,0 +1,45 @@
1
+ import type { SourceAdapter, SourceAdapterIdValue } from "./types.ts";
2
+
3
+ // ---------------------------------------------------------------------------
4
+ // Source-adapter registry (mirrors the apply-layer target-adapter registry in
5
+ // @mutagent/tools src/apply/registry.ts). Adapters self-register via ./index.ts
6
+ // (imported once). Kept tiny so the registration graph is obvious.
7
+ // ---------------------------------------------------------------------------
8
+
9
+ const REGISTRY = new Map<SourceAdapterIdValue, SourceAdapter>();
10
+
11
+ export function registerSourceAdapter(adapter: SourceAdapter): void {
12
+ REGISTRY.set(adapter.id, adapter);
13
+ }
14
+
15
+ /**
16
+ * Resolve an adapter, THROWING a clear error (with the registered set) when the
17
+ * source is unknown. Use this for the strict binding path where an unregistered
18
+ * `source.platform` is a hard error.
19
+ */
20
+ export function getSourceAdapter(id: SourceAdapterIdValue): SourceAdapter {
21
+ const a = REGISTRY.get(id);
22
+ if (!a) {
23
+ const known = [...REGISTRY.keys()].sort().join(", ") || "(none registered)";
24
+ throw new Error(`no source adapter registered for id '${id}'. Registered: ${known}.`);
25
+ }
26
+ return a;
27
+ }
28
+
29
+ /**
30
+ * Resolve an adapter, or `undefined` when unknown. Use this for the tolerant
31
+ * dispatch path (tier0-scan) that must FALL BACK to the generic scan for an
32
+ * unregistered / mixed-platform batch rather than throw.
33
+ */
34
+ export function tryGetSourceAdapter(id: SourceAdapterIdValue): SourceAdapter | undefined {
35
+ return REGISTRY.get(id);
36
+ }
37
+
38
+ export function listSourceAdapters(): SourceAdapter[] {
39
+ return [...REGISTRY.values()].sort((a, b) => a.id.localeCompare(b.id));
40
+ }
41
+
42
+ /** Test/reset seam. */
43
+ export function clearSourceAdapters(): void {
44
+ REGISTRY.clear();
45
+ }
@@ -0,0 +1,86 @@
1
+ // ---------------------------------------------------------------------------
2
+ // mutagent-diagnostics source layer — the SHARED read-side transport (the
3
+ // symmetric twin of the write-side `TargetAdapter` in @mutagent/tools
4
+ // src/apply). One `SourceAdapter` interface, N adapters; the `source.platform`
5
+ // config field binds to an adapter id (see ./registry.ts getSourceAdapter).
6
+ //
7
+ // BEFORE this layer the per-platform read path was ad-hoc: tier0-scan.ts held a
8
+ // hard-coded `if (platform === "langfuse") … if (platform === "claude-code") …`
9
+ // dispatch with inline dynamic imports. A new trace source could not register
10
+ // declaratively — you edited the switch. This layer replaces that switch with a
11
+ // registry, mirroring the apply layer exactly:
12
+ //
13
+ // apply (write side) source (read side)
14
+ // ────────────────── ──────────────────
15
+ // AdapterId (const) ⇄ SourceAdapterId (const)
16
+ // TargetAdapter (interface) ⇄ SourceAdapter (interface)
17
+ // registerTargetAdapter ⇄ registerSourceAdapter
18
+ // getTargetAdapter (throws) ⇄ getSourceAdapter (throws)
19
+ // listTargetAdapters ⇄ listSourceAdapters
20
+ // clearTargetAdapters ⇄ clearSourceAdapters
21
+ // registerBuiltinAdapters ⇄ registerBuiltinSourceAdapters
22
+ // apply.kind → adapterIdForKind ⇄ source.platform → id (1:1, identity)
23
+ //
24
+ // Asymmetry (intentional): the apply layer needs a binding.ts because `apply.kind`
25
+ // (4 config values) maps NON-1:1 onto adapter ids (code-pr AND markdown → worktree-pr;
26
+ // cloud-deploy → rest OR vendor). On the read side `source.platform` → adapter id is
27
+ // 1:1 (the id IS the platform literal), so no binding module is warranted — the
28
+ // registry key IS the platform. See references/source-adapter-contract.md.
29
+ // ---------------------------------------------------------------------------
30
+
31
+ import type { SourcePlatform, TraceMetadata } from "../normalize/trace.ts";
32
+ import type { Tier0Report, Tier0ScanConfig } from "../tier0-scan.ts";
33
+
34
+ /**
35
+ * The source transports — `source.platform` binds directly to one of these ids
36
+ * (1:1). Mirrors `AdapterId` in the apply layer. Declared as a const object (not
37
+ * a bare union) so callers can reference `SourceAdapterId.Langfuse` symbolically
38
+ * and so `listSourceAdapters()` / tests can enumerate the shipped set.
39
+ */
40
+ export const SourceAdapterId = {
41
+ /** Langfuse traces — explicit score + feedback + latency signals as first-class fields. */
42
+ Langfuse: "langfuse",
43
+ /** OpenTelemetry spans (incl. OpenObserve, ingested via the UniTF/local-jsonl handover). */
44
+ Otel: "otel",
45
+ /** Local JSONL export (the UniTF handover format) — read directly, no per-platform fetch. */
46
+ LocalJsonl: "local-jsonl",
47
+ /** Claude Code session transcripts — v0.3 apiErrors / compactionEvents extensions. */
48
+ ClaudeCode: "claude-code",
49
+ /** Codex session transcripts. */
50
+ Codex: "codex",
51
+ } as const;
52
+
53
+ /** An adapter id === a `SourcePlatform` literal (the read-side ids are 1:1 with platforms). */
54
+ export type SourceAdapterIdValue = SourcePlatform;
55
+
56
+ /**
57
+ * Optional per-platform Tier-0 enrichment capability. When an adapter provides
58
+ * this, `runTier0ScanPlatformAware` dispatches a homogeneous batch here for signal
59
+ * extraction tuned to the source's signal density (e.g. Langfuse LF-001 low-score
60
+ * concentration, Claude-Code compaction clusters). When ABSENT, the generic
61
+ * `runTier0Scan` runs — identical to the pre-registry fallback for otel /
62
+ * local-jsonl / codex. Implementations should lazily `import()` their heavy scan
63
+ * module (as the pre-registry dispatch did) so registration stays cheap + cycle-free.
64
+ */
65
+ // eslint-disable-next-line no-unused-vars -- fn-type-alias param names (pkg convention, see setup/ensure-cli.ts)
66
+ export type Tier0ScanFn = (traces: TraceMetadata[], config: Tier0ScanConfig) => Tier0Report | Promise<Tier0Report>;
67
+
68
+ /**
69
+ * The contract every source adapter implements — the read-side twin of
70
+ * `TargetAdapter`. Adapters self-register through the registry (./index.ts).
71
+ */
72
+ export interface SourceAdapter {
73
+ /** The source platform this adapter serves — binds to config `source.platform`. */
74
+ id: SourceAdapterIdValue;
75
+ /** Human-readable label (onboarding pickers / diagnostics). */
76
+ label: string;
77
+ /** false for a SEAM stub (a source declared but not yet live); true when shipped. */
78
+ live: boolean;
79
+ /**
80
+ * Optional per-platform Tier-0 scan. Present for platforms with a bespoke scanner
81
+ * (langfuse, claude-code); absent for platforms that use the generic scan (otel,
82
+ * local-jsonl, codex). Absence is a first-class, behavior-defining value — it
83
+ * selects the generic path, NOT an error.
84
+ */
85
+ tier0Scan?: Tier0ScanFn;
86
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * scripts/stale-detector.ts
3
+ * Hash comparison for target freshness check — PR-011
4
+ * Type A — Pure Script (pure hash compare, no I/O side effects)
5
+ *
6
+ * Before any apply, the orchestrator calls this script to check if the target
7
+ * has changed since the diagnostic was run.
8
+ *
9
+ * Usage: bun scripts/stale-detector.ts <diagnosed-at-hash> <current-hash>
10
+ * Exit 0 = fresh (hashes match), Exit 1 = stale (hashes differ), Exit 2 = error
11
+ */
12
+
13
+ import { createHash } from "crypto";
14
+ import { readFileSync, existsSync } from "fs";
15
+
16
+ export interface StalenessResult {
17
+ stale: boolean;
18
+ diagnosedAtHash: string;
19
+ currentHash: string;
20
+ reason?: string;
21
+ }
22
+
23
+ /**
24
+ * Compare two content hashes.
25
+ * Returns stale=true if they differ.
26
+ */
27
+ export function checkStaleness(
28
+ diagnosedAtHash: string,
29
+ currentHash: string
30
+ ): StalenessResult {
31
+ const stale = diagnosedAtHash !== currentHash;
32
+ return {
33
+ stale,
34
+ diagnosedAtHash,
35
+ currentHash,
36
+ reason: stale
37
+ ? "Target has changed since diagnostic was run. Re-diagnose recommended."
38
+ : undefined,
39
+ };
40
+ }
41
+
42
+ /**
43
+ * Compute SHA-256 hash of a file's content.
44
+ * Returns null if file doesn't exist.
45
+ */
46
+ export function hashFile(filePath: string): string | null {
47
+ if (!existsSync(filePath)) return null;
48
+ const content = readFileSync(filePath);
49
+ return createHash("sha256").update(content).digest("hex");
50
+ }
51
+
52
+ /**
53
+ * Compute SHA-256 hash of a string value.
54
+ */
55
+ export function hashString(value: string): string {
56
+ return createHash("sha256").update(value, "utf8").digest("hex");
57
+ }
58
+
59
+ // CLI entrypoint
60
+ if (import.meta.main) {
61
+ const diagnosedAtHash = process.argv[2];
62
+ const currentHash = process.argv[3];
63
+
64
+ if (!diagnosedAtHash || !currentHash) {
65
+ process.stderr.write(
66
+ "Usage: bun scripts/stale-detector.ts <diagnosed-at-hash> <current-hash>\n"
67
+ );
68
+ process.exit(2);
69
+ }
70
+
71
+ const result = checkStaleness(diagnosedAtHash, currentHash);
72
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
73
+ process.exit(result.stale ? 1 : 0);
74
+ }