triflux 9.8.7 → 10.0.0-alpha.2
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/bin/triflux.mjs +22 -20
- package/package.json +13 -62
- package/skills/tfx-auto/SKILL.md +8 -0
- package/skills/tfx-auto/SKILL.md.tmpl +286 -0
- package/skills/tfx-codex/SKILL.md +8 -0
- package/skills/tfx-codex/SKILL.md.tmpl +72 -0
- package/skills/tfx-find/SKILL.md +12 -1
- package/skills/tfx-find/SKILL.md.tmpl +129 -0
- package/skills/tfx-index/SKILL.md +12 -1
- package/skills/tfx-index/SKILL.md.tmpl +148 -0
- package/skills/tfx-plan/SKILL.md +8 -0
- package/skills/tfx-plan/SKILL.md.tmpl +67 -0
- package/skills/tfx-qa/SKILL.md +8 -0
- package/skills/tfx-qa/SKILL.md.tmpl +121 -0
- package/skills/tfx-research/SKILL.md +8 -0
- package/skills/tfx-research/SKILL.md.tmpl +148 -0
- package/skills/tfx-review/SKILL.md +8 -0
- package/skills/tfx-review/SKILL.md.tmpl +56 -0
- package/skills/tfx-swarm/SKILL.md +122 -0
- package/skills/tfx-workspace/async-tests/run-tests.sh +203 -0
- package/skills/tfx-workspace/evals/evals.json +79 -0
- package/skills/tfx-workspace/iteration-1/benchmark.json +162 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +11 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +154 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +126 -0
- package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +11 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +119 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +9 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +115 -0
- package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +10 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +8 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +86 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +8 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +81 -0
- package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +316 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +352 -0
- package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/review.html +1325 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +97 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +94 -0
- package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +12 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +209 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +10 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +193 -0
- package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/benchmark.json +62 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +13 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +11 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +382 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +11 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +333 -0
- package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +5 -0
- package/skills/tfx-workspace/iteration-2/review.html +1325 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +217 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md +77 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +65 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +94 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md +82 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +133 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +426 -0
- package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +101 -0
- package/.claude-plugin/marketplace.json +0 -34
- package/.claude-plugin/plugin.json +0 -22
- package/hooks/agent-route-guard.mjs +0 -109
- package/hooks/cross-review-tracker.mjs +0 -122
- package/hooks/error-context.mjs +0 -148
- package/hooks/hook-adaptive-collector.mjs +0 -86
- package/hooks/hook-manager.mjs +0 -352
- package/hooks/hook-orchestrator.mjs +0 -312
- package/hooks/hook-registry.json +0 -213
- package/hooks/hooks.json +0 -89
- package/hooks/keyword-rules.json +0 -581
- package/hooks/lib/resolve-root.mjs +0 -59
- package/hooks/mcp-config-watcher.mjs +0 -85
- package/hooks/pipeline-stop.mjs +0 -76
- package/hooks/safety-guard.mjs +0 -129
- package/hooks/subagent-verifier.mjs +0 -80
- package/hub/account-broker.mjs +0 -242
- package/hub/adaptive-diagnostic.mjs +0 -319
- package/hub/adaptive-inject.mjs +0 -186
- package/hub/adaptive-memory.mjs +0 -322
- package/hub/adaptive.mjs +0 -143
- package/hub/assign-callbacks.mjs +0 -133
- package/hub/bridge.mjs +0 -799
- package/hub/cli-adapter-base.mjs +0 -192
- package/hub/codex-adapter.mjs +0 -191
- package/hub/codex-compat.mjs +0 -78
- package/hub/codex-preflight.mjs +0 -147
- package/hub/delegator/contracts.mjs +0 -37
- package/hub/delegator/index.mjs +0 -14
- package/hub/delegator/schema/delegator-tools.schema.json +0 -250
- package/hub/delegator/service.mjs +0 -307
- package/hub/delegator/tool-definitions.mjs +0 -35
- package/hub/fullcycle.mjs +0 -96
- package/hub/gemini-adapter.mjs +0 -180
- package/hub/hitl.mjs +0 -143
- package/hub/intent.mjs +0 -193
- package/hub/lib/cache-guard.mjs +0 -114
- package/hub/lib/known-errors.json +0 -72
- package/hub/lib/memory-store.mjs +0 -748
- package/hub/lib/process-utils.mjs +0 -361
- package/hub/lib/ssh-command.mjs +0 -150
- package/hub/lib/uuidv7.mjs +0 -44
- package/hub/middleware/request-logger.mjs +0 -161
- package/hub/paths.mjs +0 -30
- package/hub/pipe.mjs +0 -579
- package/hub/pipeline/gates/confidence.mjs +0 -56
- package/hub/pipeline/gates/consensus.mjs +0 -94
- package/hub/pipeline/gates/index.mjs +0 -5
- package/hub/pipeline/gates/selfcheck.mjs +0 -82
- package/hub/pipeline/index.mjs +0 -318
- package/hub/pipeline/state.mjs +0 -191
- package/hub/pipeline/transitions.mjs +0 -124
- package/hub/platform.mjs +0 -225
- package/hub/public/dashboard.html +0 -355
- package/hub/public/tray-icon.ico +0 -0
- package/hub/public/tray-icon.png +0 -0
- package/hub/quality/deslop.mjs +0 -253
- package/hub/reflexion.mjs +0 -372
- package/hub/research.mjs +0 -146
- package/hub/router.mjs +0 -791
- package/hub/routing/complexity.mjs +0 -166
- package/hub/routing/index.mjs +0 -117
- package/hub/routing/q-learning.mjs +0 -336
- package/hub/schema.sql +0 -148
- package/hub/server.mjs +0 -1218
- package/hub/session-fingerprint.mjs +0 -352
- package/hub/state.mjs +0 -245
- package/hub/store-adapter.mjs +0 -118
- package/hub/store.mjs +0 -857
- package/hub/team/agent-map.json +0 -11
- package/hub/team/ansi.mjs +0 -379
- package/hub/team/backend.mjs +0 -90
- package/hub/team/cli/commands/attach.mjs +0 -37
- package/hub/team/cli/commands/control.mjs +0 -43
- package/hub/team/cli/commands/debug.mjs +0 -74
- package/hub/team/cli/commands/focus.mjs +0 -53
- package/hub/team/cli/commands/interrupt.mjs +0 -36
- package/hub/team/cli/commands/kill.mjs +0 -37
- package/hub/team/cli/commands/list.mjs +0 -24
- package/hub/team/cli/commands/send.mjs +0 -37
- package/hub/team/cli/commands/start/index.mjs +0 -106
- package/hub/team/cli/commands/start/parse-args.mjs +0 -130
- package/hub/team/cli/commands/start/start-headless.mjs +0 -109
- package/hub/team/cli/commands/start/start-in-process.mjs +0 -40
- package/hub/team/cli/commands/start/start-mux.mjs +0 -73
- package/hub/team/cli/commands/start/start-wt.mjs +0 -69
- package/hub/team/cli/commands/status.mjs +0 -87
- package/hub/team/cli/commands/stop.mjs +0 -31
- package/hub/team/cli/commands/task.mjs +0 -30
- package/hub/team/cli/commands/tasks.mjs +0 -13
- package/hub/team/cli/help.mjs +0 -42
- package/hub/team/cli/index.mjs +0 -41
- package/hub/team/cli/manifest.mjs +0 -29
- package/hub/team/cli/render.mjs +0 -30
- package/hub/team/cli/services/attach-fallback.mjs +0 -54
- package/hub/team/cli/services/hub-client.mjs +0 -227
- package/hub/team/cli/services/member-selector.mjs +0 -30
- package/hub/team/cli/services/native-control.mjs +0 -117
- package/hub/team/cli/services/runtime-mode.mjs +0 -62
- package/hub/team/cli/services/state-store.mjs +0 -48
- package/hub/team/cli/services/task-model.mjs +0 -30
- package/hub/team/conductor.mjs +0 -662
- package/hub/team/dashboard-anchor.mjs +0 -14
- package/hub/team/dashboard-layout.mjs +0 -33
- package/hub/team/dashboard-open.mjs +0 -153
- package/hub/team/dashboard.mjs +0 -274
- package/hub/team/event-log.mjs +0 -76
- package/hub/team/handoff.mjs +0 -303
- package/hub/team/headless.mjs +0 -1149
- package/hub/team/health-probe.mjs +0 -272
- package/hub/team/launcher-template.mjs +0 -94
- package/hub/team/lead-control.mjs +0 -104
- package/hub/team/native-supervisor.mjs +0 -392
- package/hub/team/native.mjs +0 -649
- package/hub/team/nativeProxy.mjs +0 -681
- package/hub/team/notify.mjs +0 -293
- package/hub/team/orchestrator.mjs +0 -161
- package/hub/team/pane.mjs +0 -153
- package/hub/team/process-cleanup.mjs +0 -342
- package/hub/team/psmux.mjs +0 -1354
- package/hub/team/remote-probe.mjs +0 -276
- package/hub/team/remote-watcher.mjs +0 -478
- package/hub/team/routing.mjs +0 -223
- package/hub/team/session-sync.mjs +0 -169
- package/hub/team/session.mjs +0 -611
- package/hub/team/shared.mjs +0 -13
- package/hub/team/staleState.mjs +0 -361
- package/hub/team/tui-lite.mjs +0 -380
- package/hub/team/tui-remote-adapter.mjs +0 -393
- package/hub/team/tui-viewer.mjs +0 -463
- package/hub/team/tui.mjs +0 -1449
- package/hub/team-bridge.mjs +0 -25
- package/hub/token-mode.mjs +0 -224
- package/hub/tools.mjs +0 -554
- package/hub/tray.mjs +0 -376
- package/hub/workers/claude-worker.mjs +0 -475
- package/hub/workers/codex-mcp.mjs +0 -504
- package/hub/workers/delegator-mcp.mjs +0 -1076
- package/hub/workers/factory.mjs +0 -21
- package/hub/workers/gemini-worker.mjs +0 -373
- package/hub/workers/interface.mjs +0 -52
- package/hub/workers/worker-utils.mjs +0 -104
- package/hud/colors.mjs +0 -88
- package/hud/constants.mjs +0 -88
- package/hud/context-monitor.mjs +0 -397
- package/hud/hud-qos-status.mjs +0 -210
- package/hud/providers/claude.mjs +0 -314
- package/hud/providers/codex.mjs +0 -151
- package/hud/providers/gemini.mjs +0 -320
- package/hud/renderers.mjs +0 -428
- package/hud/terminal.mjs +0 -140
- package/hud/utils.mjs +0 -287
- package/scripts/__tests__/gen-skill-docs.test.mjs +0 -87
- package/scripts/__tests__/keyword-detector.test.mjs +0 -234
- package/scripts/__tests__/mcp-guard-engine.test.mjs +0 -118
- package/scripts/__tests__/remote-spawn-transfer.test.mjs +0 -117
- package/scripts/__tests__/remote-spawn.test.mjs +0 -92
- package/scripts/__tests__/skill-template.test.mjs +0 -104
- package/scripts/__tests__/smoke.test.mjs +0 -34
- package/scripts/cache-buildup.mjs +0 -30
- package/scripts/cache-doctor.mjs +0 -149
- package/scripts/cache-warmup.mjs +0 -557
- package/scripts/claude-logged.ps1 +0 -54
- package/scripts/claudemd-sync.mjs +0 -103
- package/scripts/cli-route.sh +0 -3
- package/scripts/completions/tfx.bash +0 -47
- package/scripts/completions/tfx.fish +0 -44
- package/scripts/completions/tfx.zsh +0 -83
- package/scripts/cross-review-gate.mjs +0 -126
- package/scripts/cross-review-tracker.mjs +0 -238
- package/scripts/demo-tui.mjs +0 -59
- package/scripts/gen-skill-docs.mjs +0 -110
- package/scripts/headless-guard-fast.sh +0 -21
- package/scripts/headless-guard.mjs +0 -360
- package/scripts/hub-ensure.mjs +0 -120
- package/scripts/keyword-detector.mjs +0 -272
- package/scripts/keyword-rules-expander.mjs +0 -521
- package/scripts/lib/claudemd-manager.mjs +0 -325
- package/scripts/lib/claudemd-scanner.mjs +0 -218
- package/scripts/lib/context.mjs +0 -67
- package/scripts/lib/cross-review-utils.mjs +0 -51
- package/scripts/lib/env-probe.mjs +0 -241
- package/scripts/lib/gemini-profiles.mjs +0 -85
- package/scripts/lib/handoff.mjs +0 -171
- package/scripts/lib/hook-utils.mjs +0 -14
- package/scripts/lib/keyword-rules.mjs +0 -166
- package/scripts/lib/logger.mjs +0 -105
- package/scripts/lib/mcp-filter.mjs +0 -739
- package/scripts/lib/mcp-guard-engine.mjs +0 -940
- package/scripts/lib/mcp-manifest.mjs +0 -79
- package/scripts/lib/mcp-server-catalog.mjs +0 -118
- package/scripts/lib/psmux-info.mjs +0 -119
- package/scripts/lib/remote-spawn-transfer.mjs +0 -196
- package/scripts/lib/skill-template.mjs +0 -222
- package/scripts/mcp-check.mjs +0 -237
- package/scripts/mcp-cleanup.ps1 +0 -17
- package/scripts/mcp-gateway-config.mjs +0 -207
- package/scripts/mcp-gateway-ensure.mjs +0 -85
- package/scripts/mcp-gateway-integration-test.mjs +0 -228
- package/scripts/mcp-gateway-start.mjs +0 -226
- package/scripts/mcp-gateway-start.ps1 +0 -141
- package/scripts/mcp-gateway-verify.mjs +0 -77
- package/scripts/mcp-safety-guard.mjs +0 -44
- package/scripts/notion-read.mjs +0 -556
- package/scripts/pack.mjs +0 -205
- package/scripts/preflight-cache.mjs +0 -69
- package/scripts/preinstall.mjs +0 -96
- package/scripts/psmux-safety-guard.mjs +0 -64
- package/scripts/remote-spawn.mjs +0 -1289
- package/scripts/run.cjs +0 -79
- package/scripts/session-spawn-helper.mjs +0 -185
- package/scripts/setup.mjs +0 -1101
- package/scripts/templates/claudemd-tfx-section.md +0 -54
- package/scripts/test-lock.mjs +0 -71
- package/scripts/test-tfx-route-no-claude-native.mjs +0 -57
- package/scripts/tfx-batch-stats.mjs +0 -96
- package/scripts/tfx-gate-activate.mjs +0 -89
- package/scripts/tfx-route-post.mjs +0 -505
- package/scripts/tfx-route-worker.mjs +0 -223
- package/scripts/tfx-route.sh +0 -1956
- package/scripts/tmp-cleanup.mjs +0 -103
- package/scripts/token-snapshot.mjs +0 -575
- package/tui/codex-profile.mjs +0 -402
- package/tui/core.mjs +0 -236
- package/tui/doctor.mjs +0 -328
- package/tui/gemini-profile.mjs +0 -254
- package/tui/setup.mjs +0 -442
package/bin/triflux.mjs
CHANGED
|
@@ -16,10 +16,12 @@ import { ensureGeminiProfiles } from "../scripts/lib/gemini-profiles.mjs";
|
|
|
16
16
|
import { probePsmuxSupport, formatPsmuxInstallGuidance, formatPsmuxUpdateGuidance } from "../scripts/lib/psmux-info.mjs";
|
|
17
17
|
import {
|
|
18
18
|
addRegistryServer,
|
|
19
|
+
createDefaultRegistry,
|
|
19
20
|
inspectRegistry,
|
|
20
21
|
inspectRegistryStatus,
|
|
21
22
|
removeRegistryServer,
|
|
22
23
|
removeServerFromTargets,
|
|
24
|
+
saveRegistry,
|
|
23
25
|
syncRegistryTargets,
|
|
24
26
|
} from "../scripts/lib/mcp-guard-engine.mjs";
|
|
25
27
|
import {
|
|
@@ -1181,13 +1183,10 @@ function buildMcpStatusRows(statusInfo) {
|
|
|
1181
1183
|
}
|
|
1182
1184
|
|
|
1183
1185
|
function ensureValidRegistryState() {
|
|
1184
|
-
|
|
1186
|
+
let registryState = inspectRegistry();
|
|
1185
1187
|
if (!registryState.exists) {
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
reason: "configError",
|
|
1189
|
-
fix: "config/mcp-registry.json을 복원하거나 `tfx mcp add <name> --url <url>`로 다시 생성하세요.",
|
|
1190
|
-
});
|
|
1188
|
+
saveRegistry(createDefaultRegistry());
|
|
1189
|
+
registryState = inspectRegistry();
|
|
1191
1190
|
}
|
|
1192
1191
|
if (!registryState.valid) {
|
|
1193
1192
|
throw createCliError(`MCP registry invalid: ${registryState.errors.join("; ")}`, {
|
|
@@ -1388,9 +1387,13 @@ async function cmdDoctor(options = {}) {
|
|
|
1388
1387
|
warn(`MCP registry 자동 동기화 실패: ${error.message}`);
|
|
1389
1388
|
}
|
|
1390
1389
|
} else if (registryStateForFix.exists) {
|
|
1391
|
-
|
|
1390
|
+
saveRegistry(createDefaultRegistry());
|
|
1391
|
+
report.actions.push({ type: "mcp-registry-reset", status: "ok" });
|
|
1392
|
+
ok("MCP registry 손상 → 기본값으로 재생성됨");
|
|
1392
1393
|
} else {
|
|
1393
|
-
|
|
1394
|
+
saveRegistry(createDefaultRegistry());
|
|
1395
|
+
report.actions.push({ type: "mcp-registry-create", status: "ok" });
|
|
1396
|
+
ok("MCP registry 없음 → 기본값으로 자동 생성됨");
|
|
1394
1397
|
}
|
|
1395
1398
|
console.log(`\n ${LINE}`);
|
|
1396
1399
|
info("수정 완료 — 아래 진단 결과를 확인하세요");
|
|
@@ -2210,28 +2213,27 @@ async function cmdDoctor(options = {}) {
|
|
|
2210
2213
|
// ── MCP 중앙 레지스트리 ──
|
|
2211
2214
|
section("MCP Registry");
|
|
2212
2215
|
{
|
|
2213
|
-
|
|
2216
|
+
let registryState = inspectRegistry();
|
|
2214
2217
|
if (!registryState.exists) {
|
|
2218
|
+
saveRegistry(createDefaultRegistry());
|
|
2219
|
+
registryState = inspectRegistry();
|
|
2215
2220
|
addDoctorCheck(report, {
|
|
2216
2221
|
name: "mcp-registry",
|
|
2217
|
-
status: "
|
|
2222
|
+
status: "fixed",
|
|
2218
2223
|
path: registryState.path,
|
|
2219
|
-
|
|
2224
|
+
action: "기본값으로 자동 생성됨",
|
|
2220
2225
|
});
|
|
2221
|
-
|
|
2222
|
-
info(`path: ${registryState.path}`);
|
|
2223
|
-
issues++;
|
|
2226
|
+
ok("mcp-registry.json 없음 → 기본값으로 자동 생성됨");
|
|
2224
2227
|
} else if (!registryState.valid) {
|
|
2228
|
+
saveRegistry(createDefaultRegistry());
|
|
2229
|
+
registryState = inspectRegistry();
|
|
2225
2230
|
addDoctorCheck(report, {
|
|
2226
2231
|
name: "mcp-registry",
|
|
2227
|
-
status: "
|
|
2232
|
+
status: "fixed",
|
|
2228
2233
|
path: registryState.path,
|
|
2229
|
-
|
|
2230
|
-
fix: "config/mcp-registry.json 구조를 수정하세요.",
|
|
2234
|
+
action: "손상 감지 → 기본값으로 재생성됨",
|
|
2231
2235
|
});
|
|
2232
|
-
|
|
2233
|
-
for (const entry of registryState.errors) info(entry);
|
|
2234
|
-
issues++;
|
|
2236
|
+
warn("mcp-registry.json 손상 → 기본값으로 재생성됨");
|
|
2235
2237
|
} else {
|
|
2236
2238
|
const statusInfo = inspectRegistryStatus(registryState.registry);
|
|
2237
2239
|
const invalidConfigs = statusInfo.configs.filter((config) => config.parseError);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "triflux",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0-alpha.2",
|
|
4
4
|
"description": "CLI-first multi-model orchestrator for Claude Code — route tasks to Codex, Gemini, and Claude",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -13,73 +13,24 @@
|
|
|
13
13
|
"tfx-doctor-tui": "bin/tfx-doctor-tui.mjs",
|
|
14
14
|
"tfx-setup-tui": "bin/tfx-setup-tui.mjs"
|
|
15
15
|
},
|
|
16
|
+
"engines": { "node": ">=18.0.0" },
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@triflux/core": "^10.0.0-alpha.1",
|
|
19
|
+
"@triflux/remote": "^10.0.0-alpha.1"
|
|
20
|
+
},
|
|
16
21
|
"files": [
|
|
17
22
|
"bin",
|
|
18
|
-
"tui",
|
|
19
|
-
"hub",
|
|
20
23
|
"skills",
|
|
21
|
-
"!skills/tfx-workspace",
|
|
22
|
-
"!**/failure-reports",
|
|
23
|
-
"scripts",
|
|
24
|
-
"hooks",
|
|
25
|
-
"hud",
|
|
26
|
-
".claude-plugin",
|
|
27
24
|
"README.md",
|
|
28
|
-
"README.ko.md",
|
|
29
25
|
"LICENSE"
|
|
30
26
|
],
|
|
31
|
-
"
|
|
32
|
-
"packages/core",
|
|
33
|
-
"packages/remote",
|
|
34
|
-
"packages/triflux"
|
|
35
|
-
],
|
|
36
|
-
"scripts": {
|
|
37
|
-
"pack": "node scripts/pack.mjs all",
|
|
38
|
-
"pack:core": "node scripts/pack.mjs core",
|
|
39
|
-
"pack:remote": "node scripts/pack.mjs remote",
|
|
40
|
-
"setup": "node scripts/setup.mjs",
|
|
41
|
-
"preinstall": "node scripts/preinstall.mjs",
|
|
42
|
-
"postinstall": "node scripts/setup.mjs",
|
|
43
|
-
"lint": "biome check .",
|
|
44
|
-
"lint:fix": "biome check --fix .",
|
|
45
|
-
"health": "npm test && npm run lint",
|
|
46
|
-
"test": "node scripts/test-lock.mjs --test --test-force-exit --test-concurrency=1 \"tests/**/*.test.mjs\" \"scripts/__tests__/**/*.test.mjs\"",
|
|
47
|
-
"test:unit": "node scripts/test-lock.mjs --test --test-force-exit --test-concurrency=1 tests/unit/**/*.test.mjs",
|
|
48
|
-
"test:integration": "node scripts/test-lock.mjs --test --test-force-exit --test-concurrency=1 tests/integration/**/*.test.mjs",
|
|
49
|
-
"test:route-smoke": "node scripts/test-lock.mjs --test scripts/test-tfx-route-no-claude-native.mjs",
|
|
50
|
-
"test:contract": "node scripts/test-lock.mjs --test --test-force-exit --test-concurrency=1 tests/contract/**/*.test.mjs",
|
|
51
|
-
"gen:skill-docs": "node scripts/gen-skill-docs.mjs"
|
|
52
|
-
},
|
|
53
|
-
"engines": {
|
|
54
|
-
"node": ">=18.0.0"
|
|
55
|
-
},
|
|
56
|
-
"repository": {
|
|
57
|
-
"type": "git",
|
|
58
|
-
"url": "git+https://github.com/tellang/triflux.git"
|
|
59
|
-
},
|
|
60
|
-
"homepage": "https://github.com/tellang/triflux#readme",
|
|
27
|
+
"keywords": ["claude-code", "plugin", "codex", "gemini", "cli-routing", "orchestration", "multi-model", "triflux", "tfx"],
|
|
61
28
|
"author": "tellang",
|
|
62
29
|
"license": "MIT",
|
|
63
|
-
"
|
|
64
|
-
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
|
|
69
|
-
"zod": "^4.0.0"
|
|
70
|
-
},
|
|
71
|
-
"devDependencies": {
|
|
72
|
-
"@biomejs/biome": "^2.0.0"
|
|
73
|
-
},
|
|
74
|
-
"keywords": [
|
|
75
|
-
"claude-code",
|
|
76
|
-
"plugin",
|
|
77
|
-
"codex",
|
|
78
|
-
"gemini",
|
|
79
|
-
"cli-routing",
|
|
80
|
-
"orchestration",
|
|
81
|
-
"multi-model",
|
|
82
|
-
"triflux",
|
|
83
|
-
"tfx"
|
|
84
|
-
]
|
|
30
|
+
"homepage": "https://github.com/tellang/triflux#readme",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "git+https://github.com/tellang/triflux.git",
|
|
34
|
+
"directory": "packages/triflux"
|
|
35
|
+
}
|
|
85
36
|
}
|
package/skills/tfx-auto/SKILL.md
CHANGED
|
@@ -32,6 +32,14 @@ argument-hint: "<command|task> [args...]"
|
|
|
32
32
|
> **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
|
|
33
33
|
> 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
|
|
34
34
|
|
|
35
|
+
> **Telemetry**
|
|
36
|
+
>
|
|
37
|
+
> - Skill: `tfx-auto`
|
|
38
|
+
> - Description: `통합 CLI 오케스트레이터. 커맨드 숏컷(단일) + 자동 분류/분해(병렬) + 수동 병렬. tfx-route.sh 기반. '코드 짜줘', '구현해줘', '만들어줘', '수정해줘', '고쳐줘', 'implement', 'build', 'fix' 같은 구현/수정 요청에 사용. CLI 라우팅이 필요한 모든 작업에 적극 활용.`
|
|
39
|
+
> - Session: 요청별 식별자를 유지해 단계별 실행 로그를 추적한다.
|
|
40
|
+
> - Errors: 실패 시 원인/복구/재시도 여부를 구조화해 기록한다.
|
|
41
|
+
|
|
42
|
+
|
|
35
43
|
|
|
36
44
|
> **MANDATORY RULES**
|
|
37
45
|
>
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfx-auto
|
|
3
|
+
description: >
|
|
4
|
+
통합 CLI 오케스트레이터. 커맨드 숏컷(단일) + 자동 분류/분해(병렬) + 수동 병렬. tfx-route.sh 기반.
|
|
5
|
+
'코드 짜줘', '구현해줘', '만들어줘', '수정해줘', '고쳐줘', 'implement', 'build', 'fix' 같은
|
|
6
|
+
구현/수정 요청에 사용. CLI 라우팅이 필요한 모든 작업에 적극 활용.
|
|
7
|
+
triggers:
|
|
8
|
+
- tfx-auto
|
|
9
|
+
- implement
|
|
10
|
+
- build
|
|
11
|
+
- research
|
|
12
|
+
- brainstorm
|
|
13
|
+
- design
|
|
14
|
+
- test
|
|
15
|
+
- analyze
|
|
16
|
+
- troubleshoot
|
|
17
|
+
- improve
|
|
18
|
+
- cleanup
|
|
19
|
+
- explain
|
|
20
|
+
- document
|
|
21
|
+
- pm
|
|
22
|
+
- reflect
|
|
23
|
+
- estimate
|
|
24
|
+
- spec-panel
|
|
25
|
+
- business-panel
|
|
26
|
+
- index-repo
|
|
27
|
+
argument-hint: "<command|task> [args...]"
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
# {{SKILL_NAME}} — 통합 CLI 오케스트레이터
|
|
31
|
+
|
|
32
|
+
{{> base}}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
> **MANDATORY RULES**
|
|
36
|
+
>
|
|
37
|
+
> 1. **실행**: CLI 에이전트는 반드시 `Bash("bash ~/.claude/scripts/tfx-route.sh ...")`. Claude 네이티브(explore/verifier/test-engineer/qa-tester)만 `Agent()`.
|
|
38
|
+
> 2. **비용**: Codex 우선 → Gemini → Claude 최후 수단. `claude` 선택 전 "Codex로 가능한가?" 재확인.
|
|
39
|
+
> 3. **DAG**: SEQUENTIAL/DAG이면 레벨 기반 순차 실행. `.omc/context/{sid}/` 생성, context_output 저장, 실패 시 후속 SKIP.
|
|
40
|
+
> 4. **트리아지**: Codex `exec --full-auto` 분류 + Opus 인라인 분해. Agent 스폰 금지.
|
|
41
|
+
> 5. **thorough**: `-t`/`--thorough` 시 파이프라인 init 필수. 커맨드 숏컷은 항상 quick.
|
|
42
|
+
> 6. **직접 수정 금지**: implement/review/analyze 등 커맨드 숏컷 실행 시 절대로 Edit/Write 도구로 직접 코드를 수정하지 마라. 반드시 Bash(tfx-route.sh)를 통해 Codex/Gemini에 위임하라. 작업이 아무리 사소해도 예외 없음.
|
|
43
|
+
|
|
44
|
+
## 모드
|
|
45
|
+
|
|
46
|
+
| 입력 형식 | 모드 | 트리아지 |
|
|
47
|
+
|-----------|------|----------|
|
|
48
|
+
| `/implement JWT 추가` | 커맨드 숏컷 (quick) | 없음 (즉시 실행) |
|
|
49
|
+
| `/tfx-auto "리팩터링 + UI"` | 자동 (quick) | Codex 분류 → Opus 분해 |
|
|
50
|
+
| `/tfx-auto -t "리팩터링 + UI"` | 자동 (thorough) | Codex 분류 → Opus 분해 → Pipeline |
|
|
51
|
+
| `/tfx-auto --thorough "리팩터링"` | 자동 (thorough) | `-t` 동일 |
|
|
52
|
+
| `/tfx-auto 3:codex "리뷰"` | 수동 (quick) | Opus 분해만 |
|
|
53
|
+
|
|
54
|
+
> **tfx-auto는 `--quick`이 기본.** 커맨드 숏컷·단일 실행에서 plan/verify 오버헤드가 불필요하기 때문.
|
|
55
|
+
> 멀티 태스크 시 tfx-multi로 전환되면 tfx-multi의 기본값(`--thorough`)이 적용된다.
|
|
56
|
+
|
|
57
|
+
## 커맨드 숏컷
|
|
58
|
+
|
|
59
|
+
커맨드명 매칭 시 트리아지 없이 즉시 실행. 패턴: `Bash("bash ~/.claude/scripts/tfx-route.sh {에이전트} '{PROMPT}' {MCP}")`.
|
|
60
|
+
|
|
61
|
+
### Codex 직행
|
|
62
|
+
|
|
63
|
+
| 커맨드 | 에이전트 | MCP |
|
|
64
|
+
|--------|---------|-----|
|
|
65
|
+
| `implement` | executor | implement |
|
|
66
|
+
| `build` | build-fixer | implement |
|
|
67
|
+
| `research` | document-specialist | analyze |
|
|
68
|
+
| `brainstorm` | analyst | analyze |
|
|
69
|
+
| `design` | architect | analyze |
|
|
70
|
+
| `troubleshoot` | debugger | implement |
|
|
71
|
+
| `cleanup` | executor | implement |
|
|
72
|
+
| `pm` | planner | analyze |
|
|
73
|
+
|
|
74
|
+
### 2단계: `improve`
|
|
75
|
+
|
|
76
|
+
1단계 `code-reviewer '{PROMPT}' review` → 사용자 승인 → 2단계 `executor '리뷰 반영: {요약}' implement`
|
|
77
|
+
|
|
78
|
+
### 병렬
|
|
79
|
+
|
|
80
|
+
| 커맨드 | 에이전트들 (병렬, run_in_background=true) | MCP |
|
|
81
|
+
|--------|------------------------------------------|-----|
|
|
82
|
+
| `analyze` | quality-reviewer + security-reviewer | review |
|
|
83
|
+
| `spec-panel` | architect + analyst + critic | analyze |
|
|
84
|
+
| `business-panel` | analyst + architect | analyze |
|
|
85
|
+
|
|
86
|
+
### Gemini 직행
|
|
87
|
+
|
|
88
|
+
| 커맨드 | 에이전트 | MCP |
|
|
89
|
+
|--------|---------|-----|
|
|
90
|
+
| `explain` | writer | docs |
|
|
91
|
+
| `document` | writer | docs |
|
|
92
|
+
|
|
93
|
+
### Claude 네이티브
|
|
94
|
+
|
|
95
|
+
| 커맨드 | 실행 |
|
|
96
|
+
|--------|------|
|
|
97
|
+
| `test` | `Agent(subagent_type="oh-my-claudecode:test-engineer", model="sonnet")` |
|
|
98
|
+
| `reflect` | `Bash(tfx-route.sh verifier '{PROMPT}' review)` (기본) / `Agent(subagent_type="oh-my-claudecode:verifier", model="sonnet")` (TFX_VERIFIER_OVERRIDE=claude 시) |
|
|
99
|
+
|
|
100
|
+
### 복합
|
|
101
|
+
|
|
102
|
+
| 커맨드 | 흐름 |
|
|
103
|
+
|--------|------|
|
|
104
|
+
| `estimate` | explore(haiku) → analyst(codex): 영향범위, 복잡도(S/M/L/XL), 리스크 |
|
|
105
|
+
| `index-repo` | explore(haiku) × 2 → Write(PROJECT_INDEX.md). mode=quick/update/full |
|
|
106
|
+
|
|
107
|
+
## 트리아지
|
|
108
|
+
|
|
109
|
+
**자동 모드:**
|
|
110
|
+
1. Codex 분류: `codex exec --full-auto --skip-git-repo-check` → JSON `{parts: [{description, agent: "codex|gemini|claude"}]}`
|
|
111
|
+
2. Opus 인라인 분해: `{graph_type: "INDEPENDENT|SEQUENTIAL|DAG", subtasks: [{id, description, scope, agent, mcp_profile, depends_on, context_output, context_input}]}`
|
|
112
|
+
3. 실패 시 Opus가 직접 분류+분해
|
|
113
|
+
|
|
114
|
+
**수동 모드 (`N:agent_type`):** Codex 분류 건너뜀 → Opus가 N개 서브태스크 분해. N > 10 거부.
|
|
115
|
+
|
|
116
|
+
## --thorough 모드
|
|
117
|
+
|
|
118
|
+
`-t` 또는 `--thorough` 플래그 시 파이프라인 기반 실행. 커맨드 숏컷에서는 무시된다.
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
분기점은 "실행 전략"이지 "계획"이 아님:
|
|
122
|
+
|
|
123
|
+
TRIAGE
|
|
124
|
+
│
|
|
125
|
+
├─ [thorough] → PIPELINE INIT(plan) → PLAN → PRD → [APPROVAL]
|
|
126
|
+
│ │
|
|
127
|
+
│ ┌───────────────┤
|
|
128
|
+
│ │ │
|
|
129
|
+
│ [1 task] [2+ tasks]
|
|
130
|
+
│ │ │
|
|
131
|
+
│ AUTO 직접 실행 TEAM EXEC (multi Phase 3)
|
|
132
|
+
│ │ │
|
|
133
|
+
│ └───────┬───────┘
|
|
134
|
+
│ │
|
|
135
|
+
│ VERIFY → FIX loop → COMPLETE
|
|
136
|
+
│
|
|
137
|
+
└─ [quick] → [1 task] → fire-and-forget
|
|
138
|
+
[2+ tasks] → TEAM EXEC → COLLECT → CLEANUP
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 단일 태스크 thorough
|
|
142
|
+
|
|
143
|
+
1. `Bash("node hub/bridge.mjs pipeline-init --team ${sid}")` — 파이프라인 초기화 (phase: plan)
|
|
144
|
+
2. Plan: Codex architect → 결과를 `pipeline.writePlanFile()` 저장
|
|
145
|
+
3. PRD: Codex analyst → acceptance criteria 확정
|
|
146
|
+
4. `pipeline_advance_gated` → [Approval Gate] → 사용자 승인 대기
|
|
147
|
+
5. Exec: tfx-auto 직접 실행 (아래 "실행" 섹션)
|
|
148
|
+
6. Verify: Codex verifier → 검증
|
|
149
|
+
7. 실패 시 Fix loop (최대 3회) → Exec 재실행
|
|
150
|
+
8. Complete
|
|
151
|
+
|
|
152
|
+
### 멀티 태스크 thorough
|
|
153
|
+
|
|
154
|
+
Plan/PRD/Approval은 tfx-auto에서 실행, 그 후 tfx-multi Phase 3로 전환.
|
|
155
|
+
서브태스크 배열 + `thorough: true` 신호를 함께 전달하여 multi 측에서 verify/fix를 수행.
|
|
156
|
+
|
|
157
|
+
## 멀티 태스크 라우팅 (트리아지 후)
|
|
158
|
+
|
|
159
|
+
> **트리아지 결과에 따라 실행 경로 결정.**
|
|
160
|
+
> v6.0.0부터 CLI 워커는 **Lead-Direct Headless** (psmux)가 기본. Agent 래퍼 불필요.
|
|
161
|
+
|
|
162
|
+
| 조건 | 실행 경로 | 엔진 |
|
|
163
|
+
|------|----------|------|
|
|
164
|
+
| 1개 + quick | tfx-auto 직접 실행 (fire-and-forget) | tfx-route.sh |
|
|
165
|
+
| 1개 + thorough | tfx-auto 직접 실행 + verify/fix loop | tfx-route.sh |
|
|
166
|
+
| 2개+ + quick | **headless 직접 실행** (WT 자동 팝업) | headless.mjs |
|
|
167
|
+
| 2개+ + thorough | Plan/PRD/Approval 후 → headless + verify/fix | headless.mjs |
|
|
168
|
+
| psmux 미설치 fallback | Native Teams (Agent slim wrapper) | native.mjs |
|
|
169
|
+
|
|
170
|
+
> **MANDATORY: 2개+ 서브태스크 시 headless 엔진 필수**
|
|
171
|
+
> `Agent()` 백그라운드나 `Bash(tfx-route.sh)` 개별 호출로 대체 금지.
|
|
172
|
+
> 반드시 아래 `Bash("tfx multi ...")` 명령으로 headless 엔진에 위임한다.
|
|
173
|
+
|
|
174
|
+
**전환 방법:**
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
thorough = args에 -t 또는 --thorough 포함
|
|
178
|
+
|
|
179
|
+
if subtasks.length >= 2:
|
|
180
|
+
if psmux 설치됨:
|
|
181
|
+
→ Bash("tfx multi --teammate-mode headless --auto-attach --dashboard --assign 'cli:prompt:role' ...")
|
|
182
|
+
→ if thorough: verify → fix loop
|
|
183
|
+
else:
|
|
184
|
+
→ fallback: tfx-multi Phase 3 Native Teams (Agent slim wrapper)
|
|
185
|
+
else:
|
|
186
|
+
if thorough:
|
|
187
|
+
→ Pipeline init → Plan → PRD → Approval → 직접 실행 → Verify → Fix loop
|
|
188
|
+
else:
|
|
189
|
+
→ tfx-auto 직접 실행 (아래)
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## 실행
|
|
193
|
+
|
|
194
|
+
### CLI 에이전트 (Codex/Gemini)
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# Level 0 / INDEPENDENT
|
|
198
|
+
Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile}", run_in_background=true)
|
|
199
|
+
|
|
200
|
+
# Level 1+ (컨텍스트 의존) — 4번째=timeout(빈값), 5번째=context_file
|
|
201
|
+
Bash("bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile} '' .omc/context/{sid}/combined-{tid}.md", run_in_background=true)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Claude 네이티브
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
Agent(subagent_type="oh-my-claudecode:{agent}", model="{model}", prompt="{prompt}", run_in_background=true)
|
|
208
|
+
# 컨텍스트 있으면 prompt에 <prior_context>...</prior_context> 추가
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 에이전트 매핑
|
|
212
|
+
|
|
213
|
+
| 입력 | CLI | MCP |
|
|
214
|
+
|------|-----|-----|
|
|
215
|
+
| codex / executor / build-fixer / spark / debugger / deep-executor | Codex | implement |
|
|
216
|
+
| architect / planner / critic / analyst | Codex (xhigh) | analyze |
|
|
217
|
+
| scientist / document-specialist | Codex | analyze |
|
|
218
|
+
| code-reviewer / security-reviewer / quality-reviewer | Codex (review) | review |
|
|
219
|
+
| gemini / designer / writer | Gemini | docs |
|
|
220
|
+
| explore / test-engineer / qa-tester | Claude native | — |
|
|
221
|
+
| verifier | Codex review (기본) / Claude native (TFX_VERIFIER_OVERRIDE=claude 시) | review / — |
|
|
222
|
+
|
|
223
|
+
### MCP 프로필 자동 결정
|
|
224
|
+
|
|
225
|
+
| 에이전트 | MCP |
|
|
226
|
+
|----------|-----|
|
|
227
|
+
| executor, build-fixer, spark, debugger, deep-executor | implement |
|
|
228
|
+
| architect, planner, critic, analyst, scientist, document-specialist | analyze |
|
|
229
|
+
| code-reviewer, security-reviewer, quality-reviewer | review |
|
|
230
|
+
| designer, writer | docs |
|
|
231
|
+
|
|
232
|
+
### 결과 파싱
|
|
233
|
+
|
|
234
|
+
여기서 `failed`는 `tfx-route.sh`/CLI 종료 결과를 뜻한다. Claude Code `TaskUpdate` 상태값이 아니다.
|
|
235
|
+
|
|
236
|
+
| exit_code + status | 사용할 출력 |
|
|
237
|
+
|--------------------|-----------|
|
|
238
|
+
| 0 + success | `=== OUTPUT ===` 섹션 |
|
|
239
|
+
| 124 + timeout | `=== PARTIAL OUTPUT ===` |
|
|
240
|
+
| ≠0 + failed | STDERR → Claude fallback |
|
|
241
|
+
|
|
242
|
+
OUTPUT 추출: `echo "$result" | sed -n '/^=== OUTPUT ===/,/^=== /{/^=== OUTPUT ===/d;/^=== /d;p}'`
|
|
243
|
+
|
|
244
|
+
### 실패 처리
|
|
245
|
+
|
|
246
|
+
1차 → `Agent(subagent_type="oh-my-claudecode:executor", model="sonnet")` fallback.
|
|
247
|
+
2차 연속 실패 → 실패 보고 + 성공 결과만 종합.
|
|
248
|
+
|
|
249
|
+
### 보고 형식
|
|
250
|
+
|
|
251
|
+
```markdown
|
|
252
|
+
## tfx-auto 완료
|
|
253
|
+
**모드**: {auto|manual} | **그래프**: {type} | **레벨**: {N}
|
|
254
|
+
| # | 서브태스크 | Agent | CLI | MCP | 레벨 | 상태 | 시간 |
|
|
255
|
+
### 워커 {n}: {제목}
|
|
256
|
+
(출력 요약)
|
|
257
|
+
### Token Savings Report
|
|
258
|
+
(node ~/.claude/scripts/token-snapshot.mjs report {session-id})
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## 필수 조건
|
|
262
|
+
|
|
263
|
+
- `~/.claude/scripts/tfx-route.sh` (필수)
|
|
264
|
+
- codex: `npm install -g @openai/codex` | gemini: `npm install -g @google/gemini-cli`
|
|
265
|
+
|
|
266
|
+
## 에러 레퍼런스
|
|
267
|
+
|
|
268
|
+
| 에러 | 처리 |
|
|
269
|
+
|------|------|
|
|
270
|
+
| `tfx-route.sh: not found` | tfx-route.sh 생성 |
|
|
271
|
+
| `codex/gemini: not found` | npm install -g |
|
|
272
|
+
| timeout / failed (`tfx-route.sh` 결과) | stderr → Claude fallback |
|
|
273
|
+
| N > 10 | 10 이하로 조정 |
|
|
274
|
+
| 순환 의존 | 분해 재시도 |
|
|
275
|
+
| 컨텍스트 > 32KB | 비례 절삭 |
|
|
276
|
+
|
|
277
|
+
> Claude Code `TaskUpdate`를 사용할 때는 `status: "failed"`를 쓰지 않는다.
|
|
278
|
+
> 실패 보고는 `status: "completed"` + `metadata.result: "failed"`로 표현한다.
|
|
279
|
+
|
|
280
|
+
## Troubleshooting
|
|
281
|
+
|
|
282
|
+
`/tfx-doctor` 진단 | `/tfx-doctor --fix` 자동 수정 | `/tfx-doctor --reset` 캐시 초기화
|
|
283
|
+
|
|
284
|
+
## 상세 레퍼런스
|
|
285
|
+
|
|
286
|
+
DAG 알고리즘, 컨텍스트 머지 규칙, 토큰 스냅샷, 보고서 상세는 `scripts/tfx-route.sh` 내부 주석 및 `hub/` 모듈 참조.
|
|
@@ -13,6 +13,14 @@ argument-hint: "\"작업 설명\" | N:codex \"작업 설명\""
|
|
|
13
13
|
> **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
|
|
14
14
|
> 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
|
|
15
15
|
|
|
16
|
+
> **Telemetry**
|
|
17
|
+
>
|
|
18
|
+
> - Skill: `tfx-codex`
|
|
19
|
+
> - Description: `Codex-Only 오케스트레이터. tfx-auto 워크플로우를 Codex 전용으로 고정합니다. '코덱스로 해줘', '코덱스한테 시켜', 'codex로', 'Codex 전용' 같은 요청에 반드시 사용.`
|
|
20
|
+
> - Session: 요청별 식별자를 유지해 단계별 실행 로그를 추적한다.
|
|
21
|
+
> - Errors: 실패 시 원인/복구/재시도 여부를 구조화해 기록한다.
|
|
22
|
+
|
|
23
|
+
|
|
16
24
|
|
|
17
25
|
> **래퍼**: tfx-auto의 Codex 전용 바로가기. TFX_CLI_MODE=codex.
|
|
18
26
|
> **HARD RULE**: Claude는 이 스킬에서 Edit/Write를 사용하면 안 된다. 모든 코드 수정은 Codex CLI를 통해 수행한다.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfx-codex
|
|
3
|
+
description: >
|
|
4
|
+
Codex-Only 오케스트레이터. tfx-auto 워크플로우를 Codex 전용으로 고정합니다.
|
|
5
|
+
'코덱스로 해줘', '코덱스한테 시켜', 'codex로', 'Codex 전용' 같은 요청에 반드시 사용.
|
|
6
|
+
triggers:
|
|
7
|
+
- tfx-codex
|
|
8
|
+
argument-hint: "\"작업 설명\" | N:codex \"작업 설명\""
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# {{SKILL_NAME}} — Codex-Only 오케스트레이터
|
|
12
|
+
|
|
13
|
+
{{> base}}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
> **래퍼**: tfx-auto의 Codex 전용 바로가기. TFX_CLI_MODE=codex.
|
|
17
|
+
> **HARD RULE**: Claude는 이 스킬에서 Edit/Write를 사용하면 안 된다. 모든 코드 수정은 Codex CLI를 통해 수행한다.
|
|
18
|
+
> Codex CLI만 사용하여 모든 외부 CLI 작업을 라우팅합니다.
|
|
19
|
+
> Gemini CLI가 없는 환경에서 사용합니다.
|
|
20
|
+
|
|
21
|
+
## 사용법
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
/tfx-codex "작업 설명"
|
|
25
|
+
/tfx-codex N:codex "작업 설명"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 동작 원리
|
|
29
|
+
|
|
30
|
+
`tfx-auto`와 동일한 워크플로우를 사용하되, `TFX_CLI_MODE=codex` 환경변수를 설정하여
|
|
31
|
+
모든 Gemini 에이전트(designer, writer)를 Codex로 리매핑합니다.
|
|
32
|
+
|
|
33
|
+
### 에이전트 라우팅
|
|
34
|
+
|
|
35
|
+
| 에이전트 | 원래 CLI | tfx-codex에서 |
|
|
36
|
+
|----------|---------|-------------|
|
|
37
|
+
| executor, build-fixer, debugger | Codex | Codex (변경 없음) |
|
|
38
|
+
| architect, planner, critic, analyst | Codex | Codex (변경 없음) |
|
|
39
|
+
| code-reviewer, security-reviewer | Codex | Codex (변경 없음) |
|
|
40
|
+
| scientist, document-specialist | Codex | Codex (변경 없음) |
|
|
41
|
+
| **designer** | ~~Gemini~~ | **Codex** (effort: codex53_high) — UI 코드 생성 |
|
|
42
|
+
| **writer** | ~~Gemini~~ | **Codex Spark** (effort: spark53_low) — 경량 문서 |
|
|
43
|
+
| explore | Claude Haiku | Claude Haiku (변경 없음) |
|
|
44
|
+
| verifier, test-engineer | Claude Sonnet | Codex (변경 없음) |
|
|
45
|
+
|
|
46
|
+
## 실행 규칙
|
|
47
|
+
|
|
48
|
+
**tfx-auto SKILL.md의 커맨드 숏컷 → 트리아지 → 멀티 태스크 라우팅 → 실행 → 결과 파싱 → 보고 섹션을 그대로 따릅니다.**
|
|
49
|
+
|
|
50
|
+
유일한 차이점:
|
|
51
|
+
|
|
52
|
+
1. **실행 섹션(CLI 에이전트) 수행 시** `TFX_CLI_MODE=codex`를 환경변수로 전달:
|
|
53
|
+
```bash
|
|
54
|
+
TFX_CLI_MODE=codex bash ~/.claude/scripts/tfx-route.sh {agent} '{prompt}' {mcp_profile}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
2. **트리아지 섹션에서** gemini 분류 결과를 codex로 강제 변환:
|
|
58
|
+
- Codex 분류가 `gemini`를 반환하면 → `codex`로 교체
|
|
59
|
+
- Opus 분해에서 designer/writer → Codex 에이전트 + implement/analyze MCP 프로필
|
|
60
|
+
|
|
61
|
+
3. **MCP 프로필 조정**:
|
|
62
|
+
- designer: `implement` (코드 기반 UI 작업)
|
|
63
|
+
- writer: `analyze` (문서 기반 리서치+작성)
|
|
64
|
+
|
|
65
|
+
## 필수 조건
|
|
66
|
+
|
|
67
|
+
- [Codex CLI](https://github.com/openai/codex): `npm install -g @openai/codex`
|
|
68
|
+
- Gemini CLI 불필요
|
|
69
|
+
|
|
70
|
+
## Troubleshooting
|
|
71
|
+
|
|
72
|
+
문제 발생 시 `/tfx-doctor` 실행. (`--fix` 자동 수정, `--reset` 캐시 초기화)
|
package/skills/tfx-find/SKILL.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tfx-find
|
|
3
|
-
description:
|
|
3
|
+
description: >
|
|
4
|
+
코드베이스에서 파일, 함수, 클래스, 문자열을 빠르게 찾을 때 사용한다.
|
|
5
|
+
'코드 검색', 'find in code', '어디에 있어?', '이 함수 어디서 쓰여?',
|
|
6
|
+
'파일 찾아줘', '코드베이스 탐색' 같은 요청에 반드시 사용.
|
|
7
|
+
파일 위치, 심볼 사용처, 패턴 검색이 필요한 모든 상황에 적극 활용.
|
|
4
8
|
triggers:
|
|
5
9
|
- 코드 검색
|
|
6
10
|
- codebase search
|
|
@@ -15,6 +19,13 @@ argument-hint: "<검색 패턴 또는 질문>"
|
|
|
15
19
|
> **ARGUMENTS 처리**: 이 스킬이 `ARGUMENTS: <값>`과 함께 호출되면, 해당 값을 사용자 입력으로 취급하여
|
|
16
20
|
> 워크플로우의 첫 단계 입력으로 사용한다. ARGUMENTS가 비어있거나 없으면 기존 절차대로 사용자에게 입력을 요청한다.
|
|
17
21
|
|
|
22
|
+
> **Telemetry**
|
|
23
|
+
>
|
|
24
|
+
> - Skill: `tfx-find`
|
|
25
|
+
> - Description: `코드베이스에서 파일, 함수, 클래스, 문자열을 빠르게 찾을 때 사용한다. '코드 검색', 'find in code', '어디에 있어?', '이 함수 어디서 쓰여?', '파일 찾아줘', '코드베이스 탐색' 같은 요청에 반드시 사용. 파일 위치, 심볼 사용처, 패턴 검색이 필요한 모든 상황에 적극 활용.`
|
|
26
|
+
> - Session: 요청별 식별자를 유지해 단계별 실행 로그를 추적한다.
|
|
27
|
+
> - Errors: 실패 시 원인/복구/재시도 여부를 구조화해 기록한다.
|
|
28
|
+
|
|
18
29
|
|
|
19
30
|
> OMC explore agent 오마주. Haiku의 속도 + Glob/Grep/Read의 정밀도.
|
|
20
31
|
> "찾는 건 빠르게, 읽는 건 정확하게."
|