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,324 @@
1
+ /**
2
+ * `agileflow skills <action>` — inspect and manage installed skill packs.
3
+ *
4
+ * Actions:
5
+ * list Print a table of every skill installed for the configured IDE,
6
+ * including name, version, learns status, and accumulated learning count.
7
+ * enable <plugin> Enable a plugin (skill pack) and re-sync the install.
8
+ * disable <plugin> Disable a plugin (skill pack) and remove its skills.
9
+ *
10
+ * Usage:
11
+ * agileflow skills list
12
+ * agileflow skills list --json
13
+ * agileflow skills enable ads
14
+ * agileflow skills disable council
15
+ */
16
+ const fs = require("fs");
17
+ const path = require("path");
18
+ const os = require("os");
19
+ const pkg = require("../../../package.json");
20
+ const yaml = require("js-yaml");
21
+ const { loadConfig } = require("../../runtime/config/loader.js");
22
+ const { writeConfig } = require("../../runtime/config/writer.js");
23
+ const {
24
+ IDE_CAPABILITIES,
25
+ capabilitiesFor,
26
+ hookEventsForIdes,
27
+ } = require("../../runtime/ide/capabilities.js");
28
+ const { readLearnings } = require("../../runtime/skills/learnings.js");
29
+ const { discoverPlugins } = require("../../runtime/plugins/registry.js");
30
+ const { installPlugins } = require("../../runtime/installer/install.js");
31
+ const {
32
+ normalizeBehaviorsForEvents,
33
+ } = require("../wizard/behaviors-picker.js");
34
+ const {
35
+ InvalidArgumentError,
36
+ MissingFileError,
37
+ OperationFailedError,
38
+ fail,
39
+ } = require("../../lib/errors.js");
40
+
41
+ /**
42
+ * Read and parse SKILL.md frontmatter from an installed skill directory.
43
+ * Returns null when SKILL.md is absent or unparseable.
44
+ *
45
+ * @param {string} skillDir
46
+ * @returns {{ name: string, version: string, description: string, learns: object } | null}
47
+ */
48
+ function readSkillMeta(skillDir) {
49
+ const mdPath = path.join(skillDir, "SKILL.md");
50
+ let text;
51
+ try {
52
+ text = fs.readFileSync(mdPath, "utf8");
53
+ } catch {
54
+ return null;
55
+ }
56
+ const match = text.match(/^---\n([\s\S]*?)\n---/);
57
+ if (!match) return null;
58
+ try {
59
+ const fm = yaml.load(match[1]) || {};
60
+ return {
61
+ name: fm.name || path.basename(skillDir),
62
+ version: fm.version || "?",
63
+ description: (typeof fm.description === "string" ? fm.description : "")
64
+ .replace(/\n/g, " ")
65
+ .trim()
66
+ .slice(0, 80),
67
+ learns: fm.learns || { enabled: false },
68
+ };
69
+ } catch {
70
+ return null;
71
+ }
72
+ }
73
+
74
+ /**
75
+ * @param {{ json?: boolean }} options
76
+ */
77
+ async function skillsList(options = {}) {
78
+ const cwd = process.cwd();
79
+ const { config } = await loadConfig(cwd);
80
+
81
+ const primaryIde =
82
+ Array.isArray(config?.ide?.targets) && config.ide.targets.length > 0
83
+ ? config.ide.targets[0]
84
+ : "claude-code";
85
+
86
+ const caps = IDE_CAPABILITIES[primaryIde];
87
+ if (!caps || !caps.skills) {
88
+ if (options.json) {
89
+ // eslint-disable-next-line no-console
90
+ console.log(
91
+ JSON.stringify({
92
+ ide: primaryIde,
93
+ skills: [],
94
+ note: "IDE does not support skills",
95
+ }),
96
+ );
97
+ } else {
98
+ // eslint-disable-next-line no-console
99
+ console.log(`(${primaryIde} does not support skills)`);
100
+ }
101
+ return;
102
+ }
103
+
104
+ const skillsDir = path.join(cwd, caps.skillsDir);
105
+ if (!fs.existsSync(skillsDir)) {
106
+ if (options.json) {
107
+ // eslint-disable-next-line no-console
108
+ console.log(
109
+ JSON.stringify({
110
+ ide: primaryIde,
111
+ skillsDir: caps.skillsDir,
112
+ skills: [],
113
+ note: "Skills directory not found — run `agileflow setup`",
114
+ }),
115
+ );
116
+ } else {
117
+ // eslint-disable-next-line no-console
118
+ console.log(
119
+ `Skills not installed — run \`agileflow setup\` to install to ${caps.skillsDir}/`,
120
+ );
121
+ }
122
+ return;
123
+ }
124
+
125
+ const entries = fs
126
+ .readdirSync(skillsDir, { withFileTypes: true })
127
+ .filter((d) => d.isDirectory())
128
+ .map((d) => d.name)
129
+ .filter((name) => fs.existsSync(path.join(skillsDir, name, "SKILL.md")));
130
+
131
+ if (entries.length === 0) {
132
+ // eslint-disable-next-line no-console
133
+ console.log(`(no skills installed in ${caps.skillsDir}/)`);
134
+ return;
135
+ }
136
+
137
+ const rows = [];
138
+ for (const skillId of entries.sort()) {
139
+ const meta = readSkillMeta(path.join(skillsDir, skillId));
140
+ if (!meta) continue;
141
+
142
+ let learningCount = 0;
143
+ if (meta.learns && meta.learns.enabled) {
144
+ try {
145
+ const { entries: le } = await readLearnings(skillId, cwd);
146
+ learningCount = le.length;
147
+ } catch {
148
+ // learnings file absent or unreadable — treat as 0
149
+ }
150
+ }
151
+
152
+ rows.push({
153
+ id: skillId,
154
+ version: meta.version,
155
+ learns:
156
+ meta.learns && meta.learns.enabled ? `yes (${learningCount})` : "no",
157
+ description: meta.description,
158
+ });
159
+ }
160
+
161
+ if (options.json) {
162
+ // eslint-disable-next-line no-console
163
+ console.log(
164
+ JSON.stringify(
165
+ { ide: primaryIde, skillsDir: caps.skillsDir, skills: rows },
166
+ null,
167
+ 2,
168
+ ),
169
+ );
170
+ return;
171
+ }
172
+
173
+ // Plain-text table
174
+ const idW = Math.max(4, ...rows.map((r) => r.id.length));
175
+ const verW = Math.max(3, ...rows.map((r) => r.version.length));
176
+ const learnW = Math.max(7, ...rows.map((r) => r.learns.length));
177
+ const header = `${"Skill".padEnd(idW)} ${"Ver".padEnd(verW)} ${"Learns".padEnd(learnW)} Description`;
178
+ const sep = `${"-".repeat(idW)} ${"-".repeat(verW)} ${"-".repeat(learnW)} ${"-".repeat(40)}`;
179
+ // eslint-disable-next-line no-console
180
+ console.log(`\nInstalled skills (${primaryIde} — ${caps.skillsDir}/):\n`);
181
+ // eslint-disable-next-line no-console
182
+ console.log(header);
183
+ // eslint-disable-next-line no-console
184
+ console.log(sep);
185
+ for (const r of rows) {
186
+ // eslint-disable-next-line no-console
187
+ console.log(
188
+ `${r.id.padEnd(idW)} ${r.version.padEnd(verW)} ${r.learns.padEnd(learnW)} ${r.description}`,
189
+ );
190
+ }
191
+ // eslint-disable-next-line no-console
192
+ console.log(`\n${rows.length} skill(s) installed.`);
193
+ }
194
+
195
+ // ---------------------------------------------------------------------------
196
+ // enable / disable helpers
197
+ // ---------------------------------------------------------------------------
198
+
199
+ /**
200
+ * Toggle a plugin on or off, write config, then re-run the installer.
201
+ *
202
+ * @param {'enable'|'disable'} action
203
+ * @param {string} pluginId
204
+ * @param {object} options
205
+ */
206
+ async function togglePlugin(action, pluginId, options) {
207
+ const enable = action === "enable";
208
+ const cwd = process.cwd();
209
+
210
+ // Validate plugin exists in the registry
211
+ const all = discoverPlugins();
212
+ const plugin = all.find((p) => p.id === pluginId);
213
+ if (!plugin) {
214
+ const ids = all.map((p) => p.id).join(", ");
215
+ fail(
216
+ new InvalidArgumentError(`unknown plugin "${pluginId}"`, {
217
+ suggestion: `available: ${ids}`,
218
+ }),
219
+ { command: `skills ${action}` },
220
+ );
221
+ }
222
+ if (plugin.cannotDisable && !enable) {
223
+ fail(
224
+ new InvalidArgumentError(
225
+ `"${pluginId}" cannot be disabled (it is always active)`,
226
+ ),
227
+ { command: "skills disable" },
228
+ );
229
+ }
230
+
231
+ // Load current config
232
+ const { config, source } = await loadConfig(cwd);
233
+ if (source === "defaults") {
234
+ fail(
235
+ new MissingFileError("no agileflow.config.json found", {
236
+ suggestion: "run `npx agileflow setup` first",
237
+ }),
238
+ { command: "skills" },
239
+ );
240
+ }
241
+
242
+ // Patch the plugin entry
243
+ if (!config.plugins) config.plugins = {};
244
+ if (!config.plugins[pluginId]) config.plugins[pluginId] = {};
245
+ config.plugins[pluginId].enabled = enable;
246
+
247
+ // Write config atomically
248
+ await writeConfig(cwd, config);
249
+ // eslint-disable-next-line no-console
250
+ console.log(
251
+ `✓ ${enable ? "Enabled" : "Disabled"} plugin "${pluginId}" in agileflow.config.json`,
252
+ );
253
+
254
+ // Re-run installer to materialize / remove the skill files
255
+ const agileflowDir = path.join(cwd, ".agileflow");
256
+ const userSelected = Object.entries(config.plugins || {})
257
+ .filter(([id, v]) => v && v.enabled && id !== "core")
258
+ .map(([id]) => id);
259
+
260
+ const supportedHookEvents = hookEventsForIdes(config.ide.targets || []);
261
+ const normalizedBehaviors = normalizeBehaviorsForEvents(
262
+ config.behaviors,
263
+ supportedHookEvents,
264
+ );
265
+
266
+ let result;
267
+ try {
268
+ result = await installPlugins({
269
+ discovered: all,
270
+ userSelected,
271
+ agileflowDir,
272
+ cliVersion: pkg.version,
273
+ ides: config.ide.targets || ["claude-code"],
274
+ behaviors: normalizedBehaviors,
275
+ learningsEnabled: Boolean(config.learnings && config.learnings.enabled),
276
+ force: Boolean(options.force),
277
+ config,
278
+ });
279
+ } catch (err) {
280
+ fail(
281
+ new OperationFailedError(`install sync failed: ${err.message}`, {
282
+ suggestion:
283
+ "config was saved but install failed — re-run `agileflow update` or fix the underlying error",
284
+ cause: err,
285
+ }),
286
+ { command: `skills ${action}` },
287
+ );
288
+ }
289
+
290
+ // eslint-disable-next-line no-console
291
+ console.log(
292
+ ` created=${result.ops.created} updated=${result.ops.updated} unchanged=${result.ops.unchanged} removed=${result.ops.removed}`,
293
+ );
294
+ }
295
+
296
+ /**
297
+ * @param {string} action - 'list' | 'enable' | 'disable'
298
+ * @param {string} [pluginOrSkillId] - required for enable/disable
299
+ * @param {{ json?: boolean, force?: boolean }} options
300
+ */
301
+ async function skills(action, pluginOrSkillId, options = {}) {
302
+ if (action === "list") {
303
+ return skillsList(options);
304
+ }
305
+ if (action === "enable" || action === "disable") {
306
+ if (!pluginOrSkillId) {
307
+ fail(
308
+ new InvalidArgumentError("plugin name required", {
309
+ suggestion: `agileflow skills ${action} <plugin-id> (e.g. \`agileflow skills ${action} ads\`)`,
310
+ }),
311
+ { command: `skills ${action}` },
312
+ );
313
+ }
314
+ return togglePlugin(action, pluginOrSkillId, options);
315
+ }
316
+ fail(
317
+ new InvalidArgumentError(`unknown action "${action}"`, {
318
+ suggestion: "use `list`, `enable`, or `disable`",
319
+ }),
320
+ { command: "skills" },
321
+ );
322
+ }
323
+
324
+ module.exports = skills;
@@ -4,9 +4,9 @@
4
4
  * Phase 1 stub: prints version + config summary if present. Hook health,
5
5
  * plugin state beyond `enabled` flag, and integrity counts land in Phase 5.
6
6
  */
7
- const path = require('path');
8
- const pkg = require('../../../package.json');
9
- const { loadConfig } = require('../../runtime/config/loader.js');
7
+ const path = require("path");
8
+ const pkg = require("../../../package.json");
9
+ const { loadConfig } = require("../../runtime/config/loader.js");
10
10
 
11
11
  /** @param {{ json?: boolean }} options */
12
12
  async function status(options = {}) {
@@ -21,8 +21,8 @@ async function status(options = {}) {
21
21
  plugins: Object.entries(result.config.plugins || {})
22
22
  .filter(([, v]) => v && v.enabled)
23
23
  .map(([id]) => id),
24
- personalization: result.config.personalization,
25
- phase: 'Phase 2a — wizard ready; installer sync engine + hooks + content pending (Phase 2b+)',
24
+ phase:
25
+ "Phase 2a — wizard ready; installer sync engine + hooks + content pending (Phase 2b+)",
26
26
  };
27
27
 
28
28
  if (options.json) {
@@ -34,14 +34,12 @@ async function status(options = {}) {
34
34
  const lines = [
35
35
  `agileflow v${summary.version}`,
36
36
  `cwd: ${summary.cwd}`,
37
- `config: ${summary.configPath ? path.relative(cwd, summary.configPath) : '(defaults — no agileflow.config.json found)'}`,
38
- `plugins: ${summary.plugins.length ? summary.plugins.join(', ') : '(none enabled — core is default)'}`,
39
- `tone: ${summary.personalization.tone}`,
40
- `ask: ${summary.personalization.ask_level}`,
37
+ `config: ${summary.configPath ? path.relative(cwd, summary.configPath) : "(defaults — no agileflow.config.json found)"}`,
38
+ `plugins: ${summary.plugins.length ? summary.plugins.join(", ") : "(none enabled — core is default)"}`,
41
39
  `phase: ${summary.phase}`,
42
40
  ];
43
41
  // eslint-disable-next-line no-console
44
- console.log(lines.join('\n'));
42
+ console.log(lines.join("\n"));
45
43
  }
46
44
 
47
45
  module.exports = status;
@@ -14,32 +14,57 @@
14
14
  * failure.
15
15
  */
16
16
  const path = require("path");
17
+ const os = require("os");
17
18
  const pkg = require("../../../package.json");
18
19
  const { loadConfig } = require("../../runtime/config/loader.js");
19
20
  const { discoverPlugins } = require("../../runtime/plugins/registry.js");
20
21
  const { installPlugins } = require("../../runtime/installer/install.js");
22
+ const {
23
+ capabilitiesFor,
24
+ hookEventsForIdes,
25
+ } = require("../../runtime/ide/capabilities.js");
26
+ const {
27
+ normalizeBehaviorsForEvents,
28
+ } = require("../wizard/behaviors-picker.js");
29
+ const {
30
+ MissingFileError,
31
+ OperationFailedError,
32
+ fail,
33
+ } = require("../../lib/errors.js");
21
34
 
22
35
  /**
23
36
  * @param {{ force?: boolean }} options
24
37
  */
25
38
  async function update(options = {}) {
26
39
  const cwd = process.cwd();
40
+ const scope = options.scope === "global" ? "global" : "project";
41
+ const agileflowDir =
42
+ scope === "global"
43
+ ? path.join(os.homedir(), ".agileflow")
44
+ : path.join(cwd, ".agileflow");
45
+ const configRoot = scope === "global" ? agileflowDir : cwd;
27
46
 
28
47
  let existing;
29
48
  try {
30
- existing = await loadConfig(cwd);
49
+ existing = await loadConfig(configRoot);
31
50
  } catch (err) {
32
- // eslint-disable-next-line no-console
33
- console.error(`agileflow update: ${err.message}`);
34
- process.exit(1);
51
+ fail(
52
+ new OperationFailedError(err.message, {
53
+ suggestion:
54
+ "fix or delete agileflow.config.json and re-run `agileflow setup`",
55
+ cause: err,
56
+ }),
57
+ { command: "update" },
58
+ );
35
59
  }
36
60
 
37
61
  if (existing.source === "defaults") {
38
- // eslint-disable-next-line no-console
39
- console.error(
40
- "agileflow update: no agileflow.config.json found. Run `agileflow setup` first.",
62
+ fail(
63
+ new MissingFileError("no agileflow.config.json found", {
64
+ suggestion: "run `npx agileflow setup` first",
65
+ }),
66
+ { command: "update" },
41
67
  );
42
- process.exit(1);
43
68
  }
44
69
 
45
70
  const enabled = Object.entries(existing.config.plugins || {})
@@ -51,23 +76,59 @@ async function update(options = {}) {
51
76
 
52
77
  let result;
53
78
  try {
79
+ const supportedHookEvents = hookEventsForIdes(existing.config.ide.targets);
80
+ const normalizedBehaviors = normalizeBehaviorsForEvents(
81
+ existing.config.behaviors,
82
+ supportedHookEvents,
83
+ );
54
84
  result = await installPlugins({
55
85
  discovered: discoverPlugins(),
56
86
  userSelected,
57
- agileflowDir: path.join(cwd, ".agileflow"),
87
+ agileflowDir,
58
88
  cliVersion: pkg.version,
59
- ide: existing.config.ide.primary,
60
- behaviors: existing.config.behaviors,
89
+ ides: existing.config.ide.targets,
90
+ behaviors: normalizedBehaviors,
91
+ learningsEnabled: Boolean(
92
+ existing.config.learnings && existing.config.learnings.enabled,
93
+ ),
61
94
  force: Boolean(options.force),
95
+ config: existing.config,
62
96
  });
63
97
  } catch (err) {
64
- // eslint-disable-next-line no-console
65
- console.error(`agileflow update: install failed: ${err.message}`);
66
- process.exit(1);
98
+ fail(
99
+ new OperationFailedError(`install failed: ${err.message}`, {
100
+ suggestion:
101
+ "check the error above; re-run with DEBUG=1 for a full stack trace",
102
+ cause: err,
103
+ }),
104
+ { command: "update" },
105
+ );
67
106
  }
68
107
 
69
108
  // eslint-disable-next-line no-console
70
- console.log(`✓ Updated ${enabled.length} plugin(s): ${enabled.join(", ")}`);
109
+ console.log(
110
+ `✓ Updated ${enabled.length} skill pack(s): ${enabled.join(", ")}`,
111
+ );
112
+ // eslint-disable-next-line no-console
113
+ console.log(` scope: ${scope}`);
114
+
115
+ const targets = existing.config.ide.targets || [];
116
+ const anyHooks = targets.some((id) => capabilitiesFor(id).hooks);
117
+ if (anyHooks) {
118
+ const activeBehaviors = Object.entries(
119
+ normalizeBehaviorsForEvents(
120
+ existing.config.behaviors,
121
+ hookEventsForIdes(targets),
122
+ ),
123
+ )
124
+ .filter(([, v]) => v)
125
+ .map(([k]) => k);
126
+ // eslint-disable-next-line no-console
127
+ console.log(
128
+ ` behaviors enabled: ${activeBehaviors.length ? activeBehaviors.join(", ") : "(none — no hooks will run)"}`,
129
+ );
130
+ }
131
+
71
132
  // eslint-disable-next-line no-console
72
133
  console.log(
73
134
  ` created=${result.ops.created} updated=${result.ops.updated} unchanged=${result.ops.unchanged} preserved=${result.ops.preserved} removed=${result.ops.removed}`,
package/src/cli/index.js CHANGED
@@ -4,14 +4,19 @@
4
4
  * Phase 1 ships `status`, `setup` (stub), and `doctor` (stub). Phase 2 adds
5
5
  * `enable`, `disable`, and a real `setup`. Phase 5 adds `uninstall`.
6
6
  */
7
- const { Command } = require('commander');
8
- const pkg = require('../../package.json');
7
+ const { Command } = require("commander");
8
+ const pkg = require("../../package.json");
9
+ const { SUPPORTED_IDES } = require("../runtime/ide/capabilities.js");
9
10
 
10
- const status = require('./commands/status.js');
11
- const setup = require('./commands/setup.js');
12
- const update = require('./commands/update.js');
13
- const doctor = require('./commands/doctor.js');
14
- const hook = require('./commands/hook.js');
11
+ const status = require("./commands/status.js");
12
+ const setup = require("./commands/setup.js");
13
+ const update = require("./commands/update.js");
14
+ const doctor = require("./commands/doctor.js");
15
+ const hook = require("./commands/hook.js");
16
+ const learn = require("./commands/learn.js");
17
+ const skills = require("./commands/skills.js");
18
+ const plugins = require("./commands/plugins.js");
19
+ const launch = require("./commands/launch.js");
15
20
 
16
21
  /**
17
22
  * Build the commander program. Exported so tests can construct it without
@@ -22,39 +27,98 @@ function buildProgram() {
22
27
  const program = new Command();
23
28
 
24
29
  program
25
- .name('agileflow')
26
- .description('AgileFlow v4 — skills-first agile toolkit for Claude Code')
27
- .version(pkg.version, '-v, --version', 'print version');
30
+ .name("agileflow")
31
+ .description("AgileFlow v4 — skills-first agile toolkit for Claude Code")
32
+ .version(pkg.version, "-v, --version", "print version");
28
33
 
29
34
  program
30
- .command('status')
31
- .description('print install state, enabled plugins, and hook health')
32
- .option('--json', 'output machine-readable JSON')
35
+ .command("status")
36
+ .description("print install state, enabled plugins, and hook health")
37
+ .option("--json", "output machine-readable JSON")
33
38
  .action(status);
34
39
 
35
40
  program
36
- .command('setup')
37
- .description('run interactive install wizard')
38
- .option('--yes', 'skip prompts, install with defaults')
39
- .option('--plugins <ids>', 'comma-separated plugin list to enable')
40
- .option('--ide <id>', 'target IDE / CLI: claude-code | cursor | windsurf | codex', 'claude-code')
41
+ .command("setup")
42
+ .description("run interactive install wizard")
43
+ .option("--yes", "skip prompts, install with defaults")
44
+ .option("--plugins <ids>", "comma-separated plugin list to enable")
45
+ .option(
46
+ "--ide <id>",
47
+ `target IDE / CLI(s): ${SUPPORTED_IDES.join(" | ")} | all`,
48
+ "claude-code",
49
+ )
50
+ .option("--scope <scope>", "install scope: project | global", "project")
41
51
  .action(setup);
42
52
 
43
53
  program
44
- .command('update')
45
- .description('re-install plugins from the current agileflow.config.json (no prompts)')
46
- .option('--force', 'overwrite local modifications instead of preserving them')
54
+ .command("update")
55
+ .description(
56
+ "re-install plugins from the current agileflow.config.json (no prompts)",
57
+ )
58
+ .option(
59
+ "--force",
60
+ "overwrite local modifications instead of preserving them",
61
+ )
62
+ .option("--scope <scope>", "install scope: project | global", "project")
47
63
  .action(update);
48
64
 
49
65
  program
50
- .command('doctor')
51
- .description('validate config, plugins, skills, and hook manifest (Phase 5)')
66
+ .command("doctor")
67
+ .description(
68
+ "validate config, plugins, skills, and hook manifest (Phase 5)",
69
+ )
70
+ .option(
71
+ "--fix",
72
+ "preview removal of detected stale artifacts (dry-run unless --yes)",
73
+ )
74
+ .option("--yes", "with --fix, actually apply removals without confirmation")
52
75
  .action(doctor);
53
76
 
54
77
  program
55
- .command('hook <event>')
56
- .description('internal: dispatch a Claude Code hook event (used by settings.json)')
57
- .option('--matcher <name>', 'tool name for tool-related events (Bash / Edit / Write / etc.)')
78
+ .command("learn <action> <skillId> [observation]")
79
+ .description("append or list skill learnings (action: append | list)")
80
+ .option("--confidence <level>", "high | medium | low", "medium")
81
+ .option(
82
+ "--source <type>",
83
+ "correction | confirmation | observation",
84
+ "correction",
85
+ )
86
+ .action(learn);
87
+
88
+ program
89
+ .command("skills <action> [pluginId]")
90
+ .description(
91
+ "manage skill packs (actions: list, enable <plugin>, disable <plugin>)",
92
+ )
93
+ .option("--json", "output as JSON")
94
+ .option(
95
+ "--force",
96
+ "overwrite local modifications when syncing after enable/disable",
97
+ )
98
+ .action(skills);
99
+
100
+ program
101
+ .command("plugins <action>")
102
+ .description("inspect the plugin registry (action: list)")
103
+ .option("--json", "output as JSON")
104
+ .action(plugins);
105
+
106
+ program
107
+ .command("launch [sub] [name]")
108
+ .description(
109
+ "multi-CLI tmux wrapper: sub=setup to (re)configure, sub=new [name] to spawn a parallel session (same-dir or worktree-backed)",
110
+ )
111
+ .action(launch);
112
+
113
+ program
114
+ .command("hook <event>")
115
+ .description(
116
+ "internal: dispatch a Claude Code hook event (used by settings.json)",
117
+ )
118
+ .option(
119
+ "--matcher <name>",
120
+ "tool name for tool-related events (Bash / Edit / Write / etc.)",
121
+ )
58
122
  .action(hook);
59
123
 
60
124
  return program;