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