triflux 6.0.3 → 6.0.4

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.
@@ -128,7 +128,9 @@ export async function runHeadless(sessionName, assignments, opts = {}) {
128
128
  } else {
129
129
  // ─── 기존 모드: 모든 pane을 한 번에 생성 ───
130
130
  const paneCount = assignments.length + 1;
131
- const session = createPsmuxSession(sessionName, { layout, paneCount });
131
+ // A2b fix: 2x2 레이아웃은 최대 4 pane — 초과 시 tiled로 자동 전환
132
+ const effectiveLayout = (layout === "2x2" && paneCount > 4) ? "tiled" : layout;
133
+ const session = createPsmuxSession(sessionName, { layout: effectiveLayout, paneCount });
132
134
  applyTrifluxTheme(sessionName);
133
135
  if (safeProgress) safeProgress({ type: "session_created", sessionName, panes: session.panes });
134
136
 
package/package.json CHANGED
@@ -1,66 +1,66 @@
1
- {
2
- "name": "triflux",
3
- "version": "6.0.3",
4
- "description": "CLI-first multi-model orchestrator for Claude Code — route tasks to Codex, Gemini, and Claude",
5
- "type": "module",
6
- "bin": {
7
- "triflux": "bin/triflux.mjs",
8
- "tfx": "bin/triflux.mjs",
9
- "tfl": "bin/triflux.mjs",
10
- "tfx-setup": "bin/tfx-setup.mjs",
11
- "tfx-doctor": "bin/tfx-doctor.mjs"
12
- },
13
- "files": [
14
- "bin",
15
- "hub",
16
- "skills",
17
- "!skills/tfx-workspace",
18
- "!**/failure-reports",
19
- "scripts",
20
- "hooks",
21
- "hud",
22
- ".claude-plugin",
23
- ".mcp.json",
24
- "README.md",
25
- "README.ko.md",
26
- "LICENSE"
27
- ],
28
- "scripts": {
29
- "setup": "node scripts/setup.mjs",
30
- "preinstall": "node scripts/preinstall.mjs",
31
- "postinstall": "node scripts/setup.mjs",
32
- "test": "node --test --test-force-exit --test-concurrency=1 \"tests/**/*.test.mjs\" \"scripts/__tests__/**/*.test.mjs\"",
33
- "test:unit": "node --test --test-force-exit --test-concurrency=1 tests/unit/**/*.test.mjs",
34
- "test:integration": "node --test --test-force-exit --test-concurrency=1 tests/integration/**/*.test.mjs",
35
- "test:route-smoke": "node --test scripts/test-tfx-route-no-claude-native.mjs"
36
- },
37
- "engines": {
38
- "node": ">=18.0.0"
39
- },
40
- "repository": {
41
- "type": "git",
42
- "url": "git+https://github.com/tellang/triflux.git"
43
- },
44
- "homepage": "https://github.com/tellang/triflux#readme",
45
- "author": "tellang",
46
- "license": "MIT",
47
- "dependencies": {
48
- "@modelcontextprotocol/sdk": "^1.27.1",
49
- "better-sqlite3": "^12.6.2",
50
- "pino": "^10.3.1",
51
- "pino-pretty": "^13.1.3",
52
- "systray2": "^2.1.4",
53
- "zod": "^4.0.0"
54
- },
55
- "keywords": [
56
- "claude-code",
57
- "plugin",
58
- "codex",
59
- "gemini",
60
- "cli-routing",
61
- "orchestration",
62
- "multi-model",
63
- "triflux",
64
- "tfx"
65
- ]
66
- }
1
+ {
2
+ "name": "triflux",
3
+ "version": "6.0.4",
4
+ "description": "CLI-first multi-model orchestrator for Claude Code — route tasks to Codex, Gemini, and Claude",
5
+ "type": "module",
6
+ "bin": {
7
+ "triflux": "bin/triflux.mjs",
8
+ "tfx": "bin/triflux.mjs",
9
+ "tfl": "bin/triflux.mjs",
10
+ "tfx-setup": "bin/tfx-setup.mjs",
11
+ "tfx-doctor": "bin/tfx-doctor.mjs"
12
+ },
13
+ "files": [
14
+ "bin",
15
+ "hub",
16
+ "skills",
17
+ "!skills/tfx-workspace",
18
+ "!**/failure-reports",
19
+ "scripts",
20
+ "hooks",
21
+ "hud",
22
+ ".claude-plugin",
23
+ ".mcp.json",
24
+ "README.md",
25
+ "README.ko.md",
26
+ "LICENSE"
27
+ ],
28
+ "scripts": {
29
+ "setup": "node scripts/setup.mjs",
30
+ "preinstall": "node scripts/preinstall.mjs",
31
+ "postinstall": "node scripts/setup.mjs",
32
+ "test": "node --test --test-force-exit --test-concurrency=1 \"tests/**/*.test.mjs\" \"scripts/__tests__/**/*.test.mjs\"",
33
+ "test:unit": "node --test --test-force-exit --test-concurrency=1 tests/unit/**/*.test.mjs",
34
+ "test:integration": "node --test --test-force-exit --test-concurrency=1 tests/integration/**/*.test.mjs",
35
+ "test:route-smoke": "node --test scripts/test-tfx-route-no-claude-native.mjs"
36
+ },
37
+ "engines": {
38
+ "node": ">=18.0.0"
39
+ },
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "git+https://github.com/tellang/triflux.git"
43
+ },
44
+ "homepage": "https://github.com/tellang/triflux#readme",
45
+ "author": "tellang",
46
+ "license": "MIT",
47
+ "dependencies": {
48
+ "@modelcontextprotocol/sdk": "^1.27.1",
49
+ "better-sqlite3": "^12.6.2",
50
+ "pino": "^10.3.1",
51
+ "pino-pretty": "^13.1.3",
52
+ "systray2": "^2.1.4",
53
+ "zod": "^4.0.0"
54
+ },
55
+ "keywords": [
56
+ "claude-code",
57
+ "plugin",
58
+ "codex",
59
+ "gemini",
60
+ "cli-routing",
61
+ "orchestration",
62
+ "multi-model",
63
+ "triflux",
64
+ "tfx"
65
+ ]
66
+ }
@@ -36,6 +36,22 @@ function stopHub() {
36
36
 
37
37
  const pid = Number(info.pid);
38
38
 
39
+ // D4 fix: PID 소유자 검증 — node 프로세스인지 확인 (PID 재사용 보호)
40
+ if (process.platform === "win32") {
41
+ try {
42
+ const taskInfo = execFileSync("tasklist", ["/FI", `PID eq ${pid}`, "/FO", "CSV", "/NH"], {
43
+ encoding: "utf8", stdio: ["pipe", "pipe", "ignore"], timeout: 5000, windowsHide: true,
44
+ }).trim();
45
+ if (!taskInfo.toLowerCase().includes("node")) {
46
+ console.log(`[triflux preinstall] PID ${pid}은 node 프로세스가 아님 — kill 건너뜀`);
47
+ try { unlinkSync(HUB_PID_FILE); } catch {}
48
+ return;
49
+ }
50
+ } catch {
51
+ // tasklist 실패 — 안전하게 진행 (프로세스가 이미 죽었을 수 있음)
52
+ }
53
+ }
54
+
39
55
  // 1단계: 프로세스 종료 — Windows는 taskkill, Unix는 SIGTERM
40
56
  try {
41
57
  if (process.platform === "win32") {