devflow-kit 0.9.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) hide show
  1. package/CHANGELOG.md +197 -29
  2. package/LICENSE +1 -1
  3. package/README.md +185 -309
  4. package/dist/cli.js +7 -1
  5. package/dist/commands/ambient.d.ts +18 -0
  6. package/dist/commands/ambient.js +136 -0
  7. package/dist/commands/init.d.ts +23 -0
  8. package/dist/commands/init.js +393 -571
  9. package/dist/commands/list.d.ts +3 -0
  10. package/dist/commands/list.js +20 -0
  11. package/dist/commands/memory.d.ts +22 -0
  12. package/dist/commands/memory.js +175 -0
  13. package/dist/commands/uninstall.d.ts +10 -0
  14. package/dist/commands/uninstall.js +418 -78
  15. package/dist/plugins.d.ts +46 -0
  16. package/dist/plugins.js +169 -0
  17. package/dist/utils/cli.d.ts +5 -0
  18. package/dist/utils/cli.js +14 -0
  19. package/dist/utils/installer.d.ts +41 -0
  20. package/dist/utils/installer.js +177 -0
  21. package/dist/utils/paths.d.ts +10 -0
  22. package/dist/utils/paths.js +23 -3
  23. package/dist/utils/post-install.d.ts +80 -0
  24. package/dist/utils/post-install.js +508 -0
  25. package/dist/utils/safe-delete-install.d.ts +29 -0
  26. package/dist/utils/safe-delete-install.js +191 -0
  27. package/dist/utils/safe-delete.d.ts +12 -0
  28. package/dist/utils/safe-delete.js +83 -0
  29. package/package.json +18 -8
  30. package/plugins/devflow-ambient/.claude-plugin/plugin.json +7 -0
  31. package/plugins/devflow-ambient/README.md +49 -0
  32. package/plugins/devflow-ambient/commands/ambient.md +110 -0
  33. package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +89 -0
  34. package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +64 -0
  35. package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +7 -0
  36. package/plugins/devflow-audit-claude/README.md +46 -0
  37. package/plugins/devflow-audit-claude/agents/claude-md-auditor.md +134 -0
  38. package/plugins/devflow-audit-claude/commands/audit-claude.md +85 -0
  39. package/plugins/devflow-code-review/.claude-plugin/plugin.json +31 -0
  40. package/plugins/devflow-code-review/README.md +73 -0
  41. package/plugins/devflow-code-review/agents/git.md +272 -0
  42. package/plugins/devflow-code-review/agents/reviewer.md +119 -0
  43. package/plugins/devflow-code-review/agents/synthesizer.md +204 -0
  44. package/plugins/devflow-code-review/commands/code-review-teams.md +262 -0
  45. package/plugins/devflow-code-review/commands/code-review.md +141 -0
  46. package/plugins/devflow-code-review/skills/accessibility/SKILL.md +229 -0
  47. package/plugins/devflow-code-review/skills/accessibility/references/detection.md +171 -0
  48. package/plugins/devflow-code-review/skills/accessibility/references/patterns.md +670 -0
  49. package/plugins/devflow-code-review/skills/accessibility/references/violations.md +419 -0
  50. package/plugins/devflow-code-review/skills/agent-teams/SKILL.md +124 -0
  51. package/plugins/devflow-code-review/skills/agent-teams/references/cleanup.md +104 -0
  52. package/plugins/devflow-code-review/skills/agent-teams/references/communication.md +122 -0
  53. package/plugins/devflow-code-review/skills/agent-teams/references/team-patterns.md +217 -0
  54. package/plugins/devflow-code-review/skills/architecture-patterns/SKILL.md +153 -0
  55. package/plugins/devflow-code-review/skills/architecture-patterns/references/detection.md +337 -0
  56. package/plugins/devflow-code-review/skills/architecture-patterns/references/patterns.md +873 -0
  57. package/plugins/devflow-code-review/skills/architecture-patterns/references/violations.md +575 -0
  58. package/plugins/devflow-code-review/skills/complexity-patterns/SKILL.md +143 -0
  59. package/plugins/devflow-code-review/skills/complexity-patterns/references/detection.md +264 -0
  60. package/plugins/devflow-code-review/skills/complexity-patterns/references/patterns.md +487 -0
  61. package/plugins/devflow-code-review/skills/complexity-patterns/references/violations.md +361 -0
  62. package/plugins/devflow-code-review/skills/consistency-patterns/SKILL.md +140 -0
  63. package/plugins/devflow-code-review/skills/consistency-patterns/references/detection.md +207 -0
  64. package/plugins/devflow-code-review/skills/consistency-patterns/references/patterns.md +202 -0
  65. package/plugins/devflow-code-review/skills/consistency-patterns/references/violations.md +213 -0
  66. package/plugins/devflow-code-review/skills/database-patterns/SKILL.md +134 -0
  67. package/plugins/devflow-code-review/skills/database-patterns/references/detection.md +208 -0
  68. package/plugins/devflow-code-review/skills/database-patterns/references/patterns.md +394 -0
  69. package/plugins/devflow-code-review/skills/database-patterns/references/violations.md +332 -0
  70. package/plugins/devflow-code-review/skills/dependencies-patterns/SKILL.md +141 -0
  71. package/plugins/devflow-code-review/skills/dependencies-patterns/references/detection.md +181 -0
  72. package/plugins/devflow-code-review/skills/dependencies-patterns/references/patterns.md +225 -0
  73. package/plugins/devflow-code-review/skills/dependencies-patterns/references/violations.md +247 -0
  74. package/plugins/devflow-code-review/skills/documentation-patterns/SKILL.md +125 -0
  75. package/plugins/devflow-code-review/skills/documentation-patterns/references/detection.md +190 -0
  76. package/plugins/devflow-code-review/skills/documentation-patterns/references/patterns.md +189 -0
  77. package/plugins/devflow-code-review/skills/documentation-patterns/references/violations.md +163 -0
  78. package/plugins/devflow-code-review/skills/frontend-design/SKILL.md +254 -0
  79. package/plugins/devflow-code-review/skills/frontend-design/references/detection.md +184 -0
  80. package/plugins/devflow-code-review/skills/frontend-design/references/patterns.md +511 -0
  81. package/plugins/devflow-code-review/skills/frontend-design/references/violations.md +453 -0
  82. package/plugins/devflow-code-review/skills/performance-patterns/SKILL.md +154 -0
  83. package/plugins/devflow-code-review/skills/performance-patterns/references/detection.md +351 -0
  84. package/plugins/devflow-code-review/skills/performance-patterns/references/patterns.md +503 -0
  85. package/plugins/devflow-code-review/skills/performance-patterns/references/violations.md +354 -0
  86. package/plugins/devflow-code-review/skills/react/SKILL.md +276 -0
  87. package/plugins/devflow-code-review/skills/react/references/patterns.md +1331 -0
  88. package/plugins/devflow-code-review/skills/react/references/violations.md +565 -0
  89. package/plugins/devflow-code-review/skills/regression-patterns/SKILL.md +146 -0
  90. package/plugins/devflow-code-review/skills/regression-patterns/references/detection.md +237 -0
  91. package/plugins/devflow-code-review/skills/regression-patterns/references/patterns.md +226 -0
  92. package/plugins/devflow-code-review/skills/regression-patterns/references/violations.md +225 -0
  93. package/plugins/devflow-code-review/skills/review-methodology/SKILL.md +119 -0
  94. package/plugins/devflow-code-review/skills/review-methodology/references/patterns.md +186 -0
  95. package/plugins/devflow-code-review/skills/review-methodology/references/report-template.md +142 -0
  96. package/plugins/devflow-code-review/skills/review-methodology/references/violations.md +125 -0
  97. package/plugins/devflow-code-review/skills/security-patterns/SKILL.md +156 -0
  98. package/plugins/devflow-code-review/skills/security-patterns/references/detection.md +287 -0
  99. package/plugins/devflow-code-review/skills/security-patterns/references/patterns.md +507 -0
  100. package/plugins/devflow-code-review/skills/security-patterns/references/violations.md +237 -0
  101. package/plugins/devflow-code-review/skills/test-patterns/SKILL.md +183 -0
  102. package/plugins/devflow-code-review/skills/test-patterns/references/detection.md +149 -0
  103. package/plugins/devflow-code-review/skills/test-patterns/references/patterns.md +220 -0
  104. package/plugins/devflow-code-review/skills/test-patterns/references/report-template.md +108 -0
  105. package/plugins/devflow-code-review/skills/test-patterns/references/violations.md +221 -0
  106. package/plugins/devflow-core-skills/.claude-plugin/plugin.json +28 -0
  107. package/plugins/devflow-core-skills/README.md +50 -0
  108. package/plugins/devflow-core-skills/skills/accessibility/SKILL.md +229 -0
  109. package/plugins/devflow-core-skills/skills/accessibility/references/detection.md +171 -0
  110. package/plugins/devflow-core-skills/skills/accessibility/references/patterns.md +670 -0
  111. package/plugins/devflow-core-skills/skills/accessibility/references/violations.md +419 -0
  112. package/plugins/devflow-core-skills/skills/core-patterns/SKILL.md +162 -0
  113. package/plugins/devflow-core-skills/skills/core-patterns/references/checklist.md +276 -0
  114. package/plugins/devflow-core-skills/skills/core-patterns/references/code-smell-violations.md +144 -0
  115. package/plugins/devflow-core-skills/skills/core-patterns/references/detection.md +303 -0
  116. package/plugins/devflow-core-skills/skills/core-patterns/references/patterns.md +576 -0
  117. package/plugins/devflow-core-skills/skills/core-patterns/references/violations.md +369 -0
  118. package/plugins/devflow-core-skills/skills/docs-framework/SKILL.md +138 -0
  119. package/plugins/devflow-core-skills/skills/docs-framework/references/patterns.md +346 -0
  120. package/plugins/devflow-core-skills/skills/docs-framework/references/violations.md +221 -0
  121. package/plugins/devflow-core-skills/skills/frontend-design/SKILL.md +254 -0
  122. package/plugins/devflow-core-skills/skills/frontend-design/references/detection.md +184 -0
  123. package/plugins/devflow-core-skills/skills/frontend-design/references/patterns.md +511 -0
  124. package/plugins/devflow-core-skills/skills/frontend-design/references/violations.md +453 -0
  125. package/plugins/devflow-core-skills/skills/git-safety/SKILL.md +122 -0
  126. package/plugins/devflow-core-skills/skills/git-safety/references/detection.md +290 -0
  127. package/plugins/devflow-core-skills/skills/git-safety/references/patterns.md +289 -0
  128. package/plugins/devflow-core-skills/skills/git-safety/references/violations.md +18 -0
  129. package/plugins/devflow-core-skills/skills/git-workflow/SKILL.md +158 -0
  130. package/plugins/devflow-core-skills/skills/git-workflow/references/commit-patterns.md +115 -0
  131. package/plugins/devflow-core-skills/skills/git-workflow/references/commit-violations.md +77 -0
  132. package/plugins/devflow-core-skills/skills/git-workflow/references/pr-patterns.md +127 -0
  133. package/plugins/devflow-core-skills/skills/git-workflow/references/pr-violations.md +96 -0
  134. package/plugins/devflow-core-skills/skills/github-patterns/SKILL.md +153 -0
  135. package/plugins/devflow-core-skills/skills/github-patterns/references/patterns.md +572 -0
  136. package/plugins/devflow-core-skills/skills/github-patterns/references/violations.md +298 -0
  137. package/plugins/devflow-core-skills/skills/input-validation/SKILL.md +148 -0
  138. package/plugins/devflow-core-skills/skills/input-validation/references/detection.md +283 -0
  139. package/plugins/devflow-core-skills/skills/input-validation/references/patterns.md +361 -0
  140. package/plugins/devflow-core-skills/skills/input-validation/references/violations.md +224 -0
  141. package/plugins/devflow-core-skills/skills/react/SKILL.md +276 -0
  142. package/plugins/devflow-core-skills/skills/react/references/patterns.md +1331 -0
  143. package/plugins/devflow-core-skills/skills/react/references/violations.md +565 -0
  144. package/plugins/devflow-core-skills/skills/test-driven-development/SKILL.md +139 -0
  145. package/plugins/devflow-core-skills/skills/test-driven-development/references/rationalization-prevention.md +111 -0
  146. package/plugins/devflow-core-skills/skills/test-patterns/SKILL.md +183 -0
  147. package/plugins/devflow-core-skills/skills/test-patterns/references/detection.md +149 -0
  148. package/plugins/devflow-core-skills/skills/test-patterns/references/patterns.md +220 -0
  149. package/plugins/devflow-core-skills/skills/test-patterns/references/report-template.md +108 -0
  150. package/plugins/devflow-core-skills/skills/test-patterns/references/violations.md +221 -0
  151. package/plugins/devflow-core-skills/skills/typescript/SKILL.md +176 -0
  152. package/plugins/devflow-core-skills/skills/typescript/references/patterns.md +1105 -0
  153. package/plugins/devflow-core-skills/skills/typescript/references/violations.md +433 -0
  154. package/plugins/devflow-debug/.claude-plugin/plugin.json +18 -0
  155. package/plugins/devflow-debug/README.md +65 -0
  156. package/plugins/devflow-debug/agents/git.md +272 -0
  157. package/plugins/devflow-debug/commands/debug-teams.md +231 -0
  158. package/plugins/devflow-debug/commands/debug.md +160 -0
  159. package/plugins/devflow-debug/skills/agent-teams/SKILL.md +124 -0
  160. package/plugins/devflow-debug/skills/agent-teams/references/cleanup.md +104 -0
  161. package/plugins/devflow-debug/skills/agent-teams/references/communication.md +122 -0
  162. package/plugins/devflow-debug/skills/agent-teams/references/team-patterns.md +217 -0
  163. package/plugins/devflow-debug/skills/git-safety/SKILL.md +122 -0
  164. package/plugins/devflow-debug/skills/git-safety/references/detection.md +290 -0
  165. package/plugins/devflow-debug/skills/git-safety/references/patterns.md +289 -0
  166. package/plugins/devflow-debug/skills/git-safety/references/violations.md +18 -0
  167. package/plugins/devflow-implement/.claude-plugin/plugin.json +21 -0
  168. package/plugins/devflow-implement/README.md +71 -0
  169. package/plugins/devflow-implement/agents/coder.md +122 -0
  170. package/plugins/devflow-implement/agents/git.md +272 -0
  171. package/plugins/devflow-implement/agents/scrutinizer.md +80 -0
  172. package/plugins/devflow-implement/agents/shepherd.md +94 -0
  173. package/plugins/devflow-implement/agents/simplifier.md +62 -0
  174. package/plugins/devflow-implement/agents/skimmer.md +88 -0
  175. package/plugins/devflow-implement/agents/synthesizer.md +204 -0
  176. package/plugins/devflow-implement/agents/validator.md +86 -0
  177. package/plugins/devflow-implement/commands/implement-teams.md +608 -0
  178. package/plugins/devflow-implement/commands/implement.md +426 -0
  179. package/plugins/devflow-implement/skills/accessibility/SKILL.md +229 -0
  180. package/plugins/devflow-implement/skills/accessibility/references/detection.md +171 -0
  181. package/plugins/devflow-implement/skills/accessibility/references/patterns.md +670 -0
  182. package/plugins/devflow-implement/skills/accessibility/references/violations.md +419 -0
  183. package/plugins/devflow-implement/skills/agent-teams/SKILL.md +124 -0
  184. package/plugins/devflow-implement/skills/agent-teams/references/cleanup.md +104 -0
  185. package/plugins/devflow-implement/skills/agent-teams/references/communication.md +122 -0
  186. package/plugins/devflow-implement/skills/agent-teams/references/team-patterns.md +217 -0
  187. package/plugins/devflow-implement/skills/frontend-design/SKILL.md +254 -0
  188. package/plugins/devflow-implement/skills/frontend-design/references/detection.md +184 -0
  189. package/plugins/devflow-implement/skills/frontend-design/references/patterns.md +511 -0
  190. package/plugins/devflow-implement/skills/frontend-design/references/violations.md +453 -0
  191. package/plugins/devflow-implement/skills/implementation-patterns/SKILL.md +162 -0
  192. package/plugins/devflow-implement/skills/implementation-patterns/references/patterns.md +1063 -0
  193. package/plugins/devflow-implement/skills/implementation-patterns/references/violations.md +483 -0
  194. package/plugins/devflow-implement/skills/self-review/SKILL.md +149 -0
  195. package/plugins/devflow-implement/skills/self-review/references/patterns.md +405 -0
  196. package/plugins/devflow-implement/skills/self-review/references/report-template.md +253 -0
  197. package/plugins/devflow-implement/skills/self-review/references/violations.md +308 -0
  198. package/plugins/devflow-resolve/.claude-plugin/plugin.json +19 -0
  199. package/plugins/devflow-resolve/README.md +65 -0
  200. package/plugins/devflow-resolve/agents/git.md +272 -0
  201. package/plugins/devflow-resolve/agents/resolver.md +131 -0
  202. package/plugins/devflow-resolve/agents/simplifier.md +62 -0
  203. package/plugins/devflow-resolve/commands/resolve-teams.md +298 -0
  204. package/plugins/devflow-resolve/commands/resolve.md +237 -0
  205. package/plugins/devflow-resolve/skills/agent-teams/SKILL.md +124 -0
  206. package/plugins/devflow-resolve/skills/agent-teams/references/cleanup.md +104 -0
  207. package/plugins/devflow-resolve/skills/agent-teams/references/communication.md +122 -0
  208. package/plugins/devflow-resolve/skills/agent-teams/references/team-patterns.md +217 -0
  209. package/plugins/devflow-resolve/skills/implementation-patterns/SKILL.md +162 -0
  210. package/plugins/devflow-resolve/skills/implementation-patterns/references/patterns.md +1063 -0
  211. package/plugins/devflow-resolve/skills/implementation-patterns/references/violations.md +483 -0
  212. package/plugins/devflow-resolve/skills/security-patterns/SKILL.md +156 -0
  213. package/plugins/devflow-resolve/skills/security-patterns/references/detection.md +287 -0
  214. package/plugins/devflow-resolve/skills/security-patterns/references/patterns.md +507 -0
  215. package/plugins/devflow-resolve/skills/security-patterns/references/violations.md +237 -0
  216. package/plugins/devflow-self-review/.claude-plugin/plugin.json +7 -0
  217. package/plugins/devflow-self-review/README.md +38 -0
  218. package/plugins/devflow-self-review/agents/scrutinizer.md +80 -0
  219. package/plugins/devflow-self-review/agents/simplifier.md +62 -0
  220. package/plugins/devflow-self-review/agents/validator.md +86 -0
  221. package/plugins/devflow-self-review/commands/self-review.md +126 -0
  222. package/plugins/devflow-self-review/skills/core-patterns/SKILL.md +162 -0
  223. package/plugins/devflow-self-review/skills/core-patterns/references/checklist.md +276 -0
  224. package/plugins/devflow-self-review/skills/core-patterns/references/code-smell-violations.md +144 -0
  225. package/plugins/devflow-self-review/skills/core-patterns/references/detection.md +303 -0
  226. package/plugins/devflow-self-review/skills/core-patterns/references/patterns.md +576 -0
  227. package/plugins/devflow-self-review/skills/core-patterns/references/violations.md +369 -0
  228. package/plugins/devflow-self-review/skills/self-review/SKILL.md +149 -0
  229. package/plugins/devflow-self-review/skills/self-review/references/patterns.md +405 -0
  230. package/plugins/devflow-self-review/skills/self-review/references/report-template.md +253 -0
  231. package/plugins/devflow-self-review/skills/self-review/references/violations.md +308 -0
  232. package/plugins/devflow-specify/.claude-plugin/plugin.json +15 -0
  233. package/plugins/devflow-specify/README.md +46 -0
  234. package/plugins/devflow-specify/agents/skimmer.md +88 -0
  235. package/plugins/devflow-specify/agents/synthesizer.md +204 -0
  236. package/plugins/devflow-specify/commands/specify-teams.md +314 -0
  237. package/plugins/devflow-specify/commands/specify.md +179 -0
  238. package/plugins/devflow-specify/skills/agent-teams/SKILL.md +124 -0
  239. package/plugins/devflow-specify/skills/agent-teams/references/cleanup.md +104 -0
  240. package/plugins/devflow-specify/skills/agent-teams/references/communication.md +122 -0
  241. package/plugins/devflow-specify/skills/agent-teams/references/team-patterns.md +217 -0
  242. package/scripts/hooks/ambient-prompt.sh +48 -0
  243. package/scripts/hooks/background-memory-update.sh +208 -0
  244. package/scripts/hooks/ensure-memory-gitignore.sh +17 -0
  245. package/scripts/hooks/pre-compact-memory.sh +87 -0
  246. package/scripts/hooks/session-start-memory.sh +126 -0
  247. package/scripts/hooks/stop-update-memory.sh +85 -0
  248. package/shared/agents/coder.md +122 -0
  249. package/shared/agents/git.md +272 -0
  250. package/shared/agents/resolver.md +131 -0
  251. package/shared/agents/reviewer.md +119 -0
  252. package/shared/agents/scrutinizer.md +80 -0
  253. package/shared/agents/shepherd.md +94 -0
  254. package/shared/agents/simplifier.md +62 -0
  255. package/shared/agents/skimmer.md +88 -0
  256. package/shared/agents/synthesizer.md +204 -0
  257. package/shared/agents/validator.md +86 -0
  258. package/shared/skills/accessibility/SKILL.md +229 -0
  259. package/shared/skills/accessibility/references/detection.md +171 -0
  260. package/shared/skills/accessibility/references/patterns.md +670 -0
  261. package/shared/skills/accessibility/references/violations.md +419 -0
  262. package/shared/skills/agent-teams/SKILL.md +124 -0
  263. package/shared/skills/agent-teams/references/cleanup.md +104 -0
  264. package/shared/skills/agent-teams/references/communication.md +122 -0
  265. package/shared/skills/agent-teams/references/team-patterns.md +217 -0
  266. package/shared/skills/ambient-router/SKILL.md +89 -0
  267. package/shared/skills/ambient-router/references/skill-catalog.md +64 -0
  268. package/shared/skills/architecture-patterns/SKILL.md +153 -0
  269. package/shared/skills/architecture-patterns/references/detection.md +337 -0
  270. package/shared/skills/architecture-patterns/references/patterns.md +873 -0
  271. package/shared/skills/architecture-patterns/references/violations.md +575 -0
  272. package/shared/skills/complexity-patterns/SKILL.md +143 -0
  273. package/shared/skills/complexity-patterns/references/detection.md +264 -0
  274. package/shared/skills/complexity-patterns/references/patterns.md +487 -0
  275. package/shared/skills/complexity-patterns/references/violations.md +361 -0
  276. package/shared/skills/consistency-patterns/SKILL.md +140 -0
  277. package/shared/skills/consistency-patterns/references/detection.md +207 -0
  278. package/shared/skills/consistency-patterns/references/patterns.md +202 -0
  279. package/shared/skills/consistency-patterns/references/violations.md +213 -0
  280. package/shared/skills/core-patterns/SKILL.md +162 -0
  281. package/shared/skills/core-patterns/references/checklist.md +276 -0
  282. package/shared/skills/core-patterns/references/code-smell-violations.md +144 -0
  283. package/shared/skills/core-patterns/references/detection.md +303 -0
  284. package/shared/skills/core-patterns/references/patterns.md +576 -0
  285. package/shared/skills/core-patterns/references/violations.md +369 -0
  286. package/shared/skills/database-patterns/SKILL.md +134 -0
  287. package/shared/skills/database-patterns/references/detection.md +208 -0
  288. package/shared/skills/database-patterns/references/patterns.md +394 -0
  289. package/shared/skills/database-patterns/references/violations.md +332 -0
  290. package/shared/skills/dependencies-patterns/SKILL.md +141 -0
  291. package/shared/skills/dependencies-patterns/references/detection.md +181 -0
  292. package/shared/skills/dependencies-patterns/references/patterns.md +225 -0
  293. package/shared/skills/dependencies-patterns/references/violations.md +247 -0
  294. package/shared/skills/docs-framework/SKILL.md +138 -0
  295. package/shared/skills/docs-framework/references/patterns.md +346 -0
  296. package/shared/skills/docs-framework/references/violations.md +221 -0
  297. package/shared/skills/documentation-patterns/SKILL.md +125 -0
  298. package/shared/skills/documentation-patterns/references/detection.md +190 -0
  299. package/shared/skills/documentation-patterns/references/patterns.md +189 -0
  300. package/shared/skills/documentation-patterns/references/violations.md +163 -0
  301. package/shared/skills/frontend-design/SKILL.md +254 -0
  302. package/shared/skills/frontend-design/references/detection.md +184 -0
  303. package/shared/skills/frontend-design/references/patterns.md +511 -0
  304. package/shared/skills/frontend-design/references/violations.md +453 -0
  305. package/shared/skills/git-safety/SKILL.md +122 -0
  306. package/shared/skills/git-safety/references/detection.md +290 -0
  307. package/shared/skills/git-safety/references/patterns.md +289 -0
  308. package/shared/skills/git-safety/references/violations.md +18 -0
  309. package/shared/skills/git-workflow/SKILL.md +158 -0
  310. package/shared/skills/git-workflow/references/commit-patterns.md +115 -0
  311. package/shared/skills/git-workflow/references/commit-violations.md +77 -0
  312. package/shared/skills/git-workflow/references/pr-patterns.md +127 -0
  313. package/shared/skills/git-workflow/references/pr-violations.md +96 -0
  314. package/shared/skills/github-patterns/SKILL.md +153 -0
  315. package/shared/skills/github-patterns/references/patterns.md +572 -0
  316. package/shared/skills/github-patterns/references/violations.md +298 -0
  317. package/shared/skills/implementation-patterns/SKILL.md +162 -0
  318. package/shared/skills/implementation-patterns/references/patterns.md +1063 -0
  319. package/shared/skills/implementation-patterns/references/violations.md +483 -0
  320. package/shared/skills/input-validation/SKILL.md +148 -0
  321. package/shared/skills/input-validation/references/detection.md +283 -0
  322. package/shared/skills/input-validation/references/patterns.md +361 -0
  323. package/shared/skills/input-validation/references/violations.md +224 -0
  324. package/shared/skills/performance-patterns/SKILL.md +154 -0
  325. package/shared/skills/performance-patterns/references/detection.md +351 -0
  326. package/shared/skills/performance-patterns/references/patterns.md +503 -0
  327. package/shared/skills/performance-patterns/references/violations.md +354 -0
  328. package/shared/skills/react/SKILL.md +276 -0
  329. package/shared/skills/react/references/patterns.md +1331 -0
  330. package/shared/skills/react/references/violations.md +565 -0
  331. package/shared/skills/regression-patterns/SKILL.md +146 -0
  332. package/shared/skills/regression-patterns/references/detection.md +237 -0
  333. package/shared/skills/regression-patterns/references/patterns.md +226 -0
  334. package/shared/skills/regression-patterns/references/violations.md +225 -0
  335. package/shared/skills/review-methodology/SKILL.md +119 -0
  336. package/shared/skills/review-methodology/references/patterns.md +186 -0
  337. package/shared/skills/review-methodology/references/report-template.md +142 -0
  338. package/shared/skills/review-methodology/references/violations.md +125 -0
  339. package/shared/skills/security-patterns/SKILL.md +156 -0
  340. package/shared/skills/security-patterns/references/detection.md +287 -0
  341. package/shared/skills/security-patterns/references/patterns.md +507 -0
  342. package/shared/skills/security-patterns/references/violations.md +237 -0
  343. package/shared/skills/self-review/SKILL.md +149 -0
  344. package/shared/skills/self-review/references/patterns.md +405 -0
  345. package/shared/skills/self-review/references/report-template.md +253 -0
  346. package/shared/skills/self-review/references/violations.md +308 -0
  347. package/shared/skills/test-driven-development/SKILL.md +139 -0
  348. package/shared/skills/test-driven-development/references/rationalization-prevention.md +111 -0
  349. package/shared/skills/test-patterns/SKILL.md +183 -0
  350. package/shared/skills/test-patterns/references/detection.md +149 -0
  351. package/shared/skills/test-patterns/references/patterns.md +220 -0
  352. package/shared/skills/test-patterns/references/report-template.md +108 -0
  353. package/shared/skills/test-patterns/references/violations.md +221 -0
  354. package/shared/skills/typescript/SKILL.md +176 -0
  355. package/shared/skills/typescript/references/patterns.md +1105 -0
  356. package/shared/skills/typescript/references/violations.md +433 -0
  357. package/src/templates/claudeignore.template +188 -0
  358. package/src/templates/managed-settings.json +160 -0
  359. package/src/templates/settings.json +59 -0
  360. package/dist/cli.d.ts.map +0 -1
  361. package/dist/cli.js.map +0 -1
  362. package/dist/commands/init.d.ts.map +0 -1
  363. package/dist/commands/init.js.map +0 -1
  364. package/dist/commands/uninstall.d.ts.map +0 -1
  365. package/dist/commands/uninstall.js.map +0 -1
  366. package/dist/utils/git.d.ts.map +0 -1
  367. package/dist/utils/git.js.map +0 -1
  368. package/dist/utils/paths.d.ts.map +0 -1
  369. package/dist/utils/paths.js.map +0 -1
  370. package/src/claude/CLAUDE.md +0 -400
  371. package/src/claude/agents/devflow/audit-architecture.md +0 -132
  372. package/src/claude/agents/devflow/audit-complexity.md +0 -132
  373. package/src/claude/agents/devflow/audit-database.md +0 -132
  374. package/src/claude/agents/devflow/audit-dependencies.md +0 -132
  375. package/src/claude/agents/devflow/audit-documentation.md +0 -132
  376. package/src/claude/agents/devflow/audit-performance.md +0 -256
  377. package/src/claude/agents/devflow/audit-security.md +0 -259
  378. package/src/claude/agents/devflow/audit-tests.md +0 -132
  379. package/src/claude/agents/devflow/audit-typescript.md +0 -132
  380. package/src/claude/agents/devflow/brainstorm.md +0 -279
  381. package/src/claude/agents/devflow/catch-up.md +0 -345
  382. package/src/claude/agents/devflow/code-review.md +0 -307
  383. package/src/claude/agents/devflow/commit.md +0 -380
  384. package/src/claude/agents/devflow/debug.md +0 -476
  385. package/src/claude/agents/devflow/design.md +0 -491
  386. package/src/claude/agents/devflow/get-issue.md +0 -286
  387. package/src/claude/agents/devflow/pr-comments.md +0 -285
  388. package/src/claude/agents/devflow/project-state.md +0 -419
  389. package/src/claude/agents/devflow/pull-request.md +0 -493
  390. package/src/claude/agents/devflow/release.md +0 -1137
  391. package/src/claude/agents/devflow/tech-debt.md +0 -338
  392. package/src/claude/commands/devflow/brainstorm.md +0 -68
  393. package/src/claude/commands/devflow/breakdown.md +0 -125
  394. package/src/claude/commands/devflow/catch-up.md +0 -29
  395. package/src/claude/commands/devflow/code-review.md +0 -237
  396. package/src/claude/commands/devflow/commit.md +0 -17
  397. package/src/claude/commands/devflow/debug.md +0 -56
  398. package/src/claude/commands/devflow/design.md +0 -82
  399. package/src/claude/commands/devflow/devlog.md +0 -408
  400. package/src/claude/commands/devflow/get-issue.md +0 -16
  401. package/src/claude/commands/devflow/implement.md +0 -100
  402. package/src/claude/commands/devflow/plan.md +0 -223
  403. package/src/claude/commands/devflow/pull-request.md +0 -20
  404. package/src/claude/commands/devflow/release.md +0 -251
  405. package/src/claude/commands/devflow/resolve-comments.md +0 -583
  406. package/src/claude/scripts/statusline.sh +0 -47
  407. package/src/claude/settings.json +0 -6
  408. package/src/claude/skills/devflow/code-smell/SKILL.md +0 -428
  409. package/src/claude/skills/devflow/debug/SKILL.md +0 -119
  410. package/src/claude/skills/devflow/error-handling/SKILL.md +0 -597
  411. package/src/claude/skills/devflow/input-validation/SKILL.md +0 -514
  412. package/src/claude/skills/devflow/pattern-check/SKILL.md +0 -238
  413. package/src/claude/skills/devflow/research/SKILL.md +0 -138
  414. package/src/claude/skills/devflow/test-design/SKILL.md +0 -384
@@ -1,8 +1,63 @@
1
1
  import { Command } from 'commander';
2
2
  import { promises as fs } from 'fs';
3
3
  import * as path from 'path';
4
- import { getInstallationPaths, getClaudeDirectory } from '../utils/paths.js';
4
+ import { fileURLToPath } from 'url';
5
+ import { execSync } from 'child_process';
6
+ import * as p from '@clack/prompts';
7
+ import color from 'picocolors';
8
+ import { getInstallationPaths, getClaudeDirectory, getManagedSettingsPath } from '../utils/paths.js';
5
9
  import { getGitRoot } from '../utils/git.js';
10
+ import { isClaudeCliAvailable } from '../utils/cli.js';
11
+ import { DEVFLOW_PLUGINS, getAllSkillNames, LEGACY_SKILL_NAMES } from '../plugins.js';
12
+ import { removeAmbientHook } from './ambient.js';
13
+ import { removeMemoryHooks } from './memory.js';
14
+ import { detectShell, getProfilePath } from '../utils/safe-delete.js';
15
+ import { isAlreadyInstalled, removeFromProfile } from '../utils/safe-delete-install.js';
16
+ import { removeManagedSettings } from '../utils/post-install.js';
17
+ /**
18
+ * Compute which assets should be removed during selective plugin uninstall.
19
+ * Skills and agents shared by remaining plugins are retained.
20
+ */
21
+ export function computeAssetsToRemove(selectedPlugins, allPlugins) {
22
+ const selectedNames = new Set(selectedPlugins.map(p => p.name));
23
+ const remainingPlugins = allPlugins.filter(p => !selectedNames.has(p.name));
24
+ const retainedSkills = new Set();
25
+ const retainedAgents = new Set();
26
+ for (const rp of remainingPlugins) {
27
+ for (const s of rp.skills)
28
+ retainedSkills.add(s);
29
+ for (const a of rp.agents)
30
+ retainedAgents.add(a);
31
+ }
32
+ const skills = [];
33
+ const agents = [];
34
+ const commands = [];
35
+ for (const plugin of selectedPlugins) {
36
+ for (const skill of plugin.skills) {
37
+ if (!retainedSkills.has(skill))
38
+ skills.push(skill);
39
+ }
40
+ for (const agent of plugin.agents) {
41
+ if (!retainedAgents.has(agent))
42
+ agents.push(agent);
43
+ }
44
+ commands.push(...plugin.commands);
45
+ }
46
+ return { skills, agents, commands };
47
+ }
48
+ /**
49
+ * Uninstall plugin using Claude CLI
50
+ */
51
+ function uninstallPluginViaCli(scope) {
52
+ try {
53
+ const cliScope = scope === 'local' ? 'project' : 'user';
54
+ execSync(`claude plugin uninstall devflow --scope ${cliScope}`, { stdio: 'inherit' });
55
+ return true;
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }
6
61
  /**
7
62
  * Check if DevFlow is installed at the given paths
8
63
  */
@@ -19,15 +74,36 @@ export const uninstallCommand = new Command('uninstall')
19
74
  .description('Uninstall DevFlow from Claude Code')
20
75
  .option('--keep-docs', 'Keep .docs/ directory and documentation')
21
76
  .option('--scope <type>', 'Uninstall from specific scope only (default: auto-detect all)', /^(user|local)$/i)
77
+ .option('--plugin <names>', 'Uninstall specific plugin(s), comma-separated (e.g., implement,review)')
78
+ .option('--verbose', 'Show detailed uninstall output')
22
79
  .action(async (options) => {
23
- console.log('🧹 Uninstalling DevFlow...\n');
80
+ p.intro(color.bgRed(color.white(' Uninstalling DevFlow ')));
81
+ const verbose = options.verbose ?? false;
82
+ // Parse plugin selection
83
+ let selectedPluginNames = [];
84
+ if (options.plugin) {
85
+ selectedPluginNames = options.plugin.split(',').map((s) => {
86
+ const trimmed = s.trim();
87
+ return trimmed.startsWith('devflow-') ? trimmed : `devflow-${trimmed}`;
88
+ });
89
+ const validNames = DEVFLOW_PLUGINS.map(p => p.name);
90
+ const invalidPlugins = selectedPluginNames.filter(n => !validNames.includes(n));
91
+ if (invalidPlugins.length > 0) {
92
+ p.log.error(`Unknown plugin(s): ${invalidPlugins.join(', ')}`);
93
+ p.log.info(`Valid plugins: ${validNames.join(', ')}`);
94
+ process.exit(1);
95
+ }
96
+ }
97
+ const isSelectiveUninstall = selectedPluginNames.length > 0;
98
+ const selectedPlugins = isSelectiveUninstall
99
+ ? DEVFLOW_PLUGINS.filter(p => selectedPluginNames.includes(p.name))
100
+ : [];
24
101
  // Determine which scopes to uninstall
25
102
  let scopesToUninstall = [];
26
103
  if (options.scope) {
27
104
  scopesToUninstall = [options.scope.toLowerCase()];
28
105
  }
29
106
  else {
30
- // Auto-detect installed scopes
31
107
  const userClaudeDir = getClaudeDirectory();
32
108
  const gitRoot = await getGitRoot();
33
109
  if (await isDevFlowInstalled(userClaudeDir)) {
@@ -40,21 +116,36 @@ export const uninstallCommand = new Command('uninstall')
40
116
  }
41
117
  }
42
118
  if (scopesToUninstall.length === 0) {
43
- console.log('No DevFlow installation found');
44
- console.log(' Checked user scope (~/.claude/) and local scope (git-root/.claude/)\n');
119
+ p.log.error('No DevFlow installation found');
120
+ p.log.info('Checked user scope (~/.claude/) and local scope (git-root/.claude/)');
45
121
  process.exit(1);
46
122
  }
47
123
  if (scopesToUninstall.length > 1) {
48
- console.log('📦 Found DevFlow in multiple scopes:');
49
- console.log(' - User scope (~/.claude/)');
50
- console.log(' - Local scope (git-root/.claude/)');
51
- console.log('\n Uninstalling from both...\n');
124
+ if (process.stdin.isTTY) {
125
+ const scopeChoice = await p.select({
126
+ message: 'Found DevFlow in multiple scopes. Uninstall from:',
127
+ options: [
128
+ { value: 'both', label: 'Both', hint: 'user + local' },
129
+ { value: 'user', label: 'User scope', hint: '~/.claude/' },
130
+ { value: 'local', label: 'Local scope', hint: 'git-root/.claude/' },
131
+ ],
132
+ });
133
+ if (p.isCancel(scopeChoice)) {
134
+ p.cancel('Uninstall cancelled.');
135
+ process.exit(0);
136
+ }
137
+ if (scopeChoice !== 'both') {
138
+ scopesToUninstall = [scopeChoice];
139
+ }
140
+ }
141
+ else {
142
+ p.log.info('Multiple scopes detected, uninstalling from both...');
143
+ }
52
144
  }
53
145
  }
54
- let hasErrors = false;
146
+ const cliAvailable = isClaudeCliAvailable();
55
147
  // Uninstall from each scope
56
148
  for (const scope of scopesToUninstall) {
57
- // Get installation paths for this scope
58
149
  let claudeDir;
59
150
  let devflowScriptsDir;
60
151
  try {
@@ -62,98 +153,347 @@ export const uninstallCommand = new Command('uninstall')
62
153
  claudeDir = paths.claudeDir;
63
154
  devflowScriptsDir = paths.devflowDir;
64
155
  if (scope === 'user') {
65
- console.log('📍 Uninstalling user scope (~/.claude/)');
156
+ p.log.step('Uninstalling user scope (~/.claude/)');
66
157
  }
67
158
  else {
68
- console.log('📍 Uninstalling local scope (git-root/.claude/)');
159
+ p.log.step('Uninstalling local scope (git-root/.claude/)');
69
160
  }
70
161
  }
71
162
  catch (error) {
72
- console.log(`⚠️ Cannot uninstall ${scope} scope: ${error instanceof Error ? error.message : error}\n`);
163
+ p.log.warn(`Cannot uninstall ${scope} scope: ${error instanceof Error ? error.message : error}`);
73
164
  continue;
74
165
  }
75
- // DevFlow namespace directories to remove
76
- const devflowDirectories = [
77
- { path: path.join(claudeDir, 'commands', 'devflow'), name: 'commands' },
78
- { path: path.join(claudeDir, 'agents', 'devflow'), name: 'agents' },
79
- { path: devflowScriptsDir, name: 'scripts' }
80
- ];
81
- // Remove all DevFlow directories
82
- for (const dir of devflowDirectories) {
83
- try {
84
- await fs.rm(dir.path, { recursive: true, force: true });
85
- console.log(` ✅ Removed DevFlow ${dir.name}`);
86
- }
87
- catch (error) {
88
- console.error(` ⚠️ Could not remove ${dir.name}:`, error);
89
- hasErrors = true;
90
- }
91
- }
92
- // Remove individual DevFlow skills (flat structure)
93
- const skillsDir = path.join(claudeDir, 'skills');
94
- const devflowSkills = [
95
- 'pattern-check',
96
- 'test-design',
97
- 'code-smell',
98
- 'research',
99
- 'debug',
100
- 'input-validation',
101
- 'error-handling'
102
- ];
103
- let skillsRemoved = 0;
104
- for (const skillName of devflowSkills) {
105
- try {
106
- const skillPath = path.join(skillsDir, skillName);
107
- await fs.rm(skillPath, { recursive: true, force: true });
108
- skillsRemoved++;
166
+ // Try to uninstall plugin via Claude CLI first (only for full uninstall)
167
+ let usedCli = false;
168
+ if (cliAvailable && !isSelectiveUninstall) {
169
+ if (verbose) {
170
+ p.log.info('Uninstalling plugin via Claude CLI...');
171
+ }
172
+ usedCli = uninstallPluginViaCli(scope);
173
+ if (!usedCli && verbose) {
174
+ p.log.warn('Claude CLI uninstall failed, falling back to manual removal');
109
175
  }
110
- catch (error) {
111
- // Skill might not exist, continue
176
+ }
177
+ // If CLI uninstall failed or unavailable, do manual removal
178
+ if (!usedCli) {
179
+ if (isSelectiveUninstall) {
180
+ await removeSelectedPlugins(claudeDir, selectedPlugins, verbose);
181
+ // Clean up ambient hook if ambient plugin is being removed
182
+ if (selectedPlugins.some(sp => sp.name === 'devflow-ambient')) {
183
+ const settingsPath = path.join(claudeDir, 'settings.json');
184
+ try {
185
+ const settings = await fs.readFile(settingsPath, 'utf-8');
186
+ const updated = removeAmbientHook(settings);
187
+ if (updated !== settings) {
188
+ await fs.writeFile(settingsPath, updated, 'utf-8');
189
+ if (verbose) {
190
+ p.log.success('Ambient mode hook removed from settings.json');
191
+ }
192
+ }
193
+ }
194
+ catch { /* settings.json may not exist */ }
195
+ }
196
+ }
197
+ else {
198
+ await removeAllDevFlow(claudeDir, devflowScriptsDir, verbose);
112
199
  }
113
200
  }
114
- if (skillsRemoved > 0) {
115
- console.log(` Removed ${skillsRemoved} DevFlow skills`);
201
+ const pluginLabel = isSelectiveUninstall
202
+ ? ` (${selectedPluginNames.join(', ')})`
203
+ : '';
204
+ p.log.success(`Plugin removed${usedCli ? ' (via Claude CLI)' : ''}${pluginLabel}`);
205
+ }
206
+ // === CLEANUP EXTRAS (only for full uninstall) ===
207
+ if (!isSelectiveUninstall) {
208
+ const gitRoot = await getGitRoot();
209
+ // 1. .docs/ directory
210
+ const docsDir = path.join(process.cwd(), '.docs');
211
+ let docsExist = false;
212
+ try {
213
+ await fs.access(docsDir);
214
+ docsExist = true;
116
215
  }
117
- // Also remove old nested skills structure if it exists (migration cleanup)
216
+ catch { /* .docs doesn't exist */ }
217
+ if (docsExist) {
218
+ let shouldRemoveDocs = false;
219
+ if (options.keepDocs) {
220
+ shouldRemoveDocs = false;
221
+ }
222
+ else if (process.stdin.isTTY) {
223
+ const removeDocs = await p.confirm({
224
+ message: '.docs/ directory found. Remove project documentation?',
225
+ initialValue: false,
226
+ });
227
+ if (p.isCancel(removeDocs)) {
228
+ p.cancel('Uninstall cancelled.');
229
+ process.exit(0);
230
+ }
231
+ shouldRemoveDocs = removeDocs;
232
+ }
233
+ if (shouldRemoveDocs) {
234
+ await fs.rm(docsDir, { recursive: true, force: true });
235
+ p.log.success('.docs/ removed');
236
+ }
237
+ else {
238
+ p.log.info('.docs/ preserved');
239
+ }
240
+ }
241
+ // 2. .memory/ directory
242
+ const memoryDir = path.join(process.cwd(), '.memory');
243
+ let memoryExist = false;
244
+ try {
245
+ await fs.access(memoryDir);
246
+ memoryExist = true;
247
+ }
248
+ catch { /* .memory doesn't exist */ }
249
+ if (memoryExist) {
250
+ let shouldRemoveMemory = false;
251
+ if (options.keepDocs) {
252
+ shouldRemoveMemory = false;
253
+ }
254
+ else if (process.stdin.isTTY) {
255
+ const removeMemory = await p.confirm({
256
+ message: '.memory/ directory found. Remove working memory files?',
257
+ initialValue: false,
258
+ });
259
+ if (p.isCancel(removeMemory)) {
260
+ p.cancel('Uninstall cancelled.');
261
+ process.exit(0);
262
+ }
263
+ shouldRemoveMemory = removeMemory;
264
+ }
265
+ if (shouldRemoveMemory) {
266
+ await fs.rm(memoryDir, { recursive: true, force: true });
267
+ p.log.success('.memory/ removed');
268
+ }
269
+ else {
270
+ p.log.info('.memory/ preserved');
271
+ }
272
+ }
273
+ // 4. .claudeignore
274
+ const claudeignorePath = gitRoot
275
+ ? path.join(gitRoot, '.claudeignore')
276
+ : path.join(process.cwd(), '.claudeignore');
277
+ let claudeignoreExists = false;
118
278
  try {
119
- await fs.rm(path.join(claudeDir, 'skills', 'devflow'), { recursive: true, force: true });
279
+ await fs.access(claudeignorePath);
280
+ claudeignoreExists = true;
281
+ }
282
+ catch { /* doesn't exist */ }
283
+ if (claudeignoreExists) {
284
+ if (process.stdin.isTTY) {
285
+ const removeClaudeignore = await p.confirm({
286
+ message: '.claudeignore found. Remove it? (may contain custom rules)',
287
+ initialValue: false,
288
+ });
289
+ if (!p.isCancel(removeClaudeignore) && removeClaudeignore) {
290
+ await fs.rm(claudeignorePath, { force: true });
291
+ p.log.success('.claudeignore removed');
292
+ }
293
+ else {
294
+ p.log.info('.claudeignore preserved');
295
+ }
296
+ }
297
+ else {
298
+ p.log.info('.claudeignore preserved (non-interactive mode)');
299
+ }
300
+ }
301
+ // 5. settings.json (DevFlow hooks)
302
+ for (const scope of scopesToUninstall) {
303
+ try {
304
+ const paths = await getInstallationPaths(scope);
305
+ const settingsPath = path.join(paths.claudeDir, 'settings.json');
306
+ let settingsContent = await fs.readFile(settingsPath, 'utf-8');
307
+ // Always remove ambient hook on full uninstall (idempotent)
308
+ const withoutAmbient = removeAmbientHook(settingsContent);
309
+ if (withoutAmbient !== settingsContent) {
310
+ await fs.writeFile(settingsPath, withoutAmbient, 'utf-8');
311
+ settingsContent = withoutAmbient;
312
+ if (verbose) {
313
+ p.log.success(`Ambient mode hook removed from settings.json (${scope})`);
314
+ }
315
+ }
316
+ // Always remove memory hooks on full uninstall (idempotent)
317
+ const withoutMemory = removeMemoryHooks(settingsContent);
318
+ if (withoutMemory !== settingsContent) {
319
+ await fs.writeFile(settingsPath, withoutMemory, 'utf-8');
320
+ settingsContent = withoutMemory;
321
+ if (verbose) {
322
+ p.log.success(`Memory hooks removed from settings.json (${scope})`);
323
+ }
324
+ }
325
+ const settings = JSON.parse(settingsContent);
326
+ if (settings.hooks) {
327
+ if (process.stdin.isTTY) {
328
+ const removeHooks = await p.confirm({
329
+ message: `Remove DevFlow hooks from settings.json (${scope} scope)? Other settings preserved.`,
330
+ initialValue: false,
331
+ });
332
+ if (!p.isCancel(removeHooks) && removeHooks) {
333
+ delete settings.hooks;
334
+ await fs.writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
335
+ p.log.success(`DevFlow hooks removed from settings.json (${scope})`);
336
+ }
337
+ else {
338
+ p.log.info(`settings.json hooks preserved (${scope})`);
339
+ }
340
+ }
341
+ else {
342
+ p.log.info(`settings.json hooks preserved (${scope}, non-interactive mode)`);
343
+ }
344
+ }
345
+ }
346
+ catch {
347
+ // settings.json doesn't exist or can't be parsed — skip
348
+ }
349
+ }
350
+ // 6. Managed settings (security deny list)
351
+ let managedSettingsExist = false;
352
+ try {
353
+ const managedPath = getManagedSettingsPath();
354
+ await fs.access(managedPath);
355
+ managedSettingsExist = true;
120
356
  }
121
357
  catch {
122
- // Old structure doesn't exist, ignore
358
+ // Managed settings don't exist or platform unsupported
359
+ }
360
+ if (managedSettingsExist) {
361
+ if (process.stdin.isTTY) {
362
+ const removeManagedConfirm = await p.confirm({
363
+ message: 'Remove DevFlow security deny list from managed settings?',
364
+ initialValue: false,
365
+ });
366
+ if (!p.isCancel(removeManagedConfirm) && removeManagedConfirm) {
367
+ // Resolve rootDir for the template path — use the dist directory
368
+ const uninstallRootDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
369
+ await removeManagedSettings(uninstallRootDir, verbose);
370
+ }
371
+ else {
372
+ p.log.info('Managed settings preserved');
373
+ }
374
+ }
375
+ else {
376
+ p.log.info('Managed settings preserved (non-interactive mode)');
377
+ }
378
+ }
379
+ // 7. Safe-delete shell function
380
+ const shell = detectShell();
381
+ const profilePath = getProfilePath(shell);
382
+ if (profilePath && await isAlreadyInstalled(profilePath)) {
383
+ if (process.stdin.isTTY) {
384
+ const removeSafeDelete = await p.confirm({
385
+ message: `Remove safe-delete function from ${profilePath}?`,
386
+ initialValue: false,
387
+ });
388
+ if (!p.isCancel(removeSafeDelete) && removeSafeDelete) {
389
+ const removed = await removeFromProfile(profilePath);
390
+ if (removed) {
391
+ p.log.success(`Safe-delete removed from ${profilePath}`);
392
+ }
393
+ else {
394
+ p.log.warn(`Could not remove safe-delete from ${profilePath}`);
395
+ }
396
+ }
397
+ else {
398
+ p.log.info('Safe-delete preserved in shell profile');
399
+ }
400
+ }
401
+ else {
402
+ p.log.info(`Safe-delete function preserved in ${profilePath} (non-interactive mode)`);
403
+ }
123
404
  }
124
- console.log();
125
405
  }
126
- // Handle .docs directory
127
- if (!options.keepDocs) {
128
- const docsDir = path.join(process.cwd(), '.docs');
406
+ const status = color.green('DevFlow uninstalled successfully');
407
+ p.outro(`${status}${color.dim(' Reinstall: npx devflow-kit init')}`);
408
+ });
409
+ /**
410
+ * Remove all DevFlow assets (full uninstall).
411
+ */
412
+ async function removeAllDevFlow(claudeDir, devflowScriptsDir, verbose) {
413
+ const devflowDirectories = [
414
+ { path: path.join(claudeDir, 'commands', 'devflow'), name: 'commands' },
415
+ { path: path.join(claudeDir, 'agents', 'devflow'), name: 'agents' },
416
+ { path: devflowScriptsDir, name: 'scripts' }
417
+ ];
418
+ for (const dir of devflowDirectories) {
129
419
  try {
130
- await fs.access(docsDir);
131
- console.log('\n⚠️ Found .docs/ directory in current project');
132
- console.log(' This contains your session documentation and history.');
133
- console.log(' Use --keep-docs to preserve it, or manually remove it.');
420
+ await fs.rm(dir.path, { recursive: true, force: true });
421
+ if (verbose) {
422
+ p.log.success(`Removed DevFlow ${dir.name}`);
423
+ }
424
+ }
425
+ catch (error) {
426
+ p.log.warn(`Could not remove ${dir.name}: ${error}`);
427
+ }
428
+ }
429
+ // Remove all DevFlow skills (current + legacy)
430
+ const allSkillNames = [...getAllSkillNames(), ...LEGACY_SKILL_NAMES];
431
+ const skillsDir = path.join(claudeDir, 'skills');
432
+ let skillsRemoved = 0;
433
+ for (const skillName of allSkillNames) {
434
+ try {
435
+ const skillPath = path.join(skillsDir, skillName);
436
+ await fs.rm(skillPath, { recursive: true, force: true });
437
+ skillsRemoved++;
134
438
  }
135
439
  catch {
136
- // .docs doesn't exist, nothing to warn about
440
+ // Skill might not exist
137
441
  }
138
442
  }
139
- // Remove .claudeignore (with warning)
140
- const claudeignorePath = path.join(process.cwd(), '.claudeignore');
443
+ if (skillsRemoved > 0 && verbose) {
444
+ p.log.success(`Removed ${skillsRemoved} DevFlow skills`);
445
+ }
446
+ // Also remove old nested skills structure if it exists
141
447
  try {
142
- await fs.access(claudeignorePath);
143
- console.log('\nℹ️ Found .claudeignore file');
144
- console.log(' Keeping it as it may contain custom rules.');
145
- console.log(' Remove manually if it was only for DevFlow.');
448
+ await fs.rm(path.join(claudeDir, 'skills', 'devflow'), { recursive: true, force: true });
146
449
  }
147
450
  catch {
148
- // .claudeignore doesn't exist
451
+ // Old structure doesn't exist
149
452
  }
150
- if (hasErrors) {
151
- console.log('\n⚠️ Uninstall completed with warnings');
152
- console.log(' Some components may not have been removed.');
453
+ }
454
+ /**
455
+ * Remove only specific plugin assets (selective uninstall).
456
+ * For commands and agents: remove files belonging to selected plugins.
457
+ * For skills: only remove skills that are NOT used by any remaining plugin.
458
+ */
459
+ async function removeSelectedPlugins(claudeDir, plugins, verbose) {
460
+ const { skills, agents, commands } = computeAssetsToRemove(plugins, DEVFLOW_PLUGINS);
461
+ const commandsDir = path.join(claudeDir, 'commands', 'devflow');
462
+ for (const cmd of commands) {
463
+ const cmdFileName = cmd.replace(/^\//, '') + '.md';
464
+ try {
465
+ await fs.rm(path.join(commandsDir, cmdFileName), { force: true });
466
+ if (verbose) {
467
+ p.log.success(`Removed command ${cmd}`);
468
+ }
469
+ }
470
+ catch {
471
+ // Command file might not exist
472
+ }
153
473
  }
154
- else {
155
- console.log('\n✅ DevFlow uninstalled successfully');
474
+ const agentsDir = path.join(claudeDir, 'agents', 'devflow');
475
+ for (const agent of agents) {
476
+ try {
477
+ await fs.rm(path.join(agentsDir, `${agent}.md`), { force: true });
478
+ if (verbose) {
479
+ p.log.success(`Removed agent ${agent}`);
480
+ }
481
+ }
482
+ catch {
483
+ // Agent file might not exist
484
+ }
156
485
  }
157
- console.log('\n💡 To reinstall: npm install -g devflow-kit && devflow init');
158
- });
486
+ const skillsDir = path.join(claudeDir, 'skills');
487
+ for (const skill of skills) {
488
+ try {
489
+ await fs.rm(path.join(skillsDir, skill), { recursive: true, force: true });
490
+ if (verbose) {
491
+ p.log.success(`Removed skill ${skill}`);
492
+ }
493
+ }
494
+ catch {
495
+ // Skill might not exist
496
+ }
497
+ }
498
+ }
159
499
  //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Shared plugin registry — single source of truth for all CLI commands.
3
+ */
4
+ /**
5
+ * Plugin definition with metadata
6
+ */
7
+ export interface PluginDefinition {
8
+ name: string;
9
+ description: string;
10
+ commands: string[];
11
+ agents: string[];
12
+ skills: string[];
13
+ /** Optional plugins are not installed by default — require explicit --plugin flag */
14
+ optional?: boolean;
15
+ }
16
+ /**
17
+ * Available DevFlow plugins
18
+ */
19
+ export declare const DEVFLOW_PLUGINS: PluginDefinition[];
20
+ /**
21
+ * Deprecated command names from old installations.
22
+ * Used during init to clean up stale command files on upgrade.
23
+ */
24
+ export declare const LEGACY_COMMAND_NAMES: string[];
25
+ /**
26
+ * Deprecated skill names from old installations (prefixed with devflow-).
27
+ * Used during uninstall to clean up legacy installs.
28
+ */
29
+ export declare const LEGACY_SKILL_NAMES: string[];
30
+ /**
31
+ * Derive unique skill names from all plugins.
32
+ */
33
+ export declare function getAllSkillNames(): string[];
34
+ /**
35
+ * Derive unique agent names from all plugins.
36
+ */
37
+ export declare function getAllAgentNames(): string[];
38
+ /**
39
+ * Build maps of unique assets to their source plugin (first plugin that declares them).
40
+ * This ensures each skill/agent is copied only once during installation.
41
+ */
42
+ export declare function buildAssetMaps(plugins: PluginDefinition[]): {
43
+ skillsMap: Map<string, string>;
44
+ agentsMap: Map<string, string>;
45
+ };
46
+ //# sourceMappingURL=plugins.d.ts.map