@claudinho/mcp 0.6.2 → 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 +1206 -203
  3. package/package.json +4 -4
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
  }
@@ -370,6 +520,29 @@ function matchLocation(match) {
370
520
  function byKickoff(a, b) {
371
521
  return a.kickoff.localeCompare(b.kickoff);
372
522
  }
523
+ function stageLabel(m) {
524
+ if (m.group) return `Group ${m.group}`;
525
+ switch (m.stage) {
526
+ case "GROUP":
527
+ return "Group stage";
528
+ case "R32":
529
+ return "Round of 32";
530
+ case "R16":
531
+ return "Round of 16";
532
+ case "QF":
533
+ return "Quarter-final";
534
+ case "SF":
535
+ return "Semi-final";
536
+ case "3P":
537
+ return "Third-place play-off";
538
+ case "F":
539
+ return "Final";
540
+ case "FRIENDLY":
541
+ return "Friendly";
542
+ default:
543
+ return "";
544
+ }
545
+ }
373
546
  var FLAVOR_LEVELS = ["off", "subtle", "full"];
374
547
  var DEFAULT_FLAVOR = "full";
375
548
  function isFlavorLevel(s) {
@@ -458,7 +631,7 @@ var schedule_2026_default = [
458
631
  flag: "\u{1F1FF}\u{1F1E6}"
459
632
  },
460
633
  status: "SCHEDULED",
461
- updatedAt: "2026-06-07T07:52:54.333Z"
634
+ updatedAt: "2026-06-24T01:20:06.301Z"
462
635
  },
463
636
  {
464
637
  id: "760414",
@@ -479,7 +652,7 @@ var schedule_2026_default = [
479
652
  flag: "\u{1F1E8}\u{1F1FF}"
480
653
  },
481
654
  status: "SCHEDULED",
482
- updatedAt: "2026-06-07T07:52:54.337Z"
655
+ updatedAt: "2026-06-24T01:20:06.302Z"
483
656
  },
484
657
  {
485
658
  id: "760416",
@@ -500,7 +673,7 @@ var schedule_2026_default = [
500
673
  flag: "\u{1F1E7}\u{1F1E6}"
501
674
  },
502
675
  status: "SCHEDULED",
503
- updatedAt: "2026-06-07T07:52:54.337Z"
676
+ updatedAt: "2026-06-24T01:20:06.302Z"
504
677
  },
505
678
  {
506
679
  id: "760417",
@@ -521,7 +694,7 @@ var schedule_2026_default = [
521
694
  flag: "\u{1F1F5}\u{1F1FE}"
522
695
  },
523
696
  status: "SCHEDULED",
524
- updatedAt: "2026-06-07T07:52:54.337Z"
697
+ updatedAt: "2026-06-24T01:20:06.302Z"
525
698
  },
526
699
  {
527
700
  id: "760420",
@@ -542,7 +715,7 @@ var schedule_2026_default = [
542
715
  flag: "\u{1F1E8}\u{1F1ED}"
543
716
  },
544
717
  status: "SCHEDULED",
545
- updatedAt: "2026-06-07T07:52:54.337Z"
718
+ updatedAt: "2026-06-24T01:20:06.302Z"
546
719
  },
547
720
  {
548
721
  id: "760419",
@@ -563,7 +736,7 @@ var schedule_2026_default = [
563
736
  flag: "\u{1F1F2}\u{1F1E6}"
564
737
  },
565
738
  status: "SCHEDULED",
566
- updatedAt: "2026-06-07T07:52:54.337Z"
739
+ updatedAt: "2026-06-24T01:20:06.302Z"
567
740
  },
568
741
  {
569
742
  id: "760418",
@@ -584,7 +757,7 @@ var schedule_2026_default = [
584
757
  flag: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}"
585
758
  },
586
759
  status: "SCHEDULED",
587
- updatedAt: "2026-06-07T07:52:54.337Z"
760
+ updatedAt: "2026-06-24T01:20:06.302Z"
588
761
  },
589
762
  {
590
763
  id: "760421",
@@ -605,7 +778,7 @@ var schedule_2026_default = [
605
778
  flag: "\u{1F1F9}\u{1F1F7}"
606
779
  },
607
780
  status: "SCHEDULED",
608
- updatedAt: "2026-06-07T07:52:54.337Z"
781
+ updatedAt: "2026-06-24T01:20:06.302Z"
609
782
  },
610
783
  {
611
784
  id: "760422",
@@ -626,7 +799,7 @@ var schedule_2026_default = [
626
799
  flag: "\u{1F1E8}\u{1F1FC}"
627
800
  },
628
801
  status: "SCHEDULED",
629
- updatedAt: "2026-06-07T07:52:54.337Z"
802
+ updatedAt: "2026-06-24T01:20:06.302Z"
630
803
  },
631
804
  {
632
805
  id: "760425",
@@ -647,7 +820,7 @@ var schedule_2026_default = [
647
820
  flag: "\u{1F1EF}\u{1F1F5}"
648
821
  },
649
822
  status: "SCHEDULED",
650
- updatedAt: "2026-06-07T07:52:54.337Z"
823
+ updatedAt: "2026-06-24T01:20:06.302Z"
651
824
  },
652
825
  {
653
826
  id: "760423",
@@ -668,7 +841,7 @@ var schedule_2026_default = [
668
841
  flag: "\u{1F1EA}\u{1F1E8}"
669
842
  },
670
843
  status: "SCHEDULED",
671
- updatedAt: "2026-06-07T07:52:54.337Z"
844
+ updatedAt: "2026-06-24T01:20:06.302Z"
672
845
  },
673
846
  {
674
847
  id: "760424",
@@ -689,7 +862,7 @@ var schedule_2026_default = [
689
862
  flag: "\u{1F1F9}\u{1F1F3}"
690
863
  },
691
864
  status: "SCHEDULED",
692
- updatedAt: "2026-06-07T07:52:54.337Z"
865
+ updatedAt: "2026-06-24T01:20:06.302Z"
693
866
  },
694
867
  {
695
868
  id: "760428",
@@ -710,7 +883,7 @@ var schedule_2026_default = [
710
883
  flag: "\u{1F1E8}\u{1F1FB}"
711
884
  },
712
885
  status: "SCHEDULED",
713
- updatedAt: "2026-06-07T07:52:54.337Z"
886
+ updatedAt: "2026-06-24T01:20:06.302Z"
714
887
  },
715
888
  {
716
889
  id: "760426",
@@ -731,7 +904,7 @@ var schedule_2026_default = [
731
904
  flag: "\u{1F1EA}\u{1F1EC}"
732
905
  },
733
906
  status: "SCHEDULED",
734
- updatedAt: "2026-06-07T07:52:54.337Z"
907
+ updatedAt: "2026-06-24T01:20:06.302Z"
735
908
  },
736
909
  {
737
910
  id: "760429",
@@ -752,7 +925,7 @@ var schedule_2026_default = [
752
925
  flag: "\u{1F1FA}\u{1F1FE}"
753
926
  },
754
927
  status: "SCHEDULED",
755
- updatedAt: "2026-06-07T07:52:54.337Z"
928
+ updatedAt: "2026-06-24T01:20:06.302Z"
756
929
  },
757
930
  {
758
931
  id: "760427",
@@ -773,7 +946,7 @@ var schedule_2026_default = [
773
946
  flag: "\u{1F1F3}\u{1F1FF}"
774
947
  },
775
948
  status: "SCHEDULED",
776
- updatedAt: "2026-06-07T07:52:54.337Z"
949
+ updatedAt: "2026-06-24T01:20:06.302Z"
777
950
  },
778
951
  {
779
952
  id: "760432",
@@ -794,7 +967,7 @@ var schedule_2026_default = [
794
967
  flag: "\u{1F1F8}\u{1F1F3}"
795
968
  },
796
969
  status: "SCHEDULED",
797
- updatedAt: "2026-06-07T07:52:54.337Z"
970
+ updatedAt: "2026-06-24T01:20:06.302Z"
798
971
  },
799
972
  {
800
973
  id: "760430",
@@ -815,7 +988,7 @@ var schedule_2026_default = [
815
988
  flag: "\u{1F1F3}\u{1F1F4}"
816
989
  },
817
990
  status: "SCHEDULED",
818
- updatedAt: "2026-06-07T07:52:54.337Z"
991
+ updatedAt: "2026-06-24T01:20:06.302Z"
819
992
  },
820
993
  {
821
994
  id: "760433",
@@ -836,7 +1009,7 @@ var schedule_2026_default = [
836
1009
  flag: "\u{1F1E9}\u{1F1FF}"
837
1010
  },
838
1011
  status: "SCHEDULED",
839
- updatedAt: "2026-06-07T07:52:54.337Z"
1012
+ updatedAt: "2026-06-24T01:20:06.302Z"
840
1013
  },
841
1014
  {
842
1015
  id: "760431",
@@ -857,7 +1030,7 @@ var schedule_2026_default = [
857
1030
  flag: "\u{1F1EF}\u{1F1F4}"
858
1031
  },
859
1032
  status: "SCHEDULED",
860
- updatedAt: "2026-06-07T07:52:54.337Z"
1033
+ updatedAt: "2026-06-24T01:20:06.302Z"
861
1034
  },
862
1035
  {
863
1036
  id: "760435",
@@ -878,7 +1051,7 @@ var schedule_2026_default = [
878
1051
  flag: "\u{1F1E8}\u{1F1E9}"
879
1052
  },
880
1053
  status: "SCHEDULED",
881
- updatedAt: "2026-06-07T07:52:54.337Z"
1054
+ updatedAt: "2026-06-24T01:20:06.302Z"
882
1055
  },
883
1056
  {
884
1057
  id: "760437",
@@ -899,7 +1072,7 @@ var schedule_2026_default = [
899
1072
  flag: "\u{1F1ED}\u{1F1F7}"
900
1073
  },
901
1074
  status: "SCHEDULED",
902
- updatedAt: "2026-06-07T07:52:54.337Z"
1075
+ updatedAt: "2026-06-24T01:20:06.302Z"
903
1076
  },
904
1077
  {
905
1078
  id: "760434",
@@ -920,7 +1093,7 @@ var schedule_2026_default = [
920
1093
  flag: "\u{1F1F5}\u{1F1E6}"
921
1094
  },
922
1095
  status: "SCHEDULED",
923
- updatedAt: "2026-06-07T07:52:54.337Z"
1096
+ updatedAt: "2026-06-24T01:20:06.302Z"
924
1097
  },
925
1098
  {
926
1099
  id: "760436",
@@ -941,7 +1114,7 @@ var schedule_2026_default = [
941
1114
  flag: "\u{1F1E8}\u{1F1F4}"
942
1115
  },
943
1116
  status: "SCHEDULED",
944
- updatedAt: "2026-06-07T07:52:54.337Z"
1117
+ updatedAt: "2026-06-24T01:20:06.302Z"
945
1118
  },
946
1119
  {
947
1120
  id: "760438",
@@ -962,7 +1135,7 @@ var schedule_2026_default = [
962
1135
  flag: "\u{1F1FF}\u{1F1E6}"
963
1136
  },
964
1137
  status: "SCHEDULED",
965
- updatedAt: "2026-06-07T07:52:54.418Z"
1138
+ updatedAt: "2026-06-24T01:20:06.394Z"
966
1139
  },
967
1140
  {
968
1141
  id: "760439",
@@ -983,7 +1156,7 @@ var schedule_2026_default = [
983
1156
  flag: "\u{1F1E7}\u{1F1E6}"
984
1157
  },
985
1158
  status: "SCHEDULED",
986
- updatedAt: "2026-06-07T07:52:54.418Z"
1159
+ updatedAt: "2026-06-24T01:20:06.394Z"
987
1160
  },
988
1161
  {
989
1162
  id: "760440",
@@ -1004,7 +1177,7 @@ var schedule_2026_default = [
1004
1177
  flag: "\u{1F1F6}\u{1F1E6}"
1005
1178
  },
1006
1179
  status: "SCHEDULED",
1007
- updatedAt: "2026-06-07T07:52:54.418Z"
1180
+ updatedAt: "2026-06-24T01:20:06.394Z"
1008
1181
  },
1009
1182
  {
1010
1183
  id: "760441",
@@ -1025,7 +1198,7 @@ var schedule_2026_default = [
1025
1198
  flag: "\u{1F1F0}\u{1F1F7}"
1026
1199
  },
1027
1200
  status: "SCHEDULED",
1028
- updatedAt: "2026-06-07T07:52:54.418Z"
1201
+ updatedAt: "2026-06-24T01:20:06.394Z"
1029
1202
  },
1030
1203
  {
1031
1204
  id: "760442",
@@ -1046,7 +1219,7 @@ var schedule_2026_default = [
1046
1219
  flag: "\u{1F1E6}\u{1F1FA}"
1047
1220
  },
1048
1221
  status: "SCHEDULED",
1049
- updatedAt: "2026-06-07T07:52:54.418Z"
1222
+ updatedAt: "2026-06-24T01:20:06.394Z"
1050
1223
  },
1051
1224
  {
1052
1225
  id: "760445",
@@ -1067,7 +1240,7 @@ var schedule_2026_default = [
1067
1240
  flag: "\u{1F1F2}\u{1F1E6}"
1068
1241
  },
1069
1242
  status: "SCHEDULED",
1070
- updatedAt: "2026-06-07T07:52:54.418Z"
1243
+ updatedAt: "2026-06-24T01:20:06.394Z"
1071
1244
  },
1072
1245
  {
1073
1246
  id: "760444",
@@ -1088,7 +1261,7 @@ var schedule_2026_default = [
1088
1261
  flag: "\u{1F1ED}\u{1F1F9}"
1089
1262
  },
1090
1263
  status: "SCHEDULED",
1091
- updatedAt: "2026-06-07T07:52:54.418Z"
1264
+ updatedAt: "2026-06-24T01:20:06.394Z"
1092
1265
  },
1093
1266
  {
1094
1267
  id: "760443",
@@ -1109,7 +1282,7 @@ var schedule_2026_default = [
1109
1282
  flag: "\u{1F1F5}\u{1F1FE}"
1110
1283
  },
1111
1284
  status: "SCHEDULED",
1112
- updatedAt: "2026-06-07T07:52:54.418Z"
1285
+ updatedAt: "2026-06-24T01:20:06.394Z"
1113
1286
  },
1114
1287
  {
1115
1288
  id: "760447",
@@ -1130,7 +1303,7 @@ var schedule_2026_default = [
1130
1303
  flag: "\u{1F1F8}\u{1F1EA}"
1131
1304
  },
1132
1305
  status: "SCHEDULED",
1133
- updatedAt: "2026-06-07T07:52:54.418Z"
1306
+ updatedAt: "2026-06-24T01:20:06.394Z"
1134
1307
  },
1135
1308
  {
1136
1309
  id: "760448",
@@ -1151,7 +1324,7 @@ var schedule_2026_default = [
1151
1324
  flag: "\u{1F1E8}\u{1F1EE}"
1152
1325
  },
1153
1326
  status: "SCHEDULED",
1154
- updatedAt: "2026-06-07T07:52:54.418Z"
1327
+ updatedAt: "2026-06-24T01:20:06.394Z"
1155
1328
  },
1156
1329
  {
1157
1330
  id: "760446",
@@ -1172,7 +1345,7 @@ var schedule_2026_default = [
1172
1345
  flag: "\u{1F1E8}\u{1F1FC}"
1173
1346
  },
1174
1347
  status: "SCHEDULED",
1175
- updatedAt: "2026-06-07T07:52:54.418Z"
1348
+ updatedAt: "2026-06-24T01:20:06.394Z"
1176
1349
  },
1177
1350
  {
1178
1351
  id: "760449",
@@ -1193,7 +1366,7 @@ var schedule_2026_default = [
1193
1366
  flag: "\u{1F1EF}\u{1F1F5}"
1194
1367
  },
1195
1368
  status: "SCHEDULED",
1196
- updatedAt: "2026-06-07T07:52:54.418Z"
1369
+ updatedAt: "2026-06-24T01:20:06.394Z"
1197
1370
  },
1198
1371
  {
1199
1372
  id: "760453",
@@ -1214,7 +1387,7 @@ var schedule_2026_default = [
1214
1387
  flag: "\u{1F1F8}\u{1F1E6}"
1215
1388
  },
1216
1389
  status: "SCHEDULED",
1217
- updatedAt: "2026-06-07T07:52:54.418Z"
1390
+ updatedAt: "2026-06-24T01:20:06.394Z"
1218
1391
  },
1219
1392
  {
1220
1393
  id: "760451",
@@ -1235,7 +1408,7 @@ var schedule_2026_default = [
1235
1408
  flag: "\u{1F1EE}\u{1F1F7}"
1236
1409
  },
1237
1410
  status: "SCHEDULED",
1238
- updatedAt: "2026-06-07T07:52:54.418Z"
1411
+ updatedAt: "2026-06-24T01:20:06.394Z"
1239
1412
  },
1240
1413
  {
1241
1414
  id: "760450",
@@ -1256,7 +1429,7 @@ var schedule_2026_default = [
1256
1429
  flag: "\u{1F1E8}\u{1F1FB}"
1257
1430
  },
1258
1431
  status: "SCHEDULED",
1259
- updatedAt: "2026-06-07T07:52:54.418Z"
1432
+ updatedAt: "2026-06-24T01:20:06.394Z"
1260
1433
  },
1261
1434
  {
1262
1435
  id: "760452",
@@ -1277,7 +1450,7 @@ var schedule_2026_default = [
1277
1450
  flag: "\u{1F1EA}\u{1F1EC}"
1278
1451
  },
1279
1452
  status: "SCHEDULED",
1280
- updatedAt: "2026-06-07T07:52:54.418Z"
1453
+ updatedAt: "2026-06-24T01:20:06.394Z"
1281
1454
  },
1282
1455
  {
1283
1456
  id: "760456",
@@ -1298,7 +1471,7 @@ var schedule_2026_default = [
1298
1471
  flag: "\u{1F1E6}\u{1F1F9}"
1299
1472
  },
1300
1473
  status: "SCHEDULED",
1301
- updatedAt: "2026-06-07T07:52:54.418Z"
1474
+ updatedAt: "2026-06-24T01:20:06.394Z"
1302
1475
  },
1303
1476
  {
1304
1477
  id: "760457",
@@ -1319,7 +1492,7 @@ var schedule_2026_default = [
1319
1492
  flag: "\u{1F1EE}\u{1F1F6}"
1320
1493
  },
1321
1494
  status: "SCHEDULED",
1322
- updatedAt: "2026-06-07T07:52:54.418Z"
1495
+ updatedAt: "2026-06-24T01:20:06.394Z"
1323
1496
  },
1324
1497
  {
1325
1498
  id: "760454",
@@ -1340,7 +1513,7 @@ var schedule_2026_default = [
1340
1513
  flag: "\u{1F1F8}\u{1F1F3}"
1341
1514
  },
1342
1515
  status: "SCHEDULED",
1343
- updatedAt: "2026-06-07T07:52:54.418Z"
1516
+ updatedAt: "2026-06-24T01:20:06.394Z"
1344
1517
  },
1345
1518
  {
1346
1519
  id: "760455",
@@ -1361,7 +1534,7 @@ var schedule_2026_default = [
1361
1534
  flag: "\u{1F1E9}\u{1F1FF}"
1362
1535
  },
1363
1536
  status: "SCHEDULED",
1364
- updatedAt: "2026-06-07T07:52:54.418Z"
1537
+ updatedAt: "2026-06-24T01:20:06.394Z"
1365
1538
  },
1366
1539
  {
1367
1540
  id: "760461",
@@ -1382,7 +1555,7 @@ var schedule_2026_default = [
1382
1555
  flag: "\u{1F1FA}\u{1F1FF}"
1383
1556
  },
1384
1557
  status: "SCHEDULED",
1385
- updatedAt: "2026-06-07T07:52:54.418Z"
1558
+ updatedAt: "2026-06-24T01:20:06.394Z"
1386
1559
  },
1387
1560
  {
1388
1561
  id: "760458",
@@ -1403,7 +1576,7 @@ var schedule_2026_default = [
1403
1576
  flag: "\u{1F1EC}\u{1F1ED}"
1404
1577
  },
1405
1578
  status: "SCHEDULED",
1406
- updatedAt: "2026-06-07T07:52:54.418Z"
1579
+ updatedAt: "2026-06-24T01:20:06.394Z"
1407
1580
  },
1408
1581
  {
1409
1582
  id: "760460",
@@ -1424,7 +1597,7 @@ var schedule_2026_default = [
1424
1597
  flag: "\u{1F1ED}\u{1F1F7}"
1425
1598
  },
1426
1599
  status: "SCHEDULED",
1427
- updatedAt: "2026-06-07T07:52:54.419Z"
1600
+ updatedAt: "2026-06-24T01:20:06.394Z"
1428
1601
  },
1429
1602
  {
1430
1603
  id: "760459",
@@ -1445,7 +1618,7 @@ var schedule_2026_default = [
1445
1618
  flag: "\u{1F1E8}\u{1F1E9}"
1446
1619
  },
1447
1620
  status: "SCHEDULED",
1448
- updatedAt: "2026-06-07T07:52:54.419Z"
1621
+ updatedAt: "2026-06-24T01:20:06.394Z"
1449
1622
  },
1450
1623
  {
1451
1624
  id: "760462",
@@ -1466,7 +1639,7 @@ var schedule_2026_default = [
1466
1639
  flag: "\u{1F1F6}\u{1F1E6}"
1467
1640
  },
1468
1641
  status: "SCHEDULED",
1469
- updatedAt: "2026-06-07T07:52:54.419Z"
1642
+ updatedAt: "2026-06-24T01:20:06.394Z"
1470
1643
  },
1471
1644
  {
1472
1645
  id: "760463",
@@ -1487,7 +1660,7 @@ var schedule_2026_default = [
1487
1660
  flag: "\u{1F1E8}\u{1F1E6}"
1488
1661
  },
1489
1662
  status: "SCHEDULED",
1490
- updatedAt: "2026-06-07T07:52:54.419Z"
1663
+ updatedAt: "2026-06-24T01:20:06.394Z"
1491
1664
  },
1492
1665
  {
1493
1666
  id: "760464",
@@ -1508,7 +1681,7 @@ var schedule_2026_default = [
1508
1681
  flag: "\u{1F1ED}\u{1F1F9}"
1509
1682
  },
1510
1683
  status: "SCHEDULED",
1511
- updatedAt: "2026-06-07T07:52:54.419Z"
1684
+ updatedAt: "2026-06-24T01:20:06.394Z"
1512
1685
  },
1513
1686
  {
1514
1687
  id: "760465",
@@ -1529,7 +1702,7 @@ var schedule_2026_default = [
1529
1702
  flag: "\u{1F1E7}\u{1F1F7}"
1530
1703
  },
1531
1704
  status: "SCHEDULED",
1532
- updatedAt: "2026-06-07T07:52:54.419Z"
1705
+ updatedAt: "2026-06-24T01:20:06.394Z"
1533
1706
  },
1534
1707
  {
1535
1708
  id: "760467",
@@ -1550,7 +1723,7 @@ var schedule_2026_default = [
1550
1723
  flag: "\u{1F1F2}\u{1F1FD}"
1551
1724
  },
1552
1725
  status: "SCHEDULED",
1553
- updatedAt: "2026-06-07T07:52:54.419Z"
1726
+ updatedAt: "2026-06-24T01:20:06.394Z"
1554
1727
  },
1555
1728
  {
1556
1729
  id: "760466",
@@ -1571,7 +1744,7 @@ var schedule_2026_default = [
1571
1744
  flag: "\u{1F1F0}\u{1F1F7}"
1572
1745
  },
1573
1746
  status: "SCHEDULED",
1574
- updatedAt: "2026-06-07T07:52:54.419Z"
1747
+ updatedAt: "2026-06-24T01:20:06.394Z"
1575
1748
  },
1576
1749
  {
1577
1750
  id: "760473",
@@ -1592,7 +1765,7 @@ var schedule_2026_default = [
1592
1765
  flag: "\u{1F1E8}\u{1F1EE}"
1593
1766
  },
1594
1767
  status: "SCHEDULED",
1595
- updatedAt: "2026-06-07T07:52:54.511Z"
1768
+ updatedAt: "2026-06-24T01:20:06.523Z"
1596
1769
  },
1597
1770
  {
1598
1771
  id: "760468",
@@ -1613,7 +1786,7 @@ var schedule_2026_default = [
1613
1786
  flag: "\u{1F1E9}\u{1F1EA}"
1614
1787
  },
1615
1788
  status: "SCHEDULED",
1616
- updatedAt: "2026-06-07T07:52:54.511Z"
1789
+ updatedAt: "2026-06-24T01:20:06.523Z"
1617
1790
  },
1618
1791
  {
1619
1792
  id: "760471",
@@ -1634,7 +1807,7 @@ var schedule_2026_default = [
1634
1807
  flag: "\u{1F1F8}\u{1F1EA}"
1635
1808
  },
1636
1809
  status: "SCHEDULED",
1637
- updatedAt: "2026-06-07T07:52:54.511Z"
1810
+ updatedAt: "2026-06-24T01:20:06.523Z"
1638
1811
  },
1639
1812
  {
1640
1813
  id: "760472",
@@ -1655,7 +1828,7 @@ var schedule_2026_default = [
1655
1828
  flag: "\u{1F1F3}\u{1F1F1}"
1656
1829
  },
1657
1830
  status: "SCHEDULED",
1658
- updatedAt: "2026-06-07T07:52:54.511Z"
1831
+ updatedAt: "2026-06-24T01:20:06.523Z"
1659
1832
  },
1660
1833
  {
1661
1834
  id: "760469",
@@ -1676,7 +1849,7 @@ var schedule_2026_default = [
1676
1849
  flag: "\u{1F1E6}\u{1F1FA}"
1677
1850
  },
1678
1851
  status: "SCHEDULED",
1679
- updatedAt: "2026-06-07T07:52:54.511Z"
1852
+ updatedAt: "2026-06-24T01:20:06.523Z"
1680
1853
  },
1681
1854
  {
1682
1855
  id: "760470",
@@ -1697,7 +1870,7 @@ var schedule_2026_default = [
1697
1870
  flag: "\u{1F1FA}\u{1F1F8}"
1698
1871
  },
1699
1872
  status: "SCHEDULED",
1700
- updatedAt: "2026-06-07T07:52:54.511Z"
1873
+ updatedAt: "2026-06-24T01:20:06.523Z"
1701
1874
  },
1702
1875
  {
1703
1876
  id: "760475",
@@ -1718,7 +1891,7 @@ var schedule_2026_default = [
1718
1891
  flag: "\u{1F1EB}\u{1F1F7}"
1719
1892
  },
1720
1893
  status: "SCHEDULED",
1721
- updatedAt: "2026-06-07T07:52:54.511Z"
1894
+ updatedAt: "2026-06-24T01:20:06.523Z"
1722
1895
  },
1723
1896
  {
1724
1897
  id: "760474",
@@ -1739,7 +1912,7 @@ var schedule_2026_default = [
1739
1912
  flag: "\u{1F1EE}\u{1F1F6}"
1740
1913
  },
1741
1914
  status: "SCHEDULED",
1742
- updatedAt: "2026-06-07T07:52:54.511Z"
1915
+ updatedAt: "2026-06-24T01:20:06.523Z"
1743
1916
  },
1744
1917
  {
1745
1918
  id: "760478",
@@ -1760,7 +1933,7 @@ var schedule_2026_default = [
1760
1933
  flag: "\u{1F1F8}\u{1F1E6}"
1761
1934
  },
1762
1935
  status: "SCHEDULED",
1763
- updatedAt: "2026-06-07T07:52:54.511Z"
1936
+ updatedAt: "2026-06-24T01:20:06.523Z"
1764
1937
  },
1765
1938
  {
1766
1939
  id: "760479",
@@ -1781,7 +1954,7 @@ var schedule_2026_default = [
1781
1954
  flag: "\u{1F1EA}\u{1F1F8}"
1782
1955
  },
1783
1956
  status: "SCHEDULED",
1784
- updatedAt: "2026-06-07T07:52:54.511Z"
1957
+ updatedAt: "2026-06-24T01:20:06.523Z"
1785
1958
  },
1786
1959
  {
1787
1960
  id: "760476",
@@ -1802,7 +1975,7 @@ var schedule_2026_default = [
1802
1975
  flag: "\u{1F1EE}\u{1F1F7}"
1803
1976
  },
1804
1977
  status: "SCHEDULED",
1805
- updatedAt: "2026-06-07T07:52:54.511Z"
1978
+ updatedAt: "2026-06-24T01:20:06.523Z"
1806
1979
  },
1807
1980
  {
1808
1981
  id: "760477",
@@ -1823,7 +1996,7 @@ var schedule_2026_default = [
1823
1996
  flag: "\u{1F1E7}\u{1F1EA}"
1824
1997
  },
1825
1998
  status: "SCHEDULED",
1826
- updatedAt: "2026-06-07T07:52:54.511Z"
1999
+ updatedAt: "2026-06-24T01:20:06.523Z"
1827
2000
  },
1828
2001
  {
1829
2002
  id: "760480",
@@ -1844,7 +2017,7 @@ var schedule_2026_default = [
1844
2017
  flag: "\u{1F1EC}\u{1F1ED}"
1845
2018
  },
1846
2019
  status: "SCHEDULED",
1847
- updatedAt: "2026-06-07T07:52:54.512Z"
2020
+ updatedAt: "2026-06-24T01:20:06.523Z"
1848
2021
  },
1849
2022
  {
1850
2023
  id: "760485",
@@ -1865,7 +2038,7 @@ var schedule_2026_default = [
1865
2038
  flag: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}"
1866
2039
  },
1867
2040
  status: "SCHEDULED",
1868
- updatedAt: "2026-06-07T07:52:54.512Z"
2041
+ updatedAt: "2026-06-24T01:20:06.523Z"
1869
2042
  },
1870
2043
  {
1871
2044
  id: "760481",
@@ -1886,7 +2059,7 @@ var schedule_2026_default = [
1886
2059
  flag: "\u{1F1F5}\u{1F1F9}"
1887
2060
  },
1888
2061
  status: "SCHEDULED",
1889
- updatedAt: "2026-06-07T07:52:54.512Z"
2062
+ updatedAt: "2026-06-24T01:20:06.523Z"
1890
2063
  },
1891
2064
  {
1892
2065
  id: "760482",
@@ -1907,7 +2080,7 @@ var schedule_2026_default = [
1907
2080
  flag: "\u{1F1FA}\u{1F1FF}"
1908
2081
  },
1909
2082
  status: "SCHEDULED",
1910
- updatedAt: "2026-06-07T07:52:54.512Z"
2083
+ updatedAt: "2026-06-24T01:20:06.523Z"
1911
2084
  },
1912
2085
  {
1913
2086
  id: "760484",
@@ -1928,7 +2101,7 @@ var schedule_2026_default = [
1928
2101
  flag: "\u{1F1E6}\u{1F1F9}"
1929
2102
  },
1930
2103
  status: "SCHEDULED",
1931
- updatedAt: "2026-06-07T07:52:54.512Z"
2104
+ updatedAt: "2026-06-24T01:20:06.523Z"
1932
2105
  },
1933
2106
  {
1934
2107
  id: "760483",
@@ -1949,7 +2122,7 @@ var schedule_2026_default = [
1949
2122
  flag: "\u{1F1E6}\u{1F1F7}"
1950
2123
  },
1951
2124
  status: "SCHEDULED",
1952
- updatedAt: "2026-06-07T07:52:54.512Z"
2125
+ updatedAt: "2026-06-24T01:20:06.523Z"
1953
2126
  },
1954
2127
  {
1955
2128
  id: "760486",
@@ -1969,7 +2142,7 @@ var schedule_2026_default = [
1969
2142
  flag: "\u{1F3F3}\uFE0F"
1970
2143
  },
1971
2144
  status: "SCHEDULED",
1972
- updatedAt: "2026-06-07T07:52:54.540Z"
2145
+ updatedAt: "2026-06-24T01:20:06.529Z"
1973
2146
  },
1974
2147
  {
1975
2148
  id: "760487",
@@ -1989,7 +2162,7 @@ var schedule_2026_default = [
1989
2162
  flag: "\u{1F3F3}\uFE0F"
1990
2163
  },
1991
2164
  status: "SCHEDULED",
1992
- updatedAt: "2026-06-07T07:52:54.540Z"
2165
+ updatedAt: "2026-06-24T01:20:06.529Z"
1993
2166
  },
1994
2167
  {
1995
2168
  id: "760489",
@@ -1999,8 +2172,8 @@ var schedule_2026_default = [
1999
2172
  city: "Foxborough, Massachusetts",
2000
2173
  country: "USA",
2001
2174
  home: {
2002
- code: "1E",
2003
- name: "Group E Winner",
2175
+ code: "TBD",
2176
+ name: "Germany",
2004
2177
  flag: "\u{1F3F3}\uFE0F"
2005
2178
  },
2006
2179
  away: {
@@ -2009,7 +2182,7 @@ var schedule_2026_default = [
2009
2182
  flag: "\u{1F3F3}\uFE0F"
2010
2183
  },
2011
2184
  status: "SCHEDULED",
2012
- updatedAt: "2026-06-07T07:52:54.540Z"
2185
+ updatedAt: "2026-06-24T01:20:06.529Z"
2013
2186
  },
2014
2187
  {
2015
2188
  id: "760488",
@@ -2029,7 +2202,7 @@ var schedule_2026_default = [
2029
2202
  flag: "\u{1F3F3}\uFE0F"
2030
2203
  },
2031
2204
  status: "SCHEDULED",
2032
- updatedAt: "2026-06-07T07:52:54.540Z"
2205
+ updatedAt: "2026-06-24T01:20:06.529Z"
2033
2206
  },
2034
2207
  {
2035
2208
  id: "760490",
@@ -2049,7 +2222,7 @@ var schedule_2026_default = [
2049
2222
  flag: "\u{1F3F3}\uFE0F"
2050
2223
  },
2051
2224
  status: "SCHEDULED",
2052
- updatedAt: "2026-06-07T07:52:54.540Z"
2225
+ updatedAt: "2026-06-24T01:20:06.529Z"
2053
2226
  },
2054
2227
  {
2055
2228
  id: "760492",
@@ -2069,7 +2242,7 @@ var schedule_2026_default = [
2069
2242
  flag: "\u{1F3F3}\uFE0F"
2070
2243
  },
2071
2244
  status: "SCHEDULED",
2072
- updatedAt: "2026-06-07T07:52:54.541Z"
2245
+ updatedAt: "2026-06-24T01:20:06.529Z"
2073
2246
  },
2074
2247
  {
2075
2248
  id: "760491",
@@ -2079,8 +2252,8 @@ var schedule_2026_default = [
2079
2252
  city: "Mexico City",
2080
2253
  country: "Mexico",
2081
2254
  home: {
2082
- code: "1A",
2083
- name: "Group A Winner",
2255
+ code: "TBD",
2256
+ name: "Mexico",
2084
2257
  flag: "\u{1F3F3}\uFE0F"
2085
2258
  },
2086
2259
  away: {
@@ -2089,7 +2262,7 @@ var schedule_2026_default = [
2089
2262
  flag: "\u{1F3F3}\uFE0F"
2090
2263
  },
2091
2264
  status: "SCHEDULED",
2092
- updatedAt: "2026-06-07T07:52:54.541Z"
2265
+ updatedAt: "2026-06-24T01:20:06.529Z"
2093
2266
  },
2094
2267
  {
2095
2268
  id: "760495",
@@ -2109,7 +2282,7 @@ var schedule_2026_default = [
2109
2282
  flag: "\u{1F3F3}\uFE0F"
2110
2283
  },
2111
2284
  status: "SCHEDULED",
2112
- updatedAt: "2026-06-07T07:52:54.541Z"
2285
+ updatedAt: "2026-06-24T01:20:06.529Z"
2113
2286
  },
2114
2287
  {
2115
2288
  id: "760493",
@@ -2129,7 +2302,7 @@ var schedule_2026_default = [
2129
2302
  flag: "\u{1F3F3}\uFE0F"
2130
2303
  },
2131
2304
  status: "SCHEDULED",
2132
- updatedAt: "2026-06-07T07:52:54.541Z"
2305
+ updatedAt: "2026-06-24T01:20:06.529Z"
2133
2306
  },
2134
2307
  {
2135
2308
  id: "760494",
@@ -2139,8 +2312,8 @@ var schedule_2026_default = [
2139
2312
  city: "Santa Clara, California",
2140
2313
  country: "USA",
2141
2314
  home: {
2142
- code: "1D",
2143
- name: "Group D Winner",
2315
+ code: "TBD",
2316
+ name: "United States",
2144
2317
  flag: "\u{1F3F3}\uFE0F"
2145
2318
  },
2146
2319
  away: {
@@ -2149,7 +2322,7 @@ var schedule_2026_default = [
2149
2322
  flag: "\u{1F3F3}\uFE0F"
2150
2323
  },
2151
2324
  status: "SCHEDULED",
2152
- updatedAt: "2026-06-07T07:52:54.541Z"
2325
+ updatedAt: "2026-06-24T01:20:06.529Z"
2153
2326
  },
2154
2327
  {
2155
2328
  id: "760497",
@@ -2169,7 +2342,7 @@ var schedule_2026_default = [
2169
2342
  flag: "\u{1F3F3}\uFE0F"
2170
2343
  },
2171
2344
  status: "SCHEDULED",
2172
- updatedAt: "2026-06-07T07:52:54.616Z"
2345
+ updatedAt: "2026-06-24T01:20:06.593Z"
2173
2346
  },
2174
2347
  {
2175
2348
  id: "760496",
@@ -2189,7 +2362,7 @@ var schedule_2026_default = [
2189
2362
  flag: "\u{1F3F3}\uFE0F"
2190
2363
  },
2191
2364
  status: "SCHEDULED",
2192
- updatedAt: "2026-06-07T07:52:54.616Z"
2365
+ updatedAt: "2026-06-24T01:20:06.593Z"
2193
2366
  },
2194
2367
  {
2195
2368
  id: "760498",
@@ -2209,7 +2382,7 @@ var schedule_2026_default = [
2209
2382
  flag: "\u{1F3F3}\uFE0F"
2210
2383
  },
2211
2384
  status: "SCHEDULED",
2212
- updatedAt: "2026-06-07T07:52:54.616Z"
2385
+ updatedAt: "2026-06-24T01:20:06.593Z"
2213
2386
  },
2214
2387
  {
2215
2388
  id: "760499",
@@ -2229,7 +2402,7 @@ var schedule_2026_default = [
2229
2402
  flag: "\u{1F3F3}\uFE0F"
2230
2403
  },
2231
2404
  status: "SCHEDULED",
2232
- updatedAt: "2026-06-07T07:52:54.616Z"
2405
+ updatedAt: "2026-06-24T01:20:06.593Z"
2233
2406
  },
2234
2407
  {
2235
2408
  id: "760500",
@@ -2239,8 +2412,8 @@ var schedule_2026_default = [
2239
2412
  city: "Miami Gardens, Florida",
2240
2413
  country: "USA",
2241
2414
  home: {
2242
- code: "1J",
2243
- name: "Group J Winner",
2415
+ code: "TBD",
2416
+ name: "Argentina",
2244
2417
  flag: "\u{1F3F3}\uFE0F"
2245
2418
  },
2246
2419
  away: {
@@ -2249,7 +2422,7 @@ var schedule_2026_default = [
2249
2422
  flag: "\u{1F3F3}\uFE0F"
2250
2423
  },
2251
2424
  status: "SCHEDULED",
2252
- updatedAt: "2026-06-07T07:52:54.616Z"
2425
+ updatedAt: "2026-06-24T01:20:06.593Z"
2253
2426
  },
2254
2427
  {
2255
2428
  id: "760501",
@@ -2269,7 +2442,7 @@ var schedule_2026_default = [
2269
2442
  flag: "\u{1F3F3}\uFE0F"
2270
2443
  },
2271
2444
  status: "SCHEDULED",
2272
- updatedAt: "2026-06-07T07:52:54.616Z"
2445
+ updatedAt: "2026-06-24T01:20:06.593Z"
2273
2446
  },
2274
2447
  {
2275
2448
  id: "760502",
@@ -2289,7 +2462,7 @@ var schedule_2026_default = [
2289
2462
  flag: "\u{1F3F3}\uFE0F"
2290
2463
  },
2291
2464
  status: "SCHEDULED",
2292
- updatedAt: "2026-06-07T07:52:54.616Z"
2465
+ updatedAt: "2026-06-24T01:20:06.593Z"
2293
2466
  },
2294
2467
  {
2295
2468
  id: "760503",
@@ -2309,7 +2482,7 @@ var schedule_2026_default = [
2309
2482
  flag: "\u{1F3F3}\uFE0F"
2310
2483
  },
2311
2484
  status: "SCHEDULED",
2312
- updatedAt: "2026-06-07T07:52:54.616Z"
2485
+ updatedAt: "2026-06-24T01:20:06.593Z"
2313
2486
  },
2314
2487
  {
2315
2488
  id: "760504",
@@ -2329,7 +2502,7 @@ var schedule_2026_default = [
2329
2502
  flag: "\u{1F3F3}\uFE0F"
2330
2503
  },
2331
2504
  status: "SCHEDULED",
2332
- updatedAt: "2026-06-07T07:52:54.616Z"
2505
+ updatedAt: "2026-06-24T01:20:06.593Z"
2333
2506
  },
2334
2507
  {
2335
2508
  id: "760505",
@@ -2349,7 +2522,7 @@ var schedule_2026_default = [
2349
2522
  flag: "\u{1F3F3}\uFE0F"
2350
2523
  },
2351
2524
  status: "SCHEDULED",
2352
- updatedAt: "2026-06-07T07:52:54.616Z"
2525
+ updatedAt: "2026-06-24T01:20:06.593Z"
2353
2526
  },
2354
2527
  {
2355
2528
  id: "760506",
@@ -2369,7 +2542,7 @@ var schedule_2026_default = [
2369
2542
  flag: "\u{1F3F3}\uFE0F"
2370
2543
  },
2371
2544
  status: "SCHEDULED",
2372
- updatedAt: "2026-06-07T07:52:54.616Z"
2545
+ updatedAt: "2026-06-24T01:20:06.593Z"
2373
2546
  },
2374
2547
  {
2375
2548
  id: "760507",
@@ -2389,7 +2562,7 @@ var schedule_2026_default = [
2389
2562
  flag: "\u{1F3F3}\uFE0F"
2390
2563
  },
2391
2564
  status: "SCHEDULED",
2392
- updatedAt: "2026-06-07T07:52:54.616Z"
2565
+ updatedAt: "2026-06-24T01:20:06.593Z"
2393
2566
  },
2394
2567
  {
2395
2568
  id: "760509",
@@ -2409,7 +2582,7 @@ var schedule_2026_default = [
2409
2582
  flag: "\u{1F3F3}\uFE0F"
2410
2583
  },
2411
2584
  status: "SCHEDULED",
2412
- updatedAt: "2026-06-07T07:52:54.616Z"
2585
+ updatedAt: "2026-06-24T01:20:06.593Z"
2413
2586
  },
2414
2587
  {
2415
2588
  id: "760508",
@@ -2429,7 +2602,7 @@ var schedule_2026_default = [
2429
2602
  flag: "\u{1F3F3}\uFE0F"
2430
2603
  },
2431
2604
  status: "SCHEDULED",
2432
- updatedAt: "2026-06-07T07:52:54.616Z"
2605
+ updatedAt: "2026-06-24T01:20:06.593Z"
2433
2606
  },
2434
2607
  {
2435
2608
  id: "760510",
@@ -2439,17 +2612,17 @@ var schedule_2026_default = [
2439
2612
  city: "Foxborough, Massachusetts",
2440
2613
  country: "USA",
2441
2614
  home: {
2442
- code: "RD16 W1",
2615
+ code: "RD32",
2443
2616
  name: "Round of 16 1 Winner",
2444
2617
  flag: "\u{1F3F3}\uFE0F"
2445
2618
  },
2446
2619
  away: {
2447
- code: "RD16 W2",
2620
+ code: "RD32",
2448
2621
  name: "Round of 16 2 Winner",
2449
2622
  flag: "\u{1F3F3}\uFE0F"
2450
2623
  },
2451
2624
  status: "SCHEDULED",
2452
- updatedAt: "2026-06-07T07:52:54.684Z"
2625
+ updatedAt: "2026-06-24T01:20:06.650Z"
2453
2626
  },
2454
2627
  {
2455
2628
  id: "760511",
@@ -2459,17 +2632,17 @@ var schedule_2026_default = [
2459
2632
  city: "Inglewood, California",
2460
2633
  country: "USA",
2461
2634
  home: {
2462
- code: "RD16 W5",
2635
+ code: "RD32",
2463
2636
  name: "Round of 16 5 Winner",
2464
2637
  flag: "\u{1F3F3}\uFE0F"
2465
2638
  },
2466
2639
  away: {
2467
- code: "RD16 W6",
2640
+ code: "RD32",
2468
2641
  name: "Round of 16 6 Winner",
2469
2642
  flag: "\u{1F3F3}\uFE0F"
2470
2643
  },
2471
2644
  status: "SCHEDULED",
2472
- updatedAt: "2026-06-07T07:52:54.684Z"
2645
+ updatedAt: "2026-06-24T01:20:06.650Z"
2473
2646
  },
2474
2647
  {
2475
2648
  id: "760512",
@@ -2479,17 +2652,17 @@ var schedule_2026_default = [
2479
2652
  city: "Miami Gardens, Florida",
2480
2653
  country: "USA",
2481
2654
  home: {
2482
- code: "RD16 W3",
2655
+ code: "RD32",
2483
2656
  name: "Round of 16 3 Winner",
2484
2657
  flag: "\u{1F3F3}\uFE0F"
2485
2658
  },
2486
2659
  away: {
2487
- code: "RD16 W4",
2660
+ code: "RD32",
2488
2661
  name: "Round of 16 4 Winner",
2489
2662
  flag: "\u{1F3F3}\uFE0F"
2490
2663
  },
2491
2664
  status: "SCHEDULED",
2492
- updatedAt: "2026-06-07T07:52:54.684Z"
2665
+ updatedAt: "2026-06-24T01:20:06.650Z"
2493
2666
  },
2494
2667
  {
2495
2668
  id: "760513",
@@ -2499,17 +2672,17 @@ var schedule_2026_default = [
2499
2672
  city: "Kansas City, Missouri",
2500
2673
  country: "USA",
2501
2674
  home: {
2502
- code: "RD16 W7",
2675
+ code: "RD32",
2503
2676
  name: "Round of 16 7 Winner",
2504
2677
  flag: "\u{1F3F3}\uFE0F"
2505
2678
  },
2506
2679
  away: {
2507
- code: "RD16 W8",
2680
+ code: "RD32",
2508
2681
  name: "Round of 16 8 Winner",
2509
2682
  flag: "\u{1F3F3}\uFE0F"
2510
2683
  },
2511
2684
  status: "SCHEDULED",
2512
- updatedAt: "2026-06-07T07:52:54.684Z"
2685
+ updatedAt: "2026-06-24T01:20:06.650Z"
2513
2686
  },
2514
2687
  {
2515
2688
  id: "760514",
@@ -2519,17 +2692,17 @@ var schedule_2026_default = [
2519
2692
  city: "Arlington, Texas",
2520
2693
  country: "USA",
2521
2694
  home: {
2522
- code: "QFW1",
2695
+ code: "RD32",
2523
2696
  name: "Quarterfinal 1 Winner",
2524
2697
  flag: "\u{1F3F3}\uFE0F"
2525
2698
  },
2526
2699
  away: {
2527
- code: "QFW2",
2700
+ code: "RD32",
2528
2701
  name: "Quarterfinal 2 Winner",
2529
2702
  flag: "\u{1F3F3}\uFE0F"
2530
2703
  },
2531
2704
  status: "SCHEDULED",
2532
- updatedAt: "2026-06-07T07:52:54.684Z"
2705
+ updatedAt: "2026-06-24T01:20:06.650Z"
2533
2706
  },
2534
2707
  {
2535
2708
  id: "760515",
@@ -2539,17 +2712,17 @@ var schedule_2026_default = [
2539
2712
  city: "Atlanta, Georgia",
2540
2713
  country: "USA",
2541
2714
  home: {
2542
- code: "QFW3",
2715
+ code: "RD32",
2543
2716
  name: "Quarterfinal 3 Winner",
2544
2717
  flag: "\u{1F3F3}\uFE0F"
2545
2718
  },
2546
2719
  away: {
2547
- code: "QW4",
2720
+ code: "RD32",
2548
2721
  name: "Quarterfinal 4 Winner",
2549
2722
  flag: "\u{1F3F3}\uFE0F"
2550
2723
  },
2551
2724
  status: "SCHEDULED",
2552
- updatedAt: "2026-06-07T07:52:54.684Z"
2725
+ updatedAt: "2026-06-24T01:20:06.650Z"
2553
2726
  },
2554
2727
  {
2555
2728
  id: "760516",
@@ -2559,17 +2732,17 @@ var schedule_2026_default = [
2559
2732
  city: "Miami Gardens, Florida",
2560
2733
  country: "USA",
2561
2734
  home: {
2562
- code: "SF L1",
2735
+ code: "RD32",
2563
2736
  name: "Semifinal 1 Loser",
2564
2737
  flag: "\u{1F3F3}\uFE0F"
2565
2738
  },
2566
2739
  away: {
2567
- code: "SF L2",
2740
+ code: "RD32",
2568
2741
  name: "Semifinal 2 Loser",
2569
2742
  flag: "\u{1F3F3}\uFE0F"
2570
2743
  },
2571
2744
  status: "SCHEDULED",
2572
- updatedAt: "2026-06-07T07:52:54.772Z"
2745
+ updatedAt: "2026-06-24T01:20:06.749Z"
2573
2746
  },
2574
2747
  {
2575
2748
  id: "760517",
@@ -2579,17 +2752,17 @@ var schedule_2026_default = [
2579
2752
  city: "East Rutherford, New Jersey",
2580
2753
  country: "USA",
2581
2754
  home: {
2582
- code: "SFW1",
2755
+ code: "RD32",
2583
2756
  name: "Semifinal 1 Winner",
2584
2757
  flag: "\u{1F3F3}\uFE0F"
2585
2758
  },
2586
2759
  away: {
2587
- code: "SFW2",
2760
+ code: "RD32",
2588
2761
  name: "Semifinal 2 Winner",
2589
2762
  flag: "\u{1F3F3}\uFE0F"
2590
2763
  },
2591
2764
  status: "SCHEDULED",
2592
- updatedAt: "2026-06-07T07:52:54.772Z"
2765
+ updatedAt: "2026-06-24T01:20:06.749Z"
2593
2766
  }
2594
2767
  ];
2595
2768
  var SCHEDULE = schedule_2026_default;
@@ -2633,46 +2806,13 @@ function blankRow(team) {
2633
2806
  points: 0
2634
2807
  };
2635
2808
  }
2636
- function computeStandings(matches) {
2637
- const rows = /* @__PURE__ */ new Map();
2638
- const ensure = (t) => {
2639
- let r = rows.get(t.code);
2640
- if (!r) {
2641
- r = blankRow(t);
2642
- rows.set(t.code, r);
2643
- }
2644
- return r;
2645
- };
2809
+ function rosterAtZero(matches) {
2810
+ const teams = /* @__PURE__ */ new Map();
2646
2811
  for (const m of matches) {
2647
- const home = ensure(m.home);
2648
- const away = ensure(m.away);
2649
- if (!isFinished(m.status) || !m.score) continue;
2650
- const { home: hg, away: ag } = m.score;
2651
- home.played++;
2652
- away.played++;
2653
- home.goalsFor += hg;
2654
- home.goalsAgainst += ag;
2655
- away.goalsFor += ag;
2656
- away.goalsAgainst += hg;
2657
- if (hg > ag) {
2658
- home.won++;
2659
- away.lost++;
2660
- home.points += 3;
2661
- } else if (hg < ag) {
2662
- away.won++;
2663
- home.lost++;
2664
- away.points += 3;
2665
- } else {
2666
- home.drawn++;
2667
- away.drawn++;
2668
- home.points++;
2669
- away.points++;
2670
- }
2812
+ teams.set(m.home.code, m.home);
2813
+ teams.set(m.away.code, m.away);
2671
2814
  }
2672
- for (const r of rows.values()) r.goalDiff = r.goalsFor - r.goalsAgainst;
2673
- return [...rows.values()].sort(
2674
- (a, b) => b.points - a.points || b.goalDiff - a.goalDiff || b.goalsFor - a.goalsFor || a.team.name.localeCompare(b.team.name)
2675
- );
2815
+ return [...teams.values()].sort((a, b) => a.name.localeCompare(b.name)).map(blankRow);
2676
2816
  }
2677
2817
  var ESPN_SOCCER = "https://site.api.espn.com/apis/site/v2/sports/soccer";
2678
2818
  var DEFAULT_COMPETITION = "fifa.world";
@@ -2720,10 +2860,10 @@ function toInt(s) {
2720
2860
  const n = parseInt(s, 10);
2721
2861
  return Number.isFinite(n) ? n : void 0;
2722
2862
  }
2723
- function toTeam(t) {
2724
- const name = t?.displayName ?? t?.name ?? t?.location ?? t?.shortDisplayName ?? "TBD";
2725
- const code = (t?.abbreviation ?? name.slice(0, 3)).toUpperCase();
2726
- 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) };
2727
2867
  }
2728
2868
  function mapEspnEvent(ev, ctx = {}) {
2729
2869
  const comp = ev.competitions?.[0];
@@ -2741,6 +2881,11 @@ function mapEspnEvent(ev, ctx = {}) {
2741
2881
  const hs = toInt(homeC?.score);
2742
2882
  const as = toInt(awayC?.score);
2743
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
+ }
2744
2889
  return {
2745
2890
  id: ev.id,
2746
2891
  stage,
@@ -2754,6 +2899,7 @@ function mapEspnEvent(ev, ctx = {}) {
2754
2899
  score: hasScore ? { home: hs, away: as } : void 0,
2755
2900
  minute: parseMinute(ev.status ?? comp?.status),
2756
2901
  status,
2902
+ winnerCode,
2757
2903
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
2758
2904
  };
2759
2905
  }
@@ -2845,7 +2991,7 @@ var EspnAdapter = class {
2845
2991
  const map = {};
2846
2992
  try {
2847
2993
  const tables = parseStandings(await this.get(this.standingsUrl()));
2848
- 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;
2849
2995
  } catch {
2850
2996
  }
2851
2997
  this.groupMap = map;
@@ -2881,6 +3027,688 @@ var EspnAdapter = class {
2881
3027
  }
2882
3028
  }
2883
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
+ }
2884
3712
  function resolveCompetition(explicit) {
2885
3713
  if (explicit) return explicit;
2886
3714
  if (typeof process !== "undefined" && process.env?.CLAUDINHO_COMPETITION) {
@@ -2921,7 +3749,7 @@ async function getStandings(adapter, group) {
2921
3749
  if (adapter.fetchStandings) {
2922
3750
  try {
2923
3751
  const all = await adapter.fetchStandings();
2924
- const tables2 = (want ? all.filter((t) => t.group === want) : all).sort(
3752
+ const tables2 = (want ? all.filter((t2) => t2.group === want) : all).sort(
2925
3753
  (a, b) => a.group.localeCompare(b.group)
2926
3754
  );
2927
3755
  return { tables: tables2, degraded: false, source: adapter.name };
@@ -2929,9 +3757,45 @@ async function getStandings(adapter, group) {
2929
3757
  }
2930
3758
  }
2931
3759
  const letters = want ? [want] : groups();
2932
- const tables = letters.map((g) => ({ group: g, rows: computeStandings(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);
2933
3761
  return { tables, degraded: true };
2934
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
+ }
2935
3799
  function shiftUtcDate(dateISO, days) {
2936
3800
  const [y, m, d] = dateISO.slice(0, 10).split("-").map(Number);
2937
3801
  return new Date(Date.UTC(y ?? 1970, (m ?? 1) - 1, (d ?? 1) + days)).toISOString().slice(0, 10);
@@ -3085,9 +3949,9 @@ function outcomeLabel(o, match) {
3085
3949
  return o.label;
3086
3950
  }
3087
3951
  function utcHhmm(iso) {
3088
- const t = Date.parse(iso);
3089
- if (!Number.isFinite(t)) return "";
3090
- 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`;
3091
3955
  }
3092
3956
  function marketFavoriteText(signal, match) {
3093
3957
  const fav = signal.favorite;
@@ -3450,6 +4314,7 @@ function socialCard(m, input) {
3450
4314
  }
3451
4315
  const loc = matchLocation(m);
3452
4316
  if (loc) lines.push(loc);
4317
+ if (m.stage !== "GROUP") lines.push(stageLabel(m));
3453
4318
  return lines;
3454
4319
  }
3455
4320
  function formatShareSnippet(input, options = {}) {
@@ -3524,6 +4389,78 @@ function formatShareTable(input, options = {}) {
3524
4389
  );
3525
4390
  return blocks.join("\n\n");
3526
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
+ }
3527
4464
 
3528
4465
  // src/format.ts
3529
4466
  var STATUS_LABEL = {
@@ -3534,29 +4471,9 @@ var STATUS_LABEL = {
3534
4471
  POSTPONED: "postponed",
3535
4472
  CANCELLED: "cancelled"
3536
4473
  };
3537
- function stageName(stage) {
3538
- switch (stage) {
3539
- case "GROUP":
3540
- return "Group stage";
3541
- case "R32":
3542
- return "Round of 32";
3543
- case "R16":
3544
- return "Round of 16";
3545
- case "QF":
3546
- return "Quarter-final";
3547
- case "SF":
3548
- return "Semi-final";
3549
- case "3P":
3550
- return "Third-place play-off";
3551
- case "F":
3552
- return "Final";
3553
- case "FRIENDLY":
3554
- return "Friendly";
3555
- }
3556
- }
3557
4474
  function matchLine(m, opts = {}) {
3558
4475
  const head = `${m.home.flag} ${m.home.name} ${scoreline(m)} ${m.away.name} ${m.away.flag}`;
3559
- const stage = m.group ? `Group ${m.group}` : stageName(m.stage);
4476
+ const stage = stageLabel(m);
3560
4477
  let tail;
3561
4478
  if (m.status === "SCHEDULED") {
3562
4479
  tail = `${formatKickoff(m.kickoff, opts)} (in ${countdown(m.kickoff)})`;
@@ -3689,9 +4606,9 @@ function fmtOpts(args) {
3689
4606
  flavor: asFlavorLevel(args.flavor ?? process.env.CLAUDINHO_FLAVOR)
3690
4607
  };
3691
4608
  }
3692
- function withDisclaimer(text, source) {
4609
+ function withDisclaimer(text, source, lang) {
3693
4610
  const live = source ? `
3694
- Live data: ${liveSourceLabel(source)}` : "";
4611
+ ${t(lang, "live.data", { source: liveSourceLabel(source) })}` : "";
3695
4612
  return `${text}${live}
3696
4613
 
3697
4614
  ${DISCLAIMER}`;
@@ -3766,13 +4683,45 @@ async function toolGetStandings(args) {
3766
4683
  data: { degraded, source: source ?? null, tables: args.group ? null : [] }
3767
4684
  };
3768
4685
  }
3769
- 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");
3770
4687
  if (degraded) text += "\n\n(Live standings unavailable \u2014 showing the group roster.)";
3771
4688
  return {
3772
4689
  text: withDisclaimer(text, source),
3773
4690
  data: { degraded, source: source ?? null, tables: args.group ? shaped[0] ?? null : shaped }
3774
4691
  };
3775
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
+ }
3776
4725
  async function standingsResourceText(group, adapter) {
3777
4726
  const g = group.toUpperCase();
3778
4727
  const { tables, degraded, source } = await getStandings(adapter, g);
@@ -3950,6 +4899,45 @@ async function toolGetShareSnippet(args) {
3950
4899
  }
3951
4900
  };
3952
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
+ }
3953
4941
  if (args.matchId) {
3954
4942
  const { match, degraded: degraded2, source: source2 } = await getMatchById(resolveAdapter(args), args.matchId);
3955
4943
  const matches = match ? [match] : [];
@@ -4017,11 +5005,11 @@ async function toolGetShareSnippet(args) {
4017
5005
 
4018
5006
  // src/server.ts
4019
5007
  var SERVER_NAME = "claudinho";
4020
- var SERVER_VERSION = "0.6.2";
5008
+ var SERVER_VERSION = "0.8.0";
4021
5009
  var VOICE = asFlavorLevel(process.env.CLAUDINHO_FLAVOR) === "off" ? "" : `
4022
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.`;
4023
5011
  var INSTRUCTIONS = `Claudinho serves live scores, fixtures, and group standings for the 2026 men's football tournament.
4024
- 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.
4025
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.
4026
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}
4027
5015
  ${DISCLAIMER}`;
@@ -4094,6 +5082,19 @@ function buildServer() {
4094
5082
  },
4095
5083
  async (args) => toContent(await toolGetStandings(args))
4096
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
+ );
4097
5098
  server.registerTool(
4098
5099
  "get_next_fixture",
4099
5100
  {
@@ -4127,11 +5128,13 @@ function buildServer() {
4127
5128
  "get_share_snippet",
4128
5129
  {
4129
5130
  title: "Shareable match snippet",
4130
- 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.`,
4131
5132
  inputSchema: {
4132
5133
  matchId: z.string().optional().describe("Match id (most specific)"),
4133
5134
  team: teamArg.optional().describe("3-letter team code for that team's next fixture, e.g. MEX"),
4134
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"),
4135
5138
  date: dateArg.optional().describe("Date as YYYY-MM-DD (default: today)"),
4136
5139
  live: z.boolean().optional().describe("Snapshot of matches in play right now"),
4137
5140
  style: z.enum(["social", "compact"]).optional().describe("social (default, full card) or compact (one line per match)"),