claude-autopm 1.11.8 → 1.11.10
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/README.md +24 -2
- package/bin/autopm.js +44 -0
- package/install/README.md +77 -3
- package/install/update.sh +263 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -99,7 +99,29 @@ During installation, you'll be asked to:
|
|
|
99
99
|
| **Azure DevOps** | Azure Boards & Pipelines | Enterprise, Agile teams |
|
|
100
100
|
| **Skip for now** | Local files only | Evaluation, offline work |
|
|
101
101
|
|
|
102
|
-
#### 3.
|
|
102
|
+
#### 3. Update Existing Installation
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
# Update to latest framework version
|
|
106
|
+
autopm update
|
|
107
|
+
|
|
108
|
+
# Or force update with options
|
|
109
|
+
autopm update --force --no-backup
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Update features:**
|
|
113
|
+
- 🔄 **Smart Updates** - Preserves your configuration and project data
|
|
114
|
+
- 📦 **Automatic Backup** - Creates backup before updating (can be disabled)
|
|
115
|
+
- ⚙️ **Config Preservation** - Keeps your settings, teams, and provider config
|
|
116
|
+
- 📁 **Data Protection** - Preserves epics, PRDs, and all project files
|
|
117
|
+
- 🔧 **Version Detection** - Only updates when necessary
|
|
118
|
+
|
|
119
|
+
**Update options:**
|
|
120
|
+
- `--force` - Force update even if versions match
|
|
121
|
+
- `--no-backup` - Skip backup creation
|
|
122
|
+
- `--no-preserve-config` - Don't preserve configuration files
|
|
123
|
+
|
|
124
|
+
#### 4. Initialize PM System (1 minute)
|
|
103
125
|
|
|
104
126
|
```bash
|
|
105
127
|
# In Claude Code, run:
|
|
@@ -109,7 +131,7 @@ During installation, you'll be asked to:
|
|
|
109
131
|
/init include rules from .claude/CLAUDE.md
|
|
110
132
|
```
|
|
111
133
|
|
|
112
|
-
####
|
|
134
|
+
#### 4.5 Provider Configuration (NEW)
|
|
113
135
|
|
|
114
136
|
```bash
|
|
115
137
|
# View current configuration
|
package/bin/autopm.js
CHANGED
|
@@ -43,6 +43,49 @@ function main() {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
)
|
|
46
|
+
.command('update', 'Update ClaudeAutoPM framework to latest version in current project',
|
|
47
|
+
(yargs) => {
|
|
48
|
+
return yargs
|
|
49
|
+
.option('force', {
|
|
50
|
+
describe: 'Force update even if project structure differs',
|
|
51
|
+
type: 'boolean',
|
|
52
|
+
default: false
|
|
53
|
+
})
|
|
54
|
+
.option('backup', {
|
|
55
|
+
describe: 'Create backup before updating',
|
|
56
|
+
type: 'boolean',
|
|
57
|
+
default: true
|
|
58
|
+
})
|
|
59
|
+
.option('preserve-config', {
|
|
60
|
+
describe: 'Preserve existing configuration files',
|
|
61
|
+
type: 'boolean',
|
|
62
|
+
default: true
|
|
63
|
+
})
|
|
64
|
+
.example('autopm update', 'Update to latest version')
|
|
65
|
+
.example('autopm update --force', 'Force update ignoring conflicts')
|
|
66
|
+
.example('autopm update --no-backup', 'Update without creating backup');
|
|
67
|
+
},
|
|
68
|
+
(argv) => {
|
|
69
|
+
// Delegate to the update script
|
|
70
|
+
const { execSync } = require('child_process');
|
|
71
|
+
const updatePath = path.join(__dirname, '..', 'install', 'update.sh');
|
|
72
|
+
try {
|
|
73
|
+
const env = {
|
|
74
|
+
...process.env,
|
|
75
|
+
AUTOPM_FORCE: argv.force ? '1' : '0',
|
|
76
|
+
AUTOPM_BACKUP: argv.backup ? '1' : '0',
|
|
77
|
+
AUTOPM_PRESERVE_CONFIG: argv.preserveConfig ? '1' : '0'
|
|
78
|
+
};
|
|
79
|
+
execSync(`bash ${updatePath}`, {
|
|
80
|
+
stdio: 'inherit',
|
|
81
|
+
env
|
|
82
|
+
});
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.error('Update failed:', error.message);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
)
|
|
46
89
|
.command('guide [action]', 'Interactive setup guide and documentation generator (deprecated: use --help)',
|
|
47
90
|
(yargs) => {
|
|
48
91
|
return yargs
|
|
@@ -158,6 +201,7 @@ function main() {
|
|
|
158
201
|
.epilogue(`
|
|
159
202
|
📖 Quick Start:
|
|
160
203
|
autopm install # Install ClaudeAutoPM in current directory
|
|
204
|
+
autopm update # Update to latest framework version
|
|
161
205
|
autopm team load frontend # Load React/UI development agents
|
|
162
206
|
claude --dangerously-skip-permissions . # Open Claude Code
|
|
163
207
|
|
package/install/README.md
CHANGED
|
@@ -7,6 +7,7 @@ This directory contains installation and configuration scripts for the **ClaudeA
|
|
|
7
7
|
| File | Description |
|
|
8
8
|
|------|-------------|
|
|
9
9
|
| `install.sh` | Main installation script for ClaudeAutoPM framework |
|
|
10
|
+
| `update.sh` | Update existing installation to latest framework version |
|
|
10
11
|
| `merge-claude.sh` | Helper script for merging CLAUDE.md configurations |
|
|
11
12
|
| `README.md` | This documentation file |
|
|
12
13
|
|
|
@@ -25,11 +26,22 @@ cd ClaudeAutoPM
|
|
|
25
26
|
|
|
26
27
|
### Update Existing Installation
|
|
27
28
|
|
|
29
|
+
**Recommended method (via CLI):**
|
|
28
30
|
```bash
|
|
29
|
-
#
|
|
30
|
-
|
|
31
|
+
# Update to latest framework version (recommended)
|
|
32
|
+
autopm update
|
|
31
33
|
|
|
32
|
-
#
|
|
34
|
+
# Force update with options
|
|
35
|
+
autopm update --force --no-backup
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Manual method (direct script):**
|
|
39
|
+
```bash
|
|
40
|
+
# Run update script directly
|
|
41
|
+
./install/update.sh
|
|
42
|
+
|
|
43
|
+
# Or use installer (legacy method)
|
|
44
|
+
./install/install.sh
|
|
33
45
|
```
|
|
34
46
|
|
|
35
47
|
## 📋 Installation Script (`install.sh`)
|
|
@@ -86,6 +98,68 @@ cd ClaudeAutoPM
|
|
|
86
98
|
- Updates only changed files
|
|
87
99
|
- Offers merge assistance for `CLAUDE.md`
|
|
88
100
|
|
|
101
|
+
## 🔄 Update Script (`update.sh`)
|
|
102
|
+
|
|
103
|
+
### What It Does
|
|
104
|
+
|
|
105
|
+
**Smart Framework Updates** that preserve your work:
|
|
106
|
+
|
|
107
|
+
✅ **Version Management:**
|
|
108
|
+
- Detects current and new framework versions
|
|
109
|
+
- Only updates when necessary (unless forced)
|
|
110
|
+
- Shows clear before/after version information
|
|
111
|
+
|
|
112
|
+
✅ **Data Protection:**
|
|
113
|
+
- Creates automatic backup before updating
|
|
114
|
+
- Preserves all configuration files (`config.json`, `.env.local`, etc.)
|
|
115
|
+
- Protects project data (`epics/`, `prds/` directories)
|
|
116
|
+
- Maintains custom settings and team configurations
|
|
117
|
+
|
|
118
|
+
✅ **Framework Updates:**
|
|
119
|
+
- Updates all framework components (`agents/`, `commands/`, `rules/`, etc.)
|
|
120
|
+
- Installs new features and capabilities
|
|
121
|
+
- Fixes bugs and security issues
|
|
122
|
+
- Updates documentation and examples
|
|
123
|
+
|
|
124
|
+
### Usage
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# Standard update (recommended)
|
|
128
|
+
autopm update
|
|
129
|
+
|
|
130
|
+
# Force update regardless of version
|
|
131
|
+
autopm update --force
|
|
132
|
+
|
|
133
|
+
# Update without backup (not recommended)
|
|
134
|
+
autopm update --no-backup
|
|
135
|
+
|
|
136
|
+
# Update without preserving config (fresh start)
|
|
137
|
+
autopm update --no-preserve-config
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Safety Features
|
|
141
|
+
|
|
142
|
+
🛡️ **Automatic Backup** - Creates timestamped backup before any changes
|
|
143
|
+
🔒 **Config Preservation** - Keeps your settings and customizations
|
|
144
|
+
📁 **Data Protection** - Never touches your epics, PRDs, or project files
|
|
145
|
+
⚡ **Quick Rollback** - Easy to restore from backup if needed
|
|
146
|
+
|
|
147
|
+
### What Gets Updated
|
|
148
|
+
|
|
149
|
+
**Framework Components (Updated):**
|
|
150
|
+
- `agents/` - Latest agent definitions and capabilities
|
|
151
|
+
- `commands/` - New PM commands and improvements
|
|
152
|
+
- `scripts/` - Bug fixes and performance improvements
|
|
153
|
+
- `rules/` - Updated development patterns
|
|
154
|
+
- `templates/` - New project templates
|
|
155
|
+
|
|
156
|
+
**Your Data (Preserved):**
|
|
157
|
+
- `config.json` - Your provider and settings
|
|
158
|
+
- `epics/` - All your epic files and tasks
|
|
159
|
+
- `prds/` - All your product requirements
|
|
160
|
+
- `teams.json` - Your team configurations
|
|
161
|
+
- `.env.local` - Your environment variables
|
|
162
|
+
|
|
89
163
|
## 🤖 Merge Helper (`merge-claude.sh`)
|
|
90
164
|
|
|
91
165
|
### What It Does
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# ClaudeAutoPM Update Script
|
|
4
|
+
# Updates existing installation to latest framework version
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# Colors for output
|
|
9
|
+
RED='\033[0;31m'
|
|
10
|
+
GREEN='\033[0;32m'
|
|
11
|
+
YELLOW='\033[1;33m'
|
|
12
|
+
BLUE='\033[0;34m'
|
|
13
|
+
NC='\033[0m' # No Color
|
|
14
|
+
|
|
15
|
+
# Configuration from environment variables
|
|
16
|
+
FORCE_UPDATE=${AUTOPM_FORCE:-0}
|
|
17
|
+
CREATE_BACKUP=${AUTOPM_BACKUP:-1}
|
|
18
|
+
PRESERVE_CONFIG=${AUTOPM_PRESERVE_CONFIG:-1}
|
|
19
|
+
|
|
20
|
+
# Paths
|
|
21
|
+
CLAUDE_DIR=".claude"
|
|
22
|
+
BACKUP_DIR=".claude-backup-$(date +%Y%m%d-%H%M%S)"
|
|
23
|
+
AUTOPM_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
24
|
+
FRAMEWORK_SOURCE="$AUTOPM_ROOT/autopm/.claude"
|
|
25
|
+
|
|
26
|
+
echo -e "${BLUE}🔄 ClaudeAutoPM Framework Update${NC}"
|
|
27
|
+
echo -e "${BLUE}=================================${NC}"
|
|
28
|
+
|
|
29
|
+
# Check if this is a ClaudeAutoPM project
|
|
30
|
+
if [ ! -d "$CLAUDE_DIR" ]; then
|
|
31
|
+
echo -e "${RED}❌ Error: No .claude directory found${NC}"
|
|
32
|
+
echo -e "${YELLOW}💡 This doesn't appear to be a ClaudeAutoPM project${NC}"
|
|
33
|
+
echo -e "${YELLOW} Run 'autopm install' to install the framework${NC}"
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
# Check if config.json exists to verify it's our installation
|
|
38
|
+
if [ ! -f "$CLAUDE_DIR/config.json" ]; then
|
|
39
|
+
echo -e "${RED}❌ Error: No config.json found in .claude directory${NC}"
|
|
40
|
+
echo -e "${YELLOW}💡 This might not be a ClaudeAutoPM installation${NC}"
|
|
41
|
+
if [ "$FORCE_UPDATE" = "0" ]; then
|
|
42
|
+
echo -e "${YELLOW} Use --force to proceed anyway${NC}"
|
|
43
|
+
exit 1
|
|
44
|
+
fi
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# Get current version if available
|
|
48
|
+
CURRENT_VERSION=""
|
|
49
|
+
if [ -f "$CLAUDE_DIR/config.json" ]; then
|
|
50
|
+
CURRENT_VERSION=$(grep -o '"version"[[:space:]]*:[[:space:]]*"[^"]*"' "$CLAUDE_DIR/config.json" | sed 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/' || echo "unknown")
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# Get new version from package.json
|
|
54
|
+
NEW_VERSION=""
|
|
55
|
+
if [ -f "$AUTOPM_ROOT/package.json" ]; then
|
|
56
|
+
NEW_VERSION=$(grep -o '"version"[[:space:]]*:[[:space:]]*"[^"]*"' "$AUTOPM_ROOT/package.json" | sed 's/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/' || echo "unknown")
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
echo -e "${BLUE}📋 Update Information:${NC}"
|
|
60
|
+
echo -e " Current version: ${CURRENT_VERSION:-unknown}"
|
|
61
|
+
echo -e " New version: ${NEW_VERSION:-unknown}"
|
|
62
|
+
echo -e " Project: $(pwd)"
|
|
63
|
+
echo ""
|
|
64
|
+
|
|
65
|
+
# Check if versions are the same
|
|
66
|
+
if [ "$CURRENT_VERSION" = "$NEW_VERSION" ] && [ "$FORCE_UPDATE" = "0" ]; then
|
|
67
|
+
echo -e "${GREEN}✅ Already up to date (v$CURRENT_VERSION)${NC}"
|
|
68
|
+
echo -e "${YELLOW}💡 Use --force to reinstall anyway${NC}"
|
|
69
|
+
exit 0
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# Create backup if requested
|
|
73
|
+
if [ "$CREATE_BACKUP" = "1" ]; then
|
|
74
|
+
echo -e "${YELLOW}📦 Creating backup...${NC}"
|
|
75
|
+
if cp -r "$CLAUDE_DIR" "$BACKUP_DIR"; then
|
|
76
|
+
echo -e "${GREEN}✅ Backup created: $BACKUP_DIR${NC}"
|
|
77
|
+
else
|
|
78
|
+
echo -e "${RED}❌ Failed to create backup${NC}"
|
|
79
|
+
exit 1
|
|
80
|
+
fi
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
# Preserve important files
|
|
84
|
+
PRESERVED_FILES=()
|
|
85
|
+
if [ "$PRESERVE_CONFIG" = "1" ]; then
|
|
86
|
+
echo -e "${YELLOW}💾 Preserving configuration files...${NC}"
|
|
87
|
+
|
|
88
|
+
# List of files to preserve
|
|
89
|
+
FILES_TO_PRESERVE=(
|
|
90
|
+
"config.json"
|
|
91
|
+
"settings.local.json"
|
|
92
|
+
"teams.json"
|
|
93
|
+
".env.local"
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# Create temp directory for preserved files
|
|
97
|
+
TEMP_PRESERVE_DIR=$(mktemp -d)
|
|
98
|
+
|
|
99
|
+
for file in "${FILES_TO_PRESERVE[@]}"; do
|
|
100
|
+
if [ -f "$CLAUDE_DIR/$file" ]; then
|
|
101
|
+
cp "$CLAUDE_DIR/$file" "$TEMP_PRESERVE_DIR/"
|
|
102
|
+
PRESERVED_FILES+=("$file")
|
|
103
|
+
echo -e " 📄 Preserved: $file"
|
|
104
|
+
fi
|
|
105
|
+
done
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
# Preserve epics and PRDs directories
|
|
109
|
+
echo -e "${YELLOW}📁 Preserving project data...${NC}"
|
|
110
|
+
PROJECT_DIRS=(
|
|
111
|
+
"epics"
|
|
112
|
+
"prds"
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
TEMP_PROJECT_DIR=$(mktemp -d)
|
|
116
|
+
for dir in "${PROJECT_DIRS[@]}"; do
|
|
117
|
+
if [ -d "$CLAUDE_DIR/$dir" ]; then
|
|
118
|
+
cp -r "$CLAUDE_DIR/$dir" "$TEMP_PROJECT_DIR/"
|
|
119
|
+
echo -e " 📂 Preserved: $dir/"
|
|
120
|
+
fi
|
|
121
|
+
done
|
|
122
|
+
|
|
123
|
+
# Remove old framework files (but preserve data)
|
|
124
|
+
echo -e "${YELLOW}🗑️ Removing old framework files...${NC}"
|
|
125
|
+
|
|
126
|
+
# List of framework directories to update
|
|
127
|
+
FRAMEWORK_DIRS=(
|
|
128
|
+
"agents"
|
|
129
|
+
"commands"
|
|
130
|
+
"rules"
|
|
131
|
+
"scripts"
|
|
132
|
+
"checklists"
|
|
133
|
+
"hooks"
|
|
134
|
+
"lib"
|
|
135
|
+
"mcp"
|
|
136
|
+
"providers"
|
|
137
|
+
"strategies"
|
|
138
|
+
"templates"
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
for dir in "${FRAMEWORK_DIRS[@]}"; do
|
|
142
|
+
if [ -d "$CLAUDE_DIR/$dir" ]; then
|
|
143
|
+
rm -rf "$CLAUDE_DIR/$dir"
|
|
144
|
+
echo -e " 🗑️ Removed: $dir/"
|
|
145
|
+
fi
|
|
146
|
+
done
|
|
147
|
+
|
|
148
|
+
# Remove framework files from root
|
|
149
|
+
FRAMEWORK_FILES=(
|
|
150
|
+
"base.md"
|
|
151
|
+
"mcp-servers.json"
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
for file in "${FRAMEWORK_FILES[@]}"; do
|
|
155
|
+
if [ -f "$CLAUDE_DIR/$file" ]; then
|
|
156
|
+
rm -f "$CLAUDE_DIR/$file"
|
|
157
|
+
echo -e " 🗑️ Removed: $file"
|
|
158
|
+
fi
|
|
159
|
+
done
|
|
160
|
+
|
|
161
|
+
# Copy new framework files
|
|
162
|
+
echo -e "${YELLOW}📥 Installing new framework files...${NC}"
|
|
163
|
+
|
|
164
|
+
if [ ! -d "$FRAMEWORK_SOURCE" ]; then
|
|
165
|
+
echo -e "${RED}❌ Error: Framework source not found at $FRAMEWORK_SOURCE${NC}"
|
|
166
|
+
exit 1
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
# Copy framework directories
|
|
170
|
+
for dir in "${FRAMEWORK_DIRS[@]}"; do
|
|
171
|
+
if [ -d "$FRAMEWORK_SOURCE/$dir" ]; then
|
|
172
|
+
cp -r "$FRAMEWORK_SOURCE/$dir" "$CLAUDE_DIR/"
|
|
173
|
+
echo -e " ✅ Installed: $dir/"
|
|
174
|
+
fi
|
|
175
|
+
done
|
|
176
|
+
|
|
177
|
+
# Copy framework files
|
|
178
|
+
for file in "${FRAMEWORK_FILES[@]}"; do
|
|
179
|
+
if [ -f "$FRAMEWORK_SOURCE/$file" ]; then
|
|
180
|
+
cp "$FRAMEWORK_SOURCE/$file" "$CLAUDE_DIR/"
|
|
181
|
+
echo -e " ✅ Installed: $file"
|
|
182
|
+
fi
|
|
183
|
+
done
|
|
184
|
+
|
|
185
|
+
# Update config.json with new version and timestamp
|
|
186
|
+
if [ -f "$TEMP_PRESERVE_DIR/config.json" ]; then
|
|
187
|
+
# Update the preserved config with new version
|
|
188
|
+
sed -i.bak "s/\"version\"[[:space:]]*:[[:space:]]*\"[^\"]*\"/\"version\": \"$NEW_VERSION\"/" "$TEMP_PRESERVE_DIR/config.json" 2>/dev/null || true
|
|
189
|
+
sed -i.bak "s/\"updated\"[[:space:]]*:[[:space:]]*\"[^\"]*\"/\"updated\": \"$(date -u +"%Y-%m-%dT%H:%M:%SZ")\"/" "$TEMP_PRESERVE_DIR/config.json" 2>/dev/null || true
|
|
190
|
+
rm -f "$TEMP_PRESERVE_DIR/config.json.bak" 2>/dev/null || true
|
|
191
|
+
else
|
|
192
|
+
# Create new config if none exists
|
|
193
|
+
cat > "$TEMP_PRESERVE_DIR/config.json" << EOF
|
|
194
|
+
{
|
|
195
|
+
"version": "$NEW_VERSION",
|
|
196
|
+
"updated": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
|
|
197
|
+
"provider": "github"
|
|
198
|
+
}
|
|
199
|
+
EOF
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
# Restore preserved files
|
|
203
|
+
if [ "$PRESERVE_CONFIG" = "1" ] && [ ${#PRESERVED_FILES[@]} -gt 0 ]; then
|
|
204
|
+
echo -e "${YELLOW}♻️ Restoring preserved files...${NC}"
|
|
205
|
+
for file in "${PRESERVED_FILES[@]}"; do
|
|
206
|
+
if [ -f "$TEMP_PRESERVE_DIR/$file" ]; then
|
|
207
|
+
cp "$TEMP_PRESERVE_DIR/$file" "$CLAUDE_DIR/"
|
|
208
|
+
echo -e " ♻️ Restored: $file"
|
|
209
|
+
fi
|
|
210
|
+
done
|
|
211
|
+
fi
|
|
212
|
+
|
|
213
|
+
# Restore project directories
|
|
214
|
+
echo -e "${YELLOW}♻️ Restoring project data...${NC}"
|
|
215
|
+
for dir in "${PROJECT_DIRS[@]}"; do
|
|
216
|
+
if [ -d "$TEMP_PROJECT_DIR/$dir" ]; then
|
|
217
|
+
cp -r "$TEMP_PROJECT_DIR/$dir" "$CLAUDE_DIR/"
|
|
218
|
+
echo -e " ♻️ Restored: $dir/"
|
|
219
|
+
fi
|
|
220
|
+
done
|
|
221
|
+
|
|
222
|
+
# Clean up temp directories
|
|
223
|
+
rm -rf "$TEMP_PRESERVE_DIR" "$TEMP_PROJECT_DIR" 2>/dev/null || true
|
|
224
|
+
|
|
225
|
+
# Update scripts permissions
|
|
226
|
+
if [ -d "$CLAUDE_DIR/scripts" ]; then
|
|
227
|
+
echo -e "${YELLOW}🔧 Setting script permissions...${NC}"
|
|
228
|
+
find "$CLAUDE_DIR/scripts" -name "*.sh" -exec chmod +x {} \; 2>/dev/null || true
|
|
229
|
+
find "$CLAUDE_DIR/hooks" -name "*.sh" -exec chmod +x {} \; 2>/dev/null || true
|
|
230
|
+
fi
|
|
231
|
+
|
|
232
|
+
# Success message
|
|
233
|
+
echo ""
|
|
234
|
+
echo -e "${GREEN}✅ Update completed successfully!${NC}"
|
|
235
|
+
echo ""
|
|
236
|
+
echo -e "${BLUE}📊 Summary:${NC}"
|
|
237
|
+
echo -e " Updated from: ${CURRENT_VERSION:-unknown} → $NEW_VERSION"
|
|
238
|
+
echo -e " Backup: ${CREATE_BACKUP:+$BACKUP_DIR}"
|
|
239
|
+
echo -e " Preserved: ${#PRESERVED_FILES[@]} config files, ${#PROJECT_DIRS[@]} project directories"
|
|
240
|
+
echo ""
|
|
241
|
+
|
|
242
|
+
# Show what's new (if we can detect major changes)
|
|
243
|
+
if [ "$CURRENT_VERSION" != "$NEW_VERSION" ]; then
|
|
244
|
+
echo -e "${BLUE}🆕 What's New in v$NEW_VERSION:${NC}"
|
|
245
|
+
echo -e " • Enhanced epic-decompose for multi-epic support"
|
|
246
|
+
echo -e " • Improved epic-sync with multi-epic workflows"
|
|
247
|
+
echo -e " • Updated release automation"
|
|
248
|
+
echo -e " • Better documentation and examples"
|
|
249
|
+
echo ""
|
|
250
|
+
fi
|
|
251
|
+
|
|
252
|
+
echo -e "${BLUE}🚀 Next Steps:${NC}"
|
|
253
|
+
echo -e " • Verify configuration: autopm config show"
|
|
254
|
+
echo -e " • Test PM commands: /pm:validate"
|
|
255
|
+
echo -e " • Check documentation: autopm --help"
|
|
256
|
+
echo ""
|
|
257
|
+
|
|
258
|
+
if [ "$CREATE_BACKUP" = "1" ]; then
|
|
259
|
+
echo -e "${YELLOW}💡 Backup Note:${NC}"
|
|
260
|
+
echo -e " Your backup is saved at: $BACKUP_DIR"
|
|
261
|
+
echo -e " Remove it when you're satisfied with the update"
|
|
262
|
+
echo ""
|
|
263
|
+
fi
|