@claudinho/mcp 0.7.0 → 0.8.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 (3) hide show
  1. package/README.md +2 -1
  2. package/dist/index.js +1176 -144
  3. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -261,6 +261,151 @@ function nationToRegion(nameOrCode) {
261
261
  if (byCode) return byCode;
262
262
  return intlNameMap()[norm(nameOrCode)];
263
263
  }
264
+ var EN = {
265
+ "bracket.title": "Knockout bracket",
266
+ "bracket.stageTitle": "Knockout \xB7 {stage}",
267
+ "bracket.shareTitle": "Knockout bracket \xB7 2026",
268
+ "bracket.degraded": "Live scores unavailable \u2014 bracket structure only, no confirmed advancement.",
269
+ "bracket.standingsDegraded": "Live standings unavailable \u2014 group slots stay TBD until groups finish.",
270
+ "bracket.treeFallback": "Terminal too narrow for tree view \u2014 showing staged list.",
271
+ "bracket.empty": "No bracket matches available.",
272
+ "bracket.projected": "(proj.)",
273
+ "bracket.invalidStage": "Stage must be one of: R32, R16, QF, SF, 3P, F",
274
+ "bracket.unknownStage": 'Unknown stage "{stage}". Use R32, R16, QF, SF, 3P, or F.',
275
+ "bracket.slot.groupWinner": "Group {group} winner",
276
+ "bracket.slot.groupSecond": "Group {group} 2nd",
277
+ "bracket.slot.third": "3rd ({groups})",
278
+ "bracket.slot.winner": "{stage} {n} winner",
279
+ "bracket.slot.loser": "{stage} {n} loser",
280
+ "bracket.slot.tbd": "TBD",
281
+ "live.data": "Live data: {source}",
282
+ "share.tryIt": "Try it: {line}",
283
+ "stage.group": "Group {group}",
284
+ "stage.groupStage": "Group stage",
285
+ "stage.r32": "Round of 32",
286
+ "stage.r16": "Round of 16",
287
+ "stage.qf": "Quarter-final",
288
+ "stage.sf": "Semi-final",
289
+ "stage.3p": "Third-place play-off",
290
+ "stage.f": "Final",
291
+ "stage.friendly": "Friendly"
292
+ };
293
+ var ES = {
294
+ "bracket.title": "Cuadro de eliminatorias",
295
+ "bracket.stageTitle": "Eliminatorias \xB7 {stage}",
296
+ "bracket.shareTitle": "Cuadro de eliminatorias \xB7 2026",
297
+ "bracket.degraded": "Marcadores en vivo no disponibles \u2014 solo estructura del cuadro, sin avances confirmados.",
298
+ "bracket.standingsDegraded": "Tabla en vivo no disponible \u2014 los cupos de grupo siguen por definir hasta que terminen los grupos.",
299
+ "bracket.treeFallback": "Terminal demasiado estrecha para el \xE1rbol \u2014 mostrando lista por fase.",
300
+ "bracket.empty": "No hay partidos de eliminatorias disponibles.",
301
+ "bracket.projected": "(proy.)",
302
+ "bracket.invalidStage": "La fase debe ser una de: R32, R16, QF, SF, 3P, F",
303
+ "bracket.unknownStage": 'Fase desconocida "{stage}". Usa R32, R16, QF, SF, 3P o F.',
304
+ "bracket.slot.groupWinner": "Ganador del grupo {group}",
305
+ "bracket.slot.groupSecond": "2.\xBA del grupo {group}",
306
+ "bracket.slot.third": "3.\xBA ({groups})",
307
+ "bracket.slot.winner": "Ganador {stage} {n}",
308
+ "bracket.slot.loser": "Perdedor {stage} {n}",
309
+ "bracket.slot.tbd": "Por definir",
310
+ "live.data": "Datos en vivo: {source}",
311
+ "share.tryIt": "Pru\xE9balo: {line}",
312
+ "stage.group": "Grupo {group}",
313
+ "stage.groupStage": "Fase de grupos",
314
+ "stage.r32": "Dieciseisavos de final",
315
+ "stage.r16": "Octavos de final",
316
+ "stage.qf": "Cuartos de final",
317
+ "stage.sf": "Semifinal",
318
+ "stage.3p": "Tercer puesto",
319
+ "stage.f": "Final",
320
+ "stage.friendly": "Amistoso"
321
+ };
322
+ var PT = {
323
+ "bracket.title": "Chave do mata-mata",
324
+ "bracket.stageTitle": "Mata-mata \xB7 {stage}",
325
+ "bracket.shareTitle": "Chave do mata-mata \xB7 2026",
326
+ "bracket.degraded": "Placar ao vivo indispon\xEDvel \u2014 apenas a estrutura da chave, sem avan\xE7os confirmados.",
327
+ "bracket.standingsDegraded": "Classifica\xE7\xE3o ao vivo indispon\xEDvel \u2014 vagas de grupo seguem a definir at\xE9 o fim dos grupos.",
328
+ "bracket.treeFallback": "Terminal estreito demais para a \xE1rvore \u2014 mostrando lista por fase.",
329
+ "bracket.empty": "Nenhum jogo do mata-mata dispon\xEDvel.",
330
+ "bracket.projected": "(proj.)",
331
+ "bracket.invalidStage": "A fase deve ser uma de: R32, R16, QF, SF, 3P, F",
332
+ "bracket.unknownStage": 'Fase desconhecida "{stage}". Use R32, R16, QF, SF, 3P ou F.',
333
+ "bracket.slot.groupWinner": "Vencedor do grupo {group}",
334
+ "bracket.slot.groupSecond": "2.\xBA do grupo {group}",
335
+ "bracket.slot.third": "3.\xBA ({groups})",
336
+ "bracket.slot.winner": "Vencedor {stage} {n}",
337
+ "bracket.slot.loser": "Perdedor {stage} {n}",
338
+ "bracket.slot.tbd": "A definir",
339
+ "live.data": "Dados ao vivo: {source}",
340
+ "share.tryIt": "Experimente: {line}",
341
+ "stage.group": "Grupo {group}",
342
+ "stage.groupStage": "Fase de grupos",
343
+ "stage.r32": "Fase de 32 equipes",
344
+ "stage.r16": "Oitavas de final",
345
+ "stage.qf": "Quartas de final",
346
+ "stage.sf": "Semifinal",
347
+ "stage.3p": "Disputa do 3.\xBA lugar",
348
+ "stage.f": "Final",
349
+ "stage.friendly": "Amistoso"
350
+ };
351
+ var FR = {
352
+ "bracket.title": "Tableau \xE0 \xE9limination directe",
353
+ "bracket.stageTitle": "\xC9liminatoires \xB7 {stage}",
354
+ "bracket.shareTitle": "Tableau \xE0 \xE9limination directe \xB7 2026",
355
+ "bracket.degraded": "Scores en direct indisponibles \u2014 structure du tableau seulement, aucune qualification confirm\xE9e.",
356
+ "bracket.standingsDegraded": "Classement en direct indisponible \u2014 les places de groupe restent \xE0 d\xE9finir jusqu\u2019\xE0 la fin des poules.",
357
+ "bracket.treeFallback": "Terminal trop \xE9troit pour l\u2019arbre \u2014 affichage par phase.",
358
+ "bracket.empty": "Aucun match \xE0 \xE9limination directe disponible.",
359
+ "bracket.projected": "(proj.)",
360
+ "bracket.invalidStage": "La phase doit \xEAtre l\u2019une de : R32, R16, QF, SF, 3P, F",
361
+ "bracket.unknownStage": "Phase inconnue \xAB {stage} \xBB. Utilisez R32, R16, QF, SF, 3P ou F.",
362
+ "bracket.slot.groupWinner": "Vainqueur du groupe {group}",
363
+ "bracket.slot.groupSecond": "2e du groupe {group}",
364
+ "bracket.slot.third": "3e ({groups})",
365
+ "bracket.slot.winner": "Vainqueur {stage} {n}",
366
+ "bracket.slot.loser": "Perdant {stage} {n}",
367
+ "bracket.slot.tbd": "\xC0 d\xE9finir",
368
+ "live.data": "Donn\xE9es en direct : {source}",
369
+ "share.tryIt": "Essayez : {line}",
370
+ "stage.group": "Groupe {group}",
371
+ "stage.groupStage": "Phase de groupes",
372
+ "stage.r32": "Seizi\xE8mes de finale",
373
+ "stage.r16": "Huiti\xE8mes de finale",
374
+ "stage.qf": "Quarts de finale",
375
+ "stage.sf": "Demi-finale",
376
+ "stage.3p": "Match pour la 3e place",
377
+ "stage.f": "Finale",
378
+ "stage.friendly": "Match amical"
379
+ };
380
+ var CATALOGS = { en: EN, es: ES, pt: PT, fr: FR };
381
+ function normalizeLang(lang) {
382
+ const code = (lang ?? "en").slice(0, 2).toLowerCase();
383
+ if (code === "es" || code === "pt" || code === "fr") return code;
384
+ return "en";
385
+ }
386
+ function t(lang, key, vars) {
387
+ const dict = CATALOGS[normalizeLang(lang)];
388
+ let s = dict[key] ?? EN[key] ?? key;
389
+ if (vars) {
390
+ for (const [k, v] of Object.entries(vars)) s = s.replaceAll(`{${k}}`, v);
391
+ }
392
+ return s;
393
+ }
394
+ var STAGE_KEYS = {
395
+ GROUP: "stage.groupStage",
396
+ R32: "stage.r32",
397
+ R16: "stage.r16",
398
+ QF: "stage.qf",
399
+ SF: "stage.sf",
400
+ "3P": "stage.3p",
401
+ F: "stage.f",
402
+ FRIENDLY: "stage.friendly"
403
+ };
404
+ function stageLabelI18n(lang, stage, group) {
405
+ if (group) return t(lang, "stage.group", { group });
406
+ const key = STAGE_KEYS[stage];
407
+ return key ? t(lang, key) : stage;
408
+ }
264
409
  function isValidTimeZone(tz) {
265
410
  if (!tz) return false;
266
411
  try {
@@ -354,6 +499,11 @@ function localDate(iso, tz) {
354
499
  timeZone: zone
355
500
  }).format(new Date(iso));
356
501
  }
502
+ function outcomeFromScore(home, away) {
503
+ if (home > away) return "H";
504
+ if (home < away) return "A";
505
+ return "D";
506
+ }
357
507
  function isLive(status) {
358
508
  return status === "LIVE" || status === "HT";
359
509
  }
@@ -481,7 +631,7 @@ var schedule_2026_default = [
481
631
  flag: "\u{1F1FF}\u{1F1E6}"
482
632
  },
483
633
  status: "SCHEDULED",
484
- updatedAt: "2026-06-23T22:15:03.527Z"
634
+ updatedAt: "2026-06-24T01:20:06.301Z"
485
635
  },
486
636
  {
487
637
  id: "760414",
@@ -502,7 +652,7 @@ var schedule_2026_default = [
502
652
  flag: "\u{1F1E8}\u{1F1FF}"
503
653
  },
504
654
  status: "SCHEDULED",
505
- updatedAt: "2026-06-23T22:15:03.528Z"
655
+ updatedAt: "2026-06-24T01:20:06.302Z"
506
656
  },
507
657
  {
508
658
  id: "760416",
@@ -523,7 +673,7 @@ var schedule_2026_default = [
523
673
  flag: "\u{1F1E7}\u{1F1E6}"
524
674
  },
525
675
  status: "SCHEDULED",
526
- updatedAt: "2026-06-23T22:15:03.528Z"
676
+ updatedAt: "2026-06-24T01:20:06.302Z"
527
677
  },
528
678
  {
529
679
  id: "760417",
@@ -544,7 +694,7 @@ var schedule_2026_default = [
544
694
  flag: "\u{1F1F5}\u{1F1FE}"
545
695
  },
546
696
  status: "SCHEDULED",
547
- updatedAt: "2026-06-23T22:15:03.528Z"
697
+ updatedAt: "2026-06-24T01:20:06.302Z"
548
698
  },
549
699
  {
550
700
  id: "760420",
@@ -565,7 +715,7 @@ var schedule_2026_default = [
565
715
  flag: "\u{1F1E8}\u{1F1ED}"
566
716
  },
567
717
  status: "SCHEDULED",
568
- updatedAt: "2026-06-23T22:15:03.528Z"
718
+ updatedAt: "2026-06-24T01:20:06.302Z"
569
719
  },
570
720
  {
571
721
  id: "760419",
@@ -586,7 +736,7 @@ var schedule_2026_default = [
586
736
  flag: "\u{1F1F2}\u{1F1E6}"
587
737
  },
588
738
  status: "SCHEDULED",
589
- updatedAt: "2026-06-23T22:15:03.528Z"
739
+ updatedAt: "2026-06-24T01:20:06.302Z"
590
740
  },
591
741
  {
592
742
  id: "760418",
@@ -607,7 +757,7 @@ var schedule_2026_default = [
607
757
  flag: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}"
608
758
  },
609
759
  status: "SCHEDULED",
610
- updatedAt: "2026-06-23T22:15:03.528Z"
760
+ updatedAt: "2026-06-24T01:20:06.302Z"
611
761
  },
612
762
  {
613
763
  id: "760421",
@@ -628,7 +778,7 @@ var schedule_2026_default = [
628
778
  flag: "\u{1F1F9}\u{1F1F7}"
629
779
  },
630
780
  status: "SCHEDULED",
631
- updatedAt: "2026-06-23T22:15:03.528Z"
781
+ updatedAt: "2026-06-24T01:20:06.302Z"
632
782
  },
633
783
  {
634
784
  id: "760422",
@@ -649,7 +799,7 @@ var schedule_2026_default = [
649
799
  flag: "\u{1F1E8}\u{1F1FC}"
650
800
  },
651
801
  status: "SCHEDULED",
652
- updatedAt: "2026-06-23T22:15:03.528Z"
802
+ updatedAt: "2026-06-24T01:20:06.302Z"
653
803
  },
654
804
  {
655
805
  id: "760425",
@@ -670,7 +820,7 @@ var schedule_2026_default = [
670
820
  flag: "\u{1F1EF}\u{1F1F5}"
671
821
  },
672
822
  status: "SCHEDULED",
673
- updatedAt: "2026-06-23T22:15:03.528Z"
823
+ updatedAt: "2026-06-24T01:20:06.302Z"
674
824
  },
675
825
  {
676
826
  id: "760423",
@@ -691,7 +841,7 @@ var schedule_2026_default = [
691
841
  flag: "\u{1F1EA}\u{1F1E8}"
692
842
  },
693
843
  status: "SCHEDULED",
694
- updatedAt: "2026-06-23T22:15:03.528Z"
844
+ updatedAt: "2026-06-24T01:20:06.302Z"
695
845
  },
696
846
  {
697
847
  id: "760424",
@@ -712,7 +862,7 @@ var schedule_2026_default = [
712
862
  flag: "\u{1F1F9}\u{1F1F3}"
713
863
  },
714
864
  status: "SCHEDULED",
715
- updatedAt: "2026-06-23T22:15:03.528Z"
865
+ updatedAt: "2026-06-24T01:20:06.302Z"
716
866
  },
717
867
  {
718
868
  id: "760428",
@@ -733,7 +883,7 @@ var schedule_2026_default = [
733
883
  flag: "\u{1F1E8}\u{1F1FB}"
734
884
  },
735
885
  status: "SCHEDULED",
736
- updatedAt: "2026-06-23T22:15:03.528Z"
886
+ updatedAt: "2026-06-24T01:20:06.302Z"
737
887
  },
738
888
  {
739
889
  id: "760426",
@@ -754,7 +904,7 @@ var schedule_2026_default = [
754
904
  flag: "\u{1F1EA}\u{1F1EC}"
755
905
  },
756
906
  status: "SCHEDULED",
757
- updatedAt: "2026-06-23T22:15:03.528Z"
907
+ updatedAt: "2026-06-24T01:20:06.302Z"
758
908
  },
759
909
  {
760
910
  id: "760429",
@@ -775,7 +925,7 @@ var schedule_2026_default = [
775
925
  flag: "\u{1F1FA}\u{1F1FE}"
776
926
  },
777
927
  status: "SCHEDULED",
778
- updatedAt: "2026-06-23T22:15:03.528Z"
928
+ updatedAt: "2026-06-24T01:20:06.302Z"
779
929
  },
780
930
  {
781
931
  id: "760427",
@@ -796,7 +946,7 @@ var schedule_2026_default = [
796
946
  flag: "\u{1F1F3}\u{1F1FF}"
797
947
  },
798
948
  status: "SCHEDULED",
799
- updatedAt: "2026-06-23T22:15:03.528Z"
949
+ updatedAt: "2026-06-24T01:20:06.302Z"
800
950
  },
801
951
  {
802
952
  id: "760432",
@@ -817,7 +967,7 @@ var schedule_2026_default = [
817
967
  flag: "\u{1F1F8}\u{1F1F3}"
818
968
  },
819
969
  status: "SCHEDULED",
820
- updatedAt: "2026-06-23T22:15:03.528Z"
970
+ updatedAt: "2026-06-24T01:20:06.302Z"
821
971
  },
822
972
  {
823
973
  id: "760430",
@@ -838,7 +988,7 @@ var schedule_2026_default = [
838
988
  flag: "\u{1F1F3}\u{1F1F4}"
839
989
  },
840
990
  status: "SCHEDULED",
841
- updatedAt: "2026-06-23T22:15:03.528Z"
991
+ updatedAt: "2026-06-24T01:20:06.302Z"
842
992
  },
843
993
  {
844
994
  id: "760433",
@@ -859,7 +1009,7 @@ var schedule_2026_default = [
859
1009
  flag: "\u{1F1E9}\u{1F1FF}"
860
1010
  },
861
1011
  status: "SCHEDULED",
862
- updatedAt: "2026-06-23T22:15:03.528Z"
1012
+ updatedAt: "2026-06-24T01:20:06.302Z"
863
1013
  },
864
1014
  {
865
1015
  id: "760431",
@@ -880,7 +1030,7 @@ var schedule_2026_default = [
880
1030
  flag: "\u{1F1EF}\u{1F1F4}"
881
1031
  },
882
1032
  status: "SCHEDULED",
883
- updatedAt: "2026-06-23T22:15:03.528Z"
1033
+ updatedAt: "2026-06-24T01:20:06.302Z"
884
1034
  },
885
1035
  {
886
1036
  id: "760435",
@@ -901,7 +1051,7 @@ var schedule_2026_default = [
901
1051
  flag: "\u{1F1E8}\u{1F1E9}"
902
1052
  },
903
1053
  status: "SCHEDULED",
904
- updatedAt: "2026-06-23T22:15:03.528Z"
1054
+ updatedAt: "2026-06-24T01:20:06.302Z"
905
1055
  },
906
1056
  {
907
1057
  id: "760437",
@@ -922,7 +1072,7 @@ var schedule_2026_default = [
922
1072
  flag: "\u{1F1ED}\u{1F1F7}"
923
1073
  },
924
1074
  status: "SCHEDULED",
925
- updatedAt: "2026-06-23T22:15:03.528Z"
1075
+ updatedAt: "2026-06-24T01:20:06.302Z"
926
1076
  },
927
1077
  {
928
1078
  id: "760434",
@@ -943,7 +1093,7 @@ var schedule_2026_default = [
943
1093
  flag: "\u{1F1F5}\u{1F1E6}"
944
1094
  },
945
1095
  status: "SCHEDULED",
946
- updatedAt: "2026-06-23T22:15:03.528Z"
1096
+ updatedAt: "2026-06-24T01:20:06.302Z"
947
1097
  },
948
1098
  {
949
1099
  id: "760436",
@@ -964,7 +1114,7 @@ var schedule_2026_default = [
964
1114
  flag: "\u{1F1E8}\u{1F1F4}"
965
1115
  },
966
1116
  status: "SCHEDULED",
967
- updatedAt: "2026-06-23T22:15:03.528Z"
1117
+ updatedAt: "2026-06-24T01:20:06.302Z"
968
1118
  },
969
1119
  {
970
1120
  id: "760438",
@@ -985,7 +1135,7 @@ var schedule_2026_default = [
985
1135
  flag: "\u{1F1FF}\u{1F1E6}"
986
1136
  },
987
1137
  status: "SCHEDULED",
988
- updatedAt: "2026-06-23T22:15:03.624Z"
1138
+ updatedAt: "2026-06-24T01:20:06.394Z"
989
1139
  },
990
1140
  {
991
1141
  id: "760439",
@@ -1006,7 +1156,7 @@ var schedule_2026_default = [
1006
1156
  flag: "\u{1F1E7}\u{1F1E6}"
1007
1157
  },
1008
1158
  status: "SCHEDULED",
1009
- updatedAt: "2026-06-23T22:15:03.624Z"
1159
+ updatedAt: "2026-06-24T01:20:06.394Z"
1010
1160
  },
1011
1161
  {
1012
1162
  id: "760440",
@@ -1027,7 +1177,7 @@ var schedule_2026_default = [
1027
1177
  flag: "\u{1F1F6}\u{1F1E6}"
1028
1178
  },
1029
1179
  status: "SCHEDULED",
1030
- updatedAt: "2026-06-23T22:15:03.624Z"
1180
+ updatedAt: "2026-06-24T01:20:06.394Z"
1031
1181
  },
1032
1182
  {
1033
1183
  id: "760441",
@@ -1048,7 +1198,7 @@ var schedule_2026_default = [
1048
1198
  flag: "\u{1F1F0}\u{1F1F7}"
1049
1199
  },
1050
1200
  status: "SCHEDULED",
1051
- updatedAt: "2026-06-23T22:15:03.624Z"
1201
+ updatedAt: "2026-06-24T01:20:06.394Z"
1052
1202
  },
1053
1203
  {
1054
1204
  id: "760442",
@@ -1069,7 +1219,7 @@ var schedule_2026_default = [
1069
1219
  flag: "\u{1F1E6}\u{1F1FA}"
1070
1220
  },
1071
1221
  status: "SCHEDULED",
1072
- updatedAt: "2026-06-23T22:15:03.624Z"
1222
+ updatedAt: "2026-06-24T01:20:06.394Z"
1073
1223
  },
1074
1224
  {
1075
1225
  id: "760445",
@@ -1090,7 +1240,7 @@ var schedule_2026_default = [
1090
1240
  flag: "\u{1F1F2}\u{1F1E6}"
1091
1241
  },
1092
1242
  status: "SCHEDULED",
1093
- updatedAt: "2026-06-23T22:15:03.624Z"
1243
+ updatedAt: "2026-06-24T01:20:06.394Z"
1094
1244
  },
1095
1245
  {
1096
1246
  id: "760444",
@@ -1111,7 +1261,7 @@ var schedule_2026_default = [
1111
1261
  flag: "\u{1F1ED}\u{1F1F9}"
1112
1262
  },
1113
1263
  status: "SCHEDULED",
1114
- updatedAt: "2026-06-23T22:15:03.624Z"
1264
+ updatedAt: "2026-06-24T01:20:06.394Z"
1115
1265
  },
1116
1266
  {
1117
1267
  id: "760443",
@@ -1132,7 +1282,7 @@ var schedule_2026_default = [
1132
1282
  flag: "\u{1F1F5}\u{1F1FE}"
1133
1283
  },
1134
1284
  status: "SCHEDULED",
1135
- updatedAt: "2026-06-23T22:15:03.624Z"
1285
+ updatedAt: "2026-06-24T01:20:06.394Z"
1136
1286
  },
1137
1287
  {
1138
1288
  id: "760447",
@@ -1153,7 +1303,7 @@ var schedule_2026_default = [
1153
1303
  flag: "\u{1F1F8}\u{1F1EA}"
1154
1304
  },
1155
1305
  status: "SCHEDULED",
1156
- updatedAt: "2026-06-23T22:15:03.624Z"
1306
+ updatedAt: "2026-06-24T01:20:06.394Z"
1157
1307
  },
1158
1308
  {
1159
1309
  id: "760448",
@@ -1174,7 +1324,7 @@ var schedule_2026_default = [
1174
1324
  flag: "\u{1F1E8}\u{1F1EE}"
1175
1325
  },
1176
1326
  status: "SCHEDULED",
1177
- updatedAt: "2026-06-23T22:15:03.624Z"
1327
+ updatedAt: "2026-06-24T01:20:06.394Z"
1178
1328
  },
1179
1329
  {
1180
1330
  id: "760446",
@@ -1195,7 +1345,7 @@ var schedule_2026_default = [
1195
1345
  flag: "\u{1F1E8}\u{1F1FC}"
1196
1346
  },
1197
1347
  status: "SCHEDULED",
1198
- updatedAt: "2026-06-23T22:15:03.624Z"
1348
+ updatedAt: "2026-06-24T01:20:06.394Z"
1199
1349
  },
1200
1350
  {
1201
1351
  id: "760449",
@@ -1216,7 +1366,7 @@ var schedule_2026_default = [
1216
1366
  flag: "\u{1F1EF}\u{1F1F5}"
1217
1367
  },
1218
1368
  status: "SCHEDULED",
1219
- updatedAt: "2026-06-23T22:15:03.624Z"
1369
+ updatedAt: "2026-06-24T01:20:06.394Z"
1220
1370
  },
1221
1371
  {
1222
1372
  id: "760453",
@@ -1237,7 +1387,7 @@ var schedule_2026_default = [
1237
1387
  flag: "\u{1F1F8}\u{1F1E6}"
1238
1388
  },
1239
1389
  status: "SCHEDULED",
1240
- updatedAt: "2026-06-23T22:15:03.624Z"
1390
+ updatedAt: "2026-06-24T01:20:06.394Z"
1241
1391
  },
1242
1392
  {
1243
1393
  id: "760451",
@@ -1258,7 +1408,7 @@ var schedule_2026_default = [
1258
1408
  flag: "\u{1F1EE}\u{1F1F7}"
1259
1409
  },
1260
1410
  status: "SCHEDULED",
1261
- updatedAt: "2026-06-23T22:15:03.624Z"
1411
+ updatedAt: "2026-06-24T01:20:06.394Z"
1262
1412
  },
1263
1413
  {
1264
1414
  id: "760450",
@@ -1279,7 +1429,7 @@ var schedule_2026_default = [
1279
1429
  flag: "\u{1F1E8}\u{1F1FB}"
1280
1430
  },
1281
1431
  status: "SCHEDULED",
1282
- updatedAt: "2026-06-23T22:15:03.624Z"
1432
+ updatedAt: "2026-06-24T01:20:06.394Z"
1283
1433
  },
1284
1434
  {
1285
1435
  id: "760452",
@@ -1300,7 +1450,7 @@ var schedule_2026_default = [
1300
1450
  flag: "\u{1F1EA}\u{1F1EC}"
1301
1451
  },
1302
1452
  status: "SCHEDULED",
1303
- updatedAt: "2026-06-23T22:15:03.624Z"
1453
+ updatedAt: "2026-06-24T01:20:06.394Z"
1304
1454
  },
1305
1455
  {
1306
1456
  id: "760456",
@@ -1321,7 +1471,7 @@ var schedule_2026_default = [
1321
1471
  flag: "\u{1F1E6}\u{1F1F9}"
1322
1472
  },
1323
1473
  status: "SCHEDULED",
1324
- updatedAt: "2026-06-23T22:15:03.624Z"
1474
+ updatedAt: "2026-06-24T01:20:06.394Z"
1325
1475
  },
1326
1476
  {
1327
1477
  id: "760457",
@@ -1342,7 +1492,7 @@ var schedule_2026_default = [
1342
1492
  flag: "\u{1F1EE}\u{1F1F6}"
1343
1493
  },
1344
1494
  status: "SCHEDULED",
1345
- updatedAt: "2026-06-23T22:15:03.624Z"
1495
+ updatedAt: "2026-06-24T01:20:06.394Z"
1346
1496
  },
1347
1497
  {
1348
1498
  id: "760454",
@@ -1363,7 +1513,7 @@ var schedule_2026_default = [
1363
1513
  flag: "\u{1F1F8}\u{1F1F3}"
1364
1514
  },
1365
1515
  status: "SCHEDULED",
1366
- updatedAt: "2026-06-23T22:15:03.624Z"
1516
+ updatedAt: "2026-06-24T01:20:06.394Z"
1367
1517
  },
1368
1518
  {
1369
1519
  id: "760455",
@@ -1384,7 +1534,7 @@ var schedule_2026_default = [
1384
1534
  flag: "\u{1F1E9}\u{1F1FF}"
1385
1535
  },
1386
1536
  status: "SCHEDULED",
1387
- updatedAt: "2026-06-23T22:15:03.624Z"
1537
+ updatedAt: "2026-06-24T01:20:06.394Z"
1388
1538
  },
1389
1539
  {
1390
1540
  id: "760461",
@@ -1405,7 +1555,7 @@ var schedule_2026_default = [
1405
1555
  flag: "\u{1F1FA}\u{1F1FF}"
1406
1556
  },
1407
1557
  status: "SCHEDULED",
1408
- updatedAt: "2026-06-23T22:15:03.624Z"
1558
+ updatedAt: "2026-06-24T01:20:06.394Z"
1409
1559
  },
1410
1560
  {
1411
1561
  id: "760458",
@@ -1426,7 +1576,7 @@ var schedule_2026_default = [
1426
1576
  flag: "\u{1F1EC}\u{1F1ED}"
1427
1577
  },
1428
1578
  status: "SCHEDULED",
1429
- updatedAt: "2026-06-23T22:15:03.624Z"
1579
+ updatedAt: "2026-06-24T01:20:06.394Z"
1430
1580
  },
1431
1581
  {
1432
1582
  id: "760460",
@@ -1447,7 +1597,7 @@ var schedule_2026_default = [
1447
1597
  flag: "\u{1F1ED}\u{1F1F7}"
1448
1598
  },
1449
1599
  status: "SCHEDULED",
1450
- updatedAt: "2026-06-23T22:15:03.624Z"
1600
+ updatedAt: "2026-06-24T01:20:06.394Z"
1451
1601
  },
1452
1602
  {
1453
1603
  id: "760459",
@@ -1468,7 +1618,7 @@ var schedule_2026_default = [
1468
1618
  flag: "\u{1F1E8}\u{1F1E9}"
1469
1619
  },
1470
1620
  status: "SCHEDULED",
1471
- updatedAt: "2026-06-23T22:15:03.624Z"
1621
+ updatedAt: "2026-06-24T01:20:06.394Z"
1472
1622
  },
1473
1623
  {
1474
1624
  id: "760462",
@@ -1489,7 +1639,7 @@ var schedule_2026_default = [
1489
1639
  flag: "\u{1F1F6}\u{1F1E6}"
1490
1640
  },
1491
1641
  status: "SCHEDULED",
1492
- updatedAt: "2026-06-23T22:15:03.624Z"
1642
+ updatedAt: "2026-06-24T01:20:06.394Z"
1493
1643
  },
1494
1644
  {
1495
1645
  id: "760463",
@@ -1510,7 +1660,7 @@ var schedule_2026_default = [
1510
1660
  flag: "\u{1F1E8}\u{1F1E6}"
1511
1661
  },
1512
1662
  status: "SCHEDULED",
1513
- updatedAt: "2026-06-23T22:15:03.624Z"
1663
+ updatedAt: "2026-06-24T01:20:06.394Z"
1514
1664
  },
1515
1665
  {
1516
1666
  id: "760464",
@@ -1531,7 +1681,7 @@ var schedule_2026_default = [
1531
1681
  flag: "\u{1F1ED}\u{1F1F9}"
1532
1682
  },
1533
1683
  status: "SCHEDULED",
1534
- updatedAt: "2026-06-23T22:15:03.624Z"
1684
+ updatedAt: "2026-06-24T01:20:06.394Z"
1535
1685
  },
1536
1686
  {
1537
1687
  id: "760465",
@@ -1552,7 +1702,7 @@ var schedule_2026_default = [
1552
1702
  flag: "\u{1F1E7}\u{1F1F7}"
1553
1703
  },
1554
1704
  status: "SCHEDULED",
1555
- updatedAt: "2026-06-23T22:15:03.624Z"
1705
+ updatedAt: "2026-06-24T01:20:06.394Z"
1556
1706
  },
1557
1707
  {
1558
1708
  id: "760467",
@@ -1573,7 +1723,7 @@ var schedule_2026_default = [
1573
1723
  flag: "\u{1F1F2}\u{1F1FD}"
1574
1724
  },
1575
1725
  status: "SCHEDULED",
1576
- updatedAt: "2026-06-23T22:15:03.624Z"
1726
+ updatedAt: "2026-06-24T01:20:06.394Z"
1577
1727
  },
1578
1728
  {
1579
1729
  id: "760466",
@@ -1594,7 +1744,7 @@ var schedule_2026_default = [
1594
1744
  flag: "\u{1F1F0}\u{1F1F7}"
1595
1745
  },
1596
1746
  status: "SCHEDULED",
1597
- updatedAt: "2026-06-23T22:15:03.624Z"
1747
+ updatedAt: "2026-06-24T01:20:06.394Z"
1598
1748
  },
1599
1749
  {
1600
1750
  id: "760473",
@@ -1615,7 +1765,7 @@ var schedule_2026_default = [
1615
1765
  flag: "\u{1F1E8}\u{1F1EE}"
1616
1766
  },
1617
1767
  status: "SCHEDULED",
1618
- updatedAt: "2026-06-23T22:15:03.692Z"
1768
+ updatedAt: "2026-06-24T01:20:06.523Z"
1619
1769
  },
1620
1770
  {
1621
1771
  id: "760468",
@@ -1636,7 +1786,7 @@ var schedule_2026_default = [
1636
1786
  flag: "\u{1F1E9}\u{1F1EA}"
1637
1787
  },
1638
1788
  status: "SCHEDULED",
1639
- updatedAt: "2026-06-23T22:15:03.692Z"
1789
+ updatedAt: "2026-06-24T01:20:06.523Z"
1640
1790
  },
1641
1791
  {
1642
1792
  id: "760471",
@@ -1657,7 +1807,7 @@ var schedule_2026_default = [
1657
1807
  flag: "\u{1F1F8}\u{1F1EA}"
1658
1808
  },
1659
1809
  status: "SCHEDULED",
1660
- updatedAt: "2026-06-23T22:15:03.692Z"
1810
+ updatedAt: "2026-06-24T01:20:06.523Z"
1661
1811
  },
1662
1812
  {
1663
1813
  id: "760472",
@@ -1678,7 +1828,7 @@ var schedule_2026_default = [
1678
1828
  flag: "\u{1F1F3}\u{1F1F1}"
1679
1829
  },
1680
1830
  status: "SCHEDULED",
1681
- updatedAt: "2026-06-23T22:15:03.692Z"
1831
+ updatedAt: "2026-06-24T01:20:06.523Z"
1682
1832
  },
1683
1833
  {
1684
1834
  id: "760469",
@@ -1699,7 +1849,7 @@ var schedule_2026_default = [
1699
1849
  flag: "\u{1F1E6}\u{1F1FA}"
1700
1850
  },
1701
1851
  status: "SCHEDULED",
1702
- updatedAt: "2026-06-23T22:15:03.692Z"
1852
+ updatedAt: "2026-06-24T01:20:06.523Z"
1703
1853
  },
1704
1854
  {
1705
1855
  id: "760470",
@@ -1720,7 +1870,7 @@ var schedule_2026_default = [
1720
1870
  flag: "\u{1F1FA}\u{1F1F8}"
1721
1871
  },
1722
1872
  status: "SCHEDULED",
1723
- updatedAt: "2026-06-23T22:15:03.692Z"
1873
+ updatedAt: "2026-06-24T01:20:06.523Z"
1724
1874
  },
1725
1875
  {
1726
1876
  id: "760475",
@@ -1741,7 +1891,7 @@ var schedule_2026_default = [
1741
1891
  flag: "\u{1F1EB}\u{1F1F7}"
1742
1892
  },
1743
1893
  status: "SCHEDULED",
1744
- updatedAt: "2026-06-23T22:15:03.692Z"
1894
+ updatedAt: "2026-06-24T01:20:06.523Z"
1745
1895
  },
1746
1896
  {
1747
1897
  id: "760474",
@@ -1762,7 +1912,7 @@ var schedule_2026_default = [
1762
1912
  flag: "\u{1F1EE}\u{1F1F6}"
1763
1913
  },
1764
1914
  status: "SCHEDULED",
1765
- updatedAt: "2026-06-23T22:15:03.692Z"
1915
+ updatedAt: "2026-06-24T01:20:06.523Z"
1766
1916
  },
1767
1917
  {
1768
1918
  id: "760478",
@@ -1783,7 +1933,7 @@ var schedule_2026_default = [
1783
1933
  flag: "\u{1F1F8}\u{1F1E6}"
1784
1934
  },
1785
1935
  status: "SCHEDULED",
1786
- updatedAt: "2026-06-23T22:15:03.692Z"
1936
+ updatedAt: "2026-06-24T01:20:06.523Z"
1787
1937
  },
1788
1938
  {
1789
1939
  id: "760479",
@@ -1804,7 +1954,7 @@ var schedule_2026_default = [
1804
1954
  flag: "\u{1F1EA}\u{1F1F8}"
1805
1955
  },
1806
1956
  status: "SCHEDULED",
1807
- updatedAt: "2026-06-23T22:15:03.692Z"
1957
+ updatedAt: "2026-06-24T01:20:06.523Z"
1808
1958
  },
1809
1959
  {
1810
1960
  id: "760476",
@@ -1825,7 +1975,7 @@ var schedule_2026_default = [
1825
1975
  flag: "\u{1F1EE}\u{1F1F7}"
1826
1976
  },
1827
1977
  status: "SCHEDULED",
1828
- updatedAt: "2026-06-23T22:15:03.692Z"
1978
+ updatedAt: "2026-06-24T01:20:06.523Z"
1829
1979
  },
1830
1980
  {
1831
1981
  id: "760477",
@@ -1846,7 +1996,7 @@ var schedule_2026_default = [
1846
1996
  flag: "\u{1F1E7}\u{1F1EA}"
1847
1997
  },
1848
1998
  status: "SCHEDULED",
1849
- updatedAt: "2026-06-23T22:15:03.692Z"
1999
+ updatedAt: "2026-06-24T01:20:06.523Z"
1850
2000
  },
1851
2001
  {
1852
2002
  id: "760480",
@@ -1867,7 +2017,7 @@ var schedule_2026_default = [
1867
2017
  flag: "\u{1F1EC}\u{1F1ED}"
1868
2018
  },
1869
2019
  status: "SCHEDULED",
1870
- updatedAt: "2026-06-23T22:15:03.692Z"
2020
+ updatedAt: "2026-06-24T01:20:06.523Z"
1871
2021
  },
1872
2022
  {
1873
2023
  id: "760485",
@@ -1888,7 +2038,7 @@ var schedule_2026_default = [
1888
2038
  flag: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}"
1889
2039
  },
1890
2040
  status: "SCHEDULED",
1891
- updatedAt: "2026-06-23T22:15:03.692Z"
2041
+ updatedAt: "2026-06-24T01:20:06.523Z"
1892
2042
  },
1893
2043
  {
1894
2044
  id: "760481",
@@ -1909,7 +2059,7 @@ var schedule_2026_default = [
1909
2059
  flag: "\u{1F1F5}\u{1F1F9}"
1910
2060
  },
1911
2061
  status: "SCHEDULED",
1912
- updatedAt: "2026-06-23T22:15:03.692Z"
2062
+ updatedAt: "2026-06-24T01:20:06.523Z"
1913
2063
  },
1914
2064
  {
1915
2065
  id: "760482",
@@ -1930,7 +2080,7 @@ var schedule_2026_default = [
1930
2080
  flag: "\u{1F1FA}\u{1F1FF}"
1931
2081
  },
1932
2082
  status: "SCHEDULED",
1933
- updatedAt: "2026-06-23T22:15:03.692Z"
2083
+ updatedAt: "2026-06-24T01:20:06.523Z"
1934
2084
  },
1935
2085
  {
1936
2086
  id: "760484",
@@ -1951,7 +2101,7 @@ var schedule_2026_default = [
1951
2101
  flag: "\u{1F1E6}\u{1F1F9}"
1952
2102
  },
1953
2103
  status: "SCHEDULED",
1954
- updatedAt: "2026-06-23T22:15:03.692Z"
2104
+ updatedAt: "2026-06-24T01:20:06.523Z"
1955
2105
  },
1956
2106
  {
1957
2107
  id: "760483",
@@ -1972,7 +2122,7 @@ var schedule_2026_default = [
1972
2122
  flag: "\u{1F1E6}\u{1F1F7}"
1973
2123
  },
1974
2124
  status: "SCHEDULED",
1975
- updatedAt: "2026-06-23T22:15:03.692Z"
2125
+ updatedAt: "2026-06-24T01:20:06.523Z"
1976
2126
  },
1977
2127
  {
1978
2128
  id: "760486",
@@ -1992,7 +2142,7 @@ var schedule_2026_default = [
1992
2142
  flag: "\u{1F3F3}\uFE0F"
1993
2143
  },
1994
2144
  status: "SCHEDULED",
1995
- updatedAt: "2026-06-23T22:15:03.697Z"
2145
+ updatedAt: "2026-06-24T01:20:06.529Z"
1996
2146
  },
1997
2147
  {
1998
2148
  id: "760487",
@@ -2012,7 +2162,7 @@ var schedule_2026_default = [
2012
2162
  flag: "\u{1F3F3}\uFE0F"
2013
2163
  },
2014
2164
  status: "SCHEDULED",
2015
- updatedAt: "2026-06-23T22:15:03.697Z"
2165
+ updatedAt: "2026-06-24T01:20:06.529Z"
2016
2166
  },
2017
2167
  {
2018
2168
  id: "760489",
@@ -2022,9 +2172,9 @@ var schedule_2026_default = [
2022
2172
  city: "Foxborough, Massachusetts",
2023
2173
  country: "USA",
2024
2174
  home: {
2025
- code: "GER",
2175
+ code: "TBD",
2026
2176
  name: "Germany",
2027
- flag: "\u{1F1E9}\u{1F1EA}"
2177
+ flag: "\u{1F3F3}\uFE0F"
2028
2178
  },
2029
2179
  away: {
2030
2180
  code: "3RD",
@@ -2032,7 +2182,7 @@ var schedule_2026_default = [
2032
2182
  flag: "\u{1F3F3}\uFE0F"
2033
2183
  },
2034
2184
  status: "SCHEDULED",
2035
- updatedAt: "2026-06-23T22:15:03.697Z"
2185
+ updatedAt: "2026-06-24T01:20:06.529Z"
2036
2186
  },
2037
2187
  {
2038
2188
  id: "760488",
@@ -2052,7 +2202,7 @@ var schedule_2026_default = [
2052
2202
  flag: "\u{1F3F3}\uFE0F"
2053
2203
  },
2054
2204
  status: "SCHEDULED",
2055
- updatedAt: "2026-06-23T22:15:03.697Z"
2205
+ updatedAt: "2026-06-24T01:20:06.529Z"
2056
2206
  },
2057
2207
  {
2058
2208
  id: "760490",
@@ -2072,7 +2222,7 @@ var schedule_2026_default = [
2072
2222
  flag: "\u{1F3F3}\uFE0F"
2073
2223
  },
2074
2224
  status: "SCHEDULED",
2075
- updatedAt: "2026-06-23T22:15:03.697Z"
2225
+ updatedAt: "2026-06-24T01:20:06.529Z"
2076
2226
  },
2077
2227
  {
2078
2228
  id: "760492",
@@ -2092,7 +2242,7 @@ var schedule_2026_default = [
2092
2242
  flag: "\u{1F3F3}\uFE0F"
2093
2243
  },
2094
2244
  status: "SCHEDULED",
2095
- updatedAt: "2026-06-23T22:15:03.697Z"
2245
+ updatedAt: "2026-06-24T01:20:06.529Z"
2096
2246
  },
2097
2247
  {
2098
2248
  id: "760491",
@@ -2102,9 +2252,9 @@ var schedule_2026_default = [
2102
2252
  city: "Mexico City",
2103
2253
  country: "Mexico",
2104
2254
  home: {
2105
- code: "MEX",
2255
+ code: "TBD",
2106
2256
  name: "Mexico",
2107
- flag: "\u{1F1F2}\u{1F1FD}"
2257
+ flag: "\u{1F3F3}\uFE0F"
2108
2258
  },
2109
2259
  away: {
2110
2260
  code: "3RD",
@@ -2112,7 +2262,7 @@ var schedule_2026_default = [
2112
2262
  flag: "\u{1F3F3}\uFE0F"
2113
2263
  },
2114
2264
  status: "SCHEDULED",
2115
- updatedAt: "2026-06-23T22:15:03.697Z"
2265
+ updatedAt: "2026-06-24T01:20:06.529Z"
2116
2266
  },
2117
2267
  {
2118
2268
  id: "760495",
@@ -2132,7 +2282,7 @@ var schedule_2026_default = [
2132
2282
  flag: "\u{1F3F3}\uFE0F"
2133
2283
  },
2134
2284
  status: "SCHEDULED",
2135
- updatedAt: "2026-06-23T22:15:03.697Z"
2285
+ updatedAt: "2026-06-24T01:20:06.529Z"
2136
2286
  },
2137
2287
  {
2138
2288
  id: "760493",
@@ -2152,7 +2302,7 @@ var schedule_2026_default = [
2152
2302
  flag: "\u{1F3F3}\uFE0F"
2153
2303
  },
2154
2304
  status: "SCHEDULED",
2155
- updatedAt: "2026-06-23T22:15:03.697Z"
2305
+ updatedAt: "2026-06-24T01:20:06.529Z"
2156
2306
  },
2157
2307
  {
2158
2308
  id: "760494",
@@ -2162,9 +2312,9 @@ var schedule_2026_default = [
2162
2312
  city: "Santa Clara, California",
2163
2313
  country: "USA",
2164
2314
  home: {
2165
- code: "USA",
2315
+ code: "TBD",
2166
2316
  name: "United States",
2167
- flag: "\u{1F1FA}\u{1F1F8}"
2317
+ flag: "\u{1F3F3}\uFE0F"
2168
2318
  },
2169
2319
  away: {
2170
2320
  code: "3RD",
@@ -2172,7 +2322,7 @@ var schedule_2026_default = [
2172
2322
  flag: "\u{1F3F3}\uFE0F"
2173
2323
  },
2174
2324
  status: "SCHEDULED",
2175
- updatedAt: "2026-06-23T22:15:03.697Z"
2325
+ updatedAt: "2026-06-24T01:20:06.529Z"
2176
2326
  },
2177
2327
  {
2178
2328
  id: "760497",
@@ -2192,7 +2342,7 @@ var schedule_2026_default = [
2192
2342
  flag: "\u{1F3F3}\uFE0F"
2193
2343
  },
2194
2344
  status: "SCHEDULED",
2195
- updatedAt: "2026-06-23T22:15:03.762Z"
2345
+ updatedAt: "2026-06-24T01:20:06.593Z"
2196
2346
  },
2197
2347
  {
2198
2348
  id: "760496",
@@ -2212,7 +2362,7 @@ var schedule_2026_default = [
2212
2362
  flag: "\u{1F3F3}\uFE0F"
2213
2363
  },
2214
2364
  status: "SCHEDULED",
2215
- updatedAt: "2026-06-23T22:15:03.762Z"
2365
+ updatedAt: "2026-06-24T01:20:06.593Z"
2216
2366
  },
2217
2367
  {
2218
2368
  id: "760498",
@@ -2232,7 +2382,7 @@ var schedule_2026_default = [
2232
2382
  flag: "\u{1F3F3}\uFE0F"
2233
2383
  },
2234
2384
  status: "SCHEDULED",
2235
- updatedAt: "2026-06-23T22:15:03.762Z"
2385
+ updatedAt: "2026-06-24T01:20:06.593Z"
2236
2386
  },
2237
2387
  {
2238
2388
  id: "760499",
@@ -2252,7 +2402,7 @@ var schedule_2026_default = [
2252
2402
  flag: "\u{1F3F3}\uFE0F"
2253
2403
  },
2254
2404
  status: "SCHEDULED",
2255
- updatedAt: "2026-06-23T22:15:03.762Z"
2405
+ updatedAt: "2026-06-24T01:20:06.593Z"
2256
2406
  },
2257
2407
  {
2258
2408
  id: "760500",
@@ -2262,9 +2412,9 @@ var schedule_2026_default = [
2262
2412
  city: "Miami Gardens, Florida",
2263
2413
  country: "USA",
2264
2414
  home: {
2265
- code: "ARG",
2415
+ code: "TBD",
2266
2416
  name: "Argentina",
2267
- flag: "\u{1F1E6}\u{1F1F7}"
2417
+ flag: "\u{1F3F3}\uFE0F"
2268
2418
  },
2269
2419
  away: {
2270
2420
  code: "2H",
@@ -2272,7 +2422,7 @@ var schedule_2026_default = [
2272
2422
  flag: "\u{1F3F3}\uFE0F"
2273
2423
  },
2274
2424
  status: "SCHEDULED",
2275
- updatedAt: "2026-06-23T22:15:03.762Z"
2425
+ updatedAt: "2026-06-24T01:20:06.593Z"
2276
2426
  },
2277
2427
  {
2278
2428
  id: "760501",
@@ -2292,7 +2442,7 @@ var schedule_2026_default = [
2292
2442
  flag: "\u{1F3F3}\uFE0F"
2293
2443
  },
2294
2444
  status: "SCHEDULED",
2295
- updatedAt: "2026-06-23T22:15:03.762Z"
2445
+ updatedAt: "2026-06-24T01:20:06.593Z"
2296
2446
  },
2297
2447
  {
2298
2448
  id: "760502",
@@ -2312,7 +2462,7 @@ var schedule_2026_default = [
2312
2462
  flag: "\u{1F3F3}\uFE0F"
2313
2463
  },
2314
2464
  status: "SCHEDULED",
2315
- updatedAt: "2026-06-23T22:15:03.762Z"
2465
+ updatedAt: "2026-06-24T01:20:06.593Z"
2316
2466
  },
2317
2467
  {
2318
2468
  id: "760503",
@@ -2332,7 +2482,7 @@ var schedule_2026_default = [
2332
2482
  flag: "\u{1F3F3}\uFE0F"
2333
2483
  },
2334
2484
  status: "SCHEDULED",
2335
- updatedAt: "2026-06-23T22:15:03.762Z"
2485
+ updatedAt: "2026-06-24T01:20:06.593Z"
2336
2486
  },
2337
2487
  {
2338
2488
  id: "760504",
@@ -2352,7 +2502,7 @@ var schedule_2026_default = [
2352
2502
  flag: "\u{1F3F3}\uFE0F"
2353
2503
  },
2354
2504
  status: "SCHEDULED",
2355
- updatedAt: "2026-06-23T22:15:03.762Z"
2505
+ updatedAt: "2026-06-24T01:20:06.593Z"
2356
2506
  },
2357
2507
  {
2358
2508
  id: "760505",
@@ -2372,7 +2522,7 @@ var schedule_2026_default = [
2372
2522
  flag: "\u{1F3F3}\uFE0F"
2373
2523
  },
2374
2524
  status: "SCHEDULED",
2375
- updatedAt: "2026-06-23T22:15:03.762Z"
2525
+ updatedAt: "2026-06-24T01:20:06.593Z"
2376
2526
  },
2377
2527
  {
2378
2528
  id: "760506",
@@ -2392,7 +2542,7 @@ var schedule_2026_default = [
2392
2542
  flag: "\u{1F3F3}\uFE0F"
2393
2543
  },
2394
2544
  status: "SCHEDULED",
2395
- updatedAt: "2026-06-23T22:15:03.762Z"
2545
+ updatedAt: "2026-06-24T01:20:06.593Z"
2396
2546
  },
2397
2547
  {
2398
2548
  id: "760507",
@@ -2412,7 +2562,7 @@ var schedule_2026_default = [
2412
2562
  flag: "\u{1F3F3}\uFE0F"
2413
2563
  },
2414
2564
  status: "SCHEDULED",
2415
- updatedAt: "2026-06-23T22:15:03.762Z"
2565
+ updatedAt: "2026-06-24T01:20:06.593Z"
2416
2566
  },
2417
2567
  {
2418
2568
  id: "760509",
@@ -2432,7 +2582,7 @@ var schedule_2026_default = [
2432
2582
  flag: "\u{1F3F3}\uFE0F"
2433
2583
  },
2434
2584
  status: "SCHEDULED",
2435
- updatedAt: "2026-06-23T22:15:03.762Z"
2585
+ updatedAt: "2026-06-24T01:20:06.593Z"
2436
2586
  },
2437
2587
  {
2438
2588
  id: "760508",
@@ -2452,7 +2602,7 @@ var schedule_2026_default = [
2452
2602
  flag: "\u{1F3F3}\uFE0F"
2453
2603
  },
2454
2604
  status: "SCHEDULED",
2455
- updatedAt: "2026-06-23T22:15:03.762Z"
2605
+ updatedAt: "2026-06-24T01:20:06.593Z"
2456
2606
  },
2457
2607
  {
2458
2608
  id: "760510",
@@ -2462,17 +2612,17 @@ var schedule_2026_default = [
2462
2612
  city: "Foxborough, Massachusetts",
2463
2613
  country: "USA",
2464
2614
  home: {
2465
- code: "RD16 W1",
2615
+ code: "RD32",
2466
2616
  name: "Round of 16 1 Winner",
2467
2617
  flag: "\u{1F3F3}\uFE0F"
2468
2618
  },
2469
2619
  away: {
2470
- code: "RD16 W2",
2620
+ code: "RD32",
2471
2621
  name: "Round of 16 2 Winner",
2472
2622
  flag: "\u{1F3F3}\uFE0F"
2473
2623
  },
2474
2624
  status: "SCHEDULED",
2475
- updatedAt: "2026-06-23T22:15:03.862Z"
2625
+ updatedAt: "2026-06-24T01:20:06.650Z"
2476
2626
  },
2477
2627
  {
2478
2628
  id: "760511",
@@ -2482,17 +2632,17 @@ var schedule_2026_default = [
2482
2632
  city: "Inglewood, California",
2483
2633
  country: "USA",
2484
2634
  home: {
2485
- code: "RD16 W5",
2635
+ code: "RD32",
2486
2636
  name: "Round of 16 5 Winner",
2487
2637
  flag: "\u{1F3F3}\uFE0F"
2488
2638
  },
2489
2639
  away: {
2490
- code: "RD16 W6",
2640
+ code: "RD32",
2491
2641
  name: "Round of 16 6 Winner",
2492
2642
  flag: "\u{1F3F3}\uFE0F"
2493
2643
  },
2494
2644
  status: "SCHEDULED",
2495
- updatedAt: "2026-06-23T22:15:03.862Z"
2645
+ updatedAt: "2026-06-24T01:20:06.650Z"
2496
2646
  },
2497
2647
  {
2498
2648
  id: "760512",
@@ -2502,17 +2652,17 @@ var schedule_2026_default = [
2502
2652
  city: "Miami Gardens, Florida",
2503
2653
  country: "USA",
2504
2654
  home: {
2505
- code: "RD16 W3",
2655
+ code: "RD32",
2506
2656
  name: "Round of 16 3 Winner",
2507
2657
  flag: "\u{1F3F3}\uFE0F"
2508
2658
  },
2509
2659
  away: {
2510
- code: "RD16 W4",
2660
+ code: "RD32",
2511
2661
  name: "Round of 16 4 Winner",
2512
2662
  flag: "\u{1F3F3}\uFE0F"
2513
2663
  },
2514
2664
  status: "SCHEDULED",
2515
- updatedAt: "2026-06-23T22:15:03.862Z"
2665
+ updatedAt: "2026-06-24T01:20:06.650Z"
2516
2666
  },
2517
2667
  {
2518
2668
  id: "760513",
@@ -2522,17 +2672,17 @@ var schedule_2026_default = [
2522
2672
  city: "Kansas City, Missouri",
2523
2673
  country: "USA",
2524
2674
  home: {
2525
- code: "RD16 W7",
2675
+ code: "RD32",
2526
2676
  name: "Round of 16 7 Winner",
2527
2677
  flag: "\u{1F3F3}\uFE0F"
2528
2678
  },
2529
2679
  away: {
2530
- code: "RD16 W8",
2680
+ code: "RD32",
2531
2681
  name: "Round of 16 8 Winner",
2532
2682
  flag: "\u{1F3F3}\uFE0F"
2533
2683
  },
2534
2684
  status: "SCHEDULED",
2535
- updatedAt: "2026-06-23T22:15:03.862Z"
2685
+ updatedAt: "2026-06-24T01:20:06.650Z"
2536
2686
  },
2537
2687
  {
2538
2688
  id: "760514",
@@ -2542,17 +2692,17 @@ var schedule_2026_default = [
2542
2692
  city: "Arlington, Texas",
2543
2693
  country: "USA",
2544
2694
  home: {
2545
- code: "QFW1",
2695
+ code: "RD32",
2546
2696
  name: "Quarterfinal 1 Winner",
2547
2697
  flag: "\u{1F3F3}\uFE0F"
2548
2698
  },
2549
2699
  away: {
2550
- code: "QFW2",
2700
+ code: "RD32",
2551
2701
  name: "Quarterfinal 2 Winner",
2552
2702
  flag: "\u{1F3F3}\uFE0F"
2553
2703
  },
2554
2704
  status: "SCHEDULED",
2555
- updatedAt: "2026-06-23T22:15:03.862Z"
2705
+ updatedAt: "2026-06-24T01:20:06.650Z"
2556
2706
  },
2557
2707
  {
2558
2708
  id: "760515",
@@ -2562,17 +2712,17 @@ var schedule_2026_default = [
2562
2712
  city: "Atlanta, Georgia",
2563
2713
  country: "USA",
2564
2714
  home: {
2565
- code: "QFW3",
2715
+ code: "RD32",
2566
2716
  name: "Quarterfinal 3 Winner",
2567
2717
  flag: "\u{1F3F3}\uFE0F"
2568
2718
  },
2569
2719
  away: {
2570
- code: "QW4",
2720
+ code: "RD32",
2571
2721
  name: "Quarterfinal 4 Winner",
2572
2722
  flag: "\u{1F3F3}\uFE0F"
2573
2723
  },
2574
2724
  status: "SCHEDULED",
2575
- updatedAt: "2026-06-23T22:15:03.862Z"
2725
+ updatedAt: "2026-06-24T01:20:06.650Z"
2576
2726
  },
2577
2727
  {
2578
2728
  id: "760516",
@@ -2582,17 +2732,17 @@ var schedule_2026_default = [
2582
2732
  city: "Miami Gardens, Florida",
2583
2733
  country: "USA",
2584
2734
  home: {
2585
- code: "SF L1",
2735
+ code: "RD32",
2586
2736
  name: "Semifinal 1 Loser",
2587
2737
  flag: "\u{1F3F3}\uFE0F"
2588
2738
  },
2589
2739
  away: {
2590
- code: "SF L2",
2740
+ code: "RD32",
2591
2741
  name: "Semifinal 2 Loser",
2592
2742
  flag: "\u{1F3F3}\uFE0F"
2593
2743
  },
2594
2744
  status: "SCHEDULED",
2595
- updatedAt: "2026-06-23T22:15:03.932Z"
2745
+ updatedAt: "2026-06-24T01:20:06.749Z"
2596
2746
  },
2597
2747
  {
2598
2748
  id: "760517",
@@ -2602,17 +2752,17 @@ var schedule_2026_default = [
2602
2752
  city: "East Rutherford, New Jersey",
2603
2753
  country: "USA",
2604
2754
  home: {
2605
- code: "SFW1",
2755
+ code: "RD32",
2606
2756
  name: "Semifinal 1 Winner",
2607
2757
  flag: "\u{1F3F3}\uFE0F"
2608
2758
  },
2609
2759
  away: {
2610
- code: "SFW2",
2760
+ code: "RD32",
2611
2761
  name: "Semifinal 2 Winner",
2612
2762
  flag: "\u{1F3F3}\uFE0F"
2613
2763
  },
2614
2764
  status: "SCHEDULED",
2615
- updatedAt: "2026-06-23T22:15:03.932Z"
2765
+ updatedAt: "2026-06-24T01:20:06.749Z"
2616
2766
  }
2617
2767
  ];
2618
2768
  var SCHEDULE = schedule_2026_default;
@@ -2710,10 +2860,10 @@ function toInt(s) {
2710
2860
  const n = parseInt(s, 10);
2711
2861
  return Number.isFinite(n) ? n : void 0;
2712
2862
  }
2713
- function toTeam(t) {
2714
- const name = t?.displayName ?? t?.name ?? t?.location ?? t?.shortDisplayName ?? "TBD";
2715
- const code = (t?.abbreviation ?? name.slice(0, 3)).toUpperCase();
2716
- return { code, name, flag: nationToFlag(t?.displayName ?? t?.abbreviation ?? name) };
2863
+ function toTeam(t2) {
2864
+ const name = t2?.displayName ?? t2?.name ?? t2?.location ?? t2?.shortDisplayName ?? "TBD";
2865
+ const code = (t2?.abbreviation ?? name.slice(0, 3)).toUpperCase();
2866
+ return { code, name, flag: nationToFlag(t2?.displayName ?? t2?.abbreviation ?? name) };
2717
2867
  }
2718
2868
  function mapEspnEvent(ev, ctx = {}) {
2719
2869
  const comp = ev.competitions?.[0];
@@ -2731,6 +2881,11 @@ function mapEspnEvent(ev, ctx = {}) {
2731
2881
  const hs = toInt(homeC?.score);
2732
2882
  const as = toInt(awayC?.score);
2733
2883
  const hasScore = status !== "SCHEDULED" && hs !== void 0 && as !== void 0;
2884
+ let winnerCode;
2885
+ if (isFinished(status)) {
2886
+ if (homeC?.winner) winnerCode = home.code;
2887
+ else if (awayC?.winner) winnerCode = away.code;
2888
+ }
2734
2889
  return {
2735
2890
  id: ev.id,
2736
2891
  stage,
@@ -2744,6 +2899,7 @@ function mapEspnEvent(ev, ctx = {}) {
2744
2899
  score: hasScore ? { home: hs, away: as } : void 0,
2745
2900
  minute: parseMinute(ev.status ?? comp?.status),
2746
2901
  status,
2902
+ winnerCode,
2747
2903
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2748
2904
  };
2749
2905
  }
@@ -2835,7 +2991,7 @@ var EspnAdapter = class {
2835
2991
  const map = {};
2836
2992
  try {
2837
2993
  const tables = parseStandings(await this.get(this.standingsUrl()));
2838
- for (const t of tables) for (const r of t.rows) map[r.team.code] = t.group;
2994
+ for (const t2 of tables) for (const r of t2.rows) map[r.team.code] = t2.group;
2839
2995
  } catch {
2840
2996
  }
2841
2997
  this.groupMap = map;
@@ -2871,6 +3027,688 @@ var EspnAdapter = class {
2871
3027
  }
2872
3028
  }
2873
3029
  };
3030
+ function teamFromMatch(match, code) {
3031
+ if (match.home.code === code) return match.home;
3032
+ if (match.away.code === code) return match.away;
3033
+ return void 0;
3034
+ }
3035
+ function matchKey(stage, index) {
3036
+ return `${stage}:${index}`;
3037
+ }
3038
+ function isGroupComplete(group, tables, standingsDegraded) {
3039
+ if (standingsDegraded) return false;
3040
+ const table = tables.find((t2) => t2.group === group);
3041
+ if (!table?.rows.length || table.rows.length !== 4) return false;
3042
+ return table.rows.every((r) => r.played >= 3);
3043
+ }
3044
+ function teamFromStandings(group, position, tables) {
3045
+ const table = tables.find((t2) => t2.group === group);
3046
+ if (!table) return void 0;
3047
+ const row = table.rows[position - 1];
3048
+ return row?.team;
3049
+ }
3050
+ function resolveWinner(match) {
3051
+ if (!isFinished(match.status)) return void 0;
3052
+ if (match.winnerCode) {
3053
+ const w = teamFromMatch(match, match.winnerCode);
3054
+ if (w && w.flag !== "\u{1F3F3}\uFE0F") return w;
3055
+ }
3056
+ if (!match.score) return void 0;
3057
+ const outcome = outcomeFromScore(match.score.home, match.score.away);
3058
+ if (outcome === "H") return match.home.flag !== "\u{1F3F3}\uFE0F" ? match.home : void 0;
3059
+ if (outcome === "A") return match.away.flag !== "\u{1F3F3}\uFE0F" ? match.away : void 0;
3060
+ return void 0;
3061
+ }
3062
+ function resolveLoser(match) {
3063
+ if (!isFinished(match.status)) return void 0;
3064
+ if (match.winnerCode) {
3065
+ const winner = teamFromMatch(match, match.winnerCode);
3066
+ if (winner?.code === match.home.code) {
3067
+ return match.away.flag !== "\u{1F3F3}\uFE0F" ? match.away : void 0;
3068
+ }
3069
+ if (winner?.code === match.away.code) {
3070
+ return match.home.flag !== "\u{1F3F3}\uFE0F" ? match.home : void 0;
3071
+ }
3072
+ }
3073
+ if (!match.score) return void 0;
3074
+ const outcome = outcomeFromScore(match.score.home, match.score.away);
3075
+ if (outcome === "H") return match.away.flag !== "\u{1F3F3}\uFE0F" ? match.away : void 0;
3076
+ if (outcome === "A") return match.home.flag !== "\u{1F3F3}\uFE0F" ? match.home : void 0;
3077
+ return void 0;
3078
+ }
3079
+ function participant(team, status) {
3080
+ return { label: team.name, flag: team.flag, code: team.code, status };
3081
+ }
3082
+ function tbd(label) {
3083
+ return { label, flag: "\u{1F3F3}\uFE0F", status: "tbd" };
3084
+ }
3085
+ function winnerLabel(ctx, stage, index) {
3086
+ return t(ctx.lang, "bracket.slot.winner", {
3087
+ stage: stageLabelI18n(ctx.lang, stage),
3088
+ n: String(index)
3089
+ });
3090
+ }
3091
+ function resolveSlot(ref, ctx) {
3092
+ switch (ref.kind) {
3093
+ case "seed":
3094
+ return tbd(ref.label);
3095
+ case "group": {
3096
+ if (isGroupComplete(ref.group, ctx.tables, ctx.standingsDegraded)) {
3097
+ const team = teamFromStandings(ref.group, ref.position, ctx.tables);
3098
+ if (team) return participant(team, "projected");
3099
+ }
3100
+ const label = ref.position === 1 ? t(ctx.lang, "bracket.slot.groupWinner", { group: ref.group }) : t(ctx.lang, "bracket.slot.groupSecond", { group: ref.group });
3101
+ return tbd(label);
3102
+ }
3103
+ case "third":
3104
+ return tbd(t(ctx.lang, "bracket.slot.third", { groups: ref.groups.join("/") }));
3105
+ case "winner": {
3106
+ const node = ctx.nodesByKey.get(matchKey(ref.stage, ref.index));
3107
+ const match = node ? ctx.matchesById.get(node.matchId) : void 0;
3108
+ if (match) {
3109
+ const winner = resolveWinner(match);
3110
+ if (winner) return participant(winner, "confirmed");
3111
+ }
3112
+ return tbd(winnerLabel(ctx, ref.stage, ref.index));
3113
+ }
3114
+ case "loser": {
3115
+ const node = ctx.nodesByKey.get(matchKey(ref.stage, ref.index));
3116
+ const match = node ? ctx.matchesById.get(node.matchId) : void 0;
3117
+ if (match) {
3118
+ const loser = resolveLoser(match);
3119
+ if (loser) return participant(loser, "confirmed");
3120
+ }
3121
+ return tbd(
3122
+ t(ctx.lang, "bracket.slot.loser", {
3123
+ stage: stageLabelI18n(ctx.lang, ref.stage),
3124
+ n: String(ref.index)
3125
+ })
3126
+ );
3127
+ }
3128
+ default:
3129
+ return tbd(t(ctx.lang, "bracket.slot.tbd"));
3130
+ }
3131
+ }
3132
+ function buildBracketView(topology, matches, tables, standingsDegraded, liveDegraded, filterStage, lang) {
3133
+ const knockout = matches.filter((m) => m.stage !== "GROUP" && m.stage !== "FRIENDLY");
3134
+ const matchesById = new Map(knockout.map((m) => [m.id, m]));
3135
+ const nodesByKey = new Map(topology.matches.map((n) => [matchKey(n.stage, n.index), n]));
3136
+ const ctx = { nodesByKey, matchesById, tables, standingsDegraded, lang };
3137
+ const want = filterStage?.toUpperCase();
3138
+ const stages = [];
3139
+ for (const stage of topology.stages) {
3140
+ if (want && stage !== want) continue;
3141
+ const nodes = topology.matches.filter((n) => n.stage === stage);
3142
+ const matchViews = nodes.map((node) => {
3143
+ const match = matchesById.get(node.matchId) ?? {
3144
+ id: node.matchId,
3145
+ stage: node.stage,
3146
+ kickoff: "",
3147
+ venue: "",
3148
+ home: { code: "?", name: "TBD", flag: "\u{1F3F3}\uFE0F" },
3149
+ away: { code: "?", name: "TBD", flag: "\u{1F3F3}\uFE0F" },
3150
+ status: "SCHEDULED",
3151
+ updatedAt: ""
3152
+ };
3153
+ return {
3154
+ matchId: node.matchId,
3155
+ stage: node.stage,
3156
+ index: node.index,
3157
+ kickoff: match.kickoff,
3158
+ home: resolveSlot(node.home, ctx),
3159
+ away: resolveSlot(node.away, ctx),
3160
+ match
3161
+ };
3162
+ });
3163
+ stages.push({
3164
+ stage,
3165
+ label: stageLabelI18n(lang, stage),
3166
+ matches: matchViews
3167
+ });
3168
+ }
3169
+ return {
3170
+ stages,
3171
+ degraded: liveDegraded,
3172
+ standingsDegraded
3173
+ };
3174
+ }
3175
+ var bracket_2026_default = {
3176
+ generatedAt: "2026-06-24T01:20:06.749Z",
3177
+ stages: [
3178
+ "R32",
3179
+ "R16",
3180
+ "QF",
3181
+ "SF",
3182
+ "3P",
3183
+ "F"
3184
+ ],
3185
+ matches: [
3186
+ {
3187
+ matchId: "760486",
3188
+ stage: "R32",
3189
+ index: 1,
3190
+ home: {
3191
+ kind: "group",
3192
+ position: 2,
3193
+ group: "A"
3194
+ },
3195
+ away: {
3196
+ kind: "group",
3197
+ position: 2,
3198
+ group: "B"
3199
+ }
3200
+ },
3201
+ {
3202
+ matchId: "760487",
3203
+ stage: "R32",
3204
+ index: 2,
3205
+ home: {
3206
+ kind: "group",
3207
+ position: 1,
3208
+ group: "C"
3209
+ },
3210
+ away: {
3211
+ kind: "group",
3212
+ position: 2,
3213
+ group: "F"
3214
+ }
3215
+ },
3216
+ {
3217
+ matchId: "760488",
3218
+ stage: "R32",
3219
+ index: 3,
3220
+ home: {
3221
+ kind: "group",
3222
+ position: 1,
3223
+ group: "F"
3224
+ },
3225
+ away: {
3226
+ kind: "group",
3227
+ position: 2,
3228
+ group: "C"
3229
+ }
3230
+ },
3231
+ {
3232
+ matchId: "760489",
3233
+ stage: "R32",
3234
+ index: 4,
3235
+ home: {
3236
+ kind: "seed",
3237
+ label: "Germany",
3238
+ code: "TBD"
3239
+ },
3240
+ away: {
3241
+ kind: "third",
3242
+ groups: [
3243
+ "A",
3244
+ "B",
3245
+ "C",
3246
+ "D",
3247
+ "F"
3248
+ ]
3249
+ }
3250
+ },
3251
+ {
3252
+ matchId: "760490",
3253
+ stage: "R32",
3254
+ index: 5,
3255
+ home: {
3256
+ kind: "group",
3257
+ position: 2,
3258
+ group: "E"
3259
+ },
3260
+ away: {
3261
+ kind: "group",
3262
+ position: 2,
3263
+ group: "I"
3264
+ }
3265
+ },
3266
+ {
3267
+ matchId: "760491",
3268
+ stage: "R32",
3269
+ index: 6,
3270
+ home: {
3271
+ kind: "seed",
3272
+ label: "Mexico",
3273
+ code: "TBD"
3274
+ },
3275
+ away: {
3276
+ kind: "third",
3277
+ groups: [
3278
+ "C",
3279
+ "E",
3280
+ "F",
3281
+ "H",
3282
+ "I"
3283
+ ]
3284
+ }
3285
+ },
3286
+ {
3287
+ matchId: "760492",
3288
+ stage: "R32",
3289
+ index: 7,
3290
+ home: {
3291
+ kind: "group",
3292
+ position: 1,
3293
+ group: "I"
3294
+ },
3295
+ away: {
3296
+ kind: "third",
3297
+ groups: [
3298
+ "C",
3299
+ "D",
3300
+ "F",
3301
+ "G",
3302
+ "H"
3303
+ ]
3304
+ }
3305
+ },
3306
+ {
3307
+ matchId: "760493",
3308
+ stage: "R32",
3309
+ index: 8,
3310
+ home: {
3311
+ kind: "group",
3312
+ position: 1,
3313
+ group: "G"
3314
+ },
3315
+ away: {
3316
+ kind: "third",
3317
+ groups: [
3318
+ "A",
3319
+ "E",
3320
+ "H",
3321
+ "I",
3322
+ "J"
3323
+ ]
3324
+ }
3325
+ },
3326
+ {
3327
+ matchId: "760494",
3328
+ stage: "R32",
3329
+ index: 9,
3330
+ home: {
3331
+ kind: "seed",
3332
+ label: "United States",
3333
+ code: "TBD"
3334
+ },
3335
+ away: {
3336
+ kind: "third",
3337
+ groups: [
3338
+ "B",
3339
+ "E",
3340
+ "F",
3341
+ "I",
3342
+ "J"
3343
+ ]
3344
+ }
3345
+ },
3346
+ {
3347
+ matchId: "760495",
3348
+ stage: "R32",
3349
+ index: 10,
3350
+ home: {
3351
+ kind: "group",
3352
+ position: 1,
3353
+ group: "L"
3354
+ },
3355
+ away: {
3356
+ kind: "third",
3357
+ groups: [
3358
+ "E",
3359
+ "H",
3360
+ "I",
3361
+ "J",
3362
+ "K"
3363
+ ]
3364
+ }
3365
+ },
3366
+ {
3367
+ matchId: "760496",
3368
+ stage: "R32",
3369
+ index: 11,
3370
+ home: {
3371
+ kind: "group",
3372
+ position: 2,
3373
+ group: "K"
3374
+ },
3375
+ away: {
3376
+ kind: "group",
3377
+ position: 2,
3378
+ group: "L"
3379
+ }
3380
+ },
3381
+ {
3382
+ matchId: "760497",
3383
+ stage: "R32",
3384
+ index: 12,
3385
+ home: {
3386
+ kind: "group",
3387
+ position: 1,
3388
+ group: "H"
3389
+ },
3390
+ away: {
3391
+ kind: "group",
3392
+ position: 2,
3393
+ group: "J"
3394
+ }
3395
+ },
3396
+ {
3397
+ matchId: "760498",
3398
+ stage: "R32",
3399
+ index: 13,
3400
+ home: {
3401
+ kind: "group",
3402
+ position: 1,
3403
+ group: "B"
3404
+ },
3405
+ away: {
3406
+ kind: "third",
3407
+ groups: [
3408
+ "E",
3409
+ "F",
3410
+ "G",
3411
+ "I",
3412
+ "J"
3413
+ ]
3414
+ }
3415
+ },
3416
+ {
3417
+ matchId: "760499",
3418
+ stage: "R32",
3419
+ index: 14,
3420
+ home: {
3421
+ kind: "group",
3422
+ position: 2,
3423
+ group: "D"
3424
+ },
3425
+ away: {
3426
+ kind: "group",
3427
+ position: 2,
3428
+ group: "G"
3429
+ }
3430
+ },
3431
+ {
3432
+ matchId: "760500",
3433
+ stage: "R32",
3434
+ index: 15,
3435
+ home: {
3436
+ kind: "seed",
3437
+ label: "Argentina",
3438
+ code: "TBD"
3439
+ },
3440
+ away: {
3441
+ kind: "group",
3442
+ position: 2,
3443
+ group: "H"
3444
+ }
3445
+ },
3446
+ {
3447
+ matchId: "760501",
3448
+ stage: "R32",
3449
+ index: 16,
3450
+ home: {
3451
+ kind: "group",
3452
+ position: 1,
3453
+ group: "K"
3454
+ },
3455
+ away: {
3456
+ kind: "third",
3457
+ groups: [
3458
+ "D",
3459
+ "E",
3460
+ "I",
3461
+ "J",
3462
+ "L"
3463
+ ]
3464
+ }
3465
+ },
3466
+ {
3467
+ matchId: "760502",
3468
+ stage: "R16",
3469
+ index: 1,
3470
+ home: {
3471
+ kind: "winner",
3472
+ stage: "R32",
3473
+ index: 1
3474
+ },
3475
+ away: {
3476
+ kind: "winner",
3477
+ stage: "R32",
3478
+ index: 3
3479
+ }
3480
+ },
3481
+ {
3482
+ matchId: "760503",
3483
+ stage: "R16",
3484
+ index: 2,
3485
+ home: {
3486
+ kind: "winner",
3487
+ stage: "R32",
3488
+ index: 2
3489
+ },
3490
+ away: {
3491
+ kind: "winner",
3492
+ stage: "R32",
3493
+ index: 5
3494
+ }
3495
+ },
3496
+ {
3497
+ matchId: "760504",
3498
+ stage: "R16",
3499
+ index: 3,
3500
+ home: {
3501
+ kind: "winner",
3502
+ stage: "R32",
3503
+ index: 4
3504
+ },
3505
+ away: {
3506
+ kind: "winner",
3507
+ stage: "R32",
3508
+ index: 6
3509
+ }
3510
+ },
3511
+ {
3512
+ matchId: "760505",
3513
+ stage: "R16",
3514
+ index: 4,
3515
+ home: {
3516
+ kind: "winner",
3517
+ stage: "R32",
3518
+ index: 7
3519
+ },
3520
+ away: {
3521
+ kind: "winner",
3522
+ stage: "R32",
3523
+ index: 8
3524
+ }
3525
+ },
3526
+ {
3527
+ matchId: "760506",
3528
+ stage: "R16",
3529
+ index: 5,
3530
+ home: {
3531
+ kind: "winner",
3532
+ stage: "R32",
3533
+ index: 11
3534
+ },
3535
+ away: {
3536
+ kind: "winner",
3537
+ stage: "R32",
3538
+ index: 12
3539
+ }
3540
+ },
3541
+ {
3542
+ matchId: "760507",
3543
+ stage: "R16",
3544
+ index: 6,
3545
+ home: {
3546
+ kind: "winner",
3547
+ stage: "R32",
3548
+ index: 9
3549
+ },
3550
+ away: {
3551
+ kind: "winner",
3552
+ stage: "R32",
3553
+ index: 10
3554
+ }
3555
+ },
3556
+ {
3557
+ matchId: "760508",
3558
+ stage: "R16",
3559
+ index: 7,
3560
+ home: {
3561
+ kind: "winner",
3562
+ stage: "R32",
3563
+ index: 13
3564
+ },
3565
+ away: {
3566
+ kind: "winner",
3567
+ stage: "R32",
3568
+ index: 15
3569
+ }
3570
+ },
3571
+ {
3572
+ matchId: "760509",
3573
+ stage: "R16",
3574
+ index: 8,
3575
+ home: {
3576
+ kind: "winner",
3577
+ stage: "R32",
3578
+ index: 14
3579
+ },
3580
+ away: {
3581
+ kind: "winner",
3582
+ stage: "R32",
3583
+ index: 16
3584
+ }
3585
+ },
3586
+ {
3587
+ matchId: "760510",
3588
+ stage: "QF",
3589
+ index: 1,
3590
+ home: {
3591
+ kind: "winner",
3592
+ stage: "R16",
3593
+ index: 1
3594
+ },
3595
+ away: {
3596
+ kind: "winner",
3597
+ stage: "R16",
3598
+ index: 2
3599
+ }
3600
+ },
3601
+ {
3602
+ matchId: "760511",
3603
+ stage: "QF",
3604
+ index: 2,
3605
+ home: {
3606
+ kind: "winner",
3607
+ stage: "R16",
3608
+ index: 5
3609
+ },
3610
+ away: {
3611
+ kind: "winner",
3612
+ stage: "R16",
3613
+ index: 6
3614
+ }
3615
+ },
3616
+ {
3617
+ matchId: "760512",
3618
+ stage: "QF",
3619
+ index: 3,
3620
+ home: {
3621
+ kind: "winner",
3622
+ stage: "R16",
3623
+ index: 3
3624
+ },
3625
+ away: {
3626
+ kind: "winner",
3627
+ stage: "R16",
3628
+ index: 4
3629
+ }
3630
+ },
3631
+ {
3632
+ matchId: "760513",
3633
+ stage: "QF",
3634
+ index: 4,
3635
+ home: {
3636
+ kind: "winner",
3637
+ stage: "R16",
3638
+ index: 7
3639
+ },
3640
+ away: {
3641
+ kind: "winner",
3642
+ stage: "R16",
3643
+ index: 8
3644
+ }
3645
+ },
3646
+ {
3647
+ matchId: "760514",
3648
+ stage: "SF",
3649
+ index: 1,
3650
+ home: {
3651
+ kind: "winner",
3652
+ stage: "QF",
3653
+ index: 1
3654
+ },
3655
+ away: {
3656
+ kind: "winner",
3657
+ stage: "QF",
3658
+ index: 2
3659
+ }
3660
+ },
3661
+ {
3662
+ matchId: "760515",
3663
+ stage: "SF",
3664
+ index: 2,
3665
+ home: {
3666
+ kind: "winner",
3667
+ stage: "QF",
3668
+ index: 3
3669
+ },
3670
+ away: {
3671
+ kind: "winner",
3672
+ stage: "QF",
3673
+ index: 4
3674
+ }
3675
+ },
3676
+ {
3677
+ matchId: "760516",
3678
+ stage: "3P",
3679
+ index: 1,
3680
+ home: {
3681
+ kind: "loser",
3682
+ stage: "SF",
3683
+ index: 1
3684
+ },
3685
+ away: {
3686
+ kind: "loser",
3687
+ stage: "SF",
3688
+ index: 2
3689
+ }
3690
+ },
3691
+ {
3692
+ matchId: "760517",
3693
+ stage: "F",
3694
+ index: 1,
3695
+ home: {
3696
+ kind: "winner",
3697
+ stage: "SF",
3698
+ index: 1
3699
+ },
3700
+ away: {
3701
+ kind: "winner",
3702
+ stage: "SF",
3703
+ index: 2
3704
+ }
3705
+ }
3706
+ ]
3707
+ };
3708
+ var TOPOLOGY = bracket_2026_default;
3709
+ function loadBracketTopology() {
3710
+ return TOPOLOGY;
3711
+ }
2874
3712
  function resolveCompetition(explicit) {
2875
3713
  if (explicit) return explicit;
2876
3714
  if (typeof process !== "undefined" && process.env?.CLAUDINHO_COMPETITION) {
@@ -2911,7 +3749,7 @@ async function getStandings(adapter, group) {
2911
3749
  if (adapter.fetchStandings) {
2912
3750
  try {
2913
3751
  const all = await adapter.fetchStandings();
2914
- const tables2 = (want ? all.filter((t) => t.group === want) : all).sort(
3752
+ const tables2 = (want ? all.filter((t2) => t2.group === want) : all).sort(
2915
3753
  (a, b) => a.group.localeCompare(b.group)
2916
3754
  );
2917
3755
  return { tables: tables2, degraded: false, source: adapter.name };
@@ -2919,9 +3757,45 @@ async function getStandings(adapter, group) {
2919
3757
  }
2920
3758
  }
2921
3759
  const letters = want ? [want] : groups();
2922
- const tables = letters.map((g) => ({ group: g, rows: rosterAtZero(fixturesByGroup(g)) })).filter((t) => t.rows.length > 0);
3760
+ const tables = letters.map((g) => ({ group: g, rows: rosterAtZero(fixturesByGroup(g)) })).filter((t2) => t2.rows.length > 0);
2923
3761
  return { tables, degraded: true };
2924
3762
  }
3763
+ var KNOCKOUT_WINDOW_START = "20260628";
3764
+ var KNOCKOUT_WINDOW_END = "20260719";
3765
+ async function getBracket(adapter, opts = {}) {
3766
+ const topology = loadBracketTopology();
3767
+ const base = allFixtures().filter((m) => m.stage !== "GROUP" && m.stage !== "FRIENDLY");
3768
+ let matches = base;
3769
+ let liveDegraded = true;
3770
+ let source;
3771
+ try {
3772
+ const live = adapter.fetchWindow ? await adapter.fetchWindow(KNOCKOUT_WINDOW_START, KNOCKOUT_WINDOW_END) : [];
3773
+ matches = mergeLive(base, live);
3774
+ liveDegraded = false;
3775
+ source = adapter.name;
3776
+ } catch {
3777
+ }
3778
+ const standings = await getStandings(adapter);
3779
+ if (!source && !standings.degraded && standings.source) {
3780
+ source = standings.source;
3781
+ }
3782
+ const view = buildBracketView(
3783
+ topology,
3784
+ matches,
3785
+ standings.tables,
3786
+ standings.degraded,
3787
+ liveDegraded,
3788
+ opts.stage,
3789
+ opts.lang
3790
+ );
3791
+ if (source) view.source = source;
3792
+ return {
3793
+ view,
3794
+ degraded: liveDegraded,
3795
+ standingsDegraded: standings.degraded,
3796
+ source
3797
+ };
3798
+ }
2925
3799
  function shiftUtcDate(dateISO, days) {
2926
3800
  const [y, m, d] = dateISO.slice(0, 10).split("-").map(Number);
2927
3801
  return new Date(Date.UTC(y ?? 1970, (m ?? 1) - 1, (d ?? 1) + days)).toISOString().slice(0, 10);
@@ -3075,9 +3949,9 @@ function outcomeLabel(o, match) {
3075
3949
  return o.label;
3076
3950
  }
3077
3951
  function utcHhmm(iso) {
3078
- const t = Date.parse(iso);
3079
- if (!Number.isFinite(t)) return "";
3080
- return `${new Date(t).toISOString().slice(11, 16)} UTC`;
3952
+ const t2 = Date.parse(iso);
3953
+ if (!Number.isFinite(t2)) return "";
3954
+ return `${new Date(t2).toISOString().slice(11, 16)} UTC`;
3081
3955
  }
3082
3956
  function marketFavoriteText(signal, match) {
3083
3957
  const fav = signal.favorite;
@@ -3515,6 +4389,78 @@ function formatShareTable(input, options = {}) {
3515
4389
  );
3516
4390
  return blocks.join("\n\n");
3517
4391
  }
4392
+ function formatParticipant(p, flags, locale) {
4393
+ const suffix = p.status === "projected" ? ` ${t(locale, "bracket.projected")}` : "";
4394
+ if (flags && p.flag !== "\u{1F3F3}\uFE0F") return `${p.flag} ${p.label}${suffix}`;
4395
+ if (p.code) return `${p.code}${suffix}`;
4396
+ return `${p.label}${suffix}`;
4397
+ }
4398
+ function statusTail2(m) {
4399
+ if (m.status === "LIVE" && m.minute) return ` ${m.minute}'`;
4400
+ if (m.status === "HT") return " HT";
4401
+ if (m.status === "FT") return " FT";
4402
+ if (isLive(m.status)) return " LIVE";
4403
+ return "";
4404
+ }
4405
+ function formatBracketMatchLine(mv, opts = {}) {
4406
+ const flags = opts.flags !== false;
4407
+ const home = formatParticipant(mv.home, flags, opts.locale);
4408
+ const away = formatParticipant(mv.away, flags, opts.locale);
4409
+ const m = mv.match;
4410
+ if (isFinished(m.status) || isLive(m.status)) {
4411
+ return ` ${home} ${scoreline(m)} ${away}${statusTail2(m)}`;
4412
+ }
4413
+ const kickoff = mv.kickoff ? formatKickoff(mv.kickoff, { tz: opts.tz, locale: opts.locale }) : "";
4414
+ return ` ${home} vs ${away}${kickoff ? ` \xB7 ${kickoff}` : ""}`;
4415
+ }
4416
+ function formatBracketList(view, opts = {}) {
4417
+ const blocks = [];
4418
+ for (const stage of view.stages) {
4419
+ blocks.push(stage.label);
4420
+ for (const mv of stage.matches) {
4421
+ blocks.push(formatBracketMatchLine(mv, opts));
4422
+ }
4423
+ blocks.push("");
4424
+ }
4425
+ if (opts.footer !== false) {
4426
+ if (view.degraded) {
4427
+ blocks.push(`(${t(opts.locale, "bracket.degraded")})`);
4428
+ } else if (view.standingsDegraded) {
4429
+ blocks.push(`(${t(opts.locale, "bracket.standingsDegraded")})`);
4430
+ }
4431
+ if (view.source) {
4432
+ blocks.push(t(opts.locale, "live.data", { source: liveSourceLabel(view.source) }));
4433
+ }
4434
+ }
4435
+ return blocks.join("\n").trimEnd();
4436
+ }
4437
+ function formatShareBracket(input, options = {}) {
4438
+ const includeHashtag = options.includeHashtag !== false;
4439
+ const includeInstall = options.includeInstallLine !== false;
4440
+ const locale = options.locale;
4441
+ const blocks = [t(locale, "bracket.shareTitle"), ""];
4442
+ if (input.view.stages.length === 0) {
4443
+ blocks.push(input.emptyNote ?? t(locale, "bracket.empty"));
4444
+ } else {
4445
+ blocks.push(formatBracketList(input.view, { footer: false, locale }));
4446
+ if (input.view.degraded) {
4447
+ blocks.push(`(${t(locale, "bracket.degraded")})`);
4448
+ } else if (input.view.standingsDegraded) {
4449
+ blocks.push(`(${t(locale, "bracket.standingsDegraded")})`);
4450
+ }
4451
+ }
4452
+ const footer = [];
4453
+ const src = input.source ?? input.view.source;
4454
+ if (src) footer.push(t(locale, "live.data", { source: liveSourceLabel(src) }));
4455
+ footer.push(
4456
+ [includeHashtag ? SHARE_HASHTAG : "", SHARE_DISCLAIMER].filter(Boolean).join(" \xB7 ")
4457
+ );
4458
+ if (includeInstall && input.installLine) {
4459
+ footer.push(t(locale, "share.tryIt", { line: input.installLine }));
4460
+ }
4461
+ blocks.push("", footer.join("\n"));
4462
+ return blocks.join("\n");
4463
+ }
3518
4464
 
3519
4465
  // src/format.ts
3520
4466
  var STATUS_LABEL = {
@@ -3660,9 +4606,9 @@ function fmtOpts(args) {
3660
4606
  flavor: asFlavorLevel(args.flavor ?? process.env.CLAUDINHO_FLAVOR)
3661
4607
  };
3662
4608
  }
3663
- function withDisclaimer(text, source) {
4609
+ function withDisclaimer(text, source, lang) {
3664
4610
  const live = source ? `
3665
- Live data: ${liveSourceLabel(source)}` : "";
4611
+ ${t(lang, "live.data", { source: liveSourceLabel(source) })}` : "";
3666
4612
  return `${text}${live}
3667
4613
 
3668
4614
  ${DISCLAIMER}`;
@@ -3737,13 +4683,45 @@ async function toolGetStandings(args) {
3737
4683
  data: { degraded, source: source ?? null, tables: args.group ? null : [] }
3738
4684
  };
3739
4685
  }
3740
- let text = shaped.map((t) => standingsTable(t.group, t.standings)).join("\n\n");
4686
+ let text = shaped.map((t2) => standingsTable(t2.group, t2.standings)).join("\n\n");
3741
4687
  if (degraded) text += "\n\n(Live standings unavailable \u2014 showing the group roster.)";
3742
4688
  return {
3743
4689
  text: withDisclaimer(text, source),
3744
4690
  data: { degraded, source: source ?? null, tables: args.group ? shaped[0] ?? null : shaped }
3745
4691
  };
3746
4692
  }
4693
+ var BRACKET_STAGES = /* @__PURE__ */ new Set(["R32", "R16", "QF", "SF", "3P", "F"]);
4694
+ async function toolGetBracket(args) {
4695
+ const filter = args.stage?.toUpperCase();
4696
+ if (filter && !BRACKET_STAGES.has(filter)) {
4697
+ return {
4698
+ text: withDisclaimer(
4699
+ t(args.lang, "bracket.unknownStage", { stage: args.stage ?? "" }),
4700
+ void 0,
4701
+ args.lang
4702
+ ),
4703
+ data: { view: null }
4704
+ };
4705
+ }
4706
+ const { view, degraded, standingsDegraded, source } = await getBracket(
4707
+ resolveAdapter(args),
4708
+ filter ? { stage: filter, lang: args.lang } : { lang: args.lang }
4709
+ );
4710
+ let text = formatBracketList(view, { footer: false, locale: args.lang });
4711
+ if (degraded) {
4712
+ text += `
4713
+
4714
+ (${t(args.lang, "bracket.degraded")})`;
4715
+ } else if (standingsDegraded) {
4716
+ text += `
4717
+
4718
+ (${t(args.lang, "bracket.standingsDegraded")})`;
4719
+ }
4720
+ return {
4721
+ text: withDisclaimer(text, source, args.lang),
4722
+ data: { degraded, standingsDegraded, source: source ?? null, view }
4723
+ };
4724
+ }
3747
4725
  async function standingsResourceText(group, adapter) {
3748
4726
  const g = group.toUpperCase();
3749
4727
  const { tables, degraded, source } = await getStandings(adapter, g);
@@ -3921,6 +4899,45 @@ async function toolGetShareSnippet(args) {
3921
4899
  }
3922
4900
  };
3923
4901
  }
4902
+ if (args.bracket) {
4903
+ const stageFilter = args.knockoutStage?.toUpperCase();
4904
+ if (stageFilter && !BRACKET_STAGES.has(stageFilter)) {
4905
+ return {
4906
+ text: withDisclaimer(
4907
+ t(args.lang, "bracket.unknownStage", { stage: args.knockoutStage ?? "" }),
4908
+ void 0,
4909
+ args.lang
4910
+ ),
4911
+ data: { kind: "bracket", view: null }
4912
+ };
4913
+ }
4914
+ const { view, degraded: degraded2, source: source2 } = await getBracket(
4915
+ resolveAdapter(args),
4916
+ stageFilter ? { stage: stageFilter, lang: args.lang } : { lang: args.lang }
4917
+ );
4918
+ const snippet = formatShareBracket(
4919
+ {
4920
+ view,
4921
+ source: degraded2 ? void 0 : source2,
4922
+ installLine: stageFilter ? `npx @claudinho/cli bracket ${stageFilter}` : "npx @claudinho/cli bracket",
4923
+ emptyNote: t(args.lang, "bracket.empty")
4924
+ },
4925
+ { ...options, locale: args.lang }
4926
+ );
4927
+ return {
4928
+ text: snippet,
4929
+ data: {
4930
+ kind: "bracket",
4931
+ target: "bracket",
4932
+ ...stageFilter ? { stage: stageFilter } : {},
4933
+ source: degraded2 ? null : source2 ?? null,
4934
+ degraded: degraded2,
4935
+ informationalOnly: true,
4936
+ snippet,
4937
+ view
4938
+ }
4939
+ };
4940
+ }
3924
4941
  if (args.matchId) {
3925
4942
  const { match, degraded: degraded2, source: source2 } = await getMatchById(resolveAdapter(args), args.matchId);
3926
4943
  const matches = match ? [match] : [];
@@ -3988,11 +5005,11 @@ async function toolGetShareSnippet(args) {
3988
5005
 
3989
5006
  // src/server.ts
3990
5007
  var SERVER_NAME = "claudinho";
3991
- var SERVER_VERSION = "0.7.0";
5008
+ var SERVER_VERSION = "0.8.0";
3992
5009
  var VOICE = asFlavorLevel(process.env.CLAUDINHO_FLAVOR) === "off" ? "" : `
3993
5010
  Voice: when relaying scores, narrate with lively, regionally-appropriate football-commentary energy in the user's language. Each match line may end with a short exclamation ("\u2014 \xA1GOOOOL!") \u2014 use it as a tone cue. Keep every fact exact; never invent details and never impersonate or name a real commentator.`;
3994
5011
  var INSTRUCTIONS = `Claudinho serves live scores, fixtures, and group standings for the 2026 men's football tournament.
3995
- Use get_live during matches, get_today for a day's schedule, get_next_fixture for a specific team (3-letter code, e.g. MEX), and get_standings for group tables.
5012
+ Use get_live during matches, get_today for a day's schedule, get_next_fixture for a specific team (3-letter code, e.g. MEX), get_standings for group tables, and get_bracket for the knockout tree.
3996
5013
  Use get_market_signal for read-only prediction-market signals (a match, a team's current-or-next fixture, or a date). Market data is informational only \u2014 relay the percentages factually and never frame it as betting or trading advice.
3997
5014
  Use get_share_snippet to produce a ready-to-paste match card (for a match, a team's next fixture, a date, or live matches) \u2014 hand the user the returned snippet text verbatim.${VOICE}
3998
5015
  ${DISCLAIMER}`;
@@ -4065,6 +5082,19 @@ function buildServer() {
4065
5082
  },
4066
5083
  async (args) => toContent(await toolGetStandings(args))
4067
5084
  );
5085
+ server.registerTool(
5086
+ "get_bracket",
5087
+ {
5088
+ title: "Knockout bracket",
5089
+ description: "Knockout bracket from the Round of 32 through the final, with live scores overlaid. Group slots project only when a group is fully played; winner slots need a confirmed FT result. Pass an optional stage (R32, R16, QF, SF, 3P, F) to filter one round. Falls back to structure-only when live data is unavailable.",
5090
+ inputSchema: {
5091
+ stage: z.enum(["R32", "R16", "QF", "SF", "3P", "F"]).optional().describe("Knockout round to show (omit for the full bracket)"),
5092
+ ...commonArgs
5093
+ },
5094
+ annotations: { readOnlyHint: true, openWorldHint: true }
5095
+ },
5096
+ async (args) => toContent(await toolGetBracket(args))
5097
+ );
4068
5098
  server.registerTool(
4069
5099
  "get_next_fixture",
4070
5100
  {
@@ -4098,11 +5128,13 @@ function buildServer() {
4098
5128
  "get_share_snippet",
4099
5129
  {
4100
5130
  title: "Shareable match snippet",
4101
- description: `A polished, copy-pasteable card (plain text) for a match (matchId), a team's next fixture (team), a group's standings table (group, e.g. "A"), a date (default: today), or live matches (live: true). Returns the ready-to-paste snippet plus structured data \u2014 hand the snippet text to the user verbatim. No links; it carries a non-affiliation disclaimer, and any market line stays informational only.`,
5131
+ description: `A polished, copy-pasteable card (plain text) for a match (matchId), a team's next fixture (team), a group's standings table (group, e.g. "A"), the knockout bracket (bracket: true), a date (default: today), or live matches (live: true). Returns the ready-to-paste snippet plus structured data \u2014 hand the snippet text to the user verbatim. No links; it carries a non-affiliation disclaimer, and any market line stays informational only.`,
4102
5132
  inputSchema: {
4103
5133
  matchId: z.string().optional().describe("Match id (most specific)"),
4104
5134
  team: teamArg.optional().describe("3-letter team code for that team's next fixture, e.g. MEX"),
4105
5135
  group: groupArg.optional().describe("Group letter A\u2013L for a standings card, e.g. A"),
5136
+ bracket: z.boolean().optional().describe("Knockout bracket card (use with optional knockoutStage)"),
5137
+ knockoutStage: z.enum(["R32", "R16", "QF", "SF", "3P", "F"]).optional().describe("Filter the bracket card to one round"),
4106
5138
  date: dateArg.optional().describe("Date as YYYY-MM-DD (default: today)"),
4107
5139
  live: z.boolean().optional().describe("Snapshot of matches in play right now"),
4108
5140
  style: z.enum(["social", "compact"]).optional().describe("social (default, full card) or compact (one line per match)"),