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,94 +10,92 @@ 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
- behaviorName: { type: 'string' },
18
- given: { type: 'string' },
19
- when: { type: 'string' },
20
- then: { type: 'string' },
21
- acceptanceCriteria: { type: 'array', items: { type: 'string' } },
22
- edgeCases: { type: 'array', items: { type: 'string' } },
23
- outOfScope: { type: 'array', items: { type: 'string' } },
24
- },
25
- required: ['behaviorName', 'given', 'when', 'then', 'acceptanceCriteria', 'edgeCases'],
26
- };
13
+ const SPEC_SCHEMA = {
14
+ type: 'object',
15
+ properties: {
16
+ behaviorName: { type: 'string' },
17
+ given: { type: 'string' },
18
+ when: { type: 'string' },
19
+ then: { type: 'string' },
20
+ acceptanceCriteria: { type: 'array', items: { type: 'string' } },
21
+ edgeCases: { type: 'array', items: { type: 'string' } },
22
+ outOfScope: { type: 'array', items: { type: 'string' } },
23
+ },
24
+ required: ['behaviorName', 'given', 'when', 'then', 'acceptanceCriteria', 'edgeCases'],
25
+ };
27
26
 
28
- const TEST_SCHEMA = {
29
- type: 'object',
30
- properties: {
31
- testDescription: { type: 'string' },
32
- testCode: { type: 'string' },
33
- whyItFails: { type: 'string' },
34
- fileToCreate: { type: 'string' },
35
- },
36
- required: ['testDescription', 'testCode', 'whyItFails', 'fileToCreate'],
37
- };
27
+ const TEST_SCHEMA = {
28
+ type: 'object',
29
+ properties: {
30
+ testDescription: { type: 'string' },
31
+ testCode: { type: 'string' },
32
+ whyItFails: { type: 'string' },
33
+ fileToCreate: { type: 'string' },
34
+ },
35
+ required: ['testDescription', 'testCode', 'whyItFails', 'fileToCreate'],
36
+ };
38
37
 
39
- const IMPL_SCHEMA = {
40
- type: 'object',
41
- properties: {
42
- approachExplanation: { type: 'string' },
43
- implementationCode: { type: 'string' },
44
- fileToCreate: { type: 'string' },
45
- minimalityRationale: { type: 'string' },
46
- },
47
- required: ['approachExplanation', 'implementationCode', 'fileToCreate', 'minimalityRationale'],
48
- };
38
+ const IMPL_SCHEMA = {
39
+ type: 'object',
40
+ properties: {
41
+ approachExplanation: { type: 'string' },
42
+ implementationCode: { type: 'string' },
43
+ fileToCreate: { type: 'string' },
44
+ minimalityRationale: { type: 'string' },
45
+ },
46
+ required: ['approachExplanation', 'implementationCode', 'fileToCreate', 'minimalityRationale'],
47
+ };
49
48
 
50
- const REFACTOR_SCHEMA = {
51
- type: 'object',
52
- properties: {
53
- improvements: { type: 'array', items: { type: 'string' } },
54
- refactoredCode: { type: 'string' },
55
- testsStillPass: { type: 'boolean' },
56
- explanation: { type: 'string' },
57
- },
58
- required: ['improvements', 'refactoredCode', 'testsStillPass', 'explanation'],
59
- };
49
+ const REFACTOR_SCHEMA = {
50
+ type: 'object',
51
+ properties: {
52
+ improvements: { type: 'array', items: { type: 'string' } },
53
+ refactoredCode: { type: 'string' },
54
+ testsStillPass: { type: 'boolean' },
55
+ explanation: { type: 'string' },
56
+ },
57
+ required: ['improvements', 'refactoredCode', 'testsStillPass', 'explanation'],
58
+ };
60
59
 
61
- const requirement = args || 'No requirement specified — pass your feature/behavior description as args.';
60
+ const requirement = args || 'No requirement specified — pass your feature/behavior description as args.';
62
61
 
63
- phase('Spec');
64
- log(`Requirement: ${requirement.slice(0, 80)}`);
65
- const spec = await agent(
66
- `Write a precise behavioral specification for: "${requirement}"\n\nUse Given-When-Then format. Be explicit about inputs, outputs, and edge cases. List what is OUT of scope to keep this focused.`,
67
- { schema: SPEC_SCHEMA, label: 'spec' }
68
- );
69
- log(`Spec: ${spec.behaviorName} | ${spec.acceptanceCriteria.length} acceptance criteria, ${spec.edgeCases.length} edge cases`);
62
+ phase('Spec');
63
+ log(`Requirement: ${requirement.slice(0, 80)}`);
64
+ const spec = await agent(
65
+ `Write a precise behavioral specification for: "${requirement}"\n\nUse Given-When-Then format. Be explicit about inputs, outputs, and edge cases. List what is OUT of scope to keep this focused.`,
66
+ { schema: SPEC_SCHEMA, label: 'spec' }
67
+ );
68
+ log(`Spec: ${spec.behaviorName} | ${spec.acceptanceCriteria.length} acceptance criteria, ${spec.edgeCases.length} edge cases`);
70
69
 
71
- phase('Red');
72
- const specText = `Given: ${spec.given}\nWhen: ${spec.when}\nThen: ${spec.then}\nCriteria: ${spec.acceptanceCriteria.join(', ')}`;
73
- const test = await agent(
74
- `Write a FAILING test for this behavior specification:\n${specText}\n\nWrite the minimal test that will fail because the implementation doesn't exist yet. Explain WHY it fails. Use the project's test framework (detect from file extensions or state Jest/Vitest/Node assert).`,
75
- { schema: TEST_SCHEMA, label: 'red' }
76
- );
77
- log(`[RED] Test: "${test.testDescription}" — fails because: ${test.whyItFails}`);
70
+ phase('Red');
71
+ const specText = `Given: ${spec.given}\nWhen: ${spec.when}\nThen: ${spec.then}\nCriteria: ${spec.acceptanceCriteria.join(', ')}`;
72
+ const test = await agent(
73
+ `Write a FAILING test for this behavior specification:\n${specText}\n\nWrite the minimal test that will fail because the implementation doesn't exist yet. Explain WHY it fails. Use the project's test framework (detect from file extensions or state Jest/Vitest/Node assert).`,
74
+ { schema: TEST_SCHEMA, label: 'red' }
75
+ );
76
+ log(`[RED] Test: "${test.testDescription}" — fails because: ${test.whyItFails}`);
78
77
 
79
- phase('Green');
80
- const testContext = `Test: ${test.testDescription}\n\nTest code:\n${test.testCode}\n\nFails because: ${test.whyItFails}`;
81
- const impl = await agent(
82
- `Write the MINIMUM implementation to make this test pass:\n${testContext}\n\nWrite ONLY what is needed to make the test go green. No extra features, no future-proofing. Explain why this is the minimal solution.`,
83
- { schema: IMPL_SCHEMA, label: 'green' }
84
- );
85
- log(`[GREEN] Minimal implementation: ${impl.minimalityRationale}`);
78
+ phase('Green');
79
+ const testContext = `Test: ${test.testDescription}\n\nTest code:\n${test.testCode}\n\nFails because: ${test.whyItFails}`;
80
+ const impl = await agent(
81
+ `Write the MINIMUM implementation to make this test pass:\n${testContext}\n\nWrite ONLY what is needed to make the test go green. No extra features, no future-proofing. Explain why this is the minimal solution.`,
82
+ { schema: IMPL_SCHEMA, label: 'green' }
83
+ );
84
+ log(`[GREEN] Minimal implementation: ${impl.minimalityRationale}`);
86
85
 
87
- phase('Refactor');
88
- const greenContext = `Test: ${test.testCode}\nImplementation: ${impl.implementationCode}`;
89
- const refactored = await agent(
90
- `Refactor this passing implementation for clarity and maintainability, keeping all tests green:\n${greenContext}\n\nList specific improvements made (naming, structure, extraction, simplification). The tests MUST still pass after refactoring.`,
91
- { schema: REFACTOR_SCHEMA, label: 'refactor' }
92
- );
93
- log(`[REFACTOR] ${refactored.improvements.length} improvements, tests still pass: ${refactored.testsStillPass}`);
86
+ phase('Refactor');
87
+ const greenContext = `Test: ${test.testCode}\nImplementation: ${impl.implementationCode}`;
88
+ const refactored = await agent(
89
+ `Refactor this passing implementation for clarity and maintainability, keeping all tests green:\n${greenContext}\n\nList specific improvements made (naming, structure, extraction, simplification). The tests MUST still pass after refactoring.`,
90
+ { schema: REFACTOR_SCHEMA, label: 'refactor' }
91
+ );
92
+ log(`[REFACTOR] ${refactored.improvements.length} improvements, tests still pass: ${refactored.testsStillPass}`);
94
93
 
95
- return {
96
- requirement,
97
- spec,
98
- test,
99
- implementation: impl,
100
- refactored,
101
- cycle: { red: test.testDescription, green: impl.approachExplanation, refactor: refactored.explanation },
102
- };
103
- }
94
+ return {
95
+ requirement,
96
+ spec,
97
+ test,
98
+ implementation: impl,
99
+ refactored,
100
+ cycle: { red: test.testDescription, green: impl.approachExplanation, refactor: refactored.explanation },
101
+ };
@@ -10,63 +10,61 @@ export const meta = {
10
10
  ],
11
11
  };
12
12
 
13
- export default async function run({ agent, parallel, pipeline, phase, log, args, budget }) {
14
- const EVAL_SCHEMA = {
15
- type: 'object',
16
- properties: {
17
- dimension: { type: 'string' },
18
- score: { type: 'number', minimum: 1, maximum: 10 },
19
- rationale: { type: 'string' },
20
- pros: { type: 'array', items: { type: 'string' } },
21
- cons: { type: 'array', items: { type: 'string' } },
22
- },
23
- required: ['dimension', 'score', 'rationale', 'pros', 'cons'],
24
- };
13
+ const EVAL_SCHEMA = {
14
+ type: 'object',
15
+ properties: {
16
+ dimension: { type: 'string' },
17
+ score: { type: 'number', minimum: 1, maximum: 10 },
18
+ rationale: { type: 'string' },
19
+ pros: { type: 'array', items: { type: 'string' } },
20
+ cons: { type: 'array', items: { type: 'string' } },
21
+ },
22
+ required: ['dimension', 'score', 'rationale', 'pros', 'cons'],
23
+ };
25
24
 
26
- const RECOMMEND_SCHEMA = {
27
- type: 'object',
28
- properties: {
29
- winner: { type: 'string' },
30
- summary: { type: 'string' },
31
- ranking: { type: 'array', items: { type: 'object', properties: { name: { type: 'string' }, totalScore: { type: 'number' }, verdict: { type: 'string' } }, required: ['name', 'totalScore', 'verdict'] } },
32
- tradeoffs: { type: 'array', items: { type: 'string' } },
33
- recommendation: { type: 'string' },
34
- },
35
- required: ['winner', 'summary', 'ranking', 'tradeoffs', 'recommendation'],
36
- };
25
+ const RECOMMEND_SCHEMA = {
26
+ type: 'object',
27
+ properties: {
28
+ winner: { type: 'string' },
29
+ summary: { type: 'string' },
30
+ ranking: { type: 'array', items: { type: 'object', properties: { name: { type: 'string' }, totalScore: { type: 'number' }, verdict: { type: 'string' } }, required: ['name', 'totalScore', 'verdict'] } },
31
+ tradeoffs: { type: 'array', items: { type: 'string' } },
32
+ recommendation: { type: 'string' },
33
+ },
34
+ required: ['winner', 'summary', 'ranking', 'tradeoffs', 'recommendation'],
35
+ };
37
36
 
38
- const input = args || 'No candidates specified — pass "TechA vs TechB vs TechC for [use case]" as args.';
37
+ const input = args || 'No candidates specified — pass "TechA vs TechB vs TechC for [use case]" as args.';
39
38
 
40
- phase('Scope');
41
- log(`Evaluating: ${input.slice(0, 80)}`);
39
+ phase('Scope');
40
+ log(`Evaluating: ${input.slice(0, 80)}`);
42
41
 
43
- const DIMENSIONS = [
44
- { label: 'dx', name: 'Developer Experience', prompt: `Evaluate the developer experience of: ${input}. Consider: API ergonomics, documentation quality, error messages, learning curve, tooling, IDE support, type safety, and community examples. Score 1-10.` },
45
- { label: 'perf', name: 'Performance', prompt: `Evaluate the runtime performance of: ${input}. Consider: throughput, latency, memory footprint, scalability, benchmarks available, and known bottlenecks. Score 1-10.` },
46
- { label: 'security', name: 'Security', prompt: `Evaluate the security posture of: ${input}. Consider: CVE history, security audit results, supply chain risk, default-secure configuration, auth/authz support, and maintenance cadence. Score 1-10.` },
47
- { label: 'ecosystem', name: 'Ecosystem', prompt: `Evaluate the ecosystem of: ${input}. Consider: number of integrations, plugin quality, third-party packages, cloud provider support, and lock-in risk. Score 1-10.` },
48
- { label: 'community', name: 'Community', prompt: `Evaluate the community health of: ${input}. Consider: GitHub stars, contributor count, issue response time, Discord/Slack activity, recent releases, and long-term viability. Score 1-10.` },
49
- ];
42
+ const DIMENSIONS = [
43
+ { label: 'dx', name: 'Developer Experience', prompt: `Evaluate the developer experience of: ${input}. Consider: API ergonomics, documentation quality, error messages, learning curve, tooling, IDE support, type safety, and community examples. Score 1-10.` },
44
+ { label: 'perf', name: 'Performance', prompt: `Evaluate the runtime performance of: ${input}. Consider: throughput, latency, memory footprint, scalability, benchmarks available, and known bottlenecks. Score 1-10.` },
45
+ { label: 'security', name: 'Security', prompt: `Evaluate the security posture of: ${input}. Consider: CVE history, security audit results, supply chain risk, default-secure configuration, auth/authz support, and maintenance cadence. Score 1-10.` },
46
+ { label: 'ecosystem', name: 'Ecosystem', prompt: `Evaluate the ecosystem of: ${input}. Consider: number of integrations, plugin quality, third-party packages, cloud provider support, and lock-in risk. Score 1-10.` },
47
+ { label: 'community', name: 'Community', prompt: `Evaluate the community health of: ${input}. Consider: GitHub stars, contributor count, issue response time, Discord/Slack activity, recent releases, and long-term viability. Score 1-10.` },
48
+ ];
50
49
 
51
- phase('Evaluate');
52
- const evaluations = await parallel(
53
- DIMENSIONS.map(d => () => agent(d.prompt, { schema: EVAL_SCHEMA, label: `eval:${d.label}`, phase: 'Evaluate' }))
54
- );
50
+ phase('Evaluate');
51
+ const evaluations = await parallel(
52
+ DIMENSIONS.map(d => () => agent(d.prompt, { schema: EVAL_SCHEMA, label: `eval:${d.label}`, phase: 'Evaluate' }))
53
+ );
55
54
 
56
- phase('Score');
57
- const validEvals = evaluations.filter(Boolean);
58
- const scoreMatrix = validEvals.map(e => `${e.dimension}: ${e.score}/10 — ${e.rationale}`).join('\n');
59
- log(`Score matrix built from ${validEvals.length} dimensions`);
55
+ phase('Score');
56
+ const validEvals = evaluations.filter(Boolean);
57
+ const scoreMatrix = validEvals.map(e => `${e.dimension}: ${e.score}/10 — ${e.rationale}`).join('\n');
58
+ log(`Score matrix built from ${validEvals.length} dimensions`);
60
59
 
61
- phase('Recommend');
62
- const recommendation = await agent(
63
- `Based on this technology evaluation for "${input}", produce a ranked recommendation:\n\nScores:\n${scoreMatrix}\n\nIdentify the winner, explain the trade-offs, and give a clear recommendation for when to choose each option.`,
64
- { schema: RECOMMEND_SCHEMA, label: 'recommend' }
65
- );
60
+ phase('Recommend');
61
+ const recommendation = await agent(
62
+ `Based on this technology evaluation for "${input}", produce a ranked recommendation:\n\nScores:\n${scoreMatrix}\n\nIdentify the winner, explain the trade-offs, and give a clear recommendation for when to choose each option.`,
63
+ { schema: RECOMMEND_SCHEMA, label: 'recommend' }
64
+ );
66
65
 
67
- return {
68
- input,
69
- evaluations: validEvals,
70
- recommendation,
71
- };
72
- }
66
+ return {
67
+ input,
68
+ evaluations: validEvals,
69
+ recommendation,
70
+ };
@@ -10,86 +10,84 @@ export const meta = {
10
10
  ],
11
11
  };
12
12
 
13
- export default async function run({ agent, parallel, pipeline, phase, log, args, budget }) {
14
- const MODULE_SCHEMA = {
15
- type: 'object',
16
- properties: {
17
- modules: {
18
- type: 'array',
19
- items: {
20
- type: 'object',
21
- properties: { name: { type: 'string' }, path: { type: 'string' }, risk: { type: 'string', enum: ['high', 'medium', 'low'] } },
22
- required: ['name', 'path', 'risk'],
23
- },
13
+ const MODULE_SCHEMA = {
14
+ type: 'object',
15
+ properties: {
16
+ modules: {
17
+ type: 'array',
18
+ items: {
19
+ type: 'object',
20
+ properties: { name: { type: 'string' }, path: { type: 'string' }, risk: { type: 'string', enum: ['high', 'medium', 'low'] } },
21
+ required: ['name', 'path', 'risk'],
24
22
  },
25
23
  },
26
- required: ['modules'],
27
- };
24
+ },
25
+ required: ['modules'],
26
+ };
28
27
 
29
- const COVERAGE_SCHEMA = {
30
- type: 'object',
31
- properties: {
32
- module: { type: 'string' },
33
- testedBehaviors: { type: 'array', items: { type: 'string' } },
34
- untestedBehaviors: { type: 'array', items: { type: 'string' } },
35
- missingEdgeCases: { type: 'array', items: { type: 'string' } },
36
- estimatedCoverage: { type: 'number' },
37
- },
38
- required: ['module', 'testedBehaviors', 'untestedBehaviors', 'missingEdgeCases', 'estimatedCoverage'],
39
- };
28
+ const COVERAGE_SCHEMA = {
29
+ type: 'object',
30
+ properties: {
31
+ module: { type: 'string' },
32
+ testedBehaviors: { type: 'array', items: { type: 'string' } },
33
+ untestedBehaviors: { type: 'array', items: { type: 'string' } },
34
+ missingEdgeCases: { type: 'array', items: { type: 'string' } },
35
+ estimatedCoverage: { type: 'number' },
36
+ },
37
+ required: ['module', 'testedBehaviors', 'untestedBehaviors', 'missingEdgeCases', 'estimatedCoverage'],
38
+ };
40
39
 
41
- const PLAN_SCHEMA = {
42
- type: 'object',
43
- properties: {
44
- summary: { type: 'string' },
45
- prioritizedTests: {
46
- type: 'array',
47
- items: {
48
- type: 'object',
49
- properties: {
50
- module: { type: 'string' },
51
- behavior: { type: 'string' },
52
- priority: { type: 'string', enum: ['p0', 'p1', 'p2'] },
53
- testDescription: { type: 'string' },
54
- skeletonCode: { type: 'string' },
55
- },
56
- required: ['module', 'behavior', 'priority', 'testDescription', 'skeletonCode'],
40
+ const PLAN_SCHEMA = {
41
+ type: 'object',
42
+ properties: {
43
+ summary: { type: 'string' },
44
+ prioritizedTests: {
45
+ type: 'array',
46
+ items: {
47
+ type: 'object',
48
+ properties: {
49
+ module: { type: 'string' },
50
+ behavior: { type: 'string' },
51
+ priority: { type: 'string', enum: ['p0', 'p1', 'p2'] },
52
+ testDescription: { type: 'string' },
53
+ skeletonCode: { type: 'string' },
57
54
  },
55
+ required: ['module', 'behavior', 'priority', 'testDescription', 'skeletonCode'],
58
56
  },
59
57
  },
60
- required: ['summary', 'prioritizedTests'],
61
- };
58
+ },
59
+ required: ['summary', 'prioritizedTests'],
60
+ };
62
61
 
63
- const target = args || 'current codebase (run from repo root)';
62
+ const target = args || 'current codebase (run from repo root)';
64
63
 
65
- phase('Discover');
66
- log(`Discovering testable modules in: ${target}`);
67
- const discovery = await agent(
68
- `Discover and list all testable modules in: "${target}". For each module identify its path and risk level (high=core business logic/auth/payment, medium=data processing, low=utilities/helpers). Focus on source files that should have tests.`,
69
- { schema: MODULE_SCHEMA, label: 'discover' }
70
- );
71
- const modules = ((discovery || {}).modules || []).slice(0, 12);
72
- log(`Found ${modules.length} modules to analyze`);
64
+ phase('Discover');
65
+ log(`Discovering testable modules in: ${target}`);
66
+ const discovery = await agent(
67
+ `Discover and list all testable modules in: "${target}". For each module identify its path and risk level (high=core business logic/auth/payment, medium=data processing, low=utilities/helpers). Focus on source files that should have tests.`,
68
+ { schema: MODULE_SCHEMA, label: 'discover' }
69
+ );
70
+ const modules = ((discovery || {}).modules || []).slice(0, 12);
71
+ log(`Found ${modules.length} modules to analyze`);
73
72
 
74
- phase('Analyze');
75
- const coverageResults = await parallel(
76
- modules.map(m => () => agent(
77
- `Analyze test coverage for module: "${m.name}" at path: "${m.path}" in codebase: "${target}". List: (1) behaviors currently tested, (2) behaviors NOT tested that should be, (3) missing edge cases. Estimate current coverage % (0-100).`,
78
- { schema: COVERAGE_SCHEMA, label: `cov:${m.name.slice(0, 20)}`, phase: 'Analyze' }
79
- ))
80
- );
73
+ phase('Analyze');
74
+ const coverageResults = await parallel(
75
+ modules.map(m => () => agent(
76
+ `Analyze test coverage for module: "${m.name}" at path: "${m.path}" in codebase: "${target}". List: (1) behaviors currently tested, (2) behaviors NOT tested that should be, (3) missing edge cases. Estimate current coverage % (0-100).`,
77
+ { schema: COVERAGE_SCHEMA, label: `cov:${m.name.slice(0, 20)}`, phase: 'Analyze' }
78
+ ))
79
+ );
81
80
 
82
- phase('GapMap');
83
- const gaps = coverageResults.filter(Boolean);
84
- const gapSummary = gaps.map(g => `${g.module} (~${g.estimatedCoverage}% covered): untested=[${g.untestedBehaviors.slice(0, 3).join(', ')}]`).join('\n');
85
- log(`Coverage gaps identified across ${gaps.length} modules`);
81
+ phase('GapMap');
82
+ const gaps = coverageResults.filter(Boolean);
83
+ const gapSummary = gaps.map(g => `${g.module} (~${g.estimatedCoverage}% covered): untested=[${g.untestedBehaviors.slice(0, 3).join(', ')}]`).join('\n');
84
+ log(`Coverage gaps identified across ${gaps.length} modules`);
86
85
 
87
- phase('Plan');
88
- const plan = await agent(
89
- `Create a prioritized test-writing plan for: "${target}"\n\nCoverage gaps:\n${gapSummary}\n\nFor each gap, write a concrete test description and skeleton code. Prioritize: P0=high-risk untested, P1=medium-risk gaps, P2=edge cases. Include the actual test skeleton (describe/it or test() blocks) for each.`,
90
- { schema: PLAN_SCHEMA, label: 'plan' }
91
- );
92
- if (!plan) { return { target, modules, gaps, error: 'plan-agent-null' }; }
86
+ phase('Plan');
87
+ const plan = await agent(
88
+ `Create a prioritized test-writing plan for: "${target}"\n\nCoverage gaps:\n${gapSummary}\n\nFor each gap, write a concrete test description and skeleton code. Prioritize: P0=high-risk untested, P1=medium-risk gaps, P2=edge cases. Include the actual test skeleton (describe/it or test() blocks) for each.`,
89
+ { schema: PLAN_SCHEMA, label: 'plan' }
90
+ );
91
+ if (!plan) { return { target, modules, gaps, error: 'plan-agent-null' }; }
93
92
 
94
- return { target, modules, gaps, plan };
95
- }
93
+ return { target, modules, gaps, plan };