333 lines
8.2 KiB
Markdown
333 lines
8.2 KiB
Markdown
---
|
||
description: Delete a project from CCPM configuration
|
||
allowed-tools: [Bash, Read, Edit, AskUserQuestion]
|
||
argument-hint: <project-id> [--force]
|
||
---
|
||
|
||
# Delete Project from CCPM
|
||
|
||
Remove a project configuration from `~/.claude/ccpm-config.yaml`.
|
||
|
||
## Arguments
|
||
|
||
- **$1** - Project ID (required)
|
||
- **--force** - Skip confirmation (optional, dangerous)
|
||
|
||
## Usage
|
||
|
||
```bash
|
||
# Interactive delete with confirmation
|
||
/ccpm:project:delete my-app
|
||
|
||
# Force delete without confirmation
|
||
/ccpm:project:delete my-app --force
|
||
```
|
||
|
||
## Workflow
|
||
|
||
### Step 1: Validate Project Exists
|
||
|
||
```bash
|
||
CONFIG_FILE="$HOME/.claude/ccpm-config.yaml"
|
||
PROJECT_ID=$1
|
||
|
||
if [[ ! -f "$CONFIG_FILE" ]]; then
|
||
echo "❌ Error: No CCPM configuration found"
|
||
exit(1)
|
||
fi
|
||
|
||
if ! yq eval ".projects.$PROJECT_ID" "$CONFIG_FILE" > /dev/null 2>&1; then
|
||
echo "❌ Error: Project '$PROJECT_ID' not found"
|
||
echo ""
|
||
echo "Available projects:"
|
||
yq eval '.projects | keys | .[]' "$CONFIG_FILE"
|
||
exit(1)
|
||
fi
|
||
```
|
||
|
||
### Step 2: Load and Display Project Info
|
||
|
||
```javascript
|
||
const projectConfig = await yq(`.projects.${projectId}`, CONFIG_FILE)
|
||
|
||
console.log(`
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
⚠️ Delete Project: ${projectId}
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
Project will be removed:
|
||
Name: ${projectConfig.name}
|
||
Description: ${projectConfig.description || "N/A"}
|
||
Linear: ${projectConfig.linear.team} / ${projectConfig.linear.project}
|
||
Repository: ${projectConfig.repository?.url || "N/A"}
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
⚠️ WARNING
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
This will remove the project configuration from CCPM.
|
||
|
||
What will happen:
|
||
✓ Project removed from ~/.claude/ccpm-config.yaml
|
||
✓ CCPM commands will no longer recognize this project
|
||
✓ You can re-add the project later if needed
|
||
|
||
What will NOT happen:
|
||
✗ No data in Linear will be deleted
|
||
✗ No data in Jira/Confluence will be deleted
|
||
✗ No code repositories will be affected
|
||
✗ No files in your project will be deleted
|
||
|
||
This ONLY removes the CCPM configuration for this project.
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
`)
|
||
```
|
||
|
||
### Step 3: Confirm Deletion
|
||
|
||
If `--force` flag is NOT provided:
|
||
|
||
```javascript
|
||
{
|
||
questions: [{
|
||
question: `Are you sure you want to delete project '${projectId}'?`,
|
||
header: "Confirm Delete",
|
||
multiSelect: false,
|
||
options: [
|
||
{
|
||
label: "Yes, delete it",
|
||
description: "Remove project from CCPM configuration"
|
||
},
|
||
{
|
||
label: "Show details first",
|
||
description: "View full project configuration before deleting"
|
||
},
|
||
{
|
||
label: "No, cancel",
|
||
description: "Keep the project"
|
||
}
|
||
]
|
||
}]
|
||
}
|
||
```
|
||
|
||
If user selects "Show details first":
|
||
```bash
|
||
# Run /ccpm:project:show internally
|
||
/ccpm:project:show $PROJECT_ID
|
||
|
||
# Then ask again
|
||
{
|
||
questions: [{
|
||
question: "After reviewing, do you want to delete this project?",
|
||
header: "Confirm Delete",
|
||
multiSelect: false,
|
||
options: [
|
||
{
|
||
label: "Yes, delete it",
|
||
description: "Remove project from CCPM"
|
||
},
|
||
{
|
||
label: "No, keep it",
|
||
description: "Cancel deletion"
|
||
}
|
||
]
|
||
}]
|
||
}
|
||
```
|
||
|
||
### Step 4: Check if Project is Active
|
||
|
||
```javascript
|
||
const isActive = await isActiveProject(projectId)
|
||
|
||
if (isActive) {
|
||
console.log(`
|
||
⚠️ Additional Warning: Active Project
|
||
|
||
This project is currently active (auto-detected from your working directory).
|
||
|
||
If you delete it, you'll need to:
|
||
1. Use /ccpm:project:set <other-project> to switch, OR
|
||
2. Navigate to a different project directory, OR
|
||
3. CCPM commands will prompt you to select a project
|
||
|
||
`)
|
||
|
||
// Ask for additional confirmation
|
||
{
|
||
questions: [{
|
||
question: "This is your active project. Still delete?",
|
||
header: "Active Project",
|
||
multiSelect: false,
|
||
options: [
|
||
{
|
||
label: "Yes, delete anyway",
|
||
description: "I understand this is active"
|
||
},
|
||
{
|
||
label: "No, cancel",
|
||
description: "Keep the active project"
|
||
}
|
||
]
|
||
}]
|
||
}
|
||
}
|
||
```
|
||
|
||
### Step 5: Perform Deletion
|
||
|
||
```bash
|
||
# Create backup first
|
||
BACKUP_FILE="$HOME/.claude/ccpm-config.backup.$(date +%Y%m%d_%H%M%S).yaml"
|
||
cp "$CONFIG_FILE" "$BACKUP_FILE"
|
||
|
||
echo "📦 Backup created: $BACKUP_FILE"
|
||
echo ""
|
||
|
||
# Delete the project using yq
|
||
yq eval -i "del(.projects.$PROJECT_ID)" "$CONFIG_FILE"
|
||
|
||
echo "✅ Project deleted successfully!"
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "📝 Summary"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo ""
|
||
echo "Deleted: $PROJECT_ID"
|
||
echo "Backup: $BACKUP_FILE"
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "📝 Next Steps"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo ""
|
||
echo "View remaining projects: /ccpm:project:list"
|
||
echo "Add new project: /ccpm:project:add <project-id>"
|
||
echo ""
|
||
echo "To restore (if needed):"
|
||
echo " cp $BACKUP_FILE $CONFIG_FILE"
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
```
|
||
|
||
### Step 6: Cleanup Active Project Context
|
||
|
||
If the deleted project was active:
|
||
|
||
```bash
|
||
# Clear active project context
|
||
yq eval -i '.context.current_project = null' "$CONFIG_FILE"
|
||
|
||
echo ""
|
||
echo "ℹ️ Active project context cleared"
|
||
echo ""
|
||
echo "Next time you run a CCPM command, you'll be prompted to select a project."
|
||
echo "Or set a default: /ccpm:project:set <project-id>"
|
||
```
|
||
|
||
## Safety Features
|
||
|
||
### 1. Always Creates Backup
|
||
|
||
Before deletion, a timestamped backup is created:
|
||
```
|
||
~/.claude/ccpm-config.backup.20250120_143022.yaml
|
||
```
|
||
|
||
### 2. Confirmation Required
|
||
|
||
Unless `--force` is used, user must confirm:
|
||
- Once for regular projects
|
||
- Twice for active projects
|
||
|
||
### 3. Clear Communication
|
||
|
||
The command clearly states what WILL and WILL NOT be deleted.
|
||
|
||
### 4. Easy Restoration
|
||
|
||
Backup file path is provided for easy restoration if needed.
|
||
|
||
## Examples
|
||
|
||
### Example 1: Delete with confirmation
|
||
|
||
```bash
|
||
/ccpm:project:delete old-project
|
||
|
||
# Shows project details
|
||
# Asks for confirmation
|
||
# Creates backup
|
||
# Deletes configuration
|
||
# ✅ Done
|
||
```
|
||
|
||
### Example 2: Delete active project
|
||
|
||
```bash
|
||
/ccpm:project:delete my-current-app
|
||
|
||
# Shows project details
|
||
# ⚠️ Warns it's the active project
|
||
# Asks for confirmation twice
|
||
# Creates backup
|
||
# Deletes configuration
|
||
# Clears active project context
|
||
# ✅ Done
|
||
```
|
||
|
||
### Example 3: Force delete (no confirmation)
|
||
|
||
```bash
|
||
/ccpm:project:delete temp-project --force
|
||
|
||
# ⚠️ DANGEROUS: Skips all confirmations
|
||
# Creates backup
|
||
# Deletes immediately
|
||
# ✅ Done
|
||
|
||
# Use with caution!
|
||
```
|
||
|
||
### Example 4: Restore from backup
|
||
|
||
```bash
|
||
# If you deleted by mistake:
|
||
cp ~/.claude/ccpm-config.backup.20250120_143022.yaml ~/.claude/ccpm-config.yaml
|
||
|
||
# Or run:
|
||
/ccpm:project:list # Shows the backup file path
|
||
|
||
# Then manually restore
|
||
```
|
||
|
||
## What Gets Deleted
|
||
|
||
### Deleted ✓
|
||
|
||
- Project configuration in `~/.claude/ccpm-config.yaml`
|
||
- Project entry from CCPM's project list
|
||
- Active project context (if applicable)
|
||
|
||
### NOT Deleted ✗
|
||
|
||
- Linear issues and data
|
||
- Jira tickets and data
|
||
- Confluence pages
|
||
- Slack messages
|
||
- Git repositories
|
||
- Local project files
|
||
- Any actual code or data
|
||
|
||
**This command ONLY removes the CCPM configuration, not any actual project data.**
|
||
|
||
## Notes
|
||
|
||
- Always creates a timestamped backup before deletion
|
||
- Can be safely restored from backup
|
||
- Does not affect any external systems
|
||
- Use `--force` carefully (skips all confirmations)
|
||
- Active projects require extra confirmation
|
||
- Configuration file: `~/.claude/ccpm-config.yaml`
|