devflow-kit 0.4.0 → 0.5.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 +61 -0
- package/README.md +37 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +151 -176
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +73 -48
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/utils/git.d.ts +11 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +36 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/paths.d.ts +32 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +86 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,66 @@ All notable changes to DevFlow will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.5.0] - 2025-10-24
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
#### Installation Scope Support
|
|
13
|
+
- **Two-tier installation strategy** - Choose between user-wide and project-specific installation
|
|
14
|
+
- **User scope** (default): Install to `~/.claude/` for all projects
|
|
15
|
+
- **Local scope**: Install to `<git-root>/.claude/` for current project only
|
|
16
|
+
- Interactive prompt with clear descriptions when `--scope` flag not provided
|
|
17
|
+
- CLI flag: `devflow init --scope <user|local>`
|
|
18
|
+
- Automatic .gitignore updates for local scope (excludes `.claude/` and `.devflow/`)
|
|
19
|
+
- Perfect for team projects where DevFlow should be project-specific
|
|
20
|
+
|
|
21
|
+
#### Smart Uninstall with Scope Detection
|
|
22
|
+
- **Auto-detection of installed scopes** - Intelligently finds and removes DevFlow installations
|
|
23
|
+
- Automatically detects which scopes have DevFlow installed (user and/or local)
|
|
24
|
+
- Default behavior: Remove from all detected scopes
|
|
25
|
+
- Manual override: `--scope <user|local>` to target specific scope
|
|
26
|
+
- Clear feedback showing which scopes are being uninstalled
|
|
27
|
+
- Graceful handling when no installation found
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
|
|
31
|
+
#### Code Quality Improvements
|
|
32
|
+
- **Extracted shared utilities** - Eliminated code duplication between init and uninstall commands
|
|
33
|
+
- Created `src/cli/utils/paths.ts` for path resolution functions
|
|
34
|
+
- Created `src/cli/utils/git.ts` for git repository operations
|
|
35
|
+
- Reduced duplication by ~65 lines
|
|
36
|
+
- Single source of truth for path and git logic
|
|
37
|
+
|
|
38
|
+
#### Performance Optimizations
|
|
39
|
+
- **Eliminated redundant git detection** - Cache git root result for reuse
|
|
40
|
+
- Previously called `git rev-parse` twice during installation
|
|
41
|
+
- Now cached once and reused throughout installation process
|
|
42
|
+
- Faster installation, especially in large repositories
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
#### CI/CD Compatibility
|
|
47
|
+
- **TTY detection for interactive prompts** - Prevents hanging in non-interactive environments
|
|
48
|
+
- Detects when running in CI/CD pipelines, Docker containers, or automated scripts
|
|
49
|
+
- Falls back to default scope (user) when no TTY available
|
|
50
|
+
- Clear messaging when non-interactive environment detected
|
|
51
|
+
- Explicit instructions for CI/CD usage: `devflow init --scope <user|local>`
|
|
52
|
+
|
|
53
|
+
#### Security Hardening
|
|
54
|
+
- **Environment variable path validation** - Prevents malicious path overrides
|
|
55
|
+
- Validates `CLAUDE_CODE_DIR` and `DEVFLOW_DIR` are absolute paths
|
|
56
|
+
- Warns when paths point outside user's home directory
|
|
57
|
+
- Prevents path traversal attacks via environment variables
|
|
58
|
+
- Security-first approach to custom path configuration
|
|
59
|
+
|
|
60
|
+
### Documentation
|
|
61
|
+
- **Installation Scopes section** in README with clear use cases
|
|
62
|
+
- **Updated CLI commands table** with scope options for init and uninstall
|
|
63
|
+
- **Migration guide** for existing users (scope defaults to user for compatibility)
|
|
64
|
+
- **.gitignore patterns** documented for local scope installations
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
8
68
|
## [0.4.0] - 2025-10-21
|
|
9
69
|
|
|
10
70
|
### Added
|
|
@@ -357,6 +417,7 @@ devflow init
|
|
|
357
417
|
|
|
358
418
|
---
|
|
359
419
|
|
|
420
|
+
[0.5.0]: https://github.com/dean0x/devflow/releases/tag/v0.5.0
|
|
360
421
|
[0.4.0]: https://github.com/dean0x/devflow/releases/tag/v0.4.0
|
|
361
422
|
[0.3.3]: https://github.com/dean0x/devflow/releases/tag/v0.3.3
|
|
362
423
|
[0.3.2]: https://github.com/dean0x/devflow/releases/tag/v0.3.2
|
package/README.md
CHANGED
|
@@ -9,6 +9,29 @@ A comprehensive collection of Claude Code commands and configurations designed t
|
|
|
9
9
|
npx devflow-kit init
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
+
### Installation Scopes
|
|
13
|
+
|
|
14
|
+
DevFlow supports two installation scopes:
|
|
15
|
+
|
|
16
|
+
**User Scope (Default)** - Install for all projects
|
|
17
|
+
```bash
|
|
18
|
+
npx devflow-kit init --scope user
|
|
19
|
+
# Or interactively: npx devflow-kit init (prompts for scope)
|
|
20
|
+
```
|
|
21
|
+
- Installs to `~/.claude/` and `~/.devflow/`
|
|
22
|
+
- Available across all projects
|
|
23
|
+
- Recommended for personal use
|
|
24
|
+
|
|
25
|
+
**Local Scope** - Install for current project only
|
|
26
|
+
```bash
|
|
27
|
+
npx devflow-kit init --scope local
|
|
28
|
+
```
|
|
29
|
+
- Installs to `<git-root>/.claude/` and `<git-root>/.devflow/`
|
|
30
|
+
- Only available in the current project
|
|
31
|
+
- Recommended for team projects where DevFlow should be project-specific
|
|
32
|
+
- Requires a git repository (run `git init` first)
|
|
33
|
+
- Add `.claude/` and `.devflow/` to `.gitignore` (done automatically)
|
|
34
|
+
|
|
12
35
|
That's it! DevFlow is now installed and ready to use in Claude Code.
|
|
13
36
|
|
|
14
37
|
## What's Included
|
|
@@ -154,10 +177,12 @@ Covers patterns for all major languages and operating systems.
|
|
|
154
177
|
|
|
155
178
|
| Command | Purpose | Options |
|
|
156
179
|
|---------|---------|---------|
|
|
157
|
-
| `devflow init` | Initialize DevFlow for Claude Code | `--skip-docs` - Skip creating `.docs/` structure |
|
|
158
|
-
| `devflow uninstall` | Remove DevFlow from Claude Code | `--keep-docs` - Keep `.docs/` directory |
|
|
180
|
+
| `devflow init` | Initialize DevFlow for Claude Code | `--scope <user\|local>` - Installation scope (user: user-wide, local: project-only)<br>`--skip-docs` - Skip creating `.docs/` structure |
|
|
181
|
+
| `devflow uninstall` | Remove DevFlow from Claude Code | `--scope <user\|local>` - Uninstall from specific scope only (default: auto-detect all)<br>`--keep-docs` - Keep `.docs/` directory |
|
|
159
182
|
|
|
160
183
|
**What `devflow init` does:**
|
|
184
|
+
|
|
185
|
+
**User Scope** (default):
|
|
161
186
|
- Installs commands to `~/.claude/commands/devflow/`
|
|
162
187
|
- Installs sub-agents to `~/.claude/agents/devflow/`
|
|
163
188
|
- Installs skills to `~/.claude/skills/devflow/`
|
|
@@ -166,6 +191,16 @@ Covers patterns for all major languages and operating systems.
|
|
|
166
191
|
- Creates `.claudeignore` at git repository root
|
|
167
192
|
- Creates `.docs/` structure for project documentation
|
|
168
193
|
|
|
194
|
+
**Local Scope** (`--scope local`):
|
|
195
|
+
- Installs commands to `<git-root>/.claude/commands/devflow/`
|
|
196
|
+
- Installs sub-agents to `<git-root>/.claude/agents/devflow/`
|
|
197
|
+
- Installs skills to `<git-root>/.claude/skills/devflow/`
|
|
198
|
+
- Installs scripts to `<git-root>/.devflow/scripts/`
|
|
199
|
+
- Creates `<git-root>/.claude/settings.json` (statusline and model)
|
|
200
|
+
- Creates `.claudeignore` at git repository root
|
|
201
|
+
- Creates `.docs/` structure for project documentation
|
|
202
|
+
- Adds `.claude/` and `.devflow/` to `.gitignore`
|
|
203
|
+
|
|
169
204
|
**First Run:**
|
|
170
205
|
```bash
|
|
171
206
|
devflow init
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,eAAO,MAAM,WAAW,SA+fpB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,44 +1,13 @@
|
|
|
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');
|
|
41
|
-
}
|
|
42
11
|
/**
|
|
43
12
|
* Prompt user for confirmation (async)
|
|
44
13
|
*/
|
|
@@ -57,8 +26,7 @@ async function promptUser(question) {
|
|
|
57
26
|
export const initCommand = new Command('init')
|
|
58
27
|
.description('Initialize DevFlow for Claude Code')
|
|
59
28
|
.option('--skip-docs', 'Skip creating .docs/ structure')
|
|
60
|
-
.option('--
|
|
61
|
-
.option('-y, --yes', 'Auto-approve all prompts (use with --force)')
|
|
29
|
+
.option('--scope <type>', 'Installation scope: user (user-wide) or local (project-only)', /^(user|local)$/i)
|
|
62
30
|
.action(async (options) => {
|
|
63
31
|
// Get package version
|
|
64
32
|
const packageJsonPath = path.resolve(__dirname, '../../package.json');
|
|
@@ -70,43 +38,90 @@ export const initCommand = new Command('init')
|
|
|
70
38
|
catch {
|
|
71
39
|
version = 'unknown';
|
|
72
40
|
}
|
|
73
|
-
console.log(`🚀 DevFlow v${version}
|
|
41
|
+
console.log(`🚀 DevFlow v${version}\n`);
|
|
42
|
+
// Determine installation scope
|
|
43
|
+
let scope = 'user'; // Default to user for backwards compatibility
|
|
44
|
+
if (options.scope) {
|
|
45
|
+
scope = options.scope.toLowerCase();
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// Check if running in interactive terminal (TTY)
|
|
49
|
+
if (!process.stdin.isTTY) {
|
|
50
|
+
// Non-interactive environment (CI/CD, scripts) - use default
|
|
51
|
+
console.log('📦 Non-interactive environment detected, using default scope: user');
|
|
52
|
+
console.log(' To specify scope in CI/CD, use: devflow init --scope <user|local>\n');
|
|
53
|
+
scope = 'user';
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Interactive prompt for scope
|
|
57
|
+
console.log('📦 Installation Scope:\n');
|
|
58
|
+
console.log(' user - Install for all projects (user-wide)');
|
|
59
|
+
console.log(' └─ ~/.claude/ and ~/.devflow/');
|
|
60
|
+
console.log(' local - Install for current project only');
|
|
61
|
+
console.log(' └─ <git-root>/.claude/ and <git-root>/.devflow/\n');
|
|
62
|
+
const rl = readline.createInterface({
|
|
63
|
+
input: process.stdin,
|
|
64
|
+
output: process.stdout
|
|
65
|
+
});
|
|
66
|
+
const answer = await new Promise((resolve) => {
|
|
67
|
+
rl.question('Choose scope (user/local) [user]: ', (input) => {
|
|
68
|
+
rl.close();
|
|
69
|
+
resolve(input.trim().toLowerCase() || 'user');
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
if (answer === 'local' || answer === 'l') {
|
|
73
|
+
scope = 'local';
|
|
74
|
+
}
|
|
75
|
+
else if (answer === 'user' || answer === 'u' || answer === '') {
|
|
76
|
+
scope = 'user';
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
console.error('❌ Invalid scope. Use "user" or "local"\n');
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
console.log();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
74
85
|
// Get installation paths with proper validation
|
|
75
86
|
let claudeDir;
|
|
76
87
|
let devflowDir;
|
|
88
|
+
let gitRoot = null;
|
|
77
89
|
try {
|
|
78
|
-
|
|
79
|
-
|
|
90
|
+
const paths = await getInstallationPaths(scope);
|
|
91
|
+
claudeDir = paths.claudeDir;
|
|
92
|
+
devflowDir = paths.devflowDir;
|
|
93
|
+
// Cache git root for later use (already computed in getInstallationPaths for local scope)
|
|
94
|
+
gitRoot = await getGitRoot();
|
|
95
|
+
console.log(`📍 Installation scope: ${scope}`);
|
|
96
|
+
console.log(` Claude dir: ${claudeDir}`);
|
|
97
|
+
console.log(` DevFlow dir: ${devflowDir}\n`);
|
|
80
98
|
}
|
|
81
99
|
catch (error) {
|
|
82
100
|
console.error('❌ Path configuration error:', error instanceof Error ? error.message : error);
|
|
83
101
|
process.exit(1);
|
|
84
102
|
}
|
|
85
|
-
// Check for Claude Code
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
103
|
+
// Check for Claude Code (only for user scope)
|
|
104
|
+
if (scope === 'user') {
|
|
105
|
+
try {
|
|
106
|
+
await fs.access(claudeDir);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
console.error(`❌ Claude Code not detected at ${claudeDir}`);
|
|
110
|
+
console.error(' Install from: https://claude.com/claude-code');
|
|
111
|
+
console.error(' Or set CLAUDE_CODE_DIR if installed elsewhere\n');
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
console.log('✓ Claude Code detected');
|
|
94
115
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
116
|
+
else {
|
|
117
|
+
// Local scope - create .claude directory if it doesn't exist
|
|
118
|
+
try {
|
|
119
|
+
await fs.mkdir(claudeDir, { recursive: true });
|
|
120
|
+
console.log('✓ Local .claude directory ready');
|
|
100
121
|
}
|
|
101
|
-
|
|
102
|
-
console.
|
|
103
|
-
|
|
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
|
-
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error(`❌ Failed to create ${claudeDir}:`, error);
|
|
124
|
+
process.exit(1);
|
|
110
125
|
}
|
|
111
126
|
}
|
|
112
127
|
// Get the root directory of the devflow package
|
|
@@ -156,135 +171,63 @@ export const initCommand = new Command('init')
|
|
|
156
171
|
for (const script of scripts) {
|
|
157
172
|
await fs.chmod(path.join(scriptsDir, script), 0o755);
|
|
158
173
|
}
|
|
159
|
-
console.log('✓ Claude Code detected');
|
|
160
174
|
console.log('✓ Installing components... (commands, agents, skills, scripts)');
|
|
161
|
-
// Install settings
|
|
175
|
+
// Install settings.json - never override existing files (atomic operation)
|
|
162
176
|
const settingsPath = path.join(claudeDir, 'settings.json');
|
|
163
|
-
const managedSettingsPath = path.join(claudeDir, 'managed-settings.json');
|
|
164
177
|
const devflowSettingsPath = path.join(claudeDir, 'settings.devflow.json');
|
|
165
178
|
const sourceSettingsPath = path.join(claudeSourceDir, 'settings.json');
|
|
166
179
|
// Read template and replace ~ with actual home directory
|
|
167
180
|
const settingsTemplate = await fs.readFile(sourceSettingsPath, 'utf-8');
|
|
168
181
|
const settingsContent = settingsTemplate.replace(/~\/\.devflow\/scripts\/statusline\.sh/g, path.join(devflowDir, 'scripts', 'statusline.sh'));
|
|
169
|
-
let
|
|
170
|
-
|
|
171
|
-
//
|
|
172
|
-
|
|
173
|
-
|
|
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';
|
|
182
|
+
let settingsExists = false;
|
|
183
|
+
try {
|
|
184
|
+
// Atomic exclusive create - fails if file already exists
|
|
185
|
+
await fs.writeFile(settingsPath, settingsContent, { encoding: 'utf-8', flag: 'wx' });
|
|
186
|
+
console.log('✓ Settings configured');
|
|
181
187
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
await fs.
|
|
187
|
-
|
|
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
|
-
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
if (error.code === 'EEXIST') {
|
|
190
|
+
// Existing settings.json found - install as settings.devflow.json
|
|
191
|
+
settingsExists = true;
|
|
192
|
+
await fs.writeFile(devflowSettingsPath, settingsContent, 'utf-8');
|
|
193
|
+
console.log('⚠️ Existing settings.json preserved → DevFlow config: settings.devflow.json');
|
|
201
194
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
await fs.writeFile(settingsPath, settingsContent, 'utf-8');
|
|
205
|
-
settingsAction = 'fresh-install';
|
|
195
|
+
else {
|
|
196
|
+
throw error;
|
|
206
197
|
}
|
|
207
198
|
}
|
|
208
|
-
// Install CLAUDE.md
|
|
199
|
+
// Install CLAUDE.md - never override existing files (atomic operation)
|
|
209
200
|
const claudeMdPath = path.join(claudeDir, 'CLAUDE.md');
|
|
210
201
|
const devflowClaudeMdPath = path.join(claudeDir, 'CLAUDE.devflow.md');
|
|
211
202
|
const sourceClaudeMdPath = path.join(claudeSourceDir, 'CLAUDE.md');
|
|
212
|
-
let
|
|
213
|
-
|
|
214
|
-
//
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
219
|
-
catch {
|
|
220
|
-
// No existing file
|
|
221
|
-
}
|
|
222
|
-
await fs.copyFile(sourceClaudeMdPath, claudeMdPath);
|
|
223
|
-
claudeMdAction = 'force-installed';
|
|
203
|
+
let claudeMdExists = false;
|
|
204
|
+
try {
|
|
205
|
+
// Atomic exclusive create - fails if file already exists
|
|
206
|
+
const content = await fs.readFile(sourceClaudeMdPath, 'utf-8');
|
|
207
|
+
await fs.writeFile(claudeMdPath, content, { encoding: 'utf-8', flag: 'wx' });
|
|
208
|
+
console.log('✓ CLAUDE.md configured');
|
|
224
209
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
await fs.access(claudeMdPath);
|
|
230
|
-
// User has CLAUDE.md - install as CLAUDE.devflow.md
|
|
210
|
+
catch (error) {
|
|
211
|
+
if (error.code === 'EEXIST') {
|
|
212
|
+
// Existing CLAUDE.md found - install as CLAUDE.devflow.md
|
|
213
|
+
claudeMdExists = true;
|
|
231
214
|
await fs.copyFile(sourceClaudeMdPath, devflowClaudeMdPath);
|
|
232
|
-
|
|
215
|
+
console.log('⚠️ Existing CLAUDE.md preserved → DevFlow guide: CLAUDE.devflow.md');
|
|
233
216
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
await fs.copyFile(sourceClaudeMdPath, claudeMdPath);
|
|
237
|
-
claudeMdAction = 'fresh-install';
|
|
217
|
+
else {
|
|
218
|
+
throw error;
|
|
238
219
|
}
|
|
239
220
|
}
|
|
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
221
|
// Create .claudeignore in git repository root
|
|
263
222
|
let claudeignoreCreated = false;
|
|
264
223
|
try {
|
|
265
|
-
//
|
|
266
|
-
|
|
267
|
-
|
|
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');
|
|
224
|
+
// Use cached git root (already computed and validated earlier)
|
|
225
|
+
if (!gitRoot) {
|
|
226
|
+
throw new Error('Not in a git repository');
|
|
279
227
|
}
|
|
280
228
|
const claudeignorePath = path.join(gitRoot, '.claudeignore');
|
|
281
|
-
//
|
|
282
|
-
|
|
283
|
-
await fs.access(claudeignorePath);
|
|
284
|
-
}
|
|
285
|
-
catch {
|
|
286
|
-
// Create comprehensive .claudeignore
|
|
287
|
-
const claudeignoreContent = `# DevFlow .claudeignore - Protects against sensitive files and context pollution
|
|
229
|
+
// Atomic exclusive create - only create if doesn't exist
|
|
230
|
+
const claudeignoreContent = `# DevFlow .claudeignore - Protects against sensitive files and context pollution
|
|
288
231
|
# Generated by DevFlow - Edit as needed for your project
|
|
289
232
|
|
|
290
233
|
# === SECURITY: Sensitive Files ===
|
|
@@ -473,9 +416,9 @@ Gemfile.lock
|
|
|
473
416
|
poetry.lock
|
|
474
417
|
Pipfile.lock
|
|
475
418
|
`;
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
419
|
+
// Atomic exclusive create - fails if file already exists
|
|
420
|
+
await fs.writeFile(claudeignorePath, claudeignoreContent, { encoding: 'utf-8', flag: 'wx' });
|
|
421
|
+
claudeignoreCreated = true;
|
|
479
422
|
}
|
|
480
423
|
catch (error) {
|
|
481
424
|
// Not a git repository or other error - skip .claudeignore creation
|
|
@@ -483,6 +426,37 @@ Pipfile.lock
|
|
|
483
426
|
if (claudeignoreCreated) {
|
|
484
427
|
console.log('✓ .claudeignore created');
|
|
485
428
|
}
|
|
429
|
+
// For local scope, update .gitignore to exclude .claude/ and .devflow/
|
|
430
|
+
if (scope === 'local' && gitRoot) {
|
|
431
|
+
try {
|
|
432
|
+
const gitignorePath = path.join(gitRoot, '.gitignore');
|
|
433
|
+
const entriesToAdd = ['.claude/', '.devflow/'];
|
|
434
|
+
let gitignoreContent = '';
|
|
435
|
+
try {
|
|
436
|
+
gitignoreContent = await fs.readFile(gitignorePath, 'utf-8');
|
|
437
|
+
}
|
|
438
|
+
catch {
|
|
439
|
+
// .gitignore doesn't exist, will create it
|
|
440
|
+
}
|
|
441
|
+
const linesToAdd = [];
|
|
442
|
+
for (const entry of entriesToAdd) {
|
|
443
|
+
// Check if entry already exists (exact match or pattern)
|
|
444
|
+
if (!gitignoreContent.split('\n').some(line => line.trim() === entry)) {
|
|
445
|
+
linesToAdd.push(entry);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
if (linesToAdd.length > 0) {
|
|
449
|
+
const newContent = gitignoreContent
|
|
450
|
+
? `${gitignoreContent.trimEnd()}\n\n# DevFlow local scope installation\n${linesToAdd.join('\n')}\n`
|
|
451
|
+
: `# DevFlow local scope installation\n${linesToAdd.join('\n')}\n`;
|
|
452
|
+
await fs.writeFile(gitignorePath, newContent, 'utf-8');
|
|
453
|
+
console.log('✓ .gitignore updated (excluded .claude/ and .devflow/)');
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
catch (error) {
|
|
457
|
+
console.warn('⚠️ Could not update .gitignore:', error instanceof Error ? error.message : error);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
486
460
|
// Offer to install project documentation structure
|
|
487
461
|
let docsCreated = false;
|
|
488
462
|
if (!options.skipDocs) {
|
|
@@ -503,15 +477,16 @@ Pipfile.lock
|
|
|
503
477
|
}
|
|
504
478
|
console.log('\n✅ Installation complete!\n');
|
|
505
479
|
// Show manual merge instructions if needed
|
|
506
|
-
if (
|
|
507
|
-
console.log('
|
|
508
|
-
if (
|
|
509
|
-
console.log(' Settings:
|
|
480
|
+
if (settingsExists || claudeMdExists) {
|
|
481
|
+
console.log('📝 Manual merge recommended:\n');
|
|
482
|
+
if (settingsExists) {
|
|
483
|
+
console.log(' Settings: Review settings.devflow.json and merge desired config into settings.json');
|
|
484
|
+
console.log(' Key setting: statusLine configuration for DevFlow statusline\n');
|
|
510
485
|
}
|
|
511
|
-
if (
|
|
512
|
-
console.log(' Instructions:
|
|
486
|
+
if (claudeMdExists) {
|
|
487
|
+
console.log(' Instructions: Review CLAUDE.devflow.md and adopt desired practices');
|
|
488
|
+
console.log(' This contains DevFlow\'s recommended development patterns\n');
|
|
513
489
|
}
|
|
514
|
-
console.log();
|
|
515
490
|
}
|
|
516
491
|
console.log('Available commands:');
|
|
517
492
|
console.log(' /catch-up Session context and status');
|
|
@@ -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;
|
|
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 {
|
|
4
|
+
import { getInstallationPaths, getClaudeDirectory } from '../utils/paths.js';
|
|
5
|
+
import { getGitRoot } from '../utils/git.js';
|
|
5
6
|
/**
|
|
6
|
-
*
|
|
7
|
-
* Priority: process.env.HOME > os.homedir()
|
|
7
|
+
* Check if DevFlow is installed at the given paths
|
|
8
8
|
*/
|
|
9
|
-
function
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
42
|
-
let
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
devflowScriptsDir = getDevFlowDirectory();
|
|
24
|
+
// Determine which scopes to uninstall
|
|
25
|
+
let scopesToUninstall = [];
|
|
26
|
+
if (options.scope) {
|
|
27
|
+
scopesToUninstall = [options.scope.toLowerCase()];
|
|
46
28
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
//
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
63
|
-
|
|
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.
|
|
67
|
-
|
|
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) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get git repository root directory (async, non-blocking)
|
|
3
|
+
* Returns null if not in a git repository
|
|
4
|
+
*
|
|
5
|
+
* Security: Validates output to prevent command injection
|
|
6
|
+
* - Rejects paths with injection characters (newlines, semicolons, shell operators)
|
|
7
|
+
* - Ensures path is absolute
|
|
8
|
+
* - Resolves path canonically
|
|
9
|
+
*/
|
|
10
|
+
export declare function getGitRoot(): Promise<string | null>;
|
|
11
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/cli/utils/git.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBzD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
const execAsync = promisify(exec);
|
|
5
|
+
/**
|
|
6
|
+
* Get git repository root directory (async, non-blocking)
|
|
7
|
+
* Returns null if not in a git repository
|
|
8
|
+
*
|
|
9
|
+
* Security: Validates output to prevent command injection
|
|
10
|
+
* - Rejects paths with injection characters (newlines, semicolons, shell operators)
|
|
11
|
+
* - Ensures path is absolute
|
|
12
|
+
* - Resolves path canonically
|
|
13
|
+
*/
|
|
14
|
+
export async function getGitRoot() {
|
|
15
|
+
try {
|
|
16
|
+
const { stdout } = await execAsync('git rev-parse --show-toplevel', {
|
|
17
|
+
cwd: process.cwd(),
|
|
18
|
+
encoding: 'utf-8'
|
|
19
|
+
});
|
|
20
|
+
const gitRootRaw = stdout.trim();
|
|
21
|
+
// Validate git root path (security: prevent injection)
|
|
22
|
+
if (!gitRootRaw || gitRootRaw.includes('\n') || gitRootRaw.includes(';') || gitRootRaw.includes('&&')) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
// Validate it's an absolute path
|
|
26
|
+
const gitRoot = path.resolve(gitRootRaw);
|
|
27
|
+
if (!path.isAbsolute(gitRoot)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return gitRoot;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/cli/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,+BAA+B,EAAE;YAClE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAEjC,uDAAuD;QACvD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACtG,OAAO,IAAI,CAAC;QACd,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get home directory with proper fallback and validation
|
|
3
|
+
* Priority: process.env.HOME > os.homedir()
|
|
4
|
+
*
|
|
5
|
+
* @throws {Error} If unable to determine home directory
|
|
6
|
+
*/
|
|
7
|
+
export declare function getHomeDirectory(): string;
|
|
8
|
+
/**
|
|
9
|
+
* Get Claude Code directory with environment variable override support
|
|
10
|
+
* Priority: CLAUDE_CODE_DIR env var > ~/.claude
|
|
11
|
+
*
|
|
12
|
+
* @throws {Error} If CLAUDE_CODE_DIR is invalid (not absolute, outside home)
|
|
13
|
+
*/
|
|
14
|
+
export declare function getClaudeDirectory(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Get DevFlow directory with environment variable override support
|
|
17
|
+
* Priority: DEVFLOW_DIR env var > ~/.devflow
|
|
18
|
+
*
|
|
19
|
+
* @throws {Error} If DEVFLOW_DIR is invalid (not absolute, outside home)
|
|
20
|
+
*/
|
|
21
|
+
export declare function getDevFlowDirectory(): string;
|
|
22
|
+
/**
|
|
23
|
+
* Get installation paths based on scope (async, non-blocking)
|
|
24
|
+
* @param scope - 'user' or 'local'
|
|
25
|
+
* @returns Object with claudeDir and devflowDir
|
|
26
|
+
* @throws {Error} If local scope selected but not in a git repository
|
|
27
|
+
*/
|
|
28
|
+
export declare function getInstallationPaths(scope: 'user' | 'local'): Promise<{
|
|
29
|
+
claudeDir: string;
|
|
30
|
+
devflowDir: string;
|
|
31
|
+
}>;
|
|
32
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/cli/utils/paths.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAMzC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAkB3C;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAkB5C;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBtH"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { homedir } from 'os';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { getGitRoot } from './git.js';
|
|
4
|
+
/**
|
|
5
|
+
* Get home directory with proper fallback and validation
|
|
6
|
+
* Priority: process.env.HOME > os.homedir()
|
|
7
|
+
*
|
|
8
|
+
* @throws {Error} If unable to determine home directory
|
|
9
|
+
*/
|
|
10
|
+
export function getHomeDirectory() {
|
|
11
|
+
const home = process.env.HOME || homedir();
|
|
12
|
+
if (!home) {
|
|
13
|
+
throw new Error('Unable to determine home directory. Set HOME environment variable.');
|
|
14
|
+
}
|
|
15
|
+
return home;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get Claude Code directory with environment variable override support
|
|
19
|
+
* Priority: CLAUDE_CODE_DIR env var > ~/.claude
|
|
20
|
+
*
|
|
21
|
+
* @throws {Error} If CLAUDE_CODE_DIR is invalid (not absolute, outside home)
|
|
22
|
+
*/
|
|
23
|
+
export function getClaudeDirectory() {
|
|
24
|
+
if (process.env.CLAUDE_CODE_DIR) {
|
|
25
|
+
const customDir = process.env.CLAUDE_CODE_DIR;
|
|
26
|
+
// Validate path is absolute
|
|
27
|
+
if (!path.isAbsolute(customDir)) {
|
|
28
|
+
throw new Error('CLAUDE_CODE_DIR must be an absolute path');
|
|
29
|
+
}
|
|
30
|
+
// Warn if outside home directory (security best practice)
|
|
31
|
+
const home = getHomeDirectory();
|
|
32
|
+
if (!customDir.startsWith(home)) {
|
|
33
|
+
console.warn('⚠️ CLAUDE_CODE_DIR is outside home directory. Ensure this is intentional.');
|
|
34
|
+
}
|
|
35
|
+
return customDir;
|
|
36
|
+
}
|
|
37
|
+
return path.join(getHomeDirectory(), '.claude');
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get DevFlow directory with environment variable override support
|
|
41
|
+
* Priority: DEVFLOW_DIR env var > ~/.devflow
|
|
42
|
+
*
|
|
43
|
+
* @throws {Error} If DEVFLOW_DIR is invalid (not absolute, outside home)
|
|
44
|
+
*/
|
|
45
|
+
export function getDevFlowDirectory() {
|
|
46
|
+
if (process.env.DEVFLOW_DIR) {
|
|
47
|
+
const customDir = process.env.DEVFLOW_DIR;
|
|
48
|
+
// Validate path is absolute
|
|
49
|
+
if (!path.isAbsolute(customDir)) {
|
|
50
|
+
throw new Error('DEVFLOW_DIR must be an absolute path');
|
|
51
|
+
}
|
|
52
|
+
// Warn if outside home directory (security best practice)
|
|
53
|
+
const home = getHomeDirectory();
|
|
54
|
+
if (!customDir.startsWith(home)) {
|
|
55
|
+
console.warn('⚠️ DEVFLOW_DIR is outside home directory. Ensure this is intentional.');
|
|
56
|
+
}
|
|
57
|
+
return customDir;
|
|
58
|
+
}
|
|
59
|
+
return path.join(getHomeDirectory(), '.devflow');
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get installation paths based on scope (async, non-blocking)
|
|
63
|
+
* @param scope - 'user' or 'local'
|
|
64
|
+
* @returns Object with claudeDir and devflowDir
|
|
65
|
+
* @throws {Error} If local scope selected but not in a git repository
|
|
66
|
+
*/
|
|
67
|
+
export async function getInstallationPaths(scope) {
|
|
68
|
+
if (scope === 'user') {
|
|
69
|
+
return {
|
|
70
|
+
claudeDir: getClaudeDirectory(),
|
|
71
|
+
devflowDir: getDevFlowDirectory()
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// Local scope - install to git repository root
|
|
76
|
+
const gitRoot = await getGitRoot();
|
|
77
|
+
if (!gitRoot) {
|
|
78
|
+
throw new Error('Local scope requires a git repository. Run "git init" first or use --scope user');
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
claudeDir: path.join(gitRoot, '.claude'),
|
|
82
|
+
devflowDir: path.join(gitRoot, '.devflow')
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/cli/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAE9C,4BAA4B;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,0DAA0D;QAC1D,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAE1C,4BAA4B;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,0DAA0D;QAC1D,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAuB;IAChE,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO;YACL,SAAS,EAAE,kBAAkB,EAAE;YAC/B,UAAU,EAAE,mBAAmB,EAAE;SAClC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,+CAA+C;QAC/C,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;QACrG,CAAC;QACD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;YACxC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;SAC3C,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED