triflux 3.2.0-dev.1 → 3.2.0-dev.11

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 (53) hide show
  1. package/README.ko.md +26 -18
  2. package/README.md +26 -18
  3. package/bin/triflux.mjs +1614 -1084
  4. package/hooks/hooks.json +12 -0
  5. package/hooks/keyword-rules.json +354 -0
  6. package/hub/bridge.mjs +371 -193
  7. package/hub/hitl.mjs +45 -31
  8. package/hub/pipe.mjs +457 -0
  9. package/hub/router.mjs +422 -161
  10. package/hub/server.mjs +429 -344
  11. package/hub/store.mjs +388 -314
  12. package/hub/team/cli-team-common.mjs +348 -0
  13. package/hub/team/cli-team-control.mjs +393 -0
  14. package/hub/team/cli-team-start.mjs +516 -0
  15. package/hub/team/cli-team-status.mjs +269 -0
  16. package/hub/team/cli.mjs +99 -368
  17. package/hub/team/dashboard.mjs +165 -64
  18. package/hub/team/native-supervisor.mjs +300 -0
  19. package/hub/team/native.mjs +62 -0
  20. package/hub/team/nativeProxy.mjs +534 -0
  21. package/hub/team/orchestrator.mjs +90 -31
  22. package/hub/team/pane.mjs +149 -101
  23. package/hub/team/psmux.mjs +297 -0
  24. package/hub/team/session.mjs +608 -186
  25. package/hub/team/shared.mjs +13 -0
  26. package/hub/team/staleState.mjs +299 -0
  27. package/hub/tools.mjs +140 -53
  28. package/hub/workers/claude-worker.mjs +446 -0
  29. package/hub/workers/codex-mcp.mjs +414 -0
  30. package/hub/workers/factory.mjs +18 -0
  31. package/hub/workers/gemini-worker.mjs +349 -0
  32. package/hub/workers/interface.mjs +41 -0
  33. package/hud/hud-qos-status.mjs +1789 -1732
  34. package/package.json +6 -2
  35. package/scripts/__tests__/keyword-detector.test.mjs +234 -0
  36. package/scripts/hub-ensure.mjs +83 -0
  37. package/scripts/keyword-detector.mjs +272 -0
  38. package/scripts/keyword-rules-expander.mjs +521 -0
  39. package/scripts/lib/keyword-rules.mjs +168 -0
  40. package/scripts/psmux-steering-prototype.sh +368 -0
  41. package/scripts/run.cjs +62 -0
  42. package/scripts/setup.mjs +189 -7
  43. package/scripts/test-tfx-route-no-claude-native.mjs +49 -0
  44. package/scripts/tfx-route-worker.mjs +161 -0
  45. package/scripts/tfx-route.sh +943 -508
  46. package/skills/tfx-auto/SKILL.md +90 -564
  47. package/skills/tfx-auto-codex/SKILL.md +77 -0
  48. package/skills/tfx-codex/SKILL.md +1 -4
  49. package/skills/tfx-doctor/SKILL.md +1 -0
  50. package/skills/tfx-gemini/SKILL.md +1 -4
  51. package/skills/tfx-multi/SKILL.md +296 -0
  52. package/skills/tfx-setup/SKILL.md +1 -4
  53. package/skills/tfx-team/SKILL.md +0 -172
package/hooks/hooks.json CHANGED
@@ -12,6 +12,18 @@
12
12
  }
13
13
  ]
14
14
  }
15
+ ],
16
+ "UserPromptSubmit": [
17
+ {
18
+ "matcher": "*",
19
+ "hooks": [
20
+ {
21
+ "type": "command",
22
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/run.cjs\" \"${CLAUDE_PLUGIN_ROOT}/scripts/keyword-detector.mjs\"",
23
+ "timeout": 5
24
+ }
25
+ ]
26
+ }
15
27
  ]
16
28
  }
17
29
  }
@@ -0,0 +1,354 @@
1
+ {
2
+ "rules": [
3
+ {
4
+ "id": "tfx-cancel",
5
+ "patterns": [
6
+ {
7
+ "source": "\\b(canceltfx|stoptfx)\\b",
8
+ "flags": "i"
9
+ }
10
+ ],
11
+ "skill": "tfx-cancel",
12
+ "priority": 0,
13
+ "supersedes": [
14
+ "tfx-multi",
15
+ "tfx-auto",
16
+ "tfx-auto-codex",
17
+ "tfx-codex",
18
+ "tfx-gemini"
19
+ ],
20
+ "exclusive": true,
21
+ "state": null,
22
+ "mcp_route": null
23
+ },
24
+ {
25
+ "id": "tfx-multi",
26
+ "patterns": [
27
+ {
28
+ "source": "(?<!\\b(?:my|the|our|omc|oh-my-claudecode)\\s)\\btfx[\\s-]?multi\\b",
29
+ "flags": "i"
30
+ }
31
+ ],
32
+ "skill": "tfx-multi",
33
+ "priority": 1,
34
+ "supersedes": [],
35
+ "exclusive": false,
36
+ "state": null,
37
+ "mcp_route": null
38
+ },
39
+ {
40
+ "id": "tfx-auto-codex",
41
+ "patterns": [
42
+ {
43
+ "source": "\\btfx[\\s-]?auto[\\s-]?codex\\b",
44
+ "flags": "i"
45
+ }
46
+ ],
47
+ "skill": "tfx-auto-codex",
48
+ "priority": 1,
49
+ "supersedes": [
50
+ "tfx-auto",
51
+ "tfx-codex"
52
+ ],
53
+ "exclusive": false,
54
+ "state": null,
55
+ "mcp_route": null
56
+ },
57
+ {
58
+ "id": "tfx-auto",
59
+ "patterns": [
60
+ {
61
+ "source": "\\btfx[\\s-]?auto\\b",
62
+ "flags": "i"
63
+ }
64
+ ],
65
+ "skill": "tfx-auto",
66
+ "priority": 2,
67
+ "supersedes": [],
68
+ "exclusive": false,
69
+ "state": null,
70
+ "mcp_route": null
71
+ },
72
+ {
73
+ "id": "tfx-codex",
74
+ "patterns": [
75
+ {
76
+ "source": "\\btfx[\\s-]?codex\\b",
77
+ "flags": "i"
78
+ }
79
+ ],
80
+ "skill": "tfx-codex",
81
+ "priority": 3,
82
+ "supersedes": [],
83
+ "exclusive": false,
84
+ "state": null,
85
+ "mcp_route": null
86
+ },
87
+ {
88
+ "id": "tfx-gemini",
89
+ "patterns": [
90
+ {
91
+ "source": "\\btfx[\\s-]?gemini\\b",
92
+ "flags": "i"
93
+ }
94
+ ],
95
+ "skill": "tfx-gemini",
96
+ "priority": 3,
97
+ "supersedes": [],
98
+ "exclusive": false,
99
+ "state": null,
100
+ "mcp_route": null
101
+ },
102
+ {
103
+ "id": "notion-route",
104
+ "patterns": [
105
+ {
106
+ "source": "\\b(노션|notion)[\\s-]?(페이지|글|조회|생성|수정|검색)\\b",
107
+ "flags": "i"
108
+ },
109
+ {
110
+ "source": "(노션|notion)[\\s-]?(페이지|글|조회|생성|수정|검색)",
111
+ "flags": "i"
112
+ }
113
+ ],
114
+ "skill": null,
115
+ "priority": 10,
116
+ "supersedes": [],
117
+ "exclusive": false,
118
+ "state": null,
119
+ "mcp_route": "gemini"
120
+ },
121
+ {
122
+ "id": "chrome-route",
123
+ "patterns": [
124
+ {
125
+ "source": "\\b(크롬|chrome|브라우저)[\\s-]?(열|접속|로그인|navigate|click)\\b",
126
+ "flags": "i"
127
+ },
128
+ {
129
+ "source": "(크롬|chrome|브라우저)[\\s-]?(열|접속|로그인|navigate|click)",
130
+ "flags": "i"
131
+ }
132
+ ],
133
+ "skill": null,
134
+ "priority": 10,
135
+ "supersedes": [],
136
+ "exclusive": false,
137
+ "state": null,
138
+ "mcp_route": "gemini"
139
+ },
140
+ {
141
+ "id": "jira-route",
142
+ "patterns": [
143
+ {
144
+ "source": "\\b(jira|지라)[\\s-]?(이슈|티켓|생성|조회|스프린트)\\b",
145
+ "flags": "i"
146
+ },
147
+ {
148
+ "source": "(jira|지라)[\\s-]?(이슈|티켓|생성|조회|스프린트)",
149
+ "flags": "i"
150
+ }
151
+ ],
152
+ "skill": null,
153
+ "priority": 10,
154
+ "supersedes": [],
155
+ "exclusive": false,
156
+ "state": null,
157
+ "mcp_route": "codex"
158
+ },
159
+ {
160
+ "id": "mail-route",
161
+ "patterns": [
162
+ {
163
+ "source": "\\b(메일|gmail|이메일)[\\s-]?(보내|읽|검색|draft)\\b",
164
+ "flags": "i"
165
+ },
166
+ {
167
+ "source": "(메일|gmail|이메일)[\\s-]?(보내|읽|검색|draft)",
168
+ "flags": "i"
169
+ }
170
+ ],
171
+ "skill": null,
172
+ "priority": 10,
173
+ "supersedes": [],
174
+ "exclusive": false,
175
+ "state": null,
176
+ "mcp_route": "gemini"
177
+ },
178
+ {
179
+ "id": "calendar-route",
180
+ "patterns": [
181
+ {
182
+ "source": "\\b(일정|캘린더|calendar)[\\s-]?(생성|조회|추가)\\b",
183
+ "flags": "i"
184
+ },
185
+ {
186
+ "source": "(일정|캘린더|calendar)[\\s-]?(생성|조회|추가)",
187
+ "flags": "i"
188
+ }
189
+ ],
190
+ "skill": null,
191
+ "priority": 10,
192
+ "supersedes": [],
193
+ "exclusive": false,
194
+ "state": null,
195
+ "mcp_route": "gemini"
196
+ },
197
+ {
198
+ "id": "playwright-route",
199
+ "patterns": [
200
+ {
201
+ "source": "\\b(playwright|브라우저\\s*테스트)\\b",
202
+ "flags": "i"
203
+ },
204
+ {
205
+ "source": "(playwright|브라우저\\s*테스트)",
206
+ "flags": "i"
207
+ }
208
+ ],
209
+ "skill": null,
210
+ "priority": 10,
211
+ "supersedes": [],
212
+ "exclusive": false,
213
+ "state": null,
214
+ "mcp_route": "gemini"
215
+ },
216
+ {
217
+ "id": "canva-route",
218
+ "patterns": [
219
+ {
220
+ "source": "\\b(canva|캔바|디자인\\s*생성)\\b",
221
+ "flags": "i"
222
+ },
223
+ {
224
+ "source": "(canva|캔바|디자인\\s*생성)",
225
+ "flags": "i"
226
+ }
227
+ ],
228
+ "skill": null,
229
+ "priority": 10,
230
+ "supersedes": [],
231
+ "exclusive": false,
232
+ "state": null,
233
+ "mcp_route": "gemini"
234
+ },
235
+ {
236
+ "id": "tfx-hub",
237
+ "patterns": [
238
+ {
239
+ "source": "\\btfx[\\s-]?hub\\b",
240
+ "flags": "i"
241
+ }
242
+ ],
243
+ "skill": "tfx-hub",
244
+ "priority": 2,
245
+ "supersedes": [],
246
+ "exclusive": false,
247
+ "state": null,
248
+ "mcp_route": null
249
+ },
250
+ {
251
+ "id": "tfx-doctor",
252
+ "patterns": [
253
+ {
254
+ "source": "\\btfx[\\s-]?doctor\\b",
255
+ "flags": "i"
256
+ }
257
+ ],
258
+ "skill": "tfx-doctor",
259
+ "priority": 2,
260
+ "supersedes": [],
261
+ "exclusive": false,
262
+ "state": null,
263
+ "mcp_route": null
264
+ },
265
+ {
266
+ "id": "tfx-setup",
267
+ "patterns": [
268
+ {
269
+ "source": "\\btfx[\\s-]?setup\\b",
270
+ "flags": "i"
271
+ }
272
+ ],
273
+ "skill": "tfx-setup",
274
+ "priority": 2,
275
+ "supersedes": [],
276
+ "exclusive": false,
277
+ "state": null,
278
+ "mcp_route": null
279
+ },
280
+ {
281
+ "id": "suppress-omc-team",
282
+ "patterns": [
283
+ {
284
+ "source": "(?<!tfx[\\s-]?)(팀|\\bteam\\b)",
285
+ "flags": "i"
286
+ }
287
+ ],
288
+ "skill": null,
289
+ "action": "suppress_omc",
290
+ "priority": 20,
291
+ "supersedes": [],
292
+ "exclusive": false,
293
+ "state": null,
294
+ "mcp_route": null
295
+ },
296
+ {
297
+ "id": "confluence-route",
298
+ "patterns": [
299
+ {
300
+ "source": "\\b(confluence|위키|wiki)[\\s-]?(페이지|문서|조회|생성|수정|검색)\\b",
301
+ "flags": "i"
302
+ },
303
+ {
304
+ "source": "(confluence|위키|wiki)[\\s-]?(페이지|문서|조회|생성|수정|검색)",
305
+ "flags": "i"
306
+ }
307
+ ],
308
+ "skill": null,
309
+ "priority": 10,
310
+ "supersedes": [],
311
+ "exclusive": false,
312
+ "state": null,
313
+ "mcp_route": "gemini"
314
+ },
315
+ {
316
+ "id": "slack-route",
317
+ "patterns": [
318
+ {
319
+ "source": "\\b(slack|슬랙)[\\s-]?(메시지|채널|보내|읽|검색|알림)\\b",
320
+ "flags": "i"
321
+ },
322
+ {
323
+ "source": "(slack|슬랙)[\\s-]?(메시지|채널|보내|읽|검색|알림)",
324
+ "flags": "i"
325
+ }
326
+ ],
327
+ "skill": null,
328
+ "priority": 10,
329
+ "supersedes": [],
330
+ "exclusive": false,
331
+ "state": null,
332
+ "mcp_route": "gemini"
333
+ },
334
+ {
335
+ "id": "github-route",
336
+ "patterns": [
337
+ {
338
+ "source": "\\b(github|깃허브)[\\s-]?(이슈|issue|PR|pull|커밋|commit|리포|repo)\\b",
339
+ "flags": "i"
340
+ },
341
+ {
342
+ "source": "(github|깃허브)[\\s-]?(이슈|issue|PR|pull|커밋|commit|리포|repo)",
343
+ "flags": "i"
344
+ }
345
+ ],
346
+ "skill": null,
347
+ "priority": 10,
348
+ "supersedes": [],
349
+ "exclusive": false,
350
+ "state": null,
351
+ "mcp_route": "codex"
352
+ }
353
+ ]
354
+ }