@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,134 @@
1
+ /**
2
+ * scripts/config/validate.ts
3
+ * Schema validation for the v0.2.0 diagnostics config using TypeBox.
4
+ *
5
+ * v0.2.0: validation now spans TWO surfaces —
6
+ * 1. the `lifecycle.diagnostics` SECTION (opaque skill knobs — ask_tool, apply,
7
+ * context, self_diagnostics, …) against `DiagnosticsConfigSchema`;
8
+ * 2. the RESOLVED source/target catalog entries (bound BY ROLE in load.ts)
9
+ * against `GlobalSourceSchema` / `GlobalTargetSchema`.
10
+ * `source` / `target` are no longer inline in the diagnostics section, so the
11
+ * required-field check moved to the resolved entries.
12
+ * Type A — Pure Script (deterministic validation, typed errors)
13
+ */
14
+
15
+ import { Value } from "@sinclair/typebox/value";
16
+ import {
17
+ DiagnosticsConfigSchema,
18
+ GlobalSourceSchema,
19
+ GlobalTargetSchema,
20
+ } from "./schema.ts";
21
+ import type {
22
+ DiagnosticsConfig,
23
+ GlobalSource,
24
+ GlobalTarget,
25
+ } from "./schema.ts";
26
+
27
+ export interface ValidationResult {
28
+ valid: boolean;
29
+ errors: ValidationError[];
30
+ missingFields: string[];
31
+ }
32
+
33
+ export interface ValidationError {
34
+ path: string;
35
+ message: string;
36
+ value?: unknown;
37
+ }
38
+
39
+ /** What validateResolved needs — the section + the role-resolved catalog entries. */
40
+ export interface ResolvedConfigInput {
41
+ config: DiagnosticsConfig | null;
42
+ source: GlobalSource | null;
43
+ target: GlobalTarget | null;
44
+ }
45
+
46
+ function collectErrors(
47
+ schema: Parameters<typeof Value.Check>[0],
48
+ raw: unknown,
49
+ prefix: string,
50
+ ): ValidationError[] {
51
+ const errors: ValidationError[] = [];
52
+ if (!Value.Check(schema, raw)) {
53
+ for (const error of Value.Errors(schema, raw)) {
54
+ errors.push({
55
+ path: `${prefix}${error.path}`,
56
+ message: error.message,
57
+ value: error.value,
58
+ });
59
+ }
60
+ }
61
+ return errors;
62
+ }
63
+
64
+ /**
65
+ * Validate a parsed `lifecycle.diagnostics` section against the TypeBox schema.
66
+ * (Kept for callers that only have the section — the resolved source/target are
67
+ * validated separately via `validateResolved`.)
68
+ */
69
+ export function validateConfig(raw: unknown): ValidationResult {
70
+ const errors = collectErrors(DiagnosticsConfigSchema, raw, "");
71
+
72
+ const missingFields: string[] = [];
73
+ const config = raw as Partial<DiagnosticsConfig>;
74
+ if (!config?.ask_tool?.runtime) missingFields.push("ask_tool.runtime");
75
+
76
+ return {
77
+ valid: errors.length === 0 && missingFields.length === 0,
78
+ errors,
79
+ missingFields,
80
+ };
81
+ }
82
+
83
+ /**
84
+ * v0.2.0 — validate the RESOLVED config: the diagnostics section PLUS the
85
+ * role-bound source + target catalog entries. A missing (null) source/target is a
86
+ * missingField (onboarding-completeness concern), NOT a schema error; a PRESENT
87
+ * entry with a bad shape IS a schema error.
88
+ */
89
+ export function validateResolved(input: ResolvedConfigInput): ValidationResult {
90
+ const errors: ValidationError[] = [];
91
+ const missingFields: string[] = [];
92
+
93
+ // Section (opaque skill knobs).
94
+ errors.push(...collectErrors(DiagnosticsConfigSchema, input.config, "diagnostics"));
95
+ if (!input.config?.ask_tool?.runtime) missingFields.push("ask_tool.runtime");
96
+
97
+ // Resolved source (bound by role from global.sources).
98
+ if (input.source === null) {
99
+ missingFields.push("global.sources[] (source-consumer role)");
100
+ } else {
101
+ errors.push(...collectErrors(GlobalSourceSchema, input.source, "global.source"));
102
+ }
103
+
104
+ // Resolved target (bound by role from global.targets).
105
+ if (input.target === null) {
106
+ missingFields.push("global.targets[] (target-writer role)");
107
+ } else {
108
+ errors.push(...collectErrors(GlobalTargetSchema, input.target, "global.target"));
109
+ }
110
+
111
+ return {
112
+ valid: errors.length === 0 && missingFields.length === 0,
113
+ errors,
114
+ missingFields,
115
+ };
116
+ }
117
+
118
+ // CLI usage: bun scripts/config/validate.ts [config-json-string]
119
+ if (import.meta.main) {
120
+ const input = process.argv[2];
121
+ if (!input) {
122
+ process.stderr.write("Usage: bun scripts/config/validate.ts '<json>'\n");
123
+ process.exit(1);
124
+ }
125
+ try {
126
+ const parsed = JSON.parse(input);
127
+ const result = validateConfig(parsed);
128
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
129
+ process.exit(result.valid ? 0 : 1);
130
+ } catch (err) {
131
+ process.stderr.write(`JSON parse error: ${err}\n`);
132
+ process.exit(1);
133
+ }
134
+ }
@@ -0,0 +1,417 @@
1
+ /**
2
+ * scripts/context/build-diagnosis-context.ts
3
+ * W18-context: the DETERMINISTIC (no-LLM) diagnosis-context assembler.
4
+ *
5
+ * Produces a rich, GROUNDED, source-aware "lens" about the diagnosed entity that
6
+ * each Analyzer reads + understands BEFORE it searches the traces for failure
7
+ * modes. The lens answers "what IS this thing?" (name · scope · model · purpose ·
8
+ * tools · config · FULL system prompt · source code when accessible) so the
9
+ * analyzer corroborates against a factual baseline rather than starting blind.
10
+ *
11
+ * Type A — Pure Script (content-derived only — NO LLM, NO clock, NO random).
12
+ * Same inputs ⇒ byte-identical `diagnosis-context.md`.
13
+ *
14
+ * ── GROUNDING CONTRACT (operator principle, PR-026 / PR-018) ──────────────────
15
+ * The context is EXTRACTED FACT ONLY. We NEVER seed it with a guess or assumption
16
+ * (e.g. NOT "prompt is uncached", NOT "latency caused by X"). The analyzer will
17
+ * CORROBORATE whatever we give it, so an unverified hint becomes a self-fulfilling
18
+ * error. Every fact carries a `provenance` tag naming where it came from. The one
19
+ * operator-supplied field (`--purpose`) is explicitly labeled "operator-stated"
20
+ * so it is never mistaken for a trace-extracted fact. Anything we cannot ground
21
+ * is OMITTED — there is deliberately no field for inferred/derived claims.
22
+ */
23
+
24
+ import type { EntityContext, ToolInventoryEntry, TraceBody } from "../normalize/trace.ts";
25
+ import { extractFullSystemPrompt, sanitize } from "../normalize/platforms/entity-context.ts";
26
+ import type { FullSystemPrompt } from "../normalize/platforms/entity-context.ts";
27
+
28
+ // ── provenance ────────────────────────────────────────────────────────────────
29
+
30
+ /**
31
+ * Where a fact in the diagnosis-context came from. Every section is tagged so the
32
+ * analyzer (and any reader) can trace each fact to its origin. There is NO
33
+ * `inferred` value by design — un-grounded claims are omitted, not labeled.
34
+ */
35
+ export type Provenance =
36
+ /** Extracted by a normalizer from the source platform's traces. */
37
+ | "trace-extracted"
38
+ /** Read verbatim from accessible source code (SKILL.md, agent def, references). */
39
+ | "source-code"
40
+ /** Supplied by the operator at invocation (e.g. --purpose). NOT trace-derived. */
41
+ | "operator-stated";
42
+
43
+ /** A single source-code document included verbatim in the lens (codeAccess case). */
44
+ export interface SourceDocument {
45
+ /** Logical label, e.g. "SKILL.md", "references/principles.md", "agent definition". */
46
+ label: string;
47
+ /** Relative path the document was read from (for grounding citation). */
48
+ path: string;
49
+ /** FULL, verbatim (PII-sanitized) document content. Never distilled. */
50
+ content: string;
51
+ /** UTF-8 byte length of `content`. */
52
+ sizeBytes: number;
53
+ }
54
+
55
+ /**
56
+ * The structured diagnosis-context. Mirrors what the markdown renderer emits, so
57
+ * a consumer that wants structured data (not markdown) can use this directly.
58
+ * Optional fields are ABSENT when the underlying fact could not be grounded.
59
+ */
60
+ export interface DiagnosisContext {
61
+ /** Display name of the diagnosed entity. provenance: trace-extracted. */
62
+ name: string;
63
+ /** agent | tool | skill | model. provenance: trace-extracted. */
64
+ scope: EntityContext["entityType"];
65
+ /** Whether source code was accessible for this run. */
66
+ codeAccess: boolean;
67
+ /** Source-platform provenance string (e.g. "langfuse-export"). */
68
+ source: string;
69
+ /** Model identifier, when the trace carried one. provenance: trace-extracted. */
70
+ model?: string;
71
+ /** Operator-stated purpose (--purpose). provenance: operator-stated. */
72
+ purpose?: string;
73
+ /** Aggregated tool inventory. provenance: trace-extracted. */
74
+ toolInventory?: ToolInventoryEntry[];
75
+ /** Tool messages skipped for lack of a toolName (inventory undercount). */
76
+ toolSkippedCount?: number;
77
+ /** Tools with no latency coverage. */
78
+ toolsWithoutLatency?: number;
79
+ /**
80
+ * FULL untruncated system prompt extracted from the traces. Present for the
81
+ * no-codeAccess (client) case especially, where it is the PRIMARY ground truth.
82
+ * provenance: trace-extracted.
83
+ */
84
+ systemPrompt?: FullSystemPrompt;
85
+ /**
86
+ * Verbatim source documents (skill: SKILL.md + key references; agent: the agent
87
+ * definition / config). Empty / absent when there is no codeAccess.
88
+ * provenance: source-code.
89
+ */
90
+ sourceDocuments?: SourceDocument[];
91
+ /**
92
+ * Where remedies apply, when known from the EntityContext (e.g. skill assets).
93
+ * provenance: trace-extracted (carried on EntityContext).
94
+ */
95
+ applyTarget?: string;
96
+ }
97
+
98
+ // ── inputs ───────────────────────────────────────────────────────────────────
99
+
100
+ /**
101
+ * Inputs to the assembler. The `entityContext` + `traces` are produced upstream
102
+ * by the per-platform normalizer (Step 3.7). `sourceDocuments` are read by the
103
+ * CLI (or a caller) from accessible source code — the PURE function does no fs.
104
+ * `purpose` is the optional operator-stated lens.
105
+ */
106
+ export interface BuildDiagnosisContextInput {
107
+ /** The normalizer-produced EntityContext (name · scope · model · tools · …). */
108
+ entityContext: EntityContext;
109
+ /** Normalized traces — used to extract the FULL system prompt. */
110
+ traces: TraceBody[];
111
+ /**
112
+ * Verbatim source documents to embed (codeAccess case). The CALLER decides
113
+ * which docs are relevant per scope (skill → SKILL.md + references; agent →
114
+ * agent def). Content is sanitized here before embedding. Absent → none.
115
+ */
116
+ sourceDocuments?: Array<{ label: string; path: string; content: string }>;
117
+ /** Operator-stated purpose. Labeled operator-stated; never trace-derived. */
118
+ purpose?: string;
119
+ }
120
+
121
+ // ── assembler (pure) ───────────────────────────────────────────────────────────
122
+
123
+ /**
124
+ * Assemble the structured DiagnosisContext from upstream-extracted facts.
125
+ * DETERMINISTIC + pure: no fs, no clock, no LLM. Same inputs ⇒ identical output.
126
+ *
127
+ * Source-aware: when `codeAccess` is true the full source documents the caller
128
+ * supplied are embedded verbatim; the FULL system prompt is ALWAYS extracted
129
+ * from the traces and included when present (it is the primary ground truth for
130
+ * the no-codeAccess client case).
131
+ */
132
+ export function buildDiagnosisContext(
133
+ input: BuildDiagnosisContextInput
134
+ ): DiagnosisContext {
135
+ const { entityContext: ec, traces, sourceDocuments, purpose } = input;
136
+
137
+ const ctx: DiagnosisContext = {
138
+ name: ec.name,
139
+ scope: ec.entityType,
140
+ codeAccess: ec.codeAccess,
141
+ source: ec.source,
142
+ };
143
+
144
+ if (ec.model) ctx.model = ec.model;
145
+ if (ec.applyTarget) ctx.applyTarget = ec.applyTarget;
146
+
147
+ // Operator-stated purpose — labeled as such, never extracted/inferred.
148
+ const trimmedPurpose = purpose?.trim();
149
+ if (trimmedPurpose) ctx.purpose = trimmedPurpose;
150
+
151
+ // Tool inventory (trace-extracted) — carry the coverage caveats too.
152
+ if (ec.toolInventory && ec.toolInventory.length > 0) {
153
+ ctx.toolInventory = ec.toolInventory;
154
+ }
155
+ if (ec.skippedCount !== undefined) ctx.toolSkippedCount = ec.skippedCount;
156
+ if (ec.toolsWithoutLatency !== undefined) {
157
+ ctx.toolsWithoutLatency = ec.toolsWithoutLatency;
158
+ }
159
+
160
+ // FULL untruncated system prompt from the traces — the lens, not the 220c card.
161
+ const sys = extractFullSystemPrompt(traces);
162
+ if (sys) ctx.systemPrompt = sys;
163
+
164
+ // Source documents (codeAccess): embed verbatim + sanitized. We DO NOT gate on
165
+ // ec.codeAccess here — the CALLER controls what it passes; if a caller supplies
166
+ // docs we trust them, and the codeAccess flag is surfaced separately. This keeps
167
+ // the pure function honest (it reports exactly what it was given).
168
+ if (sourceDocuments && sourceDocuments.length > 0) {
169
+ ctx.sourceDocuments = sourceDocuments.map((d) => {
170
+ const clean = sanitize(d.content);
171
+ return {
172
+ label: d.label,
173
+ path: d.path,
174
+ content: clean,
175
+ sizeBytes: Buffer.byteLength(clean, "utf8"),
176
+ };
177
+ });
178
+ }
179
+
180
+ return ctx;
181
+ }
182
+
183
+ // ── markdown renderer (pure, deterministic) ────────────────────────────────────
184
+
185
+ /** Provenance badge appended to each section heading for grounding. */
186
+ function badge(p: Provenance): string {
187
+ return `_(provenance: ${p})_`;
188
+ }
189
+
190
+ /** Render the FULL system-prompt section, distinguishing absent vs redacted. */
191
+ function renderSystemPrompt(sys: FullSystemPrompt | undefined): string {
192
+ const heading = `## System Prompt (FULL, untruncated) ${badge("trace-extracted")}`;
193
+ if (!sys) {
194
+ return [
195
+ heading,
196
+ "",
197
+ "_No system prompt found in the traces. The system prompt may live in the " +
198
+ "agent/skill config rather than the trace input. This is recorded as " +
199
+ "ABSENT — not as a hypothesis about why._",
200
+ ].join("\n");
201
+ }
202
+ if (sys.fullyRedacted) {
203
+ return [
204
+ heading,
205
+ "",
206
+ "_System prompt was PRESENT in the traces but consisted entirely of " +
207
+ "secrets/PII and was fully redacted. Recorded as present-but-redacted._",
208
+ "",
209
+ `- origin: \`${sys.origin}\` (trace index ${sys.traceIndex})`,
210
+ ].join("\n");
211
+ }
212
+ return [
213
+ heading,
214
+ "",
215
+ `- origin: \`${sys.origin}\` (trace index ${sys.traceIndex})`,
216
+ `- size: ${sys.sizeBytes} bytes · ~${sys.tokensApprox} tokens`,
217
+ "",
218
+ "```text",
219
+ sys.text,
220
+ "```",
221
+ ].join("\n");
222
+ }
223
+
224
+ /** Render the tool-inventory table (with coverage caveats). */
225
+ function renderToolInventory(ctx: DiagnosisContext): string {
226
+ const heading = `## Tool Inventory ${badge("trace-extracted")}`;
227
+ if (!ctx.toolInventory || ctx.toolInventory.length === 0) {
228
+ return [heading, "", "_No tool usage observed in the traces._"].join("\n");
229
+ }
230
+ const rows = ctx.toolInventory.map((t) => {
231
+ const avg = t.avgLatencyMs !== undefined ? `${t.avgLatencyMs}ms` : "—";
232
+ const p95 = t.p95LatencyMs !== undefined ? `${t.p95LatencyMs}ms` : "—";
233
+ return `| \`${t.name}\` | ${t.callCount} | ${t.callsPerTrace} | ${avg} | ${p95} |`;
234
+ });
235
+ const lines = [
236
+ heading,
237
+ "",
238
+ "| tool | calls | calls/trace | avg latency | p95 latency |",
239
+ "| --- | ---: | ---: | ---: | ---: |",
240
+ ...rows,
241
+ ];
242
+ const caveats: string[] = [];
243
+ if (ctx.toolSkippedCount) {
244
+ caveats.push(
245
+ `_${ctx.toolSkippedCount} tool-ish message(s) had no resolvable toolName — ` +
246
+ `inventory undercounts by this amount._`
247
+ );
248
+ }
249
+ if (ctx.toolsWithoutLatency) {
250
+ caveats.push(
251
+ `_${ctx.toolsWithoutLatency} tool(s) had no latency sample — latency columns ` +
252
+ `incomplete for those._`
253
+ );
254
+ }
255
+ if (caveats.length > 0) {
256
+ lines.push("", ...caveats);
257
+ }
258
+ return lines.join("\n");
259
+ }
260
+
261
+ /** Render embedded source documents verbatim (codeAccess case). */
262
+ function renderSourceDocuments(docs: SourceDocument[] | undefined): string {
263
+ const heading = `## Source Code ${badge("source-code")}`;
264
+ if (!docs || docs.length === 0) {
265
+ return [
266
+ heading,
267
+ "",
268
+ "_No source code accessible for this entity (client / no-codeAccess run). " +
269
+ "The system prompt above is the primary ground truth._",
270
+ ].join("\n");
271
+ }
272
+ const blocks = docs.map((d) =>
273
+ [
274
+ `### ${d.label}`,
275
+ `_path: \`${d.path}\` · ${d.sizeBytes} bytes (verbatim)_`,
276
+ "",
277
+ "````markdown",
278
+ d.content,
279
+ "````",
280
+ ].join("\n")
281
+ );
282
+ return [heading, "", ...blocks].join("\n\n");
283
+ }
284
+
285
+ /**
286
+ * Render the DiagnosisContext to deterministic markdown — the `diagnosis-context.md`
287
+ * the analyzer MANDATORY-PRE-READs. Pure: same input ⇒ byte-identical markdown.
288
+ *
289
+ * Section order is fixed: identity → purpose → system prompt → tools → source code.
290
+ * Every section carries a provenance badge so each fact is traceable to origin.
291
+ */
292
+ export function renderDiagnosisContextMarkdown(ctx: DiagnosisContext): string {
293
+ const lines: string[] = [];
294
+
295
+ lines.push(`# Diagnosis Context — ${ctx.name}`);
296
+ lines.push("");
297
+ lines.push(
298
+ "> GROUNDED LENS for the Analyzer. Read this BEFORE searching the traces for " +
299
+ "failure modes. Every fact below is directly EXTRACTED (trace / source / " +
300
+ "operator-stated) and tagged with its provenance. NOTHING here is a guess or " +
301
+ "hypothesis — do not treat any line as a pre-diagnosed conclusion."
302
+ );
303
+ lines.push("");
304
+
305
+ // ── Identity ──
306
+ lines.push(`## Identity ${badge("trace-extracted")}`);
307
+ lines.push("");
308
+ lines.push(`- name: \`${ctx.name}\``);
309
+ lines.push(`- scope: \`${ctx.scope}\``);
310
+ lines.push(`- code access: \`${ctx.codeAccess}\``);
311
+ lines.push(`- source platform: \`${ctx.source}\``);
312
+ lines.push(`- model: ${ctx.model ? `\`${ctx.model}\`` : "_not present in traces_"}`);
313
+ if (ctx.applyTarget) lines.push(`- apply target: \`${ctx.applyTarget}\``);
314
+ lines.push("");
315
+
316
+ // ── Purpose (operator-stated) ──
317
+ lines.push(`## Purpose ${badge("operator-stated")}`);
318
+ lines.push("");
319
+ if (ctx.purpose) {
320
+ lines.push(`> ${ctx.purpose}`);
321
+ lines.push("");
322
+ lines.push(
323
+ "_Operator-supplied at invocation. Treat as stated intent, NOT as a " +
324
+ "trace-verified fact._"
325
+ );
326
+ } else {
327
+ lines.push("_No operator-stated purpose supplied (--purpose omitted)._");
328
+ }
329
+ lines.push("");
330
+
331
+ // ── System prompt ──
332
+ lines.push(renderSystemPrompt(ctx.systemPrompt));
333
+ lines.push("");
334
+
335
+ // ── Tool inventory ──
336
+ lines.push(renderToolInventory(ctx));
337
+ lines.push("");
338
+
339
+ // ── Source code ──
340
+ lines.push(renderSourceDocuments(ctx.sourceDocuments));
341
+ lines.push("");
342
+
343
+ return lines.join("\n");
344
+ }
345
+
346
+ // ── CLI ───────────────────────────────────────────────────────────────────────
347
+
348
+ if (import.meta.main) {
349
+ const { readFileSync, writeFileSync } = await import("fs");
350
+ const { resolve } = await import("path");
351
+
352
+ const argv = process.argv.slice(2);
353
+ const get = (flag: string): string | undefined => {
354
+ const i = argv.indexOf(flag);
355
+ return i >= 0 ? argv[i + 1] : undefined;
356
+ };
357
+ /** Collect a repeatable flag: --doc <label>:<path> (may appear multiple times). */
358
+ const getAll = (flag: string): string[] => {
359
+ const out: string[] = [];
360
+ for (let i = 0; i < argv.length; i++) {
361
+ if (argv[i] === flag && argv[i + 1] !== undefined) out.push(argv[i + 1]);
362
+ }
363
+ return out;
364
+ };
365
+
366
+ const entityContextPath = get("--entity-context");
367
+ const tracesPath = get("--traces");
368
+ const outPath = get("--output");
369
+ const purpose = get("--purpose");
370
+ // --doc <label>:<path> — repeatable; embeds the file verbatim (codeAccess case).
371
+ const docSpecs = getAll("--doc");
372
+
373
+ if (!entityContextPath || !tracesPath || !outPath) {
374
+ process.stderr.write(
375
+ "Usage: bun scripts/context/build-diagnosis-context.ts " +
376
+ "--entity-context <f> --traces <f> --output <diagnosis-context.md> " +
377
+ "[--purpose <text>] [--doc <label>:<path> ...]\n"
378
+ );
379
+ process.exit(1);
380
+ }
381
+
382
+ try {
383
+ const entityContext = JSON.parse(
384
+ readFileSync(resolve(entityContextPath), "utf8")
385
+ ) as EntityContext;
386
+ const traces = JSON.parse(
387
+ readFileSync(resolve(tracesPath), "utf8")
388
+ ) as TraceBody[];
389
+
390
+ const sourceDocuments = docSpecs.map((spec) => {
391
+ // Split on the FIRST colon only — paths may contain colons on some systems,
392
+ // but the label is always the leading token.
393
+ const sep = spec.indexOf(":");
394
+ if (sep < 0) {
395
+ throw new Error(`--doc must be '<label>:<path>', got: ${spec}`);
396
+ }
397
+ const label = spec.slice(0, sep);
398
+ const path = spec.slice(sep + 1);
399
+ const content = readFileSync(resolve(path), "utf8");
400
+ return { label, path, content };
401
+ });
402
+
403
+ const ctx = buildDiagnosisContext({
404
+ entityContext,
405
+ traces,
406
+ sourceDocuments: sourceDocuments.length > 0 ? sourceDocuments : undefined,
407
+ purpose,
408
+ });
409
+ const md = renderDiagnosisContextMarkdown(ctx);
410
+ writeFileSync(resolve(outPath), md, "utf8");
411
+ process.stdout.write(`diagnosis-context.md written to: ${outPath}\n`);
412
+ process.exit(0);
413
+ } catch (err) {
414
+ process.stderr.write(`Error: ${err}\n`);
415
+ process.exit(1);
416
+ }
417
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * scripts/context/load-context.ts
3
+ * PHASE 4 (context links) — load the run-start context bundle.
4
+ *
5
+ * At run START (parse-brief / Step 3a) the diagnostics skill loads TWO levels of
6
+ * context links (each `{ path, what, why, when }`):
7
+ * 1. `global.context[]` — PROJECT-WIDE (every skill, every run).
8
+ * 2. `lifecycle.diagnostics.context[]` — the diagnostics stage's own links
9
+ * (the triage runbook).
10
+ * The two levels are CONCATENATED (global first, then stage) into one ordered
11
+ * bundle the orchestrator injects into the run. Duplicate `path`s are de-duped
12
+ * (global wins — a project-wide link is not repeated by a stage link to the same doc).
13
+ *
14
+ * This reads the v0.2.0 config the same way load.ts does (from the unified
15
+ * `.mutagent/config.yaml`), so a legacy shape is HARD-CUT here too (migrationRequired).
16
+ *
17
+ * Type A — Pure Script (YAML read via load path; base dir INJECTABLE; no clock/net).
18
+ */
19
+
20
+ import { readFileSync, existsSync } from "fs";
21
+ import { parse as parseYaml } from "yaml";
22
+ import { configPathFor, detectLegacyShape } from "../config/load.ts";
23
+ import type { ContextLink } from "../config/schema.ts";
24
+
25
+ export interface LoadedContext {
26
+ /** Ordered, de-duped bundle: global.context[] then lifecycle.diagnostics.context[]. */
27
+ links: ContextLink[];
28
+ /** The subset from `global.context[]` (before de-dupe with stage). */
29
+ globalLinks: ContextLink[];
30
+ /** The subset from `lifecycle.diagnostics.context[]`. */
31
+ stageLinks: ContextLink[];
32
+ /** HARD-CUT: legacy shape detected — no context loaded (route to migration). */
33
+ migrationRequired: boolean;
34
+ }
35
+
36
+ function asLinkArray(v: unknown): ContextLink[] {
37
+ if (!Array.isArray(v)) return [];
38
+ return v.filter(
39
+ (x): x is ContextLink =>
40
+ x !== null &&
41
+ typeof x === "object" &&
42
+ typeof (x as ContextLink).path === "string" &&
43
+ typeof (x as ContextLink).what === "string" &&
44
+ typeof (x as ContextLink).why === "string" &&
45
+ typeof (x as ContextLink).when === "string",
46
+ );
47
+ }
48
+
49
+ /**
50
+ * Load the run-start context bundle for the diagnostics stage from the unified
51
+ * config at `<root>/.mutagent/config.yaml`. Never throws — a missing/malformed file
52
+ * yields an empty bundle; a legacy shape yields `migrationRequired: true` + empty.
53
+ */
54
+ export function loadContext(projectRoot: string): LoadedContext {
55
+ const empty: LoadedContext = {
56
+ links: [],
57
+ globalLinks: [],
58
+ stageLinks: [],
59
+ migrationRequired: false,
60
+ };
61
+
62
+ const configPath = configPathFor(projectRoot);
63
+ if (!existsSync(configPath)) return empty;
64
+
65
+ let parsed: unknown;
66
+ try {
67
+ parsed = parseYaml(readFileSync(configPath, "utf8"));
68
+ } catch {
69
+ return empty;
70
+ }
71
+
72
+ if (detectLegacyShape(parsed).length > 0) {
73
+ return { ...empty, migrationRequired: true };
74
+ }
75
+
76
+ const root =
77
+ parsed !== null && typeof parsed === "object"
78
+ ? (parsed as {
79
+ global?: { context?: unknown };
80
+ lifecycle?: { diagnostics?: { context?: unknown } };
81
+ })
82
+ : {};
83
+
84
+ const globalLinks = asLinkArray(root.global?.context);
85
+ const stageLinks = asLinkArray(root.lifecycle?.diagnostics?.context);
86
+
87
+ // Concatenate global-first; de-dupe by path (global wins).
88
+ const seen = new Set<string>();
89
+ const links: ContextLink[] = [];
90
+ for (const link of [...globalLinks, ...stageLinks]) {
91
+ if (seen.has(link.path)) continue;
92
+ seen.add(link.path);
93
+ links.push(link);
94
+ }
95
+
96
+ return { links, globalLinks, stageLinks, migrationRequired: false };
97
+ }
98
+
99
+ // CLI usage: bun scripts/context/load-context.ts [project-root]
100
+ if (import.meta.main) {
101
+ const projectRoot = process.argv[2] ?? process.cwd();
102
+ const result = loadContext(projectRoot);
103
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
104
+ process.exit(result.migrationRequired ? 1 : 0);
105
+ }