agileflow 4.0.0-alpha.2 → 4.0.0-alpha.21

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 (372) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/content/plugins/accessibility/plugin.yaml +14 -0
  3. package/content/plugins/accessibility/skills/agileflow-accessibility/SKILL.md +392 -0
  4. package/content/plugins/accessibility/skills/agileflow-accessibility/references/aria-patterns.md +528 -0
  5. package/content/plugins/accessibility/skills/agileflow-accessibility/references/testing-checklist.md +457 -0
  6. package/content/plugins/accessibility/skills/agileflow-accessibility/references/wcag-guide.md +683 -0
  7. package/content/plugins/accessibility/skills/agileflow-accessibility/workflows/audit-page.md +310 -0
  8. package/content/plugins/accessibility/skills/agileflow-accessibility/workflows/implement-accessible-component.md +479 -0
  9. package/content/plugins/ads/agents/ads-audit-budget.md +185 -0
  10. package/content/plugins/ads/agents/ads-audit-compliance.md +171 -0
  11. package/content/plugins/ads/agents/ads-audit-creative.md +168 -0
  12. package/content/plugins/ads/agents/ads-audit-google.md +227 -0
  13. package/content/plugins/ads/agents/ads-audit-meta.md +184 -0
  14. package/content/plugins/ads/agents/ads-audit-tracking.md +205 -0
  15. package/content/plugins/ads/agents/ads-consensus.md +410 -0
  16. package/content/plugins/ads/agents/ads-generate.md +152 -0
  17. package/content/plugins/ads/agents/ads-performance-tracker.md +212 -0
  18. package/content/plugins/ads/plugin.yaml +23 -4
  19. package/content/plugins/ads/skills/agileflow-ads/SKILL.md +218 -0
  20. package/content/plugins/ads/skills/agileflow-ads/references/ad-copy-formula-guide.md +131 -0
  21. package/content/plugins/ads/skills/agileflow-ads/references/audience-targeting-guide.md +137 -0
  22. package/content/plugins/ads/skills/agileflow-ads/references/bid-strategy-guide.md +115 -0
  23. package/content/plugins/ads/skills/agileflow-ads/references/platform-benchmarks.md +100 -0
  24. package/content/plugins/ads/skills/agileflow-ads/workflows/audit.md +118 -0
  25. package/content/plugins/ads/skills/agileflow-ads/workflows/generate.md +84 -0
  26. package/content/plugins/audit/agents/a11y-analyzer-aria.md +173 -0
  27. package/content/plugins/audit/agents/a11y-analyzer-forms.md +173 -0
  28. package/content/plugins/audit/agents/a11y-analyzer-keyboard.md +183 -0
  29. package/content/plugins/audit/agents/a11y-analyzer-semantic.md +169 -0
  30. package/content/plugins/audit/agents/a11y-analyzer-visual.md +172 -0
  31. package/content/plugins/audit/agents/a11y-consensus.md +249 -0
  32. package/content/plugins/audit/agents/accessibility.md +558 -0
  33. package/content/plugins/audit/agents/api-quality-analyzer-conventions.md +156 -0
  34. package/content/plugins/audit/agents/api-quality-analyzer-docs.md +184 -0
  35. package/content/plugins/audit/agents/api-quality-analyzer-errors.md +191 -0
  36. package/content/plugins/audit/agents/api-quality-analyzer-pagination.md +179 -0
  37. package/content/plugins/audit/agents/api-quality-analyzer-versioning.md +150 -0
  38. package/content/plugins/audit/agents/api-quality-consensus.md +217 -0
  39. package/content/plugins/audit/agents/api-validator.md +191 -0
  40. package/content/plugins/audit/agents/arch-analyzer-circular.md +156 -0
  41. package/content/plugins/audit/agents/arch-analyzer-complexity.md +193 -0
  42. package/content/plugins/audit/agents/arch-analyzer-coupling.md +152 -0
  43. package/content/plugins/audit/agents/arch-analyzer-layering.md +160 -0
  44. package/content/plugins/audit/agents/arch-analyzer-patterns.md +210 -0
  45. package/content/plugins/audit/agents/arch-consensus.md +228 -0
  46. package/content/plugins/audit/agents/browser-qa.md +342 -0
  47. package/content/plugins/audit/agents/code-reviewer.md +298 -0
  48. package/content/plugins/audit/agents/completeness-analyzer-api.md +199 -0
  49. package/content/plugins/audit/agents/completeness-analyzer-conditional.md +211 -0
  50. package/content/plugins/audit/agents/completeness-analyzer-handlers.md +166 -0
  51. package/content/plugins/audit/agents/completeness-analyzer-imports.md +165 -0
  52. package/content/plugins/audit/agents/completeness-analyzer-routes.md +190 -0
  53. package/content/plugins/audit/agents/completeness-analyzer-state.md +196 -0
  54. package/content/plugins/audit/agents/completeness-analyzer-stubs.md +206 -0
  55. package/content/plugins/audit/agents/completeness-consensus.md +295 -0
  56. package/content/plugins/audit/agents/error-analyzer.md +213 -0
  57. package/content/plugins/audit/agents/flow-analyzer-authorization.md +182 -0
  58. package/content/plugins/audit/agents/flow-analyzer-discovery.md +174 -0
  59. package/content/plugins/audit/agents/flow-analyzer-errors.md +186 -0
  60. package/content/plugins/audit/agents/flow-analyzer-feedback.md +185 -0
  61. package/content/plugins/audit/agents/flow-analyzer-navigation.md +177 -0
  62. package/content/plugins/audit/agents/flow-analyzer-persistence.md +193 -0
  63. package/content/plugins/audit/agents/flow-analyzer-wiring.md +169 -0
  64. package/content/plugins/audit/agents/flow-consensus.md +237 -0
  65. package/content/plugins/audit/agents/legal-analyzer-a11y.md +114 -0
  66. package/content/plugins/audit/agents/legal-analyzer-ai.md +121 -0
  67. package/content/plugins/audit/agents/legal-analyzer-consumer.md +114 -0
  68. package/content/plugins/audit/agents/legal-analyzer-content.md +117 -0
  69. package/content/plugins/audit/agents/legal-analyzer-international.md +119 -0
  70. package/content/plugins/audit/agents/legal-analyzer-licensing.md +119 -0
  71. package/content/plugins/audit/agents/legal-analyzer-privacy.md +112 -0
  72. package/content/plugins/audit/agents/legal-analyzer-security.md +116 -0
  73. package/content/plugins/audit/agents/legal-analyzer-terms.md +115 -0
  74. package/content/plugins/audit/agents/legal-consensus.md +250 -0
  75. package/content/plugins/audit/agents/logic-analyzer-edge.md +179 -0
  76. package/content/plugins/audit/agents/logic-analyzer-flow.md +264 -0
  77. package/content/plugins/audit/agents/logic-analyzer-invariant.md +215 -0
  78. package/content/plugins/audit/agents/logic-analyzer-race.md +280 -0
  79. package/content/plugins/audit/agents/logic-analyzer-type.md +227 -0
  80. package/content/plugins/audit/agents/logic-consensus.md +259 -0
  81. package/content/plugins/audit/agents/perf-analyzer-assets.md +182 -0
  82. package/content/plugins/audit/agents/perf-analyzer-bundle.md +173 -0
  83. package/content/plugins/audit/agents/perf-analyzer-caching.md +170 -0
  84. package/content/plugins/audit/agents/perf-analyzer-compute.md +173 -0
  85. package/content/plugins/audit/agents/perf-analyzer-memory.md +193 -0
  86. package/content/plugins/audit/agents/perf-analyzer-network.md +165 -0
  87. package/content/plugins/audit/agents/perf-analyzer-queries.md +162 -0
  88. package/content/plugins/audit/agents/perf-analyzer-rendering.md +168 -0
  89. package/content/plugins/audit/agents/perf-consensus.md +287 -0
  90. package/content/plugins/audit/agents/qa.md +820 -0
  91. package/content/plugins/audit/agents/quality-analyzer-comments.md +159 -0
  92. package/content/plugins/audit/agents/quality-analyzer-duplication.md +184 -0
  93. package/content/plugins/audit/agents/quality-analyzer-naming.md +160 -0
  94. package/content/plugins/audit/agents/quality-consensus.md +241 -0
  95. package/content/plugins/audit/agents/schema-validator.md +473 -0
  96. package/content/plugins/audit/agents/security-analyzer-api.md +210 -0
  97. package/content/plugins/audit/agents/security-analyzer-auth.md +169 -0
  98. package/content/plugins/audit/agents/security-analyzer-authz.md +180 -0
  99. package/content/plugins/audit/agents/security-analyzer-deps.md +153 -0
  100. package/content/plugins/audit/agents/security-analyzer-infra.md +184 -0
  101. package/content/plugins/audit/agents/security-analyzer-injection.md +155 -0
  102. package/content/plugins/audit/agents/security-analyzer-input.md +201 -0
  103. package/content/plugins/audit/agents/security-analyzer-secrets.md +183 -0
  104. package/content/plugins/audit/agents/security-consensus.md +283 -0
  105. package/content/plugins/audit/agents/test-analyzer-assertions.md +188 -0
  106. package/content/plugins/audit/agents/test-analyzer-coverage.md +189 -0
  107. package/content/plugins/audit/agents/test-analyzer-fragility.md +193 -0
  108. package/content/plugins/audit/agents/test-analyzer-integration.md +161 -0
  109. package/content/plugins/audit/agents/test-analyzer-maintenance.md +180 -0
  110. package/content/plugins/audit/agents/test-analyzer-mocking.md +188 -0
  111. package/content/plugins/audit/agents/test-analyzer-patterns.md +196 -0
  112. package/content/plugins/audit/agents/test-analyzer-structure.md +184 -0
  113. package/content/plugins/audit/agents/test-consensus.md +301 -0
  114. package/content/plugins/audit/agents/testing.md +561 -0
  115. package/content/plugins/audit/agents/ui-validator.md +344 -0
  116. package/content/plugins/audit/plugin.yaml +186 -5
  117. package/content/plugins/audit/skills/agileflow-audit/SKILL.md +113 -0
  118. package/content/plugins/audit/skills/agileflow-audit/references/audit-depth-guide.md +151 -0
  119. package/content/plugins/audit/skills/agileflow-audit/references/dependency-risk-guide.md +139 -0
  120. package/content/plugins/audit/skills/agileflow-audit/references/owasp-top10.md +120 -0
  121. package/content/plugins/audit/skills/agileflow-audit/references/performance-budget-guide.md +143 -0
  122. package/content/plugins/audit/skills/agileflow-audit/references/wcag-criteria.md +117 -0
  123. package/content/plugins/audit/skills/agileflow-audit/workflows/run-audit.md +52 -0
  124. package/content/plugins/audit/skills/agileflow-audit/workflows/tdd.md +66 -0
  125. package/content/plugins/core/agents/adr-writer.md +521 -0
  126. package/content/plugins/core/agents/epic-planner.md +520 -0
  127. package/content/plugins/core/agents/mentor.md +709 -0
  128. package/content/plugins/core/agents/orchestrator.md +776 -0
  129. package/content/plugins/core/agents/team-coordinator.md +334 -0
  130. package/content/plugins/core/agents/team-lead.md +181 -0
  131. package/content/plugins/core/agents/workspace-orchestrator.md +146 -0
  132. package/content/plugins/core/hooks/context-loader.js +31 -4
  133. package/content/plugins/core/hooks/damage-control-bash.js +10 -2
  134. package/content/plugins/core/hooks/damage-control-edit.js +4 -1
  135. package/content/plugins/core/hooks/damage-control-patterns.yaml +1 -1
  136. package/content/plugins/core/hooks/damage-control-write.js +4 -1
  137. package/content/plugins/core/hooks/{pre-compact-state.js → post-compact-state.js} +25 -8
  138. package/content/plugins/core/hooks/preferences-injector.js +352 -0
  139. package/content/plugins/core/plugin.yaml +24 -28
  140. package/content/plugins/core/skills/agileflow-adr/SKILL.md +34 -8
  141. package/content/plugins/core/skills/agileflow-adr/references/madr-format-guide.md +86 -0
  142. package/content/plugins/core/skills/agileflow-adr/workflows/write-adr.md +57 -0
  143. package/content/plugins/core/skills/agileflow-babysit-mentor/SKILL.md +94 -27
  144. package/content/plugins/core/skills/agileflow-babysit-mentor/references/mentor-decision-guide.md +81 -0
  145. package/content/plugins/core/skills/agileflow-babysit-mentor/workflows/mentor-session.md +79 -0
  146. package/content/plugins/core/skills/agileflow-epic-planner/SKILL.md +37 -7
  147. package/content/plugins/core/skills/agileflow-epic-planner/references/epic-sizing-guide.md +81 -0
  148. package/content/plugins/core/skills/agileflow-epic-planner/workflows/plan-epic.md +55 -0
  149. package/content/plugins/core/skills/agileflow-status-updater/SKILL.md +36 -20
  150. package/content/plugins/core/skills/agileflow-status-updater/references/status-transitions.md +89 -0
  151. package/content/plugins/core/skills/agileflow-status-updater/workflows/update-status.md +56 -0
  152. package/content/plugins/core/skills/agileflow-story-writer/SKILL.md +39 -114
  153. package/content/plugins/core/skills/agileflow-story-writer/references/estimation-reference.md +36 -0
  154. package/content/plugins/core/skills/agileflow-story-writer/references/story-template.md +92 -0
  155. package/content/plugins/core/skills/agileflow-story-writer/workflows/write-story.md +138 -0
  156. package/content/plugins/council/agents/council-advocate.md +223 -0
  157. package/content/plugins/council/agents/council-analyst.md +278 -0
  158. package/content/plugins/council/agents/council-compounder.md +204 -0
  159. package/content/plugins/council/agents/council-contrarian.md +217 -0
  160. package/content/plugins/council/agents/council-moonshot.md +217 -0
  161. package/content/plugins/council/agents/council-optimist.md +185 -0
  162. package/content/plugins/council/agents/council-revenue.md +200 -0
  163. package/content/plugins/council/agents/council-technical.md +218 -0
  164. package/content/plugins/council/agents/multi-expert.md +334 -0
  165. package/content/plugins/council/plugin.yaml +23 -4
  166. package/content/plugins/council/skills/agileflow-council/SKILL.md +102 -0
  167. package/content/plugins/council/skills/agileflow-council/references/decision-log-template.md +109 -0
  168. package/content/plugins/council/skills/agileflow-council/references/perspective-guide.md +104 -0
  169. package/content/plugins/council/skills/agileflow-council/references/when-to-convene-guide.md +112 -0
  170. package/content/plugins/council/skills/agileflow-council/workflows/convene.md +73 -0
  171. package/content/plugins/council/skills/agileflow-council/workflows/multi-expert.md +75 -0
  172. package/content/plugins/database/plugin.yaml +14 -0
  173. package/content/plugins/database/skills/agileflow-database/SKILL.md +284 -0
  174. package/content/plugins/database/skills/agileflow-database/references/indexing-guide.md +313 -0
  175. package/content/plugins/database/skills/agileflow-database/references/migration-guide.md +328 -0
  176. package/content/plugins/database/skills/agileflow-database/references/schema-design-guide.md +467 -0
  177. package/content/plugins/database/skills/agileflow-database/workflows/design-schema.md +213 -0
  178. package/content/plugins/database/skills/agileflow-database/workflows/optimize-query.md +253 -0
  179. package/content/plugins/debugging/plugin.yaml +14 -0
  180. package/content/plugins/debugging/skills/agileflow-debug/SKILL.md +236 -0
  181. package/content/plugins/debugging/skills/agileflow-debug/references/common-patterns.md +350 -0
  182. package/content/plugins/debugging/skills/agileflow-debug/references/debugging-strategies.md +328 -0
  183. package/content/plugins/debugging/skills/agileflow-debug/workflows/debug-issue.md +187 -0
  184. package/content/plugins/debugging/skills/agileflow-debug/workflows/reproduce-bug.md +194 -0
  185. package/content/plugins/delivery/agents/ci.md +547 -0
  186. package/content/plugins/delivery/agents/devops.md +789 -0
  187. package/content/plugins/delivery/plugin.yaml +19 -0
  188. package/content/plugins/delivery/skills/agileflow-delivery/SKILL.md +111 -0
  189. package/content/plugins/delivery/skills/agileflow-delivery/references/changelog-format-guide.md +133 -0
  190. package/content/plugins/delivery/skills/agileflow-delivery/references/ci-pipeline-guide.md +158 -0
  191. package/content/plugins/delivery/skills/agileflow-delivery/references/pr-checklist-guide.md +133 -0
  192. package/content/plugins/delivery/skills/agileflow-delivery/references/release-checklist.md +142 -0
  193. package/content/plugins/delivery/skills/agileflow-delivery/workflows/changelog.md +72 -0
  194. package/content/plugins/delivery/skills/agileflow-delivery/workflows/deploy.md +74 -0
  195. package/content/plugins/delivery/skills/agileflow-delivery/workflows/pr.md +75 -0
  196. package/content/plugins/docs/agents/documentation.md +544 -0
  197. package/content/plugins/docs/agents/readme-updater.md +640 -0
  198. package/content/plugins/docs/plugin.yaml +19 -0
  199. package/content/plugins/docs/skills/agileflow-docs/SKILL.md +106 -0
  200. package/content/plugins/docs/skills/agileflow-docs/references/api-doc-template.md +167 -0
  201. package/content/plugins/docs/skills/agileflow-docs/references/doc-types-guide.md +141 -0
  202. package/content/plugins/docs/skills/agileflow-docs/references/readme-template.md +156 -0
  203. package/content/plugins/docs/skills/agileflow-docs/workflows/readme-sync.md +57 -0
  204. package/content/plugins/docs/skills/agileflow-docs/workflows/sync.md +64 -0
  205. package/content/plugins/engineering/agents/api.md +718 -0
  206. package/content/plugins/engineering/agents/codebase-query.md +285 -0
  207. package/content/plugins/engineering/agents/compliance.md +559 -0
  208. package/content/plugins/engineering/agents/database.md +644 -0
  209. package/content/plugins/engineering/agents/integrations.md +644 -0
  210. package/content/plugins/engineering/agents/mobile.md +552 -0
  211. package/content/plugins/engineering/agents/monitoring.md +585 -0
  212. package/content/plugins/engineering/agents/performance.md +529 -0
  213. package/content/plugins/engineering/agents/refactor.md +592 -0
  214. package/content/plugins/engineering/agents/security.md +524 -0
  215. package/content/plugins/engineering/agents/ui.md +1336 -0
  216. package/content/plugins/engineering/plugin.yaml +37 -0
  217. package/content/plugins/engineering/skills/agileflow-engineering/SKILL.md +127 -0
  218. package/content/plugins/engineering/skills/agileflow-engineering/references/code-review-guide.md +126 -0
  219. package/content/plugins/engineering/skills/agileflow-engineering/references/domain-routing-guide.md +89 -0
  220. package/content/plugins/engineering/skills/agileflow-engineering/references/refactoring-guide.md +136 -0
  221. package/content/plugins/engineering/skills/agileflow-engineering/workflows/diagnose.md +63 -0
  222. package/content/plugins/engineering/skills/agileflow-engineering/workflows/impact.md +60 -0
  223. package/content/plugins/ideation/agents/brainstorm-analyzer-features.md +179 -0
  224. package/content/plugins/ideation/agents/brainstorm-analyzer-growth.md +169 -0
  225. package/content/plugins/ideation/agents/brainstorm-analyzer-integration.md +181 -0
  226. package/content/plugins/ideation/agents/brainstorm-analyzer-market.md +150 -0
  227. package/content/plugins/ideation/agents/brainstorm-analyzer-ux.md +180 -0
  228. package/content/plugins/ideation/agents/brainstorm-consensus.md +245 -0
  229. package/content/plugins/ideation/agents/design.md +568 -0
  230. package/content/plugins/ideation/agents/product.md +582 -0
  231. package/content/plugins/ideation/plugin.yaml +31 -0
  232. package/content/plugins/ideation/skills/agileflow-ideation/SKILL.md +109 -0
  233. package/content/plugins/ideation/skills/agileflow-ideation/references/brainstorm-techniques.md +138 -0
  234. package/content/plugins/ideation/skills/agileflow-ideation/references/competitive-analysis-template.md +148 -0
  235. package/content/plugins/ideation/skills/agileflow-ideation/references/feature-prioritization-guide.md +147 -0
  236. package/content/plugins/ideation/skills/agileflow-ideation/references/user-story-patterns.md +152 -0
  237. package/content/plugins/ideation/skills/agileflow-ideation/workflows/features.md +65 -0
  238. package/content/plugins/ideation/skills/agileflow-ideation/workflows/ideate.md +54 -0
  239. package/content/plugins/migration/agents/datamigration.md +757 -0
  240. package/content/plugins/migration/plugin.yaml +17 -0
  241. package/content/plugins/migration/skills/agileflow-migration/SKILL.md +106 -0
  242. package/content/plugins/migration/skills/agileflow-migration/references/data-validation-checklist.md +154 -0
  243. package/content/plugins/migration/skills/agileflow-migration/references/migration-patterns.md +209 -0
  244. package/content/plugins/migration/skills/agileflow-migration/references/rollback-playbook.md +171 -0
  245. package/content/plugins/migration/skills/agileflow-migration/references/version-compatibility-matrix.md +155 -0
  246. package/content/plugins/migration/skills/agileflow-migration/workflows/plan.md +73 -0
  247. package/content/plugins/migration/skills/agileflow-migration/workflows/validate.md +71 -0
  248. package/content/plugins/performance/plugin.yaml +14 -0
  249. package/content/plugins/performance/skills/agileflow-performance/SKILL.md +224 -0
  250. package/content/plugins/performance/skills/agileflow-performance/references/optimization-patterns.md +554 -0
  251. package/content/plugins/performance/skills/agileflow-performance/references/profiling-guide.md +383 -0
  252. package/content/plugins/performance/skills/agileflow-performance/references/web-vitals-guide.md +360 -0
  253. package/content/plugins/performance/skills/agileflow-performance/workflows/improve-web-vitals.md +344 -0
  254. package/content/plugins/performance/skills/agileflow-performance/workflows/profile-and-fix.md +254 -0
  255. package/content/plugins/planning/agents/analytics.md +670 -0
  256. package/content/plugins/planning/agents/rlm-subcore.md +215 -0
  257. package/content/plugins/planning/plugin.yaml +19 -0
  258. package/content/plugins/planning/skills/agileflow-planning/SKILL.md +111 -0
  259. package/content/plugins/planning/skills/agileflow-planning/references/estimation-guide.md +114 -0
  260. package/content/plugins/planning/skills/agileflow-planning/references/rpi-workflow.md +119 -0
  261. package/content/plugins/planning/skills/agileflow-planning/references/sprint-planning-guide.md +145 -0
  262. package/content/plugins/planning/skills/agileflow-planning/workflows/impact.md +63 -0
  263. package/content/plugins/planning/skills/agileflow-planning/workflows/rpi.md +104 -0
  264. package/content/plugins/psychology/plugin.yaml +14 -0
  265. package/content/plugins/psychology/skills/agileflow-retention/SKILL.md +252 -0
  266. package/content/plugins/psychology/skills/agileflow-retention/references/competitor-analysis.md +240 -0
  267. package/content/plugins/psychology/skills/agileflow-retention/references/psychology-models.md +349 -0
  268. package/content/plugins/psychology/skills/agileflow-retention/references/retention-patterns.md +279 -0
  269. package/content/plugins/psychology/skills/agileflow-retention/workflows/design-retention-feature.md +287 -0
  270. package/content/plugins/psychology/skills/agileflow-retention/workflows/retention-audit.md +259 -0
  271. package/content/plugins/refactoring/plugin.yaml +14 -0
  272. package/content/plugins/refactoring/skills/agileflow-refactor/SKILL.md +235 -0
  273. package/content/plugins/refactoring/skills/agileflow-refactor/references/refactoring-patterns.md +405 -0
  274. package/content/plugins/refactoring/skills/agileflow-refactor/references/safety-checks.md +177 -0
  275. package/content/plugins/refactoring/skills/agileflow-refactor/workflows/extract-module.md +226 -0
  276. package/content/plugins/refactoring/skills/agileflow-refactor/workflows/safe-refactor.md +169 -0
  277. package/content/plugins/research/agents/research.md +503 -0
  278. package/content/plugins/research/plugin.yaml +17 -0
  279. package/content/plugins/research/skills/agileflow-research/SKILL.md +110 -0
  280. package/content/plugins/research/skills/agileflow-research/references/knowledge-decay-guide.md +121 -0
  281. package/content/plugins/research/skills/agileflow-research/references/research-prompt-guide.md +141 -0
  282. package/content/plugins/research/skills/agileflow-research/references/synthesis-template.md +154 -0
  283. package/content/plugins/research/skills/agileflow-research/workflows/analyze.md +60 -0
  284. package/content/plugins/research/skills/agileflow-research/workflows/ask.md +64 -0
  285. package/content/plugins/research/skills/agileflow-research/workflows/import.md +66 -0
  286. package/content/plugins/research/skills/agileflow-research/workflows/synthesize.md +66 -0
  287. package/content/plugins/reviews/plugin.yaml +14 -0
  288. package/content/plugins/reviews/skills/agileflow-pr-reviewer/SKILL.md +241 -0
  289. package/content/plugins/reviews/skills/agileflow-pr-reviewer/references/review-checklist.md +200 -0
  290. package/content/plugins/reviews/skills/agileflow-pr-reviewer/references/security-patterns.md +328 -0
  291. package/content/plugins/reviews/skills/agileflow-pr-reviewer/workflows/review-pr.md +153 -0
  292. package/content/plugins/reviews/skills/agileflow-pr-reviewer/workflows/security-review.md +177 -0
  293. package/content/plugins/seo/agents/seo-analyzer-content.md +169 -0
  294. package/content/plugins/seo/agents/seo-analyzer-images.md +198 -0
  295. package/content/plugins/seo/agents/seo-analyzer-performance.md +217 -0
  296. package/content/plugins/seo/agents/seo-analyzer-schema.md +184 -0
  297. package/content/plugins/seo/agents/seo-analyzer-sitemap.md +177 -0
  298. package/content/plugins/seo/agents/seo-analyzer-technical.md +151 -0
  299. package/content/plugins/seo/agents/seo-consensus.md +304 -0
  300. package/content/plugins/seo/plugin.yaml +19 -4
  301. package/content/plugins/seo/skills/agileflow-seo/SKILL.md +188 -0
  302. package/content/plugins/seo/skills/agileflow-seo/references/cwv-thresholds.md +110 -0
  303. package/content/plugins/seo/skills/agileflow-seo/references/eeat-framework.md +144 -0
  304. package/content/plugins/seo/skills/agileflow-seo/references/keyword-research-guide.md +125 -0
  305. package/content/plugins/seo/skills/agileflow-seo/references/schema-types.md +139 -0
  306. package/content/plugins/seo/skills/agileflow-seo/references/technical-seo-checklist.md +139 -0
  307. package/content/plugins/seo/skills/agileflow-seo/workflows/audit.md +98 -0
  308. package/content/plugins/seo/skills/agileflow-seo/workflows/page.md +118 -0
  309. package/content/plugins/testing/plugin.yaml +16 -0
  310. package/content/plugins/testing/skills/agileflow-test-writer/SKILL.md +260 -0
  311. package/content/plugins/testing/skills/agileflow-test-writer/references/coverage-targets.md +239 -0
  312. package/content/plugins/testing/skills/agileflow-test-writer/references/test-patterns.md +420 -0
  313. package/content/plugins/testing/skills/agileflow-test-writer/workflows/add-coverage.md +154 -0
  314. package/content/plugins/testing/skills/agileflow-test-writer/workflows/write-tests-from-ac.md +225 -0
  315. package/package.json +2 -2
  316. package/src/cli/commands/doctor.js +818 -30
  317. package/src/cli/commands/hook.js +17 -14
  318. package/src/cli/commands/launch.js +1454 -0
  319. package/src/cli/commands/learn.js +149 -0
  320. package/src/cli/commands/plugins.js +113 -0
  321. package/src/cli/commands/setup.js +455 -110
  322. package/src/cli/commands/skills.js +324 -0
  323. package/src/cli/commands/status.js +8 -10
  324. package/src/cli/commands/update.js +76 -15
  325. package/src/cli/index.js +90 -26
  326. package/src/cli/wizard/babysit-mode-picker.js +192 -0
  327. package/src/cli/wizard/behaviors-picker.js +208 -54
  328. package/src/cli/wizard/ide-picker.js +40 -28
  329. package/src/cli/wizard/install-scope-picker.js +57 -0
  330. package/src/cli/wizard/launch-alias-picker.js +50 -0
  331. package/src/cli/wizard/launch-cli-picker.js +129 -0
  332. package/src/cli/wizard/launch-tmux-picker.js +133 -0
  333. package/src/cli/wizard/learnings-picker.js +40 -0
  334. package/src/cli/wizard/plugin-picker.js +47 -16
  335. package/src/lib/brand.js +116 -0
  336. package/src/lib/errors.js +120 -0
  337. package/src/lib/path-check.js +39 -0
  338. package/src/runtime/config/defaults.js +22 -17
  339. package/src/runtime/config/loader.js +77 -8
  340. package/src/runtime/config/schema.json +43 -16
  341. package/src/runtime/config/writer.js +3 -1
  342. package/src/runtime/ide/babysit-skill.js +202 -0
  343. package/src/runtime/ide/capabilities.js +84 -29
  344. package/src/runtime/ide/claude-code-content.js +177 -0
  345. package/src/runtime/ide/claude-code-settings.js +67 -29
  346. package/src/runtime/ide/claude-code-skills.js +47 -32
  347. package/src/runtime/ide/codex-config.js +295 -0
  348. package/src/runtime/installer/install.js +252 -24
  349. package/src/runtime/launch/alias-installer.js +191 -0
  350. package/src/runtime/launch/cli-resume.js +244 -0
  351. package/src/runtime/launch/closed-windows.js +338 -0
  352. package/src/runtime/launch/defaults.js +66 -0
  353. package/src/runtime/launch/detect-clis.js +69 -0
  354. package/src/runtime/launch/doctor.js +464 -0
  355. package/src/runtime/launch/exec-wrapper.js +114 -0
  356. package/src/runtime/launch/parallel-session.js +247 -0
  357. package/src/runtime/launch/prefs.js +211 -0
  358. package/src/runtime/launch/project-prefs.js +234 -0
  359. package/src/runtime/launch/resolve-cli.js +56 -0
  360. package/src/runtime/launch/restore.js +152 -0
  361. package/src/runtime/launch/schema.json +75 -0
  362. package/src/runtime/launch/session-lifecycle.js +313 -0
  363. package/src/runtime/launch/session-registry.js +401 -0
  364. package/src/runtime/launch/spawn.js +103 -0
  365. package/src/runtime/launch/tabs.js +350 -0
  366. package/src/runtime/launch/tmux.js +764 -0
  367. package/src/runtime/launch/worktree.js +260 -0
  368. package/src/runtime/plugins/registry.js +16 -11
  369. package/src/runtime/plugins/validator.js +57 -43
  370. package/src/runtime/skills/learnings.js +308 -0
  371. package/content/plugins/core/hooks/babysit-mentor-injector.js +0 -55
  372. package/src/cli/wizard/personalization.js +0 -64
@@ -0,0 +1,50 @@
1
+ /**
2
+ * `af` alias picker for `agileflow launch setup`.
3
+ *
4
+ * Asks whether to install the short `af` alias as a symlink at
5
+ * `~/.local/bin/af` → `agileflow`. The picker only captures the user's
6
+ * preference; the actual symlink is created by `installAfAlias()` after
7
+ * prefs are written, so failure modes (permission errors, PATH warnings)
8
+ * are surfaced cleanly through the existing outro path.
9
+ *
10
+ * Windows users see the option but the side-effect step reports
11
+ * "unsupported" and prints a PowerShell function snippet instead.
12
+ */
13
+ const prompts = require("@clack/prompts");
14
+ const { questionMessage } = require("../../lib/brand.js");
15
+
16
+ /**
17
+ * @param {{ aliases: { af: { enabled: boolean } } }} currentPrefs
18
+ * @returns {Promise<{ af: { enabled: boolean } }>}
19
+ */
20
+ async function pickAliases(currentPrefs) {
21
+ const initial =
22
+ currentPrefs &&
23
+ currentPrefs.aliases &&
24
+ currentPrefs.aliases.af &&
25
+ typeof currentPrefs.aliases.af.enabled === "boolean"
26
+ ? currentPrefs.aliases.af.enabled
27
+ : false;
28
+
29
+ const detail =
30
+ process.platform === "win32"
31
+ ? "On Windows the symlink can't be auto-created; we'll print a PowerShell snippet instead."
32
+ : "Creates ~/.local/bin/af → agileflow. No sudo needed.";
33
+
34
+ const choice = await prompts.confirm({
35
+ message: questionMessage(
36
+ "Install `af` as a short alias for `agileflow launch`?",
37
+ detail,
38
+ ),
39
+ initialValue: initial,
40
+ });
41
+
42
+ if (prompts.isCancel(choice)) {
43
+ prompts.cancel("Setup cancelled. No changes made.");
44
+ process.exit(1);
45
+ }
46
+
47
+ return { af: { enabled: /** @type {boolean} */ (choice) } };
48
+ }
49
+
50
+ module.exports = { pickAliases };
@@ -0,0 +1,129 @@
1
+ /**
2
+ * AI CLI picker for `agileflow launch setup`.
3
+ *
4
+ * Two-step flow:
5
+ * 1. multiselect — which detected CLIs to include in the fallback order
6
+ * 2. select — which of those is the preferred / default
7
+ *
8
+ * Only CLIs actually present on PATH are offered. If zero are detected
9
+ * the picker still surfaces the known set so the user can configure
10
+ * AgileFlow before they install the underlying CLI (with a warning).
11
+ */
12
+ const prompts = require("@clack/prompts");
13
+ const { questionMessage } = require("../../lib/brand.js");
14
+ const {
15
+ KNOWN_CLIS,
16
+ availableClis,
17
+ } = require("../../runtime/launch/detect-clis.js");
18
+
19
+ /**
20
+ * Pure helper extracted for unit testing: decide what to offer in the
21
+ * multiselect given a list of detected descriptors and the user's current
22
+ * fallbackOrder.
23
+ *
24
+ * @param {import('../../runtime/launch/detect-clis.js').CliDescriptor[]} detected
25
+ * @param {string[]} currentFallback
26
+ * @returns {{
27
+ * choices: import('../../runtime/launch/detect-clis.js').CliDescriptor[],
28
+ * initial: string[],
29
+ * noneDetected: boolean,
30
+ * }}
31
+ */
32
+ function buildCliChoices(detected, currentFallback) {
33
+ const noneDetected = detected.length === 0;
34
+ const choices = noneDetected ? KNOWN_CLIS : detected;
35
+ const choiceIds = new Set(choices.map((c) => c.id));
36
+ const initial = (currentFallback || []).filter((id) => choiceIds.has(id));
37
+ return { choices, initial, noneDetected };
38
+ }
39
+
40
+ /**
41
+ * Pure helper: pick the default for the "preferred CLI" select. Prefers
42
+ * the user's existing preference if it's still in the selected set,
43
+ * otherwise the first selected id.
44
+ *
45
+ * @param {string[]} selected
46
+ * @param {string} currentPreferred
47
+ * @returns {string}
48
+ */
49
+ function pickInitialPreferred(selected, currentPreferred) {
50
+ if (selected.includes(currentPreferred)) return currentPreferred;
51
+ return selected[0];
52
+ }
53
+
54
+ /**
55
+ * Run the picker.
56
+ *
57
+ * @param {{
58
+ * cli: { preferred: string, fallbackOrder: string[] },
59
+ * }} currentPrefs
60
+ * @param {(name: string) => boolean} [exists] - injectable for tests; defaults to PATH probe
61
+ * @returns {Promise<{ preferred: string, fallbackOrder: string[] }>}
62
+ */
63
+ async function pickCli(currentPrefs, exists) {
64
+ const detected = availableClis(exists);
65
+ const { choices, initial, noneDetected } = buildCliChoices(
66
+ detected,
67
+ currentPrefs.cli.fallbackOrder,
68
+ );
69
+
70
+ if (noneDetected) {
71
+ prompts.log.warn(
72
+ "No supported AI CLIs detected on PATH (claude, codex, cursor-agent, aider). " +
73
+ "You can still pick which CLIs `agileflow launch` should target — install them later.",
74
+ );
75
+ }
76
+
77
+ const selectedRaw = await prompts.multiselect({
78
+ message: questionMessage(
79
+ "Which AI CLIs should `agileflow launch` know about?",
80
+ "Order is preserved as fallback order if your preferred CLI is missing.",
81
+ ),
82
+ options: choices.map((c) => ({
83
+ value: c.id,
84
+ label: c.label,
85
+ hint: c.hint,
86
+ })),
87
+ initialValues: initial.length ? initial : choices.map((c) => c.id),
88
+ required: true,
89
+ });
90
+
91
+ if (prompts.isCancel(selectedRaw)) {
92
+ prompts.cancel("Setup cancelled. No changes made.");
93
+ process.exit(1);
94
+ }
95
+
96
+ const selected = /** @type {string[]} */ (selectedRaw);
97
+
98
+ const preferredRaw = await prompts.select({
99
+ message: questionMessage(
100
+ "Which CLI should `agileflow launch` use by default?",
101
+ ),
102
+ options: selected.map((id) => {
103
+ const desc = choices.find((c) => c.id === id);
104
+ return {
105
+ value: id,
106
+ label: desc ? desc.label : id,
107
+ hint: desc && desc.hint,
108
+ };
109
+ }),
110
+ initialValue: pickInitialPreferred(selected, currentPrefs.cli.preferred),
111
+ });
112
+
113
+ if (prompts.isCancel(preferredRaw)) {
114
+ prompts.cancel("Setup cancelled. No changes made.");
115
+ process.exit(1);
116
+ }
117
+
118
+ const preferred = /** @type {string} */ (preferredRaw);
119
+
120
+ // Fallback order = preferred first, then the rest in user's multiselect order.
121
+ const fallbackOrder = [
122
+ preferred,
123
+ ...selected.filter((id) => id !== preferred),
124
+ ];
125
+
126
+ return { preferred, fallbackOrder };
127
+ }
128
+
129
+ module.exports = { pickCli, buildCliChoices, pickInitialPreferred };
@@ -0,0 +1,133 @@
1
+ /**
2
+ * tmux preferences picker for `agileflow launch setup`.
3
+ *
4
+ * Asks:
5
+ * 1. tmux on/off (confirm)
6
+ * 2. if on: status bar position (top/bottom)
7
+ * 3. if on: keybind preset (default/minimal/none)
8
+ *
9
+ * Left/right status positions are NOT offered in slice 1 — tmux doesn't
10
+ * have a native left/right status; faking it requires pane layout
11
+ * hackery, which is a slice 2+ concern.
12
+ *
13
+ * Returned shape is exactly the `tmux` + `keybinds` blocks of LaunchPrefs.
14
+ */
15
+ const prompts = require("@clack/prompts");
16
+ const { questionMessage } = require("../../lib/brand.js");
17
+ const {
18
+ STATUS_POSITIONS,
19
+ KEYBIND_PRESETS,
20
+ } = require("../../runtime/launch/defaults.js");
21
+
22
+ /**
23
+ * Pure helper: build the status-position select options. Extracted for
24
+ * unit testing — the labels need to stay aligned with STATUS_POSITIONS.
25
+ *
26
+ * @param {string} current
27
+ * @returns {{ options: { value: string, label: string }[], initialValue: string }}
28
+ */
29
+ function buildStatusOptions(current) {
30
+ const options = STATUS_POSITIONS.map((id) => ({
31
+ value: id,
32
+ label: id === "top" ? "Top of terminal" : "Bottom of terminal",
33
+ }));
34
+ const initialValue = STATUS_POSITIONS.includes(current) ? current : "bottom";
35
+ return { options, initialValue };
36
+ }
37
+
38
+ /**
39
+ * Pure helper: keybind preset options.
40
+ *
41
+ * @param {string} current
42
+ * @returns {{ options: { value: string, label: string, hint?: string }[], initialValue: string }}
43
+ */
44
+ function buildKeybindOptions(current) {
45
+ const options = [
46
+ {
47
+ value: "default",
48
+ label: "Default",
49
+ hint: "Worktree (Alt+N), same-dir (Alt+S), freeze recovery (Alt+k/K/R), detach (Alt+q)",
50
+ },
51
+ {
52
+ value: "minimal",
53
+ label: "Minimal",
54
+ hint: "Only detach (Alt+q). Lets your existing tmux config shine.",
55
+ },
56
+ {
57
+ value: "none",
58
+ label: "None",
59
+ hint: "No keybinds installed. You wire your own.",
60
+ },
61
+ ];
62
+ const initialValue = KEYBIND_PRESETS.includes(current) ? current : "default";
63
+ return { options, initialValue };
64
+ }
65
+
66
+ /**
67
+ * @param {{ tmux: { enabled: boolean, statusPosition: string }, keybinds: { preset: string } }} currentPrefs
68
+ * @returns {Promise<{ tmux: { enabled: boolean, statusPosition: 'top' | 'bottom' }, keybinds: { preset: string } }>}
69
+ */
70
+ async function pickTmux(currentPrefs) {
71
+ const enabledRaw = await prompts.confirm({
72
+ message: questionMessage(
73
+ "Run sessions inside tmux?",
74
+ "tmux gives you persistent sessions, parallel panes, and freeze recovery. " +
75
+ "Disable if you're on Windows or prefer plain shell.",
76
+ ),
77
+ initialValue:
78
+ typeof currentPrefs.tmux.enabled === "boolean"
79
+ ? currentPrefs.tmux.enabled
80
+ : true,
81
+ });
82
+
83
+ if (prompts.isCancel(enabledRaw)) {
84
+ prompts.cancel("Setup cancelled. No changes made.");
85
+ process.exit(1);
86
+ }
87
+
88
+ const enabled = /** @type {boolean} */ (enabledRaw);
89
+
90
+ if (!enabled) {
91
+ return {
92
+ tmux: {
93
+ enabled: false,
94
+ statusPosition: /** @type {'bottom'} */ ("bottom"),
95
+ },
96
+ keybinds: { preset: "none" },
97
+ };
98
+ }
99
+
100
+ const statusOpts = buildStatusOptions(currentPrefs.tmux.statusPosition);
101
+ const statusRaw = await prompts.select({
102
+ message: questionMessage("Where should the tmux status bar live?"),
103
+ options: statusOpts.options,
104
+ initialValue: statusOpts.initialValue,
105
+ });
106
+
107
+ if (prompts.isCancel(statusRaw)) {
108
+ prompts.cancel("Setup cancelled. No changes made.");
109
+ process.exit(1);
110
+ }
111
+
112
+ const keybindOpts = buildKeybindOptions(currentPrefs.keybinds.preset);
113
+ const presetRaw = await prompts.select({
114
+ message: questionMessage("Which keybind preset?"),
115
+ options: keybindOpts.options,
116
+ initialValue: keybindOpts.initialValue,
117
+ });
118
+
119
+ if (prompts.isCancel(presetRaw)) {
120
+ prompts.cancel("Setup cancelled. No changes made.");
121
+ process.exit(1);
122
+ }
123
+
124
+ return {
125
+ tmux: {
126
+ enabled: true,
127
+ statusPosition: /** @type {'top' | 'bottom'} */ (statusRaw),
128
+ },
129
+ keybinds: { preset: /** @type {string} */ (presetRaw) },
130
+ };
131
+ }
132
+
133
+ module.exports = { pickTmux, buildStatusOptions, buildKeybindOptions };
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Learnings picker — single confirm prompt for the global on/off toggle.
3
+ *
4
+ * When enabled:
5
+ * - install-time scaffolds `_learnings/<file>.yaml` for every skill
6
+ * that opts in via `learns.enabled: true` in its frontmatter
7
+ * - the SessionStart context-loader injects a one-line hint telling
8
+ * Claude to call `agileflow learn append …` on user corrections
9
+ *
10
+ * When disabled, neither happens. The `agileflow learn` CLI still works
11
+ * for users who want to manage signals manually.
12
+ */
13
+ const prompts = require("@clack/prompts");
14
+ const { questionMessage } = require("../../lib/brand.js");
15
+
16
+ /**
17
+ * @param {{ enabled?: boolean }} [current]
18
+ * @returns {Promise<{ enabled: boolean }>}
19
+ */
20
+ async function pickLearnings(current) {
21
+ const initialValue =
22
+ current && typeof current.enabled === "boolean" ? current.enabled : true;
23
+
24
+ const choice = await prompts.confirm({
25
+ message: questionMessage(
26
+ "Enable skill learnings?",
27
+ "Skills can remember your corrections for next time.",
28
+ ),
29
+ initialValue,
30
+ });
31
+
32
+ if (prompts.isCancel(choice)) {
33
+ prompts.cancel("Setup cancelled. No changes made.");
34
+ process.exit(1);
35
+ }
36
+
37
+ return { enabled: Boolean(choice) };
38
+ }
39
+
40
+ module.exports = { pickLearnings };
@@ -12,8 +12,9 @@
12
12
  * Cancellation (Ctrl+C / Esc) exits with code 1 (not 0) so CI can tell
13
13
  * the difference between success and user abort.
14
14
  */
15
- const prompts = require('@clack/prompts');
16
- const { discoverPlugins } = require('../../runtime/plugins/registry.js');
15
+ const prompts = require("@clack/prompts");
16
+ const { discoverPlugins } = require("../../runtime/plugins/registry.js");
17
+ const { questionMessage } = require("../../lib/brand.js");
17
18
 
18
19
  /**
19
20
  * @param {Array<{id:string, cannotDisable?:boolean}>} discovered
@@ -21,7 +22,11 @@ const { discoverPlugins } = require('../../runtime/plugins/registry.js');
21
22
  * @param {Record<string, {enabled:boolean, settings?:any}>} [existingPluginsMap]
22
23
  * @returns {Record<string, { enabled: boolean, settings?: any }>}
23
24
  */
24
- function buildPluginsMap(discovered, selectedOptionalIds, existingPluginsMap = {}) {
25
+ function buildPluginsMap(
26
+ discovered,
27
+ selectedOptionalIds,
28
+ existingPluginsMap = {},
29
+ ) {
25
30
  /** @type {Record<string, { enabled: boolean, settings?: any }>} */
26
31
  const result = {};
27
32
  for (const p of discovered) {
@@ -36,7 +41,7 @@ function buildPluginsMap(discovered, selectedOptionalIds, existingPluginsMap = {
36
41
  const existing = (existingPluginsMap || {})[p.id];
37
42
  if (
38
43
  existing &&
39
- typeof existing === 'object' &&
44
+ typeof existing === "object" &&
40
45
  !Array.isArray(existing) &&
41
46
  existing.settings
42
47
  ) {
@@ -51,7 +56,7 @@ function buildPluginsMap(discovered, selectedOptionalIds, existingPluginsMap = {
51
56
  if (
52
57
  !(id in result) &&
53
58
  entry &&
54
- typeof entry === 'object' &&
59
+ typeof entry === "object" &&
55
60
  !Array.isArray(entry)
56
61
  ) {
57
62
  result[id] = entry;
@@ -60,6 +65,18 @@ function buildPluginsMap(discovered, selectedOptionalIds, existingPluginsMap = {
60
65
  return result;
61
66
  }
62
67
 
68
+ /**
69
+ * Keep plugin rows compact. AgileFlow exposes these as skill packs in
70
+ * the wizard, even when the plugin carries legacy command/agent source
71
+ * files internally for IDE compatibility.
72
+ *
73
+ * @param {import('../../runtime/plugins/registry.js').PluginManifest} p
74
+ * @returns {string}
75
+ */
76
+ function pluginHint(p) {
77
+ return p.description || "Skill pack";
78
+ }
79
+
63
80
  /**
64
81
  * @param {import('../../runtime/config/defaults.js').AgileflowConfig} currentConfig
65
82
  * @returns {Promise<Record<string, { enabled: boolean }>>}
@@ -71,36 +88,50 @@ async function pickPlugins(currentConfig) {
71
88
 
72
89
  if (required.length) {
73
90
  prompts.log.info(
74
- `Always on: ${required.map((p) => `${p.name} (${p.id})`).join(', ')}`,
91
+ `Always on: ${required.map((p) => `${p.name} (${p.id})`).join(", ")}`,
75
92
  );
76
93
  }
77
94
 
78
95
  const initialValues = optional
79
96
  .filter((p) => {
80
97
  const existing = (currentConfig.plugins || {})[p.id];
81
- if (existing && typeof existing.enabled === 'boolean') return existing.enabled;
98
+ if (existing && typeof existing.enabled === "boolean")
99
+ return existing.enabled;
82
100
  return Boolean(p.enabledByDefault);
83
101
  })
84
102
  .map((p) => p.id);
85
103
 
104
+ const SELECT_ALL = "__select_all__";
105
+
86
106
  const picked = await prompts.multiselect({
87
- message: 'Select optional plugins to enable:',
88
- options: optional.map((p) => ({
89
- value: p.id,
90
- label: p.name,
91
- hint: p.description,
92
- })),
107
+ message: questionMessage("Choose optional skill packs:"),
108
+ options: [
109
+ {
110
+ value: SELECT_ALL,
111
+ label: "Enable all",
112
+ hint: "Turn on every skill pack at once.",
113
+ },
114
+ ...optional.map((p) => ({
115
+ value: p.id,
116
+ label: p.name,
117
+ hint: pluginHint(p),
118
+ })),
119
+ ],
93
120
  initialValues,
94
121
  required: false,
95
122
  });
96
123
 
97
124
  if (prompts.isCancel(picked)) {
98
- prompts.cancel('Setup cancelled. No changes made.');
125
+ prompts.cancel("Setup cancelled. No changes made.");
99
126
  process.exit(1);
100
127
  }
101
128
 
102
- const selectedOptionalIds = new Set(/** @type {string[]} */ (picked));
129
+ const pickedSet = new Set(/** @type {string[]} */ (picked));
130
+ const selectedOptionalIds = pickedSet.has(SELECT_ALL)
131
+ ? new Set(optional.map((p) => p.id))
132
+ : new Set([...pickedSet].filter((id) => id !== SELECT_ALL));
133
+
103
134
  return buildPluginsMap(all, selectedOptionalIds, currentConfig.plugins || {});
104
135
  }
105
136
 
106
- module.exports = { pickPlugins, buildPluginsMap };
137
+ module.exports = { pickPlugins, buildPluginsMap, pluginHint };
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Brand styling helpers for the CLI wizard.
3
+ *
4
+ * BRAND_COLOR (#e8683a, burnt orange) is AgileFlow's identity color —
5
+ * used for the logo banner and option labels in setup prompts so users
6
+ * can visually parse "label vs. description" without squinting.
7
+ */
8
+ const chalk = require("chalk");
9
+
10
+ const BRAND_COLOR = "#e8683a";
11
+ const brand = chalk.hex(BRAND_COLOR);
12
+
13
+ // Recolor Clack's frame symbols to the brand color. Clack reads
14
+ // `picocolors.cyan` (left-side bar │, corners └, active diamond ◆) and
15
+ // `picocolors.green` (submit diamond ◇, success bullet) at render time,
16
+ // so replacing those two functions on the picocolors module is enough
17
+ // to retheme the entire wizard without forking @clack/prompts.
18
+ //
19
+ // We leave red (error), yellow (warn), gray (dim), and blue (info)
20
+ // alone — those convey state and shouldn't all collapse into brand
21
+ // orange. Text content stays default white; only the structural symbols
22
+ // change.
23
+ let themed = false;
24
+ function applyClackTheme() {
25
+ if (themed) return;
26
+ themed = true;
27
+ try {
28
+ const pc = require("picocolors");
29
+ const wrap = (s) => `\x1b[38;2;232;104;58m${s}\x1b[39m`;
30
+ pc.cyan = wrap;
31
+ pc.green = wrap;
32
+
33
+ // Make `dim` ALSO strip bold escapes from its input, so a label that
34
+ // contains `\x1b[1m...\x1b[22m` (chalk.bold) renders bold only when
35
+ // it's the active row (Clack doesn't wrap active labels), and renders
36
+ // plain when Clack wraps the inactive label in `dim()`. This is the
37
+ // only way to get "bold on active, normal on inactive" without
38
+ // forking @clack/prompts.
39
+ const BOLD_RE = /\x1b\[(?:1|22)m/g;
40
+ const origDim = pc.dim;
41
+ pc.dim = (s) => origDim(String(s).replace(BOLD_RE, ""));
42
+ } catch {
43
+ // picocolors not installed (shouldn't happen — clack depends on it).
44
+ // Silently skip; the wizard still works, just with default colors.
45
+ }
46
+ }
47
+ applyClackTheme();
48
+
49
+ // Canonical AgileFlow wordmark — kept in sync with apps/website/lib/logo.ts.
50
+ const LOGO = [
51
+ " █████╗ ██████╗ ██╗██╗ ███████╗███████╗██╗ ██████╗ ██╗ ██╗",
52
+ "██╔══██╗██╔════╝ ██║██║ ██╔════╝██╔════╝██║ ██╔═══██╗██║ ██║",
53
+ "███████║██║ ███╗██║██║ █████╗ █████╗ ██║ ██║ ██║██║ █╗ ██║",
54
+ "██╔══██║██║ ██║██║██║ ██╔══╝ ██╔══╝ ██║ ██║ ██║██║███╗██║",
55
+ "██║ ██║╚██████╔╝██║███████╗███████╗██║ ███████╗╚██████╔╝╚███╔███╔╝",
56
+ "╚═╝ ╚═╝ ╚═════╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚══════╝ ╚═════╝ ╚══╝╚══╝",
57
+ ];
58
+
59
+ /**
60
+ * Render the brand logo as a single string, brand-colored. Caller is
61
+ * responsible for printing it (typically before `prompts.intro`).
62
+ *
63
+ * @param {string} [version]
64
+ * @returns {string}
65
+ */
66
+ function logoBanner(version) {
67
+ const lines = LOGO.map((l) => brand(l));
68
+ if (version) {
69
+ lines.push("");
70
+ lines.push(brand.bold(`v${version}`));
71
+ }
72
+ return lines.join("\n");
73
+ }
74
+
75
+ /**
76
+ * Build a Clack option label that visually separates name and description:
77
+ * bold brand-color label
78
+ * dim description on a second line
79
+ *
80
+ * Clack renders `label` verbatim, so embedded newlines work and produce
81
+ * a clean two-line option that's much easier to read than label+hint
82
+ * sharing one line in the same color.
83
+ *
84
+ * @param {string} title
85
+ * @param {string} [description]
86
+ * @returns {string}
87
+ */
88
+ function optionLabel(title, description) {
89
+ // Bold the title; the picocolors.dim() patch above strips bold from
90
+ // dimmed rows, so this only renders bold on the active row.
91
+ const head = chalk.bold(title);
92
+ if (!description) return head;
93
+ return `${head}\n ${chalk.ansi256(245)(description)}`;
94
+ }
95
+
96
+ /**
97
+ * Build a Clack prompt message with a bold question and optional muted
98
+ * supporting sentence on the next line.
99
+ *
100
+ * @param {string} title
101
+ * @param {string} [description]
102
+ * @returns {string}
103
+ */
104
+ function questionMessage(title, description) {
105
+ const head = chalk.bold(title);
106
+ if (!description) return head;
107
+ return `${head}\n${chalk.ansi256(245)(description)}`;
108
+ }
109
+
110
+ module.exports = {
111
+ BRAND_COLOR,
112
+ brand,
113
+ logoBanner,
114
+ optionLabel,
115
+ questionMessage,
116
+ };