triflux 10.9.19 → 10.9.21
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.md +212 -0
- package/hub/lib/bash-path.mjs +73 -0
- package/hub/team/dashboard-open.mjs +1 -68
- package/hub/team/native-supervisor.mjs +9 -2
- package/hub/team/psmux.mjs +5 -13
- package/hub/team/session.mjs +6 -26
- package/hub/team/swarm-hypervisor.mjs +205 -27
- package/hub/team/synapse-http.mjs +1 -0
- package/hub/team/tui-core.mjs +292 -0
- package/hub/team/tui-lite.mjs +20 -154
- package/hub/team/tui-synapse.mjs +213 -0
- package/hub/team/tui-widgets.mjs +262 -0
- package/hub/team/tui.mjs +159 -255
- package/hub/workers/delegator-mcp.mjs +2 -2
- package/package.json +21 -62
- package/references/hosts.json +46 -0
- package/scripts/__tests__/keyword-detector.test.mjs +4 -4
- package/scripts/cross-review-gate.mjs +13 -0
- package/scripts/remote-spawn.mjs +11 -46
- package/scripts/session-spawn-helper.mjs +8 -21
- package/scripts/test-tfx-route-no-claude-native.mjs +4 -2
- package/scripts/tfx-route.sh +13 -0
- package/skills/tfx-deep-interview/SKILL.md +6 -6
- package/skills/tfx-deep-interview/SKILL.md.tmpl +6 -6
- package/skills/tfx-index/SKILL.md +1 -1
- package/skills/tfx-index/SKILL.md.tmpl +1 -1
- package/skills/tfx-interview/SKILL.md +9 -9
- package/skills/tfx-interview/SKILL.md.tmpl +9 -9
- package/skills/tfx-plan/SKILL.md +1 -1
- package/skills/tfx-plan/SKILL.md.tmpl +1 -1
- package/skills/tfx-research/SKILL.md +1 -1
- package/skills/tfx-research/SKILL.md.tmpl +1 -1
- package/skills/tfx-workspace/async-tests/run-tests.sh +203 -0
- package/skills/tfx-workspace/evals/evals.json +79 -0
- package/skills/tfx-workspace/iteration-1/benchmark.json +524 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +11 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +25 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +154 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +25 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +126 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +11 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +25 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +119 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +25 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +115 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +10 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +20 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +86 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +20 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +81 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +30 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +316 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +30 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +352 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/review.html +1325 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +30 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +97 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +30 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +94 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +30 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +209 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +30 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +193 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/benchmark.json +144 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +13 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +35 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +382 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +35 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +333 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/review.html +1325 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +217 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md +77 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +65 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +94 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md +82 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +133 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +426 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +101 -0
- package/.claude-plugin/marketplace.json +0 -34
- package/.claude-plugin/plugin.json +0 -22
- package/config/mcp-registry.json +0 -29
- package/scripts/__tests__/release-governance.test.mjs +0 -148
- package/scripts/release/bump-version.mjs +0 -77
- package/scripts/release/check-sync.mjs +0 -51
- package/scripts/release/lib.mjs +0 -303
- package/scripts/release/prepare.mjs +0 -85
- package/scripts/release/publish.mjs +0 -87
- package/scripts/release/verify.mjs +0 -81
- package/scripts/release/version-manifest.json +0 -26
- package/tui/codex-profile.mjs +0 -457
- package/tui/core.mjs +0 -266
- package/tui/doctor.mjs +0 -375
- package/tui/gemini-profile.mjs +0 -299
- package/tui/monitor-data.mjs +0 -152
- package/tui/monitor.mjs +0 -339
- package/tui/setup.mjs +0 -598
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# tfx-route.sh v2.5 async job system — 통합 테스트
|
|
3
|
+
set -uo pipefail
|
|
4
|
+
|
|
5
|
+
ROUTE="scripts/tfx-route.sh"
|
|
6
|
+
PASS=0
|
|
7
|
+
FAIL=0
|
|
8
|
+
TOTAL=0
|
|
9
|
+
|
|
10
|
+
assert_eq() {
|
|
11
|
+
local name="$1" expected="$2" actual="$3"
|
|
12
|
+
TOTAL=$((TOTAL + 1))
|
|
13
|
+
if [[ "$actual" == *"$expected"* ]]; then
|
|
14
|
+
echo " ✓ $name"
|
|
15
|
+
PASS=$((PASS + 1))
|
|
16
|
+
else
|
|
17
|
+
echo " ✗ $name — expected: '$expected', got: '$actual'"
|
|
18
|
+
FAIL=$((FAIL + 1))
|
|
19
|
+
fi
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
assert_neq() {
|
|
23
|
+
local name="$1" unexpected="$2" actual="$3"
|
|
24
|
+
TOTAL=$((TOTAL + 1))
|
|
25
|
+
if [[ "$actual" != *"$unexpected"* ]]; then
|
|
26
|
+
echo " ✓ $name"
|
|
27
|
+
PASS=$((PASS + 1))
|
|
28
|
+
else
|
|
29
|
+
echo " ✗ $name — should NOT contain: '$unexpected', got: '$actual'"
|
|
30
|
+
FAIL=$((FAIL + 1))
|
|
31
|
+
fi
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
assert_exit() {
|
|
35
|
+
local name="$1" expected="$2" actual="$3"
|
|
36
|
+
TOTAL=$((TOTAL + 1))
|
|
37
|
+
if [[ "$actual" -eq "$expected" ]]; then
|
|
38
|
+
echo " ✓ $name"
|
|
39
|
+
PASS=$((PASS + 1))
|
|
40
|
+
else
|
|
41
|
+
echo " ✗ $name — expected exit=$expected, got exit=$actual"
|
|
42
|
+
FAIL=$((FAIL + 1))
|
|
43
|
+
fi
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
echo "═══ tfx-route.sh v2.5 Async Job System Tests ═══"
|
|
47
|
+
echo ""
|
|
48
|
+
|
|
49
|
+
# ── Test 1: --async 기본 동작 ──
|
|
50
|
+
echo "Test 1: --async 기본 시작 + job_id 반환"
|
|
51
|
+
JOB_ID=$(bash "$ROUTE" --async executor "echo hello" none 30 2>/dev/null)
|
|
52
|
+
EC=$?
|
|
53
|
+
assert_exit "exit code 0" 0 "$EC"
|
|
54
|
+
TOTAL=$((TOTAL + 1))
|
|
55
|
+
if [[ -n "$JOB_ID" ]]; then echo " ✓ job_id not empty ($JOB_ID)"; PASS=$((PASS + 1)); else echo " ✗ job_id is empty"; FAIL=$((FAIL + 1)); fi
|
|
56
|
+
assert_neq "job_id not error" "error" "$JOB_ID"
|
|
57
|
+
echo ""
|
|
58
|
+
|
|
59
|
+
# ── Test 2: --job-status running → done 전이 ──
|
|
60
|
+
echo "Test 2: --job-status 상태 전이 (running → done)"
|
|
61
|
+
LONG_JOB=$(bash "$ROUTE" --async executor "sleep 3 && echo done" none 60 2>/dev/null)
|
|
62
|
+
STATUS_EARLY=$(bash "$ROUTE" --job-status "$LONG_JOB" 2>/dev/null)
|
|
63
|
+
assert_eq "initial status: running" "running" "$STATUS_EARLY"
|
|
64
|
+
|
|
65
|
+
# Codex 시작 ~10초 + sleep 3초 + 후처리 → 최대 25초 대기
|
|
66
|
+
for i in $(seq 1 5); do
|
|
67
|
+
sleep 5
|
|
68
|
+
STATUS_LATE=$(bash "$ROUTE" --job-status "$LONG_JOB" 2>/dev/null)
|
|
69
|
+
[[ "$STATUS_LATE" == "done" ]] && break
|
|
70
|
+
done
|
|
71
|
+
assert_eq "final status: done" "done" "$STATUS_LATE"
|
|
72
|
+
echo ""
|
|
73
|
+
|
|
74
|
+
# ── Test 3: --job-status 존재하지 않는 job ──
|
|
75
|
+
echo "Test 3: --job-status 존재하지 않는 job"
|
|
76
|
+
RESULT=$(bash "$ROUTE" --job-status "nonexistent-12345" 2>/dev/null)
|
|
77
|
+
EC=$?
|
|
78
|
+
assert_eq "returns error" "error" "$RESULT"
|
|
79
|
+
assert_exit "exit code 1" 1 "$EC"
|
|
80
|
+
echo ""
|
|
81
|
+
|
|
82
|
+
# ── Test 4: --job-result 완료된 job ──
|
|
83
|
+
echo "Test 4: --job-result 완료된 job 결과 읽기"
|
|
84
|
+
# Test 1의 JOB_ID 재사용 — Codex 완료 대기
|
|
85
|
+
for i in $(seq 1 6); do
|
|
86
|
+
S=$(bash "$ROUTE" --job-status "$JOB_ID" 2>/dev/null)
|
|
87
|
+
[[ "$S" == "done" ]] && break
|
|
88
|
+
sleep 5
|
|
89
|
+
done
|
|
90
|
+
RESULT=$(bash "$ROUTE" --job-result "$JOB_ID" 2>/dev/null)
|
|
91
|
+
EC=$?
|
|
92
|
+
assert_exit "exit code 0" 0 "$EC"
|
|
93
|
+
TOTAL=$((TOTAL + 1))
|
|
94
|
+
if [[ -n "$RESULT" ]]; then echo " ✓ result not empty (${#RESULT} bytes)"; PASS=$((PASS + 1)); else echo " ✗ result is empty"; FAIL=$((FAIL + 1)); fi
|
|
95
|
+
assert_neq "result not error" "error:" "$RESULT"
|
|
96
|
+
echo ""
|
|
97
|
+
|
|
98
|
+
# ── Test 5: --job-result 아직 실행 중인 job ──
|
|
99
|
+
echo "Test 5: --job-result 실행 중인 job → 에러"
|
|
100
|
+
RUNNING_JOB=$(bash "$ROUTE" --async executor "sleep 30" none 60 2>/dev/null)
|
|
101
|
+
RESULT=$(bash "$ROUTE" --job-result "$RUNNING_JOB" 2>/dev/null)
|
|
102
|
+
EC=$?
|
|
103
|
+
assert_eq "returns error" "error: job still running" "$RESULT"
|
|
104
|
+
assert_exit "exit code 1" 1 "$EC"
|
|
105
|
+
# cleanup
|
|
106
|
+
JOB_DIR="${TMPDIR:-/tmp}/tfx-jobs/$RUNNING_JOB"
|
|
107
|
+
[[ -f "$JOB_DIR/pid" ]] && kill "$(cat "$JOB_DIR/pid")" 2>/dev/null
|
|
108
|
+
echo ""
|
|
109
|
+
|
|
110
|
+
# ── Test 6: --job-wait 완료 감지 ──
|
|
111
|
+
echo "Test 6: --job-wait 완료 감지"
|
|
112
|
+
WAIT_JOB=$(bash "$ROUTE" --async executor "echo wait-test-ok" none 30 2>/dev/null)
|
|
113
|
+
sleep 15 # codex 실행 대기
|
|
114
|
+
WAIT_RESULT=$(bash "$ROUTE" --job-wait "$WAIT_JOB" 60 2>/dev/null)
|
|
115
|
+
assert_eq "wait returns done" "done" "$WAIT_RESULT"
|
|
116
|
+
echo ""
|
|
117
|
+
|
|
118
|
+
# ── Test 7: --job-wait still_running (max_wait < 실행시간) ──
|
|
119
|
+
echo "Test 7: --job-wait still_running (짧은 max_wait)"
|
|
120
|
+
SLOW_JOB=$(bash "$ROUTE" --async executor "sleep 60" none 120 2>/dev/null)
|
|
121
|
+
sleep 1
|
|
122
|
+
WAIT_RESULT=$(bash "$ROUTE" --job-wait "$SLOW_JOB" 5 2>/dev/null)
|
|
123
|
+
assert_eq "wait returns still_running" "still_running" "$WAIT_RESULT"
|
|
124
|
+
# cleanup
|
|
125
|
+
JOB_DIR="${TMPDIR:-/tmp}/tfx-jobs/$SLOW_JOB"
|
|
126
|
+
[[ -f "$JOB_DIR/pid" ]] && kill "$(cat "$JOB_DIR/pid")" 2>/dev/null
|
|
127
|
+
echo ""
|
|
128
|
+
|
|
129
|
+
# ── Test 8: exit code 전파 ──
|
|
130
|
+
echo "Test 8: 실패한 job의 exit code 전파"
|
|
131
|
+
FAIL_JOB=$(bash "$ROUTE" --async executor "exit 42" none 30 2>/dev/null)
|
|
132
|
+
# Codex 완료 대기
|
|
133
|
+
for i in $(seq 1 8); do
|
|
134
|
+
S=$(bash "$ROUTE" --job-status "$FAIL_JOB" 2>/dev/null)
|
|
135
|
+
[[ "$S" != *"running"* ]] && break
|
|
136
|
+
sleep 5
|
|
137
|
+
done
|
|
138
|
+
STATUS=$(bash "$ROUTE" --job-status "$FAIL_JOB" 2>/dev/null)
|
|
139
|
+
# Codex가 exit 42를 감싸서 성공/실패 둘 다 가능 — "running이 아님"만 확인
|
|
140
|
+
TOTAL=$((TOTAL + 1))
|
|
141
|
+
if [[ "$STATUS" == "done" || "$STATUS" == *"failed"* || "$STATUS" == "timeout" ]]; then
|
|
142
|
+
echo " ✓ status is terminal: $STATUS"; PASS=$((PASS + 1))
|
|
143
|
+
else
|
|
144
|
+
echo " ✗ status not terminal: $STATUS"; FAIL=$((FAIL + 1))
|
|
145
|
+
fi
|
|
146
|
+
# Codex는 exit 42를 감싸서 다른 코드로 반환할 수 있음 — 완료 자체만 확인
|
|
147
|
+
TOTAL=$((TOTAL + 1))
|
|
148
|
+
if [[ "$STATUS" != *"running"* ]]; then echo " ✓ job completed (not stuck running)"; PASS=$((PASS + 1)); else echo " ✗ job still running"; FAIL=$((FAIL + 1)); fi
|
|
149
|
+
echo ""
|
|
150
|
+
|
|
151
|
+
# ── Test 9: job 디렉토리 구조 검증 ──
|
|
152
|
+
echo "Test 9: job 디렉토리 구조"
|
|
153
|
+
STRUCT_JOB=$(bash "$ROUTE" --async executor "echo structure-test" none 30 2>/dev/null)
|
|
154
|
+
JOB_DIR="${TMPDIR:-/tmp}/tfx-jobs/$STRUCT_JOB"
|
|
155
|
+
assert_eq "pid file exists" "true" "$([ -f "$JOB_DIR/pid" ] && echo true || echo false)"
|
|
156
|
+
assert_eq "agent_type file exists" "true" "$([ -f "$JOB_DIR/agent_type" ] && echo true || echo false)"
|
|
157
|
+
assert_eq "start_time file exists" "true" "$([ -f "$JOB_DIR/start_time" ] && echo true || echo false)"
|
|
158
|
+
AGENT=$(cat "$JOB_DIR/agent_type" 2>/dev/null)
|
|
159
|
+
assert_eq "agent_type == executor" "executor" "$AGENT"
|
|
160
|
+
echo ""
|
|
161
|
+
|
|
162
|
+
# ── Test 10: native.mjs 프롬프트 검증 ──
|
|
163
|
+
echo "Test 10: native.mjs buildSlimWrapperPrompt async 키워드"
|
|
164
|
+
PROMPT_CHECK=$(node -e "
|
|
165
|
+
import('./hub/team/native.mjs').then(m => {
|
|
166
|
+
const p = m.buildSlimWrapperPrompt('codex', {
|
|
167
|
+
subtask: 'test task',
|
|
168
|
+
role: 'scientist',
|
|
169
|
+
teamName: 'test-team',
|
|
170
|
+
taskId: 'task-1',
|
|
171
|
+
agentName: 'codex-worker-1',
|
|
172
|
+
});
|
|
173
|
+
const checks = {
|
|
174
|
+
has_async: p.includes('--async'),
|
|
175
|
+
has_job_wait: p.includes('--job-wait'),
|
|
176
|
+
has_job_result: p.includes('--job-result'),
|
|
177
|
+
has_route_timeout: p.includes('auto 1800'),
|
|
178
|
+
no_old_bashTimeout: !p.includes('timeout: 1860000'),
|
|
179
|
+
has_launch_timeout: p.includes('timeout: 15000'),
|
|
180
|
+
has_wait_timeout: p.includes('timeout: 570000'),
|
|
181
|
+
has_result_timeout: p.includes('timeout: 30000'),
|
|
182
|
+
};
|
|
183
|
+
for (const [k, v] of Object.entries(checks)) {
|
|
184
|
+
console.log(k + '=' + v);
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
" 2>/dev/null)
|
|
188
|
+
for line in $PROMPT_CHECK; do
|
|
189
|
+
key="${line%%=*}"
|
|
190
|
+
val="${line##*=}"
|
|
191
|
+
assert_eq "$key" "true" "$val"
|
|
192
|
+
done
|
|
193
|
+
echo ""
|
|
194
|
+
|
|
195
|
+
# ── 결과 요약 ──
|
|
196
|
+
echo "═══════════════════════════════════════════════════"
|
|
197
|
+
echo " Results: $PASS/$TOTAL passed, $FAIL failed"
|
|
198
|
+
echo "═══════════════════════════════════════════════════"
|
|
199
|
+
|
|
200
|
+
if [[ "$FAIL" -gt 0 ]]; then
|
|
201
|
+
exit 1
|
|
202
|
+
fi
|
|
203
|
+
exit 0
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "tfx-skills-suite",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "You are a Claude Code agent. Read the tfx-auto skill definition, then explain how you would handle this user request: '/implement JWT 인증 미들웨어 추가해줘'. List the EXACT bash commands you would run. Do NOT actually execute them.",
|
|
7
|
+
"expected_output": "Should route to executor agent via tfx-route.sh with 'implement' MCP profile. Command: bash ~/.claude/scripts/tfx-route.sh executor 'JWT 인증 미들웨어 추가해줘' implement",
|
|
8
|
+
"files": [],
|
|
9
|
+
"expectations": [
|
|
10
|
+
"Routes to 'executor' agent (not architect, not analyst)",
|
|
11
|
+
"Uses 'implement' MCP profile",
|
|
12
|
+
"Generates correct tfx-route.sh command syntax",
|
|
13
|
+
"Does NOT trigger triage (single command shortcut)",
|
|
14
|
+
"Does NOT delegate to tfx-multi"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": 2,
|
|
19
|
+
"prompt": "You are a Claude Code agent. Read the tfx-auto skill definition, then explain how you would handle: '/tfx-auto 프론트엔드 리팩터링하고 보안 리뷰도 해줘'. List all routing decisions, triage steps, and delegation.",
|
|
20
|
+
"expected_output": "Should enter auto triage mode, classify via Codex, decompose into 2+ subtasks, then delegate to tfx-multi Phase 3",
|
|
21
|
+
"files": [],
|
|
22
|
+
"expectations": [
|
|
23
|
+
"Identifies this as auto mode (not command shortcut)",
|
|
24
|
+
"Triggers Codex classification step",
|
|
25
|
+
"Decomposes into at least 2 subtasks",
|
|
26
|
+
"Notes delegation to tfx-multi for subtasks >= 2",
|
|
27
|
+
"Does NOT try to execute all subtasks directly"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": 3,
|
|
32
|
+
"prompt": "You are a Claude Code agent. Read the tfx-multi skill definition, then explain step-by-step how you would handle: '/tfx-multi 인증 리팩터링 + UI 개선 + 보안 리뷰'. List all TeamCreate, TaskCreate, Agent calls with exact parameters.",
|
|
33
|
+
"expected_output": "Should create team, 3 TaskCreates, 3 Agent spawns with slim wrapper structure following Phase 0-5",
|
|
34
|
+
"files": [],
|
|
35
|
+
"expectations": [
|
|
36
|
+
"Creates exactly one TeamCreate with tfx- prefix naming",
|
|
37
|
+
"Creates 3 TaskCreate calls (one per subtask)",
|
|
38
|
+
"Spawns 3 Agent wrappers with mode: bypassPermissions",
|
|
39
|
+
"Uses tfx-route.sh inside Agent wrapper (not direct codex/gemini)",
|
|
40
|
+
"Includes Phase 5 cleanup (TeamDelete)"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": 4,
|
|
45
|
+
"prompt": "You are a Claude Code agent. Read the tfx-doctor skill definition, then explain how you would handle: 'HUD가 안 보이고 codex도 안 되는데 어떻게 해?'. List exact commands and reasoning.",
|
|
46
|
+
"expected_output": "Should suggest running triflux doctor first, then triflux doctor --fix if issues found",
|
|
47
|
+
"files": [],
|
|
48
|
+
"expectations": [
|
|
49
|
+
"Runs 'triflux doctor' as first diagnostic step",
|
|
50
|
+
"Suggests '--fix' mode for auto-repair",
|
|
51
|
+
"Mentions HUD and CLI path checks in explanation",
|
|
52
|
+
"Does NOT jump straight to --reset (that's for cache only)"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": 5,
|
|
57
|
+
"prompt": "You are a Claude Code agent. Read the tfx-hub skill definition, then explain how you would handle: '/tfx-hub start'. List exact commands.",
|
|
58
|
+
"expected_output": "Should run 'node hub/server.mjs' in background",
|
|
59
|
+
"files": [],
|
|
60
|
+
"expectations": [
|
|
61
|
+
"Runs 'node hub/server.mjs' with run_in_background=true",
|
|
62
|
+
"Mentions port 27888 and /mcp endpoint",
|
|
63
|
+
"Does NOT try to run any triage or routing"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": 6,
|
|
68
|
+
"prompt": "You are a Claude Code agent. Read the tfx-codex skill definition, then explain the Gemini-to-Codex remapping. For '/tfx-codex API 문서를 작성하고 디자인 가이드도 만들어줘', list the routing showing how designer/writer get remapped.",
|
|
69
|
+
"expected_output": "designer remapped to Codex(high), writer to Codex Spark(spark_fast), TFX_CLI_MODE=codex env var",
|
|
70
|
+
"files": [],
|
|
71
|
+
"expectations": [
|
|
72
|
+
"designer remapped to Codex with effort: high",
|
|
73
|
+
"writer remapped to Codex Spark with effort: spark_fast",
|
|
74
|
+
"Sets TFX_CLI_MODE=codex environment variable",
|
|
75
|
+
"Changes MCP profile: designer->implement, writer->analyze"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|