@elyun/bylane 1.22.0 → 1.24.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/CLAUDE.md +37 -5
- package/README.md +161 -36
- package/commands/bylane-analyze-agent.md +1 -1
- package/commands/bylane-cleanup.md +1 -1
- package/commands/bylane-code-agent.md +79 -15
- package/commands/bylane-commit-agent.md +1 -1
- package/commands/bylane-issue-agent.md +195 -49
- package/commands/bylane-monitor.md +1 -1
- package/commands/bylane-notify-agent.md +1 -1
- package/commands/bylane-orchestrator.md +65 -29
- package/commands/bylane-pr-agent.md +1 -1
- package/commands/bylane-respond-agent.md +1 -1
- package/commands/bylane-respond-loop.md +2 -2
- package/commands/bylane-review-agent.md +1 -1
- package/commands/bylane-review-loop.md +2 -2
- package/commands/bylane-setup.md +36 -5
- package/commands/bylane-test-agent.md +1 -1
- package/commands/bylane.md +92 -51
- package/package.json +1 -1
- package/src/cli.js +102 -1
- package/src/config.js +9 -0
- package/src/loop-utils.js +102 -0
- package/src/memory.js +93 -0
- package/src/preflight.js +14 -2
- package/src/respond-loop.js +10 -12
- package/src/review-loop.js +10 -12
package/CLAUDE.md
CHANGED
|
@@ -21,6 +21,15 @@ node -e "import('./src/state.js').then(({writeState})=>writeState('code-agent',{
|
|
|
21
21
|
|
|
22
22
|
# 에이전트별 모델 확인
|
|
23
23
|
node -e "import('./src/config.js').then(({loadConfig,getAgentModel})=>{const c=loadConfig();['orchestrator','code-agent','review-agent'].forEach(a=>console.log(a,getAgentModel(c,a)))})"
|
|
24
|
+
|
|
25
|
+
# Loop 관리
|
|
26
|
+
npx @elyun/bylane loop start # review-loop + respond-loop 시작 (tmux 또는 process)
|
|
27
|
+
npx @elyun/bylane loop stop # loop 종료
|
|
28
|
+
npx @elyun/bylane loop status # 실행 상태 확인
|
|
29
|
+
|
|
30
|
+
# issueMemory 확인
|
|
31
|
+
npx @elyun/bylane memory list
|
|
32
|
+
npx @elyun/bylane memory read 123
|
|
24
33
|
```
|
|
25
34
|
|
|
26
35
|
## 아키텍처
|
|
@@ -28,9 +37,11 @@ node -e "import('./src/config.js').then(({loadConfig,getAgentModel})=>{const c=l
|
|
|
28
37
|
- `src/state.js` — `.bylane/state/*.json` 읽기/쓰기 유틸 (writeState, readState, clearState, listStates, appendLog)
|
|
29
38
|
- `src/config.js` — `.bylane/bylane.json` 로드/저장/검증 (loadConfig, saveConfig, validateConfig, getAgentModel, DEFAULT_CONFIG)
|
|
30
39
|
- `src/branch.js` — 브랜치명 패턴 엔진 (buildBranchName, buildBranchNameFromConfig)
|
|
31
|
-
- `src/
|
|
32
|
-
- `src/
|
|
33
|
-
- `src/
|
|
40
|
+
- `src/memory.js` — 이슈별 컨텍스트 메모리 유틸 (readIssueMemory, appendIssueMemory, listIssueMemories)
|
|
41
|
+
- `src/cli.js` — npx 설치 CLI (install, loop, --symlink 옵션, 기존 파일 .bak 백업)
|
|
42
|
+
- `src/loop-utils.js` — 루프 공통 유틸 (killExistingLoop, tmux 세션 관리, createAbsoluteTimer, resolveLoopMode)
|
|
43
|
+
- `src/review-loop.js` — review 요청 PR 폴러 → `.bylane/state/review-queue.json` (절대시간 기반 폴링)
|
|
44
|
+
- `src/respond-loop.js` — 내 PR 리뷰/코멘트 폴러 → `.bylane/state/respond-queue.json` (절대시간 기반 폴링)
|
|
34
45
|
- `src/monitor/` — blessed 기반 TUI 대시보드 (2열 그리드, 1초 폴링, fullUnicode)
|
|
35
46
|
- `skills/` — Claude Code 에이전트 skill 파일들
|
|
36
47
|
- `hooks/` — 외부 이벤트 자동 감지 훅
|
|
@@ -46,12 +57,31 @@ orchestrator → issue-agent → code-agent → test-agent → commit-agent
|
|
|
46
57
|
→ pr-agent → review-agent → respond-agent → notify-agent
|
|
47
58
|
|
|
48
59
|
analyze-agent (독립: 프로젝트 분석 → .claude/instructions/ 생성)
|
|
49
|
-
review-loop (독립:
|
|
50
|
-
respond-loop (독립:
|
|
60
|
+
review-loop (독립: 설정 주기로 review 요청 감지, 절대시간 기반 폴링)
|
|
61
|
+
respond-loop (독립: 설정 주기로 리뷰 코멘트 감지, 절대시간 기반 폴링)
|
|
51
62
|
```
|
|
52
63
|
|
|
53
64
|
각 에이전트는 `.bylane/state/{name}.json`에 상태 기록. 모니터가 1초마다 폴링.
|
|
54
65
|
|
|
66
|
+
## Loop 실행
|
|
67
|
+
|
|
68
|
+
`bylane loop start` / `bylane loop stop` / `bylane loop status`
|
|
69
|
+
|
|
70
|
+
두 가지 모드 (`config.loop.mode`):
|
|
71
|
+
|
|
72
|
+
| 모드 | 설명 | 해결하는 문제 |
|
|
73
|
+
|------|------|-------------|
|
|
74
|
+
| `tmux` (기본) | tmux 세션에서 백그라운드 실행 | 터미널 종료, SSH 끊김 시 프로세스 유지 |
|
|
75
|
+
| `process` | 현재 프로세스에서 직접 실행 | tmux 미설치 환경 대응 |
|
|
76
|
+
|
|
77
|
+
두 모드 모두 **절대시간 기반 폴링** 사용:
|
|
78
|
+
- 10초마다 "마지막 폴링 후 intervalMs 경과 여부" 체크
|
|
79
|
+
- macOS 잠자기 모드 동안은 CPU 정지로 실행 불가 (OS 제약)
|
|
80
|
+
- 잠자기 해제 직후 경과 시간 감지 → 즉시 폴링 실행
|
|
81
|
+
- preflight에서 tmux 미설치 감지 시 자동으로 process 모드 fallback
|
|
82
|
+
|
|
83
|
+
설정: `config.loop.intervalMs` (기본 300000 = 5분), `config.loop.sessionName` (기본 `bylane-loops`)
|
|
84
|
+
|
|
55
85
|
## 상태 파일 스키마
|
|
56
86
|
|
|
57
87
|
```json
|
|
@@ -92,6 +122,8 @@ tests/
|
|
|
92
122
|
## 주의사항
|
|
93
123
|
|
|
94
124
|
- `.bylane/state/`는 .gitignore로 제외됨 (런타임 상태)
|
|
125
|
+
- `.bylane/memory/`는 .gitignore로 제외됨 (issueMemory 로컬 파일)
|
|
95
126
|
- `.bylane/bylane.json`은 추적됨 (프로젝트 설정)
|
|
96
127
|
- `docs/`는 .gitignore로 제외됨 (내부 설계 문서)
|
|
97
128
|
- pre-commit 훅: `npm install` 시 자동 등록 (`prepare` 스크립트)
|
|
129
|
+
- issueMemory: 루프 비활성 시 로컬 파일, 루프 실행 중 GitHub 이슈 코멘트로 기록
|
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@ GitHub Issues에서 시작해 코드 구현, 테스트, 커밋, PR 생성, 리
|
|
|
11
11
|
| 기능 | 설명 |
|
|
12
12
|
|------|------|
|
|
13
13
|
| **전체 워크플로우** | 자연어 한 줄로 이슈 → 코드 → 테스트 → 커밋 → PR 자동화 |
|
|
14
|
+
| **issueMemory** | 이슈별 작업 컨텍스트(아키텍처 결정, 트러블슈팅 등) 자동 기록 및 재활용 |
|
|
14
15
|
| **프로젝트 분석** | 코드 스타일·디자인 토큰·아키텍처 자동 분석, `.claude/instructions/` 생성 |
|
|
15
16
|
| **인라인 코드 리뷰** | 변경 라인마다 개별 코멘트 + GitHub suggestion 블록 자동 등록 |
|
|
16
17
|
| **자동 리뷰 루프** | 5분 주기로 review 요청된 PR을 자동 감지 → 리뷰 실행 |
|
|
@@ -64,10 +65,10 @@ node src/cli.js install
|
|
|
64
65
|
설치 후 Claude Code에서 프로젝트 디렉토리로 이동:
|
|
65
66
|
|
|
66
67
|
```
|
|
67
|
-
/bylane
|
|
68
|
+
/bylane-setup
|
|
68
69
|
```
|
|
69
70
|
|
|
70
|
-
인터랙티브 설정 (GitHub 접근 방법, 알림 채널, 브랜치 패턴, 에이전트 모델
|
|
71
|
+
인터랙티브 설정 (GitHub 접근 방법, 이슈 트래커, 알림 채널, 팀 모드, 권한, 루프 모드, 브랜치 패턴, 에이전트 모델).
|
|
71
72
|
|
|
72
73
|
### 사전 점검
|
|
73
74
|
|
|
@@ -80,7 +81,7 @@ npx @elyun/bylane preflight
|
|
|
80
81
|
또는 Claude Code에서:
|
|
81
82
|
|
|
82
83
|
```
|
|
83
|
-
/bylane
|
|
84
|
+
/bylane 점검해줘
|
|
84
85
|
```
|
|
85
86
|
|
|
86
87
|
점검 항목: bylane.json 존재, GitHub CLI 로그인, GITHUB_TOKEN, Slack/Telegram 연동 설정.
|
|
@@ -101,54 +102,132 @@ npx @elyun/bylane preflight
|
|
|
101
102
|
|
|
102
103
|
## 사용법
|
|
103
104
|
|
|
104
|
-
###
|
|
105
|
+
### 자연어 워크플로우 (`/bylane`)
|
|
105
106
|
|
|
106
107
|
```
|
|
107
108
|
/bylane 다크모드 토글 버튼 추가해줘
|
|
108
109
|
/bylane issue #123 구현해줘
|
|
109
110
|
/bylane PR #45 리뷰해줘
|
|
110
|
-
/bylane 리뷰
|
|
111
|
+
/bylane 리뷰 반영해줘
|
|
111
112
|
```
|
|
112
113
|
|
|
113
|
-
|
|
114
|
+
`/bylane`은 자연어 키워드를 감지하여 적절한 에이전트를 자동 실행합니다.
|
|
115
|
+
서브커맨드 없이 **자연어만** 받습니다.
|
|
116
|
+
|
|
117
|
+
### 효과적인 지시 방법
|
|
118
|
+
|
|
119
|
+
byLane은 지시 내용을 바탕으로 코드베이스를 분석하고 사용자와 문답을 거쳐 이슈를 작성합니다.
|
|
120
|
+
지시가 구체적일수록 문답 횟수가 줄고 이슈 품질이 높아집니다.
|
|
121
|
+
|
|
122
|
+
#### 신규 기능
|
|
123
|
+
|
|
124
|
+
목적과 UI 힌트를 함께 제공하면 좋습니다:
|
|
114
125
|
|
|
115
126
|
```
|
|
116
|
-
/bylane
|
|
117
|
-
/bylane issue [#번호 | 텍스트] 이슈 생성/분석
|
|
118
|
-
/bylane code [#번호] 코드 구현
|
|
119
|
-
/bylane test 테스트 실행
|
|
120
|
-
/bylane commit 커밋 생성
|
|
121
|
-
/bylane pr PR 생성
|
|
122
|
-
/bylane review [#PR번호] [scope] PR 인라인 리뷰
|
|
123
|
-
/bylane respond [#PR번호] [모드] 리뷰 반박/반영
|
|
124
|
-
/bylane notify 알림 발송
|
|
125
|
-
/bylane status 현재 상태 요약
|
|
127
|
+
/bylane 헤더 우측에 다크모드 토글 버튼 추가해줘. 상태는 localStorage에 저장하고 시스템 설정도 따라가게 해줘.
|
|
126
128
|
```
|
|
127
129
|
|
|
128
|
-
|
|
130
|
+
Figma 링크가 있으면 포함하세요:
|
|
129
131
|
|
|
130
|
-
|
|
132
|
+
```
|
|
133
|
+
/bylane 결제 흐름 추가해줘. 디자인은 https://figma.com/... 참고해줘.
|
|
134
|
+
```
|
|
131
135
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
136
|
+
#### 버그 수정
|
|
137
|
+
|
|
138
|
+
재현 조건과 기대 동작을 함께 적으면 분석 범위가 좁아집니다:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
/bylane 로그인 후 새로고침하면 세션이 풀리는 버그 수정해줘. 토큰 갱신 로직 쪽 문제인 것 같아.
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
#### 기존 기능 개선
|
|
145
|
+
|
|
146
|
+
현재 상태의 어느 부분이 문제인지 지적하면 최소 변경으로 진행됩니다:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
/bylane 상품 목록 API 호출이 매번 발생해서 느린데, 캐싱 넣어줘. SWR 이미 쓰고 있어.
|
|
135
150
|
```
|
|
136
151
|
|
|
137
|
-
|
|
152
|
+
#### 이슈 번호로 구현
|
|
153
|
+
|
|
154
|
+
이미 작성된 이슈를 그대로 구현할 때:
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
/bylane issue #42 구현해줘
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
issue-agent가 이슈 본문의 "구현 방향"과 "관련 파일" 섹션을 읽어 code-agent에 전달합니다.
|
|
161
|
+
이슈 본문에 배경, 접근 방법, 영향 범위가 잘 정리되어 있을수록 추가 문답 없이 바로 구현합니다.
|
|
162
|
+
|
|
163
|
+
#### 피해야 할 패턴
|
|
164
|
+
|
|
165
|
+
| 지시 | 문제 | 개선 |
|
|
166
|
+
|------|------|------|
|
|
167
|
+
| `/bylane 버그 고쳐줘` | 어떤 버그인지 불명확 → 문답 증가 | `/bylane 장바구니 수량 변경 시 합계가 안 바뀌는 버그 수정해줘` |
|
|
168
|
+
| `/bylane 리팩토링해줘` | 범위 불명확 → 전체 분석 필요 | `/bylane useCart hook이 너무 커서 상태 관리 부분만 분리해줘` |
|
|
169
|
+
| `/bylane 성능 개선` | 측정 기준 없음 | `/bylane 홈 화면 LCP가 4초 넘는데 이미지 lazy loading 추가해줘` |
|
|
170
|
+
|
|
171
|
+
### 개별 에이전트 직접 실행 (`/bylane-*`)
|
|
172
|
+
|
|
173
|
+
개별 에이전트를 직접 실행하려면 `/bylane-*` 커맨드를 사용합니다:
|
|
174
|
+
|
|
175
|
+
| 커맨드 | 설명 |
|
|
176
|
+
|---|---|
|
|
177
|
+
| `/bylane-setup` | GitHub 접근, 알림, 팀 모드, 루프, 브랜치, 모델 설정 위자드 |
|
|
178
|
+
| `/bylane-monitor` | TUI 대시보드 실행 안내 (에이전트 상태/큐/로그 실시간 표시) |
|
|
179
|
+
| `/bylane-cleanup` | 파일 권한 수정, 죽은 PID 정리, 큐 복구 일괄 실행 |
|
|
180
|
+
| `/bylane-analyze-agent` | 코드 스타일/디자인 토큰/아키텍처 분석 → `.claude/instructions/` 생성 |
|
|
181
|
+
| `/bylane-issue-agent` | 코드베이스 분석 + 문답 → 전략 스펙 포함 GitHub 이슈 작성 |
|
|
182
|
+
| `/bylane-code-agent` | 이슈 전략 스펙 기반 브랜치 생성 + 코드 구현 |
|
|
183
|
+
| `/bylane-test-agent` | 테스트 실행, FAIL 시 상세 기록으로 재시도 피드백 제공 |
|
|
184
|
+
| `/bylane-commit-agent` | conventional commit 메시지 자동 생성 + 커밋 |
|
|
185
|
+
| `/bylane-pr-agent` | 커밋 히스토리 분석 → PR 제목/요약/테스트 계획 자동 작성 |
|
|
186
|
+
| `/bylane-review-agent` | PR diff 라인별 인라인 리뷰 (grammar/domain/code/security) |
|
|
187
|
+
| `/bylane-respond-agent` | 리뷰 코멘트 accept(수정 반영) 또는 rebut(반박) 대응 |
|
|
188
|
+
| `/bylane-review-loop` | 설정 주기로 review 요청 PR 감지 → 자동 리뷰 실행 |
|
|
189
|
+
| `/bylane-respond-loop` | 설정 주기로 내 PR 리뷰/코멘트 감지 → 자동 대응 실행 |
|
|
190
|
+
| `/bylane-notify-agent` | Slack/Telegram 알림 발송 |
|
|
191
|
+
|
|
192
|
+
### 자동 루프
|
|
193
|
+
|
|
194
|
+
두 루프를 동시에 실행하면 리뷰 요청과 리뷰 대응을 완전 자동화합니다.
|
|
195
|
+
|
|
196
|
+
#### CLI로 루프 관리 (권장)
|
|
138
197
|
|
|
139
198
|
```bash
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
#
|
|
199
|
+
npx @elyun/bylane loop start # review-loop + respond-loop 동시 시작 (tmux 또는 process)
|
|
200
|
+
npx @elyun/bylane loop stop # 루프 종료
|
|
201
|
+
npx @elyun/bylane loop status # 실행 상태 확인
|
|
143
202
|
```
|
|
144
203
|
|
|
145
|
-
|
|
204
|
+
두 가지 실행 모드 (`/bylane-setup`에서 설정):
|
|
205
|
+
|
|
206
|
+
| 모드 | 설명 |
|
|
207
|
+
|------|------|
|
|
208
|
+
| `tmux` (기본) | tmux 세션에서 백그라운드 실행. 터미널 종료/SSH 끊김 시에도 유지 |
|
|
209
|
+
| `process` | 현재 프로세스에서 직접 실행. tmux 미설치 시 자동 fallback |
|
|
210
|
+
|
|
211
|
+
두 모드 모두 **절대시간 기반 폴링**을 사용합니다:
|
|
212
|
+
- macOS 잠자기 모드 해제 직후 경과 시간 감지 → 즉시 폴링 실행
|
|
213
|
+
- 잠자기 중에는 CPU 정지로 실행 불가 (OS 제약)
|
|
214
|
+
|
|
215
|
+
#### Claude Code에서 실행
|
|
146
216
|
|
|
147
217
|
```
|
|
148
|
-
/bylane
|
|
149
|
-
/bylane
|
|
218
|
+
/bylane-review-loop 자동 리뷰 루프 시작 (검사 범위 선택 후 시작)
|
|
219
|
+
/bylane-respond-loop 자동 대응 루프 시작
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### 수동 실행
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
node src/review-loop.js & # 내게 요청된 PR 자동 리뷰
|
|
226
|
+
node src/respond-loop.js & # 내 PR 리뷰 자동 대응
|
|
150
227
|
```
|
|
151
228
|
|
|
229
|
+
루프 종료: 모니터에서 `[s]` 키, 또는 `npx @elyun/bylane loop stop`
|
|
230
|
+
|
|
152
231
|
---
|
|
153
232
|
|
|
154
233
|
## 모니터 대시보드
|
|
@@ -210,7 +289,7 @@ npx @elyun/bylane monitor
|
|
|
210
289
|
|
|
211
290
|
인자로도 지정 가능:
|
|
212
291
|
```
|
|
213
|
-
/bylane
|
|
292
|
+
/bylane PR #45 code,security만 리뷰해줘
|
|
214
293
|
```
|
|
215
294
|
|
|
216
295
|
### 인라인 코멘트
|
|
@@ -251,9 +330,9 @@ docs/REVIEW_TEMPLATE.md
|
|
|
251
330
|
| `manual` | 코멘트별로 수정/반박/건너뜀 직접 선택 |
|
|
252
331
|
|
|
253
332
|
```
|
|
254
|
-
/bylane
|
|
255
|
-
/bylane
|
|
256
|
-
/bylane
|
|
333
|
+
/bylane #45 리뷰 대응해줘 auto 모드 (기본)
|
|
334
|
+
/bylane #45 리뷰 코멘트별로 보여줘 manual 모드
|
|
335
|
+
/bylane #45 리뷰 전부 반영해줘 accept 모드
|
|
257
336
|
```
|
|
258
337
|
|
|
259
338
|
auto 모드에서는 실행 전 요약을 먼저 보여주고 확인을 받습니다:
|
|
@@ -266,9 +345,51 @@ auto 모드에서는 실행 전 요약을 먼저 보여주고 확인을 받습
|
|
|
266
345
|
|
|
267
346
|
---
|
|
268
347
|
|
|
348
|
+
## issueMemory
|
|
349
|
+
|
|
350
|
+
이슈 단위로 작업 컨텍스트를 자동으로 기록하고, 다음 세션에서 재활용합니다.
|
|
351
|
+
|
|
352
|
+
### 동작 방식
|
|
353
|
+
|
|
354
|
+
- **루프 비활성 시** — `.bylane/memory/issues/{이슈번호}.md` 로컬 파일에 기록
|
|
355
|
+
- **루프 실행 중** — GitHub 이슈 코멘트로 기록 (팀 전체가 볼 수 있도록)
|
|
356
|
+
|
|
357
|
+
기록 내용: 작업 요약, 변경 파일, 아키텍처 결정, 트러블슈팅 내역
|
|
358
|
+
|
|
359
|
+
### 자동 기록
|
|
360
|
+
|
|
361
|
+
issue-agent와 code-agent가 작업 완료 후 자동으로 기록합니다. 별도 설정 불필요.
|
|
362
|
+
|
|
363
|
+
code-agent는 작업 시작 시 이전 세션의 메모리를 불러와 일관된 아키텍처 결정을 유지합니다.
|
|
364
|
+
|
|
365
|
+
### 수동 사용
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
npx @elyun/bylane memory read 123 # 이슈 #123 메모리 조회
|
|
369
|
+
npx @elyun/bylane memory list # 메모리가 있는 이슈 목록
|
|
370
|
+
npx @elyun/bylane memory append 123 code-agent "메모 내용" # 직접 추가
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### 설정
|
|
374
|
+
|
|
375
|
+
`.bylane/bylane.json`:
|
|
376
|
+
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"memory": {
|
|
380
|
+
"enabled": true,
|
|
381
|
+
"dir": ".bylane/memory"
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
`enabled: false`로 비활성화할 수 있습니다.
|
|
387
|
+
|
|
388
|
+
---
|
|
389
|
+
|
|
269
390
|
## 프로젝트 분석
|
|
270
391
|
|
|
271
|
-
`/bylane
|
|
392
|
+
`/bylane-analyze-agent` (또는 `/bylane 프로젝트 분석해줘`) 실행 시 현재 프로젝트를 자동 분석하여 Claude Code가 참조할 instruction 파일을 생성합니다.
|
|
272
393
|
|
|
273
394
|
| 파일 | 내용 |
|
|
274
395
|
|------|------|
|
|
@@ -279,8 +400,8 @@ auto 모드에서는 실행 전 요약을 먼저 보여주고 확인을 받습
|
|
|
279
400
|
ESLint/Prettier/tsconfig, Tailwind config, CSS 변수 등 설정 파일을 자동 탐색하고 실제 소스 패턴을 샘플링합니다. 분석 후 `CLAUDE.md`에 import 구문을 자동 추가합니다.
|
|
280
401
|
|
|
281
402
|
```
|
|
282
|
-
/bylane
|
|
283
|
-
/bylane
|
|
403
|
+
/bylane-analyze-agent 기존 파일 있으면 확인 요청
|
|
404
|
+
/bylane 프로젝트 분석 강제로 해줘 강제 덮어쓰기
|
|
284
405
|
```
|
|
285
406
|
|
|
286
407
|
---
|
|
@@ -355,6 +476,10 @@ respond-loop 독립: 5분 주기 리뷰 코멘트 감지
|
|
|
355
476
|
"templateFile": "",
|
|
356
477
|
"footer": "{model} · {date}"
|
|
357
478
|
},
|
|
479
|
+
"memory": {
|
|
480
|
+
"enabled": true,
|
|
481
|
+
"dir": ".bylane/memory"
|
|
482
|
+
},
|
|
358
483
|
"extensions": {
|
|
359
484
|
"figma": { "enabled": false, "useAt": "issue-analysis" }
|
|
360
485
|
}
|
|
@@ -394,7 +519,7 @@ npx @elyun/bylane # 재설치/업데이트
|
|
|
394
519
|
|
|
395
520
|
### 루프 중복 실행
|
|
396
521
|
|
|
397
|
-
review-loop / respond-loop는 PID를 상태 파일에 기록합니다.
|
|
522
|
+
review-loop / respond-loop는 PID를 상태 파일에 기록합니다. `npx @elyun/bylane loop status`로 상태를 확인하고, `npx @elyun/bylane loop stop` 또는 모니터 `[s]` 키로 종료하세요.
|
|
398
523
|
|
|
399
524
|
### GitHub MCP vs CLI
|
|
400
525
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bylane-analyze-agent
|
|
3
|
-
description:
|
|
3
|
+
description: 프로젝트의 코드 스타일, 디자인 토큰, 아키텍처, 폴더 구조, 의존성을 병렬 분석하여 .claude/instructions/ 하위에 instruction 파일로 저장한다. CLAUDE.md에 import를 자동 추가하여 이후 에이전트가 프로젝트 컨텍스트를 활용할 수 있게 한다.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Analyze Agent
|
|
@@ -1,13 +1,38 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bylane-code-agent
|
|
3
|
-
description: issue-agent
|
|
3
|
+
description: issue-agent가 작성한 전략 스펙(이슈 본문)을 기반으로 브랜치를 생성하고 코드를 구현한다. issueMemory에 진행 상황을 기록하며, 실패 시 피드백 루프로 재시도한다.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Code Agent
|
|
7
7
|
|
|
8
|
-
## 입력
|
|
8
|
+
## 입력 읽기
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
### 1. issue-agent 상태에서 spec 로드
|
|
11
|
+
|
|
12
|
+
`.bylane/state/issue-agent.json`에서 다음 필드를 읽는다:
|
|
13
|
+
|
|
14
|
+
| 필드 | 용도 |
|
|
15
|
+
|------|------|
|
|
16
|
+
| `spec.title` | 작업 제목 |
|
|
17
|
+
| `spec.approach` | 채택된 구현 방향 |
|
|
18
|
+
| `spec.affectedFiles` | 수정/추가할 파일 목록 |
|
|
19
|
+
| `spec.checklist` | 구현 체크리스트 |
|
|
20
|
+
| `spec.figmaSpec` | Figma 컬러토큰·컴포넌트 구조 |
|
|
21
|
+
| `issueType` | `new-feature` / `bug` / `improvement` / `chore` |
|
|
22
|
+
|
|
23
|
+
없으면 GitHub 이슈 본문을 직접 로드하여 "구현 방향", "관련 파일 및 영향 범위", "구현 체크리스트" 섹션을 파싱한다.
|
|
24
|
+
|
|
25
|
+
### 2. issueMemory 로드
|
|
26
|
+
|
|
27
|
+
이슈 번호를 알고 있으면 이전 세션 컨텍스트를 확인한다:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx @elyun/bylane memory read ISSUE_NUMBER
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
아키텍처 결정이나 트러블슈팅 기록이 있으면 구현에 반영한다.
|
|
34
|
+
|
|
35
|
+
---
|
|
11
36
|
|
|
12
37
|
## 실행 전 상태 기록
|
|
13
38
|
|
|
@@ -15,30 +40,69 @@ description: issue-agent의 스펙을 기반으로 프론트엔드 코드를 구
|
|
|
15
40
|
npx @elyun/bylane state write code-agent '{"status":"in_progress","startedAt":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","progress":0,"currentTask":"코드 구현 시작","retries":0,"log":[]}'
|
|
16
41
|
```
|
|
17
42
|
|
|
43
|
+
---
|
|
44
|
+
|
|
18
45
|
## 실행 흐름
|
|
19
46
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
47
|
+
### issueType별 접근 전략
|
|
48
|
+
|
|
49
|
+
#### `new-feature`
|
|
50
|
+
- `spec.affectedFiles`의 신규 파일부터 생성
|
|
51
|
+
- 유사 구현 패턴(이슈 본문 "코드 패턴 참고" 섹션) 따르기
|
|
52
|
+
- Figma 스펙이 있으면 컬러토큰 → CSS 변수/Tailwind config 변환
|
|
53
|
+
|
|
54
|
+
#### `bug`
|
|
55
|
+
- 이슈 본문의 "문제 지점" 파일부터 열기
|
|
56
|
+
- 원인 파악 후 최소 변경으로 수정
|
|
57
|
+
- 재현 케이스를 테스트로 먼저 작성 (TDD)
|
|
58
|
+
|
|
59
|
+
#### `improvement`
|
|
60
|
+
- 기존 구현 파악 후 변경 범위 최소화
|
|
61
|
+
- 사이드 이펙트 발생 가능 파일은 이슈 본문 "영향 범위" 기준으로 확인
|
|
62
|
+
|
|
63
|
+
#### `chore`
|
|
64
|
+
- 기능 변경 없음 확인 후 진행
|
|
65
|
+
- 설정 파일 변경 시 기존 동작 보존 여부 체크
|
|
66
|
+
|
|
67
|
+
### 구현 순서
|
|
68
|
+
|
|
69
|
+
1. `spec.checklist` 항목을 순서대로 처리
|
|
70
|
+
2. 각 파일 구현 완료 시 상태 로그 기록:
|
|
27
71
|
```bash
|
|
28
72
|
npx @elyun/bylane state append code-agent "FILENAME 구현 완료"
|
|
29
73
|
```
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
npx @elyun/bylane state write code-agent '{"status":"completed","progress":100,"currentTask":"구현 완료","retries":0,"changedFiles":CHANGED_FILES_ARRAY}'
|
|
33
|
-
```
|
|
74
|
+
3. 코드베이스 기존 패턴과 동일한 스타일 유지 (TypeScript, 테스트 위치, import 방식 등)
|
|
34
75
|
|
|
35
|
-
|
|
76
|
+
### 코딩 원칙
|
|
36
77
|
|
|
37
78
|
- 함수형 컴포넌트 + hooks 우선
|
|
38
79
|
- 파일당 단일 책임
|
|
39
80
|
- 200줄 초과 시 분리 고려
|
|
40
81
|
- 불변성 패턴 유지 (객체 직접 수정 금지)
|
|
41
82
|
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 완료 처리
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npx @elyun/bylane state write code-agent '{"status":"completed","progress":100,"currentTask":"구현 완료","retries":0,"changedFiles":CHANGED_FILES_ARRAY}'
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## issueMemory 기록
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npx @elyun/bylane memory append ISSUE_NUMBER code-agent "구현 요약: SUMMARY
|
|
97
|
+
변경 파일: CHANGED_FILES
|
|
98
|
+
아키텍처 결정: DECISIONS
|
|
99
|
+
트러블슈팅: ISSUES_FACED"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
`memory.enabled: false`이면 생략.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
42
106
|
## 출력
|
|
43
107
|
|
|
44
108
|
`.bylane/state/code-agent.json`의 `changedFiles`: 변경된 파일 경로 배열
|