claude-autopm 1.23.2 ā 1.24.2
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 +1 -1
- package/autopm/.claude/agents/frameworks/e2e-test-engineer.md +26 -1
- package/autopm/.claude/agents/frameworks/nats-messaging-expert.md +28 -3
- package/autopm/.claude/agents/frameworks/react-frontend-engineer.md +26 -1
- package/autopm/.claude/agents/frameworks/react-ui-expert.md +26 -1
- package/autopm/.claude/agents/frameworks/tailwindcss-expert.md +26 -1
- package/autopm/.claude/agents/frameworks/ux-design-expert.md +25 -1
- package/autopm/.claude/agents/languages/bash-scripting-expert.md +26 -1
- package/autopm/.claude/agents/languages/javascript-frontend-engineer.md +26 -1
- package/autopm/.claude/agents/languages/nodejs-backend-engineer.md +27 -1
- package/autopm/.claude/agents/languages/python-backend-engineer.md +27 -2
- package/autopm/.claude/agents/languages/python-backend-expert.md +26 -1
- package/autopm/.claude/commands/pm/context-create.md +136 -0
- package/autopm/.claude/commands/pm/context-prime.md +170 -0
- package/autopm/.claude/commands/pm/context-update.md +292 -0
- package/autopm/.claude/commands/pm/epic-decompose.md +19 -0
- package/autopm/.claude/commands/pm/epic-merge.md +2 -2
- package/autopm/.claude/lib/commands/pm/epicSyncTasks.js +190 -0
- package/autopm/.claude/scripts/pm/prd-parse.js +19 -1
- package/autopm/.claude/templates/context-templates/progress.md.template +25 -0
- package/autopm/.claude/templates/context-templates/project-brief.md.template +19 -0
- package/autopm/.claude/templates/context-templates/project-structure.md.template +23 -0
- package/autopm/.claude/templates/context-templates/tech-context.md.template +23 -0
- package/package.json +1 -1
- package/scripts/fix-invalid-command-refs.sh +141 -0
- package/scripts/fix-invalid-refs-simple.sh +49 -0
|
@@ -295,9 +295,27 @@ class PrdParser {
|
|
|
295
295
|
console.log(` ⢠Security: ${technicalApproach.security.length} controls`);
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
+
// Determine if PRD is complex enough to suggest splitting
|
|
299
|
+
const componentCount =
|
|
300
|
+
(technicalApproach.frontend.length > 0 ? 1 : 0) +
|
|
301
|
+
(technicalApproach.backend.length > 0 ? 1 : 0) +
|
|
302
|
+
(technicalApproach.data.length > 0 ? 1 : 0) +
|
|
303
|
+
(technicalApproach.security.length > 0 ? 1 : 0);
|
|
304
|
+
|
|
305
|
+
const isComplexPrd = componentCount >= 3 || tasks.length > 10;
|
|
306
|
+
|
|
298
307
|
console.log(`\nš” Next Steps:`);
|
|
299
308
|
console.log(` 1. Review epic: /pm:epic-show ${featureName}`);
|
|
300
|
-
|
|
309
|
+
|
|
310
|
+
if (isComplexPrd) {
|
|
311
|
+
console.log(` 2. Consider splitting into epics: /pm:epic-split ${featureName}`);
|
|
312
|
+
console.log(` (Complex PRD detected - ${componentCount} components, ${tasks.length} tasks)`);
|
|
313
|
+
console.log(` OR decompose as single epic: /pm:epic-decompose ${featureName}`);
|
|
314
|
+
} else {
|
|
315
|
+
console.log(` 2. Decompose into tasks: /pm:epic-decompose ${featureName}`);
|
|
316
|
+
console.log(` (For complex PRDs, consider: /pm:epic-split ${featureName})`);
|
|
317
|
+
}
|
|
318
|
+
|
|
301
319
|
console.log(` 3. Sync to GitHub: /pm:epic-sync ${featureName}`);
|
|
302
320
|
console.log(` 4. Start implementation: /pm:issue-start TASK-1`);
|
|
303
321
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Project Progress
|
|
2
|
+
|
|
3
|
+
## Current Status
|
|
4
|
+
- Phase: [Phase name]
|
|
5
|
+
- Progress: [X]%
|
|
6
|
+
- Last Updated: [Date]
|
|
7
|
+
|
|
8
|
+
## Completed
|
|
9
|
+
- [x] Task 1
|
|
10
|
+
- [x] Task 2
|
|
11
|
+
|
|
12
|
+
## In Progress
|
|
13
|
+
- [ ] Task 3
|
|
14
|
+
- [ ] Task 4
|
|
15
|
+
|
|
16
|
+
## Next Steps
|
|
17
|
+
1. [Next action]
|
|
18
|
+
2. [Next action]
|
|
19
|
+
|
|
20
|
+
## Blockers
|
|
21
|
+
- [Any blockers]
|
|
22
|
+
|
|
23
|
+
## Recent Updates
|
|
24
|
+
- [Recent change 1]
|
|
25
|
+
- [Recent change 2]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Project Brief
|
|
2
|
+
|
|
3
|
+
## Project Name
|
|
4
|
+
[Project name]
|
|
5
|
+
|
|
6
|
+
## Scope & Objectives
|
|
7
|
+
- Goal: [Primary goal]
|
|
8
|
+
- Target users: [User base]
|
|
9
|
+
- Key outcomes: [Expected results]
|
|
10
|
+
|
|
11
|
+
## Constraints
|
|
12
|
+
- Timeline: [Time constraints]
|
|
13
|
+
- Resources: [Available resources]
|
|
14
|
+
- Technical: [Technical limitations]
|
|
15
|
+
|
|
16
|
+
## Success Criteria
|
|
17
|
+
- [Success criterion 1]
|
|
18
|
+
- [Success criterion 2]
|
|
19
|
+
- [Success criterion 3]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Project Structure
|
|
2
|
+
|
|
3
|
+
## Directory Layout
|
|
4
|
+
```
|
|
5
|
+
project/
|
|
6
|
+
āāā src/ # Source code
|
|
7
|
+
āāā test/ # Tests
|
|
8
|
+
āāā .claude/ # AutoPM configuration
|
|
9
|
+
āāā docs/ # Documentation
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Key Files
|
|
13
|
+
- **package.json**: Dependencies and scripts
|
|
14
|
+
- **.claude/**: PM configuration
|
|
15
|
+
- **README.md**: Project documentation
|
|
16
|
+
|
|
17
|
+
## Module Organization
|
|
18
|
+
- [Module description]
|
|
19
|
+
- [Module description]
|
|
20
|
+
|
|
21
|
+
## Configuration Files
|
|
22
|
+
- [Config file and purpose]
|
|
23
|
+
- [Config file and purpose]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Technical Context
|
|
2
|
+
|
|
3
|
+
## Technology Stack
|
|
4
|
+
- **Frontend**: [Technologies]
|
|
5
|
+
- **Backend**: [Technologies]
|
|
6
|
+
- **Database**: [Database]
|
|
7
|
+
- **Infrastructure**: [Infrastructure]
|
|
8
|
+
|
|
9
|
+
## Development Environment
|
|
10
|
+
- Node.js: [version]
|
|
11
|
+
- Package Manager: [npm/yarn/pnpm]
|
|
12
|
+
- Testing Framework: [Jest/etc]
|
|
13
|
+
|
|
14
|
+
## Dependencies
|
|
15
|
+
[Key dependencies and their purposes]
|
|
16
|
+
|
|
17
|
+
## Architecture Patterns
|
|
18
|
+
- [Pattern 1]
|
|
19
|
+
- [Pattern 2]
|
|
20
|
+
|
|
21
|
+
## Development Practices
|
|
22
|
+
- [Practice 1]
|
|
23
|
+
- [Practice 2]
|
package/package.json
CHANGED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Fix invalid command references in documentation
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "š§ Fixing invalid command references..."
|
|
7
|
+
|
|
8
|
+
# Replacement map (escaped for use in sed)
|
|
9
|
+
declare -A REPLACEMENTS=(
|
|
10
|
+
["\/pm:epic-new"]="\/pm:prd-new"
|
|
11
|
+
["\/pm:done"]="\/pm:issue-close"
|
|
12
|
+
["\/pm:next-task"]="\/pm:next"
|
|
13
|
+
["\/pm:epic-resolve"]="\/pm:epic-close"
|
|
14
|
+
["\/pm:epic-stop"]="\/pm:epic-close"
|
|
15
|
+
["\/pm:prd-split"]="\/pm:epic-split"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# Commands to remove (no replacement) - escaped
|
|
19
|
+
REMOVE_COMMANDS=(
|
|
20
|
+
"\/pm:azure-next"
|
|
21
|
+
"\/pm:azure-sync"
|
|
22
|
+
"\/pm:board"
|
|
23
|
+
"\/pm:build"
|
|
24
|
+
"\/pm:config"
|
|
25
|
+
"\/pm:optimize"
|
|
26
|
+
"\/pm:pr-create"
|
|
27
|
+
"\/pm:pr-list"
|
|
28
|
+
"\/pm:query"
|
|
29
|
+
"\/pm:release"
|
|
30
|
+
"\/pm:report"
|
|
31
|
+
"\/pm:resource"
|
|
32
|
+
"\/pm:resource-action"
|
|
33
|
+
"\/pm:sprint"
|
|
34
|
+
"\/pm:sprint-status"
|
|
35
|
+
"\/pm:sync-all"
|
|
36
|
+
"\/pm:test"
|
|
37
|
+
"\/pm:todo"
|
|
38
|
+
"\/pm:wip"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# Generic commands to remove (too vague) - escaped
|
|
42
|
+
GENERIC_COMMANDS=(
|
|
43
|
+
"\/pm:epic"
|
|
44
|
+
"\/pm:issue"
|
|
45
|
+
"\/pm:prd"
|
|
46
|
+
"\/pm:pr"
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
total_changes=0
|
|
50
|
+
|
|
51
|
+
# Function to replace in file
|
|
52
|
+
replace_in_file() {
|
|
53
|
+
local file="$1"
|
|
54
|
+
local old="$2"
|
|
55
|
+
local new="$3"
|
|
56
|
+
|
|
57
|
+
if grep -q "$old" "$file" 2>/dev/null; then
|
|
58
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
59
|
+
sed -i '' "s|$old|$new|g" "$file"
|
|
60
|
+
else
|
|
61
|
+
sed -i "s|$old|$new|g" "$file"
|
|
62
|
+
fi
|
|
63
|
+
echo " ā $file: $old ā $new"
|
|
64
|
+
((total_changes++))
|
|
65
|
+
fi
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Function to remove command references
|
|
69
|
+
remove_from_file() {
|
|
70
|
+
local file="$1"
|
|
71
|
+
local cmd="$2"
|
|
72
|
+
|
|
73
|
+
if grep -q "$cmd" "$file" 2>/dev/null; then
|
|
74
|
+
# Remove lines containing the command
|
|
75
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
76
|
+
sed -i '' "/$cmd/d" "$file"
|
|
77
|
+
else
|
|
78
|
+
sed -i "/$cmd/d" "$file"
|
|
79
|
+
fi
|
|
80
|
+
echo " ā $file: removed $cmd"
|
|
81
|
+
((total_changes++))
|
|
82
|
+
fi
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
echo ""
|
|
86
|
+
echo "=== Replacing commands with correct alternatives ==="
|
|
87
|
+
for old in "${!REPLACEMENTS[@]}"; do
|
|
88
|
+
new="${REPLACEMENTS[$old]}"
|
|
89
|
+
echo ""
|
|
90
|
+
echo "Replacing: $old ā $new"
|
|
91
|
+
|
|
92
|
+
# Find files with this command (excluding our analysis doc and script)
|
|
93
|
+
while IFS= read -r file; do
|
|
94
|
+
if [[ "$file" != *"MISSING-COMMANDS-ANALYSIS.md"* ]] && \
|
|
95
|
+
[[ "$file" != *"fix-invalid-command-refs.sh"* ]]; then
|
|
96
|
+
replace_in_file "$file" "$old" "$new"
|
|
97
|
+
fi
|
|
98
|
+
done < <(grep -rl "$old" . --include="*.md" 2>/dev/null || true)
|
|
99
|
+
done
|
|
100
|
+
|
|
101
|
+
echo ""
|
|
102
|
+
echo "=== Removing commands with no replacement ==="
|
|
103
|
+
for cmd in "${REMOVE_COMMANDS[@]}"; do
|
|
104
|
+
echo ""
|
|
105
|
+
echo "Removing: $cmd"
|
|
106
|
+
|
|
107
|
+
while IFS= read -r file; do
|
|
108
|
+
if [[ "$file" != *"MISSING-COMMANDS-ANALYSIS.md"* ]] && \
|
|
109
|
+
[[ "$file" != *"fix-invalid-command-refs.sh"* ]]; then
|
|
110
|
+
remove_from_file "$file" "$cmd"
|
|
111
|
+
fi
|
|
112
|
+
done < <(grep -rl "$cmd" . --include="*.md" 2>/dev/null || true)
|
|
113
|
+
done
|
|
114
|
+
|
|
115
|
+
echo ""
|
|
116
|
+
echo "=== Removing generic commands (too vague) ==="
|
|
117
|
+
for cmd in "${GENERIC_COMMANDS[@]}"; do
|
|
118
|
+
echo ""
|
|
119
|
+
echo "Removing: $cmd (too vague - use specific commands instead)"
|
|
120
|
+
|
|
121
|
+
while IFS= read -r file; do
|
|
122
|
+
if [[ "$file" != *"MISSING-COMMANDS-ANALYSIS.md"* ]] && \
|
|
123
|
+
[[ "$file" != *"fix-invalid-command-refs.sh"* ]] && \
|
|
124
|
+
[[ "$file" != *"COMMANDS.md"* ]]; then
|
|
125
|
+
# Only remove if it's standalone, not part of a longer command
|
|
126
|
+
if grep -E "$cmd[[:space:]]|$cmd\$|$cmd\`" "$file" &>/dev/null; then
|
|
127
|
+
remove_from_file "$file" "$cmd"
|
|
128
|
+
fi
|
|
129
|
+
fi
|
|
130
|
+
done < <(grep -rl "$cmd" . --include="*.md" 2>/dev/null || true)
|
|
131
|
+
done
|
|
132
|
+
|
|
133
|
+
echo ""
|
|
134
|
+
echo "āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā"
|
|
135
|
+
echo "ā
Complete! Total changes: $total_changes"
|
|
136
|
+
echo "āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā"
|
|
137
|
+
echo ""
|
|
138
|
+
echo "Next steps:"
|
|
139
|
+
echo "1. Review changes: git diff"
|
|
140
|
+
echo "2. Test affected documentation"
|
|
141
|
+
echo "3. Commit: git add . && git commit -m 'fix: remove invalid command references'"
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Simple script to fix invalid command references
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "š§ Fixing invalid command references..."
|
|
7
|
+
echo ""
|
|
8
|
+
|
|
9
|
+
total=0
|
|
10
|
+
|
|
11
|
+
# Function to safely replace
|
|
12
|
+
safe_replace() {
|
|
13
|
+
local old="$1"
|
|
14
|
+
local new="$2"
|
|
15
|
+
local desc="$3"
|
|
16
|
+
|
|
17
|
+
echo "Replacing: $old ā $new ($desc)"
|
|
18
|
+
|
|
19
|
+
# Find and replace (exclude our analysis docs)
|
|
20
|
+
find . -name "*.md" -type f ! -path "*/MISSING-COMMANDS-ANALYSIS.md" ! -path "*/node_modules/*" -exec grep -l "$old" {} \; 2>/dev/null | while read file; do
|
|
21
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
22
|
+
sed -i '' "s|$old|$new|g" "$file"
|
|
23
|
+
else
|
|
24
|
+
sed -i "s|$old|$new|g" "$file"
|
|
25
|
+
fi
|
|
26
|
+
echo " ā $file"
|
|
27
|
+
((total++)) || true
|
|
28
|
+
done
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
# Replacements
|
|
32
|
+
echo "=== Step 1: Replacing with correct alternatives ==="
|
|
33
|
+
safe_replace "/pm:epic-new" "/pm:prd-new" "create PRD first"
|
|
34
|
+
safe_replace "/pm:done" "/pm:issue-close" "close issue"
|
|
35
|
+
safe_replace "/pm:next-task" "/pm:next" "get next task"
|
|
36
|
+
safe_replace "/pm:epic-resolve" "/pm:epic-close" "close epic"
|
|
37
|
+
safe_replace "/pm:epic-stop" "/pm:epic-close" "close epic"
|
|
38
|
+
safe_replace "/pm:prd-split" "/pm:epic-split" "split after parse"
|
|
39
|
+
|
|
40
|
+
echo ""
|
|
41
|
+
echo "ā
Replacements complete!"
|
|
42
|
+
echo ""
|
|
43
|
+
echo "š Note: The following invalid commands still exist in docs:"
|
|
44
|
+
echo " - Azure commands (/pm:azure-*)"
|
|
45
|
+
echo " - Generic commands (/pm:epic, /pm:issue, /pm:prd, /pm:pr)"
|
|
46
|
+
echo " - Other unimplemented commands"
|
|
47
|
+
echo ""
|
|
48
|
+
echo "These should be manually reviewed and removed/updated in context."
|
|
49
|
+
echo "See docs/MISSING-COMMANDS-ANALYSIS.md for full list."
|