@jjlabsio/claude-crew 0.1.8 → 0.1.9

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.
@@ -11,7 +11,7 @@
11
11
  "name": "claude-crew",
12
12
  "source": "./",
13
13
  "description": "오케스트레이터 + PM, 플래너, 개발, QA, 마케팅 에이전트 팀으로 단일 제품의 개발과 마케팅을 통합 관리",
14
- "version": "0.1.8",
14
+ "version": "0.1.9",
15
15
  "author": {
16
16
  "name": "Jaejin Song",
17
17
  "email": "wowlxx28@gmail.com"
@@ -28,5 +28,5 @@
28
28
  "category": "workflow"
29
29
  }
30
30
  ],
31
- "version": "0.1.8"
31
+ "version": "0.1.9"
32
32
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-crew",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "1인 SaaS 개발자를 위한 멀티 에이전트 오케스트레이션 — 개발, 마케팅, 일정을 한 대화에서 통합 관리",
5
5
  "author": {
6
6
  "name": "Jaejin Song",
package/hud/index.mjs CHANGED
@@ -281,13 +281,14 @@ function renderAgentsMultiLine(agents, maxLines = 5) {
281
281
  const isLast = index === displayCount - 1 && sorted.length <= maxLines;
282
282
  const prefix = isLast ? '\u2514\u2500' : '\u251c\u2500';
283
283
 
284
- const name = a.type.padEnd(12);
284
+ const rawType = a.type.includes(':') ? a.type.split(':').pop() : a.type;
285
+ const name = rawType.padEnd(7);
285
286
  const model = shortModelName(a.model).padEnd(8);
286
287
  const duration = formatAgentDuration(a.startTime).padStart(4);
287
288
  const desc = a.description.length > 40 ? a.description.slice(0, 37) + '...' : a.description;
288
289
 
289
290
  detailLines.push(
290
- `${dim(prefix)} ${cyan(name)}${model}${dim(duration)} ${desc}`
291
+ `${dim(prefix)} ${cyan(name)} ${model}${dim(duration)} ${desc}`
291
292
  );
292
293
  });
293
294
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlabsio/claude-crew",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "1인 SaaS 개발자를 위한 멀티 에이전트 오케스트레이션 — 개발, 마케팅, 일정을 한 대화에서 통합 관리",
5
5
  "author": "Jaejin Song <wowlxx28@gmail.com>",
6
6
  "license": "MIT",
@@ -21,6 +21,7 @@ description: contract.md를 입력으로 받아 Dev + CodeReviewer + QA 파이
21
21
  - brief.md를 어떤 에이전트에게도 전달하지 않는다.
22
22
  - contract.md를 CodeReviewer에게 전달하지 않는다 (가드레일만 인라인 주입).
23
23
  - plan.md를 CodeReviewer에게 전달하지 않는다.
24
+ - git commit 시 `--no-verify`를 생략하지 않는다 (호스트 프로젝트의 pre-commit hook 중복 실행 방지).
24
25
  - Dev가 자체 검증을 통과하지 못한 상태에서 검증 단계로 넘기지 않는다.
25
26
 
26
27
  ---
@@ -52,7 +53,7 @@ description: contract.md를 입력으로 받아 Dev + CodeReviewer + QA 파이
52
53
  | 에이전트 | subagent_type | 볼 수 있는 것 | 차단 | 차단 근거 |
53
54
  |----------|--------------|-------------|------|----------|
54
55
  | **Dev** | dev | plan.md, contract.md | brief.md, spec.md, analysis.md | 의도 추측 방지, plan+contract에 필요 정보 포함 |
55
- | **CodeReviewer** | code-reviewer | git diff, 가드레일(인라인) | contract.md, plan.md, brief.md, spec.md, dev-log.md | 수용 기준 체리피킹 방지 |
56
+ | **CodeReviewer** | code-reviewer | git diff(직접 실행), 가드레일(인라인) | contract.md, plan.md, brief.md, spec.md, dev-log.md | 수용 기준 체리피킹 방지 (.crew/는 .gitignore 대상이므로 diff에 노출되지 않음) |
56
57
  | **QA** | qa | plan.md | contract.md, brief.md, spec.md | 검증 편향 방지 |
57
58
 
58
59
  **중요**: 모든 에이전트 호출 시 반드시 `subagent_type` 파라미터를 지정해야 한다. HUD에서 에이전트 타입을 식별하는 데 사용된다.
@@ -128,6 +129,7 @@ brief.md, spec.md, analysis.md는 읽지 않는다.
128
129
  - 린트 통과 확인
129
130
  - 타입 체크 통과 확인
130
131
  - 기존 테스트 스위트 통과 확인
132
+ - lint-staged 검증: `npx lint-staged --dry-run` 실행 (설정이 있는 경우에만)
131
133
  6. 자체 검증이 모두 통과하면 완료를 선언한다.
132
134
  자체 검증이 실패하면 직접 수정하여 통과시킨다.
133
135
 
@@ -136,7 +138,7 @@ brief.md, spec.md, analysis.md는 읽지 않는다.
136
138
 
137
139
  ## 규칙
138
140
  - plan.md에 없는 것을 구현하지 않는다 (스코프 크리프 금지).
139
- - 자체 검증 4개(빌드/린트/타입/테스트) 모두 PASS 해야 완료를 선언할 수 있다.
141
+ - 자체 검증 5개(빌드/린트/타입/테스트/lint-staged) 모두 PASS 해야 완료를 선언할 수 있다.
140
142
  - 기존 코드베이스의 컨벤션을 따른다.
141
143
  ```
142
144
 
@@ -159,11 +161,11 @@ brief.md, spec.md, analysis.md는 읽지 않는다.
159
161
  1. 피드백에서 FAIL 항목을 모두 파악한다.
160
162
  2. 각 FAIL 항목에 대해 수정을 수행한다.
161
163
  3. dev-log.md를 갱신한다 (최상단에 "수정 이력 (retry {n})" 섹션 추가).
162
- 4. 자체 검증 4개를 모두 다시 실행한다.
164
+ 4. 자체 검증 5개를 모두 다시 실행한다.
163
165
 
164
166
  ## 규칙
165
167
  - 피드백에서 지적하지 않은 부분을 추가로 변경하지 않는다.
166
- - 자체 검증 4개 모두 PASS 해야 완료를 선언할 수 있다.
168
+ - 자체 검증 5개 모두 PASS 해야 완료를 선언할 수 있다.
167
169
  ```
168
170
 
169
171
  **Phase 2 실패 조건**: Dev 에이전트가 자체 검증을 통과하지 못한 채 완료를 선언하면 에스컬레이션.
@@ -181,9 +183,8 @@ CodeReviewer와 QA를 **동시에** Agent tool 2개로 호출한다.
181
183
  에이전트 호출 시 반드시 `subagent_type: "code-reviewer"`를 지정한다.
182
184
 
183
185
  오케스트레이터가 해야 할 사전 작업:
184
- 1. `git diff main...HEAD` 출력을 캡처한다.
185
- 2. contract.md에서 가드레일 섹션(Must/Must NOT)만 추출한다.
186
- 3. 둘 다 CodeReviewer 프롬프트에 인라인으로 주입한다.
186
+ 1. contract.md에서 가드레일 섹션(Must/Must NOT)만 추출한다.
187
+ 2. 가드레일을 CodeReviewer 프롬프트에 인라인으로 주입한다.
187
188
 
188
189
  에이전트 프롬프트:
189
190
 
@@ -191,13 +192,10 @@ CodeReviewer와 QA를 **동시에** Agent tool 2개로 호출한다.
191
192
  당신은 CodeReviewer 에이전트다. 코드 변경 사항의 품질을 판단한다.
192
193
 
193
194
  ## 입력
194
- 아래 diff 검토하라. 이것이 검토 대상의 전부다.
195
+ `git diff main...HEAD`를 직접 실행하여 변경 사항을 확인하라.
195
196
  contract.md, plan.md, brief.md, spec.md, dev-log.md는 읽지 않는다.
196
197
  코드만 보고 판단한다.
197
198
 
198
- ### diff
199
- {git diff main...HEAD 출력}
200
-
201
199
  ### 가드레일 (contract.md에서 추출)
202
200
  #### Must
203
201
  - {오케스트레이터가 contract.md에서 복사한 내용}
@@ -286,10 +284,12 @@ Agent(name="qa", subagent_type="qa", model="sonnet", prompt="...")
286
284
 
287
285
  ```bash
288
286
  git add -A
289
- git commit -m "feat({task-id}): {contract.md 목표 1줄 요약}"
287
+ git commit --no-verify -m "feat({task-id}): {contract.md 목표 1줄 요약}"
290
288
  git push -u origin feat/{task-id}
291
289
  ```
292
290
 
291
+ > `--no-verify`: crew-dev가 이미 빌드/린트/타입/테스트 + lint-staged 검증을 완료했으므로 호스트 프로젝트의 pre-commit hook을 중복 실행하지 않는다.
292
+
293
293
  PR을 생성한다 (머지하지 않는다).
294
294
 
295
295
  **5b. 상태 갱신**