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
@@ -3,9 +3,12 @@
3
3
  *
4
4
  * Different agentic IDEs and CLIs support different subsets of the
5
5
  * AgileFlow surface. Claude Code is the full-feature target — hooks,
6
- * skills, slash commands, subagents, MCP. Cursor / Windsurf / Codex
7
- * support only a subset (mostly slash commands and MCP, with no
8
- * formalized hook system).
6
+ * skills, subagents, MCP. Cursor / Windsurf support only a subset
7
+ * (mostly MCP, with no formalized hook system). Codex now supports
8
+ * hooks through its experimental config.toml / hooks.json surface, but
9
+ * with a smaller event set than Claude Code. Antigravity appears to
10
+ * support skills and agent workflows, but we have not verified a hook
11
+ * surface yet, so it stays skill/agent-only for now.
9
12
  *
10
13
  * The installer reads this map to gate plugin content: a plugin's
11
14
  * hooks won't be written into a `cursor` install because Cursor has
@@ -25,53 +28,88 @@
25
28
 
26
29
  /**
27
30
  * @typedef {Object} IdeCapabilities
28
- * @property {boolean} hooks - SessionStart / PreToolUse / etc. hooks
31
+ * @property {boolean} hooks - whether this IDE can run any AgileFlow hooks
32
+ * @property {string[]} hookEvents - supported lifecycle events
29
33
  * @property {boolean} skills - skill discovery + invocation
30
- * @property {boolean} commands - slash commands
31
- * @property {boolean} agents - subagents
32
- * @property {boolean} mcp - MCP server registration
34
+ * @property {boolean} agents - subagents (Task tool / multi-agent spawning)
35
+ * @property {boolean} interactivePrompts - AskUserQuestion renders as interactive UI
36
+ * @property {boolean} multiAgent - parallel agent spawning via Task tool
37
+ * @property {boolean} sessionRestore - PostCompact hook fires to re-inject context
33
38
  * @property {string} settingsFile - path the installer writes IDE config to
34
39
  * (relative to project root)
40
+ * @property {string} skillsDir - path the installer mirrors SKILL.md files
41
+ * into (relative to project root). Convention: <ide-dotdir>/skills.
35
42
  * @property {string} description - human-readable label for the picker
36
43
  */
37
44
 
38
45
  /** @type {Record<string, IdeCapabilities>} */
39
46
  const IDE_CAPABILITIES = {
40
- 'claude-code': {
47
+ "claude-code": {
41
48
  hooks: true,
49
+ hookEvents: ["SessionStart", "PreToolUse", "PostCompact", "Stop"],
42
50
  skills: true,
43
- commands: true,
44
51
  agents: true,
45
- mcp: true,
46
- settingsFile: '.claude/settings.json',
47
- description: 'Anthropic Claude Code (full feature set)',
52
+ interactivePrompts: true,
53
+ multiAgent: true,
54
+ sessionRestore: true,
55
+ settingsFile: ".claude/settings.json",
56
+ skillsDir: ".claude/skills",
57
+ description: "Claude Code",
48
58
  },
49
59
  cursor: {
50
60
  hooks: false,
51
- skills: false,
52
- commands: true,
61
+ hookEvents: [],
62
+ skills: true,
53
63
  agents: false,
54
- mcp: true,
55
- settingsFile: '.cursor/settings.json',
56
- description: 'Cursor IDE (slash commands + MCP only)',
64
+ interactivePrompts: false,
65
+ multiAgent: false,
66
+ sessionRestore: false,
67
+ settingsFile: ".cursor/settings.json",
68
+ skillsDir: ".cursor/skills",
69
+ description: "Cursor",
57
70
  },
58
71
  windsurf: {
59
72
  hooks: false,
60
- skills: false,
61
- commands: true,
73
+ hookEvents: [],
74
+ skills: true,
62
75
  agents: false,
63
- mcp: false,
64
- settingsFile: '.windsurf/settings.json',
65
- description: 'Windsurf (slash commands only)',
76
+ interactivePrompts: false,
77
+ multiAgent: false,
78
+ sessionRestore: false,
79
+ settingsFile: ".windsurf/settings.json",
80
+ skillsDir: ".windsurf/skills",
81
+ description: "Windsurf",
66
82
  },
67
83
  codex: {
84
+ hooks: true,
85
+ hookEvents: [
86
+ "SessionStart",
87
+ "PreToolUse",
88
+ "PermissionRequest",
89
+ "PostToolUse",
90
+ "UserPromptSubmit",
91
+ "Stop",
92
+ ],
93
+ skills: true,
94
+ agents: true,
95
+ interactivePrompts: false,
96
+ multiAgent: true,
97
+ sessionRestore: false,
98
+ settingsFile: ".codex/config.toml",
99
+ skillsDir: ".codex/skills",
100
+ description: "Codex",
101
+ },
102
+ antigravity: {
68
103
  hooks: false,
69
- skills: false,
70
- commands: false,
71
- agents: false,
72
- mcp: false,
73
- settingsFile: '.codex/settings.json',
74
- description: 'OpenAI Codex CLI (limited integration)',
104
+ hookEvents: [],
105
+ skills: true,
106
+ agents: true,
107
+ interactivePrompts: false,
108
+ multiAgent: true,
109
+ sessionRestore: false,
110
+ settingsFile: ".antigravity/settings.json",
111
+ skillsDir: ".antigravity/skills",
112
+ description: "Antigravity",
75
113
  },
76
114
  };
77
115
 
@@ -86,7 +124,7 @@ function capabilitiesFor(ide) {
86
124
  const caps = IDE_CAPABILITIES[ide];
87
125
  if (!caps) {
88
126
  throw new Error(
89
- `Unknown IDE "${ide}". Supported: ${SUPPORTED_IDES.join(', ')}`,
127
+ `Unknown IDE "${ide}". Supported: ${SUPPORTED_IDES.join(", ")}`,
90
128
  );
91
129
  }
92
130
  return caps;
@@ -103,9 +141,26 @@ function supports(ide, feature) {
103
141
  return Boolean(caps[feature]);
104
142
  }
105
143
 
144
+ /**
145
+ * @param {string[]} ides
146
+ * @returns {Set<string>}
147
+ */
148
+ function hookEventsForIdes(ides) {
149
+ const events = new Set();
150
+ for (const ide of ides || []) {
151
+ const caps = IDE_CAPABILITIES[ide];
152
+ if (!caps || !Array.isArray(caps.hookEvents)) continue;
153
+ for (const event of caps.hookEvents) {
154
+ events.add(event);
155
+ }
156
+ }
157
+ return events;
158
+ }
159
+
106
160
  module.exports = {
107
161
  IDE_CAPABILITIES,
108
162
  SUPPORTED_IDES,
109
163
  capabilitiesFor,
110
164
  supports,
165
+ hookEventsForIdes,
111
166
  };
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Mirrors plugin-provided slash commands and subagents into Claude Code.
3
+ *
4
+ * Plugin source files live under:
5
+ * apps/cli/content/plugins/<id>/commands/...
6
+ * apps/cli/content/plugins/<id>/agents/...
7
+ *
8
+ * Claude Code discovers them from project-local dotdirs:
9
+ * .claude/commands/agileflow/...
10
+ * .claude/agents/agileflow/...
11
+ */
12
+ const fs = require("fs");
13
+ const path = require("path");
14
+
15
+ /**
16
+ * @typedef {import('../plugins/registry.js').PluginManifest} PluginManifest
17
+ *
18
+ * @typedef {Object} MirrorContentResult
19
+ * @property {string[]} mirrored
20
+ * @property {Array<{ id: string, error: string }>} skipped
21
+ */
22
+
23
+ /**
24
+ * @param {string} p
25
+ * @returns {string}
26
+ */
27
+ function toPosix(p) {
28
+ return p.split(path.sep).join("/");
29
+ }
30
+
31
+ /**
32
+ * @param {string} filePath
33
+ * @returns {Promise<void>}
34
+ */
35
+ async function mkdirFor(filePath) {
36
+ await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
37
+ }
38
+
39
+ /**
40
+ * @param {string} dir
41
+ * @returns {Promise<void>}
42
+ */
43
+ async function rmDir(dir) {
44
+ await fs.promises.rm(dir, { recursive: true, force: true });
45
+ }
46
+
47
+ /**
48
+ * @param {PluginManifest[]} orderedPlugins
49
+ * @param {"commands" | "agents"} kind
50
+ * @returns {Array<{ id: string, sourcePath: string, relativePath: string }>}
51
+ */
52
+ function collectPluginContent(orderedPlugins, kind) {
53
+ /** @type {Array<{ id: string, sourcePath: string, relativePath: string }>} */
54
+ const out = [];
55
+ for (const plugin of orderedPlugins) {
56
+ const entries =
57
+ plugin.provides && Array.isArray(plugin.provides[kind])
58
+ ? plugin.provides[kind]
59
+ : [];
60
+ for (const entry of entries) {
61
+ if (
62
+ !entry ||
63
+ typeof entry.id !== "string" ||
64
+ !entry.id ||
65
+ typeof entry.path !== "string" ||
66
+ !entry.path
67
+ ) {
68
+ continue;
69
+ }
70
+ const relativePath = entry.path.startsWith(`${kind}/`)
71
+ ? entry.path.slice(kind.length + 1)
72
+ : entry.path;
73
+ out.push({
74
+ id: entry.id,
75
+ sourcePath: path.join(plugin.dir, entry.path),
76
+ relativePath: toPosix(relativePath),
77
+ });
78
+ }
79
+ }
80
+ return out;
81
+ }
82
+
83
+ /**
84
+ * @param {PluginManifest[]} orderedPlugins
85
+ * @param {string} projectRoot
86
+ * @param {string} targetDirRel
87
+ * @param {"commands" | "agents"} kind
88
+ * @returns {Promise<MirrorContentResult>}
89
+ */
90
+ async function mirrorClaudeCodeContent(
91
+ orderedPlugins,
92
+ projectRoot,
93
+ targetDirRel,
94
+ kind,
95
+ ) {
96
+ const targetRoot = path.join(projectRoot, targetDirRel);
97
+ await rmDir(targetRoot);
98
+ await fs.promises.mkdir(targetRoot, { recursive: true });
99
+
100
+ const items = collectPluginContent(orderedPlugins, kind);
101
+ /** @type {string[]} */
102
+ const mirrored = [];
103
+ /** @type {Array<{ id: string, error: string }>} */
104
+ const skipped = [];
105
+
106
+ for (const item of items) {
107
+ const dest = path.join(targetRoot, item.relativePath);
108
+ try {
109
+ await mkdirFor(dest);
110
+ await fs.promises.copyFile(item.sourcePath, dest);
111
+ mirrored.push(item.id);
112
+ } catch (err) {
113
+ if (err && err.code === "ENOENT") {
114
+ skipped.push({
115
+ id: item.id,
116
+ error: `source not found: ${item.sourcePath}`,
117
+ });
118
+ continue;
119
+ }
120
+ throw err;
121
+ }
122
+ }
123
+
124
+ return { mirrored, skipped };
125
+ }
126
+
127
+ /**
128
+ * @param {PluginManifest[]} orderedPlugins
129
+ * @param {string} projectRoot
130
+ * @returns {Promise<MirrorContentResult>}
131
+ */
132
+ function mirrorClaudeCodeCommands(orderedPlugins, projectRoot) {
133
+ return mirrorClaudeCodeContent(
134
+ orderedPlugins,
135
+ projectRoot,
136
+ ".claude/commands/agileflow",
137
+ "commands",
138
+ );
139
+ }
140
+
141
+ /**
142
+ * @param {PluginManifest[]} orderedPlugins
143
+ * @param {string} projectRoot
144
+ * @returns {Promise<MirrorContentResult>}
145
+ */
146
+ function mirrorClaudeCodeAgents(orderedPlugins, projectRoot) {
147
+ return mirrorClaudeCodeContent(
148
+ orderedPlugins,
149
+ projectRoot,
150
+ ".claude/agents/agileflow",
151
+ "agents",
152
+ );
153
+ }
154
+
155
+ /**
156
+ * @param {string} projectRoot
157
+ * @returns {Promise<void>}
158
+ */
159
+ async function unmirrorClaudeCodeCommands(projectRoot) {
160
+ await rmDir(path.join(projectRoot, ".claude/commands/agileflow"));
161
+ }
162
+
163
+ /**
164
+ * @param {string} projectRoot
165
+ * @returns {Promise<void>}
166
+ */
167
+ async function unmirrorClaudeCodeAgents(projectRoot) {
168
+ await rmDir(path.join(projectRoot, ".claude/agents/agileflow"));
169
+ }
170
+
171
+ module.exports = {
172
+ collectPluginContent,
173
+ mirrorClaudeCodeCommands,
174
+ mirrorClaudeCodeAgents,
175
+ unmirrorClaudeCodeCommands,
176
+ unmirrorClaudeCodeAgents,
177
+ };
@@ -3,9 +3,10 @@
3
3
  *
4
4
  * When the target IDE is `claude-code`, the installer registers our 6
5
5
  * hook entry points in `.claude/settings.json` so Claude Code actually
6
- * invokes them at runtime. We use the unified `npx --no-install
7
- * agileflow hook <event> [--matcher <m>]` command so the path resolves
8
- * regardless of how the package is installed.
6
+ * invokes them at runtime. We use `npx agileflow hook <event>` so npx
7
+ * resolves the project-local binary from node_modules first. --no-install is
8
+ * intentionally omitted: it skips local node_modules and falls back to the
9
+ * npm cache, which can pick up a stale older version.
9
10
  *
10
11
  * The writer is **non-destructive**: it merges with any existing
11
12
  * settings.json. Only AgileFlow-owned hook entries (identified by the
@@ -16,10 +17,10 @@
16
17
  * On a non-claude-code switch, `removeManagedHooks` strips our entries
17
18
  * but leaves the rest of the file alone.
18
19
  */
19
- const fs = require('fs');
20
- const path = require('path');
20
+ const fs = require("fs");
21
+ const path = require("path");
21
22
 
22
- const HOOK_COMMAND_MARKER = 'agileflow hook';
23
+ const HOOK_COMMAND_MARKER = "agileflow hook";
23
24
  const HOOK_TIMEOUT_SECONDS = 30;
24
25
 
25
26
  /**
@@ -27,28 +28,65 @@ const HOOK_TIMEOUT_SECONDS = 30;
27
28
  * The `command` is what gets baked into settings.json.
28
29
  */
29
30
  const MANAGED_HOOKS = [
30
- { event: 'SessionStart', matcher: null, command: 'npx --no-install agileflow hook SessionStart' },
31
- { event: 'PreToolUse', matcher: 'Bash', command: 'npx --no-install agileflow hook PreToolUse --matcher Bash' },
32
- { event: 'PreToolUse', matcher: 'Edit', command: 'npx --no-install agileflow hook PreToolUse --matcher Edit' },
33
- { event: 'PreToolUse', matcher: 'Write', command: 'npx --no-install agileflow hook PreToolUse --matcher Write' },
34
- { event: 'PreCompact', matcher: null, command: 'npx --no-install agileflow hook PreCompact' },
35
- { event: 'Stop', matcher: null, command: 'npx --no-install agileflow hook Stop' },
31
+ {
32
+ event: "SessionStart",
33
+ matcher: null,
34
+ command: "npx agileflow hook SessionStart",
35
+ },
36
+ {
37
+ event: "PreToolUse",
38
+ matcher: "Bash",
39
+ command: "npx agileflow hook PreToolUse --matcher Bash",
40
+ },
41
+ {
42
+ event: "PreToolUse",
43
+ matcher: "Edit",
44
+ command: "npx agileflow hook PreToolUse --matcher Edit",
45
+ },
46
+ {
47
+ event: "PreToolUse",
48
+ matcher: "Write",
49
+ command: "npx agileflow hook PreToolUse --matcher Write",
50
+ },
51
+ {
52
+ event: "PostCompact",
53
+ matcher: null,
54
+ command: "npx agileflow hook PostCompact",
55
+ },
56
+ {
57
+ event: "Stop",
58
+ matcher: null,
59
+ command: "npx agileflow hook Stop",
60
+ },
36
61
  ];
37
62
 
38
63
  const MANAGED_EVENTS = new Set(MANAGED_HOOKS.map((h) => h.event));
39
64
 
65
+ /**
66
+ * Events AgileFlow wrote in previous versions but no longer manages.
67
+ * Used by `doctor` to detect stale entries that update wouldn't sweep
68
+ * (mergeManagedHooks only touches MANAGED_EVENTS). Add the OLD name
69
+ * here whenever a hook event is renamed or retired so old installs
70
+ * surface the leftover.
71
+ *
72
+ * - PreCompact → renamed to PostCompact in v4.0.0-alpha.6
73
+ * - PostToolUse → retired in v4 (was v3-era damage-control hook)
74
+ */
75
+ const LEGACY_MANAGED_EVENTS = new Set(["PreCompact", "PostToolUse"]);
76
+
40
77
  /**
41
78
  * Detect whether a settings.json hook entry belongs to AgileFlow.
42
79
  * @param {*} entry
43
80
  */
44
81
  function isAgileflowEntry(entry) {
45
- if (!entry || typeof entry !== 'object' || !Array.isArray(entry.hooks)) return false;
82
+ if (!entry || typeof entry !== "object" || !Array.isArray(entry.hooks))
83
+ return false;
46
84
  return entry.hooks.some(
47
85
  (h) =>
48
86
  h &&
49
- typeof h === 'object' &&
50
- h.type === 'command' &&
51
- typeof h.command === 'string' &&
87
+ typeof h === "object" &&
88
+ h.type === "command" &&
89
+ typeof h.command === "string" &&
52
90
  h.command.includes(HOOK_COMMAND_MARKER),
53
91
  );
54
92
  }
@@ -60,9 +98,7 @@ function isAgileflowEntry(entry) {
60
98
  function buildEntry({ matcher, command }) {
61
99
  /** @type {{ matcher?: string, hooks: object[] }} */
62
100
  const out = {
63
- hooks: [
64
- { type: 'command', command, timeout: HOOK_TIMEOUT_SECONDS },
65
- ],
101
+ hooks: [{ type: "command", command, timeout: HOOK_TIMEOUT_SECONDS }],
66
102
  };
67
103
  if (matcher) out.matcher = matcher;
68
104
  return out;
@@ -75,12 +111,13 @@ function buildEntry({ matcher, command }) {
75
111
  */
76
112
  async function readExisting(settingsPath) {
77
113
  try {
78
- const raw = await fs.promises.readFile(settingsPath, 'utf8');
114
+ const raw = await fs.promises.readFile(settingsPath, "utf8");
79
115
  const parsed = JSON.parse(raw);
80
- if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return {};
116
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
117
+ return {};
81
118
  return parsed;
82
119
  } catch (err) {
83
- if (err.code === 'ENOENT') return {};
120
+ if (err.code === "ENOENT") return {};
84
121
  if (err instanceof SyntaxError) return {};
85
122
  throw err;
86
123
  }
@@ -97,9 +134,9 @@ async function writeMerged(settingsPath, settings) {
97
134
  path.dirname(settingsPath),
98
135
  `.${path.basename(settingsPath)}.tmp-${process.pid}-${Math.random().toString(36).slice(2, 10)}`,
99
136
  );
100
- const text = JSON.stringify(settings, null, 2) + '\n';
137
+ const text = JSON.stringify(settings, null, 2) + "\n";
101
138
  try {
102
- await fs.promises.writeFile(tmp, text, 'utf8');
139
+ await fs.promises.writeFile(tmp, text, "utf8");
103
140
  await fs.promises.rename(tmp, settingsPath);
104
141
  } catch (err) {
105
142
  try {
@@ -125,7 +162,7 @@ function mergeManagedHooks(existing) {
125
162
  // produces numeric-keyed garbage. Treat it as missing instead.
126
163
  const baseHooks =
127
164
  existing.hooks &&
128
- typeof existing.hooks === 'object' &&
165
+ typeof existing.hooks === "object" &&
129
166
  !Array.isArray(existing.hooks)
130
167
  ? existing.hooks
131
168
  : {};
@@ -154,7 +191,7 @@ function unmanageHooks(existing) {
154
191
  const next = { ...existing };
155
192
  if (
156
193
  !existing.hooks ||
157
- typeof existing.hooks !== 'object' ||
194
+ typeof existing.hooks !== "object" ||
158
195
  Array.isArray(existing.hooks)
159
196
  ) {
160
197
  return next;
@@ -185,7 +222,7 @@ function unmanageHooks(existing) {
185
222
  * @returns {Promise<string>} absolute path of the written settings file
186
223
  */
187
224
  async function writeClaudeCodeSettings(projectRoot) {
188
- const settingsPath = path.join(projectRoot, '.claude', 'settings.json');
225
+ const settingsPath = path.join(projectRoot, ".claude", "settings.json");
189
226
  const existing = await readExisting(settingsPath);
190
227
  const merged = mergeManagedHooks(existing);
191
228
  await writeMerged(settingsPath, merged);
@@ -201,7 +238,7 @@ async function writeClaudeCodeSettings(projectRoot) {
201
238
  * @returns {Promise<{ removed: boolean, settingsPath: string|null }>}
202
239
  */
203
240
  async function removeClaudeCodeSettings(projectRoot) {
204
- const settingsPath = path.join(projectRoot, '.claude', 'settings.json');
241
+ const settingsPath = path.join(projectRoot, ".claude", "settings.json");
205
242
  // readExisting already converts ENOENT and SyntaxError to {} — any
206
243
  // exception here means a real filesystem problem (EACCES / EIO).
207
244
  // Do NOT swallow: a silent success would lie about successfully
@@ -213,7 +250,7 @@ async function removeClaudeCodeSettings(projectRoot) {
213
250
  await fs.promises.unlink(settingsPath);
214
251
  return { removed: true, settingsPath };
215
252
  } catch (err) {
216
- if (err.code === 'ENOENT') return { removed: false, settingsPath: null };
253
+ if (err.code === "ENOENT") return { removed: false, settingsPath: null };
217
254
  throw err;
218
255
  }
219
256
  }
@@ -229,6 +266,7 @@ module.exports = {
229
266
  isAgileflowEntry,
230
267
  MANAGED_HOOKS,
231
268
  MANAGED_EVENTS,
269
+ LEGACY_MANAGED_EVENTS,
232
270
  HOOK_COMMAND_MARKER,
233
271
  HOOK_TIMEOUT_SECONDS,
234
272
  };