@thegeem/protocol 0.1.32 → 0.1.33

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.
package/dist/index.cjs CHANGED
@@ -176,6 +176,13 @@ var ClientMsg = import_zod.z.discriminatedUnion("t", [
176
176
  // an explicit seating beats an implicit one.
177
177
  // Violations are rejected with `invalid_seat`. Consumed by دامة (the only fixed-seat game today).
178
178
  players: import_zod.z.array(PlayerId).min(1).max(LIMITS.MAX_PLAYERS).optional(),
179
+ // SOLO vs the machine (gs#68). Fills the seats a game needs that no human took, so one person can
180
+ // play with nobody else around — دامة's «تمرين». Additive, no pv bump; omit it and nothing changes.
181
+ // The bot is a SEAT the relay drives, never something a client runs: Shape B means the server is
182
+ // still the referee, and a client-side opponent could not be trusted with the board anyway.
183
+ // `difficulty` is one search with different depth+noise, not three implementations.
184
+ // Solo games are deliberately NOT RATED and never touch the دامة ELO ladder — see the driver.
185
+ bot: import_zod.z.object({ difficulty: import_zod.z.enum(["easy", "medium", "hard"]).optional() }).optional(),
179
186
  // PREFERRED: pick a mode from the registry (see MODES). The server maps it to the engine
180
187
  // rules. Send this and omit buzzerMode/noHost. Falls back to the legacy flags below if omitted.
181
188
  modeId: import_zod.z.enum(MODE_IDS).optional(),
package/dist/index.d.cts CHANGED
@@ -369,6 +369,13 @@ declare const ClientMsg: z.ZodDiscriminatedUnion<"t", [z.ZodObject<{
369
369
  categoryIds: z.ZodArray<z.ZodString, "many">;
370
370
  hostPlays: z.ZodOptional<z.ZodBoolean>;
371
371
  players: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
372
+ bot: z.ZodOptional<z.ZodObject<{
373
+ difficulty: z.ZodOptional<z.ZodEnum<["easy", "medium", "hard"]>>;
374
+ }, "strip", z.ZodTypeAny, {
375
+ difficulty?: "easy" | "medium" | "hard" | undefined;
376
+ }, {
377
+ difficulty?: "easy" | "medium" | "hard" | undefined;
378
+ }>>;
372
379
  modeId: z.ZodOptional<z.ZodEnum<["solo", "oneDevice", "snag", "multiplayer"]>>;
373
380
  buzzerMode: z.ZodOptional<z.ZodEnum<["off", "solo", "race", "controller"]>>;
374
381
  noHost: z.ZodOptional<z.ZodBoolean>;
@@ -380,6 +387,9 @@ declare const ClientMsg: z.ZodDiscriminatedUnion<"t", [z.ZodObject<{
380
387
  modeId?: "snag" | "solo" | "oneDevice" | "multiplayer" | undefined;
381
388
  hostPlays?: boolean | undefined;
382
389
  players?: string[] | undefined;
390
+ bot?: {
391
+ difficulty?: "easy" | "medium" | "hard" | undefined;
392
+ } | undefined;
383
393
  buzzerMode?: "solo" | "off" | "race" | "controller" | undefined;
384
394
  noHost?: boolean | undefined;
385
395
  }, {
@@ -390,6 +400,9 @@ declare const ClientMsg: z.ZodDiscriminatedUnion<"t", [z.ZodObject<{
390
400
  modeId?: "snag" | "solo" | "oneDevice" | "multiplayer" | undefined;
391
401
  hostPlays?: boolean | undefined;
392
402
  players?: string[] | undefined;
403
+ bot?: {
404
+ difficulty?: "easy" | "medium" | "hard" | undefined;
405
+ } | undefined;
393
406
  buzzerMode?: "solo" | "off" | "race" | "controller" | undefined;
394
407
  noHost?: boolean | undefined;
395
408
  }>, z.ZodObject<{
package/dist/index.d.ts CHANGED
@@ -369,6 +369,13 @@ declare const ClientMsg: z.ZodDiscriminatedUnion<"t", [z.ZodObject<{
369
369
  categoryIds: z.ZodArray<z.ZodString, "many">;
370
370
  hostPlays: z.ZodOptional<z.ZodBoolean>;
371
371
  players: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
372
+ bot: z.ZodOptional<z.ZodObject<{
373
+ difficulty: z.ZodOptional<z.ZodEnum<["easy", "medium", "hard"]>>;
374
+ }, "strip", z.ZodTypeAny, {
375
+ difficulty?: "easy" | "medium" | "hard" | undefined;
376
+ }, {
377
+ difficulty?: "easy" | "medium" | "hard" | undefined;
378
+ }>>;
372
379
  modeId: z.ZodOptional<z.ZodEnum<["solo", "oneDevice", "snag", "multiplayer"]>>;
373
380
  buzzerMode: z.ZodOptional<z.ZodEnum<["off", "solo", "race", "controller"]>>;
374
381
  noHost: z.ZodOptional<z.ZodBoolean>;
@@ -380,6 +387,9 @@ declare const ClientMsg: z.ZodDiscriminatedUnion<"t", [z.ZodObject<{
380
387
  modeId?: "snag" | "solo" | "oneDevice" | "multiplayer" | undefined;
381
388
  hostPlays?: boolean | undefined;
382
389
  players?: string[] | undefined;
390
+ bot?: {
391
+ difficulty?: "easy" | "medium" | "hard" | undefined;
392
+ } | undefined;
383
393
  buzzerMode?: "solo" | "off" | "race" | "controller" | undefined;
384
394
  noHost?: boolean | undefined;
385
395
  }, {
@@ -390,6 +400,9 @@ declare const ClientMsg: z.ZodDiscriminatedUnion<"t", [z.ZodObject<{
390
400
  modeId?: "snag" | "solo" | "oneDevice" | "multiplayer" | undefined;
391
401
  hostPlays?: boolean | undefined;
392
402
  players?: string[] | undefined;
403
+ bot?: {
404
+ difficulty?: "easy" | "medium" | "hard" | undefined;
405
+ } | undefined;
393
406
  buzzerMode?: "solo" | "off" | "race" | "controller" | undefined;
394
407
  noHost?: boolean | undefined;
395
408
  }>, z.ZodObject<{
package/dist/index.js CHANGED
@@ -139,6 +139,13 @@ var ClientMsg = z.discriminatedUnion("t", [
139
139
  // an explicit seating beats an implicit one.
140
140
  // Violations are rejected with `invalid_seat`. Consumed by دامة (the only fixed-seat game today).
141
141
  players: z.array(PlayerId).min(1).max(LIMITS.MAX_PLAYERS).optional(),
142
+ // SOLO vs the machine (gs#68). Fills the seats a game needs that no human took, so one person can
143
+ // play with nobody else around — دامة's «تمرين». Additive, no pv bump; omit it and nothing changes.
144
+ // The bot is a SEAT the relay drives, never something a client runs: Shape B means the server is
145
+ // still the referee, and a client-side opponent could not be trusted with the board anyway.
146
+ // `difficulty` is one search with different depth+noise, not three implementations.
147
+ // Solo games are deliberately NOT RATED and never touch the دامة ELO ladder — see the driver.
148
+ bot: z.object({ difficulty: z.enum(["easy", "medium", "hard"]).optional() }).optional(),
142
149
  // PREFERRED: pick a mode from the registry (see MODES). The server maps it to the engine
143
150
  // rules. Send this and omit buzzerMode/noHost. Falls back to the legacy flags below if omitted.
144
151
  modeId: z.enum(MODE_IDS).optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thegeem/protocol",
3
- "version": "0.1.32",
3
+ "version": "0.1.33",
4
4
  "description": "Geem's wire protocol — shared zod schemas + TypeScript types for talking to the Geem game server over Socket.IO. The source of truth all clients implement against.",
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://geem.tv",