devflow-kit 0.4.0 โ†’ 0.6.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 (33) hide show
  1. package/CHANGELOG.md +129 -0
  2. package/README.md +61 -9
  3. package/dist/commands/init.d.ts.map +1 -1
  4. package/dist/commands/init.js +160 -176
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/uninstall.d.ts.map +1 -1
  7. package/dist/commands/uninstall.js +73 -48
  8. package/dist/commands/uninstall.js.map +1 -1
  9. package/dist/utils/git.d.ts +11 -0
  10. package/dist/utils/git.d.ts.map +1 -0
  11. package/dist/utils/git.js +36 -0
  12. package/dist/utils/git.js.map +1 -0
  13. package/dist/utils/paths.d.ts +32 -0
  14. package/dist/utils/paths.d.ts.map +1 -0
  15. package/dist/utils/paths.js +86 -0
  16. package/dist/utils/paths.js.map +1 -0
  17. package/package.json +1 -1
  18. package/src/claude/agents/devflow/audit-architecture.md +92 -110
  19. package/src/claude/agents/devflow/audit-complexity.md +94 -130
  20. package/src/claude/agents/devflow/audit-database.md +95 -136
  21. package/src/claude/agents/devflow/audit-dependencies.md +94 -136
  22. package/src/claude/agents/devflow/audit-documentation.md +82 -323
  23. package/src/claude/agents/devflow/audit-performance.md +212 -107
  24. package/src/claude/agents/devflow/audit-security.md +201 -83
  25. package/src/claude/agents/devflow/audit-tests.md +82 -471
  26. package/src/claude/agents/devflow/audit-typescript.md +83 -311
  27. package/src/claude/agents/devflow/pull-request.md +423 -0
  28. package/src/claude/commands/devflow/code-review.md +297 -248
  29. package/src/claude/commands/devflow/plan-next-steps.md +1 -1
  30. package/src/claude/commands/devflow/plan.md +485 -0
  31. package/src/claude/commands/devflow/pull-request.md +269 -0
  32. package/src/claude/commands/devflow/resolve-comments.md +583 -0
  33. package/src/claude/scripts/statusline.sh +0 -36
@@ -1,43 +1,17 @@
1
1
  import { Command } from 'commander';
2
2
  import { promises as fs } from 'fs';
3
3
  import * as path from 'path';
4
- import { homedir } from 'os';
5
- import { execSync } from 'child_process';
6
4
  import { fileURLToPath } from 'url';
7
5
  import { dirname } from 'path';
8
6
  import * as readline from 'readline';
7
+ import { getInstallationPaths } from '../utils/paths.js';
8
+ import { getGitRoot } from '../utils/git.js';
9
9
  const __filename = fileURLToPath(import.meta.url);
10
10
  const __dirname = dirname(__filename);
11
- /**
12
- * Get home directory with proper fallback and validation
13
- * Priority: process.env.HOME > os.homedir()
14
- */
15
- function getHomeDirectory() {
16
- const home = process.env.HOME || homedir();
17
- if (!home) {
18
- throw new Error('Unable to determine home directory. Set HOME environment variable.');
19
- }
20
- return home;
21
- }
22
- /**
23
- * Get Claude Code directory with environment variable override support
24
- * Priority: CLAUDE_CODE_DIR env var > ~/.claude
25
- */
26
- function getClaudeDirectory() {
27
- if (process.env.CLAUDE_CODE_DIR) {
28
- return process.env.CLAUDE_CODE_DIR;
29
- }
30
- return path.join(getHomeDirectory(), '.claude');
31
- }
32
- /**
33
- * Get DevFlow directory with environment variable override support
34
- * Priority: DEVFLOW_DIR env var > ~/.devflow
35
- */
36
- function getDevFlowDirectory() {
37
- if (process.env.DEVFLOW_DIR) {
38
- return process.env.DEVFLOW_DIR;
39
- }
40
- return path.join(getHomeDirectory(), '.devflow');
11
+ function isNodeSystemError(error) {
12
+ return (error instanceof Error &&
13
+ 'code' in error &&
14
+ typeof error.code === 'string');
41
15
  }
42
16
  /**
43
17
  * Prompt user for confirmation (async)
@@ -57,8 +31,7 @@ async function promptUser(question) {
57
31
  export const initCommand = new Command('init')
58
32
  .description('Initialize DevFlow for Claude Code')
59
33
  .option('--skip-docs', 'Skip creating .docs/ structure')
60
- .option('--force', 'Override existing settings.json and CLAUDE.md (prompts for confirmation)')
61
- .option('-y, --yes', 'Auto-approve all prompts (use with --force)')
34
+ .option('--scope <type>', 'Installation scope: user (user-wide) or local (project-only)', /^(user|local)$/i)
62
35
  .action(async (options) => {
63
36
  // Get package version
64
37
  const packageJsonPath = path.resolve(__dirname, '../../package.json');
@@ -70,43 +43,90 @@ export const initCommand = new Command('init')
70
43
  catch {
71
44
  version = 'unknown';
72
45
  }
73
- console.log(`๐Ÿš€ DevFlow v${version}${options.force ? ' [--force]' : ''}\n`);
46
+ console.log(`๐Ÿš€ DevFlow v${version}\n`);
47
+ // Determine installation scope
48
+ let scope = 'user'; // Default to user for backwards compatibility
49
+ if (options.scope) {
50
+ scope = options.scope.toLowerCase();
51
+ }
52
+ else {
53
+ // Check if running in interactive terminal (TTY)
54
+ if (!process.stdin.isTTY) {
55
+ // Non-interactive environment (CI/CD, scripts) - use default
56
+ console.log('๐Ÿ“ฆ Non-interactive environment detected, using default scope: user');
57
+ console.log(' To specify scope in CI/CD, use: devflow init --scope <user|local>\n');
58
+ scope = 'user';
59
+ }
60
+ else {
61
+ // Interactive prompt for scope
62
+ console.log('๐Ÿ“ฆ Installation Scope:\n');
63
+ console.log(' user - Install for all projects (user-wide)');
64
+ console.log(' โ””โ”€ ~/.claude/ and ~/.devflow/');
65
+ console.log(' local - Install for current project only');
66
+ console.log(' โ””โ”€ <git-root>/.claude/ and <git-root>/.devflow/\n');
67
+ const rl = readline.createInterface({
68
+ input: process.stdin,
69
+ output: process.stdout
70
+ });
71
+ const answer = await new Promise((resolve) => {
72
+ rl.question('Choose scope (user/local) [user]: ', (input) => {
73
+ rl.close();
74
+ resolve(input.trim().toLowerCase() || 'user');
75
+ });
76
+ });
77
+ if (answer === 'local' || answer === 'l') {
78
+ scope = 'local';
79
+ }
80
+ else if (answer === 'user' || answer === 'u' || answer === '') {
81
+ scope = 'user';
82
+ }
83
+ else {
84
+ console.error('โŒ Invalid scope. Use "user" or "local"\n');
85
+ process.exit(1);
86
+ }
87
+ console.log();
88
+ }
89
+ }
74
90
  // Get installation paths with proper validation
75
91
  let claudeDir;
76
92
  let devflowDir;
93
+ let gitRoot = null;
77
94
  try {
78
- claudeDir = getClaudeDirectory();
79
- devflowDir = getDevFlowDirectory();
95
+ const paths = await getInstallationPaths(scope);
96
+ claudeDir = paths.claudeDir;
97
+ devflowDir = paths.devflowDir;
98
+ // Cache git root for later use (already computed in getInstallationPaths for local scope)
99
+ gitRoot = await getGitRoot();
100
+ console.log(`๐Ÿ“ Installation scope: ${scope}`);
101
+ console.log(` Claude dir: ${claudeDir}`);
102
+ console.log(` DevFlow dir: ${devflowDir}\n`);
80
103
  }
81
104
  catch (error) {
82
105
  console.error('โŒ Path configuration error:', error instanceof Error ? error.message : error);
83
106
  process.exit(1);
84
107
  }
85
- // Check for Claude Code
86
- try {
87
- await fs.access(claudeDir);
88
- }
89
- catch {
90
- console.error(`โŒ Claude Code not detected at ${claudeDir}`);
91
- console.error(' Install from: https://claude.com/claude-code');
92
- console.error(' Or set CLAUDE_CODE_DIR if installed elsewhere\n');
93
- process.exit(1);
108
+ // Check for Claude Code (only for user scope)
109
+ if (scope === 'user') {
110
+ try {
111
+ await fs.access(claudeDir);
112
+ }
113
+ catch {
114
+ console.error(`โŒ Claude Code not detected at ${claudeDir}`);
115
+ console.error(' Install from: https://claude.com/claude-code');
116
+ console.error(' Or set CLAUDE_CODE_DIR if installed elsewhere\n');
117
+ process.exit(1);
118
+ }
119
+ console.log('โœ“ Claude Code detected');
94
120
  }
95
- // Handle --force flag prompt
96
- let forceOverride = false;
97
- if (options.force) {
98
- if (options.yes) {
99
- forceOverride = true;
121
+ else {
122
+ // Local scope - create .claude directory if it doesn't exist
123
+ try {
124
+ await fs.mkdir(claudeDir, { recursive: true });
125
+ console.log('โœ“ Local .claude directory ready');
100
126
  }
101
- else {
102
- console.log('โš ๏ธ WARNING: Force override will replace settings.json and CLAUDE.md');
103
- console.log(' Backups: settings.json.backup, CLAUDE.md.backup\n');
104
- forceOverride = await promptUser('Proceed? (y/N): ');
105
- console.log();
106
- if (!forceOverride) {
107
- console.log('โŒ Cancelled. Use init without --force for safe installation.\n');
108
- process.exit(0);
109
- }
127
+ catch (error) {
128
+ console.error(`โŒ Failed to create ${claudeDir}:`, error);
129
+ process.exit(1);
110
130
  }
111
131
  }
112
132
  // Get the root directory of the devflow package
@@ -156,135 +176,63 @@ export const initCommand = new Command('init')
156
176
  for (const script of scripts) {
157
177
  await fs.chmod(path.join(scriptsDir, script), 0o755);
158
178
  }
159
- console.log('โœ“ Claude Code detected');
160
179
  console.log('โœ“ Installing components... (commands, agents, skills, scripts)');
161
- // Install settings with smart backup
180
+ // Install settings.json - never override existing files (atomic operation)
162
181
  const settingsPath = path.join(claudeDir, 'settings.json');
163
- const managedSettingsPath = path.join(claudeDir, 'managed-settings.json');
164
182
  const devflowSettingsPath = path.join(claudeDir, 'settings.devflow.json');
165
183
  const sourceSettingsPath = path.join(claudeSourceDir, 'settings.json');
166
184
  // Read template and replace ~ with actual home directory
167
185
  const settingsTemplate = await fs.readFile(sourceSettingsPath, 'utf-8');
168
186
  const settingsContent = settingsTemplate.replace(/~\/\.devflow\/scripts\/statusline\.sh/g, path.join(devflowDir, 'scripts', 'statusline.sh'));
169
- let settingsAction = '';
170
- if (forceOverride) {
171
- // Force override - backup existing and install
172
- try {
173
- await fs.access(settingsPath);
174
- await fs.rename(settingsPath, path.join(claudeDir, 'settings.json.backup'));
175
- }
176
- catch {
177
- // No existing file
178
- }
179
- await fs.writeFile(settingsPath, settingsContent, 'utf-8');
180
- settingsAction = 'force-installed';
187
+ let settingsExists = false;
188
+ try {
189
+ // Atomic exclusive create - fails if file already exists
190
+ await fs.writeFile(settingsPath, settingsContent, { encoding: 'utf-8', flag: 'wx' });
191
+ console.log('โœ“ Settings configured');
181
192
  }
182
- else {
183
- // Safe installation logic
184
- try {
185
- // Check if user has existing settings.json
186
- await fs.access(settingsPath);
187
- // User has settings.json - need to preserve it
188
- try {
189
- // Check if managed-settings.json already exists
190
- await fs.access(managedSettingsPath);
191
- // managed-settings.json exists - install as settings.devflow.json
192
- await fs.writeFile(devflowSettingsPath, settingsContent, 'utf-8');
193
- settingsAction = 'saved-as-devflow';
194
- }
195
- catch {
196
- // managed-settings.json doesn't exist - safe to backup and install
197
- await fs.rename(settingsPath, managedSettingsPath);
198
- await fs.writeFile(settingsPath, settingsContent, 'utf-8');
199
- settingsAction = 'backed-up';
200
- }
193
+ catch (error) {
194
+ if (isNodeSystemError(error) && error.code === 'EEXIST') {
195
+ // Existing settings.json found - install as settings.devflow.json
196
+ settingsExists = true;
197
+ await fs.writeFile(devflowSettingsPath, settingsContent, 'utf-8');
198
+ console.log('โš ๏ธ Existing settings.json preserved โ†’ DevFlow config: settings.devflow.json');
201
199
  }
202
- catch {
203
- // No existing settings.json - install normally
204
- await fs.writeFile(settingsPath, settingsContent, 'utf-8');
205
- settingsAction = 'fresh-install';
200
+ else {
201
+ throw error;
206
202
  }
207
203
  }
208
- // Install CLAUDE.md with smart backup
204
+ // Install CLAUDE.md - never override existing files (atomic operation)
209
205
  const claudeMdPath = path.join(claudeDir, 'CLAUDE.md');
210
206
  const devflowClaudeMdPath = path.join(claudeDir, 'CLAUDE.devflow.md');
211
207
  const sourceClaudeMdPath = path.join(claudeSourceDir, 'CLAUDE.md');
212
- let claudeMdAction = '';
213
- if (forceOverride) {
214
- // Force override - backup existing and install
215
- try {
216
- await fs.access(claudeMdPath);
217
- await fs.rename(claudeMdPath, path.join(claudeDir, 'CLAUDE.md.backup'));
218
- }
219
- catch {
220
- // No existing file
221
- }
222
- await fs.copyFile(sourceClaudeMdPath, claudeMdPath);
223
- claudeMdAction = 'force-installed';
208
+ let claudeMdExists = false;
209
+ try {
210
+ // Atomic exclusive create - fails if file already exists
211
+ const content = await fs.readFile(sourceClaudeMdPath, 'utf-8');
212
+ await fs.writeFile(claudeMdPath, content, { encoding: 'utf-8', flag: 'wx' });
213
+ console.log('โœ“ CLAUDE.md configured');
224
214
  }
225
- else {
226
- // Safe installation logic
227
- try {
228
- // Check if user has existing CLAUDE.md
229
- await fs.access(claudeMdPath);
230
- // User has CLAUDE.md - install as CLAUDE.devflow.md
215
+ catch (error) {
216
+ if (isNodeSystemError(error) && error.code === 'EEXIST') {
217
+ // Existing CLAUDE.md found - install as CLAUDE.devflow.md
218
+ claudeMdExists = true;
231
219
  await fs.copyFile(sourceClaudeMdPath, devflowClaudeMdPath);
232
- claudeMdAction = 'saved-as-devflow';
220
+ console.log('โš ๏ธ Existing CLAUDE.md preserved โ†’ DevFlow guide: CLAUDE.devflow.md');
233
221
  }
234
- catch {
235
- // No existing CLAUDE.md - install normally
236
- await fs.copyFile(sourceClaudeMdPath, claudeMdPath);
237
- claudeMdAction = 'fresh-install';
222
+ else {
223
+ throw error;
238
224
  }
239
225
  }
240
- // Show concise status messages
241
- if (settingsAction === 'force-installed') {
242
- console.log('โœ“ Settings force-installed (backup: settings.json.backup)');
243
- }
244
- else if (settingsAction === 'backed-up') {
245
- console.log('โœ“ Settings configured');
246
- }
247
- else if (settingsAction === 'saved-as-devflow') {
248
- console.log('โš ๏ธ Existing settings preserved โ†’ DevFlow saved to settings.devflow.json');
249
- }
250
- else {
251
- console.log('โœ“ Settings configured');
252
- }
253
- if (claudeMdAction === 'force-installed') {
254
- console.log('โœ“ CLAUDE.md force-installed (backup: CLAUDE.md.backup)');
255
- }
256
- else if (claudeMdAction === 'saved-as-devflow') {
257
- console.log('โš ๏ธ Existing CLAUDE.md preserved โ†’ DevFlow saved to CLAUDE.devflow.md');
258
- }
259
- else {
260
- console.log('โœ“ CLAUDE.md configured');
261
- }
262
226
  // Create .claudeignore in git repository root
263
227
  let claudeignoreCreated = false;
264
228
  try {
265
- // Find git repository root with validation
266
- const gitRootRaw = execSync('git rev-parse --show-toplevel', {
267
- cwd: process.cwd(),
268
- encoding: 'utf-8',
269
- stdio: ['pipe', 'pipe', 'pipe'] // Isolate stderr
270
- }).trim();
271
- // Validate git root path (security: prevent injection)
272
- if (!gitRootRaw || gitRootRaw.includes('\n') || gitRootRaw.includes(';') || gitRootRaw.includes('&&')) {
273
- throw new Error('Invalid git root path returned');
274
- }
275
- // Validate it's an absolute path
276
- const gitRoot = path.resolve(gitRootRaw);
277
- if (!path.isAbsolute(gitRoot)) {
278
- throw new Error('Git root must be an absolute path');
229
+ // Use cached git root (already computed and validated earlier)
230
+ if (!gitRoot) {
231
+ throw new Error('Not in a git repository');
279
232
  }
280
233
  const claudeignorePath = path.join(gitRoot, '.claudeignore');
281
- // Check if .claudeignore already exists
282
- try {
283
- await fs.access(claudeignorePath);
284
- }
285
- catch {
286
- // Create comprehensive .claudeignore
287
- const claudeignoreContent = `# DevFlow .claudeignore - Protects against sensitive files and context pollution
234
+ // Atomic exclusive create - only create if doesn't exist
235
+ const claudeignoreContent = `# DevFlow .claudeignore - Protects against sensitive files and context pollution
288
236
  # Generated by DevFlow - Edit as needed for your project
289
237
 
290
238
  # === SECURITY: Sensitive Files ===
@@ -473,9 +421,9 @@ Gemfile.lock
473
421
  poetry.lock
474
422
  Pipfile.lock
475
423
  `;
476
- await fs.writeFile(claudeignorePath, claudeignoreContent, 'utf-8');
477
- claudeignoreCreated = true;
478
- }
424
+ // Atomic exclusive create - fails if file already exists
425
+ await fs.writeFile(claudeignorePath, claudeignoreContent, { encoding: 'utf-8', flag: 'wx' });
426
+ claudeignoreCreated = true;
479
427
  }
480
428
  catch (error) {
481
429
  // Not a git repository or other error - skip .claudeignore creation
@@ -483,6 +431,37 @@ Pipfile.lock
483
431
  if (claudeignoreCreated) {
484
432
  console.log('โœ“ .claudeignore created');
485
433
  }
434
+ // For local scope, update .gitignore to exclude .claude/ and .devflow/
435
+ if (scope === 'local' && gitRoot) {
436
+ try {
437
+ const gitignorePath = path.join(gitRoot, '.gitignore');
438
+ const entriesToAdd = ['.claude/', '.devflow/'];
439
+ let gitignoreContent = '';
440
+ try {
441
+ gitignoreContent = await fs.readFile(gitignorePath, 'utf-8');
442
+ }
443
+ catch {
444
+ // .gitignore doesn't exist, will create it
445
+ }
446
+ const linesToAdd = [];
447
+ for (const entry of entriesToAdd) {
448
+ // Check if entry already exists (exact match or pattern)
449
+ if (!gitignoreContent.split('\n').some(line => line.trim() === entry)) {
450
+ linesToAdd.push(entry);
451
+ }
452
+ }
453
+ if (linesToAdd.length > 0) {
454
+ const newContent = gitignoreContent
455
+ ? `${gitignoreContent.trimEnd()}\n\n# DevFlow local scope installation\n${linesToAdd.join('\n')}\n`
456
+ : `# DevFlow local scope installation\n${linesToAdd.join('\n')}\n`;
457
+ await fs.writeFile(gitignorePath, newContent, 'utf-8');
458
+ console.log('โœ“ .gitignore updated (excluded .claude/ and .devflow/)');
459
+ }
460
+ }
461
+ catch (error) {
462
+ console.warn('โš ๏ธ Could not update .gitignore:', error instanceof Error ? error.message : error);
463
+ }
464
+ }
486
465
  // Offer to install project documentation structure
487
466
  let docsCreated = false;
488
467
  if (!options.skipDocs) {
@@ -503,25 +482,30 @@ Pipfile.lock
503
482
  }
504
483
  console.log('\nโœ… Installation complete!\n');
505
484
  // Show manual merge instructions if needed
506
- if (settingsAction === 'saved-as-devflow' || claudeMdAction === 'saved-as-devflow') {
507
- console.log('โš ๏ธ Manual merge required:');
508
- if (settingsAction === 'saved-as-devflow') {
509
- console.log(' Settings: Merge settings.devflow.json โ†’ settings.json');
485
+ if (settingsExists || claudeMdExists) {
486
+ console.log('๐Ÿ“ Manual merge recommended:\n');
487
+ if (settingsExists) {
488
+ console.log(' Settings: Review settings.devflow.json and merge desired config into settings.json');
489
+ console.log(' Key setting: statusLine configuration for DevFlow statusline\n');
510
490
  }
511
- if (claudeMdAction === 'saved-as-devflow') {
512
- console.log(' Instructions: cp ~/.claude/CLAUDE.devflow.md ~/.claude/CLAUDE.md');
491
+ if (claudeMdExists) {
492
+ console.log(' Instructions: Review CLAUDE.devflow.md and adopt desired practices');
493
+ console.log(' This contains DevFlow\'s recommended development patterns\n');
513
494
  }
514
- console.log();
515
495
  }
516
496
  console.log('Available commands:');
517
497
  console.log(' /catch-up Session context and status');
518
498
  console.log(' /research Pre-implementation planning (manual)');
519
499
  console.log(' /debug Systematic debugging (manual)');
500
+ console.log(' /plan Interactive planning with design decisions');
501
+ console.log(' /plan-next-steps Extract actionable tasks from discussion');
502
+ console.log(' /implement Interactive implementation orchestrator');
520
503
  console.log(' /code-review Comprehensive code review');
521
504
  console.log(' /commit Intelligent atomic commits');
505
+ console.log(' /pull-request Create PR with smart description');
506
+ console.log(' /resolve-comments Address PR review feedback');
522
507
  console.log(' /devlog Session documentation');
523
508
  console.log(' /release Release automation');
524
- console.log(' /plan-next-steps Extract actionable tasks');
525
509
  console.log('\nInstalled skills (auto-activate):');
526
510
  console.log(' pattern-check Architectural pattern validation');
527
511
  console.log(' test-design Test quality enforcement');
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuCpC,eAAO,MAAM,gBAAgB,SAsEzB,CAAC"}
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,gBAAgB,SAuHzB,CAAC"}
@@ -1,71 +1,96 @@
1
1
  import { Command } from 'commander';
2
2
  import { promises as fs } from 'fs';
3
3
  import * as path from 'path';
4
- import { homedir } from 'os';
4
+ import { getInstallationPaths, getClaudeDirectory } from '../utils/paths.js';
5
+ import { getGitRoot } from '../utils/git.js';
5
6
  /**
6
- * Get home directory with proper fallback and validation
7
- * Priority: process.env.HOME > os.homedir()
7
+ * Check if DevFlow is installed at the given paths
8
8
  */
9
- function getHomeDirectory() {
10
- const home = process.env.HOME || homedir();
11
- if (!home) {
12
- throw new Error('Unable to determine home directory. Set HOME environment variable.');
13
- }
14
- return home;
15
- }
16
- /**
17
- * Get Claude Code directory with environment variable override support
18
- * Priority: CLAUDE_CODE_DIR env var > ~/.claude
19
- */
20
- function getClaudeDirectory() {
21
- if (process.env.CLAUDE_CODE_DIR) {
22
- return process.env.CLAUDE_CODE_DIR;
9
+ async function isDevFlowInstalled(claudeDir) {
10
+ try {
11
+ await fs.access(path.join(claudeDir, 'commands', 'devflow'));
12
+ return true;
23
13
  }
24
- return path.join(getHomeDirectory(), '.claude');
25
- }
26
- /**
27
- * Get DevFlow directory with environment variable override support
28
- * Priority: DEVFLOW_DIR env var > ~/.devflow
29
- */
30
- function getDevFlowDirectory() {
31
- if (process.env.DEVFLOW_DIR) {
32
- return process.env.DEVFLOW_DIR;
14
+ catch {
15
+ return false;
33
16
  }
34
- return path.join(getHomeDirectory(), '.devflow');
35
17
  }
36
18
  export const uninstallCommand = new Command('uninstall')
37
19
  .description('Uninstall DevFlow from Claude Code')
38
20
  .option('--keep-docs', 'Keep .docs/ directory and documentation')
21
+ .option('--scope <type>', 'Uninstall from specific scope only (default: auto-detect all)', /^(user|local)$/i)
39
22
  .action(async (options) => {
40
23
  console.log('๐Ÿงน Uninstalling DevFlow...\n');
41
- let claudeDir;
42
- let devflowScriptsDir;
43
- try {
44
- claudeDir = getClaudeDirectory();
45
- devflowScriptsDir = getDevFlowDirectory();
24
+ // Determine which scopes to uninstall
25
+ let scopesToUninstall = [];
26
+ if (options.scope) {
27
+ scopesToUninstall = [options.scope.toLowerCase()];
46
28
  }
47
- catch (error) {
48
- console.error('โŒ Path configuration error:', error instanceof Error ? error.message : error);
49
- process.exit(1);
29
+ else {
30
+ // Auto-detect installed scopes
31
+ const userClaudeDir = getClaudeDirectory();
32
+ const gitRoot = await getGitRoot();
33
+ if (await isDevFlowInstalled(userClaudeDir)) {
34
+ scopesToUninstall.push('user');
35
+ }
36
+ if (gitRoot) {
37
+ const localClaudeDir = path.join(gitRoot, '.claude');
38
+ if (await isDevFlowInstalled(localClaudeDir)) {
39
+ scopesToUninstall.push('local');
40
+ }
41
+ }
42
+ 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');
45
+ process.exit(1);
46
+ }
47
+ 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');
52
+ }
50
53
  }
51
54
  let hasErrors = false;
52
- // DevFlow namespace directories to remove
53
- const devflowDirectories = [
54
- { path: path.join(claudeDir, 'commands', 'devflow'), name: 'commands' },
55
- { path: path.join(claudeDir, 'agents', 'devflow'), name: 'agents' },
56
- { path: path.join(claudeDir, 'skills', 'devflow'), name: 'skills' },
57
- { path: devflowScriptsDir, name: 'scripts' }
58
- ];
59
- // Remove all DevFlow directories
60
- for (const dir of devflowDirectories) {
55
+ // Uninstall from each scope
56
+ for (const scope of scopesToUninstall) {
57
+ // Get installation paths for this scope
58
+ let claudeDir;
59
+ let devflowScriptsDir;
61
60
  try {
62
- await fs.rm(dir.path, { recursive: true, force: true });
63
- console.log(` โœ… Removed DevFlow ${dir.name}`);
61
+ const paths = await getInstallationPaths(scope);
62
+ claudeDir = paths.claudeDir;
63
+ devflowScriptsDir = paths.devflowDir;
64
+ if (scope === 'user') {
65
+ console.log('๐Ÿ“ Uninstalling user scope (~/.claude/)');
66
+ }
67
+ else {
68
+ console.log('๐Ÿ“ Uninstalling local scope (git-root/.claude/)');
69
+ }
64
70
  }
65
71
  catch (error) {
66
- console.error(` โš ๏ธ Could not remove ${dir.name}:`, error);
67
- hasErrors = true;
72
+ console.log(`โš ๏ธ Cannot uninstall ${scope} scope: ${error instanceof Error ? error.message : error}\n`);
73
+ continue;
74
+ }
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: path.join(claudeDir, 'skills', 'devflow'), name: 'skills' },
80
+ { path: devflowScriptsDir, name: 'scripts' }
81
+ ];
82
+ // Remove all DevFlow directories
83
+ for (const dir of devflowDirectories) {
84
+ try {
85
+ await fs.rm(dir.path, { recursive: true, force: true });
86
+ console.log(` โœ… Removed DevFlow ${dir.name}`);
87
+ }
88
+ catch (error) {
89
+ console.error(` โš ๏ธ Could not remove ${dir.name}:`, error);
90
+ hasErrors = true;
91
+ }
68
92
  }
93
+ console.log();
69
94
  }
70
95
  // Handle .docs directory
71
96
  if (!options.keepDocs) {