triflux 10.17.0 → 10.17.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 +34 -0
- package/.claude-plugin/plugin.json +22 -0
- package/bin/triflux.mjs +57 -5
- package/config/mcp-registry.json +29 -0
- package/hooks/hook-registry.json +1 -1
- package/hub/lib/process-utils.mjs +676 -86
- package/hub/server.mjs +62 -5
- package/hub/team/swarm-hypervisor.mjs +59 -10
- package/hub/team/worktree-lifecycle.mjs +37 -8
- package/package.json +67 -23
- package/scripts/mcp-cleanup.ps1 +9 -0
- package/scripts/session-stale-cleanup.mjs +102 -1
- package/scripts/tfx-route-post.mjs +5 -1
- package/tui/codex-profile.mjs +459 -0
- package/tui/core.mjs +266 -0
- package/tui/doctor.mjs +375 -0
- package/tui/gemini-profile.mjs +299 -0
- package/tui/monitor-data.mjs +152 -0
- package/tui/monitor.mjs +333 -0
- package/tui/setup.mjs +599 -0
- package/CLAUDE.md +0 -169
- package/references/cli-parameter-reference.md +0 -240
- package/references/codex-plugin-cc-analysis.md +0 -706
- package/references/codex-plugin-cc-code-patterns.md +0 -468
- package/references/hosts.json +0 -46
|
@@ -0,0 +1,34 @@
|
|
|
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": "Tri-CLI orchestrator for Claude Code. Routes tasks across Claude + Codex + Gemini with consensus intelligence, natural language routing, 42 skills, and cross-model review.",
|
|
12
|
+
"version": "10.17.1",
|
|
13
|
+
"author": {
|
|
14
|
+
"name": "tellang"
|
|
15
|
+
},
|
|
16
|
+
"source": {
|
|
17
|
+
"source": "npm",
|
|
18
|
+
"package": "triflux"
|
|
19
|
+
},
|
|
20
|
+
"category": "productivity",
|
|
21
|
+
"homepage": "https://github.com/tellang/triflux",
|
|
22
|
+
"tags": [
|
|
23
|
+
"multi-model",
|
|
24
|
+
"codex",
|
|
25
|
+
"gemini",
|
|
26
|
+
"cli-routing",
|
|
27
|
+
"orchestration",
|
|
28
|
+
"cost-optimization",
|
|
29
|
+
"dag-execution"
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"version": "10.17.1"
|
|
34
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "triflux",
|
|
3
|
+
"version": "10.17.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
|
@@ -462,14 +462,14 @@ function printJson(payload) {
|
|
|
462
462
|
process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
|
|
463
463
|
}
|
|
464
464
|
|
|
465
|
-
function withConsoleSilenced(enabled, fn) {
|
|
465
|
+
async function withConsoleSilenced(enabled, fn) {
|
|
466
466
|
if (!enabled) return fn();
|
|
467
467
|
const originalLog = console.log;
|
|
468
468
|
const originalError = console.error;
|
|
469
469
|
console.log = () => {};
|
|
470
470
|
console.error = () => {};
|
|
471
471
|
try {
|
|
472
|
-
return fn();
|
|
472
|
+
return await fn();
|
|
473
473
|
} finally {
|
|
474
474
|
console.log = originalLog;
|
|
475
475
|
console.error = originalError;
|
|
@@ -1846,6 +1846,7 @@ async function cmdDoctor(options = {}) {
|
|
|
1846
1846
|
checks: [],
|
|
1847
1847
|
actions: [],
|
|
1848
1848
|
hook_coverage: { total: 0, registered: 0, missing: [] },
|
|
1849
|
+
fsmonitorDaemons: { stale: 0, killed: 0 },
|
|
1849
1850
|
issue_count: 0,
|
|
1850
1851
|
};
|
|
1851
1852
|
|
|
@@ -3126,9 +3127,11 @@ async function cmdDoctor(options = {}) {
|
|
|
3126
3127
|
section("Orphan Processes");
|
|
3127
3128
|
if (process.platform === "win32") {
|
|
3128
3129
|
try {
|
|
3129
|
-
const {
|
|
3130
|
-
|
|
3131
|
-
|
|
3130
|
+
const {
|
|
3131
|
+
cleanupOrphanNodeProcesses,
|
|
3132
|
+
cleanupStaleFsmonitorDaemons,
|
|
3133
|
+
findFsmonitorDaemons,
|
|
3134
|
+
} = await import("../hub/lib/process-utils.mjs");
|
|
3132
3135
|
if (fix) {
|
|
3133
3136
|
const { killed, remaining } = cleanupOrphanNodeProcesses();
|
|
3134
3137
|
if (killed > 0) {
|
|
@@ -3157,6 +3160,55 @@ async function cmdDoctor(options = {}) {
|
|
|
3157
3160
|
ok(`node.exe ${count}개 (정상 범위)`);
|
|
3158
3161
|
}
|
|
3159
3162
|
}
|
|
3163
|
+
|
|
3164
|
+
const fsmonitorStale = findFsmonitorDaemons({
|
|
3165
|
+
minAgeMs: 24 * 60 * 60 * 1000,
|
|
3166
|
+
});
|
|
3167
|
+
let fsmonitorKilled = 0;
|
|
3168
|
+
if (fix && fsmonitorStale.length > 0) {
|
|
3169
|
+
const cleanupResult = cleanupStaleFsmonitorDaemons({
|
|
3170
|
+
minAgeMs: 24 * 60 * 60 * 1000,
|
|
3171
|
+
});
|
|
3172
|
+
fsmonitorKilled = cleanupResult.killed;
|
|
3173
|
+
report.actions.push({
|
|
3174
|
+
type: "git-fsmonitor-cleanup",
|
|
3175
|
+
status:
|
|
3176
|
+
fsmonitorKilled === fsmonitorStale.length ? "ok" : "partial",
|
|
3177
|
+
stale: fsmonitorStale.length,
|
|
3178
|
+
killed: fsmonitorKilled,
|
|
3179
|
+
});
|
|
3180
|
+
warn(
|
|
3181
|
+
`stale git fsmonitor daemon ${fsmonitorKilled}/${fsmonitorStale.length}개 정리`,
|
|
3182
|
+
);
|
|
3183
|
+
} else if (fsmonitorStale.length > 0) {
|
|
3184
|
+
warn(
|
|
3185
|
+
`stale git fsmonitor daemon ${fsmonitorStale.length}개 발견 (24h+). 정리: tfx doctor --fix`,
|
|
3186
|
+
);
|
|
3187
|
+
} else {
|
|
3188
|
+
ok("stale git fsmonitor daemon 없음");
|
|
3189
|
+
}
|
|
3190
|
+
|
|
3191
|
+
report.fsmonitorDaemons = {
|
|
3192
|
+
stale: fsmonitorStale.length,
|
|
3193
|
+
killed: fsmonitorKilled,
|
|
3194
|
+
};
|
|
3195
|
+
addDoctorCheck(report, {
|
|
3196
|
+
name: "fsmonitor-daemons",
|
|
3197
|
+
status: fsmonitorStale.length > 0 ? "warning" : "ok",
|
|
3198
|
+
stale: fsmonitorStale.length,
|
|
3199
|
+
killed: fsmonitorKilled,
|
|
3200
|
+
detail: fsmonitorStale.map((p) => ({
|
|
3201
|
+
pid: p.pid,
|
|
3202
|
+
parentPid: p.parentPid,
|
|
3203
|
+
ageHours: Number((p.ageMs / (60 * 60 * 1000)).toFixed(1)),
|
|
3204
|
+
})),
|
|
3205
|
+
});
|
|
3206
|
+
if (
|
|
3207
|
+
fsmonitorStale.length > 0 &&
|
|
3208
|
+
(!fix || fsmonitorKilled < fsmonitorStale.length)
|
|
3209
|
+
) {
|
|
3210
|
+
issues++;
|
|
3211
|
+
}
|
|
3160
3212
|
} catch (e) {
|
|
3161
3213
|
info(`고아 프로세스 검사 실패: ${e.message}`);
|
|
3162
3214
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "mcp-registry-schema",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"description": "MCP 서버 중앙 레지스트리 — 진실의 원천",
|
|
5
|
+
"defaults": {
|
|
6
|
+
"transport": "hub-url",
|
|
7
|
+
"hub_base": "http://127.0.0.1:27888"
|
|
8
|
+
},
|
|
9
|
+
"servers": {
|
|
10
|
+
"tfx-hub": {
|
|
11
|
+
"transport": "hub-url",
|
|
12
|
+
"url": "http://127.0.0.1:27888/mcp",
|
|
13
|
+
"safe": true,
|
|
14
|
+
"targets": ["claude", "gemini", "codex"],
|
|
15
|
+
"description": "triflux Hub MCP 서버"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"policies": {
|
|
19
|
+
"stdio_action": "replace-with-hub",
|
|
20
|
+
"unknown_server_action": "warn",
|
|
21
|
+
"watched_paths": [
|
|
22
|
+
"~/.gemini/settings.json",
|
|
23
|
+
"~/.codex/config.toml",
|
|
24
|
+
"~/.claude/settings.json",
|
|
25
|
+
"~/.claude/settings.local.json",
|
|
26
|
+
".mcp.json"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
}
|
package/hooks/hook-registry.json
CHANGED
|
@@ -244,7 +244,7 @@
|
|
|
244
244
|
"matcher": "*",
|
|
245
245
|
"command": "powershell -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -File \"${HOME}/.claude/scripts/mcp-cleanup.ps1\"",
|
|
246
246
|
"priority": 100,
|
|
247
|
-
"enabled":
|
|
247
|
+
"enabled": false,
|
|
248
248
|
"timeout": 8,
|
|
249
249
|
"blocking": false,
|
|
250
250
|
"description": "MCP 고아 프로세스 정리"
|