@genex-ai/cli-demo 0.58.0-dev.132 → 0.59.0-dev.133

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genex-ai/cli-demo",
3
- "version": "0.58.0-dev.132",
3
+ "version": "0.59.0-dev.133",
4
4
  "description": "Set up your ~/.claude workspace, authorize, create a game project, generate AI assets, and publish (genex CLI).",
5
5
  "type": "module",
6
6
  "bin": {
@@ -351,6 +351,7 @@ export class CharacterAnimations {
351
351
  // Every provided clip by name — lets playOneShot reach clips beyond the 9
352
352
  // locomotion states (any installed pack clip: Punch_*, Sword_*, Sitting_*…).
353
353
  #clipsByName = new Map<string, THREE.AnimationClip>();
354
+ #missingOneShotWarnings = new Set<string>();
354
355
  #oneShotAction: THREE.AnimationAction | null = null;
355
356
  #locomotionOneShotAction: THREE.AnimationAction | null = null;
356
357
  #oneShotOnDone: (() => void) | undefined;
@@ -615,7 +616,13 @@ export class CharacterAnimations {
615
616
  playOneShot(clipName: string, options: PlayOneShotOptions = {}): boolean {
616
617
  if (this.#disposed) return false;
617
618
  const clip = this.#clipsByName.get(clipName);
618
- if (!clip) return false;
619
+ if (!clip) {
620
+ if (!this.#missingOneShotWarnings.has(clipName)) {
621
+ this.#missingOneShotWarnings.add(clipName);
622
+ console.warn(`[character-animations] one-shot clip "${clipName}" is not installed; playOneShot() returned false.`);
623
+ }
624
+ return false;
625
+ }
619
626
 
620
627
  const action = this.mixer.clipAction(clip);
621
628
 
@@ -139,7 +139,7 @@ export function resolveMeshyLocomotion(
139
139
  }
140
140
 
141
141
  export async function loadMeshyCharacter(manifestUrl: string): Promise<MeshyCharacter> {
142
- const response = await fetch(manifestUrl);
142
+ const response = await fetch(manifestUrl, { cache: "no-store" });
143
143
  if (!response.ok) throw new Error(`[meshy-character] ${manifestUrl} returned HTTP ${response.status}`);
144
144
  const manifest = validateManifest(await response.json());
145
145
  const loader = new GLTFLoader();
@@ -17,7 +17,9 @@ npx genex character "stylized desert courier, practical layered clothing"
17
17
  ```
18
18
 
19
19
  The default request uses Meshy 6 to generate and texture an A-pose humanoid,
20
- remeshes and rigs it, adds the preview-reviewed neutral-v2
20
+ validates the rig's arm pose, and retries the full generation once in a strict
21
+ T-pose before requesting controller-pack animations when the A-pose is invalid.
22
+ It remeshes and rigs the accepted model, adds the preview-reviewed neutral-v2
21
23
  idle/walk/run/crouch/jump controller pack,
22
24
  and stores every successful model
23
25
  and clip at permanent Genex asset URLs. It prints the complete Genex-credit
@@ -75,6 +77,12 @@ animation job completes, rerun `genex controller character --character <id>`
75
77
  to refresh `public/assets/meshy-character.json`; existing controller source is
76
78
  preserved unless `--force` is explicitly used.
77
79
 
80
+ Meshy manifests bypass browser cache, so newly installed actions must work
81
+ after preview without asking the player to disable cache.
82
+
83
+ `playOneShot()` returns false and emits one warning when a requested clip is
84
+ absent; treat that as an installation failure, not a successful action.
85
+
78
86
  Load `$genex-threejs-character-controller` for the actual wiring. The install
79
87
  command copies the shared controller plus `character/meshy/meshy-loader.ts`.
80
88
  The manifest points at the current rigged model and compact animation-only GLBs
@@ -45,6 +45,11 @@ dynamic controller stays authoritative for collision, grounding, facing, and
45
45
  world translation. The animation layer poses the visual rig; it never
46
46
  translates the visual root.
47
47
 
48
+ Meshy manifests bypass browser cache, so newly installed actions must work
49
+ after preview without asking the player to disable cache. `playOneShot()`
50
+ returns false and emits one warning when a requested clip is absent; treat
51
+ that as an installation failure, not a successful action.
52
+
48
53
  Because these files are game-owned, never run `genex controller character --force` over an edited
49
54
  fork as a migration strategy. Install a fresh copy elsewhere and port only the named changes.
50
55
 
@@ -47,8 +47,13 @@ everything twice.
47
47
  fires. For an animated character, capture idle, walk, run, crouch-idle,
48
48
  crouch-move, and jump. Inspect shoulders, elbows, wrists, and hands as well
49
49
  as the feet: a fully bound non-T-pose can still be stylistically broken.
50
+ Reject shrugging palms-up poses, permanently raised elbows, or a gait whose
51
+ upper-body style contradicts the requested character. “No T-pose” is not
52
+ an animation-quality check.
50
53
  For Meshy characters, crouch passes only when the capsule behavior and a
51
- visibly crouched pose both respond.
54
+ visibly crouched pose both respond. If a control calls `playOneShot()`, a
55
+ false result or missing-clip warning is an installation failure even when
56
+ locomotion continues normally.
52
57
  3. Capture one screenshot of live gameplay — of the **game**, not a sign-in
53
58
  gate or loading screen. A capture of the SDK's "Sign in to play" overlay is
54
59
  NOT gameplay evidence. Evidence captured in local test mode must be labeled