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.
@@ -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 { cleanupOrphanNodeProcesses } = await import(
3130
- "../hub/lib/process-utils.mjs"
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
+ }
@@ -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": true,
247
+ "enabled": false,
248
248
  "timeout": 8,
249
249
  "blocking": false,
250
250
  "description": "MCP 고아 프로세스 정리"