triflux 10.9.21 → 10.9.22
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-plugin/marketplace.json +34 -0
- package/.claude-plugin/plugin.json +22 -0
- package/config/mcp-registry.json +29 -0
- package/hub/account-broker.mjs +6 -4
- package/hub/cli-adapter-base.mjs +14 -14
- package/hub/lib/env-detect.mjs +47 -20
- package/hub/server.mjs +17 -15
- package/hub/team/headless.mjs +10 -0
- package/hub/team/swarm-hypervisor.mjs +2 -2
- package/hud/constants.mjs +24 -13
- package/hud/renderers.mjs +2 -1
- package/package.json +62 -21
- package/scripts/__tests__/keyword-detector.test.mjs +4 -4
- package/scripts/__tests__/release-governance.test.mjs +148 -0
- package/scripts/doctor-diagnose.mjs +6 -7
- package/scripts/lib/cross-review-utils.mjs +2 -2
- package/scripts/lib/mcp-filter.mjs +9 -5
- package/scripts/release/bump-version.mjs +77 -0
- package/scripts/release/check-sync.mjs +51 -0
- package/scripts/release/lib.mjs +303 -0
- package/scripts/release/prepare.mjs +85 -0
- package/scripts/release/publish.mjs +87 -0
- package/scripts/release/verify.mjs +81 -0
- package/scripts/release/version-manifest.json +26 -0
- package/scripts/remote-spawn.mjs +3 -3
- package/scripts/setup.mjs +18 -15
- package/scripts/tfx-route.sh +64 -8
- package/tui/codex-profile.mjs +457 -0
- package/tui/core.mjs +266 -0
- package/tui/doctor.mjs +375 -0
- package/tui/gemini-profile.mjs +299 -0
- package/tui/monitor-data.mjs +152 -0
- package/tui/monitor.mjs +339 -0
- package/tui/setup.mjs +598 -0
- package/CLAUDE.md +0 -212
- package/references/hosts.json +0 -46
- package/skills/tfx-workspace/async-tests/run-tests.sh +0 -203
- package/skills/tfx-workspace/evals/evals.json +0 -79
- package/skills/tfx-workspace/iteration-1/benchmark.json +0 -524
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +0 -11
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +0 -25
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +0 -154
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +0 -25
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +0 -126
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +0 -11
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +0 -25
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +0 -119
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +0 -25
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +0 -115
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +0 -10
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +0 -20
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +0 -86
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +0 -20
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +0 -81
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +0 -12
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +0 -30
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +0 -316
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +0 -30
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +0 -352
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/review.html +0 -1325
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +0 -12
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +0 -30
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +0 -97
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +0 -30
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +0 -94
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +0 -12
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +0 -30
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +0 -209
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +0 -30
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +0 -193
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-2/benchmark.json +0 -144
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +0 -13
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +0 -35
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +0 -382
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +0 -35
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +0 -333
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +0 -5
- package/skills/tfx-workspace/iteration-2/review.html +0 -1325
- package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +0 -217
- package/skills/tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md +0 -77
- package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +0 -65
- package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +0 -94
- package/skills/tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md +0 -82
- package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +0 -133
- package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +0 -426
- package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +0 -101
|
@@ -1,352 +0,0 @@
|
|
|
1
|
-
# tfx-multi Routing Analysis
|
|
2
|
-
|
|
3
|
-
**Input:** `/tfx-multi 인증 리팩터링 + UI 개선 + 보안 리뷰`
|
|
4
|
-
**Skill:** `tfx-multi` (SKILL.md — v3 파이프라인 기반 멀티-CLI 팀 오케스트레이터)
|
|
5
|
-
**Mode detected:** `--quick` (기본값, `--thorough` 플래그 없음)
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Phase 0: Preflight Checks
|
|
10
|
-
|
|
11
|
-
**병렬 정책:** 자동 모드이므로 Phase 0(preflight) + Phase 2(triage)를 동시 병렬로 실행한다.
|
|
12
|
-
Agent spawn(Phase 3)은 Phase 2 완료 후 시작한다.
|
|
13
|
-
|
|
14
|
-
단일 Bash 명령으로 통합 실행:
|
|
15
|
-
|
|
16
|
-
```bash
|
|
17
|
-
Bash("curl -sf http://127.0.0.1:27888/status >/dev/null && test -f ~/.claude/scripts/tfx-route.sh && echo 'preflight: ok' || echo 'preflight: FAIL'")
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
점검 항목:
|
|
21
|
-
- Hub 상태: `http://127.0.0.1:27888/status` 응답 확인 (`/health` 단독 판정 금지)
|
|
22
|
-
- `tfx-route.sh` 파일 존재 여부: `~/.claude/scripts/tfx-route.sh`
|
|
23
|
-
- 필수 CLI 설치 여부: codex, gemini (검증 실패 시 해당 워커를 claude fallback으로 대체)
|
|
24
|
-
|
|
25
|
-
출력 정책: 성공 시 `preflight: ok (route/hub)` 한 줄만 노출. 실패 항목이 있을 때만 상세 출력.
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Phase 1: Input Parsing
|
|
30
|
-
|
|
31
|
-
입력 문자열: `"인증 리팩터링 + UI 개선 + 보안 리뷰"`
|
|
32
|
-
|
|
33
|
-
- `--tmux` / `--psmux` 플래그: 없음 → Phase 3-mux 분기 없음
|
|
34
|
-
- `--thorough` 플래그: 없음 → `--quick` (기본) 모드 확정
|
|
35
|
-
- `N:agent` 패턴: 없음 → 수동 모드 아님
|
|
36
|
-
- `--agents` 플래그: 없음
|
|
37
|
-
- 제어 커맨드 (`status`, `stop`, `kill`, `attach`, `list`, `send`): 없음
|
|
38
|
-
- 인자: 비어 있지 않음 → Phase 2로 진행 가능
|
|
39
|
-
|
|
40
|
-
결론: **자동 모드** (Codex 분류 → Opus 분해)로 Phase 2 진행.
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## Phase 2: Triage (자동 모드)
|
|
45
|
-
|
|
46
|
-
### Step 2a: Codex 분류
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
Bash("codex exec --full-auto --skip-git-repo-check '다음 작업을 분석하고 각 부분에 적합한 agent를 분류하라.
|
|
50
|
-
|
|
51
|
-
agent 선택:
|
|
52
|
-
- codex: 코드 구현/수정/분석/리뷰/디버깅/설계 (기본값)
|
|
53
|
-
- gemini: 문서/UI/디자인/멀티모달
|
|
54
|
-
- claude: 코드베이스 탐색/테스트 실행/검증 (최후 수단)
|
|
55
|
-
|
|
56
|
-
모든 역할은 Codex/Gemini 우선 배정:
|
|
57
|
-
- explore, verifier, test-engineer, qa-tester 포함 전 역할이 Codex/Gemini로 라우팅
|
|
58
|
-
- Codex/Gemini 미설치 시에만 claude-native(sonnet/haiku) fallback
|
|
59
|
-
- claude 타입은 최후 수단으로만 사용
|
|
60
|
-
|
|
61
|
-
작업: 인증 리팩터링 + UI 개선 + 보안 리뷰
|
|
62
|
-
|
|
63
|
-
JSON만 출력:
|
|
64
|
-
{ \"parts\": [{ \"description\": \"...\", \"agent\": \"codex|gemini|claude\" }] }
|
|
65
|
-
'")
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
Codex 분류 실패 시 → Opus(오케스트레이터)가 직접 분류+분해.
|
|
69
|
-
|
|
70
|
-
### Step 2b: 인라인 분해 (예상 결과)
|
|
71
|
-
|
|
72
|
-
Codex 분류 결과를 기반으로 아래 서브태스크 배열을 구성한다:
|
|
73
|
-
|
|
74
|
-
| # | CLI | Subtask | Role |
|
|
75
|
-
|---|--------|---------------|-----------|
|
|
76
|
-
| 1 | codex | 인증 리팩터링 | executor |
|
|
77
|
-
| 2 | gemini | UI 개선 | designer |
|
|
78
|
-
| 3 | codex | 보안 리뷰 | reviewer |
|
|
79
|
-
|
|
80
|
-
```javascript
|
|
81
|
-
assignments = [
|
|
82
|
-
{ cli: "codex", subtask: "인증 리팩터링", role: "executor" },
|
|
83
|
-
{ cli: "gemini", subtask: "UI 개선", role: "designer" },
|
|
84
|
-
{ cli: "codex", subtask: "보안 리뷰", role: "reviewer" }
|
|
85
|
-
]
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
> 참고: 입력에 `+`로 구분된 3개의 명시적 파트가 있으므로 분류 결과는 이 3파트 기준으로 맞춰진다.
|
|
89
|
-
> 실제 Codex 분류 JSON에 따라 CLI 배정이 달라질 수 있다.
|
|
90
|
-
|
|
91
|
-
### Phase 2.5–2.6: 건너뜀
|
|
92
|
-
|
|
93
|
-
`--quick` 기본 모드이므로 Plan(2.5), PRD(2.6) 단계를 실행하지 않는다.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Phase 3: Native Teams 실행
|
|
98
|
-
|
|
99
|
-
### Step 3a: TeamCreate
|
|
100
|
-
|
|
101
|
-
```javascript
|
|
102
|
-
teamName = "tfx-" + Date.now().toString(36).slice(-6)
|
|
103
|
-
// 예: "tfx-m3x7qk" (실행 시점에 따라 다름)
|
|
104
|
-
|
|
105
|
-
TeamCreate({
|
|
106
|
-
team_name: teamName, // e.g. "tfx-m3x7qk"
|
|
107
|
-
description: "tfx-multi: 인증 리팩터링 + UI 개선 + 보안 리뷰"
|
|
108
|
-
})
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### Step 3b: TaskCreate (공유 작업 등록)
|
|
112
|
-
|
|
113
|
-
각 서브태스크에 대해 순서대로 TaskCreate를 호출하고 반환된 taskId를 보존한다.
|
|
114
|
-
|
|
115
|
-
**서브태스크 1 (인증 리팩터링):**
|
|
116
|
-
```javascript
|
|
117
|
-
TaskCreate({
|
|
118
|
-
subject: "인증 리팩터링",
|
|
119
|
-
description: "CLI: codex, 역할: executor\n\n인증 리팩터링 작업 상세 내용",
|
|
120
|
-
metadata: { cli: "codex", role: "executor" }
|
|
121
|
-
})
|
|
122
|
-
// taskId_1 = created_task.id
|
|
123
|
-
// agentName_1 = "codex-worker-1"
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
**서브태스크 2 (UI 개선):**
|
|
127
|
-
```javascript
|
|
128
|
-
TaskCreate({
|
|
129
|
-
subject: "UI 개선",
|
|
130
|
-
description: "CLI: gemini, 역할: designer\n\nUI 개선 작업 상세 내용",
|
|
131
|
-
metadata: { cli: "gemini", role: "designer" }
|
|
132
|
-
})
|
|
133
|
-
// taskId_2 = created_task.id
|
|
134
|
-
// agentName_2 = "gemini-worker-2"
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
**서브태스크 3 (보안 리뷰):**
|
|
138
|
-
```javascript
|
|
139
|
-
TaskCreate({
|
|
140
|
-
subject: "보안 리뷰",
|
|
141
|
-
description: "CLI: codex, 역할: reviewer\n\n보안 리뷰 작업 상세 내용",
|
|
142
|
-
metadata: { cli: "codex", role: "reviewer" }
|
|
143
|
-
})
|
|
144
|
-
// taskId_3 = created_task.id
|
|
145
|
-
// agentName_3 = "codex-worker-3"
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
### Step 3c: Agent 슬림 래퍼 spawn (codex/gemini 서브태스크)
|
|
149
|
-
|
|
150
|
-
3개 서브태스크 모두 cli가 `codex` 또는 `gemini`이므로, 3개 모두 슬림 래퍼 Agent로 spawn한다.
|
|
151
|
-
`mode: "bypassPermissions"`는 모든 Agent spawn에 반드시 포함된다.
|
|
152
|
-
|
|
153
|
-
**Agent 1 — codex-worker-1 (인증 리팩터링):**
|
|
154
|
-
```javascript
|
|
155
|
-
Agent({
|
|
156
|
-
name: "codex-worker-1",
|
|
157
|
-
team_name: teamName, // "tfx-m3x7qk"
|
|
158
|
-
mode: "bypassPermissions", // [필수] 사용자 승인 없이 Bash 실행
|
|
159
|
-
run_in_background: true,
|
|
160
|
-
prompt: buildSlimWrapperPrompt("codex", {
|
|
161
|
-
subtask: "인증 리팩터링",
|
|
162
|
-
role: "executor",
|
|
163
|
-
teamName: teamName,
|
|
164
|
-
taskId: taskId_1,
|
|
165
|
-
agentName: "codex-worker-1",
|
|
166
|
-
leadName: "team-lead",
|
|
167
|
-
mcp_profile: mcp_profile // tfx-route.sh에 전달할 MCP 프로파일
|
|
168
|
-
})
|
|
169
|
-
// prompt 내용(buildSlimWrapperPrompt 출력, ~100 토큰):
|
|
170
|
-
// 1. TaskUpdate(taskId_1, status: "in_progress")
|
|
171
|
-
// 2. SendMessage(to: "team-lead", "작업 시작: codex-worker-1")
|
|
172
|
-
// 3. Bash("bash ~/.claude/scripts/tfx-route.sh executor '인증 리팩터링' {mcp_profile}",
|
|
173
|
-
// timeout: 1140000) // 1080초 + 60초 여유 = 1140초 → ms
|
|
174
|
-
// 4. SendMessage(to: "team-lead", "결과: {요약}")
|
|
175
|
-
// 5. 리드 피드백 대기 → 필요 시 Step 3 재실행
|
|
176
|
-
// 6. TaskUpdate(taskId_1, status: "completed", metadata: {result: "success"|"failed"})
|
|
177
|
-
// + SendMessage(to: "team-lead") → 종료
|
|
178
|
-
})
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
Bash timeout 계산: `executor` 역할, 일반 프로파일 → 기본 1080초 + 60초 = **1140초 → 1,140,000 ms**
|
|
182
|
-
|
|
183
|
-
**Agent 2 — gemini-worker-2 (UI 개선):**
|
|
184
|
-
```javascript
|
|
185
|
-
Agent({
|
|
186
|
-
name: "gemini-worker-2",
|
|
187
|
-
team_name: teamName,
|
|
188
|
-
mode: "bypassPermissions",
|
|
189
|
-
run_in_background: true,
|
|
190
|
-
prompt: buildSlimWrapperPrompt("gemini", {
|
|
191
|
-
subtask: "UI 개선",
|
|
192
|
-
role: "designer",
|
|
193
|
-
teamName: teamName,
|
|
194
|
-
taskId: taskId_2,
|
|
195
|
-
agentName: "gemini-worker-2",
|
|
196
|
-
leadName: "team-lead",
|
|
197
|
-
mcp_profile: mcp_profile
|
|
198
|
-
})
|
|
199
|
-
// Bash 내부:
|
|
200
|
-
// Bash("bash ~/.claude/scripts/tfx-route.sh designer 'UI 개선' {mcp_profile}",
|
|
201
|
-
// timeout: 1140000)
|
|
202
|
-
})
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
**Agent 3 — codex-worker-3 (보안 리뷰):**
|
|
206
|
-
```javascript
|
|
207
|
-
Agent({
|
|
208
|
-
name: "codex-worker-3",
|
|
209
|
-
team_name: teamName,
|
|
210
|
-
mode: "bypassPermissions",
|
|
211
|
-
run_in_background: true,
|
|
212
|
-
prompt: buildSlimWrapperPrompt("codex", {
|
|
213
|
-
subtask: "보안 리뷰",
|
|
214
|
-
role: "reviewer",
|
|
215
|
-
teamName: teamName,
|
|
216
|
-
taskId: taskId_3,
|
|
217
|
-
agentName: "codex-worker-3",
|
|
218
|
-
leadName: "team-lead",
|
|
219
|
-
mcp_profile: mcp_profile
|
|
220
|
-
})
|
|
221
|
-
// Bash 내부:
|
|
222
|
-
// Bash("bash ~/.claude/scripts/tfx-route.sh reviewer '보안 리뷰' {mcp_profile}",
|
|
223
|
-
// timeout: 4260000) // reviewer → review 프로파일 → 3600초 + 60초 = 3660초
|
|
224
|
-
// ※ reviewer 역할은 review 프로파일로 분류될 수 있어 timeout이 3660초가 될 수 있음
|
|
225
|
-
})
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
> Bash timeout 참고:
|
|
229
|
-
> - `analyze/review` 프로파일 또는 `architect/analyst` 역할: 3600초 + 60초 = 3660초 → 3,660,000 ms
|
|
230
|
-
> - 그 외 기본: 1080초 + 60초 = 1140초 → 1,140,000 ms
|
|
231
|
-
> - `reviewer` 역할이 `review` 프로파일로 매핑되면 3,660,000 ms, 기본 프로파일이면 1,140,000 ms
|
|
232
|
-
|
|
233
|
-
### Step 3d: claude 타입 Agent 직접 실행
|
|
234
|
-
|
|
235
|
-
이 케이스에서는 `cli == "claude"` 서브태스크가 없으므로 Step 3d는 실행되지 않는다.
|
|
236
|
-
|
|
237
|
-
### Step 3e: 사용자 안내
|
|
238
|
-
|
|
239
|
-
```
|
|
240
|
-
"팀 '{teamName}' 생성 완료.
|
|
241
|
-
Codex/Gemini 워커가 슬림 래퍼 Agent로 네비게이션에 등록되었습니다.
|
|
242
|
-
Shift+Down으로 다음 워커로 전환 (마지막→리드 wrap). Shift+Tab으로 이전 워커 전환."
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
### Phase 3.5–3.7: 건너뜀
|
|
246
|
-
|
|
247
|
-
`--quick` 모드이므로 Verify(3.5), Fix Loop(3.6), Ralph Loop(3.7)을 실행하지 않는다.
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
## Phase 4: 결과 수집
|
|
252
|
-
|
|
253
|
-
truth source: `team_task_list`
|
|
254
|
-
|
|
255
|
-
```bash
|
|
256
|
-
Bash("node hub/bridge.mjs team-task-list --team ${teamName}")
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
1. 모든 백그라운드 Agent 완료를 대기한다.
|
|
260
|
-
2. 위 명령으로 `team_task_list`를 최종 truth source로 조회한다.
|
|
261
|
-
3. `status: "completed"` + `metadata.result == "failed"` 태스크가 있으면 Claude fallback 재시도한다.
|
|
262
|
-
4. 재시도 후 `team_task_list`를 재조회하여 최종 상태를 확정한다.
|
|
263
|
-
5. `send-message` 및 `result(task.result)` 이벤트는 진행 관찰 채널로만 사용한다. 최종 판정은 반드시 `team_task_list` 기준.
|
|
264
|
-
|
|
265
|
-
종합 보고서 형식:
|
|
266
|
-
```markdown
|
|
267
|
-
## tfx-multi 실행 결과
|
|
268
|
-
|
|
269
|
-
| # | Worker | CLI | 작업 | 상태 |
|
|
270
|
-
|---|---------------|--------|---------------|-----------|
|
|
271
|
-
| 1 | codex-worker-1 | codex | 인증 리팩터링 | completed |
|
|
272
|
-
| 2 | gemini-worker-2 | gemini | UI 개선 | completed |
|
|
273
|
-
| 3 | codex-worker-3 | codex | 보안 리뷰 | completed |
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
## Phase 5: Cleanup (TeamDelete)
|
|
279
|
-
|
|
280
|
-
반드시 실행 — 성공/실패 관계없이 건너뛸 수 없음.
|
|
281
|
-
|
|
282
|
-
1. 모든 백그라운드 Agent 완료를 **최대 30초** 대기한다.
|
|
283
|
-
2. 30초 후에도 미완료 Agent가 있으면 대기를 중단하고 정리를 진행한다.
|
|
284
|
-
3. `TeamDelete()` 호출:
|
|
285
|
-
```javascript
|
|
286
|
-
TeamDelete({ team_name: teamName })
|
|
287
|
-
```
|
|
288
|
-
4. TeamDelete 실패 시 (활성 멤버 잔존) → `forceCleanupTeam(teamName)` 강제 정리.
|
|
289
|
-
`forceCleanupTeam`도 실패 시 수동 정리 안내:
|
|
290
|
-
```bash
|
|
291
|
-
rm -rf ~/.claude/teams/{teamName}/ ~/.claude/tasks/{teamName}/
|
|
292
|
-
```
|
|
293
|
-
5. 종합 보고서를 출력한다.
|
|
294
|
-
|
|
295
|
-
TeamDelete를 반드시 실행해야 하는 이유: `~/.claude/teams/{teamName}/`이 잔존하면
|
|
296
|
-
OMC hook이 "team executing"을 반복 감지하는 무한 루프에 빠진다.
|
|
297
|
-
|
|
298
|
-
---
|
|
299
|
-
|
|
300
|
-
## 핵심 규칙 확인
|
|
301
|
-
|
|
302
|
-
### `mode: "bypassPermissions"` 포함 여부
|
|
303
|
-
|
|
304
|
-
**포함 — 필수.** 모든 Agent spawn(codex-worker, gemini-worker, claude-worker)에 반드시 포함한다.
|
|
305
|
-
이 설정이 없으면 워커의 Bash 실행 시 사용자 승인이 요청되어 자동 실행이 중단된다.
|
|
306
|
-
|
|
307
|
-
본 케이스의 3개 Agent 모두:
|
|
308
|
-
- `Agent({ ..., mode: "bypassPermissions", ... })`
|
|
309
|
-
|
|
310
|
-
### `tfx-route.sh` 사용 여부 (Agent 내부)
|
|
311
|
-
|
|
312
|
-
**사용 — 필수.** 슬림 래퍼 Agent 내부에서 Codex/Gemini를 실행할 때 반드시 아래 형식만 허용:
|
|
313
|
-
|
|
314
|
-
```bash
|
|
315
|
-
bash ~/.claude/scripts/tfx-route.sh {role} '{subtask}' {mcp_profile}
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
**직접 호출 금지:**
|
|
319
|
-
- `codex exec "..."` — 직접 호출 금지
|
|
320
|
-
- `gemini -y -p "..."` — 직접 호출 금지
|
|
321
|
-
|
|
322
|
-
직접 호출 시 누락되는 항목:
|
|
323
|
-
- 모델 지정 (`-m gemini-3.1-pro-preview` 등)
|
|
324
|
-
- MCP 필터
|
|
325
|
-
- 팀 bridge 연동 (`TFX_TEAM_*`)
|
|
326
|
-
- Windows 호환 경로
|
|
327
|
-
- 타임아웃
|
|
328
|
-
- 후처리 (토큰 추적/이슈 로깅)
|
|
329
|
-
|
|
330
|
-
tfx-route.sh 내부에서 `TFX_TEAM_*` 환경변수를 통해 Hub 통신:
|
|
331
|
-
- `TFX_TEAM_NAME` — 팀 식별자 (`teamName`)
|
|
332
|
-
- `TFX_TEAM_TASK_ID` — 작업 식별자 (`taskId`)
|
|
333
|
-
- `TFX_TEAM_AGENT_NAME` — 워커 이름 (`agentName`)
|
|
334
|
-
- `TFX_TEAM_LEAD_NAME` — 리드 수신자 (`"team-lead"`)
|
|
335
|
-
|
|
336
|
-
Hub 통신 경로: Named Pipe(`\\.\pipe\triflux-{pid}`) 우선, HTTP(`127.0.0.1:27888`) fallback.
|
|
337
|
-
|
|
338
|
-
---
|
|
339
|
-
|
|
340
|
-
## 요약
|
|
341
|
-
|
|
342
|
-
| 항목 | 값 |
|
|
343
|
-
|-------------------------------|-----------------------------------------|
|
|
344
|
-
| 감지 모드 | 자동 모드, `--quick` (기본) |
|
|
345
|
-
| Phase 0 병렬 실행 | preflight + Phase 2(triage) 동시 병렬 |
|
|
346
|
-
| 서브태스크 수 | 3개 |
|
|
347
|
-
| Agent spawn 방식 | 슬림 래퍼 (Step 3c) × 3, Step 3d 없음 |
|
|
348
|
-
| `mode: "bypassPermissions"` | 3개 Agent 모두 포함 (필수) |
|
|
349
|
-
| tfx-route.sh 경유 | 3개 Agent 내부 Bash 모두 경유 (필수) |
|
|
350
|
-
| Phase 2.5–2.6 (Plan/PRD) | 건너뜀 (`--quick` 모드) |
|
|
351
|
-
| Phase 3.5–3.7 (Verify/Fix) | 건너뜀 (`--quick` 모드) |
|
|
352
|
-
| Phase 5 (TeamDelete) | 반드시 실행 (성공/실패 무관) |
|