@triflux/core 10.48.1 → 10.50.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 (46) hide show
  1. package/hooks/agy-session-hook.mjs +1 -1
  2. package/hooks/claude-cwd-projection-refresh.mjs +7 -79
  3. package/hooks/codex-session-hook.mjs +3 -8
  4. package/hooks/hook-orchestrator.mjs +8 -648
  5. package/hooks/lib/resolve-root.mjs +1 -1
  6. package/hub/bridge.mjs +290 -51
  7. package/hub/team/claude-daemon-control.mjs +54 -6
  8. package/hub/team/claude-transcript.mjs +240 -0
  9. package/hub/team/session-context.mjs +203 -0
  10. package/hud/constants.mjs +10 -0
  11. package/hud/hud-qos-status.mjs +23 -4
  12. package/hud/providers/gemini.mjs +4 -1
  13. package/hud/renderers.mjs +10 -6
  14. package/package.json +2 -2
  15. package/scripts/lib/doctor-env-checks.mjs +0 -85
  16. package/scripts/lib/legacy-hook-cleanup.mjs +230 -0
  17. package/scripts/lib/legacy-mcp-cleanup.mjs +772 -0
  18. package/scripts/lib/mcp-guard-engine.mjs +44 -271
  19. package/scripts/lib/mcp-manifest.mjs +2 -2
  20. package/scripts/lib/session-presence.mjs +249 -0
  21. package/hooks/agent-route-guard.mjs +0 -113
  22. package/hooks/cross-review-tracker.mjs +0 -135
  23. package/hooks/cto-north-star-brief.mjs +0 -133
  24. package/hooks/error-context.mjs +0 -185
  25. package/hooks/hook-adaptive-collector.mjs +0 -88
  26. package/hooks/hook-manager.mjs +0 -426
  27. package/hooks/hook-registry.json +0 -367
  28. package/hooks/hooks.json +0 -149
  29. package/hooks/keyword-rules.json +0 -878
  30. package/hooks/mcp-config-watcher.mjs +0 -84
  31. package/hooks/permission-safe-allow.mjs +0 -267
  32. package/hooks/pipeline-stop.mjs +0 -435
  33. package/hooks/post-tool-tips.mjs +0 -306
  34. package/hooks/pre-compact-snapshot.mjs +0 -181
  35. package/hooks/safety-guard.mjs +0 -466
  36. package/hooks/session-end-cleanup.mjs +0 -360
  37. package/hooks/session-start-fast.mjs +0 -579
  38. package/hooks/session-start-lake.mjs +0 -81
  39. package/hooks/subagent-tracker.mjs +0 -281
  40. package/hooks/subagent-verifier.mjs +0 -85
  41. package/scripts/lib/cross-review-utils.mjs +0 -59
  42. package/scripts/lib/hook-utils.mjs +0 -16
  43. package/scripts/lib/keyword-rules.mjs +0 -219
  44. package/scripts/lib/mcp-gateway-health-check.mjs +0 -224
  45. package/scripts/lib/mcp-gateway-servers.mjs +0 -70
  46. package/scripts/lib/mcp-gateway-wrapper-check.mjs +0 -35
@@ -1,878 +0,0 @@
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": ["tfx-multi", "tfx-unified", "tfx-codex", "tfx-gemini"],
15
- "exclusive": true,
16
- "state": null,
17
- "mcp_route": null
18
- },
19
- {
20
- "id": "tfx-multi",
21
- "patterns": [
22
- {
23
- "source": "(?<!\\b(?:my|the|our|omc|oh-my-claudecode)\\s)\\btfx[\\s-]?multi\\b",
24
- "flags": "i"
25
- }
26
- ],
27
- "skill": "tfx-auto",
28
- "priority": 1,
29
- "supersedes": [],
30
- "exclusive": false,
31
- "state": null,
32
- "mcp_route": null
33
- },
34
- {
35
- "id": "tfx-swarm",
36
- "patterns": [
37
- {
38
- "source": "\\btfx[\\s-]?swarm\\b",
39
- "flags": "i"
40
- },
41
- {
42
- "source": "\\btfx[\\s-]?codex[\\s-]?swarm\\b",
43
- "flags": "i"
44
- },
45
- {
46
- "source": "\\bcodex[\\s-]?swarm\\b",
47
- "flags": "i"
48
- },
49
- {
50
- "source": "\\btfx[\\s-]?remote[\\s-]?spawn\\b",
51
- "flags": "i"
52
- },
53
- {
54
- "source": "\\bremote[\\s-]?spawn\\b",
55
- "flags": "i"
56
- }
57
- ],
58
- "skill": "tfx-auto",
59
- "priority": 1,
60
- "supersedes": ["tfx-codex"],
61
- "exclusive": false,
62
- "state": null,
63
- "mcp_route": null
64
- },
65
- {
66
- "id": "tfx-harness",
67
- "patterns": [
68
- {
69
- "source": "\\btfx[\\s-]?harness\\b",
70
- "flags": "i"
71
- }
72
- ],
73
- "skill": "tfx-harness",
74
- "priority": 1,
75
- "supersedes": ["tfx-unified"],
76
- "exclusive": false,
77
- "state": null,
78
- "mcp_route": null
79
- },
80
- {
81
- "id": "tfx-harness-meta",
82
- "patterns": [
83
- {
84
- "source": "(?:어떤\\s*스킬|스킬\\s*추천|스킬\\s*라우팅|작업\\s*라우팅|메타\\s*라우팅)",
85
- "flags": "i"
86
- },
87
- {
88
- "source": "\\bwhich\\s+skill\\b",
89
- "flags": "i"
90
- }
91
- ],
92
- "skill": "tfx-harness",
93
- "priority": 2,
94
- "supersedes": ["tfx-unified"],
95
- "exclusive": false,
96
- "state": null,
97
- "mcp_route": null
98
- },
99
- {
100
- "id": "tfx-review",
101
- "patterns": [
102
- {
103
- "source": "\\btfx[\\s-]?review\\b",
104
- "flags": "i"
105
- }
106
- ],
107
- "skill": "tfx-review",
108
- "priority": 1,
109
- "supersedes": ["tfx-unified"],
110
- "exclusive": false,
111
- "state": null,
112
- "mcp_route": null,
113
- "explicit": true
114
- },
115
- {
116
- "id": "tfx-analysis",
117
- "patterns": [
118
- {
119
- "source": "\\btfx[\\s-]?analysis\\b",
120
- "flags": "i"
121
- }
122
- ],
123
- "skill": "tfx-analysis",
124
- "priority": 1,
125
- "supersedes": ["tfx-unified"],
126
- "exclusive": false,
127
- "state": null,
128
- "mcp_route": null,
129
- "explicit": true
130
- },
131
- {
132
- "id": "tfx-plan",
133
- "patterns": [
134
- {
135
- "source": "\\btfx[\\s-]?plan\\b",
136
- "flags": "i"
137
- }
138
- ],
139
- "skill": "tfx-plan",
140
- "priority": 1,
141
- "supersedes": ["tfx-unified"],
142
- "exclusive": false,
143
- "state": null,
144
- "mcp_route": null,
145
- "explicit": true
146
- },
147
- {
148
- "id": "tfx-qa",
149
- "patterns": [
150
- {
151
- "source": "\\btfx[\\s-]?qa\\b",
152
- "flags": "i"
153
- }
154
- ],
155
- "skill": "tfx-qa",
156
- "priority": 1,
157
- "supersedes": ["tfx-unified"],
158
- "exclusive": false,
159
- "state": null,
160
- "mcp_route": null,
161
- "explicit": true
162
- },
163
- {
164
- "id": "tfx-research",
165
- "patterns": [
166
- {
167
- "source": "\\btfx[\\s-]?research\\b",
168
- "flags": "i"
169
- }
170
- ],
171
- "skill": "tfx-research",
172
- "priority": 1,
173
- "supersedes": ["tfx-unified"],
174
- "exclusive": false,
175
- "state": null,
176
- "mcp_route": null,
177
- "explicit": true
178
- },
179
- {
180
- "id": "tfx-find",
181
- "patterns": [
182
- {
183
- "source": "\\btfx[\\s-]?find\\b",
184
- "flags": "i"
185
- }
186
- ],
187
- "skill": "tfx-find",
188
- "priority": 1,
189
- "supersedes": ["tfx-unified"],
190
- "exclusive": false,
191
- "state": null,
192
- "mcp_route": null,
193
- "explicit": true
194
- },
195
- {
196
- "id": "tfx-unified",
197
- "patterns": [
198
- {
199
- "source": "\\btfx[\\s-]?auto\\b",
200
- "flags": "i"
201
- },
202
- {
203
- "source": "\\btfx[\\s-]?auto[\\s-]?codex\\b",
204
- "flags": "i"
205
- },
206
- {
207
- "source": "(?:만들어|고쳐|구현해|짜줘|수정해|바꿔)",
208
- "flags": "i"
209
- },
210
- {
211
- "source": "(?:리뷰해|검토해|봐줘|괜찮아)",
212
- "flags": "i"
213
- },
214
- {
215
- "source": "(?:테스트|검증|돌려봐|QA)",
216
- "flags": "i"
217
- },
218
- {
219
- "source": "(?:분석해|계획|설계해)",
220
- "flags": "i"
221
- },
222
- {
223
- "source": "(?:찾아봐|조사해|검색해)",
224
- "flags": "i"
225
- },
226
- {
227
- "source": "(?:병렬|동시에|parallel|concurrent)",
228
- "flags": "i"
229
- },
230
- {
231
- "source": "(?:점검|진단|확인해)",
232
- "flags": "i"
233
- },
234
- {
235
- "source": "(?:계속해|이어서|진행해)",
236
- "flags": "i"
237
- },
238
- {
239
- "source": "\\b(?:implement|build|fix|review|test|plan|analyze)\\b",
240
- "flags": "i"
241
- }
242
- ],
243
- "skill": "tfx-auto",
244
- "priority": 2,
245
- "supersedes": ["tfx-auto-codex"],
246
- "exclusive": false,
247
- "state": null,
248
- "mcp_route": null
249
- },
250
- {
251
- "id": "host-ai-slop-cleaner",
252
- "patterns": [
253
- {
254
- "source": "(?:AI\\s*슬롭|ai\\s*slop|anti[\\s-]?slop|deslop)",
255
- "flags": "i"
256
- },
257
- {
258
- "source": "(?:슬롭|클린업)",
259
- "flags": "i"
260
- }
261
- ],
262
- "skill": "ai-slop-cleaner",
263
- "priority": 1,
264
- "supersedes": [],
265
- "exclusive": false,
266
- "state": null,
267
- "mcp_route": null
268
- },
269
- {
270
- "id": "tfx-prune",
271
- "patterns": [
272
- {
273
- "source": "\\btfx[\\s-]?prune\\b",
274
- "flags": "i"
275
- }
276
- ],
277
- "skill": "tfx-prune",
278
- "priority": 1,
279
- "supersedes": ["tfx-unified"],
280
- "exclusive": false,
281
- "state": null,
282
- "mcp_route": null,
283
- "explicit": true
284
- },
285
- {
286
- "id": "tfx-codex",
287
- "patterns": [
288
- {
289
- "source": "\\btfx[\\s-]?codex\\b(?![\\s-]?swarm)",
290
- "flags": "i"
291
- }
292
- ],
293
- "skill": "tfx-auto",
294
- "priority": 3,
295
- "supersedes": [],
296
- "exclusive": false,
297
- "state": null,
298
- "mcp_route": null
299
- },
300
- {
301
- "id": "tfx-gemini",
302
- "patterns": [
303
- {
304
- "source": "\\btfx[\\s-]?gemini\\b",
305
- "flags": "i"
306
- }
307
- ],
308
- "skill": "tfx-auto",
309
- "priority": 3,
310
- "supersedes": [],
311
- "exclusive": false,
312
- "state": null,
313
- "mcp_route": null
314
- },
315
- {
316
- "id": "tfx-hub",
317
- "patterns": [
318
- {
319
- "source": "\\btfx[\\s-]?hub\\b",
320
- "flags": "i"
321
- }
322
- ],
323
- "skill": "tfx-hub",
324
- "priority": 1,
325
- "supersedes": [],
326
- "exclusive": false,
327
- "state": null,
328
- "mcp_route": null
329
- },
330
- {
331
- "id": "tfx-doctor",
332
- "patterns": [
333
- {
334
- "source": "\\btfx[\\s-]?doctor\\b",
335
- "flags": "i"
336
- }
337
- ],
338
- "skill": "tfx-doctor",
339
- "priority": 1,
340
- "supersedes": [],
341
- "exclusive": false,
342
- "state": null,
343
- "mcp_route": null
344
- },
345
- {
346
- "id": "tfx-setup",
347
- "patterns": [
348
- {
349
- "source": "\\btfx[\\s-]?setup\\b",
350
- "flags": "i"
351
- }
352
- ],
353
- "skill": "tfx-setup",
354
- "priority": 1,
355
- "supersedes": [],
356
- "exclusive": false,
357
- "state": null,
358
- "mcp_route": null
359
- },
360
- {
361
- "id": "tfx-autoresearch",
362
- "patterns": [
363
- {
364
- "source": "\\btfx[\\s-]?autoresearch\\b",
365
- "flags": "i"
366
- }
367
- ],
368
- "skill": "tfx-research",
369
- "priority": 1,
370
- "supersedes": [],
371
- "exclusive": false,
372
- "state": null,
373
- "mcp_route": null
374
- },
375
- {
376
- "id": "tfx-deep-interview",
377
- "patterns": [
378
- {
379
- "source": "\\btfx[\\s-]?deep[\\s-]?interview\\b",
380
- "flags": "i"
381
- }
382
- ],
383
- "skill": "tfx-interview",
384
- "priority": 1,
385
- "supersedes": [],
386
- "exclusive": false,
387
- "state": null,
388
- "mcp_route": null
389
- },
390
- {
391
- "id": "wt-tab-route",
392
- "patterns": [
393
- {
394
- "source": "(?:새\\s*탭|탭\\s*(?:새로|추가|생성|열|띄|파|만들))",
395
- "flags": "i"
396
- },
397
- {
398
- "source": "(?:패인|화면|pane)\\s*(?:분할|나눠|스플릿|split)",
399
- "flags": "i"
400
- },
401
- {
402
- "source": "\\bwt\\b\\s*(?:에\\s*)?(?:탭|tab|열|띄|새)",
403
- "flags": "i"
404
- },
405
- {
406
- "source": "(?:터미널|terminal)\\s*(?:탭|새\\s*탭)",
407
- "flags": "i"
408
- },
409
- {
410
- "source": "\\b(?:new\\s+tab|split\\s+pane|open\\s+(?:new\\s+)?tab)\\b",
411
- "flags": "i"
412
- }
413
- ],
414
- "skill": "tfx-wt",
415
- "platform": ["win32"],
416
- "priority": 1,
417
- "supersedes": ["tfx-unified"],
418
- "exclusive": false,
419
- "state": null,
420
- "mcp_route": null
421
- },
422
- {
423
- "id": "wt-tab-rename",
424
- "patterns": [
425
- {
426
- "source": "(?:탭\\s*(?:이름|제목)\\s*(?:바꿔|변경|rename))",
427
- "flags": "i"
428
- },
429
- {
430
- "source": "(?:rename\\s+tab|tab\\s+rename)",
431
- "flags": "i"
432
- }
433
- ],
434
- "skill": "tfx-wt",
435
- "platform": ["win32"],
436
- "priority": 1,
437
- "supersedes": ["tfx-unified"],
438
- "exclusive": false,
439
- "state": null,
440
- "mcp_route": null
441
- },
442
- {
443
- "id": "wt-tab-list",
444
- "patterns": [
445
- {
446
- "source": "(?:탭\\s*(?:목록|리스트|열린|현재))",
447
- "flags": "i"
448
- },
449
- {
450
- "source": "(?:list\\s+tabs|tab\\s+list|열린\\s*탭)",
451
- "flags": "i"
452
- }
453
- ],
454
- "skill": "tfx-wt",
455
- "platform": ["win32"],
456
- "priority": 1,
457
- "supersedes": ["tfx-unified"],
458
- "exclusive": false,
459
- "state": null,
460
- "mcp_route": null
461
- },
462
- {
463
- "id": "wt-tab-close",
464
- "patterns": [
465
- {
466
- "source": "(?:탭\\s*(?:닫아|닫기|종료|정리|close))",
467
- "flags": "i"
468
- },
469
- {
470
- "source": "(?:close\\s+tab|tab\\s+close|탭\\s*정리)",
471
- "flags": "i"
472
- }
473
- ],
474
- "skill": "tfx-wt",
475
- "platform": ["win32"],
476
- "priority": 1,
477
- "supersedes": ["tfx-unified"],
478
- "exclusive": false,
479
- "state": null,
480
- "mcp_route": null
481
- },
482
- {
483
- "id": "handoff-route",
484
- "patterns": [
485
- {
486
- "source": "(?:^|(?<=\\s))(핸드오프|handoff|세션\\s*넘기)[\\s]*(생성|만들|써줘|작성|넘겨)",
487
- "flags": "i"
488
- }
489
- ],
490
- "skill": null,
491
- "action": "handoff",
492
- "priority": 5,
493
- "supersedes": [],
494
- "exclusive": false,
495
- "state": null,
496
- "mcp_route": null
497
- },
498
- {
499
- "id": "notion-route",
500
- "patterns": [
501
- {
502
- "source": "(?:^|(?<=\\s))(노션|notion)[\\s-]?(페이지|글|조회|생성|수정|검색)(?:$|(?=\\s))",
503
- "flags": "i"
504
- },
505
- {
506
- "source": "(노션|\\bnotion\\b)",
507
- "flags": "i"
508
- }
509
- ],
510
- "skill": null,
511
- "priority": 10,
512
- "supersedes": [],
513
- "exclusive": false,
514
- "state": null,
515
- "mcp_route": "antigravity"
516
- },
517
- {
518
- "id": "chrome-route",
519
- "patterns": [
520
- {
521
- "source": "(?:^|(?<=\\s))(크롬|chrome|브라우저)[\\s-]?(열|접속|로그인|navigate|click)(?:$|(?=\\s))",
522
- "flags": "i"
523
- },
524
- {
525
- "source": "(크롬|\\bchrome\\b)",
526
- "flags": "i"
527
- }
528
- ],
529
- "skill": null,
530
- "priority": 10,
531
- "supersedes": [],
532
- "exclusive": false,
533
- "state": null,
534
- "mcp_route": "antigravity"
535
- },
536
- {
537
- "id": "jira-route",
538
- "patterns": [
539
- {
540
- "source": "(?:^|(?<=\\s))(jira|지라)[\\s-]?(이슈|티켓|생성|조회|스프린트)(?:$|(?=\\s))",
541
- "flags": "i"
542
- },
543
- {
544
- "source": "(지라|\\bjira\\b)",
545
- "flags": "i"
546
- }
547
- ],
548
- "skill": null,
549
- "priority": 10,
550
- "supersedes": [],
551
- "exclusive": false,
552
- "state": null,
553
- "mcp_route": "codex"
554
- },
555
- {
556
- "id": "mail-route",
557
- "patterns": [
558
- {
559
- "source": "(?:^|(?<=\\s))(메일|gmail|이메일)[\\s-]?(보내|읽|검색|draft)(?:$|(?=\\s))",
560
- "flags": "i"
561
- },
562
- {
563
- "source": "(메일|이메일|\\bgmail\\b)",
564
- "flags": "i"
565
- }
566
- ],
567
- "skill": null,
568
- "priority": 10,
569
- "supersedes": [],
570
- "exclusive": false,
571
- "state": null,
572
- "mcp_route": "antigravity"
573
- },
574
- {
575
- "id": "calendar-route",
576
- "patterns": [
577
- {
578
- "source": "(?:^|(?<=\\s))(일정|캘린더|calendar)[\\s-]?(생성|조회|추가)(?:$|(?=\\s))",
579
- "flags": "i"
580
- },
581
- {
582
- "source": "(일정|캘린더|\\bcalendar\\b)",
583
- "flags": "i"
584
- }
585
- ],
586
- "skill": null,
587
- "priority": 10,
588
- "supersedes": [],
589
- "exclusive": false,
590
- "state": null,
591
- "mcp_route": "antigravity"
592
- },
593
- {
594
- "id": "playwright-route",
595
- "patterns": [
596
- {
597
- "source": "(?:^|(?<=\\s))(playwright|브라우저\\s*테스트)(?:$|(?=\\s))",
598
- "flags": "i"
599
- }
600
- ],
601
- "skill": null,
602
- "priority": 10,
603
- "supersedes": [],
604
- "exclusive": false,
605
- "state": null,
606
- "mcp_route": "antigravity"
607
- },
608
- {
609
- "id": "canva-route",
610
- "patterns": [
611
- {
612
- "source": "(?:^|(?<=\\s))(canva|캔바|디자인\\s*생성)(?:$|(?=\\s))",
613
- "flags": "i"
614
- }
615
- ],
616
- "skill": null,
617
- "priority": 10,
618
- "supersedes": [],
619
- "exclusive": false,
620
- "state": null,
621
- "mcp_route": "antigravity"
622
- },
623
- {
624
- "id": "confluence-route",
625
- "patterns": [
626
- {
627
- "source": "(?:^|(?<=\\s))(confluence|위키|wiki)[\\s-]?(페이지|문서|조회|생성|수정|검색)(?:$|(?=\\s))",
628
- "flags": "i"
629
- },
630
- {
631
- "source": "(위키|\\bconfluence\\b|\\bwiki\\b)",
632
- "flags": "i"
633
- }
634
- ],
635
- "skill": null,
636
- "priority": 10,
637
- "supersedes": [],
638
- "exclusive": false,
639
- "state": null,
640
- "mcp_route": "antigravity"
641
- },
642
- {
643
- "id": "slack-route",
644
- "patterns": [
645
- {
646
- "source": "(?:^|(?<=\\s))(slack|슬랙)[\\s-]?(메시지|채널|보내|읽|검색|알림)(?:$|(?=\\s))",
647
- "flags": "i"
648
- },
649
- {
650
- "source": "(슬랙|\\bslack\\b)",
651
- "flags": "i"
652
- }
653
- ],
654
- "skill": null,
655
- "priority": 10,
656
- "supersedes": [],
657
- "exclusive": false,
658
- "state": null,
659
- "mcp_route": "antigravity"
660
- },
661
- {
662
- "id": "github-route",
663
- "patterns": [
664
- {
665
- "source": "(?:^|(?<=\\s))(github|깃허브)[\\s-]?(이슈|issue|PR|pull|커밋|commit|리포|repo)(?:$|(?=\\s))",
666
- "flags": "i"
667
- },
668
- {
669
- "source": "(깃허브|\\bgithub\\b)",
670
- "flags": "i"
671
- }
672
- ],
673
- "skill": null,
674
- "priority": 10,
675
- "supersedes": [],
676
- "exclusive": false,
677
- "state": null,
678
- "mcp_route": "codex"
679
- },
680
- {
681
- "id": "gstack-checkpoint",
682
- "patterns": [
683
- {
684
- "source": "(?:어디까지\\s*했|뭐\\s*하고\\s*있었|뭘\\s*해야\\s*하|까먹|기억이\\s*안|이어서\\s*하|중단\\s*지점)",
685
- "flags": "i"
686
- },
687
- {
688
- "source": "\\b(?:resume|pick\\s*up|where\\s*was\\s*I)\\b",
689
- "flags": "i"
690
- }
691
- ],
692
- "skill": "gstack-context-restore",
693
- "priority": 5,
694
- "supersedes": [],
695
- "exclusive": false,
696
- "state": null,
697
- "mcp_route": null
698
- },
699
- {
700
- "id": "gstack-office-hours",
701
- "patterns": [
702
- {
703
- "source": "(?:아이디어\\s*(?:있|정리|브레인)|뭘\\s*만들|제품\\s*구상)",
704
- "flags": "i"
705
- },
706
- {
707
- "source": "\\boffice[\\s-]?hours\\b",
708
- "flags": "i"
709
- }
710
- ],
711
- "skill": "office-hours",
712
- "priority": 5,
713
- "supersedes": [],
714
- "exclusive": false,
715
- "state": null,
716
- "mcp_route": null
717
- },
718
- {
719
- "id": "gstack-ship",
720
- "patterns": [
721
- {
722
- "source": "(?:배포해|PR\\s*만들|릴리스\\s*해|머지하고\\s*배포)",
723
- "flags": "i"
724
- },
725
- {
726
- "source": "(?<![\\w-])ship\\b(?!.*tfx)",
727
- "flags": "i"
728
- }
729
- ],
730
- "skill": "ship",
731
- "priority": 1,
732
- "supersedes": [],
733
- "exclusive": false,
734
- "state": null,
735
- "mcp_route": null
736
- },
737
- {
738
- "id": "gstack-investigate",
739
- "patterns": [
740
- {
741
- "source": "(?:왜\\s*(?:안\\s*돼|터져|에러)|원인\\s*(?:찾아|분석)|root\\s*cause)",
742
- "flags": "i"
743
- },
744
- {
745
- "source": "\\binvestigate\\b",
746
- "flags": "i"
747
- }
748
- ],
749
- "skill": "investigate",
750
- "priority": 5,
751
- "supersedes": [],
752
- "exclusive": false,
753
- "state": null,
754
- "mcp_route": null
755
- },
756
- {
757
- "id": "gstack-cso",
758
- "patterns": [
759
- {
760
- "source": "(?:보안\\s*(?:감사|점검|리뷰|검토|스캔)|\\bcso\\b|\\bOWASP\\b|\\bSTRIDE\\b)",
761
- "flags": "i"
762
- }
763
- ],
764
- "skill": "cso",
765
- "priority": 1,
766
- "supersedes": [],
767
- "exclusive": false,
768
- "state": null,
769
- "mcp_route": null
770
- },
771
- {
772
- "id": "gstack-qa-browser",
773
- "patterns": [
774
- {
775
- "source": "(?:사이트|브라우저|웹)\\s*(?:QA|테스트|확인|점검)",
776
- "flags": "i"
777
- },
778
- {
779
- "source": "(?:클릭|접속).*(?:테스트|확인)",
780
- "flags": "i"
781
- }
782
- ],
783
- "skill": "qa",
784
- "priority": 1,
785
- "supersedes": [],
786
- "exclusive": false,
787
- "state": null,
788
- "mcp_route": null
789
- },
790
- {
791
- "id": "gstack-retro",
792
- "patterns": [
793
- {
794
- "source": "(?:회고|이번\\s*주\\s*뭐\\s*했|주간\\s*리뷰|뭘\\s*했지)",
795
- "flags": "i"
796
- },
797
- {
798
- "source": "\\bretro\\b",
799
- "flags": "i"
800
- }
801
- ],
802
- "skill": "retro",
803
- "priority": 5,
804
- "supersedes": [],
805
- "exclusive": false,
806
- "state": null,
807
- "mcp_route": null
808
- },
809
- {
810
- "id": "gstack-autoplan",
811
- "patterns": [
812
- {
813
- "source": "(?:자동\\s*리뷰|리뷰\\s*파이프라인|전체\\s*리뷰)",
814
- "flags": "i"
815
- },
816
- {
817
- "source": "\\bautoplan\\b",
818
- "flags": "i"
819
- }
820
- ],
821
- "skill": "autoplan",
822
- "priority": 5,
823
- "supersedes": [],
824
- "exclusive": false,
825
- "state": null,
826
- "mcp_route": null
827
- },
828
- {
829
- "id": "suppress-omc-team",
830
- "patterns": [
831
- {
832
- "source": "(?<!tfx[\\s-]?)(팀|\\bteam\\b)",
833
- "flags": "i"
834
- }
835
- ],
836
- "skill": null,
837
- "action": "suppress_omc",
838
- "priority": 20,
839
- "supersedes": [],
840
- "exclusive": false,
841
- "state": null,
842
- "mcp_route": null
843
- },
844
- {
845
- "id": "tfx-ship",
846
- "patterns": [
847
- {
848
- "source": "\\btfx[\\s-]?ship\\b",
849
- "flags": "i"
850
- },
851
- {
852
- "source": "/ship\\b",
853
- "flags": "i"
854
- },
855
- {
856
- "source": "배포(?!자|사|장|처)",
857
- "flags": ""
858
- },
859
- {
860
- "source": "릴리[즈스]",
861
- "flags": ""
862
- },
863
- {
864
- "source": "쉽\\s*(?:해|하자|가자|쳐)",
865
- "flags": ""
866
- }
867
- ],
868
- "skill": "tfx-ship",
869
- "priority": 1,
870
- "supersedes": ["gstack-ship"],
871
- "exclusive": false,
872
- "state": null,
873
- "mcp_route": null,
874
- "repo_scope": ["triflux"],
875
- "explicit": true
876
- }
877
- ]
878
- }