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.
Files changed (103) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.ko.md +1 -1
  3. package/README.md +1 -1
  4. package/hooks/hooks.json +56 -51
  5. package/hub/pipeline/index.mjs +318 -318
  6. package/hub/routing/q-learning.mjs +2 -1
  7. package/hub/schema.sql +146 -146
  8. package/hub/team/cli/commands/kill.mjs +37 -37
  9. package/hub/team/cli/commands/start/index.mjs +3 -2
  10. package/hub/team/cli/commands/start/parse-args.mjs +5 -0
  11. package/hub/team/cli/commands/start/start-headless.mjs +2 -1
  12. package/hub/team/cli/commands/stop.mjs +31 -31
  13. package/hub/team/cli/commands/task.mjs +30 -30
  14. package/hub/team/cli/help.mjs +41 -40
  15. package/hub/team/cli/services/hub-client.mjs +208 -208
  16. package/hub/team/cli/services/native-control.mjs +118 -118
  17. package/hub/team/cli/services/runtime-mode.mjs +62 -62
  18. package/hub/team/cli/services/state-store.mjs +48 -48
  19. package/hub/team/dashboard-anchor.mjs +14 -0
  20. package/hub/team/dashboard.mjs +274 -274
  21. package/hub/team/headless.mjs +44 -19
  22. package/hub/team/native.mjs +649 -649
  23. package/hub/tools.mjs +554 -554
  24. package/hub/workers/delegator-mcp.mjs +21 -1
  25. package/package.json +1 -1
  26. package/scripts/__tests__/remote-spawn-transfer.test.mjs +117 -0
  27. package/scripts/__tests__/remote-spawn.test.mjs +78 -0
  28. package/scripts/cache-buildup.mjs +401 -0
  29. package/scripts/headless-guard.mjs +10 -3
  30. package/scripts/hub-ensure.mjs +120 -120
  31. package/scripts/lib/mcp-filter.mjs +720 -720
  32. package/scripts/lib/remote-spawn-transfer.mjs +196 -0
  33. package/scripts/mcp-check.mjs +237 -127
  34. package/scripts/mcp-gateway-ensure.mjs +6 -8
  35. package/scripts/mcp-gateway-integration-test.mjs +228 -0
  36. package/scripts/mcp-gateway-start.mjs +42 -16
  37. package/scripts/mcp-gateway-start.ps1 +17 -14
  38. package/scripts/mcp-gateway-verify.mjs +1 -1
  39. package/scripts/preflight-cache.mjs +137 -137
  40. package/scripts/remote-spawn.mjs +404 -40
  41. package/scripts/setup.mjs +18 -0
  42. package/scripts/tfx-route-worker.mjs +165 -165
  43. package/scripts/tfx-route.sh +85 -16
  44. package/scripts/token-snapshot.mjs +575 -575
  45. package/skills/tfx-analysis/SKILL.md +101 -101
  46. package/skills/tfx-autopilot/SKILL.md +112 -112
  47. package/skills/tfx-autoresearch/SKILL.md +1 -0
  48. package/skills/tfx-autoroute/SKILL.md +184 -184
  49. package/skills/tfx-codex-swarm/SKILL.md +449 -0
  50. package/skills/tfx-codex-swarm/evals/evals.json +26 -0
  51. package/skills/tfx-codex-swarm-workspace/iteration-1/benchmark.json +33 -0
  52. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/eval_metadata.json +42 -0
  53. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/grading.json +11 -0
  54. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/analysis.md +87 -0
  55. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/classification.md +35 -0
  56. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/commands.sh +275 -0
  57. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/outputs/routing.md +56 -0
  58. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/timing.json +5 -0
  59. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/grading.json +11 -0
  60. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/analysis.md +92 -0
  61. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/classification.md +71 -0
  62. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/commands.sh +264 -0
  63. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/outputs/routing.md +113 -0
  64. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/timing.json +5 -0
  65. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/eval_metadata.json +32 -0
  66. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/grading.json +9 -0
  67. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/analysis.md +96 -0
  68. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/classification.md +38 -0
  69. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/commands.sh +151 -0
  70. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/outputs/routing.md +51 -0
  71. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/timing.json +5 -0
  72. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/grading.json +9 -0
  73. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/analysis.md +127 -0
  74. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/classification.md +57 -0
  75. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/commands.sh +129 -0
  76. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/outputs/routing.md +84 -0
  77. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/timing.json +5 -0
  78. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/eval_metadata.json +27 -0
  79. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/grading.json +8 -0
  80. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/analysis.md +98 -0
  81. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/classification.md +65 -0
  82. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/commands.sh +123 -0
  83. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/outputs/routing.md +66 -0
  84. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/timing.json +5 -0
  85. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/grading.json +8 -0
  86. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/analysis.md +88 -0
  87. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/classification.md +40 -0
  88. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/commands.sh +130 -0
  89. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/outputs/routing.md +61 -0
  90. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/timing.json +5 -0
  91. package/skills/tfx-profile/SKILL.md +141 -51
  92. package/skills/tfx-qa/SKILL.md +117 -117
  93. package/skills/tfx-remote-spawn/references/hosts.json +16 -16
  94. package/skills/tfx-review/SKILL.md +51 -51
  95. package/skills/tfx-setup/SKILL.md +20 -0
  96. package/tui/gemini-profile.mjs +254 -0
  97. package/tui/setup.mjs +36 -1
  98. package/scripts/claude-logged.ps1 +0 -54
  99. package/scripts/demo-tui.mjs +0 -59
  100. package/skills/.omc/state/agent-replay-8f0e10a9-9693-4410-96f5-a6b07e8ed995.jsonl +0 -1
  101. package/skills/.omc/state/idle-notif-cooldown.json +0 -3
  102. package/skills/.omc/state/last-tool-error.json +0 -7
  103. 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) |
@@ -0,0 +1,5 @@
1
+ {
2
+ "total_tokens": 65928,
3
+ "duration_ms": 259460,
4
+ "total_duration_seconds": 259.5
5
+ }
@@ -1,22 +1,43 @@
1
1
  ---
2
2
  name: tfx-profile
3
3
  description: >
4
- Codex CLI 프로파일/모델 관리 인터랙티브 UI. tfx-route가 사용하는
4
+ Codex/Gemini CLI 프로파일·모델 관리 인터랙티브 UI. tfx-route가 사용하는
5
5
  프로파일 목록 조회, 모델 변경, effort 조정, 추가/삭제를 AskUserQuestion 기반
6
6
  인터랙티브 선택지로 수행합니다.
7
- Use when: codex profile, codex model, 프로파일 변경, 모델 변경, effort 변경,
8
- codex 설정, profile manager, 프로파일 관리, 어떤 모델, tfx profile
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
- # codex-profile — Codex 프로파일 매니저
15
+ # tfx-profile — Codex/Gemini 프로파일 매니저
15
16
 
16
- > Codex CLI 프로파일의 모델/effort를 AskUserQuestion 선택지로 관리합니다.
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으로 프로파일 선택 (현재 프로파일 목록에서 2-4개씩 나눠서, 또는 "Other"로 직접 입력)
74
+ 1. AskUserQuestion으로 프로파일 선택
56
75
  2. AskUserQuestion으로 모델 선택:
57
76
  ```
58
- question: "모델을 선택하세요"
59
- header: "Model"
60
77
  options:
61
- - label: "gpt-5.4"
62
- description: "최신 플래그십"
63
- - label: "gpt-5.3-codex"
64
- description: "코딩 특화 (Recommended)"
65
- - label: "gpt-5.1-codex-mini"
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: "low"
76
- description: "빠른 응답, 최소 추론"
77
- - label: "medium"
78
- description: "균형 잡힌 추론"
79
- - label: "high"
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
- 4. 변경 diff를 preview로 보여주고 Edit 도구로 config.toml 수정
148
+ 3. Edit 도구로 triflux-profiles.json 수정
85
149
 
86
150
  #### 기본 모델 변경
87
151
 
88
- 위와 동일한 모델/effort 선택 후 top-level `model`, `model_reasoning_effort` 수정.
152
+ 모델 선택 후 top-level `model` 수정.
89
153
 
90
- #### 프로파일 추가
154
+ #### 프로필 추가/삭제
91
155
 
92
- 1. AskUserQuestion(Other)으로 프로파일 이름 입력
93
- 2. 모델 선택 → effort 선택
94
- 3. config.toml 끝에 새 `[profiles.name]` 섹션 추가
156
+ 추가: 이름 모델 → 설명 → profiles에 추가
157
+ 삭제: 선택 → 확인 → profiles에서 제거
95
158
 
96
- #### 프로파일 삭제
159
+ ### Step 4: 결과 확인
97
160
 
98
- 1. 프로파일 선택
99
- 2. AskUserQuestion 확인: "정말 삭제하시겠습니까?"
100
- 3. 해당 섹션 제거
161
+ 변경된 JSON을 다시 읽어 업데이트된 테이블 표시.
101
162
 
102
- ### Step 4: 결과 확인
163
+ ---
103
164
 
104
- 변경된 config.toml을 다시 읽어 업데이트된 테이블 표시.
105
- "계속하시겠습니까?" AskUserQuestion → 반복 또는 종료.
165
+ ## 수정 규칙
106
166
 
107
- ## config.toml 수정 규칙
167
+ ### Codex (config.toml)
108
168
 
109
- - **백업 필수**: 수정 전 원본 내용을 기억해둘 것 (rollback 가능하도록)
169
+ - **백업 필수**: 수정 전 원본 기억
110
170
  - **프로파일 섹션 형식**: `[profiles.name]\nmodel = "..."\nmodel_reasoning_effort = "..."`
111
- - **다른 섹션 건드리지 않기**: `[notice]`, `[features]`, `[mcp_servers.*]`, `[projects.*]` 등은 절대 수정 금지
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
- ### config.toml 경로
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` (`$HOME/.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
- 터미널에서 직접 실행도 가능: `node tui/codex-profile.mjs` (arrow key 방식)
237
+ 터미널에서 직접 실행:
238
+ - Codex: `node tui/codex-profile.mjs`
239
+ - Gemini: `node tui/gemini-profile.mjs`
@@ -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
+ }