triflux 7.1.3 → 7.2.1
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/marketplace.json +31 -31
- package/.claude-plugin/plugin.json +22 -23
- package/bin/triflux.mjs +18 -5
- package/hooks/keyword-rules.json +393 -361
- package/hub/bridge.mjs +799 -786
- package/hub/delegator/contracts.mjs +37 -38
- package/hub/delegator/schema/delegator-tools.schema.json +250 -250
- package/hub/delegator/service.mjs +307 -302
- package/hub/intent.mjs +108 -11
- package/hub/lib/process-utils.mjs +20 -0
- package/hub/pipe.mjs +589 -589
- package/hub/pipeline/gates/confidence.mjs +1 -1
- package/hub/pipeline/gates/selfcheck.mjs +2 -4
- package/hub/pipeline/state.mjs +191 -187
- package/hub/pipeline/transitions.mjs +124 -120
- package/hub/public/dashboard.html +355 -349
- package/hub/quality/deslop.mjs +5 -3
- package/hub/reflexion.mjs +5 -1
- package/hub/research.mjs +6 -1
- package/hub/router.mjs +791 -782
- package/hub/server.mjs +893 -822
- package/hub/store.mjs +807 -778
- package/hub/team/agent-map.json +10 -0
- package/hub/team/ansi.mjs +3 -4
- package/hub/team/cli/commands/control.mjs +43 -43
- package/hub/team/cli/commands/interrupt.mjs +36 -36
- package/hub/team/cli/commands/kill.mjs +3 -3
- package/hub/team/cli/commands/send.mjs +37 -37
- package/hub/team/cli/commands/start/index.mjs +18 -8
- package/hub/team/cli/commands/start/parse-args.mjs +3 -1
- package/hub/team/cli/commands/start/start-headless.mjs +4 -1
- package/hub/team/cli/commands/status.mjs +87 -87
- package/hub/team/cli/commands/stop.mjs +1 -1
- package/hub/team/cli/commands/task.mjs +1 -1
- package/hub/team/cli/index.mjs +41 -39
- package/hub/team/cli/manifest.mjs +29 -28
- package/hub/team/cli/services/hub-client.mjs +37 -0
- package/hub/team/cli/services/state-store.mjs +26 -12
- package/hub/team/dashboard.mjs +11 -4
- package/hub/team/handoff.mjs +12 -0
- package/hub/team/headless.mjs +202 -200
- package/hub/team/native-supervisor.mjs +386 -346
- package/hub/team/nativeProxy.mjs +680 -692
- package/hub/team/staleState.mjs +361 -369
- package/hub/team/tui-viewer.mjs +27 -3
- package/hub/team/tui.mjs +1 -0
- package/hub/token-mode.mjs +114 -24
- package/hub/workers/delegator-mcp.mjs +1059 -1057
- package/hud/colors.mjs +88 -0
- package/hud/constants.mjs +78 -0
- package/hud/hud-qos-status.mjs +206 -1872
- package/hud/providers/claude.mjs +309 -0
- package/hud/providers/codex.mjs +151 -0
- package/hud/providers/gemini.mjs +320 -0
- package/hud/renderers.mjs +424 -0
- package/hud/terminal.mjs +140 -0
- package/hud/utils.mjs +271 -0
- package/package.json +1 -2
- package/scripts/__tests__/keyword-detector.test.mjs +234 -234
- package/scripts/headless-guard-fast.sh +21 -0
- package/scripts/headless-guard.mjs +26 -6
- package/scripts/lib/keyword-rules.mjs +166 -168
- package/scripts/setup.mjs +720 -690
- package/scripts/tfx-route-post.mjs +424 -424
- package/scripts/tfx-route.sh +1663 -1650
- package/scripts/tmp-cleanup.mjs +74 -0
- package/skills/tfx-auto/SKILL.md +279 -278
- package/skills/tfx-auto-codex/SKILL.md +98 -77
- package/skills/tfx-codex/SKILL.md +65 -65
- package/skills/tfx-gemini/SKILL.md +83 -82
- package/skills/tfx-hub/SKILL.md +205 -136
- package/skills/tfx-multi/SKILL.md +11 -5
- package/.mcp.json +0 -8
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
|
|
3
|
-
"name": "triflux",
|
|
4
|
-
"description": "CLI-first multi-model orchestrator — Codex/Gemini/Claude routing with DAG execution, auto-triage, and cost optimization",
|
|
5
|
-
"owner": {
|
|
6
|
-
"name": "tellang"
|
|
7
|
-
},
|
|
8
|
-
"plugins": [
|
|
9
|
-
{
|
|
10
|
-
"name": "triflux",
|
|
11
|
-
"description": "CLI-first multi-model orchestrator for Claude Code. Routes tasks to Codex, Gemini, and Claude CLIs with automatic triage (Sonnet classification + Opus decomposition), DAG-based parallel execution, and cost-optimized routing. Includes 16 skills, HUD status bar, and shell-based CLI routing wrapper.",
|
|
12
|
-
"version": "1.
|
|
13
|
-
"author": {
|
|
14
|
-
"name": "tellang"
|
|
15
|
-
},
|
|
16
|
-
"source": "./",
|
|
17
|
-
"category": "productivity",
|
|
18
|
-
"homepage": "https://github.com/tellang/triflux",
|
|
19
|
-
"tags": [
|
|
20
|
-
"multi-model",
|
|
21
|
-
"codex",
|
|
22
|
-
"gemini",
|
|
23
|
-
"cli-routing",
|
|
24
|
-
"orchestration",
|
|
25
|
-
"cost-optimization",
|
|
26
|
-
"dag-execution"
|
|
27
|
-
]
|
|
28
|
-
}
|
|
29
|
-
],
|
|
30
|
-
"version": "1.
|
|
31
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
|
|
3
|
+
"name": "triflux",
|
|
4
|
+
"description": "CLI-first multi-model orchestrator — Codex/Gemini/Claude routing with DAG execution, auto-triage, and cost optimization",
|
|
5
|
+
"owner": {
|
|
6
|
+
"name": "tellang"
|
|
7
|
+
},
|
|
8
|
+
"plugins": [
|
|
9
|
+
{
|
|
10
|
+
"name": "triflux",
|
|
11
|
+
"description": "CLI-first multi-model orchestrator for Claude Code. Routes tasks to Codex, Gemini, and Claude CLIs with automatic triage (Sonnet classification + Opus decomposition), DAG-based parallel execution, and cost-optimized routing. Includes 16 skills, HUD status bar, and shell-based CLI routing wrapper.",
|
|
12
|
+
"version": "7.1.4",
|
|
13
|
+
"author": {
|
|
14
|
+
"name": "tellang"
|
|
15
|
+
},
|
|
16
|
+
"source": "./",
|
|
17
|
+
"category": "productivity",
|
|
18
|
+
"homepage": "https://github.com/tellang/triflux",
|
|
19
|
+
"tags": [
|
|
20
|
+
"multi-model",
|
|
21
|
+
"codex",
|
|
22
|
+
"gemini",
|
|
23
|
+
"cli-routing",
|
|
24
|
+
"orchestration",
|
|
25
|
+
"cost-optimization",
|
|
26
|
+
"dag-execution"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"version": "7.1.4"
|
|
31
|
+
}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "triflux",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "CLI-first multi-model orchestrator for Claude Code — route tasks to Codex, Gemini, and Claude",
|
|
5
|
-
"author": {
|
|
6
|
-
"name": "tellang"
|
|
7
|
-
},
|
|
8
|
-
"repository": "https://github.com/tellang/triflux",
|
|
9
|
-
"homepage": "https://github.com/tellang/triflux",
|
|
10
|
-
"license": "MIT",
|
|
11
|
-
"keywords": [
|
|
12
|
-
"claude-code",
|
|
13
|
-
"plugin",
|
|
14
|
-
"codex",
|
|
15
|
-
"gemini",
|
|
16
|
-
"cli-routing",
|
|
17
|
-
"orchestration",
|
|
18
|
-
"multi-model"
|
|
19
|
-
],
|
|
20
|
-
"skills": "./skills/",
|
|
21
|
-
"hooks": "./hooks/hooks.json"
|
|
22
|
-
|
|
23
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "triflux",
|
|
3
|
+
"version": "7.2.1",
|
|
4
|
+
"description": "CLI-first multi-model orchestrator for Claude Code — route tasks to Codex, Gemini, and Claude",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "tellang"
|
|
7
|
+
},
|
|
8
|
+
"repository": "https://github.com/tellang/triflux",
|
|
9
|
+
"homepage": "https://github.com/tellang/triflux",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": [
|
|
12
|
+
"claude-code",
|
|
13
|
+
"plugin",
|
|
14
|
+
"codex",
|
|
15
|
+
"gemini",
|
|
16
|
+
"cli-routing",
|
|
17
|
+
"orchestration",
|
|
18
|
+
"multi-model"
|
|
19
|
+
],
|
|
20
|
+
"skills": "./skills/",
|
|
21
|
+
"hooks": "./hooks/hooks.json"
|
|
22
|
+
}
|
package/bin/triflux.mjs
CHANGED
|
@@ -139,6 +139,7 @@ const CLI_COMMAND_SCHEMAS = Object.freeze({
|
|
|
139
139
|
});
|
|
140
140
|
|
|
141
141
|
// ── 유틸리티 ──
|
|
142
|
+
// ok/warn/fail/info/section 의 console.log는 디버그 로그가 아닌 의도된 CLI 출력입니다.
|
|
142
143
|
|
|
143
144
|
function ok(msg) { console.log(` ${GREEN_BRIGHT}✓${RESET} ${msg}`); }
|
|
144
145
|
function warn(msg) { console.log(` ${YELLOW}⚠${RESET} ${msg}`); }
|
|
@@ -1039,7 +1040,7 @@ async function cmdDoctor(options = {}) {
|
|
|
1039
1040
|
ok("설치됨");
|
|
1040
1041
|
} else {
|
|
1041
1042
|
addDoctorCheck(report, { name: "hud-qos-status.mjs", status: "missing", path: hud, optional: true, fix: "tfx setup" });
|
|
1042
|
-
warn(
|
|
1043
|
+
warn(`미설치 ${GRAY}(선택사항)${RESET}`);
|
|
1043
1044
|
}
|
|
1044
1045
|
|
|
1045
1046
|
// 3. Codex CLI
|
|
@@ -1207,6 +1208,17 @@ async function cmdDoctor(options = {}) {
|
|
|
1207
1208
|
if (e.ts > groups[key].ts) { groups[key].ts = e.ts; groups[key].snippet = e.snippet; }
|
|
1208
1209
|
}
|
|
1209
1210
|
|
|
1211
|
+
// semver 비교 (lexicographic 비교 버그 방지)
|
|
1212
|
+
function semverGte(a, b) {
|
|
1213
|
+
const pa = a.split('.').map(Number);
|
|
1214
|
+
const pb = b.split('.').map(Number);
|
|
1215
|
+
for (let i = 0; i < 3; i++) {
|
|
1216
|
+
if ((pa[i] || 0) > (pb[i] || 0)) return true;
|
|
1217
|
+
if ((pa[i] || 0) < (pb[i] || 0)) return false;
|
|
1218
|
+
}
|
|
1219
|
+
return true;
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1210
1222
|
// 알려진 해결 버전 (패턴별 수정된 triflux 버전)
|
|
1211
1223
|
const KNOWN_FIXES = {
|
|
1212
1224
|
"gemini:deprecated_flag": "1.8.9", // -p → --prompt
|
|
@@ -1217,7 +1229,7 @@ async function cmdDoctor(options = {}) {
|
|
|
1217
1229
|
|
|
1218
1230
|
for (const [key, g] of Object.entries(groups)) {
|
|
1219
1231
|
const fixVer = KNOWN_FIXES[key];
|
|
1220
|
-
if (fixVer && currentVer
|
|
1232
|
+
if (fixVer && semverGte(currentVer, fixVer)) {
|
|
1221
1233
|
// 해결된 이슈 — 자동 정리
|
|
1222
1234
|
cleaned += g.count;
|
|
1223
1235
|
continue;
|
|
@@ -1238,7 +1250,7 @@ async function cmdDoctor(options = {}) {
|
|
|
1238
1250
|
const remaining = entries.filter(e => {
|
|
1239
1251
|
const key = `${e.cli}:${e.pattern}`;
|
|
1240
1252
|
const fixVer = KNOWN_FIXES[key];
|
|
1241
|
-
return !(fixVer && currentVer
|
|
1253
|
+
return !(fixVer && semverGte(currentVer, fixVer));
|
|
1242
1254
|
});
|
|
1243
1255
|
writeFileSync(issuesFile, remaining.map(e => JSON.stringify(e)).join("\n") + (remaining.length ? "\n" : ""));
|
|
1244
1256
|
ok(`${cleaned}개 해결된 이슈 자동 정리됨`);
|
|
@@ -1421,10 +1433,11 @@ async function cmdDoctor(options = {}) {
|
|
|
1421
1433
|
if (!hasActiveMember && teamConfig.leadSessionId) {
|
|
1422
1434
|
try {
|
|
1423
1435
|
const sessionToken = teamConfig.leadSessionId.toLowerCase();
|
|
1436
|
+
const safeToken = teamConfig.leadSessionId.slice(0, 8).replace(/[^a-zA-Z0-9\-]/g, '');
|
|
1424
1437
|
// Claude Code 프로세스에서 세션 ID 검색
|
|
1425
1438
|
if (process.platform === "win32") {
|
|
1426
1439
|
const psOut = execSync(
|
|
1427
|
-
`powershell -NoProfile -Command "$ErrorActionPreference='SilentlyContinue'; Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match '${
|
|
1440
|
+
`powershell -NoProfile -Command "$ErrorActionPreference='SilentlyContinue'; Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match '${safeToken}' } | Select-Object ProcessId | ConvertTo-Json -Compress"`,
|
|
1428
1441
|
{ encoding: "utf8", timeout: 8000, stdio: ["ignore", "pipe", "ignore"], windowsHide: true },
|
|
1429
1442
|
).trim();
|
|
1430
1443
|
if (psOut && psOut !== "null") {
|
|
@@ -1434,7 +1447,7 @@ async function cmdDoctor(options = {}) {
|
|
|
1434
1447
|
}
|
|
1435
1448
|
} else {
|
|
1436
1449
|
const psOut = execSync(
|
|
1437
|
-
`ps -ax -o pid=,command= | grep -i '${
|
|
1450
|
+
`ps -ax -o pid=,command= | grep -i '${safeToken}' | grep -v grep`,
|
|
1438
1451
|
{ encoding: "utf8", timeout: 5000, stdio: ["ignore", "pipe", "ignore"] },
|
|
1439
1452
|
).trim();
|
|
1440
1453
|
hasActiveMember = psOut.length > 0;
|