triflux 8.11.2 → 8.12.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/plugin.json +1 -1
- package/README.ko.md +1 -1
- package/README.md +1 -1
- package/hooks/hooks.json +56 -51
- package/hub/pipeline/index.mjs +318 -318
- package/hub/routing/q-learning.mjs +2 -1
- package/hub/schema.sql +146 -146
- package/hub/team/cli/commands/kill.mjs +37 -37
- package/hub/team/cli/commands/start/index.mjs +3 -2
- package/hub/team/cli/commands/start/parse-args.mjs +5 -0
- package/hub/team/cli/commands/start/start-headless.mjs +2 -1
- package/hub/team/cli/commands/stop.mjs +31 -31
- package/hub/team/cli/commands/task.mjs +30 -30
- package/hub/team/cli/help.mjs +41 -40
- package/hub/team/cli/services/hub-client.mjs +208 -208
- package/hub/team/cli/services/native-control.mjs +118 -118
- package/hub/team/cli/services/runtime-mode.mjs +62 -62
- package/hub/team/cli/services/state-store.mjs +48 -48
- package/hub/team/dashboard-anchor.mjs +14 -0
- package/hub/team/dashboard.mjs +274 -274
- package/hub/team/headless.mjs +44 -19
- package/hub/team/native.mjs +649 -649
- package/hub/tools.mjs +554 -554
- package/hub/workers/delegator-mcp.mjs +21 -1
- package/package.json +1 -1
- package/scripts/__tests__/remote-spawn-transfer.test.mjs +117 -0
- package/scripts/__tests__/remote-spawn.test.mjs +78 -0
- package/scripts/cache-buildup.mjs +401 -0
- package/scripts/headless-guard.mjs +10 -3
- package/scripts/hub-ensure.mjs +120 -120
- package/scripts/lib/mcp-filter.mjs +720 -720
- package/scripts/lib/remote-spawn-transfer.mjs +196 -0
- package/scripts/mcp-check.mjs +237 -127
- package/scripts/mcp-gateway-ensure.mjs +6 -8
- package/scripts/mcp-gateway-integration-test.mjs +228 -0
- package/scripts/mcp-gateway-start.mjs +42 -16
- package/scripts/mcp-gateway-start.ps1 +17 -14
- package/scripts/mcp-gateway-verify.mjs +1 -1
- package/scripts/preflight-cache.mjs +137 -137
- package/scripts/remote-spawn.mjs +404 -40
- package/scripts/setup.mjs +18 -0
- package/scripts/tfx-route-worker.mjs +165 -165
- package/scripts/tfx-route.sh +85 -16
- package/scripts/token-snapshot.mjs +575 -575
- package/skills/tfx-analysis/SKILL.md +101 -101
- package/skills/tfx-autopilot/SKILL.md +112 -112
- package/skills/tfx-autoresearch/SKILL.md +1 -0
- package/skills/tfx-autoroute/SKILL.md +184 -184
- package/skills/tfx-codex-swarm/SKILL.md +449 -0
- package/skills/tfx-codex-swarm/evals/evals.json +26 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/benchmark.json +33 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/eval_metadata.json +42 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/grading.json +11 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/analysis.md +87 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/classification.md +35 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/commands.sh +275 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/routing.md +56 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/grading.json +11 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/analysis.md +92 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/classification.md +71 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/commands.sh +264 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/routing.md +113 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/eval_metadata.json +32 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/grading.json +9 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/analysis.md +96 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/classification.md +38 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/commands.sh +151 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/routing.md +51 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/grading.json +9 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/analysis.md +127 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/classification.md +57 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/commands.sh +129 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/routing.md +84 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/eval_metadata.json +27 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/grading.json +8 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/analysis.md +98 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/classification.md +65 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/commands.sh +123 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/routing.md +66 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/timing.json +5 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/grading.json +8 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/analysis.md +88 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/classification.md +40 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/commands.sh +130 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/routing.md +61 -0
- package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/timing.json +5 -0
- package/skills/tfx-profile/SKILL.md +141 -51
- package/skills/tfx-qa/SKILL.md +117 -117
- package/skills/tfx-remote-spawn/references/hosts.json +16 -16
- package/skills/tfx-review/SKILL.md +51 -51
- package/skills/tfx-setup/SKILL.md +20 -0
- package/tui/gemini-profile.mjs +254 -0
- package/tui/setup.mjs +36 -1
- package/scripts/claude-logged.ps1 +0 -54
- package/scripts/demo-tui.mjs +0 -59
- package/skills/.omc/state/agent-replay-8f0e10a9-9693-4410-96f5-a6b07e8ed995.jsonl +0 -1
- package/skills/.omc/state/idle-notif-cooldown.json +0 -3
- package/skills/.omc/state/last-tool-error.json +0 -7
- package/skills/.omc/state/subagent-tracking.json +0 -7
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Codex Swarm - Profile Routing (Selective: Issue 24, 28 with xhigh override)
|
|
2
|
+
|
|
3
|
+
> Generated: 2026-03-30
|
|
4
|
+
> Mode: without_skill (no SKILL.md guidance)
|
|
5
|
+
|
|
6
|
+
## Size Assessment
|
|
7
|
+
|
|
8
|
+
| # | PRD File | Lines | Affected Files | High-cost Keywords | Dependencies | Size |
|
|
9
|
+
|---|----------|-------|----------------|-------------------|--------------|------|
|
|
10
|
+
| 24 | prd-issue-24 | 73 | 4 (`remote-spawn.mjs`, handoff, scp, staging) | 0 | none | **L** |
|
|
11
|
+
| 28 | prd-issue-28 | 69 | 4 (`headless-guard.mjs`, `hub/team/psmux.mjs`, codex, gemini) | 0 | none | **L** |
|
|
12
|
+
|
|
13
|
+
Both PRDs fall in the **L (standard)** range.
|
|
14
|
+
|
|
15
|
+
## Default Routing (what auto-routing would produce)
|
|
16
|
+
|
|
17
|
+
Under normal routing for L-size implement tasks:
|
|
18
|
+
|
|
19
|
+
| # | Task | Size | Type | Auto Profile | Auto Flags |
|
|
20
|
+
|---|------|------|------|-------------|------------|
|
|
21
|
+
| 24 | file-transfer | L | implement | `codex53_high` | `-c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="high"'` |
|
|
22
|
+
| 28 | guard-deadlock | L | implement | `codex53_high` | `-c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="high"'` |
|
|
23
|
+
|
|
24
|
+
## Applied Routing (after user xhigh override)
|
|
25
|
+
|
|
26
|
+
User directive: "둘 다 xhigh로 세팅하고" overrides the auto-routed `codex53_high` to `codex53_xhigh`.
|
|
27
|
+
|
|
28
|
+
| # | Task | Size | Type | Profile | Codex Flags |
|
|
29
|
+
|---|------|------|------|---------|-------------|
|
|
30
|
+
| 24 | file-transfer | L | implement | **`codex53_xhigh`** | `-c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="xhigh"'` |
|
|
31
|
+
| 28 | guard-deadlock | L | implement | **`codex53_xhigh`** | `-c 'model="gpt-5.3-codex"' -c 'model_reasoning_effort="xhigh"'` |
|
|
32
|
+
|
|
33
|
+
### Profile Resolution
|
|
34
|
+
|
|
35
|
+
`codex53_xhigh` maps to the existing Codex config profile `[profiles.codex53_xhigh]`:
|
|
36
|
+
```toml
|
|
37
|
+
[profiles.codex53_xhigh]
|
|
38
|
+
model = "gpt-5.3-codex"
|
|
39
|
+
model_reasoning_effort = "xhigh"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
This profile exists in `~/.codex/config.toml`, so either `-c` inline flags or `--profile codex53_xhigh` can be used.
|
|
43
|
+
|
|
44
|
+
## Execution Defaults
|
|
45
|
+
|
|
46
|
+
| Setting | Value | Note |
|
|
47
|
+
|---------|-------|------|
|
|
48
|
+
| Mode | `--full-auto` | Sandbox auto-approve (YOLO) |
|
|
49
|
+
| Worktree | enabled | Per-session independent worktree |
|
|
50
|
+
| psmux | enabled | Session management via send-keys |
|
|
51
|
+
| WT | 2 tabs in single window | Only 2 sessions (not 7) |
|
|
52
|
+
| OMX skill | `$ralph` | Persist loop until task fully complete |
|
|
53
|
+
|
|
54
|
+
## Cost / Duration Estimate
|
|
55
|
+
|
|
56
|
+
| Factor | Value |
|
|
57
|
+
|--------|-------|
|
|
58
|
+
| Model | gpt-5.3-codex (SWE-Bench 72%, Terminal-Bench 77%) |
|
|
59
|
+
| Effort | xhigh (maximum reasoning, slowest) |
|
|
60
|
+
| Sessions | 2 concurrent |
|
|
61
|
+
| Expected duration | 15-45 min per session (xhigh adds ~2-3x vs high) |
|
|
@@ -1,22 +1,43 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tfx-profile
|
|
3
3
|
description: >
|
|
4
|
-
Codex CLI
|
|
4
|
+
Codex/Gemini CLI 프로파일·모델 관리 인터랙티브 UI. tfx-route가 사용하는
|
|
5
5
|
프로파일 목록 조회, 모델 변경, effort 조정, 추가/삭제를 AskUserQuestion 기반
|
|
6
6
|
인터랙티브 선택지로 수행합니다.
|
|
7
|
-
Use when: codex profile, codex model,
|
|
8
|
-
|
|
7
|
+
Use when: codex profile, codex model, gemini profile, gemini model,
|
|
8
|
+
프로파일 변경, 모델 변경, effort 변경, codex 설정, gemini 설정,
|
|
9
|
+
profile manager, 프로파일 관리, 어떤 모델, tfx profile
|
|
9
10
|
triggers:
|
|
10
11
|
- tfx-profile
|
|
11
|
-
argument-hint: "[--list]"
|
|
12
|
+
argument-hint: "[--list] [--codex | --gemini]"
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
#
|
|
15
|
+
# tfx-profile — Codex/Gemini 프로파일 매니저
|
|
15
16
|
|
|
16
|
-
>
|
|
17
|
+
> CLI 프로파일의 모델/effort를 AskUserQuestion 선택지로 관리합니다.
|
|
18
|
+
> Codex(`~/.codex/config.toml`)와 Gemini(`~/.gemini/triflux-profiles.json`) 모두 지원.
|
|
17
19
|
|
|
18
20
|
## 워크플로우
|
|
19
21
|
|
|
22
|
+
### Step 0: CLI 선택
|
|
23
|
+
|
|
24
|
+
인자에 `--codex` 또는 `--gemini`가 있으면 해당 CLI로 직행.
|
|
25
|
+
없으면 AskUserQuestion으로 선택:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
question: "어느 CLI의 프로파일을 관리하시겠습니까?"
|
|
29
|
+
header: "CLI"
|
|
30
|
+
options:
|
|
31
|
+
- label: "Codex"
|
|
32
|
+
description: "~/.codex/config.toml (TOML)"
|
|
33
|
+
- label: "Gemini"
|
|
34
|
+
description: "~/.gemini/triflux-profiles.json (JSON)"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Codex 워크플로우
|
|
40
|
+
|
|
20
41
|
### Step 1: config.toml 읽기 + 현재 상태 표시
|
|
21
42
|
|
|
22
43
|
`~/.codex/config.toml`을 Read 도구로 읽고 프로파일 테이블을 마크다운으로 출력한다:
|
|
@@ -32,8 +53,6 @@ argument-hint: "[--list]"
|
|
|
32
53
|
|
|
33
54
|
### Step 2: 작업 선택 (AskUserQuestion)
|
|
34
55
|
|
|
35
|
-
AskUserQuestion으로 메인 메뉴를 제시한다:
|
|
36
|
-
|
|
37
56
|
```
|
|
38
57
|
question: "어떤 작업을 하시겠습니까?"
|
|
39
58
|
header: "작업"
|
|
@@ -52,68 +71,115 @@ options:
|
|
|
52
71
|
|
|
53
72
|
#### 프로파일 모델 변경
|
|
54
73
|
|
|
55
|
-
1. AskUserQuestion으로 프로파일 선택
|
|
74
|
+
1. AskUserQuestion으로 프로파일 선택
|
|
56
75
|
2. AskUserQuestion으로 모델 선택:
|
|
57
76
|
```
|
|
58
|
-
question: "모델을 선택하세요"
|
|
59
|
-
header: "Model"
|
|
60
77
|
options:
|
|
61
|
-
- label: "gpt-5.4"
|
|
62
|
-
|
|
63
|
-
- label: "gpt-5.
|
|
64
|
-
|
|
65
|
-
- label: "
|
|
66
|
-
description: "경량 Spark"
|
|
67
|
-
- label: "o3"
|
|
68
|
-
description: "추론 특화"
|
|
78
|
+
- label: "gpt-5.4" → 최신 플래그십
|
|
79
|
+
- label: "gpt-5.3-codex" → 코딩 특화 (Recommended)
|
|
80
|
+
- label: "gpt-5.1-codex-mini" → 경량 Spark
|
|
81
|
+
- label: "o3" → 추론 특화
|
|
82
|
+
- label: "o4-mini" → 추론 경량
|
|
69
83
|
```
|
|
70
|
-
3. AskUserQuestion으로 effort 선택:
|
|
84
|
+
3. AskUserQuestion으로 effort 선택: `low | medium | high | xhigh`
|
|
85
|
+
4. Edit 도구로 config.toml 수정
|
|
86
|
+
|
|
87
|
+
#### 기본 모델 변경
|
|
88
|
+
|
|
89
|
+
위와 동일한 모델/effort 선택 후 top-level `model`, `model_reasoning_effort` 수정.
|
|
90
|
+
|
|
91
|
+
#### 프로파일 추가/삭제
|
|
92
|
+
|
|
93
|
+
추가: 이름 → 모델 → effort → `[profiles.name]` 섹션 추가
|
|
94
|
+
삭제: 선택 → 확인 → 섹션 제거
|
|
95
|
+
|
|
96
|
+
### Step 4: 결과 확인
|
|
97
|
+
|
|
98
|
+
변경된 config.toml을 다시 읽어 업데이트된 테이블 표시.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Gemini 워크플로우
|
|
103
|
+
|
|
104
|
+
### Step 1: triflux-profiles.json 읽기 + 현재 상태 표시
|
|
105
|
+
|
|
106
|
+
`~/.gemini/triflux-profiles.json`을 Read 도구로 읽고 프로필 테이블을 마크다운으로 출력한다:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
| 프로필 | 모델 | 설명 |
|
|
110
|
+
|--------|------|------|
|
|
111
|
+
| pro31 | gemini-3.1-pro-preview | 3.1 Pro — 플래그십 |
|
|
112
|
+
| flash3 | gemini-3-flash-preview | 3.0 Flash — 빠른 응답 |
|
|
113
|
+
| ... | ... | ... |
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
기본 모델(top-level `model`)도 함께 표시.
|
|
117
|
+
|
|
118
|
+
### Step 2: 작업 선택 (AskUserQuestion)
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
question: "어떤 작업을 하시겠습니까?"
|
|
122
|
+
header: "작업"
|
|
123
|
+
options:
|
|
124
|
+
- label: "프로필 모델 변경"
|
|
125
|
+
description: "기존 프로필의 모델을 수정"
|
|
126
|
+
- label: "기본 모델 변경"
|
|
127
|
+
description: "top-level default 모델 수정"
|
|
128
|
+
- label: "프로필 추가"
|
|
129
|
+
description: "새 프로필 생성"
|
|
130
|
+
- label: "프로필 삭제"
|
|
131
|
+
description: "기존 프로필 제거"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Step 3: 선택에 따른 세부 플로우
|
|
135
|
+
|
|
136
|
+
#### 프로필 모델 변경
|
|
137
|
+
|
|
138
|
+
1. AskUserQuestion으로 프로필 선택
|
|
139
|
+
2. AskUserQuestion으로 모델 선택:
|
|
71
140
|
```
|
|
72
|
-
question: "Reasoning Effort 레벨을 선택하세요"
|
|
73
|
-
header: "Effort"
|
|
74
141
|
options:
|
|
75
|
-
- label: "
|
|
76
|
-
|
|
77
|
-
- label: "
|
|
78
|
-
|
|
79
|
-
- label: "
|
|
80
|
-
description: "깊은 추론"
|
|
81
|
-
- label: "xhigh"
|
|
82
|
-
description: "최대 추론 (느림)"
|
|
142
|
+
- label: "gemini-3.1-pro-preview" → 3.1 Pro — 플래그십
|
|
143
|
+
- label: "gemini-3-flash-preview" → 3.0 Flash — 빠른 응답
|
|
144
|
+
- label: "gemini-2.5-pro" → 2.5 Pro — 안정
|
|
145
|
+
- label: "gemini-2.5-flash" → 2.5 Flash — 경량
|
|
146
|
+
- label: "gemini-2.5-flash-lite" → 2.5 Flash Lite — 최경량
|
|
83
147
|
```
|
|
84
|
-
|
|
148
|
+
3. Edit 도구로 triflux-profiles.json 수정
|
|
85
149
|
|
|
86
150
|
#### 기본 모델 변경
|
|
87
151
|
|
|
88
|
-
|
|
152
|
+
모델 선택 후 top-level `model` 수정.
|
|
89
153
|
|
|
90
|
-
####
|
|
154
|
+
#### 프로필 추가/삭제
|
|
91
155
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
3. config.toml 끝에 새 `[profiles.name]` 섹션 추가
|
|
156
|
+
추가: 이름 → 모델 → 설명 → profiles에 추가
|
|
157
|
+
삭제: 선택 → 확인 → profiles에서 제거
|
|
95
158
|
|
|
96
|
-
|
|
159
|
+
### Step 4: 결과 확인
|
|
97
160
|
|
|
98
|
-
|
|
99
|
-
2. AskUserQuestion 확인: "정말 삭제하시겠습니까?"
|
|
100
|
-
3. 해당 섹션 제거
|
|
161
|
+
변경된 JSON을 다시 읽어 업데이트된 테이블 표시.
|
|
101
162
|
|
|
102
|
-
|
|
163
|
+
---
|
|
103
164
|
|
|
104
|
-
|
|
105
|
-
"계속하시겠습니까?" AskUserQuestion → 반복 또는 종료.
|
|
165
|
+
## 수정 규칙
|
|
106
166
|
|
|
107
|
-
|
|
167
|
+
### Codex (config.toml)
|
|
108
168
|
|
|
109
|
-
- **백업 필수**: 수정 전 원본
|
|
169
|
+
- **백업 필수**: 수정 전 원본 기억
|
|
110
170
|
- **프로파일 섹션 형식**: `[profiles.name]\nmodel = "..."\nmodel_reasoning_effort = "..."`
|
|
111
|
-
- **다른 섹션 건드리지 않기**: `[notice]`, `[features]`, `[mcp_servers.*]
|
|
171
|
+
- **다른 섹션 건드리지 않기**: `[notice]`, `[features]`, `[mcp_servers.*]` 등 절대 수정 금지
|
|
112
172
|
- **Edit 도구 사용**: old_string → new_string으로 정확한 섹션만 치환
|
|
113
173
|
|
|
174
|
+
### Gemini (triflux-profiles.json)
|
|
175
|
+
|
|
176
|
+
- **백업 필수**: `.bak` 자동 생성
|
|
177
|
+
- **JSON 형식 유지**: `profiles.{name}.model`, `profiles.{name}.hint`
|
|
178
|
+
- **Edit 도구 사용**: old_string → new_string으로 해당 프로필만 치환
|
|
179
|
+
|
|
114
180
|
## 참조
|
|
115
181
|
|
|
116
|
-
###
|
|
182
|
+
### Codex 모델
|
|
117
183
|
|
|
118
184
|
| 모델 | 용도 |
|
|
119
185
|
|------|------|
|
|
@@ -123,7 +189,7 @@ options:
|
|
|
123
189
|
| o3 | 추론 특화 |
|
|
124
190
|
| o4-mini | 추론 경량 |
|
|
125
191
|
|
|
126
|
-
### Effort 레벨
|
|
192
|
+
### Codex Effort 레벨
|
|
127
193
|
|
|
128
194
|
| 레벨 | 설명 |
|
|
129
195
|
|------|------|
|
|
@@ -132,18 +198,42 @@ options:
|
|
|
132
198
|
| high | 깊은 추론 |
|
|
133
199
|
| xhigh | 최대 추론 (느림) |
|
|
134
200
|
|
|
135
|
-
###
|
|
201
|
+
### Gemini 모델
|
|
202
|
+
|
|
203
|
+
| 모델 | 용도 |
|
|
204
|
+
|------|------|
|
|
205
|
+
| gemini-3.1-pro-preview | 3.1 Pro — 플래그십 (1M ctx) |
|
|
206
|
+
| gemini-3-flash-preview | 3.0 Flash — 빠른 응답, 비용 효율 |
|
|
207
|
+
| gemini-2.5-pro | 2.5 Pro — 안정 (추론 강화) |
|
|
208
|
+
| gemini-2.5-flash | 2.5 Flash — 경량 범용 |
|
|
209
|
+
| gemini-2.5-flash-lite | 2.5 Flash Lite — 최경량 |
|
|
210
|
+
|
|
211
|
+
### Gemini → 에이전트 배치 (벤치마크 기반)
|
|
212
|
+
|
|
213
|
+
| 프로필 | 모델 | 에이전트 |
|
|
214
|
+
|--------|------|----------|
|
|
215
|
+
| pro31 | gemini-3.1-pro-preview | executor, debugger, deep-executor, architect, planner, critic, analyst, code-reviewer, security-reviewer, quality-reviewer, scientist-deep, designer |
|
|
216
|
+
| flash3 | gemini-3-flash-preview | writer, build-fixer, spark, 기본 폴백 |
|
|
217
|
+
| pro25 | gemini-2.5-pro | (예비 — 3.1 불안정 시 폴백) |
|
|
218
|
+
| flash25 | gemini-2.5-flash | (예비 — 대량 배치) |
|
|
219
|
+
| lite25 | gemini-2.5-flash-lite | (예비 — 최경량) |
|
|
220
|
+
|
|
221
|
+
### 설정 파일 경로
|
|
136
222
|
|
|
137
|
-
`~/.codex/config.toml`
|
|
223
|
+
- Codex: `~/.codex/config.toml`
|
|
224
|
+
- Gemini: `~/.gemini/triflux-profiles.json`
|
|
138
225
|
|
|
139
226
|
## 에러 처리
|
|
140
227
|
|
|
141
228
|
| 상황 | 처리 |
|
|
142
229
|
|------|------|
|
|
143
230
|
| config.toml 미존재 | `/tfx-setup` 안내 |
|
|
231
|
+
| triflux-profiles.json 미존재 | 기본값으로 자동 생성 |
|
|
144
232
|
| 파싱 실패 | 백업 후 수동 수정 안내 |
|
|
145
233
|
| 중복 프로파일명 | 이미 존재함 알림, 기존 편집으로 전환 |
|
|
146
234
|
|
|
147
235
|
## standalone TUI
|
|
148
236
|
|
|
149
|
-
터미널에서 직접
|
|
237
|
+
터미널에서 직접 실행:
|
|
238
|
+
- Codex: `node tui/codex-profile.mjs`
|
|
239
|
+
- Gemini: `node tui/gemini-profile.mjs`
|
package/skills/tfx-qa/SKILL.md
CHANGED
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tfx-qa
|
|
3
|
-
description: "테스트 실행하고 실패하면 수정해서 통과시켜야 할 때 사용한다. 'qa', '검증해', '테스트 돌려', 'test-fix', '테스트 통과시켜' 같은 요청에 반드시 사용. 테스트 실패를 반복 수정하여 전부 통과시켜야 할 때 적극 활용."
|
|
4
|
-
triggers:
|
|
5
|
-
- qa
|
|
6
|
-
- 검증
|
|
7
|
-
- 테스트 검증
|
|
8
|
-
- test-fix
|
|
9
|
-
argument-hint: "[테스트 명령 또는 파일 경로]"
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# tfx-qa — Light Test-Fix Cycle
|
|
13
|
-
|
|
14
|
-
> 테스트 실행 → 실패 분석 → 자동 수정 → 재실행. 최대 3회. OMC ultraqa 영감.
|
|
15
|
-
|
|
16
|
-
## 용도
|
|
17
|
-
|
|
18
|
-
- 테스트 실행 후 실패 자동 수정
|
|
19
|
-
- CI 실패 빠른 해결
|
|
20
|
-
- 리팩터링 후 회귀 검증 + 수정
|
|
21
|
-
- "테스트 돌려서 깨진 거 고쳐" 류의 요청
|
|
22
|
-
|
|
23
|
-
## 워크플로우
|
|
24
|
-
|
|
25
|
-
### Step 1: 테스트 대상 식별
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
우선순위:
|
|
29
|
-
1. 사용자가 테스트 명령 지정 → 그대로 실행
|
|
30
|
-
2. 사용자가 파일 지정 → 해당 파일의 테스트 탐색
|
|
31
|
-
3. 지정 없음 → 프로젝트 테스트 전체 (npm test / pytest 등 자동 감지)
|
|
32
|
-
|
|
33
|
-
자동 감지:
|
|
34
|
-
package.json의 "test" 스크립트 → npm test
|
|
35
|
-
pytest.ini / pyproject.toml → pytest
|
|
36
|
-
Makefile의 test 타깃 → make test
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Step 2: 테스트 실행 (Round 1)
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
bash ~/.claude/scripts/tfx-route.sh codex \
|
|
43
|
-
"다음 테스트를 실행하고 결과를 보고하라:
|
|
44
|
-
명령: {test_command}
|
|
45
|
-
|
|
46
|
-
출력 형식:
|
|
47
|
-
- 총 테스트 수
|
|
48
|
-
- 통과/실패/스킵 수
|
|
49
|
-
- 실패한 테스트 목록 (파일:테스트명:에러 메시지)
|
|
50
|
-
- 실패 원인 분석 (각 실패별)" implement
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
### Step 3: 실패 수정 + 재실행 루프
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
MAX_RETRIES = 3
|
|
57
|
-
retry = 0
|
|
58
|
-
|
|
59
|
-
WHILE (failures > 0 AND retry < MAX_RETRIES):
|
|
60
|
-
retry++
|
|
61
|
-
|
|
62
|
-
Codex로 실패 수정:
|
|
63
|
-
bash ~/.claude/scripts/tfx-route.sh codex \
|
|
64
|
-
"다음 테스트 실패를 수정하라:
|
|
65
|
-
실패 목록: {failures}
|
|
66
|
-
|
|
67
|
-
규칙:
|
|
68
|
-
- 테스트 코드가 아닌 구현 코드를 수정하라 (테스트가 정확한 경우)
|
|
69
|
-
- 테스트 자체가 잘못된 경우만 테스트를 수정하라
|
|
70
|
-
- 수정 후 해당 테스트를 다시 실행하여 확인하라" implement
|
|
71
|
-
|
|
72
|
-
재실행하여 결과 확인
|
|
73
|
-
|
|
74
|
-
END WHILE
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
### Step 4: 결과 보고
|
|
78
|
-
|
|
79
|
-
```markdown
|
|
80
|
-
## QA 결과: {test_target}
|
|
81
|
-
|
|
82
|
-
### 실행 요약
|
|
83
|
-
| 라운드 | 통과 | 실패 | 수정 |
|
|
84
|
-
|--------|------|------|------|
|
|
85
|
-
| Round 1 | {n} | {n} | — |
|
|
86
|
-
| Round 2 | {n} | {n} | {수정 내용} |
|
|
87
|
-
| Round 3 | {n} | {n} | {수정 내용} |
|
|
88
|
-
|
|
89
|
-
### 최종 결과
|
|
90
|
-
- 테스트: {pass}/{total} 통과
|
|
91
|
-
- 수정된 파일: {list}
|
|
92
|
-
- 미해결 실패: {list, 있으면}
|
|
93
|
-
|
|
94
|
-
### 수정 상세
|
|
95
|
-
- `{file}:{line}` — {무엇을 왜 수정했는지}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
3회 후에도 실패가 남으면 미해결 목록 + 원인 분석을 사용자에게 보고.
|
|
99
|
-
|
|
100
|
-
## 토큰 예산
|
|
101
|
-
|
|
102
|
-
| 단계 | 토큰 |
|
|
103
|
-
|------|------|
|
|
104
|
-
| Step 1 (식별) | ~300 |
|
|
105
|
-
| Step 2 (실행) | ~1.5K |
|
|
106
|
-
| Step 3 (수정, 회당) | ~1.5K |
|
|
107
|
-
| Step 4 (보고) | ~500 |
|
|
108
|
-
| **총합 (최대 3회)** | **~5K** |
|
|
109
|
-
|
|
110
|
-
## 사용 예
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
/tfx-qa
|
|
114
|
-
/tfx-qa "npm test -- --grep auth"
|
|
115
|
-
/tfx-qa "pytest tests/test_api.py -v"
|
|
116
|
-
/tfx-qa "깨진 테스트 고쳐줘"
|
|
117
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: tfx-qa
|
|
3
|
+
description: "테스트 실행하고 실패하면 수정해서 통과시켜야 할 때 사용한다. 'qa', '검증해', '테스트 돌려', 'test-fix', '테스트 통과시켜' 같은 요청에 반드시 사용. 테스트 실패를 반복 수정하여 전부 통과시켜야 할 때 적극 활용."
|
|
4
|
+
triggers:
|
|
5
|
+
- qa
|
|
6
|
+
- 검증
|
|
7
|
+
- 테스트 검증
|
|
8
|
+
- test-fix
|
|
9
|
+
argument-hint: "[테스트 명령 또는 파일 경로]"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# tfx-qa — Light Test-Fix Cycle
|
|
13
|
+
|
|
14
|
+
> 테스트 실행 → 실패 분석 → 자동 수정 → 재실행. 최대 3회. OMC ultraqa 영감.
|
|
15
|
+
|
|
16
|
+
## 용도
|
|
17
|
+
|
|
18
|
+
- 테스트 실행 후 실패 자동 수정
|
|
19
|
+
- CI 실패 빠른 해결
|
|
20
|
+
- 리팩터링 후 회귀 검증 + 수정
|
|
21
|
+
- "테스트 돌려서 깨진 거 고쳐" 류의 요청
|
|
22
|
+
|
|
23
|
+
## 워크플로우
|
|
24
|
+
|
|
25
|
+
### Step 1: 테스트 대상 식별
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
우선순위:
|
|
29
|
+
1. 사용자가 테스트 명령 지정 → 그대로 실행
|
|
30
|
+
2. 사용자가 파일 지정 → 해당 파일의 테스트 탐색
|
|
31
|
+
3. 지정 없음 → 프로젝트 테스트 전체 (npm test / pytest 등 자동 감지)
|
|
32
|
+
|
|
33
|
+
자동 감지:
|
|
34
|
+
package.json의 "test" 스크립트 → npm test
|
|
35
|
+
pytest.ini / pyproject.toml → pytest
|
|
36
|
+
Makefile의 test 타깃 → make test
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Step 2: 테스트 실행 (Round 1)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
bash ~/.claude/scripts/tfx-route.sh codex \
|
|
43
|
+
"다음 테스트를 실행하고 결과를 보고하라:
|
|
44
|
+
명령: {test_command}
|
|
45
|
+
|
|
46
|
+
출력 형식:
|
|
47
|
+
- 총 테스트 수
|
|
48
|
+
- 통과/실패/스킵 수
|
|
49
|
+
- 실패한 테스트 목록 (파일:테스트명:에러 메시지)
|
|
50
|
+
- 실패 원인 분석 (각 실패별)" implement
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Step 3: 실패 수정 + 재실행 루프
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
MAX_RETRIES = 3
|
|
57
|
+
retry = 0
|
|
58
|
+
|
|
59
|
+
WHILE (failures > 0 AND retry < MAX_RETRIES):
|
|
60
|
+
retry++
|
|
61
|
+
|
|
62
|
+
Codex로 실패 수정:
|
|
63
|
+
bash ~/.claude/scripts/tfx-route.sh codex \
|
|
64
|
+
"다음 테스트 실패를 수정하라:
|
|
65
|
+
실패 목록: {failures}
|
|
66
|
+
|
|
67
|
+
규칙:
|
|
68
|
+
- 테스트 코드가 아닌 구현 코드를 수정하라 (테스트가 정확한 경우)
|
|
69
|
+
- 테스트 자체가 잘못된 경우만 테스트를 수정하라
|
|
70
|
+
- 수정 후 해당 테스트를 다시 실행하여 확인하라" implement
|
|
71
|
+
|
|
72
|
+
재실행하여 결과 확인
|
|
73
|
+
|
|
74
|
+
END WHILE
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Step 4: 결과 보고
|
|
78
|
+
|
|
79
|
+
```markdown
|
|
80
|
+
## QA 결과: {test_target}
|
|
81
|
+
|
|
82
|
+
### 실행 요약
|
|
83
|
+
| 라운드 | 통과 | 실패 | 수정 |
|
|
84
|
+
|--------|------|------|------|
|
|
85
|
+
| Round 1 | {n} | {n} | — |
|
|
86
|
+
| Round 2 | {n} | {n} | {수정 내용} |
|
|
87
|
+
| Round 3 | {n} | {n} | {수정 내용} |
|
|
88
|
+
|
|
89
|
+
### 최종 결과
|
|
90
|
+
- 테스트: {pass}/{total} 통과
|
|
91
|
+
- 수정된 파일: {list}
|
|
92
|
+
- 미해결 실패: {list, 있으면}
|
|
93
|
+
|
|
94
|
+
### 수정 상세
|
|
95
|
+
- `{file}:{line}` — {무엇을 왜 수정했는지}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
3회 후에도 실패가 남으면 미해결 목록 + 원인 분석을 사용자에게 보고.
|
|
99
|
+
|
|
100
|
+
## 토큰 예산
|
|
101
|
+
|
|
102
|
+
| 단계 | 토큰 |
|
|
103
|
+
|------|------|
|
|
104
|
+
| Step 1 (식별) | ~300 |
|
|
105
|
+
| Step 2 (실행) | ~1.5K |
|
|
106
|
+
| Step 3 (수정, 회당) | ~1.5K |
|
|
107
|
+
| Step 4 (보고) | ~500 |
|
|
108
|
+
| **총합 (최대 3회)** | **~5K** |
|
|
109
|
+
|
|
110
|
+
## 사용 예
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
/tfx-qa
|
|
114
|
+
/tfx-qa "npm test -- --grep auth"
|
|
115
|
+
/tfx-qa "pytest tests/test_api.py -v"
|
|
116
|
+
/tfx-qa "깨진 테스트 고쳐줘"
|
|
117
|
+
```
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
{
|
|
2
|
-
"hosts": {
|
|
3
|
-
"ultra4": {
|
|
4
|
-
"description": "Windows 데스크탑 (SSAFY)",
|
|
5
|
-
"aliases": ["울트라", "데스크탑"],
|
|
6
|
-
"default_dir": "~/Desktop/Projects"
|
|
7
|
-
},
|
|
8
|
-
"m2": {
|
|
9
|
-
"description": "MacBook Pro",
|
|
10
|
-
"aliases": ["맥북", "맥"],
|
|
11
|
-
"default_dir": "~/projects"
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
"default_host": "ultra4",
|
|
15
|
-
"triggers": ["원격에서", "다른 머신에서", "다른 컴퓨터에서"]
|
|
16
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"hosts": {
|
|
3
|
+
"ultra4": {
|
|
4
|
+
"description": "Windows 데스크탑 (SSAFY)",
|
|
5
|
+
"aliases": ["울트라", "데스크탑"],
|
|
6
|
+
"default_dir": "~/Desktop/Projects"
|
|
7
|
+
},
|
|
8
|
+
"m2": {
|
|
9
|
+
"description": "MacBook Pro",
|
|
10
|
+
"aliases": ["맥북", "맥"],
|
|
11
|
+
"default_dir": "~/projects"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"default_host": "ultra4",
|
|
15
|
+
"triggers": ["원격에서", "다른 머신에서", "다른 컴퓨터에서"]
|
|
16
|
+
}
|