triflux 10.13.8 → 10.13.10
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/bin/triflux.mjs +11 -3
- package/package.json +1 -1
- package/skills/tfx-autopilot/SKILL.md +10 -4
- package/skills/tfx-consensus/SKILL.md +12 -11
- package/skills/tfx-debate/SKILL.md +12 -11
- package/skills/tfx-fullcycle/SKILL.md +10 -4
- package/skills/tfx-multi/SKILL.md +10 -4
- package/skills/tfx-panel/SKILL.md +12 -11
- package/skills/tfx-persist/SKILL.md +10 -4
- package/skills/tfx-psmux-rules/SKILL.md +11 -0
- package/skills/tfx-remote-setup/SKILL.md +11 -0
- package/skills/tfx-remote-spawn/SKILL.md +11 -0
- package/skills/tfx-swarm/SKILL.md +10 -4
package/bin/triflux.mjs
CHANGED
|
@@ -318,9 +318,10 @@ const CLI_COMMAND_SCHEMAS = Object.freeze({
|
|
|
318
318
|
],
|
|
319
319
|
},
|
|
320
320
|
swarm: {
|
|
321
|
-
usage: "tfx swarm <prd-path> [--dry-run|--json|--filter <shard>]",
|
|
321
|
+
usage: "tfx swarm [run] <prd-path> [--dry-run|--json|--filter <shard>]",
|
|
322
322
|
description: "PRD 기반 멀티모델 x 멀티기기 스웜 실행 (#93)",
|
|
323
323
|
subcommands: {
|
|
324
|
+
run: "tfx swarm run <prd-path> — verb 명시 실행 (기본 경로와 동일)",
|
|
324
325
|
plan: "tfx swarm plan <prd-path> [--json] — 실행 없이 계획만 출력",
|
|
325
326
|
list: "tfx swarm list [--json] — 활성 스웜 세션 조회 (synapse status)",
|
|
326
327
|
status: "tfx swarm status [--json] — list alias",
|
|
@@ -4760,7 +4761,9 @@ ${updateNotice}
|
|
|
4760
4761
|
${WHITE_BRIGHT}tfx tray${RESET} ${GRAY}Windows 시스템 트레이 실행${RESET}
|
|
4761
4762
|
${DIM} --detach${RESET} ${GRAY}백그라운드 트레이 프로세스로 분리${RESET}
|
|
4762
4763
|
${WHITE_BRIGHT}tfx multi${RESET} ${GRAY}멀티-CLI 팀 모드 (tmux + Hub)${RESET}
|
|
4763
|
-
${WHITE_BRIGHT}tfx swarm${RESET} ${GRAY}PRD 기반 worktree 격리 병렬
|
|
4764
|
+
${WHITE_BRIGHT}tfx swarm${RESET} ${GRAY}PRD 기반 worktree 격리 병렬 실행 (run/plan/list)${RESET}
|
|
4765
|
+
${WHITE_BRIGHT}tfx synapse${RESET} ${GRAY}스웜 세션 registry 조회 / lease 관리${RESET}
|
|
4766
|
+
${WHITE_BRIGHT}tfx why${RESET} ${GRAY}경로의 마지막 커밋 X-Intent 트레일러 추출${RESET}
|
|
4764
4767
|
${WHITE_BRIGHT}tfx codex-team${RESET} ${GRAY}Codex 전용 팀 모드 (기본 lead/agents: codex)${RESET}
|
|
4765
4768
|
${WHITE_BRIGHT}tfx notion-read${RESET} ${GRAY}Notion 페이지 → 마크다운 (Codex/Gemini MCP)${RESET}
|
|
4766
4769
|
${WHITE_BRIGHT}tfx version${RESET} ${GRAY}버전 표시${RESET}
|
|
@@ -5829,6 +5832,7 @@ async function main() {
|
|
|
5829
5832
|
${WHITE_BRIGHT}${s.usage}${RESET}
|
|
5830
5833
|
|
|
5831
5834
|
${BOLD}Subcommands${RESET}
|
|
5835
|
+
${WHITE_BRIGHT}tfx swarm run <prd>${RESET} ${GRAY}${s.subcommands.run}${RESET}
|
|
5832
5836
|
${WHITE_BRIGHT}tfx swarm plan <prd>${RESET} ${GRAY}${s.subcommands.plan}${RESET}
|
|
5833
5837
|
${WHITE_BRIGHT}tfx swarm list${RESET} ${GRAY}${s.subcommands.list}${RESET}
|
|
5834
5838
|
${WHITE_BRIGHT}tfx swarm status${RESET} ${GRAY}${s.subcommands.status}${RESET}
|
|
@@ -5850,11 +5854,15 @@ ${s.options.map((o) => ` ${DIM}${o.name.padEnd(16)}${RESET} ${GRAY}${o.descri
|
|
|
5850
5854
|
await cmdSwarmPlan(cmdArgs.slice(1), { json: JSON_OUTPUT });
|
|
5851
5855
|
return;
|
|
5852
5856
|
}
|
|
5857
|
+
if (sub === "run") {
|
|
5858
|
+
await cmdSwarmRun(cmdArgs.slice(1), { json: JSON_OUTPUT });
|
|
5859
|
+
return;
|
|
5860
|
+
}
|
|
5853
5861
|
if (!sub || sub.startsWith("--")) {
|
|
5854
5862
|
throw createCliError("PRD 경로가 필요합니다", {
|
|
5855
5863
|
exitCode: EXIT_ARG_ERROR,
|
|
5856
5864
|
reason: "argError",
|
|
5857
|
-
fix: "tfx swarm <prd-path> [--dry-run|--json|--filter <shard>]",
|
|
5865
|
+
fix: "tfx swarm [run] <prd-path> [--dry-run|--json|--filter <shard>]",
|
|
5858
5866
|
});
|
|
5859
5867
|
}
|
|
5860
5868
|
await cmdSwarmRun(cmdArgs, { json: JSON_OUTPUT });
|
package/package.json
CHANGED
|
@@ -19,10 +19,16 @@ argument-hint: "<작업 설명 — tfx-auto 로 passthrough>"
|
|
|
19
19
|
|
|
20
20
|
## 동작
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존 — 이 logging 이 빠지면 게이트가 영영 열리지 않는다.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
mkdir -p .omc/state
|
|
26
|
+
echo "[deprecated] tfx-autopilot -> use: tfx-auto" >&2
|
|
27
|
+
echo "[DEPRECATED] tfx-autopilot — see tfx-auto"
|
|
28
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-autopilot -> tfx-auto" >> .omc/state/alias-usage.log
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
1. 위 bash 블록 실행 (stderr 경고 + stdout `[DEPRECATED]` 마커 + alias-usage.log append).
|
|
26
32
|
2. ARGUMENTS 를 그대로 `Skill("tfx-auto")` 에 전달한다 (추가 플래그 없음).
|
|
27
33
|
3. tfx-auto 의 Step 0 스마트 라우팅과 플래그 오버라이드 로직이 나머지를 처리한다.
|
|
28
34
|
|
|
@@ -17,17 +17,18 @@ argument-hint: "<분석 주제 또는 컨텍스트 — tfx-auto 로 passthrough>
|
|
|
17
17
|
|
|
18
18
|
## 동작
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존 — 이 logging 이 빠지면 게이트가 영영 열리지 않는다.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
mkdir -p .omc/state
|
|
24
|
+
echo "[deprecated] tfx-consensus -> use: tfx-auto --mode consensus" >&2
|
|
25
|
+
echo "[DEPRECATED] tfx-consensus — see tfx-auto --mode consensus"
|
|
26
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-consensus -> tfx-auto --mode consensus" >> .omc/state/alias-usage.log
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
1. 위 bash 블록 실행 (stderr 경고 + stdout `[DEPRECATED]` 마커 + alias-usage.log append).
|
|
30
|
+
2. ARGUMENTS 전체 앞에 `--mode consensus` 를 prepend 하여 `Skill("tfx-auto")` 호출.
|
|
31
|
+
3. `--shape` 미지정 시 기본값은 `consensus` 다. `--analysis-prompt-file`, `--cli-set`, `--resolution-threshold` 같은 합의 인자는 그대로 passthrough 한다.
|
|
31
32
|
|
|
32
33
|
## 등가 플래그
|
|
33
34
|
|
|
@@ -22,17 +22,18 @@ argument-hint: "<토론 주제 또는 질문 — tfx-auto 로 passthrough>"
|
|
|
22
22
|
|
|
23
23
|
## 동작
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
25
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존 — 이 logging 이 빠지면 게이트가 영영 열리지 않는다.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
mkdir -p .omc/state
|
|
29
|
+
echo "[deprecated] tfx-debate -> use: tfx-auto --mode consensus --shape debate" >&2
|
|
30
|
+
echo "[DEPRECATED] tfx-debate — see tfx-auto --mode consensus --shape debate"
|
|
31
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-debate -> tfx-auto --mode consensus --shape debate" >> .omc/state/alias-usage.log
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
1. 위 bash 블록 실행 (stderr 경고 + stdout `[DEPRECATED]` 마커 + alias-usage.log append).
|
|
35
|
+
2. ARGUMENTS 전체 앞에 `--mode consensus --shape debate` 를 prepend 하여 `Skill("tfx-auto")` 호출.
|
|
36
|
+
3. `--options`, `--criteria`, `--cli-set`, `--analysis-prompt-file` 같은 debate 전용 인자는 그대로 passthrough 한다.
|
|
36
37
|
|
|
37
38
|
## 등가 플래그
|
|
38
39
|
|
|
@@ -19,10 +19,16 @@ argument-hint: "<작업 설명 — tfx-auto 로 passthrough>"
|
|
|
19
19
|
|
|
20
20
|
## 동작
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존 — 이 logging 이 빠지면 게이트가 영영 열리지 않는다.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
mkdir -p .omc/state
|
|
26
|
+
echo "[deprecated] tfx-fullcycle -> use: tfx-auto --mode deep --parallel 1" >&2
|
|
27
|
+
echo "[DEPRECATED] tfx-fullcycle — see tfx-auto --mode deep --parallel 1"
|
|
28
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-fullcycle -> tfx-auto --mode deep --parallel 1" >> .omc/state/alias-usage.log
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
1. 위 bash 블록 실행 (stderr 경고 + stdout `[DEPRECATED]` 마커 + alias-usage.log append).
|
|
26
32
|
2. ARGUMENTS 전체 앞에 `--mode deep --parallel 1` 를 prepend 하여 `Skill("tfx-auto")` 호출.
|
|
27
33
|
3. tfx-auto 의 플래그 오버라이드 로직이 나머지 처리.
|
|
28
34
|
|
|
@@ -17,10 +17,16 @@ argument-hint: "<작업 설명 — tfx-auto 로 passthrough>"
|
|
|
17
17
|
|
|
18
18
|
## 동작
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존 — 이 logging 이 빠지면 게이트가 영영 열리지 않는다.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
mkdir -p .omc/state
|
|
24
|
+
echo "[deprecated] tfx-multi -> use: tfx-auto --parallel N --mode deep" >&2
|
|
25
|
+
echo "[DEPRECATED] tfx-multi — see tfx-auto --parallel N --mode deep"
|
|
26
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-multi -> tfx-auto --parallel N --mode deep" >> .omc/state/alias-usage.log
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
1. 위 bash 블록 실행 (stderr 경고 + stdout `[DEPRECATED]` 마커 + alias-usage.log append).
|
|
24
30
|
2. ARGUMENTS 전체 앞에 `--parallel N --mode deep` 를 prepend 하여 `Skill("tfx-auto")` 호출.
|
|
25
31
|
3. tfx-auto 의 플래그 오버라이드 로직이 내부적으로 `tfx multi --teammate-mode headless` 를 호출한다.
|
|
26
32
|
|
|
@@ -22,17 +22,18 @@ argument-hint: "<토론 주제 — tfx-auto 로 passthrough>"
|
|
|
22
22
|
|
|
23
23
|
## 동작
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
25
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존 — 이 logging 이 빠지면 게이트가 영영 열리지 않는다.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
mkdir -p .omc/state
|
|
29
|
+
echo "[deprecated] tfx-panel -> use: tfx-auto --mode consensus --shape panel" >&2
|
|
30
|
+
echo "[DEPRECATED] tfx-panel — see tfx-auto --mode consensus --shape panel"
|
|
31
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-panel -> tfx-auto --mode consensus --shape panel" >> .omc/state/alias-usage.log
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
1. 위 bash 블록 실행 (stderr 경고 + stdout `[DEPRECATED]` 마커 + alias-usage.log append).
|
|
35
|
+
2. ARGUMENTS 전체 앞에 `--mode consensus --shape panel` 를 prepend 하여 `Skill("tfx-auto")` 호출.
|
|
36
|
+
3. `--experts`, `--cli-set`, `--analysis-prompt-file` 같은 panel 전용 인자는 그대로 passthrough 한다.
|
|
36
37
|
|
|
37
38
|
## 등가 플래그
|
|
38
39
|
|
|
@@ -22,10 +22,16 @@ argument-hint: "<작업 설명 — tfx-auto 로 passthrough>"
|
|
|
22
22
|
|
|
23
23
|
## 동작
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존 — 이 logging 이 빠지면 게이트가 영영 열리지 않는다.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
mkdir -p .omc/state
|
|
29
|
+
echo "[deprecated] tfx-persist -> use: tfx-auto --retry ralph" >&2
|
|
30
|
+
echo "[DEPRECATED] tfx-persist — see tfx-auto --retry ralph"
|
|
31
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-persist -> tfx-auto --retry ralph" >> .omc/state/alias-usage.log
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
1. 위 bash 블록 실행 (stderr 경고 + stdout `[DEPRECATED]` 마커 + alias-usage.log append).
|
|
29
35
|
2. ARGUMENTS 전체 앞에 `--retry ralph` 를 prepend 하여 `Skill("tfx-auto")` 호출.
|
|
30
36
|
3. 스킬 경유 시 기본 `--max-iterations 0` (unlimited) 로 진입. CLI 직접 호출 시 bounded 1 로 진입 (임시 합의안, Phase 3 Open question #2).
|
|
31
37
|
|
|
@@ -16,6 +16,17 @@ Phase 4b부터 psmux 규칙의 source of truth는 아래 두 문서다.
|
|
|
16
16
|
- `.claude/rules/tfx-psmux.md`
|
|
17
17
|
- `AGENTS.md` 의 `TFX psmux Rules` 섹션
|
|
18
18
|
|
|
19
|
+
## Deprecation logging (alias 호출 즉시 실행 필수)
|
|
20
|
+
|
|
21
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
mkdir -p .omc/state
|
|
25
|
+
echo "[deprecated] tfx-psmux-rules -> see: .claude/rules/tfx-psmux.md" >&2
|
|
26
|
+
echo "[DEPRECATED] tfx-psmux-rules — see .claude/rules/tfx-psmux.md"
|
|
27
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-psmux-rules -> .claude/rules/tfx-psmux.md" >> .omc/state/alias-usage.log
|
|
28
|
+
```
|
|
29
|
+
|
|
19
30
|
## Alias behavior
|
|
20
31
|
|
|
21
32
|
- 이전 `tfx-psmux-rules` 호출은 항상-on rule 문서 참조로 안내한다.
|
|
@@ -11,6 +11,17 @@ argument-hint: "[--add|--edit|--probe-all|--diagnose]"
|
|
|
11
11
|
|
|
12
12
|
이 스킬은 Phase 4b thin alias다. 새 표면은 `tfx-remote setup` 하나다.
|
|
13
13
|
|
|
14
|
+
## Deprecation logging (alias 호출 즉시 실행 필수)
|
|
15
|
+
|
|
16
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
mkdir -p .omc/state
|
|
20
|
+
echo "[deprecated] tfx-remote-setup -> use: tfx-remote setup" >&2
|
|
21
|
+
echo "[DEPRECATED] tfx-remote-setup — see tfx-remote setup"
|
|
22
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-remote-setup -> tfx-remote setup" >> .omc/state/alias-usage.log
|
|
23
|
+
```
|
|
24
|
+
|
|
14
25
|
## Alias mapping
|
|
15
26
|
|
|
16
27
|
- `tfx-remote-setup`
|
|
@@ -12,6 +12,17 @@ argument-hint: "[spawn|list|attach|send|resume|kill|probe] ..."
|
|
|
12
12
|
|
|
13
13
|
이 스킬은 Phase 4b thin alias다. 새 표면은 `tfx-remote` 명령군이다.
|
|
14
14
|
|
|
15
|
+
## Deprecation logging (alias 호출 즉시 실행 필수)
|
|
16
|
+
|
|
17
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존.
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
mkdir -p .omc/state
|
|
21
|
+
echo "[deprecated] tfx-remote-spawn -> use: tfx-remote" >&2
|
|
22
|
+
echo "[DEPRECATED] tfx-remote-spawn — see tfx-remote"
|
|
23
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-remote-spawn -> tfx-remote" >> .omc/state/alias-usage.log
|
|
24
|
+
```
|
|
25
|
+
|
|
15
26
|
## Alias mapping
|
|
16
27
|
|
|
17
28
|
- `tfx-remote-spawn <host> [prompt]` → `tfx-remote spawn <host> [prompt]`
|
|
@@ -21,10 +21,16 @@ argument-hint: "<PRD 경로 — tfx-auto 로 passthrough>"
|
|
|
21
21
|
|
|
22
22
|
## 동작
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
canonical 위임 **이전** 에 아래 bash 블록을 한 번 실행한다. Phase 5 (v11) 물리 삭제 게이트는 `.omc/state/alias-usage.log` 의 7일 zero-usage 검증에 의존 — 이 logging 이 빠지면 게이트가 영영 열리지 않는다.
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
mkdir -p .omc/state
|
|
28
|
+
echo "[deprecated] tfx-swarm -> use: tfx-auto --parallel swarm --mode consensus --isolation worktree" >&2
|
|
29
|
+
echo "[DEPRECATED] tfx-swarm — see tfx-auto --parallel swarm --mode consensus --isolation worktree"
|
|
30
|
+
echo "$(date -u +%Y-%m-%dT%H:%M:%SZ) tfx-swarm -> tfx-auto --parallel swarm --mode consensus --isolation worktree" >> .omc/state/alias-usage.log
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
1. 위 bash 블록 실행 (stderr 경고 + stdout `[DEPRECATED]` 마커 + alias-usage.log append).
|
|
28
34
|
2. ARGUMENTS 전체 앞에 `--parallel swarm --mode consensus --isolation worktree` 를 prepend 하여 `Skill("tfx-auto")` 호출.
|
|
29
35
|
3. tfx-auto 의 플래그 오버라이드 로직이 `tfx swarm <prd>` CLI 를 호출한다 (실제 swarm 엔진은 변경 없음).
|
|
30
36
|
|