@idosgames/mcp 0.1.44 → 0.1.46

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 (43) hide show
  1. package/dist/cli.js +1597 -1542
  2. package/package.json +1 -1
  3. package/registry/host.json +3 -3
  4. package/registry/index.json +172 -125
  5. package/registry/modules/ai.json +5 -5
  6. package/registry/modules/board-game.json +6 -6
  7. package/registry/modules/boosts.json +5 -5
  8. package/registry/modules/character.json +9 -9
  9. package/registry/modules/chat.json +3 -3
  10. package/registry/modules/collections.json +5 -5
  11. package/registry/modules/coop-events.json +6 -6
  12. package/registry/modules/craft.json +5 -5
  13. package/registry/modules/deals.json +6 -6
  14. package/registry/modules/events.json +3 -3
  15. package/registry/modules/friends.json +3 -3
  16. package/registry/modules/hero-run.json +15 -234
  17. package/registry/modules/idle-rpg.json +8 -8
  18. package/registry/modules/inventory.json +3 -3
  19. package/registry/modules/invite.json +3 -3
  20. package/registry/modules/kit-game.json +171 -0
  21. package/registry/modules/leaderboard.json +3 -3
  22. package/registry/modules/lootboxes.json +5 -5
  23. package/registry/modules/mailbox.json +3 -3
  24. package/registry/modules/marketplace.json +3 -3
  25. package/registry/modules/mini-game.json +3 -3
  26. package/registry/modules/multiplayer.json +3 -3
  27. package/registry/modules/premium.json +5 -5
  28. package/registry/modules/profile.json +3 -3
  29. package/registry/modules/pvp.json +3 -3
  30. package/registry/modules/quests.json +3 -3
  31. package/registry/modules/rewards.json +3 -3
  32. package/registry/modules/season.json +3 -3
  33. package/registry/modules/store.json +6 -6
  34. package/registry/modules/tutorials.json +3 -3
  35. package/registry/modules/video-studio.json +9 -9
  36. package/registry/modules/voxelcraft.json +6 -6
  37. package/registry/modules/workshop.json +6 -6
  38. package/registry/skills/currency-system.json +1 -1
  39. package/registry/skills/idosgames-compose-modules.json +1 -1
  40. package/registry/skills/idosgames-getting-started.json +1 -1
  41. package/registry/skills/idosgames-ui-kit.json +1 -1
  42. package/registry/skills/store-system.json +1 -1
  43. package/registry/video.json +1 -1
@@ -1,13 +1,14 @@
1
1
  {
2
- "generatedFromCommit": "fc2f73f21b90961a29f29103b255f5bb4574cefd",
2
+ "generatedFromCommit": "61c02d5bb6336798048e2e560ab17b480ea9e19b",
3
3
  "runtimePackages": {
4
- "@idosgames/core": "0.25.0",
5
- "@idosgames/wallet": "0.6.8",
6
- "@idosgames/module-sdk": "0.13.2",
7
- "@idosgames/react": "0.6.3",
8
- "@idosgames/app-shell": "0.16.4",
9
- "@idosgames/characters": "0.1.2",
10
- "@idosgames/timeline": "0.1.0"
4
+ "@idosgames/core": "0.26.1",
5
+ "@idosgames/wallet": "0.6.10",
6
+ "@idosgames/module-sdk": "0.13.3",
7
+ "@idosgames/react": "0.7.1",
8
+ "@idosgames/app-shell": "0.16.6",
9
+ "@idosgames/characters": "0.1.3",
10
+ "@idosgames/timeline": "0.1.0",
11
+ "@idosgames/game-kit": "0.1.0"
11
12
  },
12
13
  "host": {
13
14
  "id": "base",
@@ -47,13 +48,13 @@
47
48
  },
48
49
  "version": "0.1.4",
49
50
  "dependencies": {
50
- "@idosgames/core": "0.25.0",
51
- "@idosgames/module-sdk": "0.13.2",
52
- "@idosgames/react": "0.6.3",
51
+ "@idosgames/core": "0.26.1",
52
+ "@idosgames/module-sdk": "0.13.3",
53
+ "@idosgames/react": "0.7.1",
53
54
  "react": "19.2.7"
54
55
  },
55
56
  "fileCount": 7,
56
- "contentHash": "3f358dda5a60bb20acdc56cfe00c8dff472d4a333a3d23d9196abd4663ab366d"
57
+ "contentHash": "e702aa4d3c44024f0c964d4b3c791599a8724bece9020895df2de3286ad204ff"
57
58
  },
58
59
  {
59
60
  "id": "premium",
@@ -84,13 +85,13 @@
84
85
  },
85
86
  "version": "0.1.3",
86
87
  "dependencies": {
87
- "@idosgames/core": "0.25.0",
88
- "@idosgames/module-sdk": "0.13.2",
89
- "@idosgames/react": "0.6.3",
88
+ "@idosgames/core": "0.26.1",
89
+ "@idosgames/module-sdk": "0.13.3",
90
+ "@idosgames/react": "0.7.1",
90
91
  "react": "19.2.7"
91
92
  },
92
93
  "fileCount": 6,
93
- "contentHash": "0f604f01a3e78b950a1dd799e80391a40da4321bcc334d24ba5a77094f22ca6c"
94
+ "contentHash": "d835f2923e281c625bd1888202c6e2df9005bd05ba54ed5793fbac2e03aab4dc"
94
95
  },
95
96
  {
96
97
  "id": "character",
@@ -143,13 +144,13 @@
143
144
  ]
144
145
  },
145
146
  "dependencies": {
146
- "@idosgames/core": "0.25.0",
147
- "@idosgames/module-sdk": "0.13.2",
148
- "@idosgames/react": "0.6.3",
147
+ "@idosgames/core": "0.26.1",
148
+ "@idosgames/module-sdk": "0.13.3",
149
+ "@idosgames/react": "0.7.1",
149
150
  "react": "19.2.7"
150
151
  },
151
152
  "fileCount": 21,
152
- "contentHash": "beefddeae9df41abd82e29c3e0a3ab904699c11712eb43c122f01fe77e12fecf"
153
+ "contentHash": "92f7f5539093cf9793ff5a366db0583ed1e250b9bab95763a14ee49e0739e015"
153
154
  },
154
155
  {
155
156
  "id": "inventory",
@@ -180,9 +181,9 @@
180
181
  },
181
182
  "version": "0.1.1",
182
183
  "dependencies": {
183
- "@idosgames/core": "0.25.0",
184
- "@idosgames/module-sdk": "0.13.2",
185
- "@idosgames/react": "0.6.3",
184
+ "@idosgames/core": "0.26.1",
185
+ "@idosgames/module-sdk": "0.13.3",
186
+ "@idosgames/react": "0.7.1",
186
187
  "react": "19.2.7"
187
188
  },
188
189
  "fileCount": 6,
@@ -217,13 +218,13 @@
217
218
  },
218
219
  "version": "0.1.4",
219
220
  "dependencies": {
220
- "@idosgames/core": "0.25.0",
221
- "@idosgames/module-sdk": "0.13.2",
222
- "@idosgames/react": "0.6.3",
221
+ "@idosgames/core": "0.26.1",
222
+ "@idosgames/module-sdk": "0.13.3",
223
+ "@idosgames/react": "0.7.1",
223
224
  "react": "19.2.7"
224
225
  },
225
226
  "fileCount": 6,
226
- "contentHash": "7942c63623452b8e5f162adebd6123c2effacfe8adfe2e9a1cba739482e8b6ee"
227
+ "contentHash": "55544f5bae173482aaa22e92612cade99a356547ee80b68fc096dde8fb700b47"
227
228
  },
228
229
  {
229
230
  "id": "boosts",
@@ -253,13 +254,13 @@
253
254
  },
254
255
  "version": "0.1.1",
255
256
  "dependencies": {
256
- "@idosgames/core": "0.25.0",
257
- "@idosgames/module-sdk": "0.13.2",
258
- "@idosgames/react": "0.6.3",
257
+ "@idosgames/core": "0.26.1",
258
+ "@idosgames/module-sdk": "0.13.3",
259
+ "@idosgames/react": "0.7.1",
259
260
  "react": "19.2.7"
260
261
  },
261
262
  "fileCount": 6,
262
- "contentHash": "bb17d0684afb6135854bc4abdab52d3c0fcdbc01d45ac23fd1c66dd25fce5d47"
263
+ "contentHash": "d79e71eb438f32329a34d0aeb4b9dcf7e7a8c6dac168224951a85a50f7bf84b0"
263
264
  },
264
265
  {
265
266
  "id": "leaderboard",
@@ -294,9 +295,9 @@
294
295
  },
295
296
  "version": "0.1.5",
296
297
  "dependencies": {
297
- "@idosgames/core": "0.25.0",
298
- "@idosgames/module-sdk": "0.13.2",
299
- "@idosgames/react": "0.6.3",
298
+ "@idosgames/core": "0.26.1",
299
+ "@idosgames/module-sdk": "0.13.3",
300
+ "@idosgames/react": "0.7.1",
300
301
  "react": "19.2.7"
301
302
  },
302
303
  "fileCount": 10,
@@ -330,9 +331,9 @@
330
331
  },
331
332
  "version": "0.1.3",
332
333
  "dependencies": {
333
- "@idosgames/core": "0.25.0",
334
- "@idosgames/module-sdk": "0.13.2",
335
- "@idosgames/react": "0.6.3",
334
+ "@idosgames/core": "0.26.1",
335
+ "@idosgames/module-sdk": "0.13.3",
336
+ "@idosgames/react": "0.7.1",
336
337
  "react": "19.2.7"
337
338
  },
338
339
  "fileCount": 6,
@@ -369,9 +370,9 @@
369
370
  },
370
371
  "version": "0.1.3",
371
372
  "dependencies": {
372
- "@idosgames/core": "0.25.0",
373
- "@idosgames/module-sdk": "0.13.2",
374
- "@idosgames/react": "0.6.3",
373
+ "@idosgames/core": "0.26.1",
374
+ "@idosgames/module-sdk": "0.13.3",
375
+ "@idosgames/react": "0.7.1",
375
376
  "react": "19.2.7"
376
377
  },
377
378
  "fileCount": 6,
@@ -408,13 +409,13 @@
408
409
  },
409
410
  "version": "0.1.3",
410
411
  "dependencies": {
411
- "@idosgames/core": "0.25.0",
412
- "@idosgames/module-sdk": "0.13.2",
413
- "@idosgames/react": "0.6.3",
412
+ "@idosgames/core": "0.26.1",
413
+ "@idosgames/module-sdk": "0.13.3",
414
+ "@idosgames/react": "0.7.1",
414
415
  "react": "19.2.7"
415
416
  },
416
417
  "fileCount": 10,
417
- "contentHash": "090986cb22bc6fe03d78b9227d8720477737f35757a0495d6399b43bc3577fd7"
418
+ "contentHash": "4a0b7e2e2ee14fd0ebf5ae7cb09246895b158e9ff62d372a7e18a041a3d54fbe"
418
419
  },
419
420
  {
420
421
  "id": "craft",
@@ -448,13 +449,13 @@
448
449
  },
449
450
  "version": "0.1.2",
450
451
  "dependencies": {
451
- "@idosgames/core": "0.25.0",
452
- "@idosgames/module-sdk": "0.13.2",
453
- "@idosgames/react": "0.6.3",
452
+ "@idosgames/core": "0.26.1",
453
+ "@idosgames/module-sdk": "0.13.3",
454
+ "@idosgames/react": "0.7.1",
454
455
  "react": "19.2.7"
455
456
  },
456
457
  "fileCount": 6,
457
- "contentHash": "f4d962e257dc5647a013afc7899b43134964f6505431f9ed1147611c67c4af90"
458
+ "contentHash": "f59536188295910902674239c662a7ed6eca971ba4820ade716a25e56f21ccf3"
458
459
  },
459
460
  {
460
461
  "id": "marketplace",
@@ -489,9 +490,9 @@
489
490
  },
490
491
  "version": "0.1.3",
491
492
  "dependencies": {
492
- "@idosgames/core": "0.25.0",
493
- "@idosgames/module-sdk": "0.13.2",
494
- "@idosgames/react": "0.6.3",
493
+ "@idosgames/core": "0.26.1",
494
+ "@idosgames/module-sdk": "0.13.3",
495
+ "@idosgames/react": "0.7.1",
495
496
  "react": "19.2.7"
496
497
  },
497
498
  "fileCount": 13,
@@ -528,13 +529,13 @@
528
529
  },
529
530
  "version": "0.1.3",
530
531
  "dependencies": {
531
- "@idosgames/core": "0.25.0",
532
- "@idosgames/module-sdk": "0.13.2",
533
- "@idosgames/react": "0.6.3",
532
+ "@idosgames/core": "0.26.1",
533
+ "@idosgames/module-sdk": "0.13.3",
534
+ "@idosgames/react": "0.7.1",
534
535
  "react": "19.2.7"
535
536
  },
536
537
  "fileCount": 6,
537
- "contentHash": "20e587ae8a91d2d1fff38e7b2c1d66a320b2a995d797629b890c6ca9b8e9bb5e"
538
+ "contentHash": "c4c7f012dbd1a629ebfd9276d872fad99f9b7254bf87279c6b2fcfa5fa7d0e53"
538
539
  },
539
540
  {
540
541
  "id": "events",
@@ -570,9 +571,9 @@
570
571
  },
571
572
  "version": "0.1.5",
572
573
  "dependencies": {
573
- "@idosgames/core": "0.25.0",
574
- "@idosgames/module-sdk": "0.13.2",
575
- "@idosgames/react": "0.6.3",
574
+ "@idosgames/core": "0.26.1",
575
+ "@idosgames/module-sdk": "0.13.3",
576
+ "@idosgames/react": "0.7.1",
576
577
  "react": "19.2.7"
577
578
  },
578
579
  "fileCount": 6,
@@ -607,13 +608,13 @@
607
608
  },
608
609
  "version": "0.1.3",
609
610
  "dependencies": {
610
- "@idosgames/core": "0.25.0",
611
- "@idosgames/module-sdk": "0.13.2",
612
- "@idosgames/react": "0.6.3",
611
+ "@idosgames/core": "0.26.1",
612
+ "@idosgames/module-sdk": "0.13.3",
613
+ "@idosgames/react": "0.7.1",
613
614
  "react": "19.2.7"
614
615
  },
615
616
  "fileCount": 6,
616
- "contentHash": "a2fa5522c2b27ba330c9edf5610df2029a7f6a50843bbdbc955dc73b60f5eb07"
617
+ "contentHash": "6af34c48b5056a655586dd2351d4b370756b9244b1aeda980c667b1c962428e5"
617
618
  },
618
619
  {
619
620
  "id": "season",
@@ -648,9 +649,9 @@
648
649
  },
649
650
  "version": "0.1.3",
650
651
  "dependencies": {
651
- "@idosgames/core": "0.25.0",
652
- "@idosgames/module-sdk": "0.13.2",
653
- "@idosgames/react": "0.6.3",
652
+ "@idosgames/core": "0.26.1",
653
+ "@idosgames/module-sdk": "0.13.3",
654
+ "@idosgames/react": "0.7.1",
654
655
  "react": "19.2.7"
655
656
  },
656
657
  "fileCount": 6,
@@ -688,9 +689,9 @@
688
689
  },
689
690
  "version": "0.1.3",
690
691
  "dependencies": {
691
- "@idosgames/core": "0.25.0",
692
- "@idosgames/module-sdk": "0.13.2",
693
- "@idosgames/react": "0.6.3",
692
+ "@idosgames/core": "0.26.1",
693
+ "@idosgames/module-sdk": "0.13.3",
694
+ "@idosgames/react": "0.7.1",
694
695
  "react": "19.2.7"
695
696
  },
696
697
  "fileCount": 11,
@@ -728,9 +729,9 @@
728
729
  },
729
730
  "version": "0.1.2",
730
731
  "dependencies": {
731
- "@idosgames/core": "0.25.0",
732
- "@idosgames/module-sdk": "0.13.2",
733
- "@idosgames/react": "0.6.3",
732
+ "@idosgames/core": "0.26.1",
733
+ "@idosgames/module-sdk": "0.13.3",
734
+ "@idosgames/react": "0.7.1",
734
735
  "react": "19.2.7"
735
736
  },
736
737
  "fileCount": 11,
@@ -768,9 +769,9 @@
768
769
  },
769
770
  "version": "0.1.3",
770
771
  "dependencies": {
771
- "@idosgames/core": "0.25.0",
772
- "@idosgames/module-sdk": "0.13.2",
773
- "@idosgames/react": "0.6.3",
772
+ "@idosgames/core": "0.26.1",
773
+ "@idosgames/module-sdk": "0.13.3",
774
+ "@idosgames/react": "0.7.1",
774
775
  "react": "19.2.7"
775
776
  },
776
777
  "fileCount": 6,
@@ -809,9 +810,9 @@
809
810
  },
810
811
  "version": "0.1.3",
811
812
  "dependencies": {
812
- "@idosgames/core": "0.25.0",
813
- "@idosgames/module-sdk": "0.13.2",
814
- "@idosgames/react": "0.6.3",
813
+ "@idosgames/core": "0.26.1",
814
+ "@idosgames/module-sdk": "0.13.3",
815
+ "@idosgames/react": "0.7.1",
815
816
  "react": "19.2.7"
816
817
  },
817
818
  "fileCount": 13,
@@ -847,9 +848,9 @@
847
848
  },
848
849
  "version": "0.1.2",
849
850
  "dependencies": {
850
- "@idosgames/core": "0.25.0",
851
- "@idosgames/module-sdk": "0.13.2",
852
- "@idosgames/react": "0.6.3",
851
+ "@idosgames/core": "0.26.1",
852
+ "@idosgames/module-sdk": "0.13.3",
853
+ "@idosgames/react": "0.7.1",
853
854
  "react": "19.2.7"
854
855
  },
855
856
  "fileCount": 13,
@@ -891,9 +892,9 @@
891
892
  },
892
893
  "version": "0.2.1",
893
894
  "dependencies": {
894
- "@idosgames/core": "0.25.0",
895
- "@idosgames/module-sdk": "0.13.2",
896
- "@idosgames/react": "0.6.3",
895
+ "@idosgames/core": "0.26.1",
896
+ "@idosgames/module-sdk": "0.13.3",
897
+ "@idosgames/react": "0.7.1",
897
898
  "react": "19.2.7"
898
899
  },
899
900
  "fileCount": 15,
@@ -930,9 +931,9 @@
930
931
  },
931
932
  "version": "0.1.5",
932
933
  "dependencies": {
933
- "@idosgames/core": "0.25.0",
934
- "@idosgames/module-sdk": "0.13.2",
935
- "@idosgames/react": "0.6.3",
934
+ "@idosgames/core": "0.26.1",
935
+ "@idosgames/module-sdk": "0.13.3",
936
+ "@idosgames/react": "0.7.1",
936
937
  "react": "19.2.7"
937
938
  },
938
939
  "fileCount": 6,
@@ -967,9 +968,9 @@
967
968
  },
968
969
  "version": "0.1.4",
969
970
  "dependencies": {
970
- "@idosgames/core": "0.25.0",
971
- "@idosgames/module-sdk": "0.13.2",
972
- "@idosgames/react": "0.6.3",
971
+ "@idosgames/core": "0.26.1",
972
+ "@idosgames/module-sdk": "0.13.3",
973
+ "@idosgames/react": "0.7.1",
973
974
  "react": "19.2.7"
974
975
  },
975
976
  "fileCount": 6,
@@ -1011,13 +1012,13 @@
1011
1012
  },
1012
1013
  "version": "0.1.3",
1013
1014
  "dependencies": {
1014
- "@idosgames/core": "0.25.0",
1015
- "@idosgames/module-sdk": "0.13.2",
1016
- "@idosgames/react": "0.6.3",
1015
+ "@idosgames/core": "0.26.1",
1016
+ "@idosgames/module-sdk": "0.13.3",
1017
+ "@idosgames/react": "0.7.1",
1017
1018
  "react": "19.2.7"
1018
1019
  },
1019
1020
  "fileCount": 16,
1020
- "contentHash": "ba3020258426f2c8b890d16cd169bffb4e96a4fc61d8a312c24d706ec9eac315"
1021
+ "contentHash": "c3a4b38be15260152a5244a06539639a1c7c08c207faf76d03baab43e639d148"
1021
1022
  },
1022
1023
  {
1023
1024
  "id": "ai",
@@ -1046,13 +1047,13 @@
1046
1047
  },
1047
1048
  "version": "0.1.3",
1048
1049
  "dependencies": {
1049
- "@idosgames/core": "0.25.0",
1050
- "@idosgames/module-sdk": "0.13.2",
1051
- "@idosgames/react": "0.6.3",
1050
+ "@idosgames/core": "0.26.1",
1051
+ "@idosgames/module-sdk": "0.13.3",
1052
+ "@idosgames/react": "0.7.1",
1052
1053
  "react": "19.2.7"
1053
1054
  },
1054
1055
  "fileCount": 6,
1055
- "contentHash": "8a8b10cdef84bd966f04352c7956d3e6d60f31d7412cec50b4e31aa09c23b33e"
1056
+ "contentHash": "94fa2be0fc5eff91bef20eb4ee063955c64d6df105066bafe384f5ec0be924a7"
1056
1057
  },
1057
1058
  {
1058
1059
  "id": "board-game",
@@ -1096,10 +1097,10 @@
1096
1097
  ]
1097
1098
  },
1098
1099
  "dependencies": {
1099
- "@idosgames/core": "0.25.0",
1100
- "@idosgames/module-sdk": "0.13.2",
1101
- "@idosgames/react": "0.6.3",
1102
- "@idosgames/wallet": "0.6.8",
1100
+ "@idosgames/core": "0.26.1",
1101
+ "@idosgames/module-sdk": "0.13.3",
1102
+ "@idosgames/react": "0.7.1",
1103
+ "@idosgames/wallet": "0.6.10",
1103
1104
  "@tanstack/react-query": "5.101.2",
1104
1105
  "react": "19.2.7",
1105
1106
  "three": "0.185.1",
@@ -1107,7 +1108,7 @@
1107
1108
  "wagmi": "3.7.2"
1108
1109
  },
1109
1110
  "fileCount": 46,
1110
- "contentHash": "99fc32290b3370f1335d4f2f81a847aea2cb42235ae6101cead722037d3c0215"
1111
+ "contentHash": "a93a6822f166b908586371e556127149c5d275ee8044bf0c1c0c5384c345d266"
1111
1112
  },
1112
1113
  {
1113
1114
  "id": "idle-rpg",
@@ -1181,15 +1182,15 @@
1181
1182
  ]
1182
1183
  },
1183
1184
  "dependencies": {
1184
- "@idosgames/characters": "0.1.2",
1185
- "@idosgames/core": "0.25.0",
1186
- "@idosgames/module-sdk": "0.13.2",
1187
- "@idosgames/react": "0.6.3",
1185
+ "@idosgames/characters": "0.1.3",
1186
+ "@idosgames/core": "0.26.1",
1187
+ "@idosgames/module-sdk": "0.13.3",
1188
+ "@idosgames/react": "0.7.1",
1188
1189
  "phaser": "4.2.1",
1189
1190
  "react": "19.2.7"
1190
1191
  },
1191
1192
  "fileCount": 37,
1192
- "contentHash": "25599b5c55af0ebca3eef6909ef435c0e054063829da89985da8b72f61c9dafc"
1193
+ "contentHash": "c829bf0a60c01c03a9370d167404e1cb6d5fce50e04f893157b7cdb33443d12f"
1193
1194
  },
1194
1195
  {
1195
1196
  "id": "hero-run",
@@ -1257,14 +1258,15 @@
1257
1258
  ]
1258
1259
  },
1259
1260
  "dependencies": {
1260
- "@idosgames/core": "0.25.0",
1261
- "@idosgames/module-sdk": "0.13.2",
1262
- "@idosgames/react": "0.6.3",
1261
+ "@idosgames/characters": "0.1.3",
1262
+ "@idosgames/core": "0.26.1",
1263
+ "@idosgames/module-sdk": "0.13.3",
1264
+ "@idosgames/react": "0.7.1",
1263
1265
  "phaser": "4.2.1",
1264
1266
  "react": "19.2.7"
1265
1267
  },
1266
- "fileCount": 105,
1267
- "contentHash": "0a95a09bfcc557220462eecf8ee89848e06c845df9fe631dea52dbeb46df2d1d"
1268
+ "fileCount": 50,
1269
+ "contentHash": "41609f618d1e9d5deeceb1c05d6eb3f7ad110cfa49ff8fae21c05153f0b009f8"
1268
1270
  },
1269
1271
  {
1270
1272
  "id": "voxelcraft",
@@ -1347,15 +1349,15 @@
1347
1349
  },
1348
1350
  "version": "0.7.4",
1349
1351
  "dependencies": {
1350
- "@idosgames/characters": "0.1.2",
1351
- "@idosgames/core": "0.25.0",
1352
- "@idosgames/module-sdk": "0.13.2",
1353
- "@idosgames/react": "0.6.3",
1352
+ "@idosgames/characters": "0.1.3",
1353
+ "@idosgames/core": "0.26.1",
1354
+ "@idosgames/module-sdk": "0.13.3",
1355
+ "@idosgames/react": "0.7.1",
1354
1356
  "react": "19.2.7",
1355
1357
  "three": "0.185.1"
1356
1358
  },
1357
1359
  "fileCount": 561,
1358
- "contentHash": "fd96e0faccf698f9fa5c169bd51acbe1b11b1eae3eba6f6dfc5dd8ab72df438e"
1360
+ "contentHash": "5068fee9f43c38b2967a4771de445afa23699a0ed5bc16fe9ecd891757dd0730"
1359
1361
  },
1360
1362
  {
1361
1363
  "id": "mini-game",
@@ -1384,14 +1386,59 @@
1384
1386
  },
1385
1387
  "version": "0.1.4",
1386
1388
  "dependencies": {
1387
- "@idosgames/core": "0.25.0",
1388
- "@idosgames/module-sdk": "0.13.2",
1389
- "@idosgames/react": "0.6.3",
1389
+ "@idosgames/core": "0.26.1",
1390
+ "@idosgames/module-sdk": "0.13.3",
1391
+ "@idosgames/react": "0.7.1",
1390
1392
  "react": "19.2.7"
1391
1393
  },
1392
1394
  "fileCount": 7,
1393
1395
  "contentHash": "4e855049c6c583010b8e9b39d552de30cd8544278690fe903fcc8d2a7e451382"
1394
1396
  },
1397
+ {
1398
+ "id": "kit-game",
1399
+ "name": "Constructor game",
1400
+ "type": "template",
1401
+ "engine": "phaser",
1402
+ "genre": "constructor",
1403
+ "uses": [
1404
+ "premium"
1405
+ ],
1406
+ "summary": "The game constructor's runtime: plays the title's GameSpec (a whole game as data) on Phaser; without one, a demo lane runner.",
1407
+ "description": "One prebuilt runtime for every 2D game of the platform's constructor. The title's config section GameSpec describes the game as data: genre presets as modes, their parameters (difficulty, lanes, lives…), the palette, texts in every language, resources and how modes produce and spend them, rules (trigger → condition → effect) and reward multipliers. The module validates the spec against the platform's blocks and presets from @idosgames/game-kit (numbers out of range are clamped, unknown fields kept), runs the core mode in a deterministic world and draws it through the Phaser adapter. Genres so far: an endless lane runner (swipe, arrows or a tap on a side to change lanes; coins, obstacles, growing speed). A title without a GameSpec plays the built-in demo spec. Edit the game by editing the spec, not the code; a new genre is a new preset over the kit's blocks.",
1408
+ "provides": [
1409
+ "a game from a GameSpec: no code per game",
1410
+ "endless lane runner (swipe / arrows / tap a side)",
1411
+ "palette, texts and parameters from the spec",
1412
+ "deterministic runs from the spec's seed",
1413
+ "round flow: tap to start, result screen, play again",
1414
+ "reward window after a round: claim, x3 for a rewarded ad (in the app), x5 for VIP (server-side multiplier)"
1415
+ ],
1416
+ "tags": [
1417
+ "constructor",
1418
+ "game-kit",
1419
+ "runner",
1420
+ "arcade",
1421
+ "phaser",
1422
+ "2d",
1423
+ "data-driven"
1424
+ ],
1425
+ "author": {
1426
+ "name": "iDos Games",
1427
+ "url": "https://idosgames.com"
1428
+ },
1429
+ "version": "0.1.0",
1430
+ "dependencies": {
1431
+ "@idosgames/characters": "0.1.3",
1432
+ "@idosgames/core": "0.26.1",
1433
+ "@idosgames/game-kit": "0.1.0",
1434
+ "@idosgames/module-sdk": "0.13.3",
1435
+ "@idosgames/react": "0.7.1",
1436
+ "phaser": "4.2.1",
1437
+ "react": "19.2.7"
1438
+ },
1439
+ "fileCount": 30,
1440
+ "contentHash": "0b4f174020db8317ee459734d650dc8d19becab0e08c2d87ce66fb10fc2d8986"
1441
+ },
1395
1442
  {
1396
1443
  "id": "video-studio",
1397
1444
  "name": "Video studio",
@@ -1443,16 +1490,16 @@
1443
1490
  },
1444
1491
  "version": "0.1.1",
1445
1492
  "dependencies": {
1446
- "@idosgames/characters": "0.1.2",
1447
- "@idosgames/core": "0.25.0",
1448
- "@idosgames/module-sdk": "0.13.2",
1449
- "@idosgames/react": "0.6.3",
1493
+ "@idosgames/characters": "0.1.3",
1494
+ "@idosgames/core": "0.26.1",
1495
+ "@idosgames/module-sdk": "0.13.3",
1496
+ "@idosgames/react": "0.7.1",
1450
1497
  "@idosgames/timeline": "0.1.0",
1451
1498
  "react": "19.2.7",
1452
1499
  "three": "0.185.1"
1453
1500
  },
1454
1501
  "fileCount": 40,
1455
- "contentHash": "66961c2a111d56cc6c14482f97400e57cd3994d0c106494cd79a9e0b9bb90e20"
1502
+ "contentHash": "f21269891c1f334358e49c1926f8fd343a3f32dae1ef373b15d7b4c193cf4b9b"
1456
1503
  }
1457
1504
  ],
1458
1505
  "skills": [
@@ -30,16 +30,16 @@
30
30
  "version": "0.1.3"
31
31
  },
32
32
  "dependencies": {
33
- "@idosgames/core": "0.25.0",
34
- "@idosgames/module-sdk": "0.13.2",
35
- "@idosgames/react": "0.6.3",
33
+ "@idosgames/core": "0.26.1",
34
+ "@idosgames/module-sdk": "0.13.3",
35
+ "@idosgames/react": "0.7.1",
36
36
  "react": "19.2.7"
37
37
  },
38
- "contentHash": "8a8b10cdef84bd966f04352c7956d3e6d60f31d7412cec50b4e31aa09c23b33e",
38
+ "contentHash": "94fa2be0fc5eff91bef20eb4ee063955c64d6df105066bafe384f5ec0be924a7",
39
39
  "files": [
40
40
  {
41
41
  "path": "AiScreen.tsx",
42
- "content": "import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport type { AIGenerationView, IDosGamesClient } from \"@idosgames/core\";\nimport type { FeatureScreenProps } from \"@idosgames/module-sdk\";\nimport { useIDosGamesClient, useUserState } from \"@idosgames/react\";\nimport {\n Columns,\n Button,\n canAfford,\n Card,\n Center,\n configSection,\n EmptyState,\n errorText,\n Icon,\n outlined,\n panel,\n ResourceList,\n Spinner,\n Tabs,\n TextArea,\n useCatalog,\n useStagger,\n useToast,\n v,\n} from \"@idosgames/react/ui\";\nimport {\n featureRows,\n resultKind,\n type AISection,\n type FeatureRow,\n type Modality,\n} from \"./model\";\nimport { t } from \"./i18n\";\n\n// AI studio (engine AI): the AI features the publisher opened to players — text, pictures, speech,\n// music, video, 3D. The player writes what they want, pays the feature's price (or nothing), and the\n// result comes back from a job the server runs (polled with waitForGeneration). A feature tagged\n// \"hidden\" is for the game's own code (NPC lines and the like) and does not show here.\n\ntype Tab = \"create\" | \"history\";\n\nexport function AiScreen(_: FeatureScreenProps): ReactNode {\n const client = useIDosGamesClient();\n const catalog = useCatalog();\n const [tab, setTab] = useState<Tab>(\"create\");\n const [picked, setPicked] = useState<string | null>(null);\n const features = featureRows(configSection<AISection>(client, \"AI\"));\n if (features.length === 0)\n return <EmptyState glyph=\"bulb\" text={t(\"noFeatures\")} />;\n const current = features.find((f) => f.key === picked) ?? features[0]!;\n return (\n <div style={{ display: \"grid\", gap: 12 }}>\n <Tabs\n tabs={[\n { id: \"create\", label: t(\"create\") },\n { id: \"history\", label: t(\"history\") },\n ]}\n value={tab}\n onChange={setTab}\n />\n {tab === \"create\" ? (\n <>\n {features.length > 1 ? (\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {features.map((f) => (\n <Button\n key={f.key}\n size=\"sm\"\n tone={f.key === current.key ? \"gold\" : \"grey\"}\n onClick={() => setPicked(f.key)}\n >\n {catalog.localize(f.key)} · {t(`m_${f.modality}`)}\n </Button>\n ))}\n </div>\n ) : null}\n <Create key={current.key} feature={current} />\n </>\n ) : (\n <History />\n )}\n </div>\n );\n}\n\n/** Starts a job for a feature by its modality and waits for the result. */\nfunction run(\n client: IDosGamesClient,\n feature: FeatureRow,\n prompt: string,\n optionID: string | undefined,\n): Promise<\n { ok: true; data: AIGenerationView } | { ok: false; error: string }\n> {\n const options = {\n selectedOptionID: optionID,\n relatedEntityID: crypto.randomUUID(),\n };\n const byModality: Record<\n Modality,\n () => ReturnType<IDosGamesClient[\"ai\"][\"generateText\"]>\n > = {\n Text: () =>\n client.ai.generateText(feature.key, { Prompt: prompt }, options),\n Image: () =>\n client.ai.generateImage(feature.key, { Prompt: prompt }, options),\n Audio: () =>\n client.ai.generateAudio(feature.key, { Text: prompt }, options),\n Music: () =>\n client.ai.generateMusic(feature.key, { Prompt: prompt }, options),\n Video: () =>\n client.ai.generateVideo(feature.key, { Prompt: prompt }, options),\n ThreeD: () =>\n client.ai.generateThreeD(feature.key, { Prompt: prompt }, options),\n };\n return byModality[feature.modality]().then((started) =>\n started.ok\n ? client.ai.waitForGeneration(started.data, { timeoutMs: 10 * 60_000 })\n : started,\n );\n}\n\nfunction Create({ feature }: { feature: FeatureRow }): ReactNode {\n const client = useIDosGamesClient();\n const state = useUserState();\n const toast = useToast();\n const [prompt, setPrompt] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [result, setResult] = useState<AIGenerationView | null>(null);\n const alive = useRef(true);\n useEffect(\n () => () => {\n alive.current = false;\n },\n [],\n );\n const balances = state?.InventoryV2?.VirtualCurrencies as\n Record<string, { Amount?: number }> | undefined;\n const option =\n feature.options.find((o) => canAfford(o.price, balances)) ??\n feature.options[0];\n const affordable = !option || canAfford(option.price, balances);\n\n const go = async () => {\n setBusy(true);\n setResult(null);\n const res = await run(client, feature, prompt.trim(), option?.id);\n if (!alive.current) return;\n setBusy(false);\n if (!res.ok) return toast(errorText(res.error), \"error\");\n if (res.data.Status !== \"completed\")\n return toast(res.data.Error?.Message || t(\"failed\"), \"error\");\n setResult(res.data);\n };\n\n return (\n <div style={{ display: \"grid\", gap: 10 }}>\n <TextArea\n value={prompt}\n maxLength={feature.maxChars > 0 ? feature.maxChars : undefined}\n placeholder={\n feature.modality === \"Audio\" ? t(\"sayWhat\") : t(\"describe\")\n }\n onChange={(e) => setPrompt(e.target.value)}\n rows={4}\n style={{ padding: 12, width: \"100%\" }}\n />\n <Button\n tone=\"gold\"\n size=\"lg\"\n attract={!!prompt.trim() && affordable}\n disabled={!prompt.trim() || !affordable}\n busy={busy}\n onClick={() => void go()}\n data-tutorial-anchor={`ai:${feature.key}`}\n >\n {busy ? t(\"working\") : t(\"generate\")}{\" \"}\n {option ? <ResourceList lines={option.price} size={18} /> : null}\n </Button>\n {busy ? (\n <Center>\n <Spinner />\n </Center>\n ) : null}\n {result ? <Result generation={result} /> : null}\n </div>\n );\n}\n\nfunction Result({ generation }: { generation: AIGenerationView }): ReactNode {\n return (\n <div style={{ ...panel, padding: 12, display: \"grid\", gap: 10 }}>\n {generation.OutputText ? (\n <div style={{ color: v.text, fontSize: 15, whiteSpace: \"pre-wrap\" }}>\n {generation.OutputText}\n </div>\n ) : null}\n {(generation.Assets ?? []).map((a, i) => {\n const kind = resultKind(a.ContentType);\n const url = a.Url ?? \"\";\n return kind === \"image\" ? (\n <img\n key={i}\n src={url}\n alt=\"\"\n style={{ width: \"100%\", borderRadius: 12 }}\n />\n ) : kind === \"audio\" ? (\n <audio key={i} src={url} controls style={{ width: \"100%\" }} />\n ) : kind === \"video\" ? (\n <video\n key={i}\n src={url}\n controls\n style={{ width: \"100%\", borderRadius: 12 }}\n />\n ) : (\n <a\n key={i}\n href={url}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{ ...outlined, color: v.gold, fontSize: 14 }}\n >\n {t(\"download\")}\n </a>\n );\n })}\n </div>\n );\n}\n\nfunction History(): ReactNode {\n const client = useIDosGamesClient();\n const catalog = useCatalog();\n const stagger = useStagger();\n const [items, setItems] = useState<AIGenerationView[] | null>(null);\n const [open, setOpen] = useState<string | null>(null);\n useEffect(() => {\n void client.ai\n .listGenerations({ Limit: 20 })\n .then((r) => setItems(r.ok ? (r.data.Data ?? []) : []));\n }, [client]);\n if (!items)\n return (\n <Center>\n <Spinner />\n </Center>\n );\n if (items.length === 0)\n return <EmptyState glyph=\"bulb\" text={t(\"noHistory\")} />;\n return (\n <Columns gap={8} min={320}>\n {items.map((g, i) => (\n <Card\n key={g.GenerationID}\n onClick={() =>\n setOpen(open === g.GenerationID ? null : g.GenerationID)\n }\n style={{ display: \"grid\", gap: 8, ...stagger(i) }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <Icon glyph=\"bulb\" size={26} />\n <span style={{ ...outlined, fontSize: 14, flex: 1 }}>\n {catalog.localize(g.FeatureKey ?? \"\")}\n </span>\n <span\n style={{\n ...outlined,\n fontSize: 12,\n color:\n g.Status === \"completed\"\n ? v.green\n : g.Status === \"failed\"\n ? v.textDim\n : v.gold,\n }}\n >\n {t(\n `s_${g.Status === \"completed\" || g.Status === \"failed\" ? g.Status : \"running\"}`,\n )}\n </span>\n </div>\n {open === g.GenerationID && g.Status === \"completed\" ? (\n <Result generation={g} />\n ) : null}\n </Card>\n ))}\n </Columns>\n );\n}\n"
42
+ "content": "import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport type { AIGenerationView, IDosGamesClient } from \"@idosgames/core\";\nimport type { FeatureScreenProps } from \"@idosgames/module-sdk\";\nimport { useIDosGamesClient, useUserState } from \"@idosgames/react\";\nimport {\n Columns,\n Button,\n canAfford,\n Card,\n Center,\n configSection,\n EmptyState,\n errorText,\n Icon,\n outlined,\n panel,\n ResourceList,\n Spinner,\n Tabs,\n TextArea,\n useCatalog,\n useStagger,\n useToast,\n v,\n payWithCredits,\n} from \"@idosgames/react/ui\";\nimport {\n featureRows,\n resultKind,\n type AISection,\n type FeatureRow,\n type Modality,\n} from \"./model\";\nimport { t } from \"./i18n\";\n\n// AI studio (engine AI): the AI features the publisher opened to players — text, pictures, speech,\n// music, video, 3D. The player writes what they want, pays the feature's price (or nothing), and the\n// result comes back from a job the server runs (polled with waitForGeneration). A feature tagged\n// \"hidden\" is for the game's own code (NPC lines and the like) and does not show here.\n\ntype Tab = \"create\" | \"history\";\n\nexport function AiScreen(_: FeatureScreenProps): ReactNode {\n const client = useIDosGamesClient();\n const catalog = useCatalog();\n const [tab, setTab] = useState<Tab>(\"create\");\n const [picked, setPicked] = useState<string | null>(null);\n const features = featureRows(configSection<AISection>(client, \"AI\"));\n if (features.length === 0)\n return <EmptyState glyph=\"bulb\" text={t(\"noFeatures\")} />;\n const current = features.find((f) => f.key === picked) ?? features[0]!;\n return (\n <div style={{ display: \"grid\", gap: 12 }}>\n <Tabs\n tabs={[\n { id: \"create\", label: t(\"create\") },\n { id: \"history\", label: t(\"history\") },\n ]}\n value={tab}\n onChange={setTab}\n />\n {tab === \"create\" ? (\n <>\n {features.length > 1 ? (\n <div style={{ display: \"flex\", gap: 6, flexWrap: \"wrap\" }}>\n {features.map((f) => (\n <Button\n key={f.key}\n size=\"sm\"\n tone={f.key === current.key ? \"gold\" : \"grey\"}\n onClick={() => setPicked(f.key)}\n >\n {catalog.localize(f.key)} · {t(`m_${f.modality}`)}\n </Button>\n ))}\n </div>\n ) : null}\n <Create key={current.key} feature={current} />\n </>\n ) : (\n <History />\n )}\n </div>\n );\n}\n\n/** Starts a job for a feature by its modality and waits for the result. */\nfunction run(\n client: IDosGamesClient,\n feature: FeatureRow,\n prompt: string,\n optionID: string | undefined,\n): Promise<\n { ok: true; data: AIGenerationView } | { ok: false; error: string }\n> {\n // One key for both calls of an Aspis price: the request, then the confirmed generation.\n const relatedEntityID = crypto.randomUUID();\n const byModality: Record<\n Modality,\n (\n creditsConfirmationID?: string,\n ) => ReturnType<IDosGamesClient[\"ai\"][\"generateText\"]>\n > = {\n Text: (id) =>\n client.ai.generateText(feature.key, { Prompt: prompt }, opts(id)),\n Image: (id) =>\n client.ai.generateImage(feature.key, { Prompt: prompt }, opts(id)),\n Audio: (id) =>\n client.ai.generateAudio(feature.key, { Text: prompt }, opts(id)),\n Music: (id) =>\n client.ai.generateMusic(feature.key, { Prompt: prompt }, opts(id)),\n Video: (id) =>\n client.ai.generateVideo(feature.key, { Prompt: prompt }, opts(id)),\n ThreeD: (id) =>\n client.ai.generateThreeD(feature.key, { Prompt: prompt }, opts(id)),\n };\n function opts(creditsConfirmationID?: string) {\n return { selectedOptionID: optionID, relatedEntityID, creditsConfirmationID };\n }\n // A price in Aspis: the first call asks the player to confirm on idosgames.com (the kit shows it); the Aspis are\n // charged only when the generation is ready.\n return payWithCredits(client, byModality[feature.modality]).then((started) =>\n started.ok\n ? client.ai.waitForGeneration(started.data, { timeoutMs: 10 * 60_000 })\n : started,\n );\n}\n\nfunction Create({ feature }: { feature: FeatureRow }): ReactNode {\n const client = useIDosGamesClient();\n const state = useUserState();\n const toast = useToast();\n const [prompt, setPrompt] = useState(\"\");\n const [busy, setBusy] = useState(false);\n const [result, setResult] = useState<AIGenerationView | null>(null);\n const alive = useRef(true);\n useEffect(\n () => () => {\n alive.current = false;\n },\n [],\n );\n const balances = state?.InventoryV2?.VirtualCurrencies as\n Record<string, { Amount?: number }> | undefined;\n const option =\n feature.options.find((o) => canAfford(o.price, balances)) ??\n feature.options[0];\n const affordable = !option || canAfford(option.price, balances);\n\n const go = async () => {\n setBusy(true);\n setResult(null);\n const res = await run(client, feature, prompt.trim(), option?.id);\n if (!alive.current) return;\n setBusy(false);\n if (!res.ok) return toast(errorText(res.error), \"error\");\n if (res.data.Status !== \"completed\")\n return toast(res.data.Error?.Message || t(\"failed\"), \"error\");\n setResult(res.data);\n };\n\n return (\n <div style={{ display: \"grid\", gap: 10 }}>\n <TextArea\n value={prompt}\n maxLength={feature.maxChars > 0 ? feature.maxChars : undefined}\n placeholder={\n feature.modality === \"Audio\" ? t(\"sayWhat\") : t(\"describe\")\n }\n onChange={(e) => setPrompt(e.target.value)}\n rows={4}\n style={{ padding: 12, width: \"100%\" }}\n />\n <Button\n tone=\"gold\"\n size=\"lg\"\n attract={!!prompt.trim() && affordable}\n disabled={!prompt.trim() || !affordable}\n busy={busy}\n onClick={() => void go()}\n data-tutorial-anchor={`ai:${feature.key}`}\n >\n {busy ? t(\"working\") : t(\"generate\")}{\" \"}\n {option ? <ResourceList lines={option.price} size={18} /> : null}\n </Button>\n {busy ? (\n <Center>\n <Spinner />\n </Center>\n ) : null}\n {result ? <Result generation={result} /> : null}\n </div>\n );\n}\n\nfunction Result({ generation }: { generation: AIGenerationView }): ReactNode {\n return (\n <div style={{ ...panel, padding: 12, display: \"grid\", gap: 10 }}>\n {generation.OutputText ? (\n <div style={{ color: v.text, fontSize: 15, whiteSpace: \"pre-wrap\" }}>\n {generation.OutputText}\n </div>\n ) : null}\n {(generation.Assets ?? []).map((a, i) => {\n const kind = resultKind(a.ContentType);\n const url = a.Url ?? \"\";\n return kind === \"image\" ? (\n <img\n key={i}\n src={url}\n alt=\"\"\n style={{ width: \"100%\", borderRadius: 12 }}\n />\n ) : kind === \"audio\" ? (\n <audio key={i} src={url} controls style={{ width: \"100%\" }} />\n ) : kind === \"video\" ? (\n <video\n key={i}\n src={url}\n controls\n style={{ width: \"100%\", borderRadius: 12 }}\n />\n ) : (\n <a\n key={i}\n href={url}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{ ...outlined, color: v.gold, fontSize: 14 }}\n >\n {t(\"download\")}\n </a>\n );\n })}\n </div>\n );\n}\n\nfunction History(): ReactNode {\n const client = useIDosGamesClient();\n const catalog = useCatalog();\n const stagger = useStagger();\n const [items, setItems] = useState<AIGenerationView[] | null>(null);\n const [open, setOpen] = useState<string | null>(null);\n useEffect(() => {\n void client.ai\n .listGenerations({ Limit: 20 })\n .then((r) => setItems(r.ok ? (r.data.Data ?? []) : []));\n }, [client]);\n if (!items)\n return (\n <Center>\n <Spinner />\n </Center>\n );\n if (items.length === 0)\n return <EmptyState glyph=\"bulb\" text={t(\"noHistory\")} />;\n return (\n <Columns gap={8} min={320}>\n {items.map((g, i) => (\n <Card\n key={g.GenerationID}\n onClick={() =>\n setOpen(open === g.GenerationID ? null : g.GenerationID)\n }\n style={{ display: \"grid\", gap: 8, ...stagger(i) }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <Icon glyph=\"bulb\" size={26} />\n <span style={{ ...outlined, fontSize: 14, flex: 1 }}>\n {catalog.localize(g.FeatureKey ?? \"\")}\n </span>\n <span\n style={{\n ...outlined,\n fontSize: 12,\n color:\n g.Status === \"completed\"\n ? v.green\n : g.Status === \"failed\"\n ? v.textDim\n : v.gold,\n }}\n >\n {t(\n `s_${g.Status === \"completed\" || g.Status === \"failed\" ? g.Status : \"running\"}`,\n )}\n </span>\n </div>\n {open === g.GenerationID && g.Status === \"completed\" ? (\n <Result generation={g} />\n ) : null}\n </Card>\n ))}\n </Columns>\n );\n}\n"
43
43
  },
44
44
  {
45
45
  "path": "i18n.ts",