cc-discipline 2.10.1 → 2.10.3
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 +236 -153
- package/README.zh-CN.md +299 -207
- package/bin/cli.sh +96 -96
- package/global/CLAUDE.md +45 -45
- package/init.sh +594 -594
- package/lib/doctor.sh +145 -145
- package/lib/stack-remove.sh +68 -68
- package/lib/status.sh +100 -100
- package/package.json +34 -34
- package/templates/.claude/agents/investigator.md +44 -44
- package/templates/.claude/agents/reviewer.md +46 -46
- package/templates/.claude/hooks/action-counter.sh +58 -58
- package/templates/.claude/hooks/git-guard.sh +62 -62
- package/templates/.claude/hooks/phase-gate.sh +10 -10
- package/templates/.claude/hooks/post-error-remind.sh +114 -114
- package/templates/.claude/hooks/pre-edit-guard.sh +100 -100
- package/templates/.claude/hooks/session-start.sh +44 -44
- package/templates/.claude/hooks/streak-breaker.sh +111 -111
- package/templates/.claude/rules/00-core-principles.md +16 -16
- package/templates/.claude/rules/01-debugging.md +32 -32
- package/templates/.claude/rules/02-before-edit.md +22 -22
- package/templates/.claude/rules/03-context-mgmt.md +44 -44
- package/templates/.claude/rules/04-no-mole-whacking.md +26 -26
- package/templates/.claude/rules/05-phase-discipline.md +15 -15
- package/templates/.claude/rules/06-multi-task.md +12 -12
- package/templates/.claude/rules/07-integrity.md +92 -92
- package/templates/.claude/rules/stacks/embedded.md +24 -24
- package/templates/.claude/rules/stacks/js-ts.md +21 -21
- package/templates/.claude/rules/stacks/mobile.md +16 -16
- package/templates/.claude/rules/stacks/python.md +20 -20
- package/templates/.claude/rules/stacks/rtl.md +24 -24
- package/templates/.claude/settings.json +84 -84
- package/templates/.claude/skills/commit/SKILL.md +40 -40
- package/templates/.claude/skills/evaluate/SKILL.md +57 -57
- package/templates/.claude/skills/investigate/SKILL.md +192 -192
- package/templates/.claude/skills/retro/SKILL.md +40 -40
- package/templates/.claude/skills/self-check/SKILL.md +112 -87
- package/templates/.claude/skills/summary/SKILL.md +48 -48
- package/templates/.claude/skills/think/SKILL.md +108 -108
- package/templates/CLAUDE.md +96 -96
- package/templates/docs/debug-log.md +48 -48
- package/templates/docs/progress.md +72 -72
- package/templates/memory/MEMORY.md +23 -23
package/lib/doctor.sh
CHANGED
|
@@ -1,145 +1,145 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# cc-discipline doctor — diagnose installation issues
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
GREEN='\033[0;32m'
|
|
6
|
-
YELLOW='\033[1;33m'
|
|
7
|
-
RED='\033[0;31m'
|
|
8
|
-
NC='\033[0m'
|
|
9
|
-
|
|
10
|
-
ISSUES=0
|
|
11
|
-
WARNINGS=0
|
|
12
|
-
|
|
13
|
-
ok() { echo -e " ${GREEN}✓${NC} $1"; }
|
|
14
|
-
warn() { echo -e " ${YELLOW}!${NC} $1"; WARNINGS=$((WARNINGS + 1)); }
|
|
15
|
-
fail() { echo -e " ${RED}✗${NC} $1"; ISSUES=$((ISSUES + 1)); }
|
|
16
|
-
|
|
17
|
-
echo "cc-discipline doctor"
|
|
18
|
-
echo "──────────────────────"
|
|
19
|
-
echo ""
|
|
20
|
-
|
|
21
|
-
# 1. Version file
|
|
22
|
-
echo "Installation:"
|
|
23
|
-
if [ -f ".claude/.cc-discipline-version" ]; then
|
|
24
|
-
ok "Version file: $(cat .claude/.cc-discipline-version)"
|
|
25
|
-
else
|
|
26
|
-
fail "Not installed (no .claude/.cc-discipline-version)"
|
|
27
|
-
echo ""
|
|
28
|
-
echo "Run 'npx cc-discipline init' to install."
|
|
29
|
-
exit 1
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
# 2. Core rules
|
|
33
|
-
echo ""
|
|
34
|
-
echo "Core rules:"
|
|
35
|
-
for i in 00 01 02 03 04 05 06 07; do
|
|
36
|
-
FILE=$(ls .claude/rules/${i}-*.md 2>/dev/null | head -1)
|
|
37
|
-
if [ -n "$FILE" ]; then
|
|
38
|
-
ok "$(basename "$FILE")"
|
|
39
|
-
else
|
|
40
|
-
fail "Missing rule ${i}-*.md"
|
|
41
|
-
fi
|
|
42
|
-
done
|
|
43
|
-
|
|
44
|
-
# 3. Hooks
|
|
45
|
-
echo ""
|
|
46
|
-
echo "Hooks:"
|
|
47
|
-
for hook in pre-edit-guard streak-breaker post-error-remind session-start phase-gate action-counter git-guard; do
|
|
48
|
-
if [ -f ".claude/hooks/${hook}.sh" ]; then
|
|
49
|
-
if [ -x ".claude/hooks/${hook}.sh" ]; then
|
|
50
|
-
ok "${hook}.sh"
|
|
51
|
-
else
|
|
52
|
-
warn "${hook}.sh exists but not executable"
|
|
53
|
-
fi
|
|
54
|
-
else
|
|
55
|
-
fail "Missing ${hook}.sh"
|
|
56
|
-
fi
|
|
57
|
-
done
|
|
58
|
-
|
|
59
|
-
# 4. settings.json hook registration
|
|
60
|
-
echo ""
|
|
61
|
-
echo "Hook registration:"
|
|
62
|
-
if [ -f ".claude/settings.json" ]; then
|
|
63
|
-
if command -v jq &>/dev/null; then
|
|
64
|
-
CONTENT=$(cat .claude/settings.json)
|
|
65
|
-
for hook in pre-edit-guard streak-breaker post-error-remind session-start phase-gate action-counter git-guard; do
|
|
66
|
-
if echo "$CONTENT" | grep -q "$hook"; then
|
|
67
|
-
ok "${hook} registered"
|
|
68
|
-
else
|
|
69
|
-
fail "${hook} NOT registered in settings.json"
|
|
70
|
-
fi
|
|
71
|
-
done
|
|
72
|
-
else
|
|
73
|
-
warn "jq not installed — cannot verify hook registration details"
|
|
74
|
-
if grep -q "pre-edit-guard" .claude/settings.json 2>/dev/null; then
|
|
75
|
-
ok "settings.json contains hook references"
|
|
76
|
-
else
|
|
77
|
-
fail "settings.json doesn't reference any hooks"
|
|
78
|
-
fi
|
|
79
|
-
fi
|
|
80
|
-
else
|
|
81
|
-
fail "settings.json missing"
|
|
82
|
-
fi
|
|
83
|
-
|
|
84
|
-
# 5. Agents
|
|
85
|
-
echo ""
|
|
86
|
-
echo "Agents:"
|
|
87
|
-
for agent in reviewer investigator; do
|
|
88
|
-
if [ -f ".claude/agents/${agent}.md" ]; then
|
|
89
|
-
ok "${agent}.md"
|
|
90
|
-
else
|
|
91
|
-
warn "Missing ${agent}.md (optional)"
|
|
92
|
-
fi
|
|
93
|
-
done
|
|
94
|
-
|
|
95
|
-
# 6. Skills
|
|
96
|
-
echo ""
|
|
97
|
-
echo "Skills:"
|
|
98
|
-
for skill in commit self-check evaluate think retro summary investigate; do
|
|
99
|
-
if [ -d ".claude/skills/${skill}" ]; then
|
|
100
|
-
ok "/${skill}"
|
|
101
|
-
else
|
|
102
|
-
warn "Missing /${skill} skill (optional)"
|
|
103
|
-
fi
|
|
104
|
-
done
|
|
105
|
-
|
|
106
|
-
# 7. jq
|
|
107
|
-
echo ""
|
|
108
|
-
echo "Dependencies:"
|
|
109
|
-
if command -v jq &>/dev/null; then
|
|
110
|
-
ok "jq installed ($(jq --version 2>&1))"
|
|
111
|
-
else
|
|
112
|
-
warn "jq not installed — hooks use grep/sed fallback, recommend: brew install jq"
|
|
113
|
-
fi
|
|
114
|
-
|
|
115
|
-
# 8. CLAUDE.md
|
|
116
|
-
echo ""
|
|
117
|
-
echo "Project files:"
|
|
118
|
-
if [ -f "CLAUDE.md" ]; then
|
|
119
|
-
if grep -q "\[TODO\]" CLAUDE.md 2>/dev/null; then
|
|
120
|
-
warn "CLAUDE.md has unfilled [TODO] sections"
|
|
121
|
-
else
|
|
122
|
-
ok "CLAUDE.md"
|
|
123
|
-
fi
|
|
124
|
-
else
|
|
125
|
-
warn "No CLAUDE.md found"
|
|
126
|
-
fi
|
|
127
|
-
|
|
128
|
-
if [ -f "docs/progress.md" ]; then
|
|
129
|
-
ok "docs/progress.md"
|
|
130
|
-
else
|
|
131
|
-
warn "No docs/progress.md"
|
|
132
|
-
fi
|
|
133
|
-
|
|
134
|
-
# Summary
|
|
135
|
-
echo ""
|
|
136
|
-
echo "──────────────────────"
|
|
137
|
-
if [ "$ISSUES" -eq 0 ] && [ "$WARNINGS" -eq 0 ]; then
|
|
138
|
-
echo -e "${GREEN}All checks passed!${NC}"
|
|
139
|
-
elif [ "$ISSUES" -eq 0 ]; then
|
|
140
|
-
echo -e "${YELLOW}${WARNINGS} warning(s), no critical issues${NC}"
|
|
141
|
-
else
|
|
142
|
-
echo -e "${RED}${ISSUES} issue(s), ${WARNINGS} warning(s)${NC}"
|
|
143
|
-
echo "Run 'npx cc-discipline upgrade' to fix missing files."
|
|
144
|
-
fi
|
|
145
|
-
echo ""
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# cc-discipline doctor — diagnose installation issues
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
GREEN='\033[0;32m'
|
|
6
|
+
YELLOW='\033[1;33m'
|
|
7
|
+
RED='\033[0;31m'
|
|
8
|
+
NC='\033[0m'
|
|
9
|
+
|
|
10
|
+
ISSUES=0
|
|
11
|
+
WARNINGS=0
|
|
12
|
+
|
|
13
|
+
ok() { echo -e " ${GREEN}✓${NC} $1"; }
|
|
14
|
+
warn() { echo -e " ${YELLOW}!${NC} $1"; WARNINGS=$((WARNINGS + 1)); }
|
|
15
|
+
fail() { echo -e " ${RED}✗${NC} $1"; ISSUES=$((ISSUES + 1)); }
|
|
16
|
+
|
|
17
|
+
echo "cc-discipline doctor"
|
|
18
|
+
echo "──────────────────────"
|
|
19
|
+
echo ""
|
|
20
|
+
|
|
21
|
+
# 1. Version file
|
|
22
|
+
echo "Installation:"
|
|
23
|
+
if [ -f ".claude/.cc-discipline-version" ]; then
|
|
24
|
+
ok "Version file: $(cat .claude/.cc-discipline-version)"
|
|
25
|
+
else
|
|
26
|
+
fail "Not installed (no .claude/.cc-discipline-version)"
|
|
27
|
+
echo ""
|
|
28
|
+
echo "Run 'npx cc-discipline init' to install."
|
|
29
|
+
exit 1
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# 2. Core rules
|
|
33
|
+
echo ""
|
|
34
|
+
echo "Core rules:"
|
|
35
|
+
for i in 00 01 02 03 04 05 06 07; do
|
|
36
|
+
FILE=$(ls .claude/rules/${i}-*.md 2>/dev/null | head -1)
|
|
37
|
+
if [ -n "$FILE" ]; then
|
|
38
|
+
ok "$(basename "$FILE")"
|
|
39
|
+
else
|
|
40
|
+
fail "Missing rule ${i}-*.md"
|
|
41
|
+
fi
|
|
42
|
+
done
|
|
43
|
+
|
|
44
|
+
# 3. Hooks
|
|
45
|
+
echo ""
|
|
46
|
+
echo "Hooks:"
|
|
47
|
+
for hook in pre-edit-guard streak-breaker post-error-remind session-start phase-gate action-counter git-guard; do
|
|
48
|
+
if [ -f ".claude/hooks/${hook}.sh" ]; then
|
|
49
|
+
if [ -x ".claude/hooks/${hook}.sh" ]; then
|
|
50
|
+
ok "${hook}.sh"
|
|
51
|
+
else
|
|
52
|
+
warn "${hook}.sh exists but not executable"
|
|
53
|
+
fi
|
|
54
|
+
else
|
|
55
|
+
fail "Missing ${hook}.sh"
|
|
56
|
+
fi
|
|
57
|
+
done
|
|
58
|
+
|
|
59
|
+
# 4. settings.json hook registration
|
|
60
|
+
echo ""
|
|
61
|
+
echo "Hook registration:"
|
|
62
|
+
if [ -f ".claude/settings.json" ]; then
|
|
63
|
+
if command -v jq &>/dev/null; then
|
|
64
|
+
CONTENT=$(cat .claude/settings.json)
|
|
65
|
+
for hook in pre-edit-guard streak-breaker post-error-remind session-start phase-gate action-counter git-guard; do
|
|
66
|
+
if echo "$CONTENT" | grep -q "$hook"; then
|
|
67
|
+
ok "${hook} registered"
|
|
68
|
+
else
|
|
69
|
+
fail "${hook} NOT registered in settings.json"
|
|
70
|
+
fi
|
|
71
|
+
done
|
|
72
|
+
else
|
|
73
|
+
warn "jq not installed — cannot verify hook registration details"
|
|
74
|
+
if grep -q "pre-edit-guard" .claude/settings.json 2>/dev/null; then
|
|
75
|
+
ok "settings.json contains hook references"
|
|
76
|
+
else
|
|
77
|
+
fail "settings.json doesn't reference any hooks"
|
|
78
|
+
fi
|
|
79
|
+
fi
|
|
80
|
+
else
|
|
81
|
+
fail "settings.json missing"
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
# 5. Agents
|
|
85
|
+
echo ""
|
|
86
|
+
echo "Agents:"
|
|
87
|
+
for agent in reviewer investigator; do
|
|
88
|
+
if [ -f ".claude/agents/${agent}.md" ]; then
|
|
89
|
+
ok "${agent}.md"
|
|
90
|
+
else
|
|
91
|
+
warn "Missing ${agent}.md (optional)"
|
|
92
|
+
fi
|
|
93
|
+
done
|
|
94
|
+
|
|
95
|
+
# 6. Skills
|
|
96
|
+
echo ""
|
|
97
|
+
echo "Skills:"
|
|
98
|
+
for skill in commit self-check evaluate think retro summary investigate; do
|
|
99
|
+
if [ -d ".claude/skills/${skill}" ]; then
|
|
100
|
+
ok "/${skill}"
|
|
101
|
+
else
|
|
102
|
+
warn "Missing /${skill} skill (optional)"
|
|
103
|
+
fi
|
|
104
|
+
done
|
|
105
|
+
|
|
106
|
+
# 7. jq
|
|
107
|
+
echo ""
|
|
108
|
+
echo "Dependencies:"
|
|
109
|
+
if command -v jq &>/dev/null; then
|
|
110
|
+
ok "jq installed ($(jq --version 2>&1))"
|
|
111
|
+
else
|
|
112
|
+
warn "jq not installed — hooks use grep/sed fallback, recommend: brew install jq"
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
# 8. CLAUDE.md
|
|
116
|
+
echo ""
|
|
117
|
+
echo "Project files:"
|
|
118
|
+
if [ -f "CLAUDE.md" ]; then
|
|
119
|
+
if grep -q "\[TODO\]" CLAUDE.md 2>/dev/null; then
|
|
120
|
+
warn "CLAUDE.md has unfilled [TODO] sections"
|
|
121
|
+
else
|
|
122
|
+
ok "CLAUDE.md"
|
|
123
|
+
fi
|
|
124
|
+
else
|
|
125
|
+
warn "No CLAUDE.md found"
|
|
126
|
+
fi
|
|
127
|
+
|
|
128
|
+
if [ -f "docs/progress.md" ]; then
|
|
129
|
+
ok "docs/progress.md"
|
|
130
|
+
else
|
|
131
|
+
warn "No docs/progress.md"
|
|
132
|
+
fi
|
|
133
|
+
|
|
134
|
+
# Summary
|
|
135
|
+
echo ""
|
|
136
|
+
echo "──────────────────────"
|
|
137
|
+
if [ "$ISSUES" -eq 0 ] && [ "$WARNINGS" -eq 0 ]; then
|
|
138
|
+
echo -e "${GREEN}All checks passed!${NC}"
|
|
139
|
+
elif [ "$ISSUES" -eq 0 ]; then
|
|
140
|
+
echo -e "${YELLOW}${WARNINGS} warning(s), no critical issues${NC}"
|
|
141
|
+
else
|
|
142
|
+
echo -e "${RED}${ISSUES} issue(s), ${WARNINGS} warning(s)${NC}"
|
|
143
|
+
echo "Run 'npx cc-discipline upgrade' to fix missing files."
|
|
144
|
+
fi
|
|
145
|
+
echo ""
|
package/lib/stack-remove.sh
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# cc-discipline remove-stack — remove stack rules
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
GREEN='\033[0;32m'
|
|
6
|
-
YELLOW='\033[1;33m'
|
|
7
|
-
RED='\033[0;31m'
|
|
8
|
-
NC='\033[0m'
|
|
9
|
-
|
|
10
|
-
if [ -z "$1" ]; then
|
|
11
|
-
echo "Usage: cc-discipline remove-stack <numbers>"
|
|
12
|
-
echo " e.g.: cc-discipline remove-stack 1 2"
|
|
13
|
-
echo ""
|
|
14
|
-
echo "Stacks: 1=RTL 2=Embedded 3=Python 4=JS/TS 5=Mobile"
|
|
15
|
-
exit 1
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
if [ ! -f ".claude/.cc-discipline-version" ]; then
|
|
19
|
-
echo -e "${RED}cc-discipline is not installed in this project.${NC}"
|
|
20
|
-
exit 1
|
|
21
|
-
fi
|
|
22
|
-
|
|
23
|
-
for choice in "$@"; do
|
|
24
|
-
case $choice in
|
|
25
|
-
1)
|
|
26
|
-
FILE=".claude/rules/stacks/rtl.md"
|
|
27
|
-
NAME="RTL"
|
|
28
|
-
;;
|
|
29
|
-
2)
|
|
30
|
-
FILE=".claude/rules/stacks/embedded.md"
|
|
31
|
-
NAME="Embedded"
|
|
32
|
-
;;
|
|
33
|
-
3)
|
|
34
|
-
FILE=".claude/rules/stacks/python.md"
|
|
35
|
-
NAME="Python"
|
|
36
|
-
;;
|
|
37
|
-
4)
|
|
38
|
-
FILE=".claude/rules/stacks/js-ts.md"
|
|
39
|
-
NAME="JS/TS"
|
|
40
|
-
;;
|
|
41
|
-
5)
|
|
42
|
-
FILE=".claude/rules/stacks/mobile.md"
|
|
43
|
-
NAME="Mobile"
|
|
44
|
-
;;
|
|
45
|
-
*)
|
|
46
|
-
echo -e "${YELLOW}Unknown stack: $choice (valid: 1-5)${NC}"
|
|
47
|
-
continue
|
|
48
|
-
;;
|
|
49
|
-
esac
|
|
50
|
-
|
|
51
|
-
if [ -f "$FILE" ]; then
|
|
52
|
-
rm "$FILE"
|
|
53
|
-
echo -e "${GREEN}✓${NC} Removed $NAME stack ($FILE)"
|
|
54
|
-
else
|
|
55
|
-
echo -e "${YELLOW}!${NC} $NAME stack not installed, skipping"
|
|
56
|
-
fi
|
|
57
|
-
done
|
|
58
|
-
|
|
59
|
-
echo ""
|
|
60
|
-
echo "Done. Remaining stacks:"
|
|
61
|
-
REMAINING=$(ls .claude/rules/stacks/*.md 2>/dev/null || true)
|
|
62
|
-
if [ -n "$REMAINING" ]; then
|
|
63
|
-
for f in $REMAINING; do
|
|
64
|
-
echo " - $(basename "$f" .md)"
|
|
65
|
-
done
|
|
66
|
-
else
|
|
67
|
-
echo " (none)"
|
|
68
|
-
fi
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# cc-discipline remove-stack — remove stack rules
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
GREEN='\033[0;32m'
|
|
6
|
+
YELLOW='\033[1;33m'
|
|
7
|
+
RED='\033[0;31m'
|
|
8
|
+
NC='\033[0m'
|
|
9
|
+
|
|
10
|
+
if [ -z "$1" ]; then
|
|
11
|
+
echo "Usage: cc-discipline remove-stack <numbers>"
|
|
12
|
+
echo " e.g.: cc-discipline remove-stack 1 2"
|
|
13
|
+
echo ""
|
|
14
|
+
echo "Stacks: 1=RTL 2=Embedded 3=Python 4=JS/TS 5=Mobile"
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
if [ ! -f ".claude/.cc-discipline-version" ]; then
|
|
19
|
+
echo -e "${RED}cc-discipline is not installed in this project.${NC}"
|
|
20
|
+
exit 1
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
for choice in "$@"; do
|
|
24
|
+
case $choice in
|
|
25
|
+
1)
|
|
26
|
+
FILE=".claude/rules/stacks/rtl.md"
|
|
27
|
+
NAME="RTL"
|
|
28
|
+
;;
|
|
29
|
+
2)
|
|
30
|
+
FILE=".claude/rules/stacks/embedded.md"
|
|
31
|
+
NAME="Embedded"
|
|
32
|
+
;;
|
|
33
|
+
3)
|
|
34
|
+
FILE=".claude/rules/stacks/python.md"
|
|
35
|
+
NAME="Python"
|
|
36
|
+
;;
|
|
37
|
+
4)
|
|
38
|
+
FILE=".claude/rules/stacks/js-ts.md"
|
|
39
|
+
NAME="JS/TS"
|
|
40
|
+
;;
|
|
41
|
+
5)
|
|
42
|
+
FILE=".claude/rules/stacks/mobile.md"
|
|
43
|
+
NAME="Mobile"
|
|
44
|
+
;;
|
|
45
|
+
*)
|
|
46
|
+
echo -e "${YELLOW}Unknown stack: $choice (valid: 1-5)${NC}"
|
|
47
|
+
continue
|
|
48
|
+
;;
|
|
49
|
+
esac
|
|
50
|
+
|
|
51
|
+
if [ -f "$FILE" ]; then
|
|
52
|
+
rm "$FILE"
|
|
53
|
+
echo -e "${GREEN}✓${NC} Removed $NAME stack ($FILE)"
|
|
54
|
+
else
|
|
55
|
+
echo -e "${YELLOW}!${NC} $NAME stack not installed, skipping"
|
|
56
|
+
fi
|
|
57
|
+
done
|
|
58
|
+
|
|
59
|
+
echo ""
|
|
60
|
+
echo "Done. Remaining stacks:"
|
|
61
|
+
REMAINING=$(ls .claude/rules/stacks/*.md 2>/dev/null || true)
|
|
62
|
+
if [ -n "$REMAINING" ]; then
|
|
63
|
+
for f in $REMAINING; do
|
|
64
|
+
echo " - $(basename "$f" .md)"
|
|
65
|
+
done
|
|
66
|
+
else
|
|
67
|
+
echo " (none)"
|
|
68
|
+
fi
|
package/lib/status.sh
CHANGED
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# cc-discipline status — show what's installed in the current project
|
|
3
|
-
set -e
|
|
4
|
-
|
|
5
|
-
GREEN='\033[0;32m'
|
|
6
|
-
YELLOW='\033[1;33m'
|
|
7
|
-
RED='\033[0;31m'
|
|
8
|
-
NC='\033[0m'
|
|
9
|
-
|
|
10
|
-
echo "cc-discipline status"
|
|
11
|
-
echo "──────────────────────"
|
|
12
|
-
echo ""
|
|
13
|
-
|
|
14
|
-
# Version
|
|
15
|
-
if [ -f ".claude/.cc-discipline-version" ]; then
|
|
16
|
-
echo -e "Version: ${GREEN}$(cat .claude/.cc-discipline-version)${NC}"
|
|
17
|
-
else
|
|
18
|
-
echo -e "Version: ${RED}not installed${NC}"
|
|
19
|
-
echo ""
|
|
20
|
-
echo "Run 'npx cc-discipline init' to install."
|
|
21
|
-
exit 0
|
|
22
|
-
fi
|
|
23
|
-
|
|
24
|
-
# Stacks
|
|
25
|
-
echo -n "Stacks: "
|
|
26
|
-
STACKS=""
|
|
27
|
-
[ -f ".claude/rules/stacks/rtl.md" ] && STACKS="${STACKS}RTL "
|
|
28
|
-
[ -f ".claude/rules/stacks/embedded.md" ] && STACKS="${STACKS}Embedded "
|
|
29
|
-
[ -f ".claude/rules/stacks/python.md" ] && STACKS="${STACKS}Python "
|
|
30
|
-
[ -f ".claude/rules/stacks/js-ts.md" ] && STACKS="${STACKS}JS/TS "
|
|
31
|
-
[ -f ".claude/rules/stacks/mobile.md" ] && STACKS="${STACKS}Mobile "
|
|
32
|
-
if [ -n "$STACKS" ]; then
|
|
33
|
-
echo -e "${GREEN}${STACKS}${NC}"
|
|
34
|
-
else
|
|
35
|
-
echo -e "${YELLOW}General (no stack rules)${NC}"
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
# Core rules
|
|
39
|
-
CORE_COUNT=0
|
|
40
|
-
for f in .claude/rules/0*.md; do
|
|
41
|
-
[ -f "$f" ] && CORE_COUNT=$((CORE_COUNT + 1))
|
|
42
|
-
done
|
|
43
|
-
echo -e "Rules: ${GREEN}${CORE_COUNT} core rules${NC}"
|
|
44
|
-
|
|
45
|
-
# Hooks
|
|
46
|
-
echo -n "Hooks: "
|
|
47
|
-
HOOKS=""
|
|
48
|
-
[ -f ".claude/hooks/pre-edit-guard.sh" ] && HOOKS="${HOOKS}pre-edit-guard "
|
|
49
|
-
[ -f ".claude/hooks/streak-breaker.sh" ] && HOOKS="${HOOKS}streak-breaker "
|
|
50
|
-
[ -f ".claude/hooks/post-error-remind.sh" ] && HOOKS="${HOOKS}post-error-remind "
|
|
51
|
-
[ -f ".claude/hooks/session-start.sh" ] && HOOKS="${HOOKS}session-start "
|
|
52
|
-
[ -f ".claude/hooks/phase-gate.sh" ] && HOOKS="${HOOKS}phase-gate "
|
|
53
|
-
[ -f ".claude/hooks/action-counter.sh" ] && HOOKS="${HOOKS}action-counter "
|
|
54
|
-
[ -f ".claude/hooks/git-guard.sh" ] && HOOKS="${HOOKS}git-guard "
|
|
55
|
-
HOOK_COUNT=$(echo "$HOOKS" | wc -w | tr -d ' ')
|
|
56
|
-
echo -e "${GREEN}${HOOK_COUNT}/7${NC} (${HOOKS% })"
|
|
57
|
-
|
|
58
|
-
# Agents
|
|
59
|
-
echo -n "Agents: "
|
|
60
|
-
AGENTS=""
|
|
61
|
-
[ -f ".claude/agents/reviewer.md" ] && AGENTS="${AGENTS}reviewer "
|
|
62
|
-
[ -f ".claude/agents/investigator.md" ] && AGENTS="${AGENTS}investigator "
|
|
63
|
-
AGENT_COUNT=$(echo "$AGENTS" | wc -w | tr -d ' ')
|
|
64
|
-
echo -e "${GREEN}${AGENT_COUNT}/2${NC} (${AGENTS% })"
|
|
65
|
-
|
|
66
|
-
# Skills
|
|
67
|
-
echo -n "Skills: "
|
|
68
|
-
SKILLS=""
|
|
69
|
-
[ -d ".claude/skills/commit" ] && SKILLS="${SKILLS}/commit "
|
|
70
|
-
[ -d ".claude/skills/self-check" ] && SKILLS="${SKILLS}/self-check "
|
|
71
|
-
[ -d ".claude/skills/evaluate" ] && SKILLS="${SKILLS}/evaluate "
|
|
72
|
-
[ -d ".claude/skills/think" ] && SKILLS="${SKILLS}/think "
|
|
73
|
-
[ -d ".claude/skills/retro" ] && SKILLS="${SKILLS}/retro "
|
|
74
|
-
[ -d ".claude/skills/summary" ] && SKILLS="${SKILLS}/summary "
|
|
75
|
-
[ -d ".claude/skills/investigate" ] && SKILLS="${SKILLS}/investigate "
|
|
76
|
-
SKILL_COUNT=$(echo "$SKILLS" | wc -w | tr -d ' ')
|
|
77
|
-
echo -e "${GREEN}${SKILL_COUNT}/7${NC} (${SKILLS% })"
|
|
78
|
-
|
|
79
|
-
# Settings
|
|
80
|
-
echo -n "Settings: "
|
|
81
|
-
if [ -f ".claude/settings.json" ]; then
|
|
82
|
-
if command -v jq &>/dev/null; then
|
|
83
|
-
HOOK_EVENTS=$(jq -r '.hooks // {} | keys[]' .claude/settings.json 2>/dev/null | tr '\n' ' ')
|
|
84
|
-
echo -e "${GREEN}registered${NC} (events: ${HOOK_EVENTS% })"
|
|
85
|
-
else
|
|
86
|
-
echo -e "${GREEN}exists${NC}"
|
|
87
|
-
fi
|
|
88
|
-
else
|
|
89
|
-
echo -e "${RED}missing${NC}"
|
|
90
|
-
fi
|
|
91
|
-
|
|
92
|
-
# CLAUDE.md
|
|
93
|
-
echo -n "CLAUDE.md: "
|
|
94
|
-
if [ -f "CLAUDE.md" ]; then
|
|
95
|
-
echo -e "${GREEN}exists${NC}"
|
|
96
|
-
else
|
|
97
|
-
echo -e "${YELLOW}missing${NC}"
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
echo ""
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# cc-discipline status — show what's installed in the current project
|
|
3
|
+
set -e
|
|
4
|
+
|
|
5
|
+
GREEN='\033[0;32m'
|
|
6
|
+
YELLOW='\033[1;33m'
|
|
7
|
+
RED='\033[0;31m'
|
|
8
|
+
NC='\033[0m'
|
|
9
|
+
|
|
10
|
+
echo "cc-discipline status"
|
|
11
|
+
echo "──────────────────────"
|
|
12
|
+
echo ""
|
|
13
|
+
|
|
14
|
+
# Version
|
|
15
|
+
if [ -f ".claude/.cc-discipline-version" ]; then
|
|
16
|
+
echo -e "Version: ${GREEN}$(cat .claude/.cc-discipline-version)${NC}"
|
|
17
|
+
else
|
|
18
|
+
echo -e "Version: ${RED}not installed${NC}"
|
|
19
|
+
echo ""
|
|
20
|
+
echo "Run 'npx cc-discipline init' to install."
|
|
21
|
+
exit 0
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Stacks
|
|
25
|
+
echo -n "Stacks: "
|
|
26
|
+
STACKS=""
|
|
27
|
+
[ -f ".claude/rules/stacks/rtl.md" ] && STACKS="${STACKS}RTL "
|
|
28
|
+
[ -f ".claude/rules/stacks/embedded.md" ] && STACKS="${STACKS}Embedded "
|
|
29
|
+
[ -f ".claude/rules/stacks/python.md" ] && STACKS="${STACKS}Python "
|
|
30
|
+
[ -f ".claude/rules/stacks/js-ts.md" ] && STACKS="${STACKS}JS/TS "
|
|
31
|
+
[ -f ".claude/rules/stacks/mobile.md" ] && STACKS="${STACKS}Mobile "
|
|
32
|
+
if [ -n "$STACKS" ]; then
|
|
33
|
+
echo -e "${GREEN}${STACKS}${NC}"
|
|
34
|
+
else
|
|
35
|
+
echo -e "${YELLOW}General (no stack rules)${NC}"
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# Core rules
|
|
39
|
+
CORE_COUNT=0
|
|
40
|
+
for f in .claude/rules/0*.md; do
|
|
41
|
+
[ -f "$f" ] && CORE_COUNT=$((CORE_COUNT + 1))
|
|
42
|
+
done
|
|
43
|
+
echo -e "Rules: ${GREEN}${CORE_COUNT} core rules${NC}"
|
|
44
|
+
|
|
45
|
+
# Hooks
|
|
46
|
+
echo -n "Hooks: "
|
|
47
|
+
HOOKS=""
|
|
48
|
+
[ -f ".claude/hooks/pre-edit-guard.sh" ] && HOOKS="${HOOKS}pre-edit-guard "
|
|
49
|
+
[ -f ".claude/hooks/streak-breaker.sh" ] && HOOKS="${HOOKS}streak-breaker "
|
|
50
|
+
[ -f ".claude/hooks/post-error-remind.sh" ] && HOOKS="${HOOKS}post-error-remind "
|
|
51
|
+
[ -f ".claude/hooks/session-start.sh" ] && HOOKS="${HOOKS}session-start "
|
|
52
|
+
[ -f ".claude/hooks/phase-gate.sh" ] && HOOKS="${HOOKS}phase-gate "
|
|
53
|
+
[ -f ".claude/hooks/action-counter.sh" ] && HOOKS="${HOOKS}action-counter "
|
|
54
|
+
[ -f ".claude/hooks/git-guard.sh" ] && HOOKS="${HOOKS}git-guard "
|
|
55
|
+
HOOK_COUNT=$(echo "$HOOKS" | wc -w | tr -d ' ')
|
|
56
|
+
echo -e "${GREEN}${HOOK_COUNT}/7${NC} (${HOOKS% })"
|
|
57
|
+
|
|
58
|
+
# Agents
|
|
59
|
+
echo -n "Agents: "
|
|
60
|
+
AGENTS=""
|
|
61
|
+
[ -f ".claude/agents/reviewer.md" ] && AGENTS="${AGENTS}reviewer "
|
|
62
|
+
[ -f ".claude/agents/investigator.md" ] && AGENTS="${AGENTS}investigator "
|
|
63
|
+
AGENT_COUNT=$(echo "$AGENTS" | wc -w | tr -d ' ')
|
|
64
|
+
echo -e "${GREEN}${AGENT_COUNT}/2${NC} (${AGENTS% })"
|
|
65
|
+
|
|
66
|
+
# Skills
|
|
67
|
+
echo -n "Skills: "
|
|
68
|
+
SKILLS=""
|
|
69
|
+
[ -d ".claude/skills/commit" ] && SKILLS="${SKILLS}/commit "
|
|
70
|
+
[ -d ".claude/skills/self-check" ] && SKILLS="${SKILLS}/self-check "
|
|
71
|
+
[ -d ".claude/skills/evaluate" ] && SKILLS="${SKILLS}/evaluate "
|
|
72
|
+
[ -d ".claude/skills/think" ] && SKILLS="${SKILLS}/think "
|
|
73
|
+
[ -d ".claude/skills/retro" ] && SKILLS="${SKILLS}/retro "
|
|
74
|
+
[ -d ".claude/skills/summary" ] && SKILLS="${SKILLS}/summary "
|
|
75
|
+
[ -d ".claude/skills/investigate" ] && SKILLS="${SKILLS}/investigate "
|
|
76
|
+
SKILL_COUNT=$(echo "$SKILLS" | wc -w | tr -d ' ')
|
|
77
|
+
echo -e "${GREEN}${SKILL_COUNT}/7${NC} (${SKILLS% })"
|
|
78
|
+
|
|
79
|
+
# Settings
|
|
80
|
+
echo -n "Settings: "
|
|
81
|
+
if [ -f ".claude/settings.json" ]; then
|
|
82
|
+
if command -v jq &>/dev/null; then
|
|
83
|
+
HOOK_EVENTS=$(jq -r '.hooks // {} | keys[]' .claude/settings.json 2>/dev/null | tr '\n' ' ')
|
|
84
|
+
echo -e "${GREEN}registered${NC} (events: ${HOOK_EVENTS% })"
|
|
85
|
+
else
|
|
86
|
+
echo -e "${GREEN}exists${NC}"
|
|
87
|
+
fi
|
|
88
|
+
else
|
|
89
|
+
echo -e "${RED}missing${NC}"
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
# CLAUDE.md
|
|
93
|
+
echo -n "CLAUDE.md: "
|
|
94
|
+
if [ -f "CLAUDE.md" ]; then
|
|
95
|
+
echo -e "${GREEN}exists${NC}"
|
|
96
|
+
else
|
|
97
|
+
echo -e "${YELLOW}missing${NC}"
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
echo ""
|