213 lines
4.9 KiB
Markdown
213 lines
4.9 KiB
Markdown
# Project Maps Generate Command
|
|
|
|
Generate project context maps for the current project.
|
|
|
|
## Usage
|
|
|
|
```
|
|
/project-maps-generate [--path <project-path>]
|
|
```
|
|
|
|
## Options
|
|
|
|
- `--path <path>`: Project path to scan (defaults to current directory)
|
|
- No options: Generate maps for current working directory
|
|
|
|
## Implementation
|
|
|
|
### Step 1: Determine Project Path
|
|
|
|
Parse command arguments to determine project path:
|
|
|
|
```javascript
|
|
const args = process.argv.slice(2);
|
|
const pathIndex = args.indexOf('--path');
|
|
const projectPath = pathIndex >= 0 && args[pathIndex + 1]
|
|
? args[pathIndex + 1]
|
|
: process.cwd();
|
|
```
|
|
|
|
Default to current working directory if no path specified.
|
|
|
|
### Step 2: Check if Maps Already Exist
|
|
|
|
Check if maps have already been generated for this project:
|
|
|
|
```bash
|
|
cd {working_directory}
|
|
node ${CLAUDE_PLUGIN_ROOT}/cli/lib/map-loader.js {project_path} --staleness-only 2>&1
|
|
```
|
|
|
|
If maps exist (exit code 0), ask user if they want to regenerate:
|
|
|
|
```
|
|
⚠️ Maps already exist for this project
|
|
|
|
Existing maps:
|
|
Location: {maps_dir}
|
|
Last generated: {timestamp}
|
|
Staleness: {score}/100
|
|
|
|
Regenerate maps? This will overwrite existing maps.
|
|
• Yes, regenerate (will take ~10-30 seconds)
|
|
• No, use refresh instead (faster, preserves existing data)
|
|
```
|
|
|
|
If user chooses "No", suggest using refresh instead:
|
|
```
|
|
Tip: Use /project-maps-refresh for faster updates
|
|
```
|
|
|
|
### Step 3: Initialize and Scan Project
|
|
|
|
Show progress and start generation:
|
|
|
|
```
|
|
Generating project context maps...
|
|
|
|
Project: {project_path}
|
|
Project hash: {hash}
|
|
```
|
|
|
|
Run the map generator:
|
|
|
|
```bash
|
|
cd {working_directory}
|
|
node ${CLAUDE_PLUGIN_ROOT}/cli/lib/map-generator.js {project_path}
|
|
```
|
|
|
|
The map generator will:
|
|
1. Initialize configuration
|
|
2. Scan file system
|
|
3. Generate 11 map files (Phases 1-3)
|
|
4. Apply compression
|
|
5. Save to `~/.claude/project-maps/{project-hash}/`
|
|
|
|
### Step 4: Show Progress
|
|
|
|
The map generator outputs progress:
|
|
|
|
```
|
|
Scanning project...
|
|
Scanned 145 files in 127ms
|
|
|
|
Generating maps...
|
|
✓ summary.json (2.1 KB → 907 B, 56% compression)
|
|
✓ tree.json (3.2 KB → 1.4 KB, 56% compression)
|
|
✓ metadata.json (12.5 KB → 5.2 KB, 58% compression)
|
|
✓ content-summaries.json (1.1 KB → 465 B, 58% compression)
|
|
✓ indices.json (11.8 KB → 5.0 KB, 58% compression)
|
|
✓ existence-proofs.json (4.0 KB → 1.7 KB, 58% compression)
|
|
✓ quick-queries.json (6.4 KB → 2.7 KB, 58% compression)
|
|
✓ dependencies-forward.json (1.1 KB → 477 B, 57% compression)
|
|
✓ dependencies-reverse.json (1.1 KB → 445 B, 60% compression)
|
|
✓ relationships.json (1.5 KB → 630 B, 58% compression)
|
|
✓ issues.json (1.3 KB → 557 B, 57% compression)
|
|
```
|
|
|
|
### Step 5: Display Summary
|
|
|
|
After generation completes, show summary:
|
|
|
|
```
|
|
✓ Maps generated successfully!
|
|
|
|
Summary:
|
|
Files scanned: {file_count}
|
|
Maps created: 11
|
|
Storage location: {maps_dir}
|
|
|
|
Total size:
|
|
• Original: {original_size} KB
|
|
• Compressed: {compressed_size} KB
|
|
• Compression: {compression_ratio}%
|
|
|
|
Maps by tier:
|
|
• Tier 1 (Always loaded): summary.json, quick-queries.json
|
|
• Tier 2 (On demand): tree.json, existence-proofs.json
|
|
• Tier 3 (When needed): metadata.json, content-summaries.json, indices.json
|
|
• Tier 4 (Deep analysis): dependencies-*.json, relationships.json, issues.json
|
|
|
|
Next steps:
|
|
• Load maps: /project-maps-load
|
|
• Quick queries: /project-maps-query
|
|
• Refresh maps: /project-maps-refresh
|
|
```
|
|
|
|
### Step 6: Verify Generation
|
|
|
|
Verify all expected files were created:
|
|
|
|
```bash
|
|
ls -lh ~/.claude/project-maps/{project_hash}/*.json | wc -l
|
|
```
|
|
|
|
Expected: 11 files
|
|
|
|
If count != 11, show warning:
|
|
```
|
|
⚠️ Warning: Expected 11 map files but found {actual_count}
|
|
Some maps may have failed to generate.
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
**Project path doesn't exist:**
|
|
```
|
|
❌ Error: Project path not found
|
|
|
|
Path: {project_path}
|
|
Please check the path and try again.
|
|
```
|
|
|
|
**Permission denied:**
|
|
```
|
|
❌ Error: Permission denied
|
|
|
|
Cannot write to: ~/.claude/project-maps/
|
|
Check directory permissions.
|
|
```
|
|
|
|
**Generation failed:**
|
|
```
|
|
❌ Map generation failed: {error_message}
|
|
|
|
Possible causes:
|
|
1. Insufficient disk space
|
|
2. Invalid project structure
|
|
3. File access permissions
|
|
|
|
Try:
|
|
• Check disk space
|
|
• Verify project directory is accessible
|
|
• Run with --verbose for more details
|
|
```
|
|
|
|
**No files found:**
|
|
```
|
|
⚠️ No files found in project
|
|
|
|
The project appears to be empty or all files are excluded.
|
|
Check your .gitignore or .projectmaprc configuration.
|
|
```
|
|
|
|
## Performance Notes
|
|
|
|
- Small projects (<100 files): ~5-10 seconds
|
|
- Medium projects (100-1000 files): ~10-30 seconds
|
|
- Large projects (1000+ files): ~30-60 seconds
|
|
- Generation happens once, subsequent updates use incremental refresh (much faster)
|
|
|
|
## Examples
|
|
|
|
```bash
|
|
# Generate maps for current directory
|
|
/project-maps-generate
|
|
|
|
# Generate maps for specific project
|
|
/project-maps-generate --path /path/to/project
|
|
|
|
# Generate with verbose output
|
|
/project-maps-generate --verbose
|
|
```
|