coding-buddy-mcp 1.1.0 → 2.1.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coding-buddy-mcp",
3
- "version": "1.1.0",
3
+ "version": "2.1.0",
4
4
  "description": "A pair programming buddy MCP for Claude Code — optimizes cost and productivity based on Claude Code internals analysis",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,23 @@
1
+ #!/bin/bash
2
+ # Coding Buddy — CLAUDE.md/settings.json 세션 중 수정 차단
3
+ # preToolUse:Edit|Write 에서 실행
4
+ # exit 2 = 차단, exit 0 = 허용
5
+
6
+ INPUT=$(cat)
7
+ FILE_PATH=$(echo "$INPUT" | python3 -c "
8
+ import sys,json
9
+ d = json.load(sys.stdin)
10
+ print(d.get('file_path', d.get('path', d.get('input',{}).get('file_path',''))))
11
+ " 2>/dev/null)
12
+
13
+ if echo "$FILE_PATH" | grep -qiE 'CLAUDE\.md$|CLAUDE\.local\.md$'; then
14
+ echo "⚠️ [Coding Buddy] CLAUDE.md 수정은 캐시 브레이크를 유발합니다. 세션 시작 전에 수정하세요. 지금 수정하면 캐시가 깨져서 이후 모든 요청의 input 비용이 10배 증가합니다."
15
+ exit 2
16
+ fi
17
+
18
+ if echo "$FILE_PATH" | grep -qiE '\.claude/settings\.json$'; then
19
+ echo "⚠️ [Coding Buddy] settings.json 수정은 캐시 브레이크를 유발할 수 있습니다. 세션 시작 전에 수정하세요."
20
+ exit 2
21
+ fi
22
+
23
+ exit 0
@@ -0,0 +1,156 @@
1
+ #!/bin/bash
2
+ # Coding Buddy — 프롬프트 분석 → 모든 강제 규칙을 여기서 처리
3
+ # 신뢰도 100%가 필요한 것만 훅에 넣는다.
4
+
5
+ INPUT=$(cat)
6
+ PROMPT=$(echo "$INPUT" | python3 -c "
7
+ import sys,json
8
+ d = json.load(sys.stdin)
9
+ print(d.get('message', d.get('prompt', d.get('content', d.get('text', '')))))
10
+ " 2>/dev/null)
11
+
12
+ [ -z "$PROMPT" ] && exit 0
13
+
14
+ LOWER=$(echo "$PROMPT" | tr '[:upper:]' '[:lower:]')
15
+ HINTS=""
16
+
17
+ # =============================================
18
+ # 1. 모호한 요청 감지 → 되묻기 강제
19
+ # =============================================
20
+ HAS_PATH=false
21
+ echo "$PROMPT" | grep -qE '[a-zA-Z0-9_-]+/[a-zA-Z0-9_.-]+\.[a-zA-Z]{1,5}' && HAS_PATH=true
22
+
23
+ VAGUE=false
24
+ if [ "$HAS_PATH" = false ]; then
25
+ if echo "$LOWER" | grep -qiE '버그.*(찾|fix)|리팩토링|refactor|개선|improve|테스트.*작성|write.*test|에러가 나|error|코드.*리뷰|review|설명해|explain|분석해|analyz|CSS.*수정|스타일.*수정|성능.*개선|최적화|optimiz'; then
26
+ VAGUE=true
27
+ fi
28
+ fi
29
+
30
+ if [ "$VAGUE" = true ]; then
31
+ HINTS="IMPORTANT: 이 요청은 구체적이지 않습니다. 도구를 호출하지 말고 구체적인 파일 경로와 증상/범위를 먼저 물어보세요. "
32
+ fi
33
+
34
+ # =============================================
35
+ # 2. 주제 변경 감지 → 새 세션 안내
36
+ # =============================================
37
+ if echo "$LOWER" | grep -qiE '그건 됐고|이제 다른|다음으로|다른 작업|이건 끝|넘어가|다음 할|switch to|move on|next task|다른 거 하자|이제.*쪽 작업'; then
38
+ HINTS="${HINTS}IMPORTANT: 주제가 바뀌었습니다. 반드시 안내 → 새 작업이니 새 세션에서 시작하는 게 비용과 품질 모두 유리합니다. "
39
+ fi
40
+
41
+ # =============================================
42
+ # 3. 복잡도 분석 → 모델 추천
43
+ # =============================================
44
+ COMPLEXITY="medium"
45
+ MODEL="Sonnet (\$15/\$75)"
46
+ CMD="/model sonnet"
47
+
48
+ if echo "$LOWER" | grep -qiE '오타|typo|rename|이름.*변경|format|포맷|간단|simple|주석|import|복사|quick|삭제.*줄'; then
49
+ COMPLEXITY="simple"
50
+ MODEL="Haiku (\$1/\$5)"
51
+ CMD="/model haiku"
52
+ elif echo "$LOWER" | grep -qiE 'migrat|마이그레이션|architect|아키텍처|전체.*리팩|redesign|rewrite|스키마|schema|from scratch|전체 구조|시스템.*설계|전체.*변경|overhaul'; then
53
+ COMPLEXITY="complex"
54
+ MODEL="Opus (\$15/\$75)"
55
+ CMD="/model opus"
56
+ fi
57
+
58
+ # 모호하지 않고, 작업성 프롬프트일 때만 모델 추천
59
+ IS_TASK=false
60
+ if echo "$LOWER" | grep -qiE '해줘|해주세요|수정|추가|만들|삭제|변경|작성|구현|보여|봐줘|읽어|찾아|고쳐|바꿔|올려|fix|add|create|remove|update|write|implement|refactor|migrate|show|read|find|check|설정|분석|검사|확인|review|test|빌드|build|deploy|설명|explain|마이그레이션|migration|리팩토링|아키텍처'; then
61
+ IS_TASK=true
62
+ fi
63
+
64
+ if [ "$VAGUE" = false ] && [ "$IS_TASK" = true ]; then
65
+ if [ "$COMPLEXITY" = "simple" ]; then
66
+ HINTS="${HINTS}IMPORTANT: 응답 첫 줄에 반드시 포함 → 💡 모델 추천: ${MODEL}. Haiku는 thinking 토큰이 없어 output 비용이 크게 절감됩니다 (Sonnet/Opus의 thinking은 \$75/1M으로 과금). 현재 모델이 다르면 새 세션에서 ${CMD} 을 안내하세요. "
67
+ else
68
+ HINTS="${HINTS}IMPORTANT: 응답 첫 줄에 반드시 포함 → 💡 모델 추천: ${MODEL}. 현재 모델이 다르면 새 세션에서 ${CMD} 을 안내하세요. "
69
+ fi
70
+ # 3.3 파일 경로 명시 + 3.2 압축 생존 키워드
71
+ HINTS="${HINTS}IMPORTANT: 응답에서 파일을 언급할 때 반드시 전체 경로를 사용하세요 (예: src/auth/login.ts). 미완성 작업이 있으면 'todo:', 'next:', 'pending:' 키워드를 포함하세요. 둘 다 압축 후에도 보존됩니다. "
72
+ fi
73
+
74
+ # =============================================
75
+ # 4. 복잡한 작업 → Plan Mode 제안
76
+ # =============================================
77
+ if [ "$COMPLEXITY" = "complex" ] && [ "$VAGUE" = false ]; then
78
+ HINTS="${HINTS}IMPORTANT: 이 작업은 복잡합니다. 반드시 안내 → Plan Mode에서 먼저 계획을 세운 후 실행하는 것을 권장합니다. "
79
+ fi
80
+
81
+ # =============================================
82
+ # 5. 캐시 브레이크 감지
83
+ # =============================================
84
+ if echo "$LOWER" | grep -qiE 'claude\.md.*(수정|추가|변경|편집|만들|update|edit|modify|add|create)'; then
85
+ HINTS="${HINTS}IMPORTANT: CLAUDE.md 수정은 캐시 브레이크를 유발합니다. 반드시 경고 → 세션 시작 전에 수정하세요. 지금 수정하면 이후 모든 요청 비용이 10배 증가합니다. "
86
+ fi
87
+
88
+ if echo "$LOWER" | grep -qiE '모델.*(바꿔|변경|전환|switch)|haiku로|sonnet으로|opus로|change.*model|switch.*model'; then
89
+ HINTS="${HINTS}IMPORTANT: 세션 중 모델 변경은 캐시 브레이크(비용 10배)입니다. 반드시 안내 → 새 세션에서 모델을 바꾸세요. "
90
+ fi
91
+
92
+ if echo "$LOWER" | grep -qiE 'mcp.*(추가|삭제|켜|끄|설정|변경|add|remove|enable|disable)'; then
93
+ HINTS="${HINTS}IMPORTANT: MCP 변경은 캐시 브레이크입니다. 안내 → MCP 설정은 세션 시작 전에 하세요. "
94
+ fi
95
+
96
+ # =============================================
97
+ # 6. 전체 프로젝트 탐색 → 범위 축소
98
+ # =============================================
99
+ if echo "$LOWER" | grep -qiE '전체 구조|프로젝트 전체|전체 파일|모든 파일|entire project|all files|whole project|전체.*파악|프로젝트.*설명'; then
100
+ HINTS="${HINTS}IMPORTANT: 전체 프로젝트 탐색은 비용이 큽니다. 구체적인 디렉토리나 파일을 지정하도록 안내하세요. "
101
+ fi
102
+
103
+ # =============================================
104
+ # 7. 다중 독립 작업 → 서브에이전트 병렬 제안
105
+ # =============================================
106
+ NUMBERED=$(echo "$PROMPT" | grep -oE '[0-9]+\.' | wc -l | tr -d ' ')
107
+ if [ "$NUMBERED" -ge 3 ] 2>/dev/null; then
108
+ HINTS="${HINTS}IMPORTANT: 독립적인 작업이 여러 개 있습니다. 서브에이전트(Explore/general-purpose)로 병렬 처리하면 속도가 빨라집니다. "
109
+ elif echo "$LOWER" | grep -qiE '동시에|병렬|parallel|함께.*해줘|같이.*해줘'; then
110
+ HINTS="${HINTS}IMPORTANT: 서브에이전트(Explore/general-purpose)로 병렬 처리하면 속도가 빨라집니다. "
111
+ fi
112
+
113
+ # =============================================
114
+ # 8. 테스트/빌드 실행 → 출력 크기 제한 안내
115
+ # =============================================
116
+ if echo "$LOWER" | grep -qiE 'cargo test|pnpm test|npm test|yarn test|pytest|jest|vitest|빌드|build|pnpm run|npm run'; then
117
+ HINTS="${HINTS}IMPORTANT: 테스트/빌드 출력은 16KB에서 잘립니다. 결과가 길면 '| tail -50' 을 붙여서 마지막 부분만 보세요. "
118
+ fi
119
+
120
+ # =============================================
121
+ # 9. 코드 수정 완료 신호 → /diff→/commit→/pr 파이프라인
122
+ # =============================================
123
+ if echo "$LOWER" | grep -qiE '커밋|commit|pr 올려|pr 만들|push|머지|merge|배포|deploy|다 됐|완료|finished|done.*push'; then
124
+ HINTS="${HINTS}IMPORTANT: 코드 변경 후 파이프라인 안내 → /diff 로 변경사항 확인 → /commit 으로 커밋 → /pr 로 PR 생성. "
125
+ fi
126
+
127
+ # =============================================
128
+ # 10. 기능 구현 요청 → 검증 루프 + TDD 제안
129
+ # =============================================
130
+ if echo "$LOWER" | grep -qiE '기능.*추가|feature.*add|구현해|implement|만들어줘|추가해줘|개발해|작성해줘'; then
131
+ if [ "$HAS_PATH" = true ]; then
132
+ HINTS="${HINTS}IMPORTANT: 구현 후 검증 루프를 안내하세요 → 1) 구현 2) lint/clippy 확인 3) 기존 테스트 통과 확인 4) 새 기능 테스트 추가 5) 전체 테스트 통과 확인. TDD가 가능하면 테스트를 먼저 작성하고 실패 확인 후 구현하는 것을 제안하세요. "
133
+ fi
134
+ fi
135
+
136
+ # =============================================
137
+ # 11. 코드 리뷰 요청 → 서브에이전트 독립 리뷰 제안
138
+ # =============================================
139
+ if echo "$LOWER" | grep -qiE '리뷰해|review|검토해|확인해줘.*코드|코드.*봐줘|점검'; then
140
+ if [ "$HAS_PATH" = true ]; then
141
+ HINTS="${HINTS}IMPORTANT: 서브에이전트로 독립 리뷰를 제안하세요 → 메인 대화의 편향 없이 보안, 에러 핸들링, 엣지 케이스를 별도 에이전트가 검토하면 품질이 올라갑니다. "
142
+ fi
143
+ fi
144
+
145
+ # =============================================
146
+ # 12. 대규모 변경 → 점진적 작업 제안
147
+ # =============================================
148
+ if echo "$LOWER" | grep -qiE '전체.*수정|전부.*바꿔|모든.*파일|대규모|전체.*변경|all.*files.*change|전체.*업데이트'; then
149
+ HINTS="${HINTS}IMPORTANT: 대규모 변경은 점진적으로 진행하세요 → 1단계씩 나눠서 각 단계마다 /diff로 확인 → /commit으로 체크포인트. 한 번에 10개 파일 수정하면 리뷰 불가능 + 버그 유입됩니다. "
150
+ fi
151
+
152
+ # =============================================
153
+ # 출력 (매칭된 힌트만 출력 — 불필요한 토큰 없음)
154
+ # =============================================
155
+ [ -n "$HINTS" ] && echo "$HINTS"
156
+ exit 0
@@ -0,0 +1,33 @@
1
+ #!/bin/bash
2
+ # Coding Buddy — SessionStart 훅
3
+ # 오래된 세션을 resume한 경우 새 세션을 권장한다.
4
+
5
+ # 최근 세션 파일의 수정 시간을 확인
6
+ SESSION_DIR="$HOME/.claude/projects"
7
+ if [ ! -d "$SESSION_DIR" ]; then
8
+ exit 0
9
+ fi
10
+
11
+ # 가장 최근 세션 파일 찾기
12
+ LATEST=$(find "$SESSION_DIR" -name "*.jsonl" -type f 2>/dev/null | xargs ls -t 2>/dev/null | head -1)
13
+ if [ -z "$LATEST" ]; then
14
+ exit 0
15
+ fi
16
+
17
+ # 파일 수정 시간과 현재 시간 차이 (초)
18
+ if [[ "$OSTYPE" == "darwin"* ]]; then
19
+ FILE_TIME=$(stat -f %m "$LATEST" 2>/dev/null)
20
+ else
21
+ FILE_TIME=$(stat -c %Y "$LATEST" 2>/dev/null)
22
+ fi
23
+
24
+ NOW=$(date +%s)
25
+ DIFF=$(( NOW - FILE_TIME ))
26
+ HOURS=$(( DIFF / 3600 ))
27
+
28
+ # 1시간 이상 된 세션이면 경고
29
+ if [ "$HOURS" -ge 1 ]; then
30
+ echo "IMPORTANT: 이전 세션이 ${HOURS}시간 전 것입니다. 압축이 누적되어 맥락 손실과 비용 증가가 발생합니다. 새 세션 시작을 권장하세요."
31
+ fi
32
+
33
+ exit 0
package/TEST_CASES.md DELETED
@@ -1,165 +0,0 @@
1
- # Coding Buddy MCP 테스트 케이스
2
-
3
- 아무 프로젝트에서 새 세션을 열고 아래 프롬프트를 하나씩 입력합니다.
4
- 각 테스트 후 `/clear`로 초기화하고 다음 테스트를 진행하세요.
5
-
6
- ---
7
-
8
- ## 테스트 0: MCP 연결 확인
9
- ```
10
- /mcp
11
- ```
12
- - [ ] coding-buddy가 목록에 보인다
13
- - [ ] 도구 3개 표시: analyze_task, setup_project, cost_reference
14
-
15
- ---
16
-
17
- ## A. CRITICAL GATE (구체성 강제) — 가장 중요
18
-
19
- ### A-1. 모호한 버그 요청 (한국어)
20
- ```
21
- 버그 찾아줘
22
- ```
23
- - [ ] 도구를 호출하지 않고 파일 경로/증상을 되묻는다
24
- - [ ] Explore, Glob, Grep 등 탐색을 시작하지 않는다
25
-
26
- ### A-2. 모호한 버그 요청 (영어)
27
- ```
28
- find bugs in this project
29
- ```
30
- - [ ] 되묻는다 (which file? what symptoms?)
31
-
32
- ### A-3. 모호한 리팩토링
33
- ```
34
- 코드 리팩토링 해줘
35
- ```
36
- - [ ] 범위를 확인한다 (어떤 파일? 어떤 부분?)
37
-
38
- ### A-4. 모호한 테스트 요청
39
- ```
40
- 테스트 작성해줘
41
- ```
42
- - [ ] 어떤 파일/함수에 대한 테스트인지 되묻는다
43
-
44
- ### A-5. 모호한 에러 보고
45
- ```
46
- 에러가 나
47
- ```
48
- - [ ] 에러 메시지와 발생 파일을 물어본다
49
-
50
- ### A-6. 구체적 요청 → 바로 실행해야 함
51
- ```
52
- package.json의 dependencies 섹션 보여줘
53
- ```
54
- - [ ] 되묻지 않고 바로 파일을 읽는다
55
-
56
- ### A-7. 구체적 버그 요청 → 바로 실행해야 함
57
- ```
58
- src/index.ts의 main 함수에서 에러 핸들링이 빠져있어. 확인해줘
59
- ```
60
- - [ ] 되묻지 않고 해당 파일을 바로 읽는다
61
-
62
- ---
63
-
64
- ## B. 모델 추천 (analyze_task 도구 호출)
65
-
66
- ### B-1. 단순 작업 → Haiku 추천
67
- ```
68
- README.md에서 오타 하나 수정해줘. "recieve"를 "receive"로
69
- ```
70
- - [ ] analyze_task 도구를 호출한다
71
- - [ ] Haiku를 추천한다
72
-
73
- ### B-2. 중간 작업 → Sonnet 추천
74
- ```
75
- src/components/LoginForm.tsx에 비밀번호 유효성 검사 추가해줘
76
- ```
77
- - [ ] analyze_task 도구를 호출한다
78
- - [ ] Sonnet을 추천한다
79
-
80
- ### B-3. 복잡한 작업 → Opus 추천 + Plan Mode 제안
81
- ```
82
- 인증 시스템을 JWT에서 세션 기반으로 전체 마이그레이션 해줘
83
- ```
84
- - [ ] analyze_task 도구를 호출한다
85
- - [ ] Opus를 추천한다
86
- - [ ] Plan Mode를 먼저 쓰라고 제안한다
87
-
88
- ---
89
-
90
- ## C. 세션 관리
91
-
92
- ### C-1. 주제 변경 감지
93
- (먼저 아무 작업을 하나 한 후)
94
- ```
95
- 그건 됐고, 이제 CI/CD 파이프라인 설정해줘
96
- ```
97
- - [ ] 새 세션을 시작하라고 제안한다
98
-
99
- ### C-2. 작업 완료 후 정리 제안
100
- (아무 간단한 작업 완료 후 Claude가 "완료했습니다" 류의 답변을 한 후)
101
- - [ ] /clear 또는 새 세션을 제안한다
102
-
103
- ---
104
-
105
- ## D. 캐시 보호
106
-
107
- ### D-1. 모델 변경 경고
108
- ```
109
- 모델을 opus로 바꿔줘
110
- ```
111
- - [ ] 캐시가 깨진다고 경고한다
112
- - [ ] 새 세션에서 바꾸라고 안내한다
113
-
114
- ### D-2. CLAUDE.md 수정 경고
115
- ```
116
- CLAUDE.md에 새로운 규칙 추가해줘
117
- ```
118
- - [ ] 세션 시작 전에 수정하라고 경고한다 (캐시 브레이크)
119
-
120
- ---
121
-
122
- ## E. 생산성
123
-
124
- ### E-1. 복잡한 작업 → Plan Mode 제안
125
- ```
126
- 데이터베이스 스키마를 PostgreSQL에서 MongoDB로 마이그레이션 계획 세워줘
127
- ```
128
- - [ ] Plan Mode를 먼저 제안한다
129
-
130
- ### E-2. CLAUDE.md 없는 프로젝트에서 setup 제안
131
- (CLAUDE.md가 없는 프로젝트에서)
132
- ```
133
- 이 프로젝트 최적화하고 싶어
134
- ```
135
- - [ ] setup_project 도구를 호출하거나 CLAUDE.md 생성을 제안한다
136
-
137
- ### E-3. 비용 참조
138
- ```
139
- Claude Code 모델별 가격이 어떻게 돼?
140
- ```
141
- - [ ] cost_reference 도구를 호출한다
142
- - [ ] 모델별 단가표를 보여준다
143
-
144
- ---
145
-
146
- ## F. Output 효율
147
-
148
- ### F-1. 간결한 응답
149
- (아무 구체적 작업 후)
150
- - [ ] 불필요한 요약 없이 간결하게 답한다
151
- - [ ] "제가 한 작업을 정리하면..." 같은 반복 없음
152
-
153
- ---
154
-
155
- ## 테스트 결과 요약
156
-
157
- | 카테고리 | 통과 | 실패 | 비고 |
158
- |---------|------|------|------|
159
- | A. 구체성 강제 (7개) | /7 | /7 | |
160
- | B. 모델 추천 (3개) | /3 | /3 | |
161
- | C. 세션 관리 (2개) | /2 | /2 | |
162
- | D. 캐시 보호 (2개) | /2 | /2 | |
163
- | E. 생산성 (3개) | /3 | /3 | |
164
- | F. Output 효율 (1개) | /1 | /1 | |
165
- | **합계** | **/18** | **/18** | |