@helix3/helix-cli 0.1.15-helix3.245 → 0.1.16-helix3.249

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/README.md CHANGED
@@ -51,6 +51,7 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
51
51
  | `helix device create <dir> --id <slug> --title <t> --model <mesh.glb> --template standing-desk\|clock\|television` | Scaffold a GLB-backed `helix.device/1` definition, including the interactive TV/media-player template. There is intentionally no website Device editor. |
52
52
  | `helix device validate [dir] [--json]` | Validate the definition, GLB bytes and named-node bindings, typed state/controls, capabilities, and Home+World compatibility. |
53
53
  | `helix device test [dir] [--mode single\|multiplayer\|both] [--json]` | Exercise every interaction, persistence remount, and deterministic one-/two-client authority convergence. |
54
+ | `helix world scene-elements compile <input> --output <scene>` | Compile typed Scene v2 authoring, including exact Continuum Device pins, instances, and locally validated typed links. See [`examples/scene-elements-devices.json`](examples/scene-elements-devices.json). |
54
55
  | `helix preview-video <slug> <youtube-url>` | Set or clear a published world's YouTube preview. |
55
56
  | `helix thumbnail set <slug> <file>` | Upload a thumbnail or preview image through the CLI-owned media path. |
56
57
  | `helix assets search\|get\|versions\|track\|install\|update` | Search the typed Vault with explainable ranking; inspect/manage annotations and immutable versions; install by durable ID with verified SHA-256 receipts. Material installs default to lean runtime KTX2 maps; use `--material-renditions source` for source PNGs or `all` for both families. |
package/dist/index.js CHANGED
@@ -4682,7 +4682,7 @@ const sceneElements = world
4682
4682
  .description('Compile nested typed architectural authoring data into native Scene v2');
4683
4683
  sceneElements
4684
4684
  .command('compile')
4685
- .description('Compile a helix.scene-elements/1 or /2 document into a sealed, zero-download Scene v2 document')
4685
+ .description('Compile a helix.scene-elements/1 or /2 document, including exact pinned Devices, into sealed Scene v2')
4686
4686
  .argument('<input>', 'semantic scene-elements JSON file')
4687
4687
  .requiredOption('-o, --output <file>', 'output .helix-scene.json file')
4688
4688
  .action(async (input, opts) => {
@@ -4706,6 +4706,11 @@ sceneElements
4706
4706
  scene: { id: scene.id, revision: scene.revision, integritySha256: scene.integrity.sha256 },
4707
4707
  primitives: scene.nodes.filter((node) => node.components?.some((component) => component.type === 'render.primitive')).length,
4708
4708
  resources: scene.resources.length,
4709
+ devices: {
4710
+ definitions: scene.itemDefinitions.filter((definition) => 'packageId' in definition).length,
4711
+ instances: scene.itemInstances.length,
4712
+ links: scene.deviceLinks?.length ?? 0,
4713
+ },
4709
4714
  bundleFiles: bundleFiles.map((asset) => asset.uri),
4710
4715
  }, null, 2));
4711
4716
  }
@@ -5475,11 +5480,13 @@ unreal
5475
5480
  .option('--version <version>', 'release version', '1.0.0')
5476
5481
  .option('--max-players <n>', 'runtime policy max players', '1')
5477
5482
  .option('--rating <rating>', 'everyone, teen, or mature', 'everyone')
5483
+ .option('--avatar-mode <mode>', 'universal or world-default (default: universal)', 'universal')
5478
5484
  .option('--out <file>', 'where to write it (default: <publishDir>/continuum/world-release.json)')
5479
5485
  .option('--json', 'machine-readable result')
5480
5486
  .action(async (publishDir, opts) => {
5481
5487
  try {
5482
5488
  const { buildUnrealWorldRelease } = await Promise.resolve().then(() => __importStar(require('./unreal/release')));
5489
+ const avatarMode = (0, unreal_1.parseAvatarMode)(opts.avatarMode);
5483
5490
  const result = await buildUnrealWorldRelease({
5484
5491
  publishDir,
5485
5492
  worldId: opts.world,
@@ -5489,6 +5496,7 @@ unreal
5489
5496
  version: opts.version,
5490
5497
  maxPlayers: Number(opts.maxPlayers),
5491
5498
  contentRating: opts.rating,
5499
+ avatarMode,
5492
5500
  outPath: opts.out,
5493
5501
  });
5494
5502
  if (opts.json) {