byuckchon-frontend-cli 1.9.6 → 1.10.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.md +233 -264
- package/package.json +8 -2
- package/src/commands/adopt.js +46 -2
- package/src/constants/versions.js +12 -45
- package/src/generators/createApp.js +31 -40
- package/src/generators/createBaseFiles.js +85 -315
- package/src/generators/createFolders.js +22 -6
- package/src/generators/createMonorepo.js +53 -238
- package/src/generators/createPackageJson.js +19 -13
- package/src/generators/createProject.js +22 -19
- package/src/generators/createReadme.js +4 -4
- package/src/generators/install.js +1 -0
- package/src/generators/scaffoldReviewAutomation.js +115 -0
- package/src/utils/ensureRequiredDependencies.js +35 -9
- package/src/utils/settingsAssets.js +27 -0
- package/templates/review-automation/github/workflows/eslint-convention-review.monorepo.yml +88 -0
- package/templates/review-automation/github/workflows/eslint-convention-review.single.yml +44 -0
- package/templates/review-automation/github/workflows/pr-check.monorepo.yml +51 -0
- package/templates/review-automation/github/workflows/pr-check.single.yml +47 -0
- package/templates/review-automation/tools/review.config.mjs +9 -0
package/README.md
CHANGED
|
@@ -1,372 +1,329 @@
|
|
|
1
1
|
# byuckchon-frontend-cli
|
|
2
2
|
|
|
3
|
-
[byuckchon](https://www.byuckchon.com) 프론트엔드
|
|
4
|
-
|
|
3
|
+
[byuckchon](https://www.byuckchon.com) 프론트엔드 팀을 위한 프로젝트 스타터이자
|
|
4
|
+
AI 개발 어시스턴트 CLI입니다.
|
|
5
|
+
|
|
6
|
+
```text
|
|
7
|
+
프로젝트 생성 또는 연결
|
|
8
|
+
→ 프로젝트 문맥(Figma · OpenAPI · 컨벤션) 등록
|
|
9
|
+
→ AI와 대화하며 코드 탐색·생성·수정
|
|
10
|
+
→ PR에서 기계적인 컨벤션을 자동 리뷰
|
|
11
|
+
```
|
|
12
|
+
|
|
5
13
|
|
|
6
14
|
## 요구 사항
|
|
7
15
|
|
|
8
|
-
-
|
|
16
|
+
- Node.js 18+ (LTS 권장)
|
|
9
17
|
- AI 사용 시: Anthropic 또는 OpenAI API 키
|
|
10
18
|
|
|
11
19
|
## 설치
|
|
12
20
|
|
|
13
|
-
|
|
21
|
+
|
|
22
|
+
`bc`는 프로젝트 내부에서 사용하는 라이브러리가 아니라 **CLI 도구**입니다.
|
|
23
|
+
|
|
24
|
+
따라서 프로젝트 의존성으로 설치하지 않고, 다음 중 한 가지 방식으로 사용합니다.
|
|
25
|
+
|
|
26
|
+
### 1. 글로벌 설치
|
|
27
|
+
|
|
14
28
|
|
|
15
29
|
```bash
|
|
16
|
-
#
|
|
30
|
+
# npm
|
|
17
31
|
npm install -g byuckchon-frontend-cli
|
|
32
|
+
|
|
33
|
+
# pnpm
|
|
18
34
|
pnpm add -g byuckchon-frontend-cli
|
|
35
|
+
|
|
36
|
+
# yarn
|
|
19
37
|
yarn global add byuckchon-frontend-cli
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2. 설치 없이 일회성 실행
|
|
20
41
|
|
|
21
|
-
|
|
42
|
+
글로벌 설치를 원하지 않는다면 `npx` 또는 `pnpm dlx`로 실행할 수 있습니다.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# npm
|
|
22
46
|
npx byuckchon-frontend-cli adopt
|
|
47
|
+
|
|
48
|
+
# pnpm
|
|
23
49
|
pnpm dlx byuckchon-frontend-cli adopt
|
|
24
50
|
```
|
|
25
51
|
|
|
26
|
-
|
|
52
|
+
설치가 완료되면 다음 두 명령어를 모두 사용할 수 있습니다.
|
|
27
53
|
|
|
28
|
-
|
|
54
|
+
```bash
|
|
55
|
+
bc
|
|
56
|
+
byuckchon-frontend-cli
|
|
57
|
+
```
|
|
29
58
|
|
|
30
|
-
`bc` 자체는 **루트에 한 번만** 글로벌 설치하면 충분합니다. 다만 `bc.config.json` 은
|
|
31
|
-
**각 패키지(앱) 디렉터리마다 따로** 두는 걸 권장 — Tailwind 버전, 라우팅, 스타일링이
|
|
32
|
-
앱마다 다르면 `detected.*` 가 달라야 RAG 컨텍스트도 정확해집니다.
|
|
33
59
|
|
|
34
|
-
|
|
35
|
-
# 루트에서 한 번만
|
|
36
|
-
npm i -g byuckchon-frontend-cli
|
|
60
|
+
### 모노레포 사용 시
|
|
37
61
|
|
|
38
|
-
|
|
39
|
-
cd apps/web && bc adopt # apps/web/bc.config.json 생성
|
|
40
|
-
cd apps/mobile && bc adopt # apps/mobile/bc.config.json 생성
|
|
62
|
+
CLI 자체는 컴퓨터에 **한 번만 글로벌 설치**하면 됩니다.
|
|
41
63
|
|
|
42
|
-
|
|
43
|
-
cd apps/web && bc # apps/web/bc.config.json 을 자동으로 읽어감
|
|
44
|
-
```
|
|
64
|
+
다만 `bc`는 현재 실행한 디렉터리부터 상위 디렉터리로 이동하면서 가장 가까운 `bc.config.json`을 찾기 때문에
|
|
45
65
|
|
|
46
|
-
|
|
47
|
-
즉 모노레포 루트에 `bc.config.json` 이 없고 `apps/web/bc.config.json` 만 있으면,
|
|
48
|
-
`apps/web/somewhere/deeper/...` 에서 `bc` 를 쳐도 `apps/web/bc.config.json` 이 잡힙니다.
|
|
66
|
+
각 앱이나 패키지 디렉터리마다 별도로 두어 실행도 해당 디렉터리 마다 실행하는걸 권장합니다.
|
|
49
67
|
|
|
50
|
-
|
|
51
|
-
> 안 먹는다면, 이건 패키지 의존성으로 박혀서 그래요. `pnpm remove byuckchon-frontend-cli`
|
|
52
|
-
> 후 위처럼 `pnpm add -g` 로 다시 설치해주세요.
|
|
68
|
+
앱마다 설정 파일을 분리하면 각 프로젝트에 맞는 `detected.*` 정보가 생성되므로, RAG 컨텍스트도 더 정확해집니다.
|
|
53
69
|
|
|
54
|
-
## 명령
|
|
55
70
|
|
|
56
|
-
|
|
71
|
+
#### 모노레포 권장 사용 흐름
|
|
57
72
|
|
|
58
73
|
```bash
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
프로젝트 이름, 프레임워크, **기본 AI 모델, Figma URL, OpenAPI URL** 을 묻고
|
|
63
|
-
새 폴더에 코드 + `bc.config.json` 까지 만들어 줍니다.
|
|
74
|
+
# 1. CLI 글로벌 설치
|
|
75
|
+
pnpm add -g byuckchon-frontend-cli
|
|
64
76
|
|
|
65
|
-
|
|
77
|
+
# 2. 앱별 설정 생성
|
|
78
|
+
cd apps/web && bc adopt
|
|
79
|
+
cd ../mobile && bc adopt
|
|
66
80
|
|
|
67
|
-
|
|
68
|
-
|
|
81
|
+
# 3. 작업할 앱에서 실행
|
|
82
|
+
cd ../web && bc
|
|
83
|
+
```
|
|
69
84
|
|
|
70
|
-
내장된 툴:
|
|
71
85
|
|
|
72
|
-
|
|
73
|
-
| ------------- | ------------------------------------------------------ |
|
|
74
|
-
| `read_file` | 프로젝트 내 파일/디렉터리 내용 읽기 |
|
|
75
|
-
| `list_files` | 글롭 패턴으로 파일 나열 |
|
|
76
|
-
| `search_code` | RAG 인덱스 의미 기반 검색 (인덱스 있어야 함) |
|
|
77
|
-
| `search_openapi` | OpenAPI 스펙에서 엔드포인트 검색 (path/summary/tag) — 큰 스펙도 OK |
|
|
78
|
-
| `get_openapi_endpoint` | 특정 엔드포인트 상세 (params/requestBody/responses, `$ref` 인라인) |
|
|
79
|
-
| `write_file` | 새 파일 생성 또는 통째 덮어쓰기 |
|
|
80
|
-
| `edit_file` | 유일한 `old_string → new_string` 으로 부분 수정 (안전) |
|
|
81
|
-
| `fetch_figma` / `fetch_figma_image` / `fetch_figma_styles` | Figma 디자인/이미지/토큰 |
|
|
86
|
+
### bc 명령어 오작동 해결 방법
|
|
82
87
|
|
|
83
|
-
|
|
84
|
-
1. `list_files` 로 `src/api/` 구조 파악
|
|
85
|
-
2. `read_file` 로 기존 모듈 2~3개 읽고 컨벤션 학습
|
|
86
|
-
3. `search_code` 로 fetch 래퍼 / hook 패턴 검색
|
|
87
|
-
4. `write_file` 로 `api/`, `service/`, `hook/`, `schema/`, `types/` 파일들을 한꺼번에 생성
|
|
88
|
-
5. 마지막에 만든 파일 목록과 import 가이드를 짧게 요약
|
|
88
|
+
다음처럼 글로벌 옵션 없이 설치했다면 프로젝트 의존성으로 추가됩니다.
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
```bash
|
|
91
|
+
pnpm add byuckchon-frontend-cli
|
|
92
|
+
```
|
|
92
93
|
|
|
93
|
-
|
|
94
|
-
> 안전망은 git diff. 매 작업 후 `git status` / `git diff` 로 확인하고, 마음에 안 들면 `git checkout .` 으로 되돌리세요.
|
|
95
|
-
> 다음 버전에서 per-file 승인(`y/n/v`) 옵션 추가 예정.
|
|
94
|
+
이 경우 터미널에서 `bc` 명령어가 바로 실행되지 않을 수 있습니다.
|
|
96
95
|
|
|
97
|
-
|
|
96
|
+
먼저 프로젝트 의존성에서 제거합니다.
|
|
98
97
|
|
|
99
|
-
|
|
98
|
+
```bash
|
|
99
|
+
pnpm remove byuckchon-frontend-cli
|
|
100
|
+
```
|
|
100
101
|
|
|
101
|
-
|
|
102
|
+
그다음 글로벌로 다시 설치합니다.
|
|
102
103
|
|
|
103
104
|
```bash
|
|
104
|
-
|
|
105
|
-
|
|
105
|
+
pnpm add -g byuckchon-frontend-cli
|
|
106
|
+
```
|
|
106
107
|
|
|
107
|
-
|
|
108
|
-
FIGMA_TOKEN=figd_xxxxxxxxxxxxxxxx
|
|
108
|
+
설치 후 다음 명령어로 확인할 수 있습니다.
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
```bash
|
|
111
|
+
bc
|
|
111
112
|
```
|
|
112
113
|
|
|
113
|
-
|
|
114
|
+
## 주요 기능
|
|
114
115
|
|
|
115
|
-
|
|
116
|
-
{
|
|
117
|
-
"design": {
|
|
118
|
-
"figma": "https://www.figma.com/design/ABC123/Marketd-Admin?node-id=2-105",
|
|
119
|
-
"figmaTokenEnv": "FIGMA_TOKEN"
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
```
|
|
116
|
+
### 프로젝트 생성: `bc init`
|
|
123
117
|
|
|
124
|
-
|
|
118
|
+
`bc init`은 다음 두 형태를 지원합니다.
|
|
125
119
|
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
129
|
-
|
|
|
130
|
-
| **로컬 스타일** 등록 (color/text) | "Brand/Primary" 같은 스타일을 등록해두면 `fetch_figma_styles` 로 디자인 토큰을 일괄 추출해서 Tailwind 테마로 바로 박을 수 있어요. |
|
|
131
|
-
| **Components** 화 (♦ 마름모 아이콘) | 반복 UI 가 component 면 모델이 "이거 디자인 시스템 컴포넌트구나" 인식 → 코드에서도 재사용 컴포넌트를 만듭니다. |
|
|
132
|
-
| frame 별로 **"Copy link to selection"** | 일반 share link 는 파일 전체. 특정 frame URL 을 받아야 AI 가 그것만 정확히 가져옵니다. |
|
|
120
|
+
| 형태 | 생성 결과 | 적합한 경우 |
|
|
121
|
+
| --- | --- | --- |
|
|
122
|
+
| 단일 프로젝트 | React(Vite) 또는 Next.js(App Router) | 하나의 웹 서비스를 빠르게 시작할 때 |
|
|
123
|
+
| 모노레포 | pnpm + Turborepo 루트, `apps/`, `packages/` | 여러 웹 앱과 공용 패키지를 함께 관리할 때 |
|
|
133
124
|
|
|
134
|
-
|
|
125
|
+
생성 프로젝트에는 TypeScript, ESLint, Prettier, Tailwind, `bc.config.json`, API 코드 가이드가
|
|
126
|
+
기본으로 포함됩니다.
|
|
135
127
|
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
🔧 fetch_figma("https://www.figma.com/design/.../?node-id=12-34")
|
|
140
|
-
🔧 list_files("src/components/**/Card*")
|
|
141
|
-
🔧 read_file("src/components/Card/ProductCard.tsx")
|
|
142
|
-
🆕 생성 src/components/Card/MemberCard/MemberCard.tsx (52 lines)
|
|
143
|
-
🆕 생성 src/components/Card/MemberCard/index.ts (3 lines)
|
|
144
|
-
bc › Auto layout 이 row 였고 padding 12/16 이었어요. MemberCard 만들었습니다.
|
|
145
|
-
기존 ProductCard 와 같은 폴더 컨벤션을 따랐어요.
|
|
128
|
+
```bash
|
|
129
|
+
bc init
|
|
146
130
|
```
|
|
147
131
|
|
|
148
|
-
|
|
132
|
+
### 기존 프로젝트 연결: `bc adopt`
|
|
149
133
|
|
|
150
|
-
|
|
151
|
-
| --------------------- | ------------------------------------------------------------- |
|
|
152
|
-
| `fetch_figma` | 노드 트리 (autoLayout / fills / text / size / children) 가져오기 |
|
|
153
|
-
| `fetch_figma_image` | 프레임을 PNG/JPG/SVG 로 export — public asset 으로 저장도 가능 |
|
|
154
|
-
| `fetch_figma_styles` | 파일의 컬러/타이포 토큰 목록 → 디자인 토큰 generator 만들 때 |
|
|
134
|
+
`bc adopt`는 `package.json`과 디렉터리를 스캔하여 bc 설정만 세팅합니다.
|
|
155
135
|
|
|
156
|
-
|
|
157
|
-
|
|
136
|
+
```bash
|
|
137
|
+
cd <프로젝트-루트>
|
|
138
|
+
bc adopt
|
|
139
|
+
```
|
|
158
140
|
|
|
159
|
-
|
|
141
|
+
모노레포 앱 디렉터리에서 실행하면 앱별 `bc.config.json`을 만들고, PR 리뷰 자동화 파일은
|
|
142
|
+
모노레포 루트에 한 번만 둡니다.
|
|
160
143
|
|
|
161
|
-
|
|
162
|
-
**매 chat 세션에 시스템 프롬프트로 자동 주입**됩니다. AI 는 기존 코드 패턴보다 이 문서를 우선합니다.
|
|
144
|
+
### AI와 코드 작업하기: `bc chat`
|
|
163
145
|
|
|
164
|
-
|
|
165
|
-
적지 않으면 관례 파일명(`bc.md`, `.bc/conventions.md`, `AGENTS.md`, `FRONTEND.md`, `docs/frontend.md`)을 자동 탐지합니다.
|
|
146
|
+
`bc`만 입력해도 채팅을 시작할 수 있습니다.
|
|
166
147
|
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
148
|
+
```bash
|
|
149
|
+
bc
|
|
150
|
+
|
|
151
|
+
# 한글 입력이 불안정하면 단순 입력 모드 사용
|
|
152
|
+
bc chat --plain
|
|
171
153
|
```
|
|
172
154
|
|
|
173
|
-
|
|
174
|
-
- (고급) 항목을 `{ "path": "...", "when": { "framework": "next" } }` 형태로 적으면 프레임워크별 조건부 주입도 가능합니다.
|
|
155
|
+
AI는 단순히 코드 블록을 제안하는 데 그치지 않고, 다음 작업을 수행할 수 있습니다.
|
|
175
156
|
|
|
176
|
-
|
|
157
|
+
- 파일과 디렉터리 읽기
|
|
158
|
+
- 코드·OpenAPI 검색
|
|
159
|
+
- 파일 생성 및 부분 수정
|
|
160
|
+
- Figma 데이터와 이미지 조회
|
|
177
161
|
|
|
178
|
-
|
|
162
|
+
파일 쓰기와 수정은 `bc.config.json`이 있는 프로젝트 루트 하위에서만 허용됩니다. 작업 뒤에는
|
|
163
|
+
`git diff`와 `git status`로 변경 사항을 확인하는 것을 권장합니다.
|
|
179
164
|
|
|
180
|
-
|
|
181
|
-
| --- | --- |
|
|
182
|
-
| React (Vite/CRA 등) | `src/api/api-codegen.md` |
|
|
183
|
-
| Next.js | `src/lib/api/api-codegen.md` |
|
|
165
|
+
### 팀 문서와 코드베이스 RAG
|
|
184
166
|
|
|
185
|
-
|
|
186
|
-
- 하나의 문서에 React의 axios 규칙과 Next.js의 fetch 및 Server/Client 경계 규칙이 함께 들어갑니다.
|
|
187
|
-
- 이미 파일이 있으면 덮어쓰지 않습니다.
|
|
167
|
+
팀 컨벤션 문서를 `bc.config.json`의 `docs`에 등록하면, 채팅 시작 시 AI 문맥으로 자동 주입됩니다.
|
|
188
168
|
|
|
189
|
-
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"docs": ["docs/frontend-conventions.md", "docs/api-guide.md"]
|
|
172
|
+
}
|
|
173
|
+
```
|
|
190
174
|
|
|
191
|
-
`bc.
|
|
192
|
-
|
|
175
|
+
문서를 따로 등록하지 않아도 `bc.md`, `.bc/conventions.md`, `AGENTS.md`, `FRONTEND.md`,
|
|
176
|
+
`docs/frontend.md` 같은 관례 파일을 자동으로 찾습니다.
|
|
193
177
|
|
|
194
|
-
|
|
195
|
-
- 헤더에 `openapi` 줄로 표시. 캐시 hit 면 `(cached)`, fresh fetch 면 `(live)`.
|
|
196
|
-
- **세션 중 서버가 스펙을 바꿔도 자동 대응 (v1.10+)**: `search_openapi` / `get_openapi_endpoint` 가
|
|
197
|
-
캐시에서 엔드포인트를 못 찾으면 **딱 한 번 최신본을 다시 받아 재검색**합니다 (`🔄 OpenAPI 스펙 새로고침`).
|
|
198
|
-
남용 방지를 위해 세션당 횟수·간격이 제한됩니다. "방금 스웨거 업데이트했어, 다시 읽어줘" 라고 하면
|
|
199
|
-
즉시 강제 새로고침(`refresh_openapi`)합니다.
|
|
200
|
-
- **코드 인덱스**: chat 시작 시 인덱스 파일이 없으면 **백그라운드에서 자동 빌드**.
|
|
201
|
-
- 빌드 중에는 화면에 `📚 인덱싱 중 ...` 진행 표시. 끝나면 `✓` 메시지 한 줄.
|
|
202
|
-
- OpenAI 키가 없으면 빌드를 건너뛰고 도움 메시지를 띄움 (Anthropic 은 임베딩 API 미제공).
|
|
203
|
-
- **수동 컨트롤이 필요할 때:**
|
|
178
|
+
코드 인덱스는 채팅 시 자동으로 준비되며, 수동으로 관리할 수도 있습니다.
|
|
204
179
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
| RAG 잠시 끄기 | chat 안에서 `/rag off` |
|
|
180
|
+
```bash
|
|
181
|
+
bc index
|
|
182
|
+
bc index --rebuild
|
|
183
|
+
bc index status
|
|
184
|
+
bc index search "토큰 갱신"
|
|
185
|
+
```
|
|
212
186
|
|
|
213
|
-
|
|
187
|
+
### OpenAPI와 타입 생성
|
|
214
188
|
|
|
215
|
-
`bc.config.json`
|
|
189
|
+
`bc.config.json`의 `api.openapi`에 스펙 URL을 설정하면, AI가 채팅 중 엔드포인트와 스키마를
|
|
190
|
+
검색할 수 있습니다. 타입 파일이 필요할 때는 결정론적인 코드 생성 명령을 사용하세요.
|
|
216
191
|
|
|
217
|
-
```
|
|
218
|
-
|
|
192
|
+
```bash
|
|
193
|
+
# bc.config.json에 등록한 OpenAPI URL 사용
|
|
194
|
+
bc gen api-types
|
|
195
|
+
|
|
196
|
+
# URL 또는 파일을 직접 지정
|
|
197
|
+
bc gen api-types --source https://api.example.com/openapi.json
|
|
198
|
+
bc gen api-types --source ./openapi.yaml
|
|
219
199
|
```
|
|
220
200
|
|
|
221
|
-
|
|
222
|
-
해당 프로젝트 컨벤션(예: 기존 fetch 래퍼, axios 인스턴스, TanStack Query 훅 패턴)에 맞춰 코드를 짜 줍니다.
|
|
223
|
-
타입이 부족하면 모델이 **"`bc gen api-types` 한 번 돌려달라"** 고 직접 안내해 줍니다.
|
|
201
|
+
생성 기본 경로는 `src/api/types.gen.ts`이며, `--out` 옵션으로 바꿀 수 있습니다.
|
|
224
202
|
|
|
225
|
-
|
|
226
|
-
> 컴포넌트/엔드포인트 호출 코드는 채팅으로 처리하는 하이브리드 구조입니다.
|
|
203
|
+
### Figma 연동
|
|
227
204
|
|
|
228
|
-
|
|
205
|
+
Figma 파일 또는 노드 URL을 등록하고 개인 액세스 토큰을 `.env`에 넣으면, AI가 Figma 정보를
|
|
206
|
+
구현 맥락으로 활용할 수 있습니다.
|
|
229
207
|
|
|
230
208
|
```bash
|
|
231
|
-
|
|
232
|
-
bc gen api-types --source https://api.dev/openapi.json # URL 직접
|
|
233
|
-
bc gen api-types --source ./openapi.yaml # 로컬 파일
|
|
234
|
-
bc gen api-types --out src/api/types.gen.ts # 출력 경로 지정 (기본값)
|
|
209
|
+
FIGMA_TOKEN=figd_xxxxxxxxxxxxxxxx
|
|
235
210
|
```
|
|
236
211
|
|
|
237
|
-
|
|
238
|
-
import type { paths, components } from '@/api/types.gen';
|
|
212
|
+
채팅에서 Figma URL을 함께 전달하면 노드 구조, 이미지, 스타일 정보를 조회할 수 있습니다.
|
|
239
213
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
214
|
+
```text
|
|
215
|
+
이 Figma 화면을 참고해 멤버 카드 컴포넌트를 만들어줘.
|
|
216
|
+
https://www.figma.com/design/.../?node-id=12-34
|
|
243
217
|
```
|
|
244
218
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
219
|
+
#### 디자이너 협업
|
|
220
|
+
| 디자이너 측 작업 | 요청 이유 |
|
|
221
|
+
| --------------------------------------- | --------------------------------------------------------- |
|
|
222
|
+
| 프레임/컴포넌트에 **의미 있는 이름** | `Frame 21` 이 아니라 `Card/Product/Sold-out` 처럼 의미별로 — AI 가 이름으로 컴포넌트 이름과 variant 를 추론합니다. |
|
|
223
|
+
| **Auto layout** 적용 | 안 쓰면 픽셀 좌표만 떨어져 `position: absolute` 코드가 나옵니다. Auto layout 이면 자동으로 `flex`/`gap` 변환. |
|
|
224
|
+
| **로컬 스타일** 등록 (color/text) | "Brand/Primary" 같은 스타일을 등록해두면 `fetch_figma_styles` 로 디자인 토큰을 일괄 추출해서 Tailwind 테마로 바로 박을 수 있어요. |
|
|
225
|
+
| **Components** 화 (♦ 마름모 아이콘) | 반복 UI 가 component 면 모델이 "이거 디자인 시스템 컴포넌트구나" 인식 → 코드에서도 재사용 컴포넌트를 만듭니다. |
|
|
226
|
+
| frame 별로 **"Copy link to selection"** | 일반 share link 는 파일 전체. 특정 frame URL 을 받아야 AI 가 그것만 정확히 가져옵니다. |
|
|
251
227
|
|
|
252
|
-
|
|
253
|
-
Figma·OpenAPI URL 만 추가로 묻고 `bc.config.json` 을 생성합니다.
|
|
254
|
-
필수 의존성(`@tanstack/react-query`, `zod`, React 계열의 `axios`)이 없으면 감지한 패키지 매니저로
|
|
255
|
-
자동 설치하며, 기존 소스 코드는 건드리지 않습니다.
|
|
228
|
+
### 디자인 토큰 빌드
|
|
256
229
|
|
|
257
|
-
|
|
230
|
+
`bc init`으로 생성한 프로젝트에는 토큰 변환 설정이 함께 들어갑니다.
|
|
258
231
|
|
|
259
|
-
|
|
232
|
+
```text
|
|
233
|
+
token.config.js # @byuckchon-frontend/settings/tokens 프리셋을 사용
|
|
234
|
+
src/tokens.json # 디자이너가 Figma(Tokens Studio)에서 export 한 파일을 여기에 덮어씀
|
|
235
|
+
src/tokens.css # 아래 명령으로 자동 생성 (직접 수정하지 않음)
|
|
236
|
+
```
|
|
260
237
|
|
|
261
238
|
```bash
|
|
262
|
-
|
|
263
|
-
bc start # chat 의 alias
|
|
264
|
-
bc chat # ink 풀 TUI (기본)
|
|
265
|
-
bc chat --model claude-fable-5 # 이번 세션만 모델 지정
|
|
266
|
-
bc chat --plain # 단순 readline 모드
|
|
267
|
-
bc chat --once "useEffect 의존성 배열 누락된 거 어떻게 찾아?" # 1회성 호출 (CI/스크립트)
|
|
268
|
-
bc chat -c # 가장 최근 세션 이어가기
|
|
269
|
-
bc chat --list-history # 저장된 세션 목록
|
|
270
|
-
bc chat --resume 2026-06-19_15-23-45 # 특정 세션 이어가기
|
|
239
|
+
npm run tokens:build
|
|
271
240
|
```
|
|
272
241
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
242
|
+
color는 `@theme`의 `--color-*`로, typography는 `@utility text-*`로, motion 등 나머지 토큰은
|
|
243
|
+
`:root` 변수로 출력됩니다. duration 값이 단위 없는 숫자면 `ms`가 자동으로 붙고, settings에 없는
|
|
244
|
+
`--motion-*` 이름이 있으면 경고가 나옵니다. 변환 규칙은 `@byuckchon-frontend/settings`가
|
|
245
|
+
관리하므로, 규칙이 바뀌면 패키지 버전만 올리면 기존 프로젝트에도 그대로 반영됩니다.
|
|
277
246
|
|
|
278
|
-
|
|
279
|
-
- 그 외 → `~/.bc/history/<cwd-hash>/<id>.json`
|
|
247
|
+
### ESLint Convention Review
|
|
280
248
|
|
|
281
|
-
|
|
249
|
+
`bc init`과 `bc adopt`는 프로젝트 루트에 아래 파일을 준비합니다.
|
|
282
250
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
251
|
+
```text
|
|
252
|
+
.github/workflows/eslint-convention-review.yml # 컨벤션 인라인 댓글
|
|
253
|
+
.github/workflows/pr-check.yml # lint / typecheck / build 통과 여부 (bc init 전용)
|
|
254
|
+
tools/review.config.mjs
|
|
255
|
+
```
|
|
287
256
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
| `/clear` | 대화 컨텍스트 초기화 |
|
|
292
|
-
| `/history` | 이전 대화 선택 후 해당 컨텍스트 이어가기 |
|
|
293
|
-
| `/retry` | 마지막 사용자 요청 다시 실행 |
|
|
294
|
-
| `/model [id]` | 세션 모델 변경 (인자 없으면 목록) |
|
|
295
|
-
| `/figma-link <url\|off>` | 프로젝트 Figma 링크 변경 또는 해제 |
|
|
296
|
-
| `/openapi-link <url\|off>` | 프로젝트 OpenAPI 링크 변경 또는 해제 |
|
|
297
|
-
| `/cost` | 누적 토큰/비용 |
|
|
298
|
-
| `/image <path>` | 다음 메시지에 이미지 첨부 (Vision 모델 권장) |
|
|
299
|
-
| `/paste` | 클립보드 이미지 첨부 (macOS, `pngpaste` 필요) |
|
|
300
|
-
| `/attachments` | 현재 첨부 목록 |
|
|
301
|
-
| `/clear-attach` | 첨부 비우기 |
|
|
302
|
-
| `/index [rebuild]` | 코드 인덱스 빌드/재빌드 (자동 빌드된 거 갱신) |
|
|
303
|
-
| `/rag on\|off` | RAG 컨텍스트 주입 즉석 토글 |
|
|
304
|
-
| `/exit` | 종료 (`Ctrl+C` 도 가능) |
|
|
257
|
+
`pr-check.yml` 은 `bc init` 으로 생성한 프로젝트에만 추가됩니다.
|
|
258
|
+
스크립트 이름·대상 브랜치·패키지 매니저를 전제하기 때문에, 기존 프로젝트에
|
|
259
|
+
`bc adopt` 할 때는 추가하지 않습니다. 필요하면 위 파일을 참고해 직접 만드세요.
|
|
305
260
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
261
|
+
워크플로 템플릿은 프로젝트 유형에 맞는 것만 복사됩니다.
|
|
262
|
+
(`<이름>.single.yml` / `<이름>.monorepo.yml` → `<이름>.yml`)
|
|
263
|
+
단일 프로젝트는 npm, 모노레포는 pnpm + turbo 기준으로 만들어집니다.
|
|
309
264
|
|
|
310
|
-
|
|
311
|
-
|
|
265
|
+
복사된 파일이므로 **프로젝트 소유**입니다. 대상 브랜치나 단계를 자유롭게 고치세요.
|
|
266
|
+
settings 를 올려도 이 파일은 바뀌지 않습니다.
|
|
312
267
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
2. **드래그 & 드롭** — `/image ` 까지 입력 후, Finder 에서 파일을 터미널 위로 끌어다 놓으면 절대경로가 자동 입력됩니다. Enter.
|
|
316
|
-
3. `/paste` — **macOS 한정**, 클립보드의 이미지(예: `Cmd+Shift+4` 스크린샷 또는 Finder 에서 `Cmd+C` 한 이미지)를 바로 첨부.
|
|
317
|
-
- 사전에 `brew install pngpaste` 한 번 필요.
|
|
268
|
+
PR이 `dev` 브랜치를 대상으로 할 때, workflow가 기계적으로 판별 가능한 규칙을 검사하고
|
|
269
|
+
변경 줄에 댓글을 게시합니다.
|
|
318
270
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
> `/paste` 가 `pngpaste` 로 클립보드를 직접 읽어 첨부합니다 — `Cmd+C` → 입력창에 `/paste` → Enter.
|
|
271
|
+
컨벤션 규칙과 댓글 게시 스크립트는 `@byuckchon-frontend/settings`가 제공합니다.
|
|
272
|
+
프로젝트에 규칙 사본을 두지 않으므로, 규칙이 바뀌면 settings 버전만 올리면 됩니다.
|
|
322
273
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
274
|
+
| 구분 | 담당 | 결과 |
|
|
275
|
+
| --- | --- | --- |
|
|
276
|
+
| 일반 lint | 기존 ESLint 규칙 | Actions annotation |
|
|
277
|
+
| Convention Review | 파일명, export 방식, boolean 변수명 등 | PR 인라인 `BLOCKING` 또는 `WARNING` 댓글 |
|
|
278
|
+
| AI 리뷰 | 설계·예외 처리·비즈니스 판단 | 별도 AI 리뷰 workflow에서 구성 |
|
|
326
279
|
|
|
327
|
-
|
|
280
|
+
같은 지적은 숨김 marker를 기준으로 중복 게시하지 않고, 메시지가 바뀌면 기존 댓글을 갱신합니다.
|
|
281
|
+
모노레포에서는 workflow와 `tools/`가 루트에 한 번만 존재하며, PR에서 변경된 TypeScript 파일을
|
|
282
|
+
대상으로 검사합니다.
|
|
328
283
|
|
|
329
|
-
|
|
330
|
-
빠뜨려지는 경우가 있습니다 — ink-text-input 의 알려진 한계입니다.
|
|
284
|
+
### 설정과 세션 관리
|
|
331
285
|
|
|
332
|
-
|
|
286
|
+
전역 설정은 `~/.bc/config.json`, 프로젝트 설정은 `<project>/bc.config.json`에 저장됩니다.
|
|
333
287
|
|
|
334
288
|
```bash
|
|
335
|
-
bc config
|
|
336
|
-
|
|
337
|
-
|
|
289
|
+
bc config show
|
|
290
|
+
bc config set-model
|
|
291
|
+
bc config set-key anthropic
|
|
292
|
+
bc config set-key openai
|
|
293
|
+
bc config set-ui plain
|
|
338
294
|
```
|
|
339
295
|
|
|
340
|
-
|
|
296
|
+
대화 기록은 프로젝트 안에서는 `.bc/history/`에, 프로젝트 밖에서는 사용자 설정 디렉터리에
|
|
297
|
+
저장됩니다. 최근 대화를 이어가려면 다음 명령을 사용하세요.
|
|
298
|
+
|
|
341
299
|
```bash
|
|
342
|
-
bc
|
|
300
|
+
bc chat -c
|
|
301
|
+
bc chat --list-history
|
|
302
|
+
bc chat --resume <session-id>
|
|
343
303
|
```
|
|
344
304
|
|
|
345
|
-
일회성으로 plain 만 쓰고 싶으면 `bc chat --plain`.
|
|
346
|
-
|
|
347
|
-
### `bc config` — 설정
|
|
348
305
|
|
|
349
|
-
|
|
350
|
-
bc config show # 현재 적용 중인 설정 확인
|
|
351
|
-
bc config set-model # 대화형 모델 선택
|
|
352
|
-
bc config set-model claude-sonnet-5 # 직접 지정
|
|
353
|
-
bc config set-key anthropic # 키 안전 입력 (가려짐)
|
|
354
|
-
bc config set-key anthropic sk-ant-... # 직접 지정
|
|
355
|
-
bc config set-gateway https://ai.example.com # 사내 게이트웨이 모드
|
|
356
|
-
bc config set-gateway # 게이트웨이 해제 (BYOK 모드)
|
|
357
|
-
bc config set-ui plain # 한글 IME 안정 모드
|
|
358
|
-
bc config set-ui ink # 풀 TUI 복귀
|
|
359
|
-
```
|
|
306
|
+
#### 세션 내 슬래시 명령
|
|
360
307
|
|
|
361
|
-
|
|
308
|
+
채팅 중 `/`를 입력하면 사용 가능한 명령이 자동완성 메뉴로 표시됩니다.
|
|
362
309
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
310
|
+
| 명령 | 설명 |
|
|
311
|
+
| --- | --- |
|
|
312
|
+
| `/clear` | 현재 대화 컨텍스트 비우기 |
|
|
313
|
+
| `/history` | 프로젝트의 이전 대화 목록 보기 |
|
|
314
|
+
| `/retry` | 마지막 사용자 요청 다시 실행 |
|
|
315
|
+
| `/model <id>` | 현재 세션의 모델 변경. 인자가 없으면 모델 목록 표시 |
|
|
316
|
+
| `/figma-link <url\|off>` | 프로젝트 Figma 링크 설정 또는 해제 |
|
|
317
|
+
| `/openapi-link <url\|off>` | 프로젝트 OpenAPI 링크 설정 또는 해제 |
|
|
318
|
+
| `/cost` | 현재 세션의 누적 토큰과 비용 확인 |
|
|
319
|
+
| `/image <path>` | 이미지 첨부. Finder에서 파일을 터미널로 끌어다 놓아 경로를 넣을 수도 있음 |
|
|
320
|
+
| `/paste` | 클립보드의 이미지 또는 스크린샷 첨부. macOS에서 `pngpaste` 필요 |
|
|
321
|
+
| `/attachments` | 현재 첨부 목록 보기 |
|
|
322
|
+
| `/clear-attach` | 현재 첨부 목록 비우기 |
|
|
323
|
+
| `/index` | 코드베이스 인덱스 즉시 빌드 또는 갱신 |
|
|
324
|
+
| `/rag on\|off` | 코드베이스 RAG 컨텍스트 사용 여부 전환 |
|
|
325
|
+
| `/exit` | 채팅 종료. `Ctrl+C`로도 종료 가능 |
|
|
368
326
|
|
|
369
|
-
우선순위: **환경변수 > 글로벌 키**, **프로젝트 모델 > 글로벌 모델**.
|
|
370
327
|
|
|
371
328
|
## 지원 모델
|
|
372
329
|
|
|
@@ -379,14 +336,27 @@ bc config set-ui ink # 풀 TUI 복귀
|
|
|
379
336
|
| `gpt-5` | openai | 일반 코드 |
|
|
380
337
|
| `gpt-5-mini` | openai | 저렴한 OpenAI |
|
|
381
338
|
|
|
382
|
-
## 토큰/비용 안전장치
|
|
383
339
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
-
|
|
387
|
-
-
|
|
340
|
+
## 제한 사항
|
|
341
|
+
|
|
342
|
+
- AI의 파일 생성·수정은 현재 즉시 반영됩니다. 작업 전후로 Git을 사용해 변경 사항을 검토하세요.
|
|
343
|
+
- 코드베이스 RAG의 임베딩에는 OpenAI API 키가 필요합니다. Anthropic 키만으로는 인덱스를 만들 수 없습니다.
|
|
344
|
+
- Figma 연동에는 개인 액세스 토큰이 필요하며, 매우 큰 프레임은 작은 노드 단위로 나누어 조회하는 편이 좋습니다.
|
|
345
|
+
- ESLint Convention Review는 기본적으로 `dev` 대상 PR에서 실행됩니다. 다른 기본 브랜치를 쓰면
|
|
346
|
+
생성된 workflow의 `branches`를 수정해야 합니다.
|
|
347
|
+
- 현재 `BLOCKING`은 PR 댓글 분류입니다. workflow 자체를 실패시키고 merge를 강제 차단하려면
|
|
348
|
+
ESLint 종료 코드 처리와 GitHub branch protection 설정이 추가로 필요합니다.
|
|
349
|
+
- 외부 fork PR은 GitHub token 권한 때문에 인라인 댓글 작성이 제한될 수 있습니다.
|
|
350
|
+
- 기존 모노레포에 `bc adopt`를 적용할 때, 모노레포용 `review.config.mjs`는
|
|
351
|
+
`packages/config-eslint/react.js` 구조를 전제로 합니다. ESLint 설정 구조가 다르면 해당 import를
|
|
352
|
+
프로젝트에 맞게 조정해야 합니다.
|
|
353
|
+
- AI Code Review workflow는 자동 생성 대상이 아닙니다. 팀의 AI 제공자에 맞춰 별도로 추가해야 합니다.
|
|
354
|
+
- PR Check workflow는 lint · typecheck · build 만 실행합니다. 테스트는 팀의 전략에 맞춰
|
|
355
|
+
생성된 `pr-check.yml` 에 단계를 추가하세요.
|
|
388
356
|
|
|
389
|
-
## 로드맵
|
|
357
|
+
## 제품 로드맵
|
|
358
|
+
|
|
359
|
+
아래 항목은 방향성으로, 일정과 세부 구현은 변경될 수 있습니다.
|
|
390
360
|
|
|
391
361
|
- [x] Phase 1: provider 추상화, 글로벌/프로젝트 설정, 스트리밍 REPL
|
|
392
362
|
- [x] Phase 2a: ink 기반 풀 TUI, 이미지 첨부 (`/image`)
|
|
@@ -402,7 +372,6 @@ bc config set-ui ink # 풀 TUI 복귀
|
|
|
402
372
|
- [ ] v1.8.0 — write/edit 승인 게이트 (`y/n/v/q`), diff 미리보기
|
|
403
373
|
- [ ] Phase 3c-2: Figma 실 fetch (URL → 노드 트리 → 컴포넌트 인텐트)
|
|
404
374
|
- [ ] Phase 4: `bc gen component/page` (AST 편집 + 검증 루프), `/apply` diff 미리보기
|
|
405
|
-
|
|
406
375
|
## 라이선스
|
|
407
376
|
|
|
408
|
-
MIT
|
|
377
|
+
[MIT License](LICENSE)를 따릅니다.
|