triflux 7.1.3 → 7.2.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.
Files changed (73) hide show
  1. package/.claude-plugin/marketplace.json +31 -31
  2. package/.claude-plugin/plugin.json +22 -23
  3. package/bin/triflux.mjs +18 -5
  4. package/hooks/keyword-rules.json +393 -361
  5. package/hub/bridge.mjs +799 -786
  6. package/hub/delegator/contracts.mjs +37 -38
  7. package/hub/delegator/schema/delegator-tools.schema.json +250 -250
  8. package/hub/delegator/service.mjs +307 -302
  9. package/hub/intent.mjs +108 -11
  10. package/hub/lib/process-utils.mjs +20 -0
  11. package/hub/pipe.mjs +589 -589
  12. package/hub/pipeline/gates/confidence.mjs +1 -1
  13. package/hub/pipeline/gates/selfcheck.mjs +2 -4
  14. package/hub/pipeline/state.mjs +191 -187
  15. package/hub/pipeline/transitions.mjs +124 -120
  16. package/hub/public/dashboard.html +355 -349
  17. package/hub/quality/deslop.mjs +5 -3
  18. package/hub/reflexion.mjs +5 -1
  19. package/hub/research.mjs +6 -1
  20. package/hub/router.mjs +791 -782
  21. package/hub/server.mjs +893 -822
  22. package/hub/store.mjs +807 -778
  23. package/hub/team/agent-map.json +10 -0
  24. package/hub/team/ansi.mjs +3 -4
  25. package/hub/team/cli/commands/control.mjs +43 -43
  26. package/hub/team/cli/commands/interrupt.mjs +36 -36
  27. package/hub/team/cli/commands/kill.mjs +3 -3
  28. package/hub/team/cli/commands/send.mjs +37 -37
  29. package/hub/team/cli/commands/start/index.mjs +18 -8
  30. package/hub/team/cli/commands/start/parse-args.mjs +3 -1
  31. package/hub/team/cli/commands/start/start-headless.mjs +4 -1
  32. package/hub/team/cli/commands/status.mjs +87 -87
  33. package/hub/team/cli/commands/stop.mjs +1 -1
  34. package/hub/team/cli/commands/task.mjs +1 -1
  35. package/hub/team/cli/index.mjs +41 -39
  36. package/hub/team/cli/manifest.mjs +29 -28
  37. package/hub/team/cli/services/hub-client.mjs +37 -0
  38. package/hub/team/cli/services/state-store.mjs +26 -12
  39. package/hub/team/dashboard.mjs +11 -4
  40. package/hub/team/handoff.mjs +12 -0
  41. package/hub/team/headless.mjs +202 -200
  42. package/hub/team/native-supervisor.mjs +386 -346
  43. package/hub/team/nativeProxy.mjs +680 -692
  44. package/hub/team/staleState.mjs +361 -369
  45. package/hub/team/tui-viewer.mjs +27 -3
  46. package/hub/team/tui.mjs +1 -0
  47. package/hub/token-mode.mjs +114 -24
  48. package/hub/workers/delegator-mcp.mjs +1059 -1057
  49. package/hud/colors.mjs +88 -0
  50. package/hud/constants.mjs +78 -0
  51. package/hud/hud-qos-status.mjs +206 -1872
  52. package/hud/providers/claude.mjs +309 -0
  53. package/hud/providers/codex.mjs +151 -0
  54. package/hud/providers/gemini.mjs +320 -0
  55. package/hud/renderers.mjs +424 -0
  56. package/hud/terminal.mjs +140 -0
  57. package/hud/utils.mjs +271 -0
  58. package/package.json +1 -2
  59. package/scripts/__tests__/keyword-detector.test.mjs +234 -234
  60. package/scripts/headless-guard-fast.sh +21 -0
  61. package/scripts/headless-guard.mjs +26 -6
  62. package/scripts/lib/keyword-rules.mjs +166 -168
  63. package/scripts/setup.mjs +720 -690
  64. package/scripts/tfx-route-post.mjs +424 -424
  65. package/scripts/tfx-route.sh +1663 -1650
  66. package/scripts/tmp-cleanup.mjs +74 -0
  67. package/skills/tfx-auto/SKILL.md +279 -278
  68. package/skills/tfx-auto-codex/SKILL.md +98 -77
  69. package/skills/tfx-codex/SKILL.md +65 -65
  70. package/skills/tfx-gemini/SKILL.md +83 -82
  71. package/skills/tfx-hub/SKILL.md +205 -136
  72. package/skills/tfx-multi/SKILL.md +11 -5
  73. package/.mcp.json +0 -8
@@ -1,361 +1,393 @@
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": "tfx-hub",
104
- "patterns": [
105
- {
106
- "source": "\\btfx[\\s-]?hub\\b",
107
- "flags": "i"
108
- }
109
- ],
110
- "skill": "tfx-hub",
111
- "priority": 2,
112
- "supersedes": [],
113
- "exclusive": false,
114
- "state": null,
115
- "mcp_route": null
116
- },
117
- {
118
- "id": "tfx-doctor",
119
- "patterns": [
120
- {
121
- "source": "\\btfx[\\s-]?doctor\\b",
122
- "flags": "i"
123
- }
124
- ],
125
- "skill": "tfx-doctor",
126
- "priority": 2,
127
- "supersedes": [],
128
- "exclusive": false,
129
- "state": null,
130
- "mcp_route": null
131
- },
132
- {
133
- "id": "tfx-setup",
134
- "patterns": [
135
- {
136
- "source": "\\btfx[\\s-]?setup\\b",
137
- "flags": "i"
138
- }
139
- ],
140
- "skill": "tfx-setup",
141
- "priority": 2,
142
- "supersedes": [],
143
- "exclusive": false,
144
- "state": null,
145
- "mcp_route": null
146
- },
147
- {
148
- "id": "handoff-route",
149
- "patterns": [
150
- {
151
- "source": "\\b(핸드오프|handoff|세션\\s*넘기)[\\s]*(생성|만들|써줘|작성|넘겨)",
152
- "flags": "i"
153
- }
154
- ],
155
- "skill": "mp",
156
- "priority": 5,
157
- "supersedes": [],
158
- "exclusive": false,
159
- "state": null,
160
- "mcp_route": null
161
- },
162
- {
163
- "id": "notion-route",
164
- "patterns": [
165
- {
166
- "source": "\\b(노션|notion)[\\s-]?(페이지|글|조회|생성|수정|검색)\\b",
167
- "flags": "i"
168
- },
169
- {
170
- "source": "(노션|\\bnotion\\b)",
171
- "flags": "i"
172
- }
173
- ],
174
- "skill": null,
175
- "priority": 10,
176
- "supersedes": [],
177
- "exclusive": false,
178
- "state": null,
179
- "mcp_route": "gemini"
180
- },
181
- {
182
- "id": "chrome-route",
183
- "patterns": [
184
- {
185
- "source": "\\b(크롬|chrome|브라우저)[\\s-]?(열|접속|로그인|navigate|click)\\b",
186
- "flags": "i"
187
- },
188
- {
189
- "source": "(크롬|\\bchrome\\b)",
190
- "flags": "i"
191
- }
192
- ],
193
- "skill": null,
194
- "priority": 10,
195
- "supersedes": [],
196
- "exclusive": false,
197
- "state": null,
198
- "mcp_route": "gemini"
199
- },
200
- {
201
- "id": "jira-route",
202
- "patterns": [
203
- {
204
- "source": "\\b(jira|지라)[\\s-]?(이슈|티켓|생성|조회|스프린트)\\b",
205
- "flags": "i"
206
- },
207
- {
208
- "source": "(지라|\\bjira\\b)",
209
- "flags": "i"
210
- }
211
- ],
212
- "skill": null,
213
- "priority": 10,
214
- "supersedes": [],
215
- "exclusive": false,
216
- "state": null,
217
- "mcp_route": "codex"
218
- },
219
- {
220
- "id": "mail-route",
221
- "patterns": [
222
- {
223
- "source": "\\b(메일|gmail|이메일)[\\s-]?(보내|읽|검색|draft)\\b",
224
- "flags": "i"
225
- },
226
- {
227
- "source": "(메일|이메일|\\bgmail\\b)",
228
- "flags": "i"
229
- }
230
- ],
231
- "skill": null,
232
- "priority": 10,
233
- "supersedes": [],
234
- "exclusive": false,
235
- "state": null,
236
- "mcp_route": "gemini"
237
- },
238
- {
239
- "id": "calendar-route",
240
- "patterns": [
241
- {
242
- "source": "\\b(일정|캘린더|calendar)[\\s-]?(생성|조회|추가)\\b",
243
- "flags": "i"
244
- },
245
- {
246
- "source": "(일정|캘린더|\\bcalendar\\b)",
247
- "flags": "i"
248
- }
249
- ],
250
- "skill": null,
251
- "priority": 10,
252
- "supersedes": [],
253
- "exclusive": false,
254
- "state": null,
255
- "mcp_route": "gemini"
256
- },
257
- {
258
- "id": "playwright-route",
259
- "patterns": [
260
- {
261
- "source": "\\b(playwright|브라우저\\s*테스트)\\b",
262
- "flags": "i"
263
- }
264
- ],
265
- "skill": null,
266
- "priority": 10,
267
- "supersedes": [],
268
- "exclusive": false,
269
- "state": null,
270
- "mcp_route": "gemini"
271
- },
272
- {
273
- "id": "canva-route",
274
- "patterns": [
275
- {
276
- "source": "\\b(canva|캔바|디자인\\s*생성)\\b",
277
- "flags": "i"
278
- }
279
- ],
280
- "skill": null,
281
- "priority": 10,
282
- "supersedes": [],
283
- "exclusive": false,
284
- "state": null,
285
- "mcp_route": "gemini"
286
- },
287
- {
288
- "id": "confluence-route",
289
- "patterns": [
290
- {
291
- "source": "\\b(confluence|위키|wiki)[\\s-]?(페이지|문서|조회|생성|수정|검색)\\b",
292
- "flags": "i"
293
- },
294
- {
295
- "source": "(위키|\\bconfluence\\b|\\bwiki\\b)",
296
- "flags": "i"
297
- }
298
- ],
299
- "skill": null,
300
- "priority": 10,
301
- "supersedes": [],
302
- "exclusive": false,
303
- "state": null,
304
- "mcp_route": "gemini"
305
- },
306
- {
307
- "id": "slack-route",
308
- "patterns": [
309
- {
310
- "source": "\\b(slack|슬랙)[\\s-]?(메시지|채널|보내|읽|검색|알림)\\b",
311
- "flags": "i"
312
- },
313
- {
314
- "source": "(슬랙|\\bslack\\b)",
315
- "flags": "i"
316
- }
317
- ],
318
- "skill": null,
319
- "priority": 10,
320
- "supersedes": [],
321
- "exclusive": false,
322
- "state": null,
323
- "mcp_route": "gemini"
324
- },
325
- {
326
- "id": "github-route",
327
- "patterns": [
328
- {
329
- "source": "\\b(github|깃허브)[\\s-]?(이슈|issue|PR|pull|커밋|commit|리포|repo)\\b",
330
- "flags": "i"
331
- },
332
- {
333
- "source": "(깃허브|\\bgithub\\b)",
334
- "flags": "i"
335
- }
336
- ],
337
- "skill": null,
338
- "priority": 10,
339
- "supersedes": [],
340
- "exclusive": false,
341
- "state": null,
342
- "mcp_route": "codex"
343
- },
344
- {
345
- "id": "suppress-omc-team",
346
- "patterns": [
347
- {
348
- "source": "(?<!tfx[\\s-]?)(팀|\\bteam\\b)",
349
- "flags": "i"
350
- }
351
- ],
352
- "skill": null,
353
- "action": "suppress_omc",
354
- "priority": 20,
355
- "supersedes": [],
356
- "exclusive": false,
357
- "state": null,
358
- "mcp_route": null
359
- }
360
- ]
361
- }
1
+ {
2
+ "rules": [
3
+ {
4
+ "id": "tfx-cancel",
5
+ "patterns": [
6
+ {
7
+ "source": "\\b(canceltfx|stoptfx)\\b",
8
+ "flags": "i"
9
+ }
10
+ ],
11
+ "skill": null,
12
+ "action": "suppress_all",
13
+ "priority": 0,
14
+ "supersedes": [
15
+ "tfx-multi",
16
+ "tfx-auto",
17
+ "tfx-auto-codex",
18
+ "tfx-codex",
19
+ "tfx-gemini"
20
+ ],
21
+ "exclusive": true,
22
+ "state": null,
23
+ "mcp_route": null
24
+ },
25
+ {
26
+ "id": "tfx-multi",
27
+ "patterns": [
28
+ {
29
+ "source": "(?<!\\b(?:my|the|our|omc|oh-my-claudecode)\\s)\\btfx[\\s-]?multi\\b",
30
+ "flags": "i"
31
+ }
32
+ ],
33
+ "skill": "tfx-multi",
34
+ "priority": 1,
35
+ "supersedes": [],
36
+ "exclusive": false,
37
+ "state": null,
38
+ "mcp_route": null
39
+ },
40
+ {
41
+ "id": "tfx-auto-codex",
42
+ "patterns": [
43
+ {
44
+ "source": "\\btfx[\\s-]?auto[\\s-]?codex\\b",
45
+ "flags": "i"
46
+ }
47
+ ],
48
+ "skill": "tfx-auto-codex",
49
+ "priority": 1,
50
+ "supersedes": [
51
+ "tfx-auto",
52
+ "tfx-codex"
53
+ ],
54
+ "exclusive": false,
55
+ "state": null,
56
+ "mcp_route": null
57
+ },
58
+ {
59
+ "id": "tfx-auto",
60
+ "patterns": [
61
+ {
62
+ "source": "\\btfx[\\s-]?auto\\b",
63
+ "flags": "i"
64
+ }
65
+ ],
66
+ "skill": "tfx-auto",
67
+ "priority": 2,
68
+ "supersedes": [],
69
+ "exclusive": false,
70
+ "state": null,
71
+ "mcp_route": null
72
+ },
73
+ {
74
+ "id": "tfx-codex",
75
+ "patterns": [
76
+ {
77
+ "source": "\\btfx[\\s-]?codex\\b",
78
+ "flags": "i"
79
+ }
80
+ ],
81
+ "skill": "tfx-codex",
82
+ "priority": 3,
83
+ "supersedes": [],
84
+ "exclusive": false,
85
+ "state": null,
86
+ "mcp_route": null
87
+ },
88
+ {
89
+ "id": "tfx-gemini",
90
+ "patterns": [
91
+ {
92
+ "source": "\\btfx[\\s-]?gemini\\b",
93
+ "flags": "i"
94
+ }
95
+ ],
96
+ "skill": "tfx-gemini",
97
+ "priority": 3,
98
+ "supersedes": [],
99
+ "exclusive": false,
100
+ "state": null,
101
+ "mcp_route": null
102
+ },
103
+ {
104
+ "id": "tfx-hub",
105
+ "patterns": [
106
+ {
107
+ "source": "\\btfx[\\s-]?hub\\b",
108
+ "flags": "i"
109
+ }
110
+ ],
111
+ "skill": "tfx-hub",
112
+ "priority": 2,
113
+ "supersedes": [],
114
+ "exclusive": false,
115
+ "state": null,
116
+ "mcp_route": null
117
+ },
118
+ {
119
+ "id": "tfx-doctor",
120
+ "patterns": [
121
+ {
122
+ "source": "\\btfx[\\s-]?doctor\\b",
123
+ "flags": "i"
124
+ }
125
+ ],
126
+ "skill": "tfx-doctor",
127
+ "priority": 2,
128
+ "supersedes": [],
129
+ "exclusive": false,
130
+ "state": null,
131
+ "mcp_route": null
132
+ },
133
+ {
134
+ "id": "tfx-setup",
135
+ "patterns": [
136
+ {
137
+ "source": "\\btfx[\\s-]?setup\\b",
138
+ "flags": "i"
139
+ }
140
+ ],
141
+ "skill": "tfx-setup",
142
+ "priority": 2,
143
+ "supersedes": [],
144
+ "exclusive": false,
145
+ "state": null,
146
+ "mcp_route": null
147
+ },
148
+ {
149
+ "id": "tfx-autoresearch",
150
+ "patterns": [
151
+ {
152
+ "source": "\\btfx[\\s-]?autoresearch\\b",
153
+ "flags": "i"
154
+ }
155
+ ],
156
+ "skill": "tfx-autoresearch",
157
+ "priority": 2,
158
+ "supersedes": [],
159
+ "exclusive": false,
160
+ "state": null,
161
+ "mcp_route": null
162
+ },
163
+ {
164
+ "id": "tfx-deep-interview",
165
+ "patterns": [
166
+ {
167
+ "source": "\\btfx[\\s-]?deep[\\s-]?interview\\b",
168
+ "flags": "i"
169
+ }
170
+ ],
171
+ "skill": "tfx-deep-interview",
172
+ "priority": 2,
173
+ "supersedes": [],
174
+ "exclusive": false,
175
+ "state": null,
176
+ "mcp_route": null
177
+ },
178
+ {
179
+ "id": "handoff-route",
180
+ "patterns": [
181
+ {
182
+ "source": "(?:^|(?<=\\s))(핸드오프|handoff|세션\\s*넘기)[\\s]*(생성|만들|써줘|작성|넘겨)",
183
+ "flags": "i"
184
+ }
185
+ ],
186
+ "skill": null,
187
+ "action": "handoff",
188
+ "priority": 5,
189
+ "supersedes": [],
190
+ "exclusive": false,
191
+ "state": null,
192
+ "mcp_route": null
193
+ },
194
+ {
195
+ "id": "notion-route",
196
+ "patterns": [
197
+ {
198
+ "source": "(?:^|(?<=\\s))(노션|notion)[\\s-]?(페이지|글|조회|생성|수정|검색)(?:$|(?=\\s))",
199
+ "flags": "i"
200
+ },
201
+ {
202
+ "source": "(노션|\\bnotion\\b)",
203
+ "flags": "i"
204
+ }
205
+ ],
206
+ "skill": null,
207
+ "priority": 10,
208
+ "supersedes": [],
209
+ "exclusive": false,
210
+ "state": null,
211
+ "mcp_route": "gemini"
212
+ },
213
+ {
214
+ "id": "chrome-route",
215
+ "patterns": [
216
+ {
217
+ "source": "(?:^|(?<=\\s))(크롬|chrome|브라우저)[\\s-]?(열|접속|로그인|navigate|click)(?:$|(?=\\s))",
218
+ "flags": "i"
219
+ },
220
+ {
221
+ "source": "(크롬|\\bchrome\\b)",
222
+ "flags": "i"
223
+ }
224
+ ],
225
+ "skill": null,
226
+ "priority": 10,
227
+ "supersedes": [],
228
+ "exclusive": false,
229
+ "state": null,
230
+ "mcp_route": "gemini"
231
+ },
232
+ {
233
+ "id": "jira-route",
234
+ "patterns": [
235
+ {
236
+ "source": "(?:^|(?<=\\s))(jira|지라)[\\s-]?(이슈|티켓|생성|조회|스프린트)(?:$|(?=\\s))",
237
+ "flags": "i"
238
+ },
239
+ {
240
+ "source": "(지라|\\bjira\\b)",
241
+ "flags": "i"
242
+ }
243
+ ],
244
+ "skill": null,
245
+ "priority": 10,
246
+ "supersedes": [],
247
+ "exclusive": false,
248
+ "state": null,
249
+ "mcp_route": "codex"
250
+ },
251
+ {
252
+ "id": "mail-route",
253
+ "patterns": [
254
+ {
255
+ "source": "(?:^|(?<=\\s))(메일|gmail|이메일)[\\s-]?(보내|읽|검색|draft)(?:$|(?=\\s))",
256
+ "flags": "i"
257
+ },
258
+ {
259
+ "source": "(메일|이메일|\\bgmail\\b)",
260
+ "flags": "i"
261
+ }
262
+ ],
263
+ "skill": null,
264
+ "priority": 10,
265
+ "supersedes": [],
266
+ "exclusive": false,
267
+ "state": null,
268
+ "mcp_route": "gemini"
269
+ },
270
+ {
271
+ "id": "calendar-route",
272
+ "patterns": [
273
+ {
274
+ "source": "(?:^|(?<=\\s))(일정|캘린더|calendar)[\\s-]?(생성|조회|추가)(?:$|(?=\\s))",
275
+ "flags": "i"
276
+ },
277
+ {
278
+ "source": "(일정|캘린더|\\bcalendar\\b)",
279
+ "flags": "i"
280
+ }
281
+ ],
282
+ "skill": null,
283
+ "priority": 10,
284
+ "supersedes": [],
285
+ "exclusive": false,
286
+ "state": null,
287
+ "mcp_route": "gemini"
288
+ },
289
+ {
290
+ "id": "playwright-route",
291
+ "patterns": [
292
+ {
293
+ "source": "(?:^|(?<=\\s))(playwright|브라우저\\s*테스트)(?:$|(?=\\s))",
294
+ "flags": "i"
295
+ }
296
+ ],
297
+ "skill": null,
298
+ "priority": 10,
299
+ "supersedes": [],
300
+ "exclusive": false,
301
+ "state": null,
302
+ "mcp_route": "gemini"
303
+ },
304
+ {
305
+ "id": "canva-route",
306
+ "patterns": [
307
+ {
308
+ "source": "(?:^|(?<=\\s))(canva|캔바|디자인\\s*생성)(?:$|(?=\\s))",
309
+ "flags": "i"
310
+ }
311
+ ],
312
+ "skill": null,
313
+ "priority": 10,
314
+ "supersedes": [],
315
+ "exclusive": false,
316
+ "state": null,
317
+ "mcp_route": "gemini"
318
+ },
319
+ {
320
+ "id": "confluence-route",
321
+ "patterns": [
322
+ {
323
+ "source": "(?:^|(?<=\\s))(confluence|위키|wiki)[\\s-]?(페이지|문서|조회|생성|수정|검색)(?:$|(?=\\s))",
324
+ "flags": "i"
325
+ },
326
+ {
327
+ "source": "(위키|\\bconfluence\\b|\\bwiki\\b)",
328
+ "flags": "i"
329
+ }
330
+ ],
331
+ "skill": null,
332
+ "priority": 10,
333
+ "supersedes": [],
334
+ "exclusive": false,
335
+ "state": null,
336
+ "mcp_route": "gemini"
337
+ },
338
+ {
339
+ "id": "slack-route",
340
+ "patterns": [
341
+ {
342
+ "source": "(?:^|(?<=\\s))(slack|슬랙)[\\s-]?(메시지|채널|보내|읽|검색|알림)(?:$|(?=\\s))",
343
+ "flags": "i"
344
+ },
345
+ {
346
+ "source": "(슬랙|\\bslack\\b)",
347
+ "flags": "i"
348
+ }
349
+ ],
350
+ "skill": null,
351
+ "priority": 10,
352
+ "supersedes": [],
353
+ "exclusive": false,
354
+ "state": null,
355
+ "mcp_route": "gemini"
356
+ },
357
+ {
358
+ "id": "github-route",
359
+ "patterns": [
360
+ {
361
+ "source": "(?:^|(?<=\\s))(github|깃허브)[\\s-]?(이슈|issue|PR|pull|커밋|commit|리포|repo)(?:$|(?=\\s))",
362
+ "flags": "i"
363
+ },
364
+ {
365
+ "source": "(깃허브|\\bgithub\\b)",
366
+ "flags": "i"
367
+ }
368
+ ],
369
+ "skill": null,
370
+ "priority": 10,
371
+ "supersedes": [],
372
+ "exclusive": false,
373
+ "state": null,
374
+ "mcp_route": "codex"
375
+ },
376
+ {
377
+ "id": "suppress-omc-team",
378
+ "patterns": [
379
+ {
380
+ "source": "(?<!tfx[\\s-]?)(팀|\\bteam\\b)",
381
+ "flags": "i"
382
+ }
383
+ ],
384
+ "skill": null,
385
+ "action": "suppress_omc",
386
+ "priority": 20,
387
+ "supersedes": [],
388
+ "exclusive": false,
389
+ "state": null,
390
+ "mcp_route": null
391
+ }
392
+ ]
393
+ }