@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
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bylane-issue-agent
|
|
3
|
-
description:
|
|
3
|
+
description: 코드베이스를 병렬 분석(구조/스타일/의존성)하고 사용자 문답으로 요구사항을 구체화한 뒤, 전략 스펙이 포함된 GitHub 이슈를 작성한다. code-agent의 입력이 된다.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Issue Agent
|
|
7
7
|
|
|
8
|
+
## 역할
|
|
9
|
+
|
|
10
|
+
코드베이스를 병렬로 분석하고, 사용자와 문답을 거쳐 이슈 유형을 분류한 뒤,
|
|
11
|
+
code-agent가 방향을 명확하게 읽을 수 있는 구조화된 이슈를 작성한다.
|
|
12
|
+
|
|
8
13
|
## GitHub 접근 방법
|
|
9
14
|
|
|
10
|
-
`.bylane/bylane.json`의 `github.method
|
|
15
|
+
`.bylane/bylane.json`의 `github.method`:
|
|
11
16
|
|
|
12
17
|
| 값 | 동작 |
|
|
13
18
|
|----|------|
|
|
@@ -16,69 +21,195 @@ description: GitHub Issue 생성 및 분석. Figma 링크 감지 시 스펙 추
|
|
|
16
21
|
| `"api"` | REST API + `$GITHUB_TOKEN` |
|
|
17
22
|
| `"auto"` (기본) | MCP → CLI → API 순서로 시도 |
|
|
18
23
|
|
|
19
|
-
##
|
|
24
|
+
## 상태 기록 (시작 시)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx @elyun/bylane state write issue-agent '{"status":"in_progress","startedAt":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","progress":0,"currentTask":"전략 수립 중","retries":0,"log":[]}'
|
|
28
|
+
```
|
|
20
29
|
|
|
21
|
-
|
|
30
|
+
---
|
|
22
31
|
|
|
23
32
|
## 실행 흐름
|
|
24
33
|
|
|
25
|
-
###
|
|
34
|
+
### Phase 0 — issueMemory 로드 (이슈 번호가 있는 경우)
|
|
35
|
+
|
|
36
|
+
기존 이슈 번호가 입력되었으면 이전 작업 컨텍스트를 불러온다:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npx @elyun/bylane memory read ISSUE_NUMBER
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
출력된 내용(이전 아키텍처 결정, 트러블슈팅 기록)을 이후 분석에 반영한다.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### Phase 1 — 이슈 유형 1차 분류
|
|
47
|
+
|
|
48
|
+
입력 텍스트 또는 기존 이슈 본문을 분석하여 유형을 예비 분류:
|
|
49
|
+
|
|
50
|
+
| 유형 | 판단 기준 |
|
|
51
|
+
|------|-----------|
|
|
52
|
+
| `new-feature` | 신규 컴포넌트/페이지/기능 추가 |
|
|
53
|
+
| `bug` | 오류, 크래시, 잘못된 동작 |
|
|
54
|
+
| `improvement` | 기존 기능 수정·개선·리팩토링 |
|
|
55
|
+
| `chore` | 설정, 의존성, 빌드, 문서 |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
### Phase 2 — 코드베이스 병렬 분석
|
|
60
|
+
|
|
61
|
+
서브에이전트 3개를 **동시에** 실행한다. 각 에이전트는 아래 질문에 답한다.
|
|
62
|
+
|
|
63
|
+
#### 서브에이전트 A — 관련 파일 탐색
|
|
64
|
+
- 입력 의도와 관련된 파일·폴더를 DFS로 탐색
|
|
65
|
+
- 관련 컴포넌트, hook, util, 타입 정의 목록화
|
|
66
|
+
- 현재 구현 방식 요약 (있는 경우)
|
|
67
|
+
|
|
68
|
+
#### 서브에이전트 B — 코드 패턴 분석
|
|
69
|
+
- 유사 기능의 구현 패턴 샘플링 (컴포넌트 구조, 상태 관리, API 호출 방식)
|
|
70
|
+
- 네이밍 컨벤션, 파일 분리 방식
|
|
71
|
+
- 테스트 파일 위치 및 작성 패턴
|
|
72
|
+
|
|
73
|
+
#### 서브에이전트 C — 의존성 및 영향 범위
|
|
74
|
+
- 변경 시 영향받는 파일·모듈 목록
|
|
75
|
+
- 공유 컴포넌트/훅 여부 확인
|
|
76
|
+
- `bug` / `improvement` 유형이면 해당 코드의 현재 상태와 문제 지점 파악
|
|
77
|
+
|
|
78
|
+
**`extensions.figma.enabled === true`이고 Figma URL이 있는 경우:**
|
|
79
|
+
서브에이전트 A와 병렬로 Figma MCP 분석도 실행:
|
|
80
|
+
- `get_file` / `get_node`로 프레임/컴포넌트 구조 추출
|
|
81
|
+
- 컬러 토큰, 타이포그래피, 레이아웃 정보 추출
|
|
82
|
+
- 실패 시 경고 로그 후 텍스트 기반 스펙으로 fallback
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### Phase 3 — 사용자 문답 (방향 확정)
|
|
87
|
+
|
|
88
|
+
병렬 분석 결과를 요약하여 사용자에게 제시하고, **핵심 결정 사항만** 질문한다.
|
|
89
|
+
|
|
90
|
+
질문 예시 (유형에 따라 선택):
|
|
91
|
+
|
|
92
|
+
**new-feature:**
|
|
93
|
+
```
|
|
94
|
+
분석 결과:
|
|
95
|
+
- 관련 파일: src/components/theme/, src/hooks/useTheme.ts
|
|
96
|
+
- 유사 구현: ColorPicker 컴포넌트 (src/components/ColorPicker/)
|
|
97
|
+
|
|
98
|
+
결정이 필요한 사항:
|
|
99
|
+
1. 토글 위치: 헤더 우측 / 사이드바 하단 / 플로팅 버튼?
|
|
100
|
+
2. 상태 저장: localStorage / 서버 동기화?
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**bug:**
|
|
104
|
+
```
|
|
105
|
+
분석 결과:
|
|
106
|
+
- 문제 지점: src/hooks/useAuth.ts:47 — 토큰 만료 시 갱신 로직 누락
|
|
107
|
+
- 영향 범위: useAuth를 사용하는 12개 컴포넌트
|
|
108
|
+
|
|
109
|
+
확인 사항:
|
|
110
|
+
1. 재현 조건이 있으신가요? (특정 브라우저, 로그인 상태 등)
|
|
111
|
+
2. 임시 수정 vs 근본 해결 중 어느 방향으로 진행할까요?
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
문답은 **1~3개 질문**으로 제한. 명확한 경우 생략 가능.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### Phase 4 — 이슈 작성
|
|
119
|
+
|
|
120
|
+
문답 결과와 분석 내용을 바탕으로 GitHub 이슈를 작성한다.
|
|
121
|
+
|
|
122
|
+
#### 이슈 본문 구조
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
## 개요
|
|
126
|
+
|
|
127
|
+
[한 줄 요약 — 무엇을, 왜]
|
|
128
|
+
|
|
129
|
+
**유형:** `new-feature` | `bug` | `improvement` | `chore`
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 배경 및 목적
|
|
134
|
+
|
|
135
|
+
[사용자 의도 + 분석으로 파악한 현재 상태]
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 구현 방향
|
|
140
|
+
|
|
141
|
+
[Phase 3 문답에서 확정된 전략적 방향]
|
|
142
|
+
|
|
143
|
+
- 접근 방법: ...
|
|
144
|
+
- 채택 이유: ...
|
|
145
|
+
- 제외한 대안: ... (이유)
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 관련 파일 및 영향 범위
|
|
150
|
+
|
|
151
|
+
| 파일/모듈 | 역할 | 변경 필요 여부 |
|
|
152
|
+
|-----------|------|--------------|
|
|
153
|
+
| `src/hooks/useTheme.ts` | 테마 상태 관리 | 수정 |
|
|
154
|
+
| `src/components/Header/` | 토글 위치 | 추가 |
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 코드 패턴 참고
|
|
26
159
|
|
|
27
|
-
|
|
28
|
-
- 제목 (50자 이내), 상세 설명, 구현 체크리스트, Figma URL
|
|
160
|
+
[서브에이전트 B가 발견한 유사 구현 패턴 요약]
|
|
29
161
|
|
|
30
|
-
|
|
162
|
+
```typescript
|
|
163
|
+
// 유사 구현 예시 (src/components/ColorPicker/index.tsx 참조)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
31
167
|
|
|
32
|
-
|
|
33
|
-
→ GitHub MCP `create_issue` 도구 사용
|
|
168
|
+
## Figma 스펙 (해당 시)
|
|
34
169
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
--title "TITLE" \
|
|
39
|
-
--body "BODY" \
|
|
40
|
-
--label "bylane-auto"
|
|
41
|
-
```
|
|
170
|
+
- 컴포넌트: [컴포넌트명]
|
|
171
|
+
- 컬러 토큰: `--color-primary: #3B82F6`
|
|
172
|
+
- 레이아웃: [설명]
|
|
42
173
|
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
curl -s -X POST \
|
|
46
|
-
-H "Authorization: Bearer $GITHUB_TOKEN" \
|
|
47
|
-
-H "Content-Type: application/json" \
|
|
48
|
-
https://api.github.com/repos/OWNER/REPO/issues \
|
|
49
|
-
-d '{"title":"TITLE","body":"BODY","labels":["bylane-auto"]}'
|
|
50
|
-
```
|
|
174
|
+
---
|
|
51
175
|
|
|
52
|
-
|
|
53
|
-
- `true`이고 Figma URL 있으면 → Figma 분석 단계 실행
|
|
54
|
-
- `false` → 텍스트 기반 스펙만 생성
|
|
176
|
+
## 구현 체크리스트
|
|
55
177
|
|
|
56
|
-
|
|
178
|
+
- [ ] [첫 번째 구현 단위]
|
|
179
|
+
- [ ] [두 번째 구현 단위]
|
|
180
|
+
- [ ] 테스트 작성
|
|
181
|
+
- [ ] 기존 테스트 통과 확인
|
|
57
182
|
|
|
58
|
-
|
|
183
|
+
---
|
|
59
184
|
|
|
60
|
-
|
|
61
|
-
→ GitHub MCP `get_issue` 도구 사용
|
|
185
|
+
## 주의사항
|
|
62
186
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
gh issue view NUMBER --json title,body,labels
|
|
66
|
-
```
|
|
187
|
+
[영향 범위, 사이드 이펙트, 알려진 제약]
|
|
188
|
+
```
|
|
67
189
|
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
curl -s \
|
|
71
|
-
-H "Authorization: Bearer $GITHUB_TOKEN" \
|
|
72
|
-
https://api.github.com/repos/OWNER/REPO/issues/NUMBER
|
|
73
|
-
```
|
|
190
|
+
#### 이슈 생성
|
|
74
191
|
|
|
75
|
-
|
|
192
|
+
**MCP:**
|
|
193
|
+
→ GitHub MCP `create_issue` 도구 사용
|
|
76
194
|
|
|
77
|
-
|
|
195
|
+
**CLI:**
|
|
196
|
+
```bash
|
|
197
|
+
gh issue create \
|
|
198
|
+
--title "TITLE" \
|
|
199
|
+
--body "BODY" \
|
|
200
|
+
--label "bylane-auto"
|
|
201
|
+
```
|
|
78
202
|
|
|
79
|
-
|
|
203
|
+
**API:**
|
|
204
|
+
```bash
|
|
205
|
+
curl -s -X POST \
|
|
206
|
+
-H "Authorization: Bearer $GITHUB_TOKEN" \
|
|
207
|
+
-H "Content-Type: application/json" \
|
|
208
|
+
https://api.github.com/repos/OWNER/REPO/issues \
|
|
209
|
+
-d '{"title":"TITLE","body":"BODY","labels":["bylane-auto"]}'
|
|
210
|
+
```
|
|
80
211
|
|
|
81
|
-
|
|
212
|
+
---
|
|
82
213
|
|
|
83
214
|
## 출력
|
|
84
215
|
|
|
@@ -91,20 +222,35 @@ Figma MCP `get_file` 또는 `get_node` 도구로 프레임/컴포넌트 분석.
|
|
|
91
222
|
"progress": 100,
|
|
92
223
|
"issueNumber": 123,
|
|
93
224
|
"issueUrl": "https://github.com/...",
|
|
225
|
+
"issueType": "new-feature",
|
|
94
226
|
"spec": {
|
|
95
227
|
"title": "다크모드 토글 버튼 추가",
|
|
96
228
|
"description": "...",
|
|
97
|
-
"
|
|
229
|
+
"approach": "localStorage 기반 useTheme hook 확장",
|
|
230
|
+
"affectedFiles": ["src/hooks/useTheme.ts", "src/components/Header/"],
|
|
231
|
+
"checklist": ["ThemeToggle 컴포넌트 생성", "useTheme hook 수정", "테스트 작성"],
|
|
98
232
|
"figmaSpec": { "enabled": false, "components": [], "colorTokens": {} }
|
|
99
233
|
}
|
|
100
234
|
}
|
|
101
235
|
```
|
|
102
236
|
|
|
103
|
-
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## issueMemory 기록
|
|
240
|
+
|
|
241
|
+
작업 완료 후:
|
|
242
|
+
|
|
104
243
|
```bash
|
|
105
|
-
npx @elyun/bylane
|
|
244
|
+
npx @elyun/bylane memory append ISSUE_NUMBER issue-agent "유형: ISSUE_TYPE
|
|
245
|
+
방향: APPROACH
|
|
246
|
+
관련 파일: AFFECTED_FILES
|
|
247
|
+
특이사항: NOTES"
|
|
106
248
|
```
|
|
107
249
|
|
|
250
|
+
`memory.enabled: false`이면 생략.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
108
254
|
## 수동 실행
|
|
109
255
|
|
|
110
256
|
`/bylane issue #123` 또는 `/bylane issue 다크모드 토글 추가해줘`
|
|
@@ -1,57 +1,95 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bylane-orchestrator
|
|
3
|
-
description: byLane 메인 오케스트레이터. 자연어 의도를
|
|
3
|
+
description: byLane 메인 오케스트레이터. 자연어 의도를 파싱하여 4가지 파이프라인(새 기능/기존 이슈/리뷰/단일 에이전트) 중 하나를 선택하고 에이전트 체인을 순차 실행한다.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# byLane Orchestrator
|
|
7
7
|
|
|
8
8
|
## 역할
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
사용자 의도를 파싱하고, issue-agent를 통해 전략을 수립한 뒤 에이전트 파이프라인을 실행한다.
|
|
11
11
|
|
|
12
12
|
## 실행 전 체크
|
|
13
13
|
|
|
14
|
-
1. 사전
|
|
14
|
+
1. 사전 점검:
|
|
15
15
|
```bash
|
|
16
16
|
npx @elyun/bylane preflight
|
|
17
17
|
```
|
|
18
|
-
|
|
19
|
-
- `.bylane/bylane.json` 없으면 즉시 `bylane-setup` 스킬 실행.
|
|
18
|
+
실패 시 안내 메시지 출력 후 **중단**. `.bylane/bylane.json` 없으면 즉시 `bylane-setup` 스킬 실행.
|
|
20
19
|
|
|
21
20
|
2. `.bylane/state/` 디렉토리 확인. 없으면 생성.
|
|
22
21
|
|
|
23
22
|
## 에이전트별 모델 결정
|
|
24
23
|
|
|
25
|
-
각 에이전트 실행 전 사용할 모델을 config에서 읽는다:
|
|
26
|
-
|
|
27
24
|
```bash
|
|
28
25
|
npx @elyun/bylane models
|
|
29
26
|
```
|
|
30
27
|
|
|
31
|
-
출력 형식: `AGENT_NAME=MODEL_ID` (한 줄씩)
|
|
32
|
-
|
|
33
|
-
에이전트 호출 시 해당 모델을 `model` 파라미터로 전달한다.
|
|
28
|
+
출력 형식: `AGENT_NAME=MODEL_ID` (한 줄씩). 에이전트 호출 시 `model` 파라미터로 전달.
|
|
34
29
|
|
|
35
30
|
## 의도 파싱 규칙
|
|
36
31
|
|
|
37
|
-
|
|
32
|
+
오케스트레이터는 `/bylane`에서 **복합 의도** 또는 **기능 요청 자연어**가 넘어올 때 실행된다.
|
|
33
|
+
단일 에이전트 키워드는 `/bylane`이 직접 라우팅하므로, 오케스트레이터는 **파이프라인 실행**에 집중한다.
|
|
34
|
+
|
|
35
|
+
### 파이프라인 A — 새 기능 / 이슈 없는 구현 요청
|
|
36
|
+
|
|
37
|
+
**감지 키워드**: `만들어`, `추가해`, `구현해`, `개발해`, `넣어줘`, `바꿔줘`, `변경해`, `개선해`, `수정해`,
|
|
38
|
+
`리팩터`, `리팩토링`, `마이그레이션`, `~해줘` (기능 설명 포함), 이슈 번호 없음
|
|
39
|
+
|
|
40
|
+
**실행 흐름**:
|
|
41
|
+
전략 수립 → `issue-agent` → `code-agent` → `test-agent` → `commit-agent` → `pr-agent` → `review-agent` → `notify-agent`
|
|
38
42
|
|
|
39
|
-
|
|
43
|
+
### 파이프라인 B — 기존 이슈 구현
|
|
44
|
+
|
|
45
|
+
**감지 키워드**: `#N`, `이슈 #N`, `issue #N`, `#N 구현`, `#N 작업`, `#N 해줘`, `#N 처리`
|
|
46
|
+
|
|
47
|
+
**실행 흐름**:
|
|
48
|
+
전략 수립(기존 이슈 분석) → `code-agent` → `test-agent` → `commit-agent` → `pr-agent` → `review-agent` → `notify-agent`
|
|
49
|
+
|
|
50
|
+
### 파이프라인 C — 리뷰 관련
|
|
51
|
+
|
|
52
|
+
| 감지 키워드 | 실행 |
|
|
40
53
|
|---|---|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
|
48
|
-
|
|
49
|
-
|
|
|
54
|
+
| `PR #N 리뷰`, `리뷰해줘`, `코드 리뷰`, `#N 봐줘` | `review-agent`(PR번호 전달) |
|
|
55
|
+
| `리뷰 반영`, `수락`, `accept`, `LGTM 반영`, `코멘트 반영` | `respond-agent`(모드=accept) |
|
|
56
|
+
| `반박`, `rebut`, `동의 안 해`, `이유 설명`, `왜 이렇게 했냐면` | `respond-agent`(모드=rebut) |
|
|
57
|
+
|
|
58
|
+
### 파이프라인 D — 단일 에이전트 (오케스트레이터 경유 시)
|
|
59
|
+
|
|
60
|
+
| 감지 키워드 | 실행 |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `커밋`, `commit`, `커밋해줘`, `변경사항 저장` | `commit-agent` |
|
|
63
|
+
| `PR`, `풀리퀘`, `PR 만들어`, `PR 올려` | `pr-agent` |
|
|
64
|
+
| `테스트`, `test`, `검증`, `시험`, `테스트 돌려` | `test-agent` |
|
|
65
|
+
| `분석`, `analyze`, `구조 파악`, `코드 분석` | `analyze-agent` |
|
|
66
|
+
| `알림`, `notify`, `슬랙`, `텔레그램`, `통보` | `notify-agent` |
|
|
67
|
+
|
|
68
|
+
### 파이프라인 판단 기준
|
|
69
|
+
|
|
70
|
+
1. 이슈 번호(`#N`)가 있으면 → **파이프라인 B**
|
|
71
|
+
2. 기능/변경 요청 키워드가 있고 이슈 번호 없으면 → **파이프라인 A**
|
|
72
|
+
3. 리뷰/대응 키워드가 있으면 → **파이프라인 C**
|
|
73
|
+
4. 단일 에이전트 키워드만 있으면 → **파이프라인 D**
|
|
74
|
+
5. 복합 키워드 ("이슈 만들고 구현까지", "테스트하고 커밋") → 파이프라인 A 또는 해당 에이전트 순차 실행
|
|
75
|
+
6. 판단 불가 → 사용자에게 의도 확인
|
|
76
|
+
|
|
77
|
+
## 전략 수립 단계 (파이프라인 A, B 필수)
|
|
78
|
+
|
|
79
|
+
파이프라인 C, D (단일 에이전트 요청)가 아닌 경우 반드시 전략 수립 후 진행.
|
|
80
|
+
|
|
81
|
+
issue-agent를 `model` 파라미터와 함께 호출한다. issue-agent 내부에서 다음을 수행:
|
|
82
|
+
|
|
83
|
+
1. 코드베이스 병렬 분석 (서브에이전트)
|
|
84
|
+
2. 사용자 문답
|
|
85
|
+
3. 이슈 분류 및 작성
|
|
86
|
+
|
|
87
|
+
상세 로직은 `bylane-issue-agent` 참조.
|
|
50
88
|
|
|
51
89
|
## 에이전트 실행 방법
|
|
52
90
|
|
|
53
|
-
각 에이전트를 순서대로 Agent 도구로
|
|
54
|
-
**config에서 읽은 모델을 `model` 파라미터로 반드시
|
|
91
|
+
각 에이전트를 순서대로 Agent 도구로 호출. 이전 출력을 다음 입력으로 전달.
|
|
92
|
+
**config에서 읽은 모델을 `model` 파라미터로 반드시 전달.**
|
|
55
93
|
|
|
56
94
|
상태 기록 (각 에이전트 시작 전):
|
|
57
95
|
```bash
|
|
@@ -60,17 +98,15 @@ npx @elyun/bylane state write AGENT_NAME '{"status":"in_progress","startedAt":"'
|
|
|
60
98
|
|
|
61
99
|
## 피드백 루프
|
|
62
100
|
|
|
63
|
-
test-agent가 FAIL
|
|
101
|
+
test-agent가 FAIL 반환 시:
|
|
64
102
|
1. `.bylane/state/test-agent.json`에서 `failureDetails` 읽기
|
|
65
|
-
2.
|
|
66
|
-
3. `retries
|
|
67
|
-
4. `retries >= maxRetries`이면 notify-agent에 "개입 필요" 메시지 전송 후 중단
|
|
103
|
+
2. `retries < config.workflow.maxRetries` → code-agent 재실행 (실패 피드백 포함, retries+1)
|
|
104
|
+
3. `retries >= maxRetries` → notify-agent에 "개입 필요" 메시지 후 중단
|
|
68
105
|
|
|
69
|
-
respond-agent가 "수정 필요"
|
|
106
|
+
respond-agent가 "수정 필요" 반환 시 동일 로직 적용.
|
|
70
107
|
|
|
71
108
|
## 완료 처리
|
|
72
109
|
|
|
73
|
-
모든 에이전트 완료 후:
|
|
74
110
|
1. 각 에이전트 state를 `status: "completed"`로 업데이트
|
|
75
111
|
2. notify-agent 실행하여 최종 결과 전송
|
|
76
112
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bylane-respond-loop
|
|
3
|
-
description: 5분
|
|
3
|
+
description: 백그라운드 폴러가 설정 주기(기본 5분)로 내 PR에 달린 CHANGES_REQUESTED/코멘트를 감지하여 respond-queue에 기록한다. pending 항목 발생 시 respond-agent를 자동 실행하며, 대응 후 새 코멘트 감지 시 재처리한다.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Respond Loop Agent
|
|
@@ -94,4 +94,4 @@ kill $(pgrep -f respond-loop.js)
|
|
|
94
94
|
|
|
95
95
|
## 수동 실행
|
|
96
96
|
|
|
97
|
-
`/bylane
|
|
97
|
+
`/bylane-respond-loop`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bylane-review-loop
|
|
3
|
-
description: 5분
|
|
3
|
+
description: 백그라운드 폴러가 설정 주기(기본 5분)로 GitHub review 요청 PR을 감지하여 review-queue에 기록한다. pending 항목 발생 시 review-agent를 자동 실행하며, 리뷰 후 updatedAt 변경 시 재요청도 처리한다.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Review Loop Agent
|
|
@@ -109,4 +109,4 @@ kill $(pgrep -f review-loop.js)
|
|
|
109
109
|
|
|
110
110
|
## 수동 실행
|
|
111
111
|
|
|
112
|
-
`/bylane
|
|
112
|
+
`/bylane-review-loop`
|
package/commands/bylane-setup.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: bylane-setup
|
|
3
|
-
description: byLane
|
|
3
|
+
description: byLane 최초 설치 및 설정 위자드. GitHub 접근, 이슈 트래커, 알림 채널, 팀 모드, 권한, 루프 모드, 브랜치 네이밍, 모델을 단계별로 설정하여 .bylane/bylane.json을 생성한다.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# byLane Setup Wizard
|
|
7
7
|
|
|
8
8
|
사용자에게 단계별로 질문하여 `.bylane/bylane.json`을 생성한다.
|
|
9
|
-
ALWAYS complete all
|
|
9
|
+
ALWAYS complete all 8 steps before saving. NEVER skip steps.
|
|
10
10
|
|
|
11
11
|
## 실행 전 준비
|
|
12
12
|
|
|
@@ -83,7 +83,32 @@ Linear API Key는 환경변수명(`LINEAR_API_KEY`)으로 저장. 실제 키값
|
|
|
83
83
|
|
|
84
84
|
`permissions.scope`에 저장.
|
|
85
85
|
|
|
86
|
-
## Step 5/
|
|
86
|
+
## Step 5/8 — Loop 실행 모드
|
|
87
|
+
|
|
88
|
+
> Loop 실행 모드를 선택하세요:
|
|
89
|
+
> 1. tmux — tmux 세션에서 백그라운드 실행 (터미널 종료 후에도 유지, 권장)
|
|
90
|
+
> 2. process — 현재 프로세스에서 직접 실행 (잠자기 모드 대응 포함)
|
|
91
|
+
|
|
92
|
+
- `1` → `loop.mode = "tmux"`, `loop.sessionName` 입력 (Enter = `bylane-loops`)
|
|
93
|
+
- `2` → `loop.mode = "process"`
|
|
94
|
+
|
|
95
|
+
tmux 선택 시 `which tmux`로 설치 여부를 자동 확인한다:
|
|
96
|
+
- 설치됨 → `tmux` 모드 확정
|
|
97
|
+
- 미설치 → 안내 후 `process` 모드로 자동 전환:
|
|
98
|
+
> tmux가 설치되어 있지 않습니다. process 모드로 설정합니다.
|
|
99
|
+
> tmux 설치: `brew install tmux`
|
|
100
|
+
|
|
101
|
+
폴링 주기 입력 (Enter = 5분):
|
|
102
|
+
- `loop.intervalMs`에 저장 (밀리초)
|
|
103
|
+
|
|
104
|
+
loop 시작/종료 명령 안내:
|
|
105
|
+
```
|
|
106
|
+
bylane loop start # loop 시작
|
|
107
|
+
bylane loop stop # loop 종료
|
|
108
|
+
bylane loop status # 상태 확인
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Step 6/8 — 고급 설정
|
|
87
112
|
|
|
88
113
|
> 고급 설정을 변경하시겠습니까? (Enter = 기본값 사용)
|
|
89
114
|
|
|
@@ -92,7 +117,7 @@ Linear API Key는 환경변수명(`LINEAR_API_KEY`)으로 저장. 실제 키값
|
|
|
92
117
|
- `loopTimeoutMinutes` (기본: 30): 루프 타임아웃 (분)
|
|
93
118
|
- Figma MCP 활성화? (y/n, 기본: n)
|
|
94
119
|
|
|
95
|
-
## Step
|
|
120
|
+
## Step 7/8 — 브랜치 네이밍
|
|
96
121
|
|
|
97
122
|
> 브랜치 네이밍 패턴을 선택하세요:
|
|
98
123
|
> 1. {tracker}-{issue-number} 예) issues-32
|
|
@@ -107,7 +132,7 @@ Linear API Key는 환경변수명(`LINEAR_API_KEY`)으로 저장. 실제 키값
|
|
|
107
132
|
직접 입력 시 사용 가능한 토큰 목록 안내:
|
|
108
133
|
`{tracker}`, `{type}`, `{issue-number}`, `{custom-id}`, `{title-slug}`, `{date}`, `{username}`
|
|
109
134
|
|
|
110
|
-
## Step
|
|
135
|
+
## Step 8/8 — 에이전트 모델 설정
|
|
111
136
|
|
|
112
137
|
> 각 에이전트에 사용할 AI 모델을 설정하시겠습니까? (Enter = 기본값 사용)
|
|
113
138
|
|
|
@@ -147,3 +172,9 @@ Linear API Key는 환경변수명(`LINEAR_API_KEY`)으로 저장. 실제 키값
|
|
|
147
172
|
모니터 대시보드: npm run monitor (byLane 디렉토리에서)
|
|
148
173
|
또는: /bylane monitor
|
|
149
174
|
```
|
|
175
|
+
5. Loop 실행 안내:
|
|
176
|
+
```
|
|
177
|
+
Loop 시작: npx @elyun/bylane loop start
|
|
178
|
+
Loop 종료: npx @elyun/bylane loop stop
|
|
179
|
+
Loop 상태: npx @elyun/bylane loop status
|
|
180
|
+
```
|