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