@genex-ai/cli-demo 1.32.1 → 1.32.2-dev.674

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.
@@ -7,10 +7,10 @@ import {
7
7
  isRenderMode,
8
8
  sceneSummary,
9
9
  sheetOf
10
- } from "./chunk-OJAXYQ5L.js";
10
+ } from "./chunk-2COG4P3T.js";
11
11
  import {
12
12
  getCliVersion
13
- } from "./chunk-5FA2WLM7.js";
13
+ } from "./chunk-HYCSNWYX.js";
14
14
 
15
15
  // src/commands/blender-mcp.ts
16
16
  import fs from "fs/promises";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  c,
3
3
  getTemplatesDir
4
- } from "./chunk-5FA2WLM7.js";
4
+ } from "./chunk-HYCSNWYX.js";
5
5
 
6
6
  // src/lib/blender-serve.ts
7
7
  import { spawn } from "child_process";
@@ -7,7 +7,7 @@ import {
7
7
  getAuthUrl,
8
8
  getCliVersion,
9
9
  getGenexEnvPath
10
- } from "./chunk-5FA2WLM7.js";
10
+ } from "./chunk-HYCSNWYX.js";
11
11
 
12
12
  // src/lib/terms.ts
13
13
  import readline from "readline";
@@ -3,7 +3,7 @@ import fs from "fs";
3
3
  import os from "os";
4
4
  import path from "path";
5
5
  import { fileURLToPath } from "url";
6
- var RAW_CHANNEL = "latest";
6
+ var RAW_CHANNEL = "dev";
7
7
  var CLI_CHANNEL = RAW_CHANNEL === "dev" ? "dev" : "latest";
8
8
  var STANDS = {
9
9
  prod: { api: "https://api.genex.games", dashboard: "https://genex.games" },
package/dist/index.js CHANGED
@@ -42,7 +42,7 @@ import {
42
42
  writeProject,
43
43
  writeUserToken,
44
44
  writeWorkspace
45
- } from "./chunk-OJAXYQ5L.js";
45
+ } from "./chunk-2COG4P3T.js";
46
46
  import {
47
47
  CLI_CHANNEL,
48
48
  DEFAULT_API_URL,
@@ -59,7 +59,7 @@ import {
59
59
  getGenexEnvPath,
60
60
  getTemplatesDir,
61
61
  resolveAgentTargets
62
- } from "./chunk-5FA2WLM7.js";
62
+ } from "./chunk-HYCSNWYX.js";
63
63
 
64
64
  // src/instrument.ts
65
65
  import * as Sentry from "@sentry/node";
@@ -22104,7 +22104,7 @@ async function runBlender(opts) {
22104
22104
  return 1;
22105
22105
  }
22106
22106
  if (sub === "serve") {
22107
- const { serveLocalBlender } = await import("./blender-serve-PVVCH3S6.js");
22107
+ const { serveLocalBlender } = await import("./blender-serve-BF4FZ55Z.js");
22108
22108
  const port = Number(process.env.GENEX_BLENDER_PORT ?? 8088);
22109
22109
  log.step(`Starting a local Blender service on port ${port}`);
22110
22110
  log.plain(
@@ -22113,7 +22113,7 @@ async function runBlender(opts) {
22113
22113
  return serveLocalBlender({ port, log });
22114
22114
  }
22115
22115
  if (sub === "mcp") {
22116
- const { runBlenderMcp } = await import("./blender-mcp-X66ZZ4TN.js");
22116
+ const { runBlenderMcp } = await import("./blender-mcp-Q6PSFYSE.js");
22117
22117
  return runBlenderMcp();
22118
22118
  }
22119
22119
  if (sub === "seat") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genex-ai/cli-demo",
3
- "version": "1.32.1",
3
+ "version": "1.32.2-dev.674",
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": {
@@ -225,7 +225,7 @@ first one is the one a screenshot of the whole arena will not show you.
225
225
 
226
226
  ## Troubleshooting
227
227
 
228
- - **"Not authorized"** — run `npx @genex-ai/cli-demo@latest init` first (it writes your `GENEX_TOKEN`).
228
+ - **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it writes your `GENEX_TOKEN`).
229
229
  - **"Out of credits" (`insufficient_credits`)** — the account has no credits left for
230
230
  this texture generation. Tell the user the facts the CLI printed: their balance,
231
231
  this generation's cost, and when their credits refill. Then offer to continue the
@@ -203,7 +203,7 @@ evidence detective game, a video-book. The pattern that makes it hold together:
203
203
 
204
204
  ## Troubleshooting
205
205
 
206
- - **"Not authorized"** — run `npx @genex-ai/cli-demo@latest init` first (it writes your `GENEX_TOKEN`).
206
+ - **"Not authorized"** — run `npx @genex-ai/cli-demo@dev init` first (it writes your `GENEX_TOKEN`).
207
207
  - **"Prompt rejected"** — the provider's content-safety filter blocked the prompt.
208
208
  This is non-retryable; retrying the same wording fails again. Rewrite the prompt.
209
209
  The measured false-positive class is anatomy being pierced or entered
@@ -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@latest link <slug> # slug = the name in the play URL
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@latest init
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
@@ -68,6 +68,16 @@ const renderer = new THREE.WebGLRenderer({
68
68
  ...depthRendererOptions(), // reversed-Z: distant surfaces stop z-fighting, early-Z kept
69
69
  });
70
70
  renderer.setPixelRatio(Math.min(window.devicePixelRatio, tier.dprCap));
71
+ // Shadows: PCF, never PCFSoft. three r186 REMOVED PCFSoftShadowMap; it warns
72
+ // once and downgrades on the first shadow pass — and with the static-scene
73
+ // rule (shadowMap.autoUpdate = false) that pass comes after your materials
74
+ // compiled, so the driver rejects every shadow-receiving draw call and the
75
+ // world is an empty fog behind a working HUD (measured 2026-09-11 on a
76
+ // published village). Mechanism + console check: $genex-threejs-shadow-systems.
77
+ renderer.shadowMap.enabled = tier.shadowMapSize > 0;
78
+ renderer.shadowMap.type = THREE.PCFShadowMap;
79
+ renderer.shadowMap.autoUpdate = false; // static scene: re-render shadows on demand (needsUpdate = true when casters move)
80
+ renderer.shadowMap.needsUpdate = true; // primed: the maps exist before any receiver draws (2 rejected boot frames otherwise)
71
81
  // Camera range comes from the WORLD, never from a docs example (0.1/1000):
72
82
  const { near, far } = cameraNearFar({ closest: 1.5, farthest: 800 });
73
83
  const camera = new THREE.PerspectiveCamera(60, innerWidth / innerHeight, near, far);
@@ -249,7 +259,10 @@ not the player's account. Default Auto.
249
259
  ## Budgets that ride the tier (not separate rules)
250
260
 
251
261
  - Shadows: `tier.shadowMapSize`, `shadow.autoUpdate = false` for static scenes,
252
- at most 2 cascades on phones (`$genex-threejs-shadow-systems`).
262
+ at most 2 cascades on phones, and `shadowMap.type = THREE.PCFShadowMap` —
263
+ PCFSoft was removed in three r186 and, together with `autoUpdate = false`,
264
+ blanks every shadow receiver (`$genex-threejs-shadow-systems` has the
265
+ mechanism and the console check).
253
266
  - Post: phone floor is a BUILT tone-mapping/output pass (`postLevel: 'light'`
254
267
  adds FXAA/vignette); SSAO, volumetrics, and DoF are desktop-tier only
255
268
  (`$genex-game-director`'s routing map owns the floor wording).
@@ -33,7 +33,7 @@ cost of guessing high is a dead page.
33
33
  `desktop-low` is the weak-desktop demotion (Intel iGPU MacBooks, old integrated
34
34
  AMD): desktop GPU renderer strings are UNMASKED (unlike iOS), so one boot probe
35
35
  separates a 2015 Intel Air from an M3 Max. The full desktop path on those
36
- machines — DPR 2 + 4× MSAA + 2048 PCFSoft shadows + full bloom — is the classic
36
+ machines — DPR 2 + 4× MSAA + 2048 PCF shadows + full bloom — is the classic
37
37
  "huge lags on a MacBook" recipe, and two of its costs (context MSAA, shadow
38
38
  budget) were previously invisible to the governor.
39
39
 
@@ -18,6 +18,37 @@ shadow maps ≤1024² on phones (512² on the low tier — a 4096² map alone is
18
18
  4, and `shadowMap.autoUpdate = false` for static scenes (re-render on demand:
19
19
  a shadow pass is a full extra scene render every frame otherwise).
20
20
 
21
+ ## Shadow map type — PCF, and verify it
22
+
23
+ `renderer.shadowMap.type = THREE.PCFShadowMap`, in every scene, bounded or not.
24
+ `PCFSoftShadowMap` was REMOVED in three r186: the renderer logs
25
+ `WebGLShadowMap: PCFSoftShadowMap has been removed` once and downgrades on the
26
+ first shadow pass. Under `shadowMap.autoUpdate = true` that is one warning and a
27
+ crisper shadow. Under the static-scene rule above (`autoUpdate = false`,
28
+ `needsUpdate` on demand) the first pass lands AFTER your materials compiled:
29
+ they keep a `sampler2D` program, the depth textures that pass allocates are
30
+ comparison textures, three's recompile-on-type-change never fires (its
31
+ "previous type" was captured before you assigned the removed value), and the
32
+ driver rejects every shadow-receiving draw call — `GL_INVALID_OPERATION:
33
+ glDrawElements: Mismatch between texture format and sampler type
34
+ (signed/unsigned/float/shadow)`, one line per mesh per frame. The world is an
35
+ empty fog; the DOM HUD still draws. Measured 2026-09-11 on a published village:
36
+ one "removed" line, 200+ rejections, no ground, no buildings, while the same
37
+ warning in a second game that had left `autoUpdate` on cost nothing.
38
+
39
+ Prime the frozen map too: `shadowMap.needsUpdate = true` before the first
40
+ frame, so the maps exist before any receiver draws — measured on a three
41
+ 0.186.0 repro, `PCFShadowMap` + `autoUpdate = false` alone still lost its
42
+ first two frames to the same rejection (0 with the prime; 10 of 12 with
43
+ PCFSoft).
44
+
45
+ Verify it inside the smoke check (`$genex-threejs-visual-validation`): after
46
+ the first few frames the console must contain neither `PCFSoftShadowMap` nor
47
+ `GL_INVALID_OPERATION: glDraw`. Both arrive as WARNINGS, so "no console
48
+ errors" does not cover them — read the warnings. A software-rasteriser tier
49
+ that runs with shadows off cannot show this bug; a green check there says
50
+ nothing about the desktop tier players get.
51
+
21
52
  ## Cached clipmap workflow
22
53
 
23
54
  1. Define concentric light-space square levels.
@@ -70,7 +70,9 @@ The player deciding "does it feel right?" is faster and truer than you clicking
70
70
  everything twice.
71
71
 
72
72
  1. Load the page in a real browser; the canvas renders (no black screen, no
73
- console errors). For an unpublished draft, open the dev server in local
73
+ console errors and no console WARNING naming a removed three.js API or
74
+ `GL_INVALID_OPERATION`: those arrive at warn level and each one is a mesh
75
+ the driver refused to draw, `$genex-threejs-shadow-systems` has the case). For an unpublished draft, open the dev server in local
74
76
  test mode — `http://localhost:5173/?genex_local_test=1` (the embed-auth
75
77
  skill's "Self-testing a draft" section) — so you see the game, not the
76
78
  sign-in gate. Then hit-test the screen that is up (title now, pause later):
@@ -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@latest # the genex CLI (a dev dependency)
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
  ```