@jjlabsio/claude-crew 0.1.23 → 0.1.25

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.23",
14
+ "version": "0.1.25",
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.23"
31
+ "version": "0.1.25"
32
32
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-crew",
3
- "version": "0.1.23",
3
+ "version": "0.1.25",
4
4
  "description": "1인 SaaS 개발자를 위한 멀티 에이전트 오케스트레이션 — 개발, 마케팅, 일정을 한 대화에서 통합 관리",
5
5
  "author": {
6
6
  "name": "Jaejin Song",
package/hud/index.mjs CHANGED
@@ -664,18 +664,21 @@ async function main() {
664
664
 
665
665
  const transcript = parseTranscript(stdin.transcript_path);
666
666
 
667
- // In worktrees, merge todos from the original project transcript.
667
+ // In worktrees, merge data from the original project transcript.
668
668
  // The worktree transcript only has events after EnterWorktree, so todos
669
- // created before are missing. The original transcript has the full history.
670
- // If the worktree transcript also has todos (created after worktree entry),
671
- // use the worktree's todos since they are more up-to-date for that session.
672
- if (transcript.todos.length === 0) {
669
+ // and agents created before are missing. The original transcript has the
670
+ // full history. If the worktree transcript already has its own data
671
+ // (created after worktree entry), prefer the worktree's version.
672
+ if (transcript.todos.length === 0 || transcript.agents.length === 0) {
673
673
  const originalPath = resolveOriginalTranscriptPath(stdin.transcript_path, cwd);
674
674
  if (originalPath) {
675
675
  const originalTranscript = parseTranscript(originalPath);
676
- if (originalTranscript.todos.length > 0) {
676
+ if (transcript.todos.length === 0 && originalTranscript.todos.length > 0) {
677
677
  transcript.todos = originalTranscript.todos;
678
678
  }
679
+ if (transcript.agents.length === 0 && originalTranscript.agents.length > 0) {
680
+ transcript.agents = originalTranscript.agents;
681
+ }
679
682
  }
680
683
  }
681
684
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlabsio/claude-crew",
3
- "version": "0.1.23",
3
+ "version": "0.1.25",
4
4
  "description": "1인 SaaS 개발자를 위한 멀티 에이전트 오케스트레이션 — 개발, 마케팅, 일정을 한 대화에서 통합 관리",
5
5
  "author": "Jaejin Song <wowlxx28@gmail.com>",
6
6
  "license": "MIT",
@@ -16,15 +16,16 @@ description: contract.md를 입력으로 받아 Dev + CodeReviewer + QA 파이
16
16
 
17
17
  ## Multi-Provider 지원
18
18
 
19
- 에이전트별로 claude 또는 codex provider를 사용할 수 있다. `/crew-setup`에서 설정한 `.crew/config.json`을 기반으로 디스패치한다.
19
+ 에이전트별로 claude 또는 codex provider를 사용할 수 있다. `/crew-setup`에서 설정한 config 기반으로 디스패치한다.
20
20
 
21
21
  ### Provider 설정 해석
22
22
 
23
- 오케스트레이터는 Phase 1에서 `.crew/config.json`과 `data/provider-catalog.json`을 읽어 각 에이전트의 provider 설정을 결정한다.
23
+ 오케스트레이터는 Phase 1에서 config 파일과 `data/provider-catalog.json`을 읽어 각 에이전트의 provider 설정을 결정한다.
24
24
 
25
- **우선순위:**
26
- 1. `.crew/config.json`의 `providers.{role}` — 있으면 사용
27
- 2. `data/provider-catalog.json`의 `agent_defaults.{role}` — 폴백
25
+ **config 해석 우선순위 (cascading):**
26
+ 1. `{projectRoot}/.crew/config.json`의 `providers.{role}` — 프로젝트 오버라이드 (최우선)
27
+ 2. `~/.claude/crew/config.json`의 `providers.{role}` — 유저 레벨 기본값
28
+ 3. `data/provider-catalog.json`의 `agent_defaults.{role}` — 하드코딩 폴백
28
29
 
29
30
  **해석된 설정 예시:**
30
31
  ```json
@@ -108,8 +109,9 @@ Bash("codex exec --model {model} -c model_reasoning_effort=\"{reasoning}\" --dan
108
109
  **1a. Provider 설정 로드**
109
110
 
110
111
  1. `data/provider-catalog.json`을 읽어 `agent_defaults`를 로드한다.
111
- 2. `.crew/config.json`이 있으면 `providers` 필드를 읽어 `agent_defaults`를 오버라이드한다.
112
- 3. codex provider가 하나라도 설정되어 있으면 `which codex`로 가용성을 확인한다.
112
+ 2. `~/.claude/crew/config.json`이 있으면 `providers` 필드를 읽어 `agent_defaults`를 오버라이드한다 (유저 레벨).
113
+ 3. `{projectRoot}/.crew/config.json`이 있으면 `providers` 필드를 읽어 다시 오버라이드한다 (프로젝트 레벨, 최우선).
114
+ 4. codex provider가 하나라도 설정되어 있으면 `which codex`로 가용성을 확인한다.
113
115
  - codex가 없으면 경고를 출력하고 해당 에이전트를 기본값(claude)으로 폴백한다.
114
116
 
115
117
  해석된 설정을 Phase 2, 3에서 ��용한다.
@@ -35,11 +35,42 @@ claude-crew 플러그인의 초기 설정을 수행한다:
35
35
 
36
36
  에이전트별로 어떤 provider(claude/codex)와 model을 사용할지 설정한다.
37
37
 
38
- ### 2a. 카탈로그 로드
38
+ ### 2a. 설치 스코프 판별
39
+
40
+ `~/.claude/plugins/installed_plugins.json`을 읽어 현재 프로젝트의 설치 스코프를 판별한다.
41
+
42
+ ```bash
43
+ # 현재 프로젝트 루트 (워크트리 대응)
44
+ git rev-parse --show-toplevel
45
+ ```
46
+
47
+ **판별 로직:**
48
+ 1. `installed_plugins.json`의 `plugins["claude-crew@claude-crew"]` 배열을 순회한다.
49
+ 2. `projectPath`가 현재 프로젝트 루트와 일치하는 항목이 있으면 → **프로젝트 레벨 설치**
50
+ 3. 없으면 `scope === "user"` 항목이 있는지 확인 → **유저 레벨 설치**
51
+ 4. 둘 다 없으면 → dev 환경 (프로젝트 레벨로 취급)
52
+
53
+ **스코프별 config 경로:**
54
+
55
+ | 설치 스코프 | config 경로 | 적용 범위 |
56
+ |---|---|---|
57
+ | 프로젝트 레벨 | `{projectRoot}/.crew/config.json` | 해당 프로젝트만 |
58
+ | 유저 레벨 | `~/.claude/crew/config.json` | 모든 프로젝트 (기본값) |
59
+
60
+ 판별된 스코프를 사용자에게 알린다:
61
+ ```
62
+ 설치 스코프: 유저 레벨 → 설정이 ~/.claude/crew/config.json에 저장됩니다 (모든 프로젝트 공유)
63
+ ```
64
+ 또는:
65
+ ```
66
+ 설치 스코프: 프로젝트 레벨 → 설정이 .crew/config.json에 저장됩니다 (이 프로젝트만)
67
+ ```
68
+
69
+ ### 2b. 카탈로그 로드
39
70
 
40
71
  `data/provider-catalog.json`을 읽어 사용 가능한 provider와 model 목록을 로드한다.
41
72
 
42
- ### 2b. Codex CLI 가용성 확인
73
+ ### 2c. Codex CLI 가용성 확인
43
74
 
44
75
  ```bash
45
76
  which codex
@@ -48,9 +79,9 @@ which codex
48
79
  - codex가 없으면: "Codex CLI가 설치되어 있지 않습니다. 모든 에이전트가 Claude를 사용합니다." 안내 후 Step 2를 스킵한다.
49
80
  - codex가 있으면: 계속 진행한다.
50
81
 
51
- ### 2c. 기존 설정 표시
82
+ ### 2d. 기존 설정 표시
52
83
 
53
- `.crew/config.json`이 있으면 현재 설정을 표시한다. 없으면 기본값을 표시한다.
84
+ Step 2a에서 판별된 config 경로의 파일이 있으면 현재 설정을 표시한다. 없으면 기본값을 표시한다.
54
85
 
55
86
  ```
56
87
  현재 에이전트 설정:
@@ -59,7 +90,7 @@ which codex
59
90
  - qa: claude / sonnet (기본값)
60
91
  ```
61
92
 
62
- ### 2d. 설정할 에이전트 선택
93
+ ### 2e. 설정할 에이전트 선택
63
94
 
64
95
  사용자에게 설정을 변경할 에이전트를 선택하게 한다.
65
96
 
@@ -71,7 +102,7 @@ which codex
71
102
  - 사용자가 엔터만 누르거나 "없음"/"스킵"을 입력하면 Step 2를 종료한다.
72
103
  - 예시 입력: `dev`, `dev, code-reviewer`
73
104
 
74
- ### 2e. 선택된 에이전트별 설정
105
+ ### 2f. 선택된 에이전트별 설정
75
106
 
76
107
  선택된 각 에이전트에 대해 순차적으로:
77
108
 
@@ -106,15 +137,18 @@ Model:
106
137
  [6] GPT-5.4 Mini — 최저 비용
107
138
  ```
108
139
 
109
- ### 2f. 설정 저장
140
+ ### 2g. 설정 저장
141
+
142
+ 선택 결과를 Step 2a에서 판별된 config 경로에 저장한다.
110
143
 
111
- 선택 결과를 `.crew/config.json`에 저장한다.
144
+ - 프로젝트 레벨: `{projectRoot}/.crew/config.json`
145
+ - 유저 레벨: `~/.claude/crew/config.json`
112
146
 
113
147
  **규칙:**
114
148
  - 기본값과 동일한 설정은 저장하지 않는다 (기본값은 `agent_defaults` 참조).
115
149
  - 기본값과 다른 설정만 `providers` 객체에 기록한다.
116
- - 기존 `.crew/config.json`이 있으면 `providers` 필드만 머지한다 (다른 필드 보존).
117
- - `.crew/` 디렉토리가 없으면 생성한다.
150
+ - 기존 config 파일이 있으면 `providers` 필드만 머지한다 (다른 필드 보존).
151
+ - 디렉토리가 없으면 생성한다 (`.crew/` 또는 `~/.claude/crew/`).
118
152
 
119
153
  **저장 형식:**
120
154
 
@@ -129,7 +163,7 @@ Model:
129
163
  - claude provider일 때: `reasoning` 필드 생략
130
164
  - codex provider일 때: 카탈로그의 `reasoning` 값 포함 (`null`이면 생략)
131
165
 
132
- ### 2g. 확인 메시지
166
+ ### 2h. 확인 메시지
133
167
 
134
168
  ```
135
169
  ✓ Provider 설정 완료:
@@ -137,5 +171,9 @@ Model:
137
171
  - code-reviewer: claude / opus (기본값)
138
172
  - qa: claude / sonnet (기본값)
139
173
 
140
- 설정 파일: .crew/config.json
174
+ 설정 파일: ~/.claude/crew/config.json (유저 레벨 — 모든 프로젝트 공유)
175
+ ```
176
+ 또는:
177
+ ```
178
+ 설정 파일: .crew/config.json (프로젝트 레벨)
141
179
  ```