@my-swu/simulator-client 0.1.4 → 0.1.5

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 (38) hide show
  1. package/dist/generated/index.d.ts +3 -0
  2. package/dist/generated/schemas.d.ts +1 -1
  3. package/dist/generated/schemas.js +626 -0
  4. package/dist/generated/types/admin-match-debug-bundle.d.ts +1 -1
  5. package/dist/generated/types/admin-match-replay-response.d.ts +1 -1
  6. package/dist/generated/types/client-message.d.ts +1 -1
  7. package/dist/generated/types/common.d.ts +193 -0
  8. package/dist/generated/types/create-playground-share-response.d.ts +1 -0
  9. package/dist/generated/types/create-playground-share-response.js +2 -0
  10. package/dist/generated/types/game-command.d.ts +1 -1
  11. package/dist/generated/types/match-history-replay-response.d.ts +1 -1
  12. package/dist/generated/types/playground-export-payload.d.ts +1 -0
  13. package/dist/generated/types/playground-export-payload.js +2 -0
  14. package/dist/generated/types/server-message.d.ts +1 -1
  15. package/dist/generated/types/set-ai-paused-response.d.ts +1 -1
  16. package/dist/generated/types/set-playground-ai-seat-request.d.ts +1 -0
  17. package/dist/generated/types/set-playground-ai-seat-request.js +2 -0
  18. package/dist/generated/types/shared-match-history-replay-response.d.ts +1 -1
  19. package/dist/generated/types/welcome-payload.d.ts +1 -1
  20. package/dist/generated/version.d.ts +1 -1
  21. package/dist/generated/version.js +1 -1
  22. package/dist/index.d.ts +1 -0
  23. package/dist/resources/admin.d.ts +3 -1
  24. package/dist/resources/admin.js +1 -0
  25. package/dist/resources/match-types.d.ts +11 -1
  26. package/dist/resources/matches.js +49 -0
  27. package/dist/validators.d.ts +4 -1
  28. package/package.json +1 -1
  29. package/schema/common.schema.json +491 -0
  30. package/schema/create-match-request.schema.json +5 -0
  31. package/schema/create-playground-share-response.schema.json +22 -0
  32. package/schema/game-command.schema.json +20 -0
  33. package/schema/game-state.schema.json +15 -0
  34. package/schema/manifest.json +4 -1
  35. package/schema/match-save-payload.schema.json +8 -0
  36. package/schema/playground-export-payload.schema.json +26 -0
  37. package/schema/route-manifest.json +58 -0
  38. package/schema/set-playground-ai-seat-request.schema.json +36 -0
@@ -103,6 +103,9 @@ export const schemaNames = [
103
103
  'rematch-match-response',
104
104
  'set-ai-paused-request',
105
105
  'set-ai-paused-response',
106
+ 'set-playground-ai-seat-request',
107
+ 'playground-export-payload',
108
+ 'create-playground-share-response',
106
109
  'get-match-response',
107
110
  'match-history-list-request',
108
111
  'match-history-list-response',
@@ -1208,6 +1211,184 @@ export const sdkSchemaCommon = {
1208
1211
  "replayAvailable"
1209
1212
  ]
1210
1213
  },
1214
+ "AiDecisionDiagnostic": {
1215
+ "description": "One AI decision's search-budget diagnostics, safe for durable storage.",
1216
+ "type": "object",
1217
+ "properties": {
1218
+ "abilityId": {
1219
+ "description": "Pending ability the chosen command answered, when applicable.",
1220
+ "type": [
1221
+ "integer",
1222
+ "null"
1223
+ ],
1224
+ "format": "uint64",
1225
+ "minimum": 0
1226
+ },
1227
+ "commandKind": {
1228
+ "description": "Privacy-safe chosen-command shape: snake_case command kind only.",
1229
+ "type": "string"
1230
+ },
1231
+ "difficulty": {
1232
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/AiDifficulty"
1233
+ },
1234
+ "elapsedMs": {
1235
+ "type": "integer",
1236
+ "format": "uint64",
1237
+ "minimum": 0
1238
+ },
1239
+ "eventsApplied": {
1240
+ "description": "Engine event counter of the searched state; exact cross-check key.",
1241
+ "type": "integer",
1242
+ "format": "uint64",
1243
+ "minimum": 0
1244
+ },
1245
+ "frameIndex": {
1246
+ "description": "Index of the replay frame this decision was made on (the state BEFORE\nthe chosen command applied). `None` when no frame was recorded yet.",
1247
+ "type": [
1248
+ "integer",
1249
+ "null"
1250
+ ],
1251
+ "format": "uint32",
1252
+ "minimum": 0
1253
+ },
1254
+ "hardFloorOverrun": {
1255
+ "description": "Whether the minimum-iteration floor pushed past the wall-clock budget.",
1256
+ "type": "boolean"
1257
+ },
1258
+ "iterationCeiling": {
1259
+ "description": "Idle-stretch ceiling granted for this decision, when one was.",
1260
+ "type": [
1261
+ "integer",
1262
+ "null"
1263
+ ],
1264
+ "format": "uint32",
1265
+ "minimum": 0
1266
+ },
1267
+ "iterationsBudget": {
1268
+ "type": "integer",
1269
+ "format": "uint32",
1270
+ "minimum": 0
1271
+ },
1272
+ "iterationsDone": {
1273
+ "type": "integer",
1274
+ "format": "uint32",
1275
+ "minimum": 0
1276
+ },
1277
+ "legalCount": {
1278
+ "type": "integer",
1279
+ "format": "uint32",
1280
+ "minimum": 0
1281
+ },
1282
+ "minIterations": {
1283
+ "description": "Minimum-iteration floor the search guarantees past the wall clock.",
1284
+ "type": "integer",
1285
+ "format": "uint32",
1286
+ "minimum": 0
1287
+ },
1288
+ "queueMs": {
1289
+ "description": "Time spent waiting for scheduler admission before the search started.",
1290
+ "type": "integer",
1291
+ "format": "uint64",
1292
+ "minimum": 0
1293
+ },
1294
+ "schedulerIdle": {
1295
+ "description": "Whether the AI scheduler was idle when this decision was admitted.",
1296
+ "type": "boolean"
1297
+ },
1298
+ "searchMode": {
1299
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/AiDecisionSearchMode"
1300
+ },
1301
+ "seat": {
1302
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
1303
+ },
1304
+ "snapshotRevision": {
1305
+ "description": "Gameplay snapshot marker the searched state carried. An undo between\nsearch and record makes this disagree with the frame at `frame_index`.",
1306
+ "type": "integer",
1307
+ "format": "uint64",
1308
+ "minimum": 0
1309
+ },
1310
+ "sourceCardId": {
1311
+ "description": "Public source card of that pending ability, when applicable.",
1312
+ "type": [
1313
+ "integer",
1314
+ "null"
1315
+ ],
1316
+ "format": "uint32",
1317
+ "minimum": 0
1318
+ },
1319
+ "starvationFallback": {
1320
+ "description": "The starved-search guard discarded the search result entirely and\nanswered from a one-ply heuristic ranking instead.",
1321
+ "type": "boolean"
1322
+ },
1323
+ "starved": {
1324
+ "description": "Starved search: the wall clock cut the decision at (or below) its\nminimum-iteration floor, so the move rests on noise-level visit\ncounts. Any blunder on a starved decision is explained first by this\nflag, not by enumeration or evaluation defects.",
1325
+ "type": "boolean"
1326
+ },
1327
+ "timeBudgetMs": {
1328
+ "type": [
1329
+ "integer",
1330
+ "null"
1331
+ ],
1332
+ "format": "uint32",
1333
+ "minimum": 0
1334
+ },
1335
+ "timeLimited": {
1336
+ "description": "Whether the wall clock cut the search before its iteration budget.",
1337
+ "type": "boolean"
1338
+ },
1339
+ "workersCompleted": {
1340
+ "type": "integer",
1341
+ "format": "uint32",
1342
+ "minimum": 0
1343
+ },
1344
+ "workersRequested": {
1345
+ "type": "integer",
1346
+ "format": "uint32",
1347
+ "minimum": 0
1348
+ }
1349
+ },
1350
+ "required": [
1351
+ "seat",
1352
+ "difficulty",
1353
+ "snapshotRevision",
1354
+ "eventsApplied",
1355
+ "searchMode",
1356
+ "commandKind",
1357
+ "queueMs",
1358
+ "elapsedMs",
1359
+ "iterationsDone",
1360
+ "iterationsBudget",
1361
+ "minIterations",
1362
+ "workersRequested",
1363
+ "workersCompleted",
1364
+ "schedulerIdle",
1365
+ "legalCount",
1366
+ "timeLimited",
1367
+ "hardFloorOverrun",
1368
+ "starved",
1369
+ "starvationFallback"
1370
+ ]
1371
+ },
1372
+ "AiDecisionSearchMode": {
1373
+ "description": "Decision algorithm that produced one recorded AI choice.",
1374
+ "oneOf": [
1375
+ {
1376
+ "description": "Normal MCTS root search.",
1377
+ "type": "string",
1378
+ "const": "mcts"
1379
+ },
1380
+ {
1381
+ "description": "One-ply evaluation of every legal setup choice.",
1382
+ "type": "string",
1383
+ "const": "setupEvaluator"
1384
+ },
1385
+ {
1386
+ "description": "A single legal action or another constant-time guard selected the move.",
1387
+ "type": "string",
1388
+ "const": "fastPath"
1389
+ }
1390
+ ]
1391
+ },
1211
1392
  "AiDifficulty": {
1212
1393
  "description": "Public difficulty presets. Internal tuning (iteration counts, time\nbudgets) lives in `crate::r#match::registry::ai_factory` so it can be\nadjusted without changing the SDK surface.",
1213
1394
  "oneOf": [
@@ -1299,6 +1480,9 @@ export const sdkSchemaCommon = {
1299
1480
  "AiSeatStatusPayload": {
1300
1481
  "type": "object",
1301
1482
  "properties": {
1483
+ "difficulty": {
1484
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/AiDifficulty"
1485
+ },
1302
1486
  "paused": {
1303
1487
  "type": "boolean"
1304
1488
  },
@@ -1312,6 +1496,7 @@ export const sdkSchemaCommon = {
1312
1496
  "required": [
1313
1497
  "seat",
1314
1498
  "paused",
1499
+ "difficulty",
1315
1500
  "trilogyFormatMode"
1316
1501
  ]
1317
1502
  },
@@ -4185,6 +4370,26 @@ export const sdkSchemaCommon = {
4185
4370
  "concede"
4186
4371
  ]
4187
4372
  },
4373
+ {
4374
+ "type": "object",
4375
+ "properties": {
4376
+ "playground": {
4377
+ "type": "object",
4378
+ "properties": {
4379
+ "command": {
4380
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlaygroundCommand"
4381
+ }
4382
+ },
4383
+ "required": [
4384
+ "command"
4385
+ ]
4386
+ }
4387
+ },
4388
+ "additionalProperties": false,
4389
+ "required": [
4390
+ "playground"
4391
+ ]
4392
+ },
4188
4393
  {
4189
4394
  "type": "object",
4190
4395
  "properties": {
@@ -7178,6 +7383,21 @@ export const sdkSchemaCommon = {
7178
7383
  "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/SeatState"
7179
7384
  }
7180
7385
  },
7386
+ "playground": {
7387
+ "description": "Whether this snapshot belongs to a server-authorized Playground match.",
7388
+ "type": "boolean",
7389
+ "default": false
7390
+ },
7391
+ "playgroundDeckCardIds": {
7392
+ "description": "Printed cards supplied by every configured Playground deck.",
7393
+ "type": "array",
7394
+ "default": [],
7395
+ "items": {
7396
+ "type": "integer",
7397
+ "format": "uint32",
7398
+ "minimum": 0
7399
+ }
7400
+ },
7181
7401
  "prompt": {
7182
7402
  "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PromptState"
7183
7403
  },
@@ -9743,6 +9963,14 @@ export const sdkSchemaCommon = {
9743
9963
  "description": "Safe completed-series replay archive. `frames` never contains private zones;\n`revealed_frames` is returned only after both completion and ownership checks.",
9744
9964
  "type": "object",
9745
9965
  "properties": {
9966
+ "aiDecisions": {
9967
+ "description": "Per-AI-decision search diagnostics (budget, workers, starvation), in\ndecision order. Additive: older archives decode with an empty list.",
9968
+ "type": "array",
9969
+ "default": [],
9970
+ "items": {
9971
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/AiDecisionDiagnostic"
9972
+ }
9973
+ },
9746
9974
  "frameEvents": {
9747
9975
  "description": "Events folded into each matching replay frame. Older archives decode\nwithout this additive field and remain playable without captions.",
9748
9976
  "type": "array",
@@ -9858,6 +10086,14 @@ export const sdkSchemaCommon = {
9858
10086
  "description": "Whether AI was manually paused when this snapshot was captured.",
9859
10087
  "type": "boolean"
9860
10088
  },
10089
+ "aiPausedSeats": {
10090
+ "description": "Exact manually paused AI seats. Empty payloads from older clients use\n`ai_paused` as the all-seat compatibility fallback.",
10091
+ "type": "array",
10092
+ "default": [],
10093
+ "items": {
10094
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
10095
+ }
10096
+ },
9861
10097
  "copiedCards": {
9862
10098
  "description": "Wire mirror of the [`UnitState::copied_card`] Arcs that the inner\nstate could not embed. Keyed by `unit.instance_id`. Empty when no\nactive unit has a copied card.",
9863
10099
  "type": "array",
@@ -11353,6 +11589,244 @@ export const sdkSchemaCommon = {
11353
11589
  }
11354
11590
  ]
11355
11591
  },
11592
+ "PlaygroundCommand": {
11593
+ "description": "Host-authorized raw scenario mutation for a Playground match.",
11594
+ "oneOf": [
11595
+ {
11596
+ "type": "object",
11597
+ "properties": {
11598
+ "card_ids": {
11599
+ "type": "array",
11600
+ "items": {
11601
+ "type": "integer",
11602
+ "format": "uint32",
11603
+ "minimum": 0
11604
+ }
11605
+ },
11606
+ "seat": {
11607
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11608
+ },
11609
+ "type": {
11610
+ "type": "string",
11611
+ "const": "setDrawQueue"
11612
+ }
11613
+ },
11614
+ "required": [
11615
+ "type",
11616
+ "seat",
11617
+ "card_ids"
11618
+ ]
11619
+ },
11620
+ {
11621
+ "type": "object",
11622
+ "properties": {
11623
+ "attachedToUnitId": {
11624
+ "type": [
11625
+ "integer",
11626
+ "null"
11627
+ ],
11628
+ "format": "uint64",
11629
+ "minimum": 0
11630
+ },
11631
+ "cardId": {
11632
+ "type": "integer",
11633
+ "format": "uint32",
11634
+ "minimum": 0
11635
+ },
11636
+ "seat": {
11637
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11638
+ },
11639
+ "type": {
11640
+ "type": "string",
11641
+ "const": "putCardInPlay"
11642
+ }
11643
+ },
11644
+ "required": [
11645
+ "type",
11646
+ "seat",
11647
+ "cardId"
11648
+ ]
11649
+ },
11650
+ {
11651
+ "description": "Plays a minted hand card without paying its resource cost, preserving\nnormal play triggers and restrictions.",
11652
+ "type": "object",
11653
+ "properties": {
11654
+ "attachedToUnitId": {
11655
+ "type": [
11656
+ "integer",
11657
+ "null"
11658
+ ],
11659
+ "format": "uint64",
11660
+ "minimum": 0
11661
+ },
11662
+ "cardId": {
11663
+ "type": "integer",
11664
+ "format": "uint32",
11665
+ "minimum": 0
11666
+ },
11667
+ "seat": {
11668
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11669
+ },
11670
+ "type": {
11671
+ "type": "string",
11672
+ "const": "playCardForFree"
11673
+ }
11674
+ },
11675
+ "required": [
11676
+ "type",
11677
+ "seat",
11678
+ "cardId"
11679
+ ]
11680
+ },
11681
+ {
11682
+ "type": "object",
11683
+ "properties": {
11684
+ "amount": {
11685
+ "type": "integer",
11686
+ "format": "int16",
11687
+ "maximum": 32767,
11688
+ "minimum": -32768
11689
+ },
11690
+ "target": {
11691
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlaygroundDamageTarget"
11692
+ },
11693
+ "type": {
11694
+ "type": "string",
11695
+ "const": "setDamage"
11696
+ }
11697
+ },
11698
+ "required": [
11699
+ "type",
11700
+ "target",
11701
+ "amount"
11702
+ ]
11703
+ },
11704
+ {
11705
+ "type": "object",
11706
+ "properties": {
11707
+ "target": {
11708
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlaygroundDefeatTarget"
11709
+ },
11710
+ "type": {
11711
+ "type": "string",
11712
+ "const": "defeatCard"
11713
+ }
11714
+ },
11715
+ "required": [
11716
+ "type",
11717
+ "target"
11718
+ ]
11719
+ },
11720
+ {
11721
+ "type": "object",
11722
+ "properties": {
11723
+ "captorUnitId": {
11724
+ "type": "integer",
11725
+ "format": "uint64",
11726
+ "minimum": 0
11727
+ },
11728
+ "cardId": {
11729
+ "type": "integer",
11730
+ "format": "uint32",
11731
+ "minimum": 0
11732
+ },
11733
+ "ownerSeat": {
11734
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11735
+ },
11736
+ "type": {
11737
+ "type": "string",
11738
+ "const": "captureCard"
11739
+ }
11740
+ },
11741
+ "required": [
11742
+ "type",
11743
+ "ownerSeat",
11744
+ "cardId",
11745
+ "captorUnitId"
11746
+ ]
11747
+ }
11748
+ ]
11749
+ },
11750
+ "PlaygroundDamageTarget": {
11751
+ "description": "One board target whose damage counter Playground may set exactly.",
11752
+ "oneOf": [
11753
+ {
11754
+ "type": "object",
11755
+ "properties": {
11756
+ "seat": {
11757
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
11758
+ },
11759
+ "type": {
11760
+ "type": "string",
11761
+ "const": "base"
11762
+ }
11763
+ },
11764
+ "required": [
11765
+ "type",
11766
+ "seat"
11767
+ ]
11768
+ },
11769
+ {
11770
+ "type": "object",
11771
+ "properties": {
11772
+ "type": {
11773
+ "type": "string",
11774
+ "const": "unit"
11775
+ },
11776
+ "unit_id": {
11777
+ "type": "integer",
11778
+ "format": "uint64",
11779
+ "minimum": 0
11780
+ }
11781
+ },
11782
+ "required": [
11783
+ "type",
11784
+ "unit_id"
11785
+ ]
11786
+ }
11787
+ ]
11788
+ },
11789
+ "PlaygroundDefeatTarget": {
11790
+ "description": "One in-play card Playground may defeat through normal leave-play handling.",
11791
+ "oneOf": [
11792
+ {
11793
+ "type": "object",
11794
+ "properties": {
11795
+ "type": {
11796
+ "type": "string",
11797
+ "const": "unit"
11798
+ },
11799
+ "unit_id": {
11800
+ "type": "integer",
11801
+ "format": "uint64",
11802
+ "minimum": 0
11803
+ }
11804
+ },
11805
+ "required": [
11806
+ "type",
11807
+ "unit_id"
11808
+ ]
11809
+ },
11810
+ {
11811
+ "type": "object",
11812
+ "properties": {
11813
+ "type": {
11814
+ "type": "string",
11815
+ "const": "upgrade"
11816
+ },
11817
+ "upgrade_id": {
11818
+ "type": "integer",
11819
+ "format": "uint64",
11820
+ "minimum": 0
11821
+ }
11822
+ },
11823
+ "required": [
11824
+ "type",
11825
+ "upgrade_id"
11826
+ ]
11827
+ }
11828
+ ]
11829
+ },
11356
11830
  "PresenceFilter": {
11357
11831
  "type": "string",
11358
11832
  "enum": [
@@ -13249,6 +13723,26 @@ export const sdkSchemaCommon = {
13249
13723
  "kind"
13250
13724
  ]
13251
13725
  },
13726
+ {
13727
+ "description": "Pay the stated number of resources for each selected unit instead of\napplying the accompanying exhaustion instruction.",
13728
+ "type": "object",
13729
+ "properties": {
13730
+ "amount": {
13731
+ "type": "integer",
13732
+ "format": "uint8",
13733
+ "maximum": 255,
13734
+ "minimum": 0
13735
+ },
13736
+ "kind": {
13737
+ "type": "string",
13738
+ "const": "payToAvoidExhaust"
13739
+ }
13740
+ },
13741
+ "required": [
13742
+ "kind",
13743
+ "amount"
13744
+ ]
13745
+ },
13252
13746
  {
13253
13747
  "description": "Ready the selected unit(s).",
13254
13748
  "type": "object",
@@ -15712,6 +16206,11 @@ export const sdkSchemas = {
15712
16206
  "maximum": 255,
15713
16207
  "minimum": 0
15714
16208
  },
16209
+ "playground": {
16210
+ "description": "Enables the server-owned scenario Playground runtime. Normal matches\nretain the default and never accept Playground mutations.",
16211
+ "type": "boolean",
16212
+ "default": false
16213
+ },
15715
16214
  "scenario": {
15716
16215
  "description": "Optional authored scenario selector for direct Learn match creation.",
15717
16216
  "anyOf": [
@@ -17959,6 +18458,90 @@ export const sdkSchemas = {
17959
18458
  "seats"
17960
18459
  ]
17961
18460
  },
18461
+ 'set-playground-ai-seat-request': {
18462
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
18463
+ "title": "SetPlaygroundAiSeatRequest",
18464
+ "description": "Host-authored AI controller settings for one Playground seat.",
18465
+ "type": "object",
18466
+ "properties": {
18467
+ "difficulty": {
18468
+ "description": "`None` removes the AI controller from this seat.",
18469
+ "anyOf": [
18470
+ {
18471
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/AiDifficulty"
18472
+ },
18473
+ {
18474
+ "type": "null"
18475
+ }
18476
+ ]
18477
+ },
18478
+ "paused": {
18479
+ "description": "Manual per-seat pause state. Ignored when `difficulty` is `None`.",
18480
+ "type": "boolean"
18481
+ },
18482
+ "seat": {
18483
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
18484
+ },
18485
+ "seatToken": {
18486
+ "type": "string"
18487
+ }
18488
+ },
18489
+ "additionalProperties": false,
18490
+ "required": [
18491
+ "seatToken",
18492
+ "seat",
18493
+ "difficulty",
18494
+ "paused"
18495
+ ]
18496
+ },
18497
+ 'playground-export-payload': {
18498
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
18499
+ "title": "PlaygroundExportPayload",
18500
+ "description": "Portable Playground file. `restore_token` is a dedicated capability and\nnever contains a live match seat token.",
18501
+ "type": "object",
18502
+ "properties": {
18503
+ "restoreToken": {
18504
+ "type": "string"
18505
+ },
18506
+ "save": {
18507
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/MatchSavePayload"
18508
+ },
18509
+ "version": {
18510
+ "type": "integer",
18511
+ "format": "uint8",
18512
+ "maximum": 1,
18513
+ "minimum": 1
18514
+ }
18515
+ },
18516
+ "additionalProperties": false,
18517
+ "required": [
18518
+ "version",
18519
+ "save",
18520
+ "restoreToken"
18521
+ ]
18522
+ },
18523
+ 'create-playground-share-response': {
18524
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
18525
+ "title": "CreatePlaygroundShareResponse",
18526
+ "description": "Opaque 30-day Playground share capability.",
18527
+ "type": "object",
18528
+ "properties": {
18529
+ "expiresAtMs": {
18530
+ "type": "integer",
18531
+ "format": "uint64",
18532
+ "minimum": 0
18533
+ },
18534
+ "shareToken": {
18535
+ "type": "string",
18536
+ "format": "uuid"
18537
+ }
18538
+ },
18539
+ "additionalProperties": false,
18540
+ "required": [
18541
+ "shareToken",
18542
+ "expiresAtMs"
18543
+ ]
18544
+ },
17962
18545
  'get-match-response': {
17963
18546
  "$schema": "https://json-schema.org/draft/2020-12/schema",
17964
18547
  "title": "GetMatchResponse",
@@ -18898,6 +19481,26 @@ export const sdkSchemas = {
18898
19481
  "concede"
18899
19482
  ]
18900
19483
  },
19484
+ {
19485
+ "type": "object",
19486
+ "properties": {
19487
+ "playground": {
19488
+ "type": "object",
19489
+ "properties": {
19490
+ "command": {
19491
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PlaygroundCommand"
19492
+ }
19493
+ },
19494
+ "required": [
19495
+ "command"
19496
+ ]
19497
+ }
19498
+ },
19499
+ "additionalProperties": false,
19500
+ "required": [
19501
+ "playground"
19502
+ ]
19503
+ },
18901
19504
  {
18902
19505
  "type": "object",
18903
19506
  "properties": {
@@ -21895,6 +22498,21 @@ export const sdkSchemas = {
21895
22498
  "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/SeatState"
21896
22499
  }
21897
22500
  },
22501
+ "playground": {
22502
+ "description": "Whether this snapshot belongs to a server-authorized Playground match.",
22503
+ "type": "boolean",
22504
+ "default": false
22505
+ },
22506
+ "playgroundDeckCardIds": {
22507
+ "description": "Printed cards supplied by every configured Playground deck.",
22508
+ "type": "array",
22509
+ "default": [],
22510
+ "items": {
22511
+ "type": "integer",
22512
+ "format": "uint32",
22513
+ "minimum": 0
22514
+ }
22515
+ },
21898
22516
  "prompt": {
21899
22517
  "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/PromptState"
21900
22518
  },
@@ -22110,6 +22728,14 @@ export const sdkSchemas = {
22110
22728
  "description": "Whether AI was manually paused when this snapshot was captured.",
22111
22729
  "type": "boolean"
22112
22730
  },
22731
+ "aiPausedSeats": {
22732
+ "description": "Exact manually paused AI seats. Empty payloads from older clients use\n`ai_paused` as the all-seat compatibility fallback.",
22733
+ "type": "array",
22734
+ "default": [],
22735
+ "items": {
22736
+ "$ref": "https://simulator-sdk.my-swu.com/schema/common.json#/$defs/Seat"
22737
+ }
22738
+ },
22113
22739
  "copiedCards": {
22114
22740
  "description": "Wire mirror of the [`UnitState::copied_card`] Arcs that the inner\nstate could not embed. Keyed by `unit.instance_id`. Empty when no\nactive unit has a copied card.",
22115
22741
  "type": "array",