@genex-ai/cli-demo 1.34.8 → 1.34.9-dev.723
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/{blender-mcp-6TEAE65U.js → blender-mcp-HKT7N5BQ.js} +2 -2
- package/dist/{blender-serve-66OHC4ML.js → blender-serve-EH2MOW3U.js} +1 -1
- package/dist/{chunk-5WBSWMH5.js → chunk-FYHYZYBC.js} +1 -1
- package/dist/{chunk-QI7FIYBY.js → chunk-K4EHXOZK.js} +1 -1
- package/dist/index.js +4 -4
- package/package.json +1 -1
- package/templates/skills/genex-getting-started/SKILL.md +2 -2
- package/templates/skills/genex-threejs-embed-auth/SKILL.md +23 -7
- package/templates/skills/genex-updates/SKILL.md +1 -1
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
isRenderMode,
|
|
8
8
|
sceneSummary,
|
|
9
9
|
sheetOf
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-FYHYZYBC.js";
|
|
11
11
|
import {
|
|
12
12
|
getCliVersion
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-K4EHXOZK.js";
|
|
14
14
|
|
|
15
15
|
// src/commands/blender-mcp.ts
|
|
16
16
|
import fs from "fs/promises";
|
|
@@ -38,7 +38,7 @@ import fs from "fs";
|
|
|
38
38
|
import os from "os";
|
|
39
39
|
import path from "path";
|
|
40
40
|
import { fileURLToPath } from "url";
|
|
41
|
-
var RAW_CHANNEL = "
|
|
41
|
+
var RAW_CHANNEL = "dev";
|
|
42
42
|
var CLI_CHANNEL = RAW_CHANNEL === "dev" ? "dev" : "latest";
|
|
43
43
|
var STANDS = {
|
|
44
44
|
prod: { api: "https://api.genex.games", dashboard: "https://genex.games" },
|
package/dist/index.js
CHANGED
|
@@ -42,7 +42,7 @@ import {
|
|
|
42
42
|
writeSecretFile,
|
|
43
43
|
writeUserToken,
|
|
44
44
|
writeWorkspace
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-FYHYZYBC.js";
|
|
46
46
|
import {
|
|
47
47
|
CLI_CHANNEL,
|
|
48
48
|
DEFAULT_API_URL,
|
|
@@ -63,7 +63,7 @@ import {
|
|
|
63
63
|
normalizeApiOrigin,
|
|
64
64
|
originKey,
|
|
65
65
|
resolveAgentTargets
|
|
66
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-K4EHXOZK.js";
|
|
67
67
|
|
|
68
68
|
// src/instrument.ts
|
|
69
69
|
import * as Sentry from "@sentry/node";
|
|
@@ -22758,7 +22758,7 @@ async function runBlender(opts) {
|
|
|
22758
22758
|
return 1;
|
|
22759
22759
|
}
|
|
22760
22760
|
if (sub === "serve") {
|
|
22761
|
-
const { serveLocalBlender } = await import("./blender-serve-
|
|
22761
|
+
const { serveLocalBlender } = await import("./blender-serve-EH2MOW3U.js");
|
|
22762
22762
|
const port = Number(process.env.GENEX_BLENDER_PORT ?? 8088);
|
|
22763
22763
|
log.step(`Starting a local Blender service on port ${port}`);
|
|
22764
22764
|
log.plain(
|
|
@@ -22767,7 +22767,7 @@ async function runBlender(opts) {
|
|
|
22767
22767
|
return serveLocalBlender({ port, log });
|
|
22768
22768
|
}
|
|
22769
22769
|
if (sub === "mcp") {
|
|
22770
|
-
const { runBlenderMcp } = await import("./blender-mcp-
|
|
22770
|
+
const { runBlenderMcp } = await import("./blender-mcp-HKT7N5BQ.js");
|
|
22771
22771
|
return runBlenderMcp();
|
|
22772
22772
|
}
|
|
22773
22773
|
if (sub === "seat") {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genex-ai/cli-demo",
|
|
3
|
-
"version": "1.34.
|
|
3
|
+
"version": "1.34.9-dev.723",
|
|
4
4
|
"description": "Set up your project's agent workspace (.claude/.codex/.cursor in the game folder), authorize, create a game project, generate AI assets, and publish (genex CLI).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -161,7 +161,7 @@ downloads the game too, binary assets and all:
|
|
|
161
161
|
|
|
162
162
|
```bash
|
|
163
163
|
mkdir my-game && cd my-game
|
|
164
|
-
npx @genex-ai/cli-demo@
|
|
164
|
+
npx @genex-ai/cli-demo@dev link <slug> # slug = the name in the play URL
|
|
165
165
|
npm install
|
|
166
166
|
```
|
|
167
167
|
|
|
@@ -225,7 +225,7 @@ Safe to run any time — genex-owned skills are refreshed to the latest version,
|
|
|
225
225
|
and your own files are never touched:
|
|
226
226
|
|
|
227
227
|
```bash
|
|
228
|
-
npx @genex-ai/cli-demo@
|
|
228
|
+
npx @genex-ai/cli-demo@dev init
|
|
229
229
|
```
|
|
230
230
|
|
|
231
231
|
Use `--force` only if you intentionally want your own existing files overwritten
|
|
@@ -130,13 +130,13 @@ Durable state + leaderboards (all six are safe to call from boot — they wait
|
|
|
130
130
|
for identity internally, never throw for guests, and reject only when the
|
|
131
131
|
session is blocked):
|
|
132
132
|
|
|
133
|
-
- `loadPlayerState()` → `Promise<{ data, version, guest? }>` — THIS
|
|
134
|
-
own save (per-player, per-game; other players can never read or
|
|
135
|
-
it). `{ data: null, version: 0 }` when they never saved.
|
|
133
|
+
- `loadPlayerState()` → `Promise<{ data, version, guest?, staging? }>` — THIS
|
|
134
|
+
player's own save (per-player, per-game; other players can never read or
|
|
135
|
+
overwrite it). `{ data: null, version: 0 }` when they never saved.
|
|
136
136
|
- `savePlayerState(data, { ifVersion? }?)` → `Promise<{ saved, version?,
|
|
137
|
-
conflict?, guest?, queued? }>` — save any JSON ≤ 256KB to their
|
|
138
|
-
guests the value is QUEUED in memory and auto-flushed if they sign
|
|
139
|
-
mid-game — no extra code. Small saves survive tab close automatically.
|
|
137
|
+
conflict?, guest?, queued?, staging? }>` — save any JSON ≤ 256KB to their
|
|
138
|
+
slot. For guests the value is QUEUED in memory and auto-flushed if they sign
|
|
139
|
+
in mid-game — no extra code. Small saves survive tab close automatically.
|
|
140
140
|
- `loadWorldState()` / `saveWorldState(data, { ifVersion? }?)` — the game's
|
|
141
141
|
ONE shared world slot (≤ 1MB, every player reads/writes the same blob) —
|
|
142
142
|
level layouts, persistent-world object positions. Multiplayer games: only
|
|
@@ -156,6 +156,17 @@ Server write limits (per player, per minute): **60 player-saves, 120
|
|
|
156
156
|
world-saves, 30 score submits**. A debounced ~1/sec checkpoint never gets near
|
|
157
157
|
them — only a save-per-frame loop does (it surfaces as HTTP 429).
|
|
158
158
|
|
|
159
|
+
**The preview channel has no server saves.** The owner's draft workspace and
|
|
160
|
+
every `preview--<slug>` URL play the STAGING build, and the API refuses loads
|
|
161
|
+
and saves there by design (a staging build with a changed save schema must
|
|
162
|
+
never overwrite the save of the game people are playing). The helpers resolve
|
|
163
|
+
`{ staging: true }` — `loadPlayerState()` → `{ data: null, version: 0,
|
|
164
|
+
staging: true }`, `savePlayerState()` → `{ saved: false, staging: true }` —
|
|
165
|
+
and never throw or fire `"error"` for it. Keep a localStorage fallback for
|
|
166
|
+
progress, and if the game says anything about it, say "Preview build —
|
|
167
|
+
progress isn't saved to your account". Never "offline" or "unavailable": the
|
|
168
|
+
owner is testing their own game, and Genex is up.
|
|
169
|
+
|
|
159
170
|
|
|
160
171
|
## Saving progress (per-player — every player has their own slot)
|
|
161
172
|
|
|
@@ -166,7 +177,8 @@ inventory, unlocks — anything about ONE player — goes in their player slot:
|
|
|
166
177
|
import { loadPlayerState, savePlayerState } from "@genex-ai/embed-sdk";
|
|
167
178
|
|
|
168
179
|
// boot: load whatever this player saved last time (fine for guests — resolves
|
|
169
|
-
// { data: null, guest: true }
|
|
180
|
+
// { data: null, guest: true } — and on the preview channel — { data: null,
|
|
181
|
+
// staging: true } — instead of failing)
|
|
170
182
|
const { data } = await loadPlayerState();
|
|
171
183
|
applyProgress(data ?? defaultProgress());
|
|
172
184
|
|
|
@@ -348,6 +360,10 @@ Rules:
|
|
|
348
360
|
header (401), a guest token (403 `guest_no_save`), or the token belongs to a
|
|
349
361
|
different game (403). All three mean the code bypassed the SDK helpers —
|
|
350
362
|
switch to `savePlayerState`/`saveWorldState`, which handle every case.
|
|
363
|
+
- **Saves/loads resolve `{ staging: true }`** — the build is on the preview
|
|
364
|
+
channel (the draft workspace, `preview--<slug>`), where server saves are off
|
|
365
|
+
by design. Not an outage: keep the localStorage fallback and tell the player
|
|
366
|
+
"Preview build — progress isn't saved to your account", never "offline".
|
|
351
367
|
- **Saves or score submits return 429** — writing too often (per-player limits:
|
|
352
368
|
60 player-saves/min, 120 world-saves/min, 30 score submits/min). Debounce to
|
|
353
369
|
~1 write/sec at checkpoints and never save in the render loop; back off a
|
|
@@ -38,7 +38,7 @@ update, so update immediately.)
|
|
|
38
38
|
Run exactly the command the nudge printed, from the game project root:
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
|
-
npm i -D @genex-ai/cli-demo@
|
|
41
|
+
npm i -D @genex-ai/cli-demo@dev # the genex CLI (a dev dependency)
|
|
42
42
|
npm i @genex-ai/embed-sdk@latest # identity/saves SDK (ships inside the game)
|
|
43
43
|
npm i @genex-ai/multiplayer@latest # multiplayer SDK (only if the game uses it)
|
|
44
44
|
```
|