triflux 10.4.0 → 10.7.0

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.
Files changed (391) hide show
  1. package/.claude-plugin/marketplace.json +34 -0
  2. package/.claude-plugin/plugin.json +22 -0
  3. package/bin/tfx-doctor-tui.mjs +1 -1
  4. package/bin/tfx-doctor.mjs +6 -1
  5. package/bin/tfx-profile.mjs +1 -1
  6. package/bin/tfx-setup-tui.mjs +1 -1
  7. package/bin/tfx-setup.mjs +6 -1
  8. package/bin/triflux.mjs +2396 -1140
  9. package/config/mcp-registry.json +29 -0
  10. package/hooks/agent-route-guard.mjs +12 -8
  11. package/hooks/cross-review-tracker.mjs +21 -8
  12. package/hooks/error-context.mjs +19 -7
  13. package/hooks/hook-adaptive-collector.mjs +18 -16
  14. package/hooks/hook-manager.mjs +93 -32
  15. package/hooks/hook-orchestrator.mjs +108 -24
  16. package/hooks/hook-registry.json +267 -256
  17. package/hooks/keyword-rules.json +6 -10
  18. package/hooks/lib/resolve-root.mjs +1 -1
  19. package/hooks/mcp-config-watcher.mjs +6 -2
  20. package/hooks/pipeline-stop.mjs +3 -6
  21. package/hooks/safety-guard.mjs +99 -28
  22. package/hooks/session-start-fast.mjs +143 -0
  23. package/hooks/subagent-verifier.mjs +5 -4
  24. package/hub/account-broker.mjs +256 -60
  25. package/hub/adaptive-diagnostic.mjs +75 -48
  26. package/hub/adaptive-inject.mjs +96 -58
  27. package/hub/adaptive-memory.mjs +156 -42
  28. package/hub/adaptive.mjs +60 -31
  29. package/hub/assign-callbacks.mjs +163 -126
  30. package/hub/bridge.mjs +0 -1
  31. package/hub/cli-adapter-base.mjs +200 -48
  32. package/hub/codex-adapter.mjs +76 -96
  33. package/hub/codex-compat.mjs +3 -3
  34. package/hub/codex-preflight.mjs +63 -37
  35. package/hub/delegator/contracts.mjs +19 -23
  36. package/hub/delegator/index.mjs +14 -14
  37. package/hub/delegator/service.mjs +88 -64
  38. package/hub/delegator/tool-definitions.mjs +35 -35
  39. package/hub/fullcycle.mjs +33 -17
  40. package/hub/gemini-adapter.mjs +69 -94
  41. package/hub/hitl.mjs +202 -143
  42. package/hub/intent.mjs +161 -38
  43. package/hub/lib/cache-guard.mjs +43 -17
  44. package/hub/lib/mcp-response-cache.mjs +66 -32
  45. package/hub/lib/memory-store.mjs +285 -111
  46. package/hub/lib/path-utils.mjs +35 -37
  47. package/hub/lib/process-utils.mjs +106 -37
  48. package/hub/lib/spawn-trace.mjs +527 -0
  49. package/hub/lib/ssh-command.mjs +34 -4
  50. package/hub/lib/ssh-retry.mjs +5 -1
  51. package/hub/lib/uuidv7.mjs +4 -3
  52. package/hub/memory-doctor.mjs +266 -106
  53. package/hub/middleware/request-logger.mjs +61 -34
  54. package/hub/paths.mjs +9 -9
  55. package/hub/pipeline/gates/confidence.mjs +34 -15
  56. package/hub/pipeline/gates/consensus.mjs +27 -15
  57. package/hub/pipeline/gates/index.mjs +7 -3
  58. package/hub/pipeline/gates/selfcheck.mjs +57 -19
  59. package/hub/pipeline/index.mjs +77 -42
  60. package/hub/pipeline/state.mjs +10 -10
  61. package/hub/pipeline/transitions.mjs +40 -23
  62. package/hub/platform.mjs +57 -48
  63. package/hub/promote-penalties.mjs +25 -7
  64. package/hub/quality/deslop.mjs +70 -49
  65. package/hub/research.mjs +32 -25
  66. package/hub/router.mjs +924 -791
  67. package/hub/routing/complexity.mjs +132 -29
  68. package/hub/routing/index.mjs +17 -12
  69. package/hub/routing/q-learning.mjs +76 -28
  70. package/hub/server.mjs +4 -4
  71. package/hub/session-fingerprint.mjs +127 -61
  72. package/hub/state.mjs +84 -43
  73. package/hub/store-adapter.mjs +59 -26
  74. package/hub/store.mjs +356 -153
  75. package/hub/team/agent-map.json +22 -7
  76. package/hub/team/ansi.mjs +186 -122
  77. package/hub/team/backend.mjs +28 -10
  78. package/hub/team/cli/commands/attach.mjs +57 -37
  79. package/hub/team/cli/commands/control.mjs +29 -8
  80. package/hub/team/cli/commands/debug.mjs +95 -74
  81. package/hub/team/cli/commands/focus.mjs +80 -53
  82. package/hub/team/cli/commands/interrupt.mjs +18 -6
  83. package/hub/team/cli/commands/kill.mjs +16 -5
  84. package/hub/team/cli/commands/list.mjs +31 -24
  85. package/hub/team/cli/commands/send.mjs +19 -6
  86. package/hub/team/cli/commands/start/index.mjs +154 -31
  87. package/hub/team/cli/commands/start/parse-args.mjs +38 -11
  88. package/hub/team/cli/commands/start/start-headless.mjs +112 -36
  89. package/hub/team/cli/commands/start/start-in-process.mjs +50 -40
  90. package/hub/team/cli/commands/start/start-mux.mjs +122 -73
  91. package/hub/team/cli/commands/start/start-wt.mjs +86 -69
  92. package/hub/team/cli/commands/status.mjs +43 -14
  93. package/hub/team/cli/commands/stop.mjs +11 -4
  94. package/hub/team/cli/commands/task.mjs +8 -3
  95. package/hub/team/cli/commands/tasks.mjs +13 -13
  96. package/hub/team/cli/index.mjs +2 -2
  97. package/hub/team/cli/manifest.mjs +38 -8
  98. package/hub/team/cli/render.mjs +52 -30
  99. package/hub/team/cli/services/attach-fallback.mjs +74 -54
  100. package/hub/team/cli/services/hub-client.mjs +42 -14
  101. package/hub/team/cli/services/member-selector.mjs +37 -30
  102. package/hub/team/cli/services/native-control.mjs +143 -116
  103. package/hub/team/cli/services/runtime-mode.mjs +2 -1
  104. package/hub/team/cli/services/state-store.mjs +25 -8
  105. package/hub/team/cli/services/task-model.mjs +40 -30
  106. package/hub/team/conductor-mesh-bridge.mjs +24 -23
  107. package/hub/team/conductor.mjs +8 -4
  108. package/hub/team/dashboard-anchor.mjs +4 -5
  109. package/hub/team/dashboard-layout.mjs +3 -1
  110. package/hub/team/dashboard-open.mjs +41 -21
  111. package/hub/team/dashboard.mjs +76 -28
  112. package/hub/team/event-log.mjs +18 -10
  113. package/hub/team/handoff.mjs +31 -15
  114. package/hub/team/headless.mjs +2 -1
  115. package/hub/team/health-probe.mjs +69 -54
  116. package/hub/team/launcher-template.mjs +16 -13
  117. package/hub/team/native-supervisor.mjs +65 -21
  118. package/hub/team/native.mjs +74 -35
  119. package/hub/team/nativeProxy.mjs +184 -113
  120. package/hub/team/notify.mjs +120 -77
  121. package/hub/team/orchestrator.mjs +166 -161
  122. package/hub/team/pane.mjs +12 -7
  123. package/hub/team/process-cleanup.mjs +25 -16
  124. package/hub/team/psmux.mjs +491 -201
  125. package/hub/team/remote-probe.mjs +68 -52
  126. package/hub/team/remote-session.mjs +117 -59
  127. package/hub/team/remote-watcher.mjs +61 -33
  128. package/hub/team/routing.mjs +51 -25
  129. package/hub/team/runtime-strategy.mjs +3 -1
  130. package/hub/team/session.mjs +675 -611
  131. package/hub/team/shared.mjs +13 -13
  132. package/hub/team/staleState.mjs +72 -30
  133. package/hub/team/swarm-locks.mjs +15 -13
  134. package/hub/team/swarm-planner.mjs +32 -21
  135. package/hub/team/swarm-reconciler.mjs +48 -23
  136. package/hub/team/tui-lite.mjs +266 -68
  137. package/hub/team/tui-remote-adapter.mjs +14 -10
  138. package/hub/team/tui-viewer.mjs +99 -43
  139. package/hub/team/tui.mjs +708 -271
  140. package/hub/team/worktree-lifecycle.mjs +152 -58
  141. package/hub/team/wt-manager.mjs +24 -14
  142. package/hub/token-mode.mjs +71 -71
  143. package/hub/tray.mjs +411 -368
  144. package/hub/workers/claude-worker.mjs +162 -118
  145. package/hub/workers/codex-mcp.mjs +558 -507
  146. package/hub/workers/delegator-mcp.mjs +507 -333
  147. package/hub/workers/factory.mjs +21 -21
  148. package/hub/workers/gemini-worker.mjs +115 -84
  149. package/hub/workers/interface.mjs +6 -1
  150. package/hub/workers/worker-utils.mjs +21 -14
  151. package/hud/colors.mjs +27 -9
  152. package/hud/constants.mjs +162 -26
  153. package/hud/context-monitor.mjs +82 -41
  154. package/hud/hud-qos-status.mjs +129 -49
  155. package/hud/mission-board.mjs +6 -3
  156. package/hud/providers/claude.mjs +226 -115
  157. package/hud/providers/codex.mjs +62 -22
  158. package/hud/providers/gemini.mjs +168 -56
  159. package/hud/renderers.mjs +384 -119
  160. package/hud/terminal.mjs +101 -31
  161. package/hud/utils.mjs +78 -38
  162. package/mesh/index.mjs +11 -5
  163. package/mesh/mesh-budget.mjs +18 -9
  164. package/mesh/mesh-heartbeat.mjs +1 -1
  165. package/mesh/mesh-queue.mjs +3 -5
  166. package/mesh/mesh-router.mjs +5 -4
  167. package/package.json +56 -21
  168. package/scripts/__tests__/gen-skill-docs.test.mjs +36 -7
  169. package/scripts/__tests__/keyword-detector.test.mjs +77 -28
  170. package/scripts/__tests__/mcp-guard-engine.test.mjs +58 -20
  171. package/scripts/__tests__/remote-spawn-transfer.test.mjs +30 -19
  172. package/scripts/__tests__/remote-spawn.test.mjs +10 -4
  173. package/scripts/__tests__/session-start-fast.test.mjs +36 -0
  174. package/scripts/__tests__/skill-template.test.mjs +98 -50
  175. package/scripts/__tests__/smoke.test.mjs +1 -1
  176. package/scripts/__tests__/spawn-trace.test.mjs +102 -0
  177. package/scripts/__tests__/tfx-doctor-diagnose.test.mjs +48 -0
  178. package/scripts/cache-doctor.mjs +11 -4
  179. package/scripts/cache-warmup.mjs +96 -37
  180. package/scripts/claudemd-sync.mjs +27 -17
  181. package/scripts/codex-gateway-preflight.mjs +52 -37
  182. package/scripts/codex-mcp-gateway-sync.mjs +59 -39
  183. package/scripts/config-audit.mjs +232 -0
  184. package/scripts/convert-to-tmpl.mjs +54 -0
  185. package/scripts/cross-review-gate.mjs +35 -12
  186. package/scripts/cross-review-tracker.mjs +21 -8
  187. package/scripts/demo.mjs +35 -17
  188. package/scripts/doctor-diagnose.mjs +284 -0
  189. package/scripts/gen-skill-docs.mjs +7 -2
  190. package/scripts/gen-skill-manifest.mjs +2 -1
  191. package/scripts/headless-guard.mjs +86 -48
  192. package/scripts/hub-ensure.mjs +139 -120
  193. package/scripts/keyword-detector.mjs +293 -272
  194. package/scripts/keyword-rules-expander.mjs +538 -521
  195. package/scripts/lib/claudemd-scanner.mjs +6 -1
  196. package/scripts/lib/context.mjs +3 -3
  197. package/scripts/lib/cross-review-utils.mjs +6 -3
  198. package/scripts/lib/env-probe.mjs +47 -28
  199. package/scripts/lib/gemini-profiles.mjs +44 -10
  200. package/scripts/lib/handoff.mjs +33 -17
  201. package/scripts/lib/hook-utils.mjs +8 -6
  202. package/scripts/lib/keyword-rules.mjs +43 -19
  203. package/scripts/lib/logger.mjs +24 -24
  204. package/scripts/lib/mcp-filter.mjs +377 -239
  205. package/scripts/lib/mcp-guard-engine.mjs +194 -79
  206. package/scripts/lib/mcp-manifest.mjs +23 -13
  207. package/scripts/lib/mcp-server-catalog.mjs +355 -118
  208. package/scripts/lib/psmux-info.mjs +11 -6
  209. package/scripts/lib/remote-spawn-transfer.mjs +44 -14
  210. package/scripts/lib/skill-template.mjs +30 -7
  211. package/scripts/mcp-check.mjs +58 -39
  212. package/scripts/mcp-gateway-config.mjs +83 -39
  213. package/scripts/mcp-gateway-ensure.mjs +43 -35
  214. package/scripts/mcp-gateway-integration-test.mjs +70 -58
  215. package/scripts/mcp-gateway-start.mjs +126 -60
  216. package/scripts/mcp-gateway-verify.mjs +24 -22
  217. package/scripts/mcp-safety-guard.mjs +44 -11
  218. package/scripts/notion-read.mjs +669 -554
  219. package/scripts/pack.mjs +94 -89
  220. package/scripts/preflight-cache.mjs +27 -10
  221. package/scripts/preinstall.mjs +42 -13
  222. package/scripts/remote-spawn.mjs +309 -94
  223. package/scripts/run.cjs +8 -5
  224. package/scripts/session-spawn-helper.mjs +130 -39
  225. package/scripts/session-stale-cleanup.mjs +123 -0
  226. package/scripts/setup.mjs +941 -492
  227. package/scripts/test-lock.mjs +20 -7
  228. package/scripts/test-tfx-route-no-claude-native.mjs +61 -57
  229. package/scripts/tfx-batch-stats.mjs +117 -96
  230. package/scripts/tfx-gate-activate.mjs +11 -4
  231. package/scripts/tfx-route-post.mjs +87 -20
  232. package/scripts/tfx-route-worker.mjs +57 -51
  233. package/scripts/tfx-route.sh +41 -124
  234. package/scripts/tmp-cleanup.mjs +21 -7
  235. package/scripts/token-snapshot.mjs +204 -85
  236. package/skills/.omc/state/idle-notif-cooldown.json +1 -1
  237. package/skills/.omc/state/last-tool-error.json +1 -1
  238. package/skills/.omc/state/subagent-tracking.json +1 -1
  239. package/skills/_templates/base.md +1 -6
  240. package/skills/merge-worktree/SKILL.md.tmpl +144 -0
  241. package/skills/shared/telemetry-segment.md +6 -0
  242. package/skills/star-prompt/SKILL.md.tmpl +222 -0
  243. package/skills/tfx-analysis/SKILL.md.tmpl +107 -0
  244. package/skills/tfx-analysis/skill.json +1 -6
  245. package/skills/tfx-auto/SKILL.md +1 -0
  246. package/skills/{tfx-workspace/skill-snapshot/tfx-auto-codex/SKILL.md → tfx-auto-codex/SKILL.md.tmpl} +33 -4
  247. package/skills/tfx-auto-codex/skill.json +1 -3
  248. package/skills/tfx-autopilot/SKILL.md.tmpl +116 -0
  249. package/skills/tfx-autopilot/skill.json +1 -5
  250. package/skills/tfx-autoresearch/SKILL.md.tmpl +136 -0
  251. package/skills/tfx-autoroute/SKILL.md.tmpl +189 -0
  252. package/skills/tfx-autoroute/skill.json +1 -7
  253. package/skills/tfx-codex/SKILL.md +1 -0
  254. package/skills/tfx-codex/skill.json +1 -3
  255. package/skills/tfx-codex-swarm/SKILL.md.tmpl +16 -0
  256. package/skills/tfx-codex-swarm/evals/evals.json +1 -1
  257. package/skills/tfx-codex-swarm/skill.json +1 -4
  258. package/skills/tfx-codex-swarm-workspace/iteration-1/benchmark.json +54 -12
  259. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/with_skill/grading.json +35 -7
  260. package/skills/tfx-codex-swarm-workspace/iteration-1/full-swarm-all-prds/without_skill/grading.json +35 -7
  261. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/with_skill/grading.json +25 -5
  262. package/skills/tfx-codex-swarm-workspace/iteration-1/implicit-swarm-no-keywords/without_skill/grading.json +25 -5
  263. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/with_skill/grading.json +20 -4
  264. package/skills/tfx-codex-swarm-workspace/iteration-1/selective-spawn-with-override/without_skill/grading.json +16 -4
  265. package/skills/tfx-consensus/SKILL.md.tmpl +146 -0
  266. package/skills/tfx-debate/SKILL.md.tmpl +192 -0
  267. package/skills/tfx-debate/skill.json +1 -7
  268. package/skills/tfx-deep-analysis/SKILL.md.tmpl +228 -0
  269. package/skills/tfx-deep-analysis/skill.json +1 -5
  270. package/skills/tfx-deep-interview/SKILL.md.tmpl +203 -0
  271. package/skills/tfx-deep-plan/SKILL.md.tmpl +282 -0
  272. package/skills/tfx-deep-qa/SKILL.md.tmpl +165 -0
  273. package/skills/tfx-deep-qa/skill.json +1 -6
  274. package/skills/tfx-deep-research/SKILL.md.tmpl +217 -0
  275. package/skills/tfx-deep-review/SKILL.md.tmpl +179 -0
  276. package/skills/tfx-doctor/SKILL.md +21 -0
  277. package/skills/tfx-doctor/SKILL.md.tmpl +172 -0
  278. package/skills/tfx-doctor/skill.json +1 -3
  279. package/skills/tfx-find/SKILL.md +1 -0
  280. package/skills/tfx-forge/SKILL.md.tmpl +187 -0
  281. package/skills/tfx-fullcycle/SKILL.md.tmpl +286 -0
  282. package/skills/tfx-fullcycle/skill.json +1 -6
  283. package/skills/{tfx-workspace/skill-snapshot/tfx-gemini/SKILL.md → tfx-gemini/SKILL.md.tmpl} +16 -7
  284. package/skills/tfx-gemini/skill.json +1 -3
  285. package/skills/tfx-hooks/SKILL.md.tmpl +216 -0
  286. package/skills/tfx-hooks/skill.json +1 -3
  287. package/skills/tfx-hub/SKILL.md.tmpl +212 -0
  288. package/skills/tfx-hub/skill.json +1 -3
  289. package/skills/tfx-index/SKILL.md +1 -0
  290. package/skills/tfx-index/skill.json +1 -6
  291. package/skills/tfx-interview/SKILL.md.tmpl +285 -0
  292. package/skills/tfx-multi/SKILL.md.tmpl +183 -0
  293. package/skills/tfx-multi/skill.json +1 -3
  294. package/skills/tfx-panel/SKILL.md.tmpl +189 -0
  295. package/skills/tfx-panel/skill.json +1 -7
  296. package/skills/tfx-persist/SKILL.md.tmpl +270 -0
  297. package/skills/tfx-persist/skill.json +1 -7
  298. package/skills/tfx-plan/SKILL.md +1 -0
  299. package/skills/tfx-plan/skill.json +1 -6
  300. package/skills/tfx-profile/SKILL.md.tmpl +239 -0
  301. package/skills/tfx-profile/skill.json +1 -3
  302. package/skills/tfx-prune/SKILL.md.tmpl +200 -0
  303. package/skills/tfx-prune/skill.json +1 -7
  304. package/skills/tfx-psmux-rules/SKILL.md.tmpl +326 -0
  305. package/skills/tfx-psmux-rules/skill.json +1 -4
  306. package/skills/tfx-qa/SKILL.md +1 -0
  307. package/skills/tfx-qa/skill.json +1 -6
  308. package/skills/tfx-ralph/SKILL.md.tmpl +28 -0
  309. package/skills/tfx-ralph/skill.json +1 -4
  310. package/skills/tfx-remote-setup/SKILL.md.tmpl +576 -0
  311. package/skills/tfx-remote-setup/skill.json +1 -3
  312. package/skills/tfx-remote-spawn/SKILL.md.tmpl +263 -0
  313. package/skills/tfx-remote-spawn/references/hosts.json +16 -16
  314. package/skills/tfx-remote-spawn/skill.json +1 -4
  315. package/skills/tfx-research/SKILL.md +1 -0
  316. package/skills/tfx-review/SKILL.md +1 -0
  317. package/skills/tfx-review/skill.json +1 -6
  318. package/skills/tfx-setup/SKILL.md.tmpl +504 -0
  319. package/skills/tfx-setup/skill.json +1 -3
  320. package/skills/tfx-swarm/SKILL.md +22 -0
  321. package/skills/tfx-swarm/SKILL.md.tmpl +218 -0
  322. package/tui/codex-profile.mjs +457 -0
  323. package/tui/core.mjs +266 -0
  324. package/tui/doctor.mjs +375 -0
  325. package/tui/gemini-profile.mjs +299 -0
  326. package/tui/monitor-data.mjs +152 -0
  327. package/tui/monitor.mjs +339 -0
  328. package/tui/setup.mjs +533 -0
  329. package/CLAUDE.md +0 -193
  330. package/references/hosts.json +0 -33
  331. package/skills/tfx-workspace/async-tests/run-tests.sh +0 -203
  332. package/skills/tfx-workspace/evals/evals.json +0 -79
  333. package/skills/tfx-workspace/iteration-1/benchmark.json +0 -162
  334. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/eval_metadata.json +0 -11
  335. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/grading.json +0 -9
  336. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/outputs/analysis.md +0 -154
  337. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/old_skill/timing.json +0 -5
  338. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/grading.json +0 -9
  339. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/outputs/analysis.md +0 -126
  340. package/skills/tfx-workspace/iteration-1/codex-gemini-remap/with_skill/timing.json +0 -5
  341. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/eval_metadata.json +0 -11
  342. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/grading.json +0 -9
  343. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/outputs/analysis.md +0 -119
  344. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/old_skill/timing.json +0 -5
  345. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/grading.json +0 -9
  346. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/outputs/analysis.md +0 -115
  347. package/skills/tfx-workspace/iteration-1/doctor-diagnosis/with_skill/timing.json +0 -5
  348. package/skills/tfx-workspace/iteration-1/hub-start-sequence/eval_metadata.json +0 -10
  349. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/grading.json +0 -8
  350. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/outputs/analysis.md +0 -86
  351. package/skills/tfx-workspace/iteration-1/hub-start-sequence/old_skill/timing.json +0 -5
  352. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/grading.json +0 -8
  353. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/outputs/analysis.md +0 -81
  354. package/skills/tfx-workspace/iteration-1/hub-start-sequence/with_skill/timing.json +0 -5
  355. package/skills/tfx-workspace/iteration-1/multi-team-creation/eval_metadata.json +0 -12
  356. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/grading.json +0 -10
  357. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/outputs/analysis.md +0 -316
  358. package/skills/tfx-workspace/iteration-1/multi-team-creation/old_skill/timing.json +0 -5
  359. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/grading.json +0 -10
  360. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/outputs/analysis.md +0 -352
  361. package/skills/tfx-workspace/iteration-1/multi-team-creation/with_skill/timing.json +0 -5
  362. package/skills/tfx-workspace/iteration-1/review.html +0 -1325
  363. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/eval_metadata.json +0 -12
  364. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/grading.json +0 -10
  365. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/outputs/analysis.md +0 -97
  366. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/old_skill/timing.json +0 -5
  367. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/grading.json +0 -10
  368. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/outputs/analysis.md +0 -94
  369. package/skills/tfx-workspace/iteration-1/routing-implement-shortcut/with_skill/timing.json +0 -5
  370. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/eval_metadata.json +0 -12
  371. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/grading.json +0 -10
  372. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/outputs/analysis.md +0 -209
  373. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/old_skill/timing.json +0 -5
  374. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/grading.json +0 -10
  375. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/outputs/analysis.md +0 -193
  376. package/skills/tfx-workspace/iteration-1/routing-multi-task-triage/with_skill/timing.json +0 -5
  377. package/skills/tfx-workspace/iteration-2/benchmark.json +0 -62
  378. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/eval_metadata.json +0 -13
  379. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/grading.json +0 -11
  380. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/outputs/analysis.md +0 -382
  381. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/old_skill/timing.json +0 -5
  382. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/grading.json +0 -11
  383. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/outputs/analysis.md +0 -333
  384. package/skills/tfx-workspace/iteration-2/multi-team-creation-refactored/with_skill/timing.json +0 -5
  385. package/skills/tfx-workspace/iteration-2/review.html +0 -1325
  386. package/skills/tfx-workspace/skill-snapshot/tfx-auto/SKILL.md +0 -217
  387. package/skills/tfx-workspace/skill-snapshot/tfx-codex/SKILL.md +0 -65
  388. package/skills/tfx-workspace/skill-snapshot/tfx-doctor/SKILL.md +0 -94
  389. package/skills/tfx-workspace/skill-snapshot/tfx-hub/SKILL.md +0 -133
  390. package/skills/tfx-workspace/skill-snapshot/tfx-multi/SKILL.md +0 -426
  391. package/skills/tfx-workspace/skill-snapshot/tfx-setup/SKILL.md +0 -101
@@ -8,23 +8,51 @@
8
8
  // BLOCK (exit 2) — 복구 불가능한 파괴적 명령
9
9
  // WARN (allow + context) — 주의가 필요한 명령
10
10
 
11
- import { readFileSync, existsSync } from "node:fs";
11
+ import { existsSync, readFileSync } from "node:fs";
12
12
  import { join } from "node:path";
13
13
 
14
14
  // ── 차단 규칙 ──────────────────────────────────────────────
15
15
  const BLOCK_RULES = [
16
- { pattern: /\brm\s+(-[^\s]*)?-rf?\s+[/~](?!tmp\b)(?!\S*node_modules)/i, reason: "루트/홈 디렉토리 rm -rf 차단" },
17
- { pattern: /\brm\s+(-[^\s]*)?-rf?\s+\.\s*$/i, reason: "현재 디렉토리 rm -rf . 차단" },
18
- { pattern: /\bgit\s+push\s+.*--force\s+.*\b(main|master)\b/i, reason: "main/master force push 차단" },
19
- { pattern: /\bgit\s+push\s+--force\s*$/i, reason: "대상 미지정 force push 차단" },
20
- { pattern: /\bgit\s+reset\s+--hard\s+origin\//i, reason: "remote reset --hard 차단 — 로컬 작업 소실 위험" },
16
+ {
17
+ pattern: /\brm\s+(-[^\s]*)?-rf?\s+[/~](?!tmp\b)(?!\S*node_modules)/i,
18
+ reason: "루트/홈 디렉토리 rm -rf 차단",
19
+ },
20
+ {
21
+ pattern: /\brm\s+(-[^\s]*)?-rf?\s+\.\s*$/i,
22
+ reason: "현재 디렉토리 rm -rf . 차단",
23
+ },
24
+ {
25
+ pattern: /\bgit\s+push\s+.*--force\s+.*\b(main|master)\b/i,
26
+ reason: "main/master force push 차단",
27
+ },
28
+ {
29
+ pattern: /\bgit\s+push\s+--force\s*$/i,
30
+ reason: "대상 미지정 force push 차단",
31
+ },
32
+ {
33
+ pattern: /\bgit\s+reset\s+--hard\s+origin\//i,
34
+ reason: "remote reset --hard 차단 — 로컬 작업 소실 위험",
35
+ },
21
36
  { pattern: /\bdrop\s+(table|database|schema)\b/i, reason: "SQL DROP 차단" },
22
37
  { pattern: /\btruncate\s+table\b/i, reason: "SQL TRUNCATE 차단" },
23
38
  { pattern: /\bformat\s+[a-z]:/i, reason: "디스크 포맷 차단" },
24
39
  { pattern: /\b(del|rmdir)\s+\/[sq]\b/i, reason: "Windows 재귀 삭제 차단" },
25
- { pattern: /\bgit\s+clean\s+.*-fd/i, reason: "git clean -fd 차단 — 추적되지 않은 파일 소실 위험" },
26
- { pattern: /\bpsmux\s+kill-session\b/i, reason: "raw psmux kill-session 차단 — WT ConPTY 프리징 위험. 안전 경로: node hub/team/psmux.mjs kill --session <name>", skipIfGit: true },
27
- { pattern: /\bpsmux\s+kill-server\b/i, reason: "psmux kill-server 차단 — 모든 세션이 즉시 종료됩니다. node hub/team/psmux.mjs kill-swarm 사용", skipIfGit: true },
40
+ {
41
+ pattern: /\bgit\s+clean\s+.*-fd/i,
42
+ reason: "git clean -fd 차단 — 추적되지 않은 파일 소실 위험",
43
+ },
44
+ {
45
+ pattern: /\bpsmux\s+kill-session\b/i,
46
+ reason:
47
+ "raw psmux kill-session 차단 — WT ConPTY 프리징 위험. 안전 경로: node hub/team/psmux.mjs kill --session <name>",
48
+ skipIfGit: true,
49
+ },
50
+ {
51
+ pattern: /\bpsmux\s+kill-server\b/i,
52
+ reason:
53
+ "psmux kill-server 차단 — 모든 세션이 즉시 종료됩니다. node hub/team/psmux.mjs kill-swarm 사용",
54
+ skipIfGit: true,
55
+ },
28
56
  ];
29
57
 
30
58
  const WT_DIRECT_PATTERNS = [
@@ -42,12 +70,12 @@ const WT_DIRECT_BLOCK_MESSAGE =
42
70
  // ── SSH+PowerShell bash 문법 차단 ────────────────────────────
43
71
  // 원격 기본 셸이 PowerShell인 호스트에 bash redirect/glob을 보내면 오동작
44
72
  const BASH_SYNTAX_IN_SSH = [
45
- /2>\/dev\/null/, // 2>/dev/null → PowerShell에서 Out-File C:\dev\null
46
- />\s*\/dev\/null/, // >/dev/null
47
- /&>\s*\/dev\/null/, // &>/dev/null
48
- /\$\(/, // $(cmd) → PowerShell에서 다른 의미
49
- /\bsource\s+/, // source → PowerShell에 없음
50
- /\bexport\s+\w+=/, // export VAR= → PowerShell에 없음
73
+ /2>\/dev\/null/, // 2>/dev/null → PowerShell에서 Out-File C:\dev\null
74
+ />\s*\/dev\/null/, // >/dev/null
75
+ /&>\s*\/dev\/null/, // &>/dev/null
76
+ /\$\(/, // $(cmd) → PowerShell에서 다른 의미
77
+ /\bsource\s+/, // source → PowerShell에 없음
78
+ /\bexport\s+\w+=/, // export VAR= → PowerShell에 없음
51
79
  ];
52
80
 
53
81
  const SSH_POWERSHELL_HINT =
@@ -56,28 +84,59 @@ const SSH_POWERSHELL_HINT =
56
84
 
57
85
  // ── 경고 규칙 ──────────────────────────────────────────────
58
86
  const WARN_RULES = [
59
- { pattern: /\bgit\s+push\b(?!.*--force)/i, warn: "git push 감지. 원격 저장소에 반영됩니다." },
60
- { pattern: /\bgit\s+rebase\b/i, warn: "git rebase 감지. 커밋 히스토리가 변경됩니다." },
87
+ {
88
+ pattern: /\bgit\s+push\b(?!.*--force)/i,
89
+ warn: "git push 감지. 원격 저장소에 반영됩니다.",
90
+ },
91
+ {
92
+ pattern: /\bgit\s+rebase\b/i,
93
+ warn: "git rebase 감지. 커밋 히스토리가 변경됩니다.",
94
+ },
61
95
  { pattern: /\bgit\s+branch\s+-[dD]\b/i, warn: "브랜치 삭제 감지." },
62
- { pattern: /\bnpm\s+publish\b/i, warn: "npm publish 감지. 공개 레지스트리에 배포됩니다." },
63
- { pattern: /\brm\s+(-[^\s]*)?-rf?\s/i, warn: "재귀 삭제 감지. 대상을 확인하세요." },
64
- { pattern: /--no-verify\b/i, warn: "--no-verify 감지. 건너뛰기는 권장하지 않습니다." },
96
+ {
97
+ pattern: /\bnpm\s+publish\b/i,
98
+ warn: "npm publish 감지. 공개 레지스트리에 배포됩니다.",
99
+ },
100
+ {
101
+ pattern: /\brm\s+(-[^\s]*)?-rf?\s/i,
102
+ warn: "재귀 삭제 감지. 대상을 확인하세요.",
103
+ },
104
+ {
105
+ pattern: /--no-verify\b/i,
106
+ warn: "--no-verify 감지. 훅 건너뛰기는 권장하지 않습니다.",
107
+ },
65
108
  { pattern: /\bchmod\s+777\b/i, warn: "chmod 777 감지. 보안 위험." },
66
- { pattern: /\bcurl\s.*\|\s*(bash|sh)\b/i, warn: "curl | sh 감지. 원격 스크립트 실행 주의." },
109
+ {
110
+ pattern: /\bcurl\s.*\|\s*(bash|sh)\b/i,
111
+ warn: "curl | sh 감지. 원격 스크립트 실행 주의.",
112
+ },
67
113
  ];
68
114
 
69
115
  // ── reflexion 적응형 패널티 로드 ──────────────────────────────
70
116
  function loadReflexionPenalties() {
71
117
  try {
72
118
  const home = process.env.HOME || process.env.USERPROFILE || "";
73
- const penaltyFile = join(home, ".triflux", "reflexion", "pending-penalties.jsonl");
119
+ const penaltyFile = join(
120
+ home,
121
+ ".triflux",
122
+ "reflexion",
123
+ "pending-penalties.jsonl",
124
+ );
74
125
  if (!existsSync(penaltyFile)) return [];
75
126
  return readFileSync(penaltyFile, "utf8")
76
127
  .split("\n")
77
128
  .filter(Boolean)
78
- .map(line => { try { return JSON.parse(line); } catch { return null; } })
129
+ .map((line) => {
130
+ try {
131
+ return JSON.parse(line);
132
+ } catch {
133
+ return null;
134
+ }
135
+ })
79
136
  .filter(Boolean);
80
- } catch { return []; }
137
+ } catch {
138
+ return [];
139
+ }
81
140
  }
82
141
 
83
142
  function readStdin() {
@@ -89,7 +148,11 @@ function readStdin() {
89
148
  }
90
149
 
91
150
  function shouldSkipSegment(segment) {
92
- return !segment || segment.startsWith("#") || /^\s*(echo|printf|grep|git\s+commit)\b/i.test(segment);
151
+ return (
152
+ !segment ||
153
+ segment.startsWith("#") ||
154
+ /^\s*(echo|printf|grep|git\s+commit)\b/i.test(segment)
155
+ );
93
156
  }
94
157
 
95
158
  function hasSegmentInvocation(cmd, patterns) {
@@ -122,7 +185,7 @@ function blockCommand(message, command) {
122
185
  process.stderr.write(
123
186
  `${message}\n` +
124
187
  `명령어: ${command.slice(0, 120)}${command.length > 120 ? "..." : ""}\n` +
125
- "이 명령은 실행할 수 없습니다. 안전한 대안을 사용하세요."
188
+ "이 명령은 실행할 수 없습니다. 안전한 대안을 사용하세요.",
126
189
  );
127
190
  process.exit(2);
128
191
  }
@@ -161,7 +224,15 @@ function main() {
161
224
  const penalties = loadReflexionPenalties();
162
225
  if (penalties.length > 0) {
163
226
  for (const penalty of penalties) {
164
- if (penalty.error_pattern && new RegExp(penalty.error_pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").slice(0, 80), "i").test(command)) {
227
+ if (
228
+ penalty.error_pattern &&
229
+ new RegExp(
230
+ penalty.error_pattern
231
+ .replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
232
+ .slice(0, 80),
233
+ "i",
234
+ ).test(command)
235
+ ) {
165
236
  const output = {
166
237
  hookSpecificOutput: {
167
238
  hookEventName: "PreToolUse",
@@ -186,7 +257,7 @@ function main() {
186
257
  const sshMatch = seg.trim().match(/^ssh\s+\S+\s+(.*)/s);
187
258
  if (!sshMatch) continue;
188
259
  const sshPayload = sshMatch[1];
189
- const bashSyntax = BASH_SYNTAX_IN_SSH.find(p => p.test(sshPayload));
260
+ const bashSyntax = BASH_SYNTAX_IN_SSH.find((p) => p.test(sshPayload));
190
261
  if (bashSyntax) {
191
262
  blockCommand(
192
263
  `[safety-guard] SSH 명령에 bash 전용 문법 감지: ${bashSyntax}. ${SSH_POWERSHELL_HINT}`,
@@ -0,0 +1,143 @@
1
+ // hooks/session-start-fast.mjs — SessionStart in-process fast-path
2
+ //
3
+ // hook-orchestrator.mjs가 SessionStart 이벤트일 때 이 모듈을 dynamic import.
4
+ // 6개 훅을 1개 node 프로세스 안에서 실행하여 콜드스타트 7회 → 1회로 줄인다.
5
+ //
6
+ // 분류:
7
+ // BLOCKING (직렬, stdout 반환 전 완료): setup.runCritical, mcp-safety-guard.run
8
+ // DEFERRED (병렬, 실패해도 안 죽음): hub-ensure.run, mcp-gateway-ensure.run, setup.runDeferred
9
+ // BACKGROUND (fire-and-forget): preflight-cache.run
10
+ //
11
+ // external source 훅 (session-vault 등)은 여전히 execFile로 실행된다.
12
+
13
+ import { dirname, join } from "node:path";
14
+ import { fileURLToPath } from "node:url";
15
+ import { createModuleLogger } from "../scripts/lib/logger.mjs";
16
+
17
+ const __dirname = dirname(fileURLToPath(import.meta.url));
18
+ const SCRIPTS = join(__dirname, "..", "scripts");
19
+
20
+ const log = createModuleLogger("session-start-fast");
21
+
22
+ /**
23
+ * BLOCKING 훅을 순차 실행. 하나라도 throw하면 로그만 남기고 계속.
24
+ * @param {string} stdinData
25
+ * @returns {Promise<{stdout: string, stderr: string}>}
26
+ */
27
+ async function runBlocking(stdinData) {
28
+ const output = { stdout: "", stderr: "" };
29
+ const timings = [];
30
+
31
+ // 1. setup.runCritical — 환경 초기화 필수
32
+ try {
33
+ const t0 = performance.now();
34
+ const setup = await import(join(SCRIPTS, "setup.mjs"));
35
+ const result = await setup.runCritical(stdinData);
36
+ const dur = performance.now() - t0;
37
+ timings.push({ hook: "setup.critical", dur_ms: Math.round(dur) });
38
+ if (result?.stdout) output.stdout += result.stdout + "\n";
39
+ if (result?.stderr) output.stderr += result.stderr + "\n";
40
+ log.info({ hook: "setup.critical", dur_ms: Math.round(dur) }, "hook.completed");
41
+ } catch (err) {
42
+ log.error({ hook: "setup.critical", err: String(err.message || err) }, "hook.failed");
43
+ }
44
+
45
+ // 2. mcp-safety-guard.run — EPERM 방지
46
+ try {
47
+ const t0 = performance.now();
48
+ const guard = await import(join(SCRIPTS, "mcp-safety-guard.mjs"));
49
+ guard.run();
50
+ const dur = performance.now() - t0;
51
+ timings.push({ hook: "mcp-safety-guard", dur_ms: Math.round(dur) });
52
+ log.info({ hook: "mcp-safety-guard", dur_ms: Math.round(dur) }, "hook.completed");
53
+ } catch (err) {
54
+ log.error({ hook: "mcp-safety-guard", err: String(err.message || err) }, "hook.failed");
55
+ }
56
+
57
+ return { ...output, timings };
58
+ }
59
+
60
+ /**
61
+ * DEFERRED 훅을 병렬 실행. 실패해도 crash 안 함, 로그만 남김.
62
+ * Promise는 의도적으로 관리하지 않음 (fire-and-forget with logging).
63
+ * @param {string} stdinData
64
+ */
65
+ function runDeferred(stdinData) {
66
+ const tasks = [
67
+ {
68
+ name: "hub-ensure",
69
+ fn: async () => {
70
+ const mod = await import(join(SCRIPTS, "hub-ensure.mjs"));
71
+ return mod.run(stdinData);
72
+ },
73
+ },
74
+ {
75
+ name: "mcp-gateway-ensure",
76
+ fn: async () => {
77
+ const mod = await import(join(SCRIPTS, "mcp-gateway-ensure.mjs"));
78
+ return mod.run(stdinData);
79
+ },
80
+ },
81
+ {
82
+ name: "setup.deferred",
83
+ fn: async () => {
84
+ const mod = await import(join(SCRIPTS, "setup.mjs"));
85
+ return mod.runDeferred(stdinData);
86
+ },
87
+ },
88
+ ];
89
+
90
+ for (const task of tasks) {
91
+ const t0 = performance.now();
92
+ task.fn()
93
+ .then((result) => {
94
+ const dur = performance.now() - t0;
95
+ log.info({ hook: task.name, dur_ms: Math.round(dur), code: result?.code }, "deferred.completed");
96
+ })
97
+ .catch((err) => {
98
+ const dur = performance.now() - t0;
99
+ log.error({ hook: task.name, dur_ms: Math.round(dur), err: String(err.message || err) }, "deferred.failed");
100
+ });
101
+ }
102
+ }
103
+
104
+ /**
105
+ * BACKGROUND 훅. fire-and-forget.
106
+ * @param {string} stdinData
107
+ */
108
+ function runBackground(stdinData) {
109
+ // preflight-cache
110
+ import(join(SCRIPTS, "preflight-cache.mjs"))
111
+ .then((mod) => mod.run(stdinData))
112
+ .catch(() => {}); // 완전 무시
113
+
114
+ // session-vault은 external source — hook-orchestrator가 execFile로 실행
115
+ }
116
+
117
+ /**
118
+ * SessionStart fast-path 진입점.
119
+ * hook-orchestrator.mjs에서 호출된다.
120
+ *
121
+ * @param {string} stdinData — orchestrator가 전달하는 stdin JSON
122
+ * @param {Array} externalHooks — source !== 'triflux'인 훅 목록 (orchestrator가 execFile로 실행)
123
+ * @returns {Promise<{stdout: string, stderr: string, timings: Array}>}
124
+ */
125
+ export async function execute(stdinData, externalHooks = []) {
126
+ const totalStart = performance.now();
127
+
128
+ // BLOCKING: 프롬프트 전 완료 필수
129
+ const blocking = await runBlocking(stdinData);
130
+
131
+ // DEFERRED + BACKGROUND: fire-and-forget
132
+ runDeferred(stdinData);
133
+ runBackground(stdinData);
134
+
135
+ const totalDur = performance.now() - totalStart;
136
+ log.info({ total_ms: Math.round(totalDur), blocking_count: 2, deferred_count: 3, bg_count: 1 }, "session-start.done");
137
+
138
+ return {
139
+ stdout: blocking.stdout,
140
+ stderr: blocking.stderr,
141
+ timings: blocking.timings,
142
+ };
143
+ }
@@ -29,7 +29,8 @@ function main() {
29
29
 
30
30
  const agentType = input.agent_type || input.subagent_type || "unknown";
31
31
  const result = input.tool_output || input.result || "";
32
- const resultStr = typeof result === "string" ? result : JSON.stringify(result);
32
+ const resultStr =
33
+ typeof result === "string" ? result : JSON.stringify(result);
33
34
 
34
35
  const issues = [];
35
36
 
@@ -37,7 +38,7 @@ function main() {
37
38
  if (!resultStr.trim() || resultStr.trim().length < 20) {
38
39
  issues.push(
39
40
  `서브에이전트(${agentType})가 거의 빈 결과를 반환했습니다. ` +
40
- "프롬프트를 더 구체적으로 작성하거나, 다른 subagent_type을 시도하세요."
41
+ "프롬프트를 더 구체적으로 작성하거나, 다른 subagent_type을 시도하세요.",
41
42
  );
42
43
  }
43
44
 
@@ -50,7 +51,7 @@ function main() {
50
51
  if (hasError && resultStr.length > 50) {
51
52
  issues.push(
52
53
  `서브에이전트(${agentType}) 결과에 에러 신호가 감지되었습니다. ` +
53
- "결과를 검토하고, 필요 시 다른 접근 방식을 사용하세요."
54
+ "결과를 검토하고, 필요 시 다른 접근 방식을 사용하세요.",
54
55
  );
55
56
  }
56
57
 
@@ -58,7 +59,7 @@ function main() {
58
59
  if (resultStr.length > 15000) {
59
60
  issues.push(
60
61
  `서브에이전트(${agentType}) 결과가 ${Math.round(resultStr.length / 1000)}K 자입니다. ` +
61
- "핵심만 추출하여 컨텍스트 윈도우를 절약하세요."
62
+ "핵심만 추출하여 컨텍스트 윈도우를 절약하세요.",
62
63
  );
63
64
  }
64
65