codesyncer 2.2.3 β 2.3.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/README.ko.md +42 -9
- package/README.md +42 -9
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +78 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/templates/en/setup_guide_single.md +324 -0
- package/dist/templates/ko/setup_guide_single.md +324 -0
- package/dist/utils/scanner.d.ts +9 -1
- package/dist/utils/scanner.d.ts.map +1 -1
- package/dist/utils/scanner.js +48 -33
- package/dist/utils/scanner.js.map +1 -1
- package/package.json +1 -1
- package/src/templates/en/setup_guide_single.md +324 -0
- package/src/templates/ko/setup_guide_single.md +324 -0
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# π€ CodeSyncer μ€μ κ°μ΄λ for AI μ΄μμ€ν΄νΈ (λ¨μΌ λ ν¬μ§ν 리)
|
|
2
|
+
|
|
3
|
+
> **AI μ½λ© μ΄μμ€ν΄νΈμ©**: μ΄ λ¬Έμλ₯Ό λκΉμ§ μ½κ³ μ§μμ¬νμ λ°λΌ CodeSyncer νμ
μμ€ν
μ μ€μ νμΈμ.
|
|
4
|
+
>
|
|
5
|
+
> **νλ‘μ νΈ**: [PROJECT_NAME]
|
|
6
|
+
> **GitHub**: https://github.com/[GITHUB_USERNAME]/[PROJECT_NAME]
|
|
7
|
+
> **μμ±μΌ**: [TODAY]
|
|
8
|
+
> **λͺ¨λ**: λ¨μΌ λ ν¬μ§ν 리
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## π λΉμ μ μ무
|
|
13
|
+
|
|
14
|
+
μ΄ λ ν¬μ§ν 리λ₯Ό λΆμνκ³ ν¬κ΄μ μΈ νμ
μμ€ν
μ λ§λλ κ²μ΄ μ무μ
λλ€. λ€μ λ¨κ³λ₯Ό **λννμΌλ‘** μ§ννμΈμ - κ° μ£Όμ κ²°μ μμ μμ μ¬μ©μ νμΈμ λ°μΌμΈμ.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## π― 1λ¨κ³: λ ν¬μ§ν 리 λΆμ
|
|
19
|
+
|
|
20
|
+
### λΉμ μ μμ
|
|
21
|
+
1. **μ΄ λ ν¬μ§ν 리 λΆμ**:
|
|
22
|
+
- νμΌ κ΅¬μ‘°μ μμ‘΄μ± κ²ν
|
|
23
|
+
- κΈ°μ μ€νκ³Ό νλ μμν¬ νμ
|
|
24
|
+
- νλ‘μ νΈ λͺ©μ κ³Ό μν€ν
μ² μ΄ν΄
|
|
25
|
+
- κΈ°μ‘΄ μ½λ ν¨ν΄ νμΈ
|
|
26
|
+
|
|
27
|
+
2. **λ€μμ κ²°μ **:
|
|
28
|
+
- μ£Όμ κΈ°λ₯ (backend, frontend, mobile, fullstack)
|
|
29
|
+
- μ¬μ©λ μ£Όμ κΈ°μ
|
|
30
|
+
- ν΅μ¬ κΈ°λ₯κ³Ό λͺ¨λ
|
|
31
|
+
- κ°λ° ν¨ν΄
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## π 2λ¨κ³: λνν μ€μ νλ‘μΈμ€
|
|
36
|
+
|
|
37
|
+
### 2.1 λ ν¬μ§ν 리 λΆμ νμΈ
|
|
38
|
+
μ¬μ©μμκ² λΆμ κ²°κ³Ό μ μ:
|
|
39
|
+
```
|
|
40
|
+
π λ ν¬μ§ν 리: [PROJECT_NAME]
|
|
41
|
+
|
|
42
|
+
μ λΆμ κ²°κ³Ό:
|
|
43
|
+
- νμ
: [backend/frontend/mobile/fullstack]
|
|
44
|
+
- κΈ°μ μ€ν: [detected stack]
|
|
45
|
+
- μ€λͺ
: [μμ±ν μ€λͺ
]
|
|
46
|
+
- ν΅μ¬ κΈ°λ₯: [μ£Όμ κΈ°λ₯ λμ΄]
|
|
47
|
+
|
|
48
|
+
μ΄ λΆμμ΄ λ§λμ? μμ ν λΆλΆμ΄ μλμ?
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### 2.2 μ€μ μ§λ¬ΈνκΈ°
|
|
52
|
+
|
|
53
|
+
**β οΈ μ λ μΆλ‘ νμ§ λ§κ³ λ°λμ λ¬Όμ΄λ³΄μΈμ:**
|
|
54
|
+
|
|
55
|
+
1. **API μλν¬μΈνΈ** (λ°±μλμ κ²½μ°):
|
|
56
|
+
- "λ©μΈ API λ² μ΄μ€ URLμ΄ λ¬΄μμΈκ°μ?"
|
|
57
|
+
- "μ¬λ¬ API λ²μ μ΄ μλμ?"
|
|
58
|
+
|
|
59
|
+
2. **λΉμ¦λμ€ λ‘μ§**:
|
|
60
|
+
- "μμμΌ ν ν΅μ¬ λΉμ¦λμ€ κ·μΉμ΄ μλμ?"
|
|
61
|
+
- "νΉμ κ°κ²©/κ²°μ μ μ±
μ΄ μλμ?"
|
|
62
|
+
|
|
63
|
+
3. **μΈμ¦**:
|
|
64
|
+
- "μ΄λ€ μΈμ¦ λ°©μμ μ¬μ©νλμ?" (JWT, OAuth, Session λ±)
|
|
65
|
+
- "ν ν°μ μ΄λμ μ μ₯νλμ?" (cookies, localStorage λ±)
|
|
66
|
+
|
|
67
|
+
4. **λ°μ΄ν°λ² μ΄μ€**:
|
|
68
|
+
- "μ΄λ€ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νλμ?"
|
|
69
|
+
- "μ€μν μ€ν€λ§ μ λ³΄κ° μλμ?"
|
|
70
|
+
|
|
71
|
+
5. **μΈλΆ μλΉμ€**:
|
|
72
|
+
- "μ΄λ€ μΈλΆ API/μλΉμ€μ μ°λλλμ?"
|
|
73
|
+
- "μμμΌ ν API ν€λ μΈμ¦ μ λ³΄κ° μλμ? (λ
ΈμΆ μμ΄)"
|
|
74
|
+
|
|
75
|
+
### 2.3 μλ
Ό ν€μλ μλ³
|
|
76
|
+
|
|
77
|
+
μ¬μ©μμκ² μ§λ¬Έ:
|
|
78
|
+
```
|
|
79
|
+
μ΄ νλ‘μ νΈμμ μ΄λ€ μ€μ ν€μλκ° μλ μλ
Ό μ€λ¨μ νΈλ¦¬κ±°ν΄μΌ νλμ?
|
|
80
|
+
|
|
81
|
+
μΆμ² μΉ΄ν
κ³ λ¦¬:
|
|
82
|
+
|
|
83
|
+
π΄ CRITICAL (νμ μ€λ¨):
|
|
84
|
+
- π° κ²°μ /κ³ΌκΈ: κ²°μ , κ³ΌκΈ, μ²κ΅¬, νλΆ, ꡬλ
, μΈλ³΄μ΄μ€, κ°κ²©, μκΈ, payment, billing, charge, refund, subscription
|
|
85
|
+
- π 보μ/μΈμ¦: μΈμ¦, κΆν, λ‘κ·ΈμΈ, λ‘κ·Έμμ, μΈμ
, ν ν°, JWT, λΉλ°λ²νΈ, μνΈν, 볡νΈν, ν΄μ, OAuth, κΆν, μν , κ΄λ¦¬μ, authentication, authorization, encrypt, decrypt
|
|
86
|
+
- ποΈ λ°μ΄ν° μμ : μμ , μ κ±°, μμ μ²λ¦¬, νκΈ°, delete, remove, drop, truncate, destroy, purge
|
|
87
|
+
- π κ°μΈμ 보/λ²μ : GDPR, CCPA, κ°μΈμ 보, λ―Όκ°μ 보, κ°μΈμ 보μ²λ¦¬λ°©μΉ¨, μ΄μ©μ½κ΄, λμ, κ·μ μ€μ, personal data, PII, privacy, compliance
|
|
88
|
+
|
|
89
|
+
π‘ IMPORTANT (κΆμ₯ μ€λ¨):
|
|
90
|
+
- π μΈλΆ API: API μ°λ, μΉν
, μ¨λνν°, μΈλΆμλΉμ€, API ν€, μΈμ¦μ 보, webhook, third-party, credentials
|
|
91
|
+
- ποΈ DB μ€ν€λ§: λ§μ΄κ·Έλ μ΄μ
, μ€ν€λ§λ³κ²½, ν
μ΄λΈμμ , 컬λΌμΆκ°, μΈλ±μ€, μ μ½μ‘°κ±΄, migration, schema, alter table
|
|
92
|
+
- π λ°°ν¬/μΈνλΌ: λ°°ν¬, νλ‘λμ
, νκ²½μ€μ , μλ², νΈμ€ν
, λλ©μΈ, SSL, μΈμ¦μ, deploy, deployment, production, server
|
|
93
|
+
- πΎ μΊμ±: μΊμμ λ΅, λ λμ€, CDN, μΊμ무ν¨ν, redis, memcached, cache
|
|
94
|
+
- π§ μ΄λ©μΌ/μλ¦Ό: μ΄λ©μΌλ°μ‘, λ¬Έμ, νΈμμλ¦Ό, μλ¦ΌμλΉμ€, email, SMS, push notification
|
|
95
|
+
|
|
96
|
+
π’ MINOR (μ νμ μ€λ¨):
|
|
97
|
+
- β‘ μ±λ₯: μ΅μ ν, μ±λ₯κ°μ , μ§μ°λ‘λ©, μ½λλΆν , λ²λ€ν¬κΈ°, optimization, performance, lazy loading
|
|
98
|
+
- π§ͺ ν
μ€νΈ: ν
μ€νΈμ λ΅, ν
μ€νΈνλ μμν¬, CI/CD, μλνν
μ€νΈ, testing, automated testing
|
|
99
|
+
- π λ‘κΉ
/λͺ¨λν°λ§: λ‘κΉ
, λͺ¨λν°λ§, λΆμ, μλ¬μΆμ , APM, logging, monitoring, analytics
|
|
100
|
+
- π¨ UI/UX: λμμΈμμ€ν
, ν
λ§, λ°μν, μ κ·Όμ±, λ€κ΅μ΄, design system, responsive, accessibility
|
|
101
|
+
|
|
102
|
+
μ΄λ€ μΉ΄ν
κ³ λ¦¬λ₯Ό νμ±νν κΉμ? (κΆμ₯: CRITICAL + IMPORTANT)
|
|
103
|
+
λλ©μΈλ³ 컀μ€ν
ν€μλκ° μλμ?
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## π 3λ¨κ³: λ¬Έμ νμΌ μμ±
|
|
109
|
+
|
|
110
|
+
`.claude/` ν΄λμ λ€μ νμΌλ€μ μμ±:
|
|
111
|
+
|
|
112
|
+
### 3.1 CLAUDE.md
|
|
113
|
+
- λΆμν νλ‘μ νΈ μ 보
|
|
114
|
+
- μ λ κ·μΉ (TypeScript strict mode, μλ¬ νΈλ€λ§ λ±)
|
|
115
|
+
- μΆλ‘ κΈμ§ μμ (λΉμ¦λμ€ λ‘μ§ μμΉ, API URL, 보μ μ€μ )
|
|
116
|
+
- μλ
Ό νμ ν€μλ (μ¬μ©μκ° νμΈν ν€μλ)
|
|
117
|
+
- μ£Όμ νκ·Έ μμ€ν
(@codesyncer-* νκ·Έ)
|
|
118
|
+
- νλ‘μ νΈλ³ ν
νλ¦Ώκ³Ό ν¨ν΄
|
|
119
|
+
|
|
120
|
+
ν
νλ¦Ώ μ¬μ©: `./templates/[lang]/claude.md`
|
|
121
|
+
- [PROJECT_NAME], [PROJECT_TYPE], [TECH_STACK] κ΅μ²΄
|
|
122
|
+
- [KEYWORDS]λ₯Ό μ¬μ©μ νμΈ ν€μλλ‘ κ΅μ²΄
|
|
123
|
+
- λΆμ μ€ λ°κ²¬ν νλ‘μ νΈλ³ κ·μΉ μΆκ°
|
|
124
|
+
|
|
125
|
+
### 3.2 ARCHITECTURE.md
|
|
126
|
+
- μμ ν ν΄λ ꡬ쑰 (μ€μ λλ ν 리 μ€μΊ)
|
|
127
|
+
- νμΌ ν΅κ³
|
|
128
|
+
- μ£Όμ νκ·Έ ν΅κ³ (μ΄κΈ°κ°: λͺ¨λ 0)
|
|
129
|
+
- κΈ°μ μ€ν μμΈ μ 보
|
|
130
|
+
- package.jsonμ μμ‘΄μ±
|
|
131
|
+
|
|
132
|
+
ν
νλ¦Ώ μ¬μ©: `./templates/[lang]/architecture.md`
|
|
133
|
+
- μ€μ ν΄λ ꡬ쑰λ₯Ό μ€μΊν΄μ λμ΄
|
|
134
|
+
- μ€μ μμ‘΄μ± λͺ©λ‘ μμ±
|
|
135
|
+
|
|
136
|
+
### 3.3 COMMENT_GUIDE.md β **ν΅μ¬ λ¬Έμ**
|
|
137
|
+
- **μ£ΌμμΌλ‘ λͺ¨λ 컨ν
μ€νΈ κ΄λ¦¬** (νμ§ κΈ°μ€, μ½λ© νμ€, λͺ¨λ κ²°μ )
|
|
138
|
+
- 10κ°μ§ μ£Όμ νκ·Έ μμ€ν
(κΈ°λ³Έ 5 + νμ₯ 5)
|
|
139
|
+
- μ€μ μμ: νμ§ κΈ°μ€, μ±λ₯ μ΅μ ν, 보μ, μλ¬ νΈλ€λ§ λ±
|
|
140
|
+
- λ³λ λ¬Έμ λμ μ½λμ μ§μ κΈ°λ‘νλ μμΉ
|
|
141
|
+
|
|
142
|
+
ν
νλ¦Ώ μ¬μ©: `./templates/[lang]/comment_guide.md`
|
|
143
|
+
- κ·Έλλ‘ μ¬μ© (λͺ¨λ 컨ν
μ€νΈ κ΄λ¦¬ μμ ν¬ν¨)
|
|
144
|
+
- AIλ μ΄ ν¨ν΄μ λ°λΌ μ£Όμ μμ±
|
|
145
|
+
|
|
146
|
+
### 3.4 DECISIONS.md
|
|
147
|
+
- κ²°μ λ‘κ·Έ ν
νλ¦Ώ
|
|
148
|
+
- μΉ΄ν
κ³ λ¦¬ μ μ
|
|
149
|
+
- λΉ κ²°μ κΈ°λ‘ (κ°λ° μ€ μ±μμ§)
|
|
150
|
+
|
|
151
|
+
ν
νλ¦Ώ μ¬μ©: `./templates/[lang]/decisions.md`
|
|
152
|
+
- κ·Έλλ‘ μ¬μ© (μμ
μ€ κ²°μ μΆκ°λ¨)
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## π 4λ¨κ³: λ£¨νΈ CLAUDE.md μμ±
|
|
157
|
+
|
|
158
|
+
λ ν¬μ§ν 리 루νΈμ `CLAUDE.md` μμ± (ν΄λ‘λκ° μλμΌλ‘ μ°Ύλ νμΌ):
|
|
159
|
+
|
|
160
|
+
```markdown
|
|
161
|
+
# CLAUDE.md - [PROJECT_NAME]
|
|
162
|
+
|
|
163
|
+
> **Powered by CodeSyncer** - AI νμ
μμ€ν
|
|
164
|
+
> **λͺ¨λ**: λ¨μΌ λ ν¬μ§ν 리
|
|
165
|
+
|
|
166
|
+
## π λΉ λ₯Έ μμ
|
|
167
|
+
|
|
168
|
+
μμΈν μ½λ© κ°μ΄λλΌμΈμ `.claude/CLAUDE.md`λ₯Ό μ½μΌμΈμ.
|
|
169
|
+
|
|
170
|
+
## π λ¬Έμ
|
|
171
|
+
|
|
172
|
+
- **μ½λ© κ·μΉ**: `.claude/CLAUDE.md`
|
|
173
|
+
- **νλ‘μ νΈ κ΅¬μ‘°**: `.claude/ARCHITECTURE.md`
|
|
174
|
+
- **μ£Όμ κ°μ΄λ**: `.claude/COMMENT_GUIDE.md`
|
|
175
|
+
- **κ²°μ λ‘κ·Έ**: `.claude/DECISIONS.md`
|
|
176
|
+
|
|
177
|
+
## π μμ
μμ
|
|
178
|
+
|
|
179
|
+
1. μ΄ νμΌ μ½κΈ° (μλ£!)
|
|
180
|
+
2. `.claude/CLAUDE.md`μμ νλ‘μ νΈ κ·μΉ νμΈ
|
|
181
|
+
3. λΆλͺ
νν κ²μ μ§λ¬ΈνκΈ°
|
|
182
|
+
4. μ½λ© μμ!
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
**νλ‘μ νΈ**: [PROJECT_NAME]
|
|
187
|
+
**μμ±μΌ**: [TODAY]
|
|
188
|
+
**Powered by**: CodeSyncer
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**μ€μ**: μ΄ νμΌμ΄ μμ΄μΌ ν΄λ‘λκ° μΈμ
μμ μ μλμΌλ‘ 컨ν
μ€νΈλ₯Ό λ‘λν©λλ€!
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## β
5λ¨κ³: μ΅μ’
νμΈ
|
|
196
|
+
|
|
197
|
+
λͺ¨λ νμΌ μμ± ν μμ½ μ μ:
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
β
CodeSyncer μ€μ μλ£! (λ¨μΌ λ ν¬μ§ν 리 λͺ¨λ)
|
|
201
|
+
|
|
202
|
+
μμ±λ νμΌ:
|
|
203
|
+
π [PROJECT_NAME]/
|
|
204
|
+
βββ CLAUDE.md β ν΄λ‘λκ° λ¨Όμ μ½λ νμΌ
|
|
205
|
+
βββ .claude/
|
|
206
|
+
βββ CLAUDE.md (μ½λ© κ·μΉ)
|
|
207
|
+
βββ ARCHITECTURE.md (νλ‘μ νΈ κ΅¬μ‘°)
|
|
208
|
+
βββ COMMENT_GUIDE.md (μ£Όμ κ°μ΄λ)
|
|
209
|
+
βββ DECISIONS.md (κ²°μ λ‘κ·Έ)
|
|
210
|
+
|
|
211
|
+
λ€μ λ¨κ³:
|
|
212
|
+
1. μμ±λ νμΌ κ²ν
|
|
213
|
+
2. νμμ .claude/CLAUDE.md 컀μ€ν°λ§μ΄μ¦
|
|
214
|
+
3. μ μΈμ
μμ λλ "CLAUDE.md μ½μ΄μ€"λ‘ μ μ©
|
|
215
|
+
|
|
216
|
+
π‘ ν΄λ‘λλ μλμΌλ‘ λ£¨νΈ CLAUDE.mdλ₯Ό μ°Ύμμ μ½μ΅λλ€!
|
|
217
|
+
|
|
218
|
+
CodeSyncer μ¬μ© μ€λΉ μλ£!
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## π¨ 컀μ€ν°λ§μ΄μ§ κ°μ΄λλΌμΈ
|
|
224
|
+
|
|
225
|
+
### λ°±μλ νλ‘μ νΈ:
|
|
226
|
+
- ARCHITECTURE.mdμ API ꡬ쑰 μ§μ€
|
|
227
|
+
- API μλν¬μΈνΈ λ¬Έμν μΆκ°
|
|
228
|
+
- 보μ λ° λ°μ΄ν° μ²λ¦¬ κ·μΉ κ°μ‘°
|
|
229
|
+
- μ 곡λ κ²½μ° λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§ ν¬ν¨
|
|
230
|
+
|
|
231
|
+
### νλ‘ νΈμλ νλ‘μ νΈ:
|
|
232
|
+
- μ»΄ν¬λνΈ κ΅¬μ‘° λ¬Έμν
|
|
233
|
+
- μ€νμΌλ§ μ κ·Όλ² ν¬ν¨ (CSS modules, Tailwind λ±)
|
|
234
|
+
- μν κ΄λ¦¬ ν¨ν΄ μΆκ°
|
|
235
|
+
- λΌμ°ν
ꡬ쑰 λ¬Έμν
|
|
236
|
+
|
|
237
|
+
### λͺ¨λ°μΌ νλ‘μ νΈ:
|
|
238
|
+
- νλ©΄ λ€λΉκ²μ΄μ
λ¬Έμν
|
|
239
|
+
- νλ«νΌλ³ λ
ΈνΈ ν¬ν¨ (iOS/Android)
|
|
240
|
+
- λ€μ΄ν°λΈ λͺ¨λ μ°λ μΆκ°
|
|
241
|
+
- λΉλ/λ°°ν¬ νλ‘μΈμ€ λ¬Έμν
|
|
242
|
+
|
|
243
|
+
### νμ€ν νλ‘μ νΈ:
|
|
244
|
+
- λ°±μλ + νλ‘ νΈμλ κ°μ΄λλΌμΈ κ²°ν©
|
|
245
|
+
- API β UI μ°λ λ¬Έμν
|
|
246
|
+
- λ°μ΄ν° νλ¦ ν¨ν΄ ν¬ν¨
|
|
247
|
+
- λ°°ν¬ μ λ΅ μΆκ°
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## π¨ AI μ΄μμ€ν΄νΈλ₯Ό μν μ€μ κ·μΉ
|
|
252
|
+
|
|
253
|
+
1. **νμ μ§λ¬Ένκ³ , μΆλ‘ νμ§ λ§ κ²**:
|
|
254
|
+
- λΉμ¦λμ€ λ‘μ§ μμΉ
|
|
255
|
+
- API μλν¬μΈνΈ
|
|
256
|
+
- 보μ μ€μ
|
|
257
|
+
- λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§
|
|
258
|
+
|
|
259
|
+
2. **μ² μ νκ² λΆμ**:
|
|
260
|
+
- μ€μ μ½λλ₯Ό μ½κ³ , μΆμΈ‘ κΈμ§
|
|
261
|
+
- package.json μμ‘΄μ± νμΈ
|
|
262
|
+
- ν΄λ ꡬ쑰 μμ ν μ€μΊ
|
|
263
|
+
- μ½λ ν¨ν΄ μλ³
|
|
264
|
+
|
|
265
|
+
3. **λννμΌλ‘ μ§ν**:
|
|
266
|
+
- κ° λ¨κ³μμ νμΈ μμ²
|
|
267
|
+
- μμ± μ λΆμ κ²°κ³Ό μ μ
|
|
268
|
+
- μ¬μ©μκ° μ΄ν΄λ₯Ό μμ ν μ μκ² νμ©
|
|
269
|
+
|
|
270
|
+
4. **λͺ¨λ μμμ @codesyncer-* νκ·Έ μ¬μ©**:
|
|
271
|
+
- λͺ¨λ μ½λ μ£Όμμ μ νμ μ¬μ©
|
|
272
|
+
- @claude-* νΈνμ± μ€λͺ
|
|
273
|
+
- μ¬λ°λ₯Έ νκ·Έ μ¬μ©λ² 보μ¬μ£ΌκΈ°
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## π ν
νλ¦Ώ νλ μ΄μ€νλ
|
|
278
|
+
|
|
279
|
+
νμΌ μμ± μ λ€μμ κ΅μ²΄:
|
|
280
|
+
|
|
281
|
+
- `[PROJECT_NAME]` β μ¬μ©μ νλ‘μ νΈλͺ
|
|
282
|
+
- `[PROJECT_TYPE]` β backend/frontend/mobile/fullstack
|
|
283
|
+
- `[TECH_STACK]` β κ°μ§λ κΈ°μ μ€ν (μΌνλ‘ κ΅¬λΆ)
|
|
284
|
+
- `[TODAY]` β νμ¬ λ μ§ (YYYY-MM-DD)
|
|
285
|
+
- `[GITHUB_USERNAME]` β μ¬μ©μ GitHub μ¬μ©μλͺ
|
|
286
|
+
- `[KEYWORDS]` β μ¬μ©μ νμΈ μλ
Ό ν€μλ
|
|
287
|
+
- `[TEMPLATES]` β νλ‘μ νΈ νμ
λ³ ν
νλ¦Ώ
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## π― μ±κ³΅ κΈ°μ€
|
|
292
|
+
|
|
293
|
+
λ€μ μ‘°κ±΄μ΄ μΆ©μ‘±λλ©΄ μ€μ μ±κ³΅:
|
|
294
|
+
- β
`.claude/` ν΄λμ 4κ° νμΌ λͺ¨λ μμ±
|
|
295
|
+
- β
λ£¨νΈ CLAUDE.md μμ±
|
|
296
|
+
- β
λͺ¨λ μ€μ μ 보λ₯Ό μ¬μ©μκ° νμΈ
|
|
297
|
+
- β
λΉμ¦λμ€ λ‘μ§μ΄λ λΉλ° μ 보μ λν μΆλ‘ μμ
|
|
298
|
+
- β
λͺ¨λ λ¬Έμκ° @codesyncer-* νκ·Έ νμ μ¬μ©
|
|
299
|
+
- β
νλ‘μ νΈλ³ ν¨ν΄ λ¬Έμν
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## ποΈ μ€μ μλ£ ν
|
|
304
|
+
|
|
305
|
+
μ€μ μ΄ μλ£λλ©΄ μ΄ νμΌμ μμ ν΄λ λ©λλ€:
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
".claude/SETUP_GUIDE.md μμ ν΄μ€"
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
λλ μ§μ μμ :
|
|
312
|
+
```bash
|
|
313
|
+
rm .claude/SETUP_GUIDE.md
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
**λ²μ **: 1.0.0 (Powered by CodeSyncer)
|
|
319
|
+
**λͺ¨λ**: λ¨μΌ λ ν¬μ§ν 리
|
|
320
|
+
**AI λꡬ**: Claude Code μ΅μ ν | νΈν: Cursor, GitHub Copilot, Continue.dev
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
*μ΄ μ€μ κ°μ΄λλ CodeSyncer CLIμ μν΄ μμ±λ©λλ€. λ¬Έμ λ κ°μ μ¬νμ https://github.com/bitjaru/codesyncer λ°©λ¬Έ*
|
package/dist/utils/scanner.d.ts
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import { RepositoryInfo } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Check if current directory itself is a repository (for single-repo mode)
|
|
4
|
+
*/
|
|
5
|
+
export declare function isCurrentDirRepository(dirPath: string): Promise<boolean>;
|
|
2
6
|
/**
|
|
3
7
|
* Scan current directory for potential repository folders
|
|
4
8
|
* Looks for folders that contain package.json, git repos, or common project structures
|
|
5
9
|
*/
|
|
6
10
|
export declare function scanForRepositories(rootPath: string): Promise<RepositoryInfo[]>;
|
|
7
11
|
/**
|
|
8
|
-
* Check if master CodeSyncer setup exists in root
|
|
12
|
+
* Check if master CodeSyncer setup exists in root (multi-repo mode)
|
|
9
13
|
*/
|
|
10
14
|
export declare function hasMasterSetup(rootPath: string): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Check if single-repo CodeSyncer setup exists (single-repo mode)
|
|
17
|
+
*/
|
|
18
|
+
export declare function hasSingleRepoSetup(rootPath: string): Promise<boolean>;
|
|
11
19
|
//# sourceMappingURL=scanner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/utils/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAmCrF;
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/utils/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE9E;AAyCD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAmCrF;AAiBD;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKvE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG3E"}
|
package/dist/utils/scanner.js
CHANGED
|
@@ -33,44 +33,17 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.isCurrentDirRepository = isCurrentDirRepository;
|
|
36
37
|
exports.scanForRepositories = scanForRepositories;
|
|
37
38
|
exports.hasMasterSetup = hasMasterSetup;
|
|
39
|
+
exports.hasSingleRepoSetup = hasSingleRepoSetup;
|
|
38
40
|
const fs = __importStar(require("fs-extra"));
|
|
39
41
|
const path = __importStar(require("path"));
|
|
40
42
|
/**
|
|
41
|
-
*
|
|
42
|
-
* Looks for folders that contain package.json, git repos, or common project structures
|
|
43
|
+
* Check if current directory itself is a repository (for single-repo mode)
|
|
43
44
|
*/
|
|
44
|
-
async function
|
|
45
|
-
|
|
46
|
-
try {
|
|
47
|
-
const entries = await fs.readdir(rootPath, { withFileTypes: true });
|
|
48
|
-
for (const entry of entries) {
|
|
49
|
-
if (!entry.isDirectory())
|
|
50
|
-
continue;
|
|
51
|
-
// Skip node_modules, .git, dist, build folders
|
|
52
|
-
if (['node_modules', '.git', 'dist', 'build', '.next', 'coverage'].includes(entry.name)) {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
const folderPath = path.join(rootPath, entry.name);
|
|
56
|
-
const isRepo = await isValidRepository(folderPath);
|
|
57
|
-
if (isRepo) {
|
|
58
|
-
const hasCodeSyncer = await hasCodeSyncerSetup(folderPath);
|
|
59
|
-
repos.push({
|
|
60
|
-
name: entry.name,
|
|
61
|
-
path: folderPath,
|
|
62
|
-
type: undefined, // AI will analyze
|
|
63
|
-
description: undefined, // AI will analyze
|
|
64
|
-
techStack: undefined, // AI will analyze
|
|
65
|
-
hasCodeSyncer,
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
console.error('Error scanning directories:', error);
|
|
72
|
-
}
|
|
73
|
-
return repos;
|
|
45
|
+
async function isCurrentDirRepository(dirPath) {
|
|
46
|
+
return isValidRepository(dirPath);
|
|
74
47
|
}
|
|
75
48
|
/**
|
|
76
49
|
* Check if a folder is a valid repository
|
|
@@ -109,6 +82,41 @@ async function isValidRepository(folderPath) {
|
|
|
109
82
|
return false;
|
|
110
83
|
}
|
|
111
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Scan current directory for potential repository folders
|
|
87
|
+
* Looks for folders that contain package.json, git repos, or common project structures
|
|
88
|
+
*/
|
|
89
|
+
async function scanForRepositories(rootPath) {
|
|
90
|
+
const repos = [];
|
|
91
|
+
try {
|
|
92
|
+
const entries = await fs.readdir(rootPath, { withFileTypes: true });
|
|
93
|
+
for (const entry of entries) {
|
|
94
|
+
if (!entry.isDirectory())
|
|
95
|
+
continue;
|
|
96
|
+
// Skip node_modules, .git, dist, build folders
|
|
97
|
+
if (['node_modules', '.git', 'dist', 'build', '.next', 'coverage'].includes(entry.name)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const folderPath = path.join(rootPath, entry.name);
|
|
101
|
+
const isRepo = await isValidRepository(folderPath);
|
|
102
|
+
if (isRepo) {
|
|
103
|
+
const hasCodeSyncer = await hasCodeSyncerSetup(folderPath);
|
|
104
|
+
repos.push({
|
|
105
|
+
name: entry.name,
|
|
106
|
+
path: folderPath,
|
|
107
|
+
type: undefined, // AI will analyze
|
|
108
|
+
description: undefined, // AI will analyze
|
|
109
|
+
techStack: undefined, // AI will analyze
|
|
110
|
+
hasCodeSyncer,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
console.error('Error scanning directories:', error);
|
|
117
|
+
}
|
|
118
|
+
return repos;
|
|
119
|
+
}
|
|
112
120
|
// All project analysis removed - AI will analyze during setup phase
|
|
113
121
|
// - Project type (frontend/backend/mobile/fullstack)
|
|
114
122
|
// - Tech stack
|
|
@@ -122,11 +130,18 @@ async function hasCodeSyncerSetup(folderPath) {
|
|
|
122
130
|
return (await fs.pathExists(claudePath)) || (await fs.pathExists(vibeSyncPath));
|
|
123
131
|
}
|
|
124
132
|
/**
|
|
125
|
-
* Check if master CodeSyncer setup exists in root
|
|
133
|
+
* Check if master CodeSyncer setup exists in root (multi-repo mode)
|
|
126
134
|
*/
|
|
127
135
|
async function hasMasterSetup(rootPath) {
|
|
128
136
|
const masterPath = path.join(rootPath, '.codesyncer');
|
|
129
137
|
const legacyMasterPath = path.join(rootPath, '.master');
|
|
130
138
|
return (await fs.pathExists(masterPath)) || (await fs.pathExists(legacyMasterPath));
|
|
131
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Check if single-repo CodeSyncer setup exists (single-repo mode)
|
|
142
|
+
*/
|
|
143
|
+
async function hasSingleRepoSetup(rootPath) {
|
|
144
|
+
const claudePath = path.join(rootPath, '.claude');
|
|
145
|
+
return fs.pathExists(claudePath);
|
|
146
|
+
}
|
|
132
147
|
//# sourceMappingURL=scanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/utils/scanner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/utils/scanner.ts"],"names":[],"mappings":"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"}
|