triflux 8.12.1 → 8.12.5
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/bin/triflux.mjs +64 -0
- 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/backend.mjs +2 -1
- 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 +15 -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 +17 -0
- 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 +30 -0
- package/scripts/cache-doctor.mjs +149 -0
- package/scripts/cache-warmup.mjs +514 -0
- package/scripts/headless-guard.mjs +48 -3
- package/scripts/hub-ensure.mjs +120 -120
- package/scripts/lib/env-probe.mjs +130 -0
- package/scripts/lib/mcp-filter.mjs +11 -1
- package/scripts/lib/mcp-manifest.mjs +79 -0
- package/scripts/lib/remote-spawn-transfer.mjs +196 -0
- package/scripts/mcp-check.mjs +237 -127
- package/scripts/mcp-gateway-config.mjs +104 -7
- package/scripts/mcp-gateway-integration-test.mjs +228 -0
- package/scripts/mcp-gateway-start.mjs +7 -0
- package/scripts/mcp-gateway-start.ps1 +17 -14
- package/scripts/mcp-gateway-verify.mjs +15 -1
- package/scripts/preflight-cache.mjs +2 -71
- package/scripts/remote-spawn.mjs +404 -40
- package/scripts/setup.mjs +17 -0
- package/scripts/tfx-route-worker.mjs +223 -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-auto/SKILL.md +1 -0
- 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/SKILL.md +1 -0
- package/skills/tfx-codex-swarm/SKILL.md +456 -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-doctor/SKILL.md +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 +52 -51
- package/skills/tfx-setup/SKILL.md +202 -7
- 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
package/README.ko.md
CHANGED
|
@@ -313,7 +313,7 @@ tfx setup
|
|
|
313
313
|
# Team — Multi-CLI 병렬 오케스트레이션
|
|
314
314
|
/tfx-multi "refactor auth + update UI + add tests"
|
|
315
315
|
```
|
|
316
|
-
|
|
316
|
+
> **참고**: Deep 스킬(`/tfx-deep-*`, `/tfx-persist`, `/tfx-ralph`)은 완전한 Tri-CLI 합의(Tier 1)를 위해 **psmux**(또는 tmux), **triflux Hub**, **Codex CLI**, **Gemini CLI**가 필요합니다. 전제조건이 충족되지 않으면 Tier 3(Claude 단독, single-model) 모드로 자동 전환됩니다. `tfx doctor`로 환경을 확인하세요.
|
|
317
317
|
|
|
318
318
|
---
|
|
319
319
|
|
package/README.md
CHANGED
|
@@ -313,7 +313,7 @@ tfx setup
|
|
|
313
313
|
# Team — Multi-CLI parallel orchestration
|
|
314
314
|
/tfx-multi "refactor auth + update UI + add tests"
|
|
315
315
|
```
|
|
316
|
-
|
|
316
|
+
> **Note**: Deep skills (`/tfx-deep-*`, `/tfx-persist`, `/tfx-ralph`) require **psmux** (or tmux), **triflux Hub**, **Codex CLI**, and **Gemini CLI** for full Tri-CLI consensus (Tier 1). Without these prerequisites, skills automatically degrade to Tier 3 (Claude-only, single-model) mode. Run `tfx doctor` to check your environment.
|
|
317
317
|
|
|
318
318
|
---
|
|
319
319
|
|
package/bin/triflux.mjs
CHANGED
|
@@ -1030,6 +1030,20 @@ async function cmdDoctor(options = {}) {
|
|
|
1030
1030
|
warn("Gemini 쿼터 캐시 재생성 실패");
|
|
1031
1031
|
}
|
|
1032
1032
|
}
|
|
1033
|
+
try {
|
|
1034
|
+
const { buildAll } = await import("../scripts/cache-warmup.mjs");
|
|
1035
|
+
const warmupSummary = buildAll({ cwd: process.cwd(), force: true });
|
|
1036
|
+
if (warmupSummary.ok) {
|
|
1037
|
+
report.actions.push({ type: "rebuild", name: "warmup-caches", status: "ok", built: warmupSummary.built });
|
|
1038
|
+
ok("Phase 1 웜업 캐시 재생성됨");
|
|
1039
|
+
} else {
|
|
1040
|
+
report.actions.push({ type: "rebuild", name: "warmup-caches", status: "failed" });
|
|
1041
|
+
warn("Phase 1 웜업 캐시 재생성 실패");
|
|
1042
|
+
}
|
|
1043
|
+
} catch {
|
|
1044
|
+
report.actions.push({ type: "rebuild", name: "warmup-caches", status: "failed" });
|
|
1045
|
+
warn("Phase 1 웜업 캐시 재생성 실패");
|
|
1046
|
+
}
|
|
1033
1047
|
console.log(`\n ${LINE}`);
|
|
1034
1048
|
console.log(` ${GREEN_BRIGHT}${BOLD}✓ 캐시 초기화 + 재생성 완료${RESET}\n`);
|
|
1035
1049
|
report.status = report.actions.some((action) => action.status === "failed") ? "issues" : "ok";
|
|
@@ -1083,6 +1097,19 @@ async function cmdDoctor(options = {}) {
|
|
|
1083
1097
|
} catch { try { unlinkSync(fp); cleaned++; ok(`손상된 캐시 정리: ${name}`); } catch {} }
|
|
1084
1098
|
}
|
|
1085
1099
|
if (cleaned === 0) info("에러 캐시 없음");
|
|
1100
|
+
try {
|
|
1101
|
+
const { fixCaches } = await import("../scripts/cache-doctor.mjs");
|
|
1102
|
+
const cacheRepair = await fixCaches({ cwd: process.cwd() });
|
|
1103
|
+
if (cacheRepair.fixed.length > 0 && cacheRepair.ok) {
|
|
1104
|
+
ok(`웜업 캐시 자동 복구: ${cacheRepair.fixed.join(", ")}`);
|
|
1105
|
+
} else if (cacheRepair.fixed.length > 0) {
|
|
1106
|
+
warn(`웜업 캐시 자동 복구 실패: ${cacheRepair.fixed.join(", ")}`);
|
|
1107
|
+
} else {
|
|
1108
|
+
info("웜업 캐시: 이미 정상 상태");
|
|
1109
|
+
}
|
|
1110
|
+
} catch {
|
|
1111
|
+
warn("웜업 캐시 자동 복구 실패");
|
|
1112
|
+
}
|
|
1086
1113
|
console.log(`\n ${LINE}`);
|
|
1087
1114
|
info("수정 완료 — 아래 진단 결과를 확인하세요");
|
|
1088
1115
|
console.log("");
|
|
@@ -1257,6 +1284,43 @@ async function cmdDoctor(options = {}) {
|
|
|
1257
1284
|
info(`수동: node ${join(PKG_ROOT, "scripts", "mcp-check.mjs")}`);
|
|
1258
1285
|
}
|
|
1259
1286
|
|
|
1287
|
+
// 9.5. Phase 1 웜업 캐시
|
|
1288
|
+
section("Warmup Cache");
|
|
1289
|
+
try {
|
|
1290
|
+
const { verifyCaches } = await import("../scripts/cache-doctor.mjs");
|
|
1291
|
+
const cacheVerification = verifyCaches({ cwd: process.cwd() });
|
|
1292
|
+
const brokenCaches = cacheVerification.results.filter((result) => result.status !== "ok");
|
|
1293
|
+
|
|
1294
|
+
addDoctorCheck(report, {
|
|
1295
|
+
name: "warmup-cache",
|
|
1296
|
+
status: cacheVerification.ok ? "ok" : "issues",
|
|
1297
|
+
files: cacheVerification.results.map((result) => ({
|
|
1298
|
+
target: result.target,
|
|
1299
|
+
status: result.status,
|
|
1300
|
+
path: result.file,
|
|
1301
|
+
})),
|
|
1302
|
+
...(cacheVerification.ok ? {} : { fix: "tfx doctor --fix" }),
|
|
1303
|
+
});
|
|
1304
|
+
|
|
1305
|
+
if (brokenCaches.length === 0) {
|
|
1306
|
+
ok("4개 웜업 캐시 정상");
|
|
1307
|
+
} else {
|
|
1308
|
+
warn(`${brokenCaches.length}개 웜업 캐시 이슈 발견`);
|
|
1309
|
+
for (const entry of brokenCaches) {
|
|
1310
|
+
info(`${entry.target}: ${entry.status}`);
|
|
1311
|
+
}
|
|
1312
|
+
if (!fix) issues += brokenCaches.length;
|
|
1313
|
+
}
|
|
1314
|
+
} catch (error) {
|
|
1315
|
+
addDoctorCheck(report, {
|
|
1316
|
+
name: "warmup-cache",
|
|
1317
|
+
status: "invalid",
|
|
1318
|
+
fix: "node scripts/cache-doctor.mjs --fix",
|
|
1319
|
+
});
|
|
1320
|
+
warn(`웜업 캐시 검사 실패: ${error.message}`);
|
|
1321
|
+
issues++;
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1260
1324
|
// 10. CLI 이슈 트래커
|
|
1261
1325
|
section("CLI Issues");
|
|
1262
1326
|
const issuesFile = join(CLAUDE_DIR, "cache", "cli-issues.jsonl");
|
package/hooks/hooks.json
CHANGED
|
@@ -1,51 +1,56 @@
|
|
|
1
|
-
{
|
|
2
|
-
"description": "triflux lifecycle hooks — CLI routing setup and HUD integration",
|
|
3
|
-
"hooks": {
|
|
4
|
-
"SessionStart": [
|
|
5
|
-
{
|
|
6
|
-
"matcher": "*",
|
|
7
|
-
"hooks": [
|
|
8
|
-
{
|
|
9
|
-
"type": "command",
|
|
10
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/setup.mjs\"",
|
|
11
|
-
"timeout": 10
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"type": "command",
|
|
15
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hub-ensure.mjs\"",
|
|
16
|
-
"timeout": 8
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"type": "command",
|
|
20
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/
|
|
21
|
-
"timeout":
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"description": "triflux lifecycle hooks — CLI routing setup and HUD integration",
|
|
3
|
+
"hooks": {
|
|
4
|
+
"SessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"matcher": "*",
|
|
7
|
+
"hooks": [
|
|
8
|
+
{
|
|
9
|
+
"type": "command",
|
|
10
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/setup.mjs\"",
|
|
11
|
+
"timeout": 10
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"type": "command",
|
|
15
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hub-ensure.mjs\"",
|
|
16
|
+
"timeout": 8
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"type": "command",
|
|
20
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/mcp-gateway-ensure.mjs\"",
|
|
21
|
+
"timeout": 8
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"type": "command",
|
|
25
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/preflight-cache.mjs\"",
|
|
26
|
+
"timeout": 5
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"UserPromptSubmit": [
|
|
32
|
+
{
|
|
33
|
+
"matcher": "*",
|
|
34
|
+
"hooks": [
|
|
35
|
+
{
|
|
36
|
+
"type": "command",
|
|
37
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/run.cjs\" \"${CLAUDE_PLUGIN_ROOT}/scripts/keyword-detector.mjs\"",
|
|
38
|
+
"timeout": 5
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"Stop": [
|
|
44
|
+
{
|
|
45
|
+
"matcher": "*",
|
|
46
|
+
"hooks": [
|
|
47
|
+
{
|
|
48
|
+
"type": "command",
|
|
49
|
+
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/pipeline-stop.mjs\"",
|
|
50
|
+
"timeout": 5
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
}
|