triflux 7.1.4 → 7.2.2
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 +31 -31
- package/.claude-plugin/plugin.json +22 -23
- package/bin/triflux.mjs +18 -5
- package/hooks/keyword-rules.json +393 -361
- package/hub/bridge.mjs +799 -786
- package/hub/delegator/contracts.mjs +37 -38
- package/hub/delegator/schema/delegator-tools.schema.json +250 -250
- package/hub/delegator/service.mjs +307 -302
- package/hub/intent.mjs +108 -11
- package/hub/lib/process-utils.mjs +20 -0
- package/hub/pipe.mjs +589 -589
- package/hub/pipeline/gates/confidence.mjs +1 -1
- package/hub/pipeline/gates/selfcheck.mjs +2 -4
- package/hub/pipeline/state.mjs +191 -187
- package/hub/pipeline/transitions.mjs +124 -120
- package/hub/public/dashboard.html +355 -349
- package/hub/quality/deslop.mjs +5 -3
- package/hub/reflexion.mjs +5 -1
- package/hub/research.mjs +6 -1
- package/hub/router.mjs +791 -782
- package/hub/server.mjs +893 -822
- package/hub/store.mjs +807 -778
- package/hub/team/agent-map.json +10 -0
- package/hub/team/ansi.mjs +3 -4
- package/hub/team/cli/commands/control.mjs +43 -43
- package/hub/team/cli/commands/interrupt.mjs +36 -36
- package/hub/team/cli/commands/kill.mjs +3 -3
- package/hub/team/cli/commands/send.mjs +37 -37
- package/hub/team/cli/commands/start/index.mjs +18 -8
- package/hub/team/cli/commands/start/parse-args.mjs +3 -1
- package/hub/team/cli/commands/start/start-headless.mjs +4 -1
- package/hub/team/cli/commands/status.mjs +87 -87
- package/hub/team/cli/commands/stop.mjs +1 -1
- package/hub/team/cli/commands/task.mjs +1 -1
- package/hub/team/cli/index.mjs +41 -39
- package/hub/team/cli/manifest.mjs +29 -28
- package/hub/team/cli/services/hub-client.mjs +37 -0
- package/hub/team/cli/services/state-store.mjs +26 -12
- package/hub/team/dashboard.mjs +11 -4
- package/hub/team/handoff.mjs +12 -0
- package/hub/team/headless.mjs +202 -200
- package/hub/team/native-supervisor.mjs +386 -346
- package/hub/team/nativeProxy.mjs +680 -692
- package/hub/team/staleState.mjs +361 -369
- package/hub/team/tui-viewer.mjs +27 -3
- package/hub/team/tui.mjs +1 -0
- package/hub/token-mode.mjs +114 -24
- package/hub/workers/delegator-mcp.mjs +1059 -1057
- package/hud/colors.mjs +88 -0
- package/hud/constants.mjs +78 -0
- package/hud/hud-qos-status.mjs +206 -1872
- package/hud/providers/claude.mjs +309 -0
- package/hud/providers/codex.mjs +151 -0
- package/hud/providers/gemini.mjs +320 -0
- package/hud/renderers.mjs +424 -0
- package/hud/terminal.mjs +140 -0
- package/hud/utils.mjs +271 -0
- package/package.json +1 -2
- package/scripts/__tests__/keyword-detector.test.mjs +234 -234
- package/scripts/headless-guard-fast.sh +21 -0
- package/scripts/headless-guard.mjs +26 -6
- package/scripts/lib/keyword-rules.mjs +166 -168
- package/scripts/setup.mjs +725 -690
- package/scripts/tfx-route-post.mjs +424 -424
- package/scripts/tfx-route.sh +1671 -1650
- package/scripts/tmp-cleanup.mjs +74 -0
- package/skills/tfx-auto/SKILL.md +279 -278
- package/skills/tfx-auto-codex/SKILL.md +98 -77
- package/skills/tfx-codex/SKILL.md +65 -65
- package/skills/tfx-gemini/SKILL.md +83 -82
- package/skills/tfx-hub/SKILL.md +205 -136
- package/skills/tfx-multi/SKILL.md +11 -5
- package/.mcp.json +0 -8
package/skills/tfx-hub/SKILL.md
CHANGED
|
@@ -1,136 +1,205 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tfx-hub
|
|
3
|
-
description: >
|
|
4
|
-
tfx-hub MCP 메시지 버스 관리. CLI 에이전트 간 실시간 통신 허브를 시작/중지/상태확인하고,
|
|
5
|
-
hub 도메인의 자유형 작업도 처리합니다.
|
|
6
|
-
Use when: hub, 허브, 메시지 버스, message bus, 브릿지, bridge, MCP 서버 관리, 에이전트 통신
|
|
7
|
-
triggers:
|
|
8
|
-
- tfx-hub
|
|
9
|
-
argument-hint: "<start|stop|status|자유형 작업 설명>"
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# tfx-hub — MCP 메시지 버스 관리 + 개방형 작업
|
|
13
|
-
|
|
14
|
-
> CLI 에이전트(Codex/Gemini/Claude) 간 실시간 메시지 허브를 관리합니다.
|
|
15
|
-
> **커맨드 매칭 + fallthrough**: start/stop/status에 매칭되면 즉시 실행,
|
|
16
|
-
> 매칭 안 되면 **hub 도메인 컨텍스트를 활용한 범용 작업**으로 처리합니다.
|
|
17
|
-
|
|
18
|
-
## 입력 해석 규칙
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
/tfx-hub start → 커맨드 매칭 → 허브 시작
|
|
22
|
-
/tfx-hub stop → 커맨드 매칭 → 허브 중지
|
|
23
|
-
/tfx-hub status → 커맨드 매칭 → 상태 확인
|
|
24
|
-
/tfx-hub 테스트해줘 → fallthrough → hub 관련 범용 작업으로 처리
|
|
25
|
-
/tfx-hub 문서 저장해 → fallthrough → hub 관련 범용 작업으로 처리
|
|
26
|
-
/tfx-hub 브릿지 분석해 → fallthrough → hub 관련 범용 작업으로 처리
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
**fallthrough 규칙**: 인자가 start/stop/status/--port 등 커맨드 키워드에 매칭되지 않으면,
|
|
30
|
-
사용자의 입력을 **hub/브릿지/메시지버스 도메인의 자유형 작업**으로 해석한다.
|
|
31
|
-
|
|
32
|
-
fallthrough 라우팅:
|
|
33
|
-
```bash
|
|
34
|
-
# tfx-route.sh 경유 (권장)
|
|
35
|
-
Bash("bash ~/.claude/scripts/tfx-route.sh {에이전트} '{hub 컨텍스트 + 작업}' {mcp_profile}")
|
|
36
|
-
|
|
37
|
-
# codex 직접 호출 시 — 반드시 exec 서브커맨드 포함
|
|
38
|
-
Bash("codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check '{작업}'")
|
|
39
|
-
Bash("codex --profile xhigh exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check '{작업}'")
|
|
40
|
-
# ↑ --profile은 exec 앞에, --skip-git-repo-check은 exec 뒤에
|
|
41
|
-
|
|
42
|
-
# Claude 네이티브 (탐색/검증)
|
|
43
|
-
Agent(subagent_type="oh-my-claudecode:explore", prompt="{작업}")
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## 커맨드
|
|
47
|
-
|
|
48
|
-
### start — 허브 시작
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
Bash("node hub/server.mjs", run_in_background=true)
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
- Streamable HTTP MCP 서버를 `http://127.0.0.1:27888/mcp` 에서 시작
|
|
55
|
-
- SQLite WAL DB: `~/.claude/cache/tfx-hub/state.db`
|
|
56
|
-
- PID 파일: `~/.claude/cache/tfx-hub/hub.pid`
|
|
57
|
-
- 환경변수: `TFX_HUB_PORT` (포트), `TFX_HUB_DB` (DB 경로)
|
|
58
|
-
|
|
59
|
-
### stop — 허브 중지
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
# PID 파일에서 프로세스 ID 읽어서 종료
|
|
63
|
-
Bash("node -e \"
|
|
64
|
-
const fs = require('fs');
|
|
65
|
-
const path = require('path');
|
|
66
|
-
const pidFile = path.join(require('os').homedir(), '.claude/cache/tfx-hub/hub.pid');
|
|
67
|
-
if (fs.existsSync(pidFile)) {
|
|
68
|
-
const info = JSON.parse(fs.readFileSync(pidFile, 'utf8'));
|
|
69
|
-
process.kill(info.pid, 'SIGTERM');
|
|
70
|
-
console.log('tfx-hub 종료 (PID ' + info.pid + ')');
|
|
71
|
-
} else {
|
|
72
|
-
console.log('tfx-hub 미실행');
|
|
73
|
-
}
|
|
74
|
-
\"")
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### status — 상태 확인
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
# HTTP 상태 엔드포인트 조회
|
|
81
|
-
Bash("curl -s http://127.0.0.1:27888/status 2>/dev/null || echo '{\"error\":\"hub 미실행\"}'")
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## 각 CLI 등록 방법
|
|
85
|
-
|
|
86
|
-
허브 시작 후 각 CLI에 MCP 서버로 등록:
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
# Codex
|
|
90
|
-
codex mcp add tfx-hub --url http://127.0.0.1:27888/mcp
|
|
91
|
-
|
|
92
|
-
# Gemini (settings.json)
|
|
93
|
-
# mcpServers.tfx-hub.url = "http://127.0.0.1:27888/mcp"
|
|
94
|
-
|
|
95
|
-
# Claude
|
|
96
|
-
claude mcp add --transport http tfx-hub http://127.0.0.1:27888/mcp
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## MCP 도구 (
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
|
104
|
-
|
|
105
|
-
| `
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
108
|
-
| `
|
|
109
|
-
| `
|
|
110
|
-
| `
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
|
115
|
-
|
|
116
|
-
| `
|
|
117
|
-
| `
|
|
118
|
-
| `
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
1
|
+
---
|
|
2
|
+
name: tfx-hub
|
|
3
|
+
description: >
|
|
4
|
+
tfx-hub MCP 메시지 버스 관리. CLI 에이전트 간 실시간 통신 허브를 시작/중지/상태확인하고,
|
|
5
|
+
hub 도메인의 자유형 작업도 처리합니다.
|
|
6
|
+
Use when: hub, 허브, 메시지 버스, message bus, 브릿지, bridge, MCP 서버 관리, 에이전트 통신
|
|
7
|
+
triggers:
|
|
8
|
+
- tfx-hub
|
|
9
|
+
argument-hint: "<start|stop|status|자유형 작업 설명>"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# tfx-hub — MCP 메시지 버스 관리 + 개방형 작업
|
|
13
|
+
|
|
14
|
+
> CLI 에이전트(Codex/Gemini/Claude) 간 실시간 메시지 허브를 관리합니다.
|
|
15
|
+
> **커맨드 매칭 + fallthrough**: start/stop/status에 매칭되면 즉시 실행,
|
|
16
|
+
> 매칭 안 되면 **hub 도메인 컨텍스트를 활용한 범용 작업**으로 처리합니다.
|
|
17
|
+
|
|
18
|
+
## 입력 해석 규칙
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
/tfx-hub start → 커맨드 매칭 → 허브 시작
|
|
22
|
+
/tfx-hub stop → 커맨드 매칭 → 허브 중지
|
|
23
|
+
/tfx-hub status → 커맨드 매칭 → 상태 확인
|
|
24
|
+
/tfx-hub 테스트해줘 → fallthrough → hub 관련 범용 작업으로 처리
|
|
25
|
+
/tfx-hub 문서 저장해 → fallthrough → hub 관련 범용 작업으로 처리
|
|
26
|
+
/tfx-hub 브릿지 분석해 → fallthrough → hub 관련 범용 작업으로 처리
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**fallthrough 규칙**: 인자가 start/stop/status/--port 등 커맨드 키워드에 매칭되지 않으면,
|
|
30
|
+
사용자의 입력을 **hub/브릿지/메시지버스 도메인의 자유형 작업**으로 해석한다.
|
|
31
|
+
|
|
32
|
+
fallthrough 라우팅:
|
|
33
|
+
```bash
|
|
34
|
+
# tfx-route.sh 경유 (권장)
|
|
35
|
+
Bash("bash ~/.claude/scripts/tfx-route.sh {에이전트} '{hub 컨텍스트 + 작업}' {mcp_profile}")
|
|
36
|
+
|
|
37
|
+
# codex 직접 호출 시 — 반드시 exec 서브커맨드 포함
|
|
38
|
+
Bash("codex exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check '{작업}'")
|
|
39
|
+
Bash("codex --profile xhigh exec --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check '{작업}'")
|
|
40
|
+
# ↑ --profile은 exec 앞에, --skip-git-repo-check은 exec 뒤에
|
|
41
|
+
|
|
42
|
+
# Claude 네이티브 (탐색/검증)
|
|
43
|
+
Agent(subagent_type="oh-my-claudecode:explore", prompt="{작업}")
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 커맨드
|
|
47
|
+
|
|
48
|
+
### start — 허브 시작
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
Bash("node hub/server.mjs", run_in_background=true)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
- Streamable HTTP MCP 서버를 `http://127.0.0.1:27888/mcp` 에서 시작
|
|
55
|
+
- SQLite WAL DB: `~/.claude/cache/tfx-hub/state.db`
|
|
56
|
+
- PID 파일: `~/.claude/cache/tfx-hub/hub.pid`
|
|
57
|
+
- 환경변수: `TFX_HUB_PORT` (포트), `TFX_HUB_DB` (DB 경로)
|
|
58
|
+
|
|
59
|
+
### stop — 허브 중지
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# PID 파일에서 프로세스 ID 읽어서 종료
|
|
63
|
+
Bash("node -e \"
|
|
64
|
+
const fs = require('fs');
|
|
65
|
+
const path = require('path');
|
|
66
|
+
const pidFile = path.join(require('os').homedir(), '.claude/cache/tfx-hub/hub.pid');
|
|
67
|
+
if (fs.existsSync(pidFile)) {
|
|
68
|
+
const info = JSON.parse(fs.readFileSync(pidFile, 'utf8'));
|
|
69
|
+
process.kill(info.pid, 'SIGTERM');
|
|
70
|
+
console.log('tfx-hub 종료 (PID ' + info.pid + ')');
|
|
71
|
+
} else {
|
|
72
|
+
console.log('tfx-hub 미실행');
|
|
73
|
+
}
|
|
74
|
+
\"")
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### status — 상태 확인
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# HTTP 상태 엔드포인트 조회
|
|
81
|
+
Bash("curl -s http://127.0.0.1:27888/status 2>/dev/null || echo '{\"error\":\"hub 미실행\"}'")
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## 각 CLI 등록 방법
|
|
85
|
+
|
|
86
|
+
허브 시작 후 각 CLI에 MCP 서버로 등록:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Codex
|
|
90
|
+
codex mcp add tfx-hub --url http://127.0.0.1:27888/mcp
|
|
91
|
+
|
|
92
|
+
# Gemini (settings.json)
|
|
93
|
+
# mcpServers.tfx-hub.url = "http://127.0.0.1:27888/mcp"
|
|
94
|
+
|
|
95
|
+
# Claude
|
|
96
|
+
claude mcp add --transport http tfx-hub http://127.0.0.1:27888/mcp
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## MCP 도구 (20개)
|
|
100
|
+
|
|
101
|
+
### Core — 기본 통신
|
|
102
|
+
|
|
103
|
+
| 도구 | 설명 |
|
|
104
|
+
|------|------|
|
|
105
|
+
| `register` | 에이전트 등록 + lease 발급 |
|
|
106
|
+
| `status` | 허브/에이전트/큐/트레이스 상태 조회 |
|
|
107
|
+
| `publish` | 이벤트/응답 메시지 발행 (topic fanout 지원) |
|
|
108
|
+
| `ask` | 다른 에이전트에게 질문 (request/reply, await_response_ms 폴링 지원) |
|
|
109
|
+
| `handoff` | 작업 인계 (acceptance_criteria 지정 가능) |
|
|
110
|
+
| `poll_messages` | 수신함에서 메시지 폴링 **(Deprecated — Named Pipe 사용)** |
|
|
111
|
+
|
|
112
|
+
### Assign — 비차단 작업 할당
|
|
113
|
+
|
|
114
|
+
| 도구 | 설명 |
|
|
115
|
+
|------|------|
|
|
116
|
+
| `assign_async` | AWS CAO 스타일 비차단 job 생성 + 워커 실시간 전달 |
|
|
117
|
+
| `assign_result` | job 진행/완료 결과 보고 |
|
|
118
|
+
| `assign_status` | job 단건 상태 또는 목록 조회 |
|
|
119
|
+
|
|
120
|
+
### Team — Claude Native Teams 프록시
|
|
121
|
+
|
|
122
|
+
| 도구 | 설명 |
|
|
123
|
+
|------|------|
|
|
124
|
+
| `team_info` | Teams 메타/멤버/경로 정보 조회 |
|
|
125
|
+
| `team_task_list` | task 목록 조회 (owner/status 필터) |
|
|
126
|
+
| `team_task_update` | task claim/update |
|
|
127
|
+
| `team_send_message` | Teams inbox에 메시지 append |
|
|
128
|
+
|
|
129
|
+
### Pipeline — 파이프라인 관리
|
|
130
|
+
|
|
131
|
+
| 도구 | 설명 |
|
|
132
|
+
|------|------|
|
|
133
|
+
| `pipeline_init` | 새 파이프라인 초기화 |
|
|
134
|
+
| `pipeline_state` | 파이프라인 상태 조회 |
|
|
135
|
+
| `pipeline_advance` | 다음 단계로 전이 (전이 규칙 + fix loop 바운딩) |
|
|
136
|
+
| `pipeline_advance_gated` | HITL 승인 게이트 포함 전이 |
|
|
137
|
+
| `pipeline_list` | 활성 파이프라인 목록 조회 |
|
|
138
|
+
|
|
139
|
+
### HITL — Human-in-the-Loop
|
|
140
|
+
|
|
141
|
+
| 도구 | 설명 |
|
|
142
|
+
|------|------|
|
|
143
|
+
| `request_human_input` | 사용자 입력 요청 (CAPTCHA/승인/자격증명/선택/텍스트) |
|
|
144
|
+
| `submit_human_input` | 사용자 입력 응답 (accept/decline/cancel) |
|
|
145
|
+
|
|
146
|
+
## 브릿지 REST 엔드포인트 (4개)
|
|
147
|
+
|
|
148
|
+
| 엔드포인트 | 설명 |
|
|
149
|
+
|-----------|------|
|
|
150
|
+
| `POST /bridge/register` | 에이전트 등록 (프로세스 수명 기반 lease) |
|
|
151
|
+
| `POST /bridge/result` | 결과 발행 (topic fanout) |
|
|
152
|
+
| `POST /bridge/context` | 선행 컨텍스트 폴링 (auto_ack) |
|
|
153
|
+
| `POST /bridge/deregister` | 에이전트 offline 마킹 |
|
|
154
|
+
|
|
155
|
+
## 프로젝트 구조
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
hub/
|
|
159
|
+
├── server.mjs # MCP 서버 + REST 브릿지 엔드포인트
|
|
160
|
+
├── store.mjs # SQLite WAL 상태 저장소
|
|
161
|
+
├── router.mjs # Actor mailbox 라우터 + QoS
|
|
162
|
+
├── tools.mjs # MCP 도구 20개 정의
|
|
163
|
+
├── hitl.mjs # Human-in-the-Loop 매니저
|
|
164
|
+
├── bridge.mjs # tfx-route.sh ↔ hub 브릿지 CLI
|
|
165
|
+
├── schema.sql # DB 스키마
|
|
166
|
+
├── paths.mjs # 경로 상수 (PID 파일, DB 경로 등)
|
|
167
|
+
├── pipe.mjs # Named Pipe 서버 (push 구독 채널)
|
|
168
|
+
├── assign-callbacks.mjs # assign job 콜백 처리
|
|
169
|
+
├── intent.mjs # 인텐트 파싱
|
|
170
|
+
├── reflexion.mjs # reflexion 루프
|
|
171
|
+
├── research.mjs # 리서치 프록시
|
|
172
|
+
├── token-mode.mjs # 토큰 모드 관리
|
|
173
|
+
├── pipeline/ # 파이프라인 엔진
|
|
174
|
+
│ ├── index.mjs # createPipeline() 팩토리
|
|
175
|
+
│ ├── state.mjs # 파이프라인 상태 CRUD
|
|
176
|
+
│ ├── transitions.mjs # 전이 규칙
|
|
177
|
+
│ └── gates/ # HITL 게이트 (selfcheck, confidence)
|
|
178
|
+
├── delegator/ # 작업 위임 레이어
|
|
179
|
+
│ ├── index.mjs
|
|
180
|
+
│ ├── service.mjs
|
|
181
|
+
│ ├── contracts.mjs
|
|
182
|
+
│ └── tool-definitions.mjs
|
|
183
|
+
├── team/ # Claude Native Teams 통합
|
|
184
|
+
│ ├── nativeProxy.mjs # Teams MCP 프록시
|
|
185
|
+
│ ├── orchestrator.mjs # 팀 오케스트레이터
|
|
186
|
+
│ ├── session.mjs # 세션 관리
|
|
187
|
+
│ ├── dashboard.mjs # TUI 대시보드
|
|
188
|
+
│ ├── tui.mjs # TUI 렌더러
|
|
189
|
+
│ └── cli/ # tfx team CLI 커맨드
|
|
190
|
+
├── workers/ # CLI 워커 어댑터
|
|
191
|
+
│ ├── factory.mjs
|
|
192
|
+
│ ├── claude-worker.mjs
|
|
193
|
+
│ ├── codex-mcp.mjs
|
|
194
|
+
│ ├── gemini-worker.mjs
|
|
195
|
+
│ └── delegator-mcp.mjs
|
|
196
|
+
├── middleware/ # 요청 미들웨어
|
|
197
|
+
│ └── request-logger.mjs
|
|
198
|
+
├── quality/ # 품질 검사
|
|
199
|
+
│ └── deslop.mjs
|
|
200
|
+
└── public/ # 정적 자산 (대시보드 HTML, 트레이 아이콘)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## 상태
|
|
204
|
+
|
|
205
|
+
**dev 전용** — 로컬 테스트 목적. 프로덕션 배포 전 안정화 필요.
|
|
@@ -83,13 +83,13 @@ preflight와 Agent 생성을 병렬로 실행하여 사용자 체감 지연을
|
|
|
83
83
|
**실행 명령 (Lead가 호출하는 유일한 명령):**
|
|
84
84
|
|
|
85
85
|
```
|
|
86
|
-
Bash("tfx multi --teammate-mode headless --auto-attach --assign 'codex:{프롬프트1}:{역할1}' --assign 'gemini:{프롬프트2}:{역할2}' --timeout 600")
|
|
86
|
+
Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'codex:{프롬프트1}:{역할1}' --assign 'gemini:{프롬프트2}:{역할2}' --timeout 600")
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
**예시:**
|
|
90
90
|
|
|
91
91
|
```
|
|
92
|
-
Bash("tfx multi --teammate-mode headless --auto-attach --assign 'codex:코드 리뷰하고 개선 사항 제안:reviewer' --assign 'gemini:API 문서 작성:writer' --assign 'codex:보안 취약점 분석:security' --timeout 600")
|
|
92
|
+
Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'codex:코드 리뷰하고 개선 사항 제안:reviewer' --assign 'gemini:API 문서 작성:writer' --assign 'codex:보안 취약점 분석:security' --timeout 600")
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
**Claude 워커가 Read/Edit 필요한 경우 (하이브리드):**
|
|
@@ -98,7 +98,7 @@ Claude 워커는 headless에서 실행 불가 (Read/Edit 도구 필요). CLI 워
|
|
|
98
98
|
|
|
99
99
|
```
|
|
100
100
|
# 1. CLI 워커를 headless로 dispatch
|
|
101
|
-
Bash("tfx multi --teammate-mode headless --auto-attach --assign 'codex:{프롬프트}:{역할}' --assign 'gemini:{프롬프트}:{역할}' --timeout 600")
|
|
101
|
+
Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'codex:{프롬프트}:{역할}' --assign 'gemini:{프롬프트}:{역할}' --timeout 600")
|
|
102
102
|
|
|
103
103
|
# 2. Claude 워커를 Agent로 병렬 실행 (headless Bash와 동시에 spawn)
|
|
104
104
|
Agent(subagent_type="...", prompt="...", run_in_background=true)
|
|
@@ -107,9 +107,9 @@ Agent(subagent_type="...", prompt="...", run_in_background=true)
|
|
|
107
107
|
**결정 로직:**
|
|
108
108
|
```
|
|
109
109
|
if 모든 워커가 CLI (codex/gemini):
|
|
110
|
-
→ Bash("tfx multi --teammate-mode headless --auto-attach --assign ...")
|
|
110
|
+
→ Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign ...")
|
|
111
111
|
elif CLI + Claude 혼합:
|
|
112
|
-
→ CLI 워커: Bash("tfx multi --teammate-mode headless --assign ...")
|
|
112
|
+
→ CLI 워커: Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign ...")
|
|
113
113
|
→ Claude 워커: Agent(subagent_type, run_in_background=true)
|
|
114
114
|
elif psmux 미설치:
|
|
115
115
|
→ Phase 3-fallback (아래)
|
|
@@ -118,7 +118,9 @@ elif psmux 미설치:
|
|
|
118
118
|
**headless 엔진이 자동으로 수행하는 것:**
|
|
119
119
|
- psmux 세션 생성 + progressive split-window
|
|
120
120
|
- Windows Terminal 자동 팝업 (autoAttach)
|
|
121
|
+
- `--dashboard` TUI 대시보드 자동 표시 (headless-guard가 기본 주입)
|
|
121
122
|
- triflux 테마 적용 (Catppuccin Mocha status bar)
|
|
123
|
+
- 워커 요약 dashboard 스플릿
|
|
122
124
|
- CLI 명령 dispatch + 완료 토큰 폴링
|
|
123
125
|
- 결과 수집 + JSON stdout 출력
|
|
124
126
|
- 세션 정리
|
|
@@ -137,6 +139,10 @@ headless stdout 출력에서 성공/실패 워커를 파싱.
|
|
|
137
139
|
psmux가 없는 환경에서만 사용. Agent slim wrapper로 CLI를 실행.
|
|
138
140
|
`hub/team/native.mjs`의 `buildSlimWrapperPrompt()` 기반.
|
|
139
141
|
|
|
142
|
+
**팀 이름 생성 (`generateTeamName`):**
|
|
143
|
+
`tfx-${Date.now().toString(36).slice(-4)}${Math.random().toString(36).slice(2, 6)}`
|
|
144
|
+
타임스탬프 base36 끝 4자 + 난수 4자 조합. 예: `tfx-p1q2r3s4`.
|
|
145
|
+
|
|
140
146
|
> 래퍼 규칙 상세 → [`references/agent-wrapper-rules.md`](references/agent-wrapper-rules.md)
|
|
141
147
|
|
|
142
148
|
## 전제 조건
|