mindforge-cc 11.8.2 → 11.9.0

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 (361) hide show
  1. package/.agent/mindforge/wf-orchestrate-review.md +35 -0
  2. package/.agent/mindforge/wf-verification-loop.md +45 -0
  3. package/.agent/mindforge/wf-workflow-optimizer.md +51 -0
  4. package/.agent/skills/article-illustrator/SKILL.md +7 -7
  5. package/.agent/skills/arxiv/SKILL.md +6 -6
  6. package/.agent/skills/code-wiki/SKILL.md +11 -11
  7. package/.agent/skills/concept-diagrams/SKILL.md +6 -6
  8. package/.agent/skills/concept-diagrams/examples/apartment-floor-plan-conversion.md +244 -0
  9. package/.agent/skills/concept-diagrams/examples/automated-password-reset-flow.md +276 -0
  10. package/.agent/skills/concept-diagrams/examples/autonomous-llm-research-agent-flow.md +240 -0
  11. package/.agent/skills/concept-diagrams/examples/banana-journey-tree-to-smoothie.md +161 -0
  12. package/.agent/skills/concept-diagrams/examples/commercial-aircraft-structure.md +209 -0
  13. package/.agent/skills/concept-diagrams/examples/cpu-ooo-microarchitecture.md +236 -0
  14. package/.agent/skills/concept-diagrams/examples/electricity-grid-flow.md +182 -0
  15. package/.agent/skills/concept-diagrams/examples/feature-film-production-pipeline.md +172 -0
  16. package/.agent/skills/concept-diagrams/examples/hospital-emergency-department-flow.md +165 -0
  17. package/.agent/skills/concept-diagrams/examples/ml-benchmark-grouped-bar-chart.md +114 -0
  18. package/.agent/skills/concept-diagrams/examples/place-order-uml-sequence.md +325 -0
  19. package/.agent/skills/concept-diagrams/examples/smart-city-infrastructure.md +173 -0
  20. package/.agent/skills/concept-diagrams/examples/smartphone-layer-anatomy.md +154 -0
  21. package/.agent/skills/concept-diagrams/examples/sn2-reaction-mechanism.md +247 -0
  22. package/.agent/skills/concept-diagrams/examples/wind-turbine-structure.md +338 -0
  23. package/.agent/skills/concept-diagrams/templates/template.html +174 -0
  24. package/.agent/skills/domain-intel/SKILL.md +7 -7
  25. package/.agent/skills/duckduckgo-search/SKILL.md +17 -17
  26. package/.agent/skills/github-auth/scripts/gh-env.sh +66 -0
  27. package/.agent/skills/github-code-review/SKILL.md +9 -9
  28. package/.agent/skills/github-pr-workflow/SKILL.md +3 -3
  29. package/.agent/skills/godmode/SKILL.md +8 -8
  30. package/.agent/skills/jupyter-live-kernel/SKILL.md +3 -3
  31. package/.agent/skills/kanban-orchestrator/SKILL.md +10 -10
  32. package/.agent/skills/kanban-worker/SKILL.md +6 -6
  33. package/.agent/skills/llm-wiki/SKILL.md +7 -7
  34. package/.agent/skills/mindforge-autonomous/SKILL.md +1 -1
  35. package/.agent/skills/mindforge-complete-milestone/SKILL.md +1 -1
  36. package/.agent/skills/mindforge-discuss-phase/SKILL.md +1 -1
  37. package/.agent/skills/mindforge-do/SKILL.md +1 -1
  38. package/.agent/skills/mindforge-execute-phase/SKILL.md +1 -1
  39. package/.agent/skills/mindforge-list-workspaces/SKILL.md +1 -1
  40. package/.agent/skills/mindforge-manager/SKILL.md +1 -1
  41. package/.agent/skills/mindforge-neural-orchestrator/SKILL.md +1 -1
  42. package/.agent/skills/mindforge-new-milestone/SKILL.md +4 -4
  43. package/.agent/skills/mindforge-new-project/SKILL.md +4 -4
  44. package/.agent/skills/mindforge-new-workspace/SKILL.md +1 -1
  45. package/.agent/skills/mindforge-note/SKILL.md +1 -1
  46. package/.agent/skills/mindforge-plan-phase/SKILL.md +1 -1
  47. package/.agent/skills/mindforge-profile-user/SKILL.md +1 -1
  48. package/.agent/skills/mindforge-remove-workspace/SKILL.md +1 -1
  49. package/.agent/skills/mindforge-research-phase/SKILL.md +1 -1
  50. package/.agent/skills/mindforge-ui-phase/SKILL.md +1 -1
  51. package/.agent/skills/mindforge-ui-review/SKILL.md +1 -1
  52. package/.agent/skills/mindforge-verify-work/SKILL.md +1 -1
  53. package/.agent/skills/mindforge-workspace-isolated/SKILL.md +1 -1
  54. package/.agent/skills/node-inspect-debugger/SKILL.md +1 -1
  55. package/.agent/skills/obsidian/SKILL.md +15 -15
  56. package/.agent/skills/osint-investigation/SKILL.md +3 -2
  57. package/.agent/skills/osint-investigation/references/sources/courtlistener.md +98 -0
  58. package/.agent/skills/osint-investigation/references/sources/gdelt.md +104 -0
  59. package/.agent/skills/osint-investigation/references/sources/icij-offshore.md +104 -0
  60. package/.agent/skills/osint-investigation/references/sources/nyc-acris.md +90 -0
  61. package/.agent/skills/osint-investigation/references/sources/ofac-sdn.md +92 -0
  62. package/.agent/skills/osint-investigation/references/sources/opencorporates.md +103 -0
  63. package/.agent/skills/osint-investigation/references/sources/sec-edgar.md +83 -0
  64. package/.agent/skills/osint-investigation/references/sources/senate-ld.md +89 -0
  65. package/.agent/skills/osint-investigation/references/sources/usaspending.md +97 -0
  66. package/.agent/skills/osint-investigation/references/sources/wayback.md +93 -0
  67. package/.agent/skills/osint-investigation/references/sources/wikipedia.md +107 -0
  68. package/.agent/skills/osint-investigation/scripts/_http.py +82 -0
  69. package/.agent/skills/osint-investigation/scripts/_normalize.py +67 -0
  70. package/.agent/skills/osint-investigation/scripts/build_findings.py +221 -0
  71. package/.agent/skills/osint-investigation/scripts/entity_resolution.py +228 -0
  72. package/.agent/skills/osint-investigation/scripts/fetch_courtlistener.py +149 -0
  73. package/.agent/skills/osint-investigation/scripts/fetch_gdelt.py +161 -0
  74. package/.agent/skills/osint-investigation/scripts/fetch_icij_offshore.py +234 -0
  75. package/.agent/skills/osint-investigation/scripts/fetch_nyc_acris.py +203 -0
  76. package/.agent/skills/osint-investigation/scripts/fetch_ofac_sdn.py +175 -0
  77. package/.agent/skills/osint-investigation/scripts/fetch_opencorporates.py +191 -0
  78. package/.agent/skills/osint-investigation/scripts/fetch_sec_edgar.py +184 -0
  79. package/.agent/skills/osint-investigation/scripts/fetch_senate_ld.py +146 -0
  80. package/.agent/skills/osint-investigation/scripts/fetch_usaspending.py +170 -0
  81. package/.agent/skills/osint-investigation/scripts/fetch_wayback.py +142 -0
  82. package/.agent/skills/osint-investigation/scripts/fetch_wikipedia.py +266 -0
  83. package/.agent/skills/osint-investigation/scripts/timing_analysis.py +252 -0
  84. package/.agent/skills/oss-forensics/SKILL.md +10 -9
  85. package/.agent/skills/oss-forensics/scripts/evidence-store.py +313 -0
  86. package/.agent/skills/parallel-cli/SKILL.md +2 -2
  87. package/.agent/skills/pinggy-tunnel/SKILL.md +3 -3
  88. package/.agent/skills/pixel-art/SKILL.md +2 -2
  89. package/.agent/skills/plan/SKILL.md +10 -10
  90. package/.agent/skills/requesting-code-review/SKILL.md +4 -6
  91. package/.agent/skills/research-paper-writing/SKILL.md +32 -32
  92. package/.agent/skills/rest-graphql-debug/SKILL.md +31 -32
  93. package/.agent/skills/s6-container-supervision/SKILL.md +1 -1
  94. package/.agent/skills/scrapling/SKILL.md +1 -1
  95. package/.agent/skills/sherlock/SKILL.md +1 -1
  96. package/.agent/skills/simplify-code/SKILL.md +5 -7
  97. package/.agent/skills/skill-authoring/SKILL.md +4 -4
  98. package/.agent/skills/spike/SKILL.md +11 -13
  99. package/.agent/skills/subagent-driven-development/SKILL.md +7 -11
  100. package/.agent/skills/systematic-debugging/SKILL.md +13 -14
  101. package/.agent/skills/test-driven-development/SKILL.md +6 -7
  102. package/.agent/skills/video-orchestrator/SKILL.md +1 -1
  103. package/.agent/skills/web-pentest/SKILL.md +7 -7
  104. package/.mindforge/config.json +3 -2
  105. package/.mindforge/dynamic-workflows/REGISTRY.md +4 -1
  106. package/.mindforge/dynamic-workflows/index.json +910 -840
  107. package/.mindforge/dynamic-workflows/scripts/accessibility-audit.js +88 -90
  108. package/.mindforge/dynamic-workflows/scripts/ai-model-eval.js +59 -61
  109. package/.mindforge/dynamic-workflows/scripts/api-contract-test.js +87 -85
  110. package/.mindforge/dynamic-workflows/scripts/api-migration.js +120 -122
  111. package/.mindforge/dynamic-workflows/scripts/architecture-modernization.js +84 -86
  112. package/.mindforge/dynamic-workflows/scripts/code-audit.js +75 -77
  113. package/.mindforge/dynamic-workflows/scripts/code-explainer.js +99 -101
  114. package/.mindforge/dynamic-workflows/scripts/competitive-analysis.js +62 -64
  115. package/.mindforge/dynamic-workflows/scripts/competitive-teardown.js +106 -108
  116. package/.mindforge/dynamic-workflows/scripts/cost-analysis.js +78 -80
  117. package/.mindforge/dynamic-workflows/scripts/data-pipeline-validate.js +47 -49
  118. package/.mindforge/dynamic-workflows/scripts/database-migration.js +85 -87
  119. package/.mindforge/dynamic-workflows/scripts/debug-detective.js +97 -99
  120. package/.mindforge/dynamic-workflows/scripts/dependency-health.js +81 -83
  121. package/.mindforge/dynamic-workflows/scripts/design-system-audit.js +84 -86
  122. package/.mindforge/dynamic-workflows/scripts/documentation-gen.js +65 -67
  123. package/.mindforge/dynamic-workflows/scripts/feature-planner.js +78 -80
  124. package/.mindforge/dynamic-workflows/scripts/incident-response.js +81 -83
  125. package/.mindforge/dynamic-workflows/scripts/multi-repo-sync.js +49 -51
  126. package/.mindforge/dynamic-workflows/scripts/mutation-testing.js +113 -115
  127. package/.mindforge/dynamic-workflows/scripts/onboard-codebase.js +79 -81
  128. package/.mindforge/dynamic-workflows/scripts/orchestrate-review.js +115 -0
  129. package/.mindforge/dynamic-workflows/scripts/perf-optimize.js +97 -99
  130. package/.mindforge/dynamic-workflows/scripts/pr-review.js +61 -63
  131. package/.mindforge/dynamic-workflows/scripts/refactor-plan.js +88 -90
  132. package/.mindforge/dynamic-workflows/scripts/release-prep.js +79 -81
  133. package/.mindforge/dynamic-workflows/scripts/security-hardening.js +117 -119
  134. package/.mindforge/dynamic-workflows/scripts/security-threat-model.js +119 -121
  135. package/.mindforge/dynamic-workflows/scripts/tdd-sprint.js +80 -82
  136. package/.mindforge/dynamic-workflows/scripts/tech-evaluation.js +50 -52
  137. package/.mindforge/dynamic-workflows/scripts/test-coverage-gap.js +68 -70
  138. package/.mindforge/dynamic-workflows/scripts/ux-heuristic-audit.js +89 -91
  139. package/.mindforge/dynamic-workflows/scripts/verification-loop.js +138 -0
  140. package/.mindforge/dynamic-workflows/scripts/workflow-optimizer.js +136 -0
  141. package/.mindforge/dynamic-workflows/scripts/writer-reviewer.js +63 -65
  142. package/.mindforge/memory/sync-manifest.json +1 -1
  143. package/.mindforge/personas/advisor-researcher.md +2 -2
  144. package/.mindforge/personas/api-load-tester.md +1 -1
  145. package/.mindforge/personas/authentication-architect.md +1 -1
  146. package/.mindforge/personas/backup-recovery-specialist.md +1 -1
  147. package/.mindforge/personas/build-optimizer.md +1 -1
  148. package/.mindforge/personas/caching-strategist.md +1 -1
  149. package/.mindforge/personas/chaos-engineer.md +1 -1
  150. package/.mindforge/personas/compliance-auditor.md +1 -1
  151. package/.mindforge/personas/config-management-expert.md +1 -1
  152. package/.mindforge/personas/coverage-specialist.md +1 -1
  153. package/.mindforge/personas/debug-specialist.md +2 -2
  154. package/.mindforge/personas/debugger.md +2 -2
  155. package/.mindforge/personas/dependency-auditor.md +1 -1
  156. package/.mindforge/personas/developer.md +1 -1
  157. package/.mindforge/personas/devops-engineer.md +1 -1
  158. package/.mindforge/personas/executor.md +1 -1
  159. package/.mindforge/personas/go-specialist.md +1 -1
  160. package/.mindforge/personas/incident-commander.md +1 -1
  161. package/.mindforge/personas/java-specialist.md +1 -1
  162. package/.mindforge/personas/kubernetes-debugger.md +1 -1
  163. package/.mindforge/personas/logging-architect.md +1 -1
  164. package/.mindforge/personas/mf-planner.md +1 -1
  165. package/.mindforge/personas/mf-researcher.md +1 -1
  166. package/.mindforge/personas/mf-reviewer.md +1 -1
  167. package/.mindforge/personas/nyquist-auditor.md +1 -1
  168. package/.mindforge/personas/observability-engineer.md +1 -1
  169. package/.mindforge/personas/performance-optimizer.md +1 -1
  170. package/.mindforge/personas/phase-researcher.md +5 -5
  171. package/.mindforge/personas/planner.md +1 -1
  172. package/.mindforge/personas/project-researcher.md +2 -2
  173. package/.mindforge/personas/python-specialist.md +1 -1
  174. package/.mindforge/personas/qa-engineer.md +1 -1
  175. package/.mindforge/personas/release-manager.md +1 -1
  176. package/.mindforge/personas/research-agent.md +4 -4
  177. package/.mindforge/personas/roadmapper-extend.md +1 -1
  178. package/.mindforge/personas/rust-specialist.md +1 -1
  179. package/.mindforge/personas/security-reviewer.md +1 -1
  180. package/.mindforge/personas/tech-writer.md +1 -1
  181. package/.mindforge/personas/typescript-wizard.md +1 -1
  182. package/.mindforge/personas/ui-researcher.md +1 -1
  183. package/.mindforge/skills/accessibility/SKILL.md +3 -3
  184. package/.mindforge/skills/agent-architecture-audit/SKILL.md +11 -0
  185. package/.mindforge/skills/agent-loops/SKILL.md +1 -1
  186. package/.mindforge/skills/arxiv/SKILL.md +6 -6
  187. package/.mindforge/skills/arxiv/scripts/search_arxiv.py +114 -0
  188. package/.mindforge/skills/code-tour/SKILL.md +2 -2
  189. package/.mindforge/skills/code-wiki/SKILL.md +11 -11
  190. package/.mindforge/skills/code-wiki/templates/README.md +31 -0
  191. package/.mindforge/skills/code-wiki/templates/architecture.md +30 -0
  192. package/.mindforge/skills/code-wiki/templates/getting-started.md +47 -0
  193. package/.mindforge/skills/code-wiki/templates/module.md +38 -0
  194. package/.mindforge/skills/concept-diagrams/SKILL.md +6 -6
  195. package/.mindforge/skills/concept-diagrams/examples/apartment-floor-plan-conversion.md +244 -0
  196. package/.mindforge/skills/concept-diagrams/examples/automated-password-reset-flow.md +276 -0
  197. package/.mindforge/skills/concept-diagrams/examples/autonomous-llm-research-agent-flow.md +240 -0
  198. package/.mindforge/skills/concept-diagrams/examples/banana-journey-tree-to-smoothie.md +161 -0
  199. package/.mindforge/skills/concept-diagrams/examples/commercial-aircraft-structure.md +209 -0
  200. package/.mindforge/skills/concept-diagrams/examples/cpu-ooo-microarchitecture.md +236 -0
  201. package/.mindforge/skills/concept-diagrams/examples/electricity-grid-flow.md +182 -0
  202. package/.mindforge/skills/concept-diagrams/examples/feature-film-production-pipeline.md +172 -0
  203. package/.mindforge/skills/concept-diagrams/examples/hospital-emergency-department-flow.md +165 -0
  204. package/.mindforge/skills/concept-diagrams/examples/ml-benchmark-grouped-bar-chart.md +114 -0
  205. package/.mindforge/skills/concept-diagrams/examples/place-order-uml-sequence.md +325 -0
  206. package/.mindforge/skills/concept-diagrams/examples/smart-city-infrastructure.md +173 -0
  207. package/.mindforge/skills/concept-diagrams/examples/smartphone-layer-anatomy.md +154 -0
  208. package/.mindforge/skills/concept-diagrams/examples/sn2-reaction-mechanism.md +247 -0
  209. package/.mindforge/skills/concept-diagrams/examples/wind-turbine-structure.md +338 -0
  210. package/.mindforge/skills/concept-diagrams/references/dashboard-patterns.md +43 -0
  211. package/.mindforge/skills/concept-diagrams/references/infrastructure-patterns.md +144 -0
  212. package/.mindforge/skills/concept-diagrams/references/physical-shape-cookbook.md +42 -0
  213. package/.mindforge/skills/concept-diagrams/templates/template.html +174 -0
  214. package/.mindforge/skills/creative-ideation/references/full-prompt-library.md +110 -0
  215. package/.mindforge/skills/documentation/SKILL.md +1 -1
  216. package/.mindforge/skills/domain-intel/SKILL.md +7 -7
  217. package/.mindforge/skills/domain-intel/scripts/domain_intel.py +397 -0
  218. package/.mindforge/skills/duckduckgo-search/SKILL.md +17 -17
  219. package/.mindforge/skills/duckduckgo-search/scripts/duckduckgo.sh +28 -0
  220. package/.mindforge/skills/environment-management/SKILL.md +1 -1
  221. package/.mindforge/skills/github-code-review/SKILL.md +9 -9
  222. package/.mindforge/skills/github-code-review/references/review-output-template.md +74 -0
  223. package/.mindforge/skills/github-issues/templates/bug-report.md +35 -0
  224. package/.mindforge/skills/github-issues/templates/feature-request.md +31 -0
  225. package/.mindforge/skills/github-pr-workflow/SKILL.md +3 -3
  226. package/.mindforge/skills/github-pr-workflow/references/ci-troubleshooting.md +183 -0
  227. package/.mindforge/skills/github-pr-workflow/references/conventional-commits.md +71 -0
  228. package/.mindforge/skills/github-pr-workflow/templates/pr-body-bugfix.md +35 -0
  229. package/.mindforge/skills/github-pr-workflow/templates/pr-body-feature.md +33 -0
  230. package/.mindforge/skills/incident-response/SKILL.md +1 -1
  231. package/.mindforge/skills/jupyter-live-kernel/SKILL.md +3 -3
  232. package/.mindforge/skills/kanban-orchestrator/SKILL.md +10 -10
  233. package/.mindforge/skills/kanban-worker/SKILL.md +6 -6
  234. package/.mindforge/skills/meme-generation/SKILL.md +1 -1
  235. package/.mindforge/skills/meme-generation/scripts/generate_meme.py +470 -0
  236. package/.mindforge/skills/meme-generation/scripts/templates.json +97 -0
  237. package/.mindforge/skills/obsidian/SKILL.md +15 -15
  238. package/.mindforge/skills/orch-pipeline/SKILL.md +2 -2
  239. package/.mindforge/skills/osint-investigation/SKILL.md +3 -2
  240. package/.mindforge/skills/osint-investigation/references/sources/courtlistener.md +98 -0
  241. package/.mindforge/skills/osint-investigation/references/sources/gdelt.md +104 -0
  242. package/.mindforge/skills/osint-investigation/references/sources/icij-offshore.md +104 -0
  243. package/.mindforge/skills/osint-investigation/references/sources/nyc-acris.md +90 -0
  244. package/.mindforge/skills/osint-investigation/references/sources/ofac-sdn.md +92 -0
  245. package/.mindforge/skills/osint-investigation/references/sources/opencorporates.md +103 -0
  246. package/.mindforge/skills/osint-investigation/references/sources/sec-edgar.md +83 -0
  247. package/.mindforge/skills/osint-investigation/references/sources/senate-ld.md +89 -0
  248. package/.mindforge/skills/osint-investigation/references/sources/usaspending.md +97 -0
  249. package/.mindforge/skills/osint-investigation/references/sources/wayback.md +93 -0
  250. package/.mindforge/skills/osint-investigation/references/sources/wikipedia.md +107 -0
  251. package/.mindforge/skills/osint-investigation/scripts/_http.py +82 -0
  252. package/.mindforge/skills/osint-investigation/scripts/_normalize.py +67 -0
  253. package/.mindforge/skills/osint-investigation/scripts/build_findings.py +221 -0
  254. package/.mindforge/skills/osint-investigation/scripts/entity_resolution.py +228 -0
  255. package/.mindforge/skills/osint-investigation/scripts/fetch_courtlistener.py +149 -0
  256. package/.mindforge/skills/osint-investigation/scripts/fetch_gdelt.py +161 -0
  257. package/.mindforge/skills/osint-investigation/scripts/fetch_icij_offshore.py +234 -0
  258. package/.mindforge/skills/osint-investigation/scripts/fetch_nyc_acris.py +203 -0
  259. package/.mindforge/skills/osint-investigation/scripts/fetch_ofac_sdn.py +175 -0
  260. package/.mindforge/skills/osint-investigation/scripts/fetch_opencorporates.py +191 -0
  261. package/.mindforge/skills/osint-investigation/scripts/fetch_sec_edgar.py +184 -0
  262. package/.mindforge/skills/osint-investigation/scripts/fetch_senate_ld.py +146 -0
  263. package/.mindforge/skills/osint-investigation/scripts/fetch_usaspending.py +170 -0
  264. package/.mindforge/skills/osint-investigation/scripts/fetch_wayback.py +142 -0
  265. package/.mindforge/skills/osint-investigation/scripts/fetch_wikipedia.py +266 -0
  266. package/.mindforge/skills/osint-investigation/scripts/timing_analysis.py +252 -0
  267. package/.mindforge/skills/osint-investigation/templates/source-template.md +59 -0
  268. package/.mindforge/skills/oss-forensics/SKILL.md +6 -6
  269. package/.mindforge/skills/oss-forensics/references/evidence-types.md +89 -0
  270. package/.mindforge/skills/oss-forensics/references/github-archive-guide.md +184 -0
  271. package/.mindforge/skills/oss-forensics/references/investigation-templates.md +131 -0
  272. package/.mindforge/skills/oss-forensics/references/recovery-techniques.md +164 -0
  273. package/.mindforge/skills/oss-forensics/scripts/evidence-store.py +313 -0
  274. package/.mindforge/skills/oss-forensics/templates/forensic-report.md +151 -0
  275. package/.mindforge/skills/oss-forensics/templates/malicious-package-report.md +43 -0
  276. package/.mindforge/skills/pixel-art/SKILL.md +2 -2
  277. package/.mindforge/skills/pixel-art/references/palettes.md +49 -0
  278. package/.mindforge/skills/plan/SKILL.md +10 -10
  279. package/.mindforge/skills/requesting-code-review/SKILL.md +4 -6
  280. package/.mindforge/skills/research-paper-writing/SKILL.md +32 -32
  281. package/.mindforge/skills/research-paper-writing/references/autoreason-methodology.md +394 -0
  282. package/.mindforge/skills/research-paper-writing/references/checklists.md +434 -0
  283. package/.mindforge/skills/research-paper-writing/references/citation-workflow.md +563 -0
  284. package/.mindforge/skills/research-paper-writing/references/experiment-patterns.md +728 -0
  285. package/.mindforge/skills/research-paper-writing/references/human-evaluation.md +476 -0
  286. package/.mindforge/skills/research-paper-writing/references/paper-types.md +481 -0
  287. package/.mindforge/skills/research-paper-writing/references/reviewer-guidelines.md +433 -0
  288. package/.mindforge/skills/research-paper-writing/references/sources.md +191 -0
  289. package/.mindforge/skills/research-paper-writing/references/writing-guide.md +474 -0
  290. package/.mindforge/skills/research-paper-writing/templates/README.md +251 -0
  291. package/.mindforge/skills/scrapling/SKILL.md +1 -1
  292. package/.mindforge/skills/security-review/SKILL.md +1 -1
  293. package/.mindforge/skills/sherlock/SKILL.md +1 -1
  294. package/.mindforge/skills/simplify-code/SKILL.md +5 -7
  295. package/.mindforge/skills/spike/SKILL.md +11 -13
  296. package/.mindforge/skills/subagent-driven-development/SKILL.md +7 -11
  297. package/.mindforge/skills/subagent-driven-development/references/context-budget-discipline.md +53 -0
  298. package/.mindforge/skills/subagent-driven-development/references/gates-taxonomy.md +93 -0
  299. package/.mindforge/skills/systematic-debugging/SKILL.md +13 -14
  300. package/.mindforge/skills/test-driven-development/SKILL.md +7 -8
  301. package/.mindforge/skills/testing-standards/SKILL.md +1 -1
  302. package/.mindforge/skills/web-pentest/SKILL.md +2 -2
  303. package/.mindforge/skills/web-pentest/references/bypass-techniques.md +133 -0
  304. package/.mindforge/skills/web-pentest/references/exploitation-techniques.md +204 -0
  305. package/.mindforge/skills/web-pentest/references/scope-enforcement.md +110 -0
  306. package/.mindforge/skills/web-pentest/references/vuln-taxonomy.md +81 -0
  307. package/.mindforge/skills/web-pentest/templates/authorization.md +69 -0
  308. package/.mindforge/skills/web-pentest/templates/pentest-report.md +178 -0
  309. package/.mindforge/skills/writing-skills/SKILL.md +4 -3
  310. package/CHANGELOG.md +35 -0
  311. package/MINDFORGE.md +3 -3
  312. package/README.md +9 -7
  313. package/RELEASENOTES.md +65 -2
  314. package/SECURITY.md +5 -3
  315. package/bin/autonomous/auto-runner.js +5 -2
  316. package/bin/engine/skill-loader.js +4 -0
  317. package/bin/governance/rbac.js +4 -0
  318. package/bin/memory/eis-client.js +1 -0
  319. package/bin/mindforge-cli.js +5 -0
  320. package/bin/models/bedrock-provider.js +192 -0
  321. package/bin/models/model-client.js +19 -0
  322. package/bin/spawn-agent.js +9 -2
  323. package/docs/commands-reference.md +68 -6
  324. package/docs/faq.md +38 -1
  325. package/docs/getting-started.md +27 -12
  326. package/docs/sdk-reference.md +36 -3
  327. package/docs/troubleshooting.md +59 -1
  328. package/docs/user-guide.md +7 -4
  329. package/package.json +3 -3
  330. package/.claude/commands/mindforge/skill-tdd.md +0 -53
  331. package/.claude/commands/mindforge/skills-index.md +0 -118
  332. package/.claude/commands/mindforge/systematic-debug.md +0 -60
  333. package/.claude/commands/mindforge/wf-accessibility-audit.md +0 -31
  334. package/.claude/commands/mindforge/wf-ai-model-eval.md +0 -31
  335. package/.claude/commands/mindforge/wf-api-migration.md +0 -31
  336. package/.claude/commands/mindforge/wf-architecture-modernization.md +0 -32
  337. package/.claude/commands/mindforge/wf-catalog.md +0 -59
  338. package/.claude/commands/mindforge/wf-code-audit.md +0 -31
  339. package/.claude/commands/mindforge/wf-code-explainer.md +0 -31
  340. package/.claude/commands/mindforge/wf-competitive-analysis.md +0 -31
  341. package/.claude/commands/mindforge/wf-competitive-teardown.md +0 -31
  342. package/.claude/commands/mindforge/wf-cost-analysis.md +0 -31
  343. package/.claude/commands/mindforge/wf-data-pipeline-validate.md +0 -31
  344. package/.claude/commands/mindforge/wf-database-migration.md +0 -31
  345. package/.claude/commands/mindforge/wf-debug-detective.md +0 -32
  346. package/.claude/commands/mindforge/wf-design-system-audit.md +0 -31
  347. package/.claude/commands/mindforge/wf-documentation-gen.md +0 -31
  348. package/.claude/commands/mindforge/wf-feature-planner.md +0 -31
  349. package/.claude/commands/mindforge/wf-incident-response.md +0 -31
  350. package/.claude/commands/mindforge/wf-multi-repo-sync.md +0 -31
  351. package/.claude/commands/mindforge/wf-mutation-testing.md +0 -31
  352. package/.claude/commands/mindforge/wf-onboard-codebase.md +0 -31
  353. package/.claude/commands/mindforge/wf-perf-optimize.md +0 -31
  354. package/.claude/commands/mindforge/wf-pr-review.md +0 -31
  355. package/.claude/commands/mindforge/wf-refactor-plan.md +0 -31
  356. package/.claude/commands/mindforge/wf-release-prep.md +0 -31
  357. package/.claude/commands/mindforge/wf-security-threat-model.md +0 -31
  358. package/.claude/commands/mindforge/wf-tdd-sprint.md +0 -31
  359. package/.claude/commands/mindforge/wf-tech-evaluation.md +0 -31
  360. package/.claude/commands/mindforge/wf-ux-heuristic-audit.md +0 -31
  361. package/.claude/commands/mindforge/wf-writer-reviewer.md +0 -30
@@ -10,110 +10,108 @@ export const meta = {
10
10
  ],
11
11
  };
12
12
 
13
- export default async function run({ agent, parallel, pipeline, phase, log, args, budget }) {
14
- const AUDIT_SCHEMA = {
15
- type: 'object',
16
- properties: {
17
- principle: { type: 'string' },
18
- issues: {
19
- type: 'array',
20
- items: {
21
- type: 'object',
22
- properties: {
23
- wcagCriterion: { type: 'string' },
24
- level: { type: 'string', enum: ['A', 'AA', 'AAA'] },
25
- severity: { type: 'string', enum: ['blocker', 'critical', 'major', 'minor'] },
26
- component: { type: 'string' },
27
- description: { type: 'string' },
28
- fix: { type: 'string' },
29
- },
30
- required: ['wcagCriterion', 'level', 'severity', 'description', 'fix'],
13
+ const AUDIT_SCHEMA = {
14
+ type: 'object',
15
+ properties: {
16
+ principle: { type: 'string' },
17
+ issues: {
18
+ type: 'array',
19
+ items: {
20
+ type: 'object',
21
+ properties: {
22
+ wcagCriterion: { type: 'string' },
23
+ level: { type: 'string', enum: ['A', 'AA', 'AAA'] },
24
+ severity: { type: 'string', enum: ['blocker', 'critical', 'major', 'minor'] },
25
+ component: { type: 'string' },
26
+ description: { type: 'string' },
27
+ fix: { type: 'string' },
31
28
  },
29
+ required: ['wcagCriterion', 'level', 'severity', 'description', 'fix'],
32
30
  },
33
31
  },
34
- required: ['principle', 'issues'],
35
- };
32
+ },
33
+ required: ['principle', 'issues'],
34
+ };
36
35
 
37
- const VERDICT_SCHEMA = {
38
- type: 'object',
39
- properties: {
40
- isRealIssue: { type: 'boolean' },
41
- affectsRealUsers: { type: 'boolean' },
42
- reason: { type: 'string' },
43
- },
44
- required: ['isRealIssue', 'affectsRealUsers', 'reason'],
45
- };
36
+ const VERDICT_SCHEMA = {
37
+ type: 'object',
38
+ properties: {
39
+ isRealIssue: { type: 'boolean' },
40
+ affectsRealUsers: { type: 'boolean' },
41
+ reason: { type: 'string' },
42
+ },
43
+ required: ['isRealIssue', 'affectsRealUsers', 'reason'],
44
+ };
46
45
 
47
- const REMEDIATION_SCHEMA = {
48
- type: 'object',
49
- properties: {
50
- summary: { type: 'string' },
51
- wcagLevel: { type: 'string', enum: ['Level A non-compliant', 'Level AA non-compliant', 'Level AA compliant', 'Level AAA compliant'] },
52
- criticalFixes: {
53
- type: 'array',
54
- items: {
55
- type: 'object',
56
- properties: {
57
- issue: { type: 'string' },
58
- wcagRef: { type: 'string' },
59
- fix: { type: 'string' },
60
- codeExample: { type: 'string' },
61
- },
62
- required: ['issue', 'wcagRef', 'fix', 'codeExample'],
46
+ const REMEDIATION_SCHEMA = {
47
+ type: 'object',
48
+ properties: {
49
+ summary: { type: 'string' },
50
+ wcagLevel: { type: 'string', enum: ['Level A non-compliant', 'Level AA non-compliant', 'Level AA compliant', 'Level AAA compliant'] },
51
+ criticalFixes: {
52
+ type: 'array',
53
+ items: {
54
+ type: 'object',
55
+ properties: {
56
+ issue: { type: 'string' },
57
+ wcagRef: { type: 'string' },
58
+ fix: { type: 'string' },
59
+ codeExample: { type: 'string' },
63
60
  },
61
+ required: ['issue', 'wcagRef', 'fix', 'codeExample'],
64
62
  },
65
63
  },
66
- required: ['summary', 'wcagLevel', 'criticalFixes'],
67
- };
64
+ },
65
+ required: ['summary', 'wcagLevel', 'criticalFixes'],
66
+ };
68
67
 
69
- const target = args || 'current UI codebase (run from repo root)';
68
+ const target = args || 'current UI codebase (run from repo root)';
70
69
 
71
- phase('Scope');
72
- log(`Accessibility audit target: ${target}`);
70
+ phase('Scope');
71
+ log(`Accessibility audit target: ${target}`);
73
72
 
74
- const AUDITORS = [
75
- { label: 'perceivable', prompt: `Audit WCAG 2.2 Perceivable criteria for: "${target}". Check: 1.1.1 Non-text content (alt text), 1.2.x captions/transcripts, 1.3.x info/structure (semantic HTML, labels), 1.4.x distinguishable (contrast ratio ≥4.5:1, resize text, no reliance on color alone). List every failure with WCAG criterion, level (A/AA/AAA), severity, and exact fix.` },
76
- { label: 'operable', prompt: `Audit WCAG 2.2 Operable criteria for: "${target}". Check: 2.1.x keyboard accessible (all functionality via keyboard, no traps), 2.2.x enough time (no time limits, pause/stop/hide), 2.3.x seizures (no flashing ≥3Hz), 2.4.x navigable (skip links, page titles, focus order, link purpose), 2.5.x input modalities (touch target ≥24×24px). List every failure with criterion, level, and fix.` },
77
- { label: 'understandable', prompt: `Audit WCAG 2.2 Understandable criteria for: "${target}". Check: 3.1.x readable (lang attribute, unusual words), 3.2.x predictable (no context changes on focus, consistent navigation), 3.3.x input assistance (error identification, labels/instructions, error suggestion, error prevention). List every failure with criterion, level, and fix.` },
78
- { label: 'robust', prompt: `Audit WCAG 2.2 Robust criteria for: "${target}". Check: 4.1.2 Name/Role/Value (all UI components have accessible name, role, state/value), 4.1.3 Status messages (announced to AT without focus). Also check for valid, parseable HTML. List every failure with criterion, level, and fix.` },
79
- { label: 'aria', prompt: `Audit ARIA usage for: "${target}". Check: roles match actual element behavior, required aria-* properties present, aria-labelledby/describedby IDs exist, no aria-hidden on interactive elements, no redundant role+element, proper live region usage. List every failure with fix showing correct ARIA attributes.` },
80
- { label: 'keyboard', prompt: `Audit keyboard navigation for: "${target}". Check: tab order is logical, visible focus indicator present (not just outline:none), modals trap focus and release on close, custom widgets (accordions, tabs, dropdowns, sliders) follow ARIA authoring practices keyboard patterns, no keyboard traps. List every failure with fix.` },
81
- ];
73
+ const AUDITORS = [
74
+ { label: 'perceivable', prompt: `Audit WCAG 2.2 Perceivable criteria for: "${target}". Check: 1.1.1 Non-text content (alt text), 1.2.x captions/transcripts, 1.3.x info/structure (semantic HTML, labels), 1.4.x distinguishable (contrast ratio ≥4.5:1, resize text, no reliance on color alone). List every failure with WCAG criterion, level (A/AA/AAA), severity, and exact fix.` },
75
+ { label: 'operable', prompt: `Audit WCAG 2.2 Operable criteria for: "${target}". Check: 2.1.x keyboard accessible (all functionality via keyboard, no traps), 2.2.x enough time (no time limits, pause/stop/hide), 2.3.x seizures (no flashing ≥3Hz), 2.4.x navigable (skip links, page titles, focus order, link purpose), 2.5.x input modalities (touch target ≥24×24px). List every failure with criterion, level, and fix.` },
76
+ { label: 'understandable', prompt: `Audit WCAG 2.2 Understandable criteria for: "${target}". Check: 3.1.x readable (lang attribute, unusual words), 3.2.x predictable (no context changes on focus, consistent navigation), 3.3.x input assistance (error identification, labels/instructions, error suggestion, error prevention). List every failure with criterion, level, and fix.` },
77
+ { label: 'robust', prompt: `Audit WCAG 2.2 Robust criteria for: "${target}". Check: 4.1.2 Name/Role/Value (all UI components have accessible name, role, state/value), 4.1.3 Status messages (announced to AT without focus). Also check for valid, parseable HTML. List every failure with criterion, level, and fix.` },
78
+ { label: 'aria', prompt: `Audit ARIA usage for: "${target}". Check: roles match actual element behavior, required aria-* properties present, aria-labelledby/describedby IDs exist, no aria-hidden on interactive elements, no redundant role+element, proper live region usage. List every failure with fix showing correct ARIA attributes.` },
79
+ { label: 'keyboard', prompt: `Audit keyboard navigation for: "${target}". Check: tab order is logical, visible focus indicator present (not just outline:none), modals trap focus and release on close, custom widgets (accordions, tabs, dropdowns, sliders) follow ARIA authoring practices keyboard patterns, no keyboard traps. List every failure with fix.` },
80
+ ];
82
81
 
83
- phase('Audit');
84
- const audits = await parallel(
85
- AUDITORS.map(a => () => agent(a.prompt, { schema: AUDIT_SCHEMA, label: `audit:${a.label}`, phase: 'Audit' }))
86
- );
82
+ phase('Audit');
83
+ const audits = await parallel(
84
+ AUDITORS.map(a => () => agent(a.prompt, { schema: AUDIT_SCHEMA, label: `audit:${a.label}`, phase: 'Audit' }))
85
+ );
87
86
 
88
- phase('Verify');
89
- const allIssues = audits.filter(Boolean).flatMap(a => (a.issues || []).map(i => ({ ...i, principle: a.principle })));
90
- const levelAandAA = allIssues.filter(i => i.level === 'A' || i.level === 'AA');
91
- log(`${allIssues.length} total issues, ${levelAandAA.length} Level A/AA → 3-vote verify`);
87
+ phase('Verify');
88
+ const allIssues = audits.filter(Boolean).flatMap(a => (a.issues || []).map(i => ({ ...i, principle: a.principle })));
89
+ const levelAandAA = allIssues.filter(i => i.level === 'A' || i.level === 'AA');
90
+ log(`${allIssues.length} total issues, ${levelAandAA.length} Level A/AA → 3-vote verify`);
92
91
 
93
- const verified = await parallel(
94
- levelAandAA.map(issue => () =>
95
- parallel([
96
- () => agent(`Is this WCAG ${issue.level} accessibility issue real, or a false positive? Try to REFUTE it. Issue: "${issue.description}" (${issue.wcagCriterion}). Default isRealIssue=false only if clearly not applicable.`, { schema: VERDICT_SCHEMA, label: `v1:${issue.wcagCriterion}`, phase: 'Verify' }),
97
- () => agent(`Would a real assistive technology user (screen reader, keyboard-only, low-vision) actually encounter this issue? Issue: "${issue.description}" (${issue.wcagCriterion}). Be specific about which user group is affected.`, { schema: VERDICT_SCHEMA, label: `v2:${issue.wcagCriterion}`, phase: 'Verify' }),
98
- () => agent(`Is the WCAG criterion reference accurate for this issue? "${issue.description}" cited as ${issue.wcagCriterion} Level ${issue.level}. Confirm or correct the WCAG reference.`, { schema: VERDICT_SCHEMA, label: `v3:${issue.wcagCriterion}`, phase: 'Verify' }),
99
- ]).then(votes => {
100
- if (!votes) return { ...issue, confirmed: false };
101
- const confirmed = votes.filter(Boolean).filter(v => v.isRealIssue).length;
102
- return { ...issue, confirmed: confirmed >= 2 };
103
- })
104
- )
105
- );
92
+ const verified = await parallel(
93
+ levelAandAA.map(issue => () =>
94
+ parallel([
95
+ () => agent(`Is this WCAG ${issue.level} accessibility issue real, or a false positive? Try to REFUTE it. Issue: "${issue.description}" (${issue.wcagCriterion}). Default isRealIssue=false only if clearly not applicable.`, { schema: VERDICT_SCHEMA, label: `v1:${issue.wcagCriterion}`, phase: 'Verify' }),
96
+ () => agent(`Would a real assistive technology user (screen reader, keyboard-only, low-vision) actually encounter this issue? Issue: "${issue.description}" (${issue.wcagCriterion}). Be specific about which user group is affected.`, { schema: VERDICT_SCHEMA, label: `v2:${issue.wcagCriterion}`, phase: 'Verify' }),
97
+ () => agent(`Is the WCAG criterion reference accurate for this issue? "${issue.description}" cited as ${issue.wcagCriterion} Level ${issue.level}. Confirm or correct the WCAG reference.`, { schema: VERDICT_SCHEMA, label: `v3:${issue.wcagCriterion}`, phase: 'Verify' }),
98
+ ]).then(votes => {
99
+ if (!votes) return { ...issue, confirmed: false };
100
+ const confirmed = votes.filter(Boolean).filter(v => v.isRealIssue).length;
101
+ return { ...issue, confirmed: confirmed >= 2 };
102
+ })
103
+ )
104
+ );
106
105
 
107
- const confirmedIssues = verified.filter(Boolean).filter(i => i.confirmed);
108
- log(`${confirmedIssues.length}/${levelAandAA.length} Level A/AA issues confirmed`);
106
+ const confirmedIssues = verified.filter(Boolean).filter(i => i.confirmed);
107
+ log(`${confirmedIssues.length}/${levelAandAA.length} Level A/AA issues confirmed`);
109
108
 
110
- phase('Spec');
111
- const issueSummary = confirmedIssues.slice(0, 15).map(i => `[${i.level}/${i.severity}] ${i.wcagCriterion}: ${i.description} → Fix: ${i.fix}`).join('\n');
112
- const remediation = await agent(
113
- `Create an accessibility remediation spec for: "${target}"\n\nConfirmed WCAG issues:\n${issueSummary}\n\nFor each critical/blocker issue provide: WCAG reference, exact fix description, and a code example (HTML/ARIA/CSS) showing the corrected implementation. Determine the overall WCAG compliance level.`,
114
- { schema: REMEDIATION_SCHEMA, label: 'remediation-spec' }
115
- );
116
- if (!remediation) { return { target, confirmedIssues, error: 'remediation-agent-null', stats: { total: allIssues.length, levelAAFailures: levelAandAA.length, confirmed: confirmedIssues.length } }; }
109
+ phase('Spec');
110
+ const issueSummary = confirmedIssues.slice(0, 15).map(i => `[${i.level}/${i.severity}] ${i.wcagCriterion}: ${i.description} → Fix: ${i.fix}`).join('\n');
111
+ const remediation = await agent(
112
+ `Create an accessibility remediation spec for: "${target}"\n\nConfirmed WCAG issues:\n${issueSummary}\n\nFor each critical/blocker issue provide: WCAG reference, exact fix description, and a code example (HTML/ARIA/CSS) showing the corrected implementation. Determine the overall WCAG compliance level.`,
113
+ { schema: REMEDIATION_SCHEMA, label: 'remediation-spec' }
114
+ );
115
+ if (!remediation) { return { target, confirmedIssues, error: 'remediation-agent-null', stats: { total: allIssues.length, levelAAFailures: levelAandAA.length, confirmed: confirmedIssues.length } }; }
117
116
 
118
- return { target, audits: audits.filter(Boolean), confirmedIssues, remediation, stats: { total: allIssues.length, levelAAFailures: levelAandAA.length, confirmed: confirmedIssues.length } };
119
- }
117
+ return { target, audits: audits.filter(Boolean), confirmedIssues, remediation, stats: { total: allIssues.length, levelAAFailures: levelAandAA.length, confirmed: confirmedIssues.length } };
@@ -10,73 +10,71 @@ export const meta = {
10
10
  ],
11
11
  };
12
12
 
13
- export default async function run({ agent, parallel, pipeline, phase, log, args, budget }) {
14
- const CRITERIA_SCHEMA = {
15
- type: 'object',
16
- properties: {
17
- useCase: { type: 'string' },
18
- testPrompts: { type: 'array', items: { type: 'string' } },
19
- priorities: { type: 'array', items: { type: 'string' } },
20
- modelsToEvaluate: { type: 'array', items: { type: 'string' } },
21
- },
22
- required: ['useCase', 'testPrompts', 'priorities', 'modelsToEvaluate'],
23
- };
13
+ const CRITERIA_SCHEMA = {
14
+ type: 'object',
15
+ properties: {
16
+ useCase: { type: 'string' },
17
+ testPrompts: { type: 'array', items: { type: 'string' } },
18
+ priorities: { type: 'array', items: { type: 'string' } },
19
+ modelsToEvaluate: { type: 'array', items: { type: 'string' } },
20
+ },
21
+ required: ['useCase', 'testPrompts', 'priorities', 'modelsToEvaluate'],
22
+ };
24
23
 
25
- const EVAL_SCHEMA = {
26
- type: 'object',
27
- properties: {
28
- dimension: { type: 'string' },
29
- scores: { type: 'array', items: { type: 'object', properties: { model: { type: 'string' }, score: { type: 'number' }, notes: { type: 'string' } }, required: ['model', 'score'] } },
30
- },
31
- required: ['dimension', 'scores'],
32
- };
24
+ const EVAL_SCHEMA = {
25
+ type: 'object',
26
+ properties: {
27
+ dimension: { type: 'string' },
28
+ scores: { type: 'array', items: { type: 'object', properties: { model: { type: 'string' }, score: { type: 'number' }, notes: { type: 'string' } }, required: ['model', 'score'] } },
29
+ },
30
+ required: ['dimension', 'scores'],
31
+ };
33
32
 
34
- const RECOMMENDATION_SCHEMA = {
35
- type: 'object',
36
- properties: {
37
- winner: { type: 'string' },
38
- rationale: { type: 'string' },
39
- ranking: { type: 'array', items: { type: 'object', properties: { model: { type: 'string' }, totalScore: { type: 'number' }, bestFor: { type: 'string' } }, required: ['model', 'totalScore', 'bestFor'] } },
40
- costNote: { type: 'string' },
41
- },
42
- required: ['winner', 'rationale', 'ranking'],
43
- };
33
+ const RECOMMENDATION_SCHEMA = {
34
+ type: 'object',
35
+ properties: {
36
+ winner: { type: 'string' },
37
+ rationale: { type: 'string' },
38
+ ranking: { type: 'array', items: { type: 'object', properties: { model: { type: 'string' }, totalScore: { type: 'number' }, bestFor: { type: 'string' } }, required: ['model', 'totalScore', 'bestFor'] } },
39
+ costNote: { type: 'string' },
40
+ },
41
+ required: ['winner', 'rationale', 'ranking'],
42
+ };
44
43
 
45
- const useCase = args || 'general purpose AI assistant for coding tasks';
44
+ const useCase = args || 'general purpose AI assistant for coding tasks';
46
45
 
47
- phase('Scope');
48
- const criteria = await agent(`Define evaluation criteria and test prompts for this AI model use case: "${useCase}". Create 3-5 representative test prompts that reflect the actual workload. List evaluation priorities (quality/speed/cost/context-length/reasoning) in order of importance. Suggest which models to evaluate (e.g., claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5, gpt-4o, gemini-2.0-flash).`, { schema: CRITERIA_SCHEMA, label: 'scope' });
49
- if (!criteria) { return { useCase, error: 'criteria-agent-null' }; }
50
- log(`Evaluating ${criteria.modelsToEvaluate.length} models on ${criteria.priorities.length} dimensions`);
46
+ phase('Scope');
47
+ const criteria = await agent(`Define evaluation criteria and test prompts for this AI model use case: "${useCase}". Create 3-5 representative test prompts that reflect the actual workload. List evaluation priorities (quality/speed/cost/context-length/reasoning) in order of importance. Suggest which models to evaluate (e.g., claude-opus-4-8, claude-sonnet-4-6, claude-haiku-4-5, gpt-4o, gemini-2.0-flash).`, { schema: CRITERIA_SCHEMA, label: 'scope' });
48
+ if (!criteria) { return { useCase, error: 'criteria-agent-null' }; }
49
+ log(`Evaluating ${criteria.modelsToEvaluate.length} models on ${criteria.priorities.length} dimensions`);
51
50
 
52
- phase('Benchmark');
53
- const DIMENSIONS = [
54
- { label: 'quality', prompt: `Evaluate OUTPUT QUALITY of these models for: "${useCase}". Test prompts: ${criteria.testPrompts.slice(0, 3).join(' | ')}. Models: ${criteria.modelsToEvaluate.join(', ')}. Score each 0-100 for accuracy, completeness, and usefulness. Base scores on published benchmarks (MMLU, HumanEval, SWE-bench, coding evals) and known model capabilities.` },
55
- { label: 'reasoning', prompt: `Evaluate REASONING CAPABILITY of these models for: "${useCase}". Models: ${criteria.modelsToEvaluate.join(', ')}. Score 0-100 for multi-step reasoning, code understanding, logical deduction. Reference published benchmarks (MATH, BBH, ARC).` },
56
- { label: 'speed-latency', prompt: `Evaluate SPEED AND LATENCY of these models: ${criteria.modelsToEvaluate.join(', ')}. Score 0-100 (100=fastest). Include: typical time-to-first-token, output tokens/second, and whether the model supports streaming. Reference publicly available benchmarks and known provider SLAs.` },
57
- { label: 'cost-efficiency', prompt: `Evaluate COST EFFICIENCY of these models for: "${useCase}" with typical usage of ~1000 input tokens and ~500 output tokens per call. Models: ${criteria.modelsToEvaluate.join(', ')}. Score 0-100 (100=cheapest). Include: price per 1M input/output tokens from official pricing pages, estimated monthly cost at 100K calls/month.` },
58
- ];
51
+ phase('Benchmark');
52
+ const DIMENSIONS = [
53
+ { label: 'quality', prompt: `Evaluate OUTPUT QUALITY of these models for: "${useCase}". Test prompts: ${criteria.testPrompts.slice(0, 3).join(' | ')}. Models: ${criteria.modelsToEvaluate.join(', ')}. Score each 0-100 for accuracy, completeness, and usefulness. Base scores on published benchmarks (MMLU, HumanEval, SWE-bench, coding evals) and known model capabilities.` },
54
+ { label: 'reasoning', prompt: `Evaluate REASONING CAPABILITY of these models for: "${useCase}". Models: ${criteria.modelsToEvaluate.join(', ')}. Score 0-100 for multi-step reasoning, code understanding, logical deduction. Reference published benchmarks (MATH, BBH, ARC).` },
55
+ { label: 'speed-latency', prompt: `Evaluate SPEED AND LATENCY of these models: ${criteria.modelsToEvaluate.join(', ')}. Score 0-100 (100=fastest). Include: typical time-to-first-token, output tokens/second, and whether the model supports streaming. Reference publicly available benchmarks and known provider SLAs.` },
56
+ { label: 'cost-efficiency', prompt: `Evaluate COST EFFICIENCY of these models for: "${useCase}" with typical usage of ~1000 input tokens and ~500 output tokens per call. Models: ${criteria.modelsToEvaluate.join(', ')}. Score 0-100 (100=cheapest). Include: price per 1M input/output tokens from official pricing pages, estimated monthly cost at 100K calls/month.` },
57
+ ];
59
58
 
60
- const evals = await parallel(
61
- DIMENSIONS.map(d => () => agent(d.prompt, { schema: EVAL_SCHEMA, label: `eval:${d.label}`, phase: 'Benchmark' }))
62
- );
59
+ const evals = await parallel(
60
+ DIMENSIONS.map(d => () => agent(d.prompt, { schema: EVAL_SCHEMA, label: `eval:${d.label}`, phase: 'Benchmark' }))
61
+ );
63
62
 
64
- phase('Score');
65
- const validEvals = evals.filter(Boolean);
66
- const modelScores = {};
67
- criteria.modelsToEvaluate.forEach(model => {
68
- modelScores[model] = validEvals.reduce((sum, e) => {
69
- const s = (e.scores || []).find(sc => sc.model === model);
70
- return sum + (s ? s.score : 0);
71
- }, 0);
72
- });
73
- const sorted = Object.entries(modelScores).sort((a, b) => b[1] - a[1]);
74
- if (sorted.length > 0) log(`Scoring complete — top model: ${sorted[0][0]}`);
63
+ phase('Score');
64
+ const validEvals = evals.filter(Boolean);
65
+ const modelScores = {};
66
+ criteria.modelsToEvaluate.forEach(model => {
67
+ modelScores[model] = validEvals.reduce((sum, e) => {
68
+ const s = (e.scores || []).find(sc => sc.model === model);
69
+ return sum + (s ? s.score : 0);
70
+ }, 0);
71
+ });
72
+ const sorted = Object.entries(modelScores).sort((a, b) => b[1] - a[1]);
73
+ if (sorted.length > 0) log(`Scoring complete — top model: ${sorted[0][0]}`);
75
74
 
76
- phase('Recommend');
77
- const scoreText = Object.entries(modelScores).sort((a, b) => b[1] - a[1]).map(([m, s]) => `${m}: ${s} total`).join(', ');
78
- const recommendation = await agent(`Provide a model recommendation for: "${useCase}"\n\nScores: ${scoreText}\n\nPriorities: ${criteria.priorities.join(' > ')}\n\nRank all models, declare the winner with rationale, note the best model for each specific priority, and include a cost note for the top 2 models.`, { schema: RECOMMENDATION_SCHEMA, label: 'recommend' });
79
- if (!recommendation) { return { useCase, criteria, evals: validEvals, modelScores, error: 'recommendation-agent-null' }; }
75
+ phase('Recommend');
76
+ const scoreText = Object.entries(modelScores).sort((a, b) => b[1] - a[1]).map(([m, s]) => `${m}: ${s} total`).join(', ');
77
+ const recommendation = await agent(`Provide a model recommendation for: "${useCase}"\n\nScores: ${scoreText}\n\nPriorities: ${criteria.priorities.join(' > ')}\n\nRank all models, declare the winner with rationale, note the best model for each specific priority, and include a cost note for the top 2 models.`, { schema: RECOMMENDATION_SCHEMA, label: 'recommend' });
78
+ if (!recommendation) { return { useCase, criteria, evals: validEvals, modelScores, error: 'recommendation-agent-null' }; }
80
79
 
81
- return { useCase, criteria, evals: validEvals, modelScores, recommendation };
82
- }
80
+ return { useCase, criteria, evals: validEvals, modelScores, recommendation };
@@ -10,105 +10,107 @@ export const meta = {
10
10
  ],
11
11
  };
12
12
 
13
- export default async function run({ agent, parallel, pipeline, phase, log, args, budget }) {
14
- const SPEC_SCHEMA = {
15
- type: 'object',
16
- properties: {
17
- apiName: { type: 'string' },
18
- endpoints: {
19
- type: 'array',
20
- items: {
21
- type: 'object',
22
- properties: {
23
- method: { type: 'string' },
24
- path: { type: 'string' },
25
- requestSchema: { type: 'string' },
26
- responseSchema: { type: 'string' },
27
- authRequired: { type: 'boolean' },
28
- errorCodes: { type: 'array', items: { type: 'string' } },
29
- },
30
- required: ['method', 'path', 'responseSchema'],
13
+ const SPEC_SCHEMA = {
14
+ type: 'object',
15
+ properties: {
16
+ apiName: { type: 'string' },
17
+ endpoints: {
18
+ type: 'array',
19
+ items: {
20
+ type: 'object',
21
+ properties: {
22
+ method: { type: 'string' },
23
+ path: { type: 'string' },
24
+ requestSchema: { type: 'string' },
25
+ responseSchema: { type: 'string' },
26
+ authRequired: { type: 'boolean' },
27
+ errorCodes: { type: 'array', items: { type: 'string' } },
31
28
  },
29
+ required: ['method', 'path', 'responseSchema'],
32
30
  },
33
31
  },
34
- required: ['apiName', 'endpoints'],
35
- };
32
+ },
33
+ required: ['apiName', 'endpoints'],
34
+ };
36
35
 
37
- const IMPL_SCHEMA = {
38
- type: 'object',
39
- properties: {
40
- implementedEndpoints: {
41
- type: 'array',
42
- items: {
43
- type: 'object',
44
- properties: {
45
- method: { type: 'string' },
46
- path: { type: 'string' },
47
- actualRequestHandling: { type: 'string' },
48
- actualResponseShape: { type: 'string' },
49
- authImplemented: { type: 'boolean' },
50
- },
51
- required: ['method', 'path', 'actualResponseShape'],
36
+ const IMPL_SCHEMA = {
37
+ type: 'object',
38
+ properties: {
39
+ implementedEndpoints: {
40
+ type: 'array',
41
+ items: {
42
+ type: 'object',
43
+ properties: {
44
+ method: { type: 'string' },
45
+ path: { type: 'string' },
46
+ actualRequestHandling: { type: 'string' },
47
+ actualResponseShape: { type: 'string' },
48
+ authImplemented: { type: 'boolean' },
52
49
  },
50
+ required: ['method', 'path', 'actualResponseShape'],
53
51
  },
54
52
  },
55
- required: ['implementedEndpoints'],
56
- };
53
+ },
54
+ required: ['implementedEndpoints'],
55
+ };
57
56
 
58
- const VIOLATION_SCHEMA = {
59
- type: 'object',
60
- properties: {
61
- violations: {
62
- type: 'array',
63
- items: {
64
- type: 'object',
65
- properties: {
66
- endpoint: { type: 'string' },
67
- severity: { type: 'string', enum: ['breaking', 'non-breaking', 'warning'] },
68
- type: { type: 'string' },
69
- specSays: { type: 'string' },
70
- implDoes: { type: 'string' },
71
- fix: { type: 'string' },
72
- },
73
- required: ['endpoint', 'severity', 'type', 'specSays', 'implDoes', 'fix'],
57
+ const VIOLATION_SCHEMA = {
58
+ type: 'object',
59
+ properties: {
60
+ violations: {
61
+ type: 'array',
62
+ items: {
63
+ type: 'object',
64
+ properties: {
65
+ endpoint: { type: 'string' },
66
+ severity: { type: 'string', enum: ['breaking', 'non-breaking', 'warning'] },
67
+ type: { type: 'string' },
68
+ specSays: { type: 'string' },
69
+ implDoes: { type: 'string' },
70
+ fix: { type: 'string' },
74
71
  },
72
+ required: ['endpoint', 'severity', 'type', 'specSays', 'implDoes', 'fix'],
75
73
  },
76
- summary: { type: 'string' },
77
- breakingCount: { type: 'number' },
78
- compatible: { type: 'boolean' },
79
74
  },
80
- required: ['violations', 'summary', 'breakingCount', 'compatible'],
81
- };
75
+ summary: { type: 'string' },
76
+ breakingCount: { type: 'number' },
77
+ compatible: { type: 'boolean' },
78
+ },
79
+ required: ['violations', 'summary', 'breakingCount', 'compatible'],
80
+ };
82
81
 
83
- const target = args || 'current API (provide spec file path and implementation path as args)';
82
+ const target = args || 'current API (provide spec file path and implementation path as args)';
84
83
 
85
- phase('ReadSpec');
86
- log(`Reading API spec from: ${target}`);
87
- const spec = await agent(
88
- `Read and extract the complete API contract from the spec file(s) in: "${target}". Look for OpenAPI/Swagger YAML, GraphQL schema files, Protobuf files, or API documentation. Extract every endpoint with its method, path, request/response schema, auth requirements, and error codes.`,
89
- { schema: SPEC_SCHEMA, label: 'read-spec' }
90
- );
91
- if (!spec) { log('Warning: agent returned null for spec, skipping'); return { target, error: 'agent-null' }; }
92
- log(`Spec: ${spec.apiName} — ${spec.endpoints.length} endpoints`);
84
+ phase('ReadSpec');
85
+ log(`Reading API spec from: ${target}`);
86
+ const spec = await agent(
87
+ `Read and extract the complete API contract from the spec file(s) in: "${target}". Look for OpenAPI/Swagger YAML, GraphQL schema files, Protobuf files, or API documentation. Extract every endpoint with its method, path, request/response schema, auth requirements, and error codes.`,
88
+ { schema: SPEC_SCHEMA, label: 'read-spec' }
89
+ );
90
+ if (!spec) { log('Warning: agent returned null for spec, skipping'); return { target, error: 'agent-null' }; }
91
+ log(`Spec: ${spec.apiName} — ${spec.endpoints.length} endpoints`);
93
92
 
94
- phase('ReadImpl');
95
- const impl = await agent(
96
- `Read the actual API IMPLEMENTATION in: "${target}". Look for route handlers, controllers, resolvers, or gRPC handlers. For each endpoint extract the actual request handling logic, response shape being returned, and whether auth is checked. Do NOT read the spec — only the implementation code.`,
97
- { schema: IMPL_SCHEMA, label: 'read-impl' }
98
- );
99
- if (!impl) { log('Warning: agent returned null for impl, skipping'); return { target, error: 'agent-null' }; }
100
- log(`Implementation: ${impl.implementedEndpoints.length} endpoints found`);
93
+ phase('ReadImpl');
94
+ const impl = await agent(
95
+ `Read the actual API IMPLEMENTATION in: "${target}". Look for route handlers, controllers, resolvers, or gRPC handlers. For each endpoint extract the actual request handling logic, response shape being returned, and whether auth is checked. Do NOT read the spec — only the implementation code.`,
96
+ { schema: IMPL_SCHEMA, label: 'read-impl' }
97
+ );
98
+ if (!impl) { log('Warning: agent returned null for impl, skipping'); return { target, error: 'agent-null' }; }
99
+ log(`Implementation: ${impl.implementedEndpoints.length} endpoints found`);
101
100
 
102
- phase('Diff');
103
- const specText = spec.endpoints.map(e => `${e.method} ${e.path}: response=${e.responseSchema}, auth=${e.authRequired}, errors=${(e.errorCodes || []).join(',')}`).join('\n');
104
- const implText = impl.implementedEndpoints.map(e => `${e.method} ${e.path}: response=${e.actualResponseShape}, auth=${e.authImplemented}`).join('\n');
101
+ phase('Diff');
102
+ const specText = spec.endpoints.length
103
+ ? spec.endpoints.map(e => `${e.method} ${e.path}: response=${e.responseSchema}, auth=${e.authRequired}, errors=${(e.errorCodes || []).join(',')}`).join('\n')
104
+ : `(no endpoints extracted — spec agent's own summary: ${spec.apiName})`;
105
+ const implText = impl.implementedEndpoints.length
106
+ ? impl.implementedEndpoints.map(e => `${e.method} ${e.path}: response=${e.actualResponseShape}, auth=${e.authImplemented}`).join('\n')
107
+ : '(no implemented endpoints found)';
105
108
 
106
- phase('Report');
107
- const report = await agent(
108
- `Compare the API specification against the implementation and identify contract violations.\n\nSPEC:\n${specText}\n\nIMPLEMENTATION:\n${implText}\n\nFor each violation: classify as breaking (response shape/auth differs) or non-breaking (extra fields, missing optional), state what the spec says vs what the impl does, and provide the exact fix.`,
109
- { schema: VIOLATION_SCHEMA, label: 'violations' }
110
- );
111
- if (!report) { return { target, spec, impl, error: 'report-agent-null' }; }
109
+ phase('Report');
110
+ const report = await agent(
111
+ `Compare the API specification against the implementation and identify contract violations.\n\nSPEC (apiName: ${spec.apiName}):\n${specText}\n\nIMPLEMENTATION:\n${implText}\n\nIf the target has no real endpoints to compare (e.g. it isn't an API at all — a plain library, a CLI, a single function), say so plainly using the spec agent's own summary above rather than reporting the sections as empty/unsupplied — the spec agent DID analyze the target, it just found no formal endpoint contract. For each real violation: classify as breaking (response shape/auth differs) or non-breaking (extra fields, missing optional), state what the spec says vs what the impl does, and provide the exact fix.`,
112
+ { schema: VIOLATION_SCHEMA, label: 'violations' }
113
+ );
114
+ if (!report) { return { target, spec, impl, error: 'report-agent-null' }; }
112
115
 
113
- return { target, spec, impl, report };
114
- }
116
+ return { target, spec, impl, report };