@helix3/helix-cli 0.1.18-helix3.310 → 0.1.18-helix3.312

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.
@@ -59,6 +59,7 @@ exports.formatSubPathResult = formatSubPathResult;
59
59
  // 2. a request the page made that 404s → the missing declared asset
60
60
  // 3. a blank render → the world that "loads" but shows nothing
61
61
  const node_fs_1 = require("node:fs");
62
+ const bundle_1 = require("./bundle");
62
63
  const node_path_1 = require("node:path");
63
64
  const playwright = __importStar(require("playwright"));
64
65
  const sharp_1 = __importDefault(require("sharp"));
@@ -114,7 +115,10 @@ async function verifySubPath(options) {
114
115
  const findings = [];
115
116
  const requests = [];
116
117
  const notes = [];
117
- const server = await (0, staticServe_1.startStaticServer)(directory, {}, mountPrefix);
118
+ // Serve the bytes publish would upload, not every file left in dist/. Otherwise an excluded
119
+ // installed.json satisfies a local fetch and verify passes while the live Build returns 404.
120
+ const allowedFiles = new Set((0, bundle_1.checkBundle)(directory).files.map((file) => file.path));
121
+ const server = await (0, staticServe_1.startStaticServer)(directory, {}, mountPrefix, { allowedFiles });
118
122
  // An empty prefix means "serve at the origin root" — the control case that shows why every other
119
123
  // local gate misses a root-absolute url. It must produce `/`, not `//`.
120
124
  const trimmedPrefix = mountPrefix.replace(/^\/+|\/+$/g, '');
@@ -1 +1 @@
1
- {"version":3,"file":"verifySubPath.js","sourceRoot":"","sources":["../src/verifySubPath.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verifySubPath.js","sourceRoot":"","sources":["../src/verifySubPath.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helix3/helix-cli",
3
- "version": "0.1.18-helix3.310",
3
+ "version": "0.1.18-helix3.312",
4
4
  "description": "helix — the HELIX creator CLI: scaffold, validate, and publish Instant Worlds",
5
5
  "main": "dist/lib.js",
6
6
  "types": "dist/lib.d.ts",
@@ -68,8 +68,8 @@
68
68
  "@gltf-transform/core": "^4.4.0",
69
69
  "@gltf-transform/extensions": "^4.4.0",
70
70
  "@gltf-transform/functions": "^4.4.0",
71
- "@hypersoniclabs/helix-manifest": "npm:@helix3/helix-manifest@0.3.39-helix3.83",
72
- "@hypersoniclabs/helix-sdk": "npm:@helix3/helix-sdk@0.1.8-helix3.125",
71
+ "@hypersoniclabs/helix-manifest": "npm:@helix3/helix-manifest@0.3.42-helix3.87",
72
+ "@hypersoniclabs/helix-sdk": "npm:@helix3/helix-sdk@0.1.9-helix3.129",
73
73
  "@loaders.gl/textures": "^4.4.3",
74
74
  "commander": "^13.0.0",
75
75
  "ktx-parse": "1.1.0",
@@ -36,6 +36,10 @@ Vehicle imports require the canonical Palette as a named, fingerprinted Bridge i
36
36
  helix bridge import <unpacked-mod> --input palette=<helix-materials/palette.json>
37
37
  ```
38
38
 
39
+ The Palette contract may be `helix-palette/4` (the current `asset-packs/helix-materials/palette.json`) or the older `helix-palette/3`; the importer reads only `families[].id`, `definitionVersion`, `physical.sizeMeters` and `shader.defaults`, which are identical in both, and the vehicle receipt records the contract it actually read. The supported list lives in `lib/palette-contract.mjs` and `bin/convert-beamng.py` (`SUPPORTED_PALETTE_CONTRACTS`).
40
+
41
+ Bridge snapshots this plugin directory into `<work>/plugins/<id>` before running it, so everything the plugin imports must live inside it. The Vehicle Package v2 validator is therefore mirrored byte-for-byte at `plugins/beamng-vehicle/vendor/vehicle-package-v2.mjs`; `scripts/vendor-vehicle-package-v2.mjs --write/--check` keeps it and the top-level `vendor/` copy in step. Source DAEs (500 MB and more) are scanned in bounded chunks (`lib/dae-scan.mjs`), never read into one JS string.
42
+
39
43
  Local development:
40
44
 
41
45
  ```bash
@@ -8,9 +8,11 @@ import process from 'node:process';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { auditVehicleGlb, injectVehicleMaterialBindings, injectVehicleReceipt, readVehicleReceipt } from '../lib/vehicle-qa.mjs';
10
10
  import { inspectBeamngCommonDependency, materializeBeamngCommonDependency } from '../lib/common-dependency.mjs';
11
+ import { daeHasName } from '../lib/dae-scan.mjs';
12
+ import { SUPPORTED_PALETTE_CONTRACTS } from '../lib/palette-contract.mjs';
11
13
  import { sha256FileSync } from '../lib/file-identity.mjs';
12
14
  import { buildVehicleSourceManifest, markVehicleSourceFunctionallyLowered, BEAMNG_VEHICLE_SOURCE_SCHEMA } from '../lib/vehicle-source.mjs';
13
- import { validateVehiclePackage } from '../../../vendor/vehicle-package-v2.mjs';
15
+ import { validateVehiclePackage } from '../vendor/vehicle-package-v2.mjs';
14
16
 
15
17
  const MAX_FILES = 50_000;
16
18
  const MAX_DAE = 12;
@@ -50,11 +52,11 @@ function semanticCount(files, pattern) {
50
52
  }
51
53
 
52
54
  function daeHasAuthoredSteering(path) {
53
- return /(?:id|name)="[^"]*steer(?:ing)?(?:wheel|rim)?[^"]*"/i.test(readFileSync(path, 'utf8'));
55
+ return daeHasName(path, /steer/i);
54
56
  }
55
57
 
56
58
  function daeHasAuthoredTyre(path) {
57
- return /(?:id|name)="[^"]*(?:tyre|tire)[^"]*"/i.test(readFileSync(path, 'utf8'));
59
+ return daeHasName(path, /(?:tyre|tire)/i);
58
60
  }
59
61
 
60
62
  function commonGeometryRoot(root) {
@@ -65,8 +67,7 @@ function commonGeometryRoot(root) {
65
67
  }
66
68
 
67
69
  function daeHasAuthoredRoadWheel(path) {
68
- const names = [...readFileSync(path, 'utf8').matchAll(/(?:id|name)="([^"]+)"/gi)].map((row) => row[1]);
69
- return names.some((name) => /(?:tyre|tire|(?<!steering)(?<!steering_)(?<!steer_)wheel(?!well)|(?<!t)rim)/i.test(name));
70
+ return daeHasName(path, /(?:tyre|tire|(?<!steering)(?<!steering_)(?<!steer_)wheel(?!well)|(?<!t)rim)/i);
70
71
  }
71
72
 
72
73
  function authoredTyreDependency(root) {
@@ -100,8 +101,8 @@ function vehiclePalette(path) {
100
101
  let document;
101
102
  try { document = JSON.parse(readFileSync(path, 'utf8')); }
102
103
  catch (error) { throw new Error(`BeamNG Palette input is not valid JSON: ${error instanceof Error ? error.message : String(error)}`); }
103
- if (document?.contract !== 'helix-palette/3' || !Array.isArray(document.families)) {
104
- throw new Error("BeamNG Palette input contract must be 'helix-palette/3' with a families array");
104
+ if (!SUPPORTED_PALETTE_CONTRACTS.includes(document?.contract) || !Array.isArray(document.families)) {
105
+ throw new Error(`BeamNG Palette input contract must be ${SUPPORTED_PALETTE_CONTRACTS.map((id) => `'${id}'`).join(' or ')} with a families array`);
105
106
  }
106
107
  const required = ['vehicle-paint-metallic', 'vehicle-glass', 'tire-rubber', 'chrome', 'stainless-steel', 'aluminum-brushed',
107
108
  'brake-rotor', 'brake-caliper-painted', 'vehicle-interior-plastic', 'vehicle-leather', 'vehicle-carpet',
@@ -118,6 +119,7 @@ function vehiclePalette(path) {
118
119
  }
119
120
  return {
120
121
  path: resolve(path),
122
+ contract: document.contract,
121
123
  familyVersions: Object.fromEntries(required.map((id) => [id, families.get(id).definitionVersion])),
122
124
  familyDefaults: Object.fromEntries(required.map((id) => [id, {
123
125
  roughness: families.get(id).shader.defaults.roughness,
@@ -1217,6 +1219,12 @@ async function main() {
1217
1219
 
1218
1220
  export { convert };
1219
1221
 
1220
- if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
1222
+ // Compare real paths: argv[1] keeps a symlinked prefix (macOS /var -> /private/var) that import.meta.url
1223
+ // has already resolved, and a plain comparison then exits 0 without running anything.
1224
+ const invokedDirectly = (() => {
1225
+ try { return Boolean(process.argv[1]) && realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url)); }
1226
+ catch { return false; }
1227
+ })();
1228
+ if (invokedDirectly) {
1221
1229
  main().catch((error) => { process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`); process.exitCode = 1; });
1222
1230
  }
@@ -16,6 +16,12 @@ import sys
16
16
  import xml.etree.ElementTree as ET
17
17
  from pathlib import Path
18
18
 
19
+ # Blender runs `--python <script>` without the script's directory on sys.path (4.0 and 4.5 on
20
+ # Linux), so sibling modules must be made importable explicitly before they are imported.
21
+ _SCRIPT_DIR = str(Path(__file__).resolve().parent)
22
+ if _SCRIPT_DIR not in sys.path:
23
+ sys.path.insert(0, _SCRIPT_DIR)
24
+
19
25
  import bpy
20
26
  import numpy as np
21
27
  from mathutils import Matrix, Vector
@@ -588,13 +594,20 @@ VEHICLE_MATERIAL_ROLES = (
588
594
  )
589
595
 
590
596
 
591
- def load_vehicle_palette(path: Path) -> dict[str, dict]:
597
+ # Contracts whose `families[]` carry the fields this converter reads (id, definitionVersion,
598
+ # physical.sizeMeters, shader.defaults). /4 is the current asset pack; /3 stays accepted.
599
+ SUPPORTED_PALETTE_CONTRACTS = ("helix-palette/4", "helix-palette/3")
600
+
601
+
602
+ def load_vehicle_palette(path: Path) -> tuple[str, dict[str, dict]]:
592
603
  try:
593
604
  document = json.loads(path.read_text())
594
605
  except Exception as error:
595
606
  raise RuntimeError(f"Palette input is not valid JSON: {error}")
596
- if document.get("contract") != "helix-palette/3" or not isinstance(document.get("families"), list):
597
- raise RuntimeError("Palette input must use contract helix-palette/3 with a families array")
607
+ contract = document.get("contract")
608
+ if contract not in SUPPORTED_PALETTE_CONTRACTS or not isinstance(document.get("families"), list):
609
+ raise RuntimeError(f"Palette input must use contract {' or '.join(SUPPORTED_PALETTE_CONTRACTS)} "
610
+ "with a families array")
598
611
  families = {row.get("id"): row for row in document["families"] if isinstance(row, dict)}
599
612
  required = {row[2] for row in VEHICLE_MATERIAL_ROLES} | {"vehicle-interior-plastic"}
600
613
  for family_id in required:
@@ -606,7 +619,7 @@ def load_vehicle_palette(path: Path) -> dict[str, dict]:
606
619
  value = defaults.get(field)
607
620
  if not isinstance(value, (int, float)) or not 0 <= value <= 1:
608
621
  raise RuntimeError(f"Palette family {family_id} has invalid {field}")
609
- return families
622
+ return contract, families
610
623
 
611
624
 
612
625
  def vehicle_material_role(name: str) -> tuple[str, str, tuple]:
@@ -640,7 +653,7 @@ def helix_material_binding(family: dict, source_id: str, tint: tuple | None,
640
653
 
641
654
  def restore_materials(roots: list[Path], palette_path: Path, vehicle_root: Path,
642
655
  configured_paint: list[float] | None = None) -> dict:
643
- palette = load_vehicle_palette(palette_path)
656
+ palette_contract, palette = load_vehicle_palette(palette_path)
644
657
  definitions: dict[str, tuple[dict, Path]] = {}
645
658
  source_diagnostics = {key: [] for key in ("parseFailures", "shadowedDeclarations", "stageConflicts",
646
659
  "dynamicTextures", "sentinels", "unsupportedMaps")}
@@ -840,7 +853,7 @@ def restore_materials(roots: list[Path], palette_path: Path, vehicle_root: Path,
840
853
  declaration_provenance = sorted({json.dumps(row[0].get("provenance"), sort_keys=True)
841
854
  for row in definitions.values() if row[0].get("provenance")})
842
855
  return {"definitions": len({id(row[0]) for row in definitions.values()}), "resolved": resolved, "mapped": mapped, "materials": total,
843
- "paletteContract": "helix-palette/3", "bound": total, "factorDefaults": factor_defaults,
856
+ "paletteContract": palette_contract, "bound": total, "factorDefaults": factor_defaults,
844
857
  "familyVersions": {family_id: family["definitionVersion"] for family_id, family in palette.items()},
845
858
  "renderReady": total, "renderReadyCoverage": 1.0 if total else 0.0,
846
859
  "roles": role_counts, "bindings": bindings,
@@ -1315,6 +1328,7 @@ def decimate(objects: list[bpy.types.Object], limit: int = 285_000) -> tuple[int
1315
1328
  def main() -> None:
1316
1329
  args = arguments()
1317
1330
  source_root = Path(args.source_root).resolve()
1331
+ vehicle_root = Path(args.vehicle_root).resolve()
1318
1332
  bpy.ops.wm.read_factory_settings(use_empty=True)
1319
1333
  for dae in args.dae:
1320
1334
  print(f"[beamng] importing {dae}")
@@ -1322,7 +1336,7 @@ def main() -> None:
1322
1336
  objects = meshes()
1323
1337
  if not objects:
1324
1338
  raise RuntimeError("selected BeamNG DAE contains no renderable meshes")
1325
- wanted, config = configured_meshes(Path(args.vehicle_root).resolve(), source_root, args.dae,
1339
+ wanted, config = configured_meshes(vehicle_root, source_root, args.dae,
1326
1340
  args.configuration_hint, {obj.name for obj in objects},
1327
1341
  [Path(value).resolve() for value in args.material_root],
1328
1342
  Path(args.part_index).resolve(), args.bridge_plan_key,
@@ -1485,7 +1499,6 @@ def main() -> None:
1485
1499
  for obj in rims.values():
1486
1500
  size = dimensions(obj)
1487
1501
  wheel_radii.append(max(size.y, size.z) * 0.5)
1488
- vehicle_root = Path(args.vehicle_root)
1489
1502
  audio_limits = {extension: AUDIO_SCAN_LIMIT for extension in (".wav", ".ogg", ".flac", ".mp3")}
1490
1503
  audio_files = len(bounded_asset_paths([vehicle_root], audio_limits))
1491
1504
  audio_refs = int(bool(config.get("selectedPartSummary", {}).get("semanticEvidence", {}).get("audio")))
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": "helix.bridge-plugin/1",
3
3
  "id": "hypersonic.beamng-vehicle",
4
4
  "name": "BeamNG Vehicle Importer",
5
- "version": "0.6.1",
5
+ "version": "0.6.2",
6
6
  "trust": "local-untrusted",
7
7
  "description": "Assess, convert, texture, lower, and acceptance-test a BeamNG vehicle plus its exact configuration before HELIX packaging.",
8
8
  "permissions": [
@@ -0,0 +1,40 @@
1
+ import { closeSync, constants, openSync, readSync } from 'node:fs';
2
+
3
+ // A BeamNG DAE can exceed 500 MB, far past V8's ~512 MiB (0x1fffffe8) string limit, so a DAE must
4
+ // never be read into one JS string. These helpers scan it in bounded chunks instead.
5
+ const CHUNK_BYTES = 8 * 1024 * 1024;
6
+ // Longest id/name attribute that can straddle a chunk boundary. Real COLLADA ids are < 200 chars.
7
+ const BOUNDARY_CARRY_CHARS = 4096;
8
+ const NAME_ATTRIBUTE = /(?:id|name)="([^"]+)"/gi;
9
+
10
+ /**
11
+ * Visit every `id="..."` / `name="..."` attribute value of a DAE without holding the file in memory.
12
+ * `visit` returns true to stop early. Decoded as latin1 so multi-byte UTF-8 can never split a
13
+ * character across chunks; the callers only test ASCII patterns against the names.
14
+ */
15
+ export function scanDaeNames(path, visit, { chunkBytes = CHUNK_BYTES } = {}) {
16
+ const descriptor = openSync(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
17
+ const buffer = Buffer.allocUnsafe(chunkBytes);
18
+ let carry = '';
19
+ try {
20
+ for (;;) {
21
+ const bytesRead = readSync(descriptor, buffer, 0, buffer.byteLength, null);
22
+ if (bytesRead === 0) return false;
23
+ const text = carry + buffer.latin1Slice(0, bytesRead);
24
+ NAME_ATTRIBUTE.lastIndex = 0;
25
+ for (const match of text.matchAll(NAME_ATTRIBUTE)) {
26
+ // Matches wholly inside the carried tail were already visited with the previous chunk.
27
+ if (match.index + match[0].length <= carry.length) continue;
28
+ if (visit(match[1])) return true;
29
+ }
30
+ carry = text.slice(-BOUNDARY_CARRY_CHARS);
31
+ }
32
+ } finally {
33
+ closeSync(descriptor);
34
+ }
35
+ }
36
+
37
+ export function daeHasName(path, pattern, options) {
38
+ const test = new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ''));
39
+ return scanDaeNames(path, (name) => test.test(name), options);
40
+ }
@@ -0,0 +1,6 @@
1
+ // Palette contracts the BeamNG vehicle importer can project. The current asset pack
2
+ // (asset-packs/helix-materials/palette.json) is /4; /3 stays accepted for older packs.
3
+ // The first entry is the preferred/current contract. The families[] fields the importer reads
4
+ // (id, definitionVersion, physical.sizeMeters, shader.defaults.roughness/metallic) are
5
+ // identical in both. Keep bin/convert-beamng.py SUPPORTED_PALETTE_CONTRACTS in sync.
6
+ export const SUPPORTED_PALETTE_CONTRACTS = Object.freeze(['helix-palette/4', 'helix-palette/3']);
@@ -10,6 +10,7 @@ import {
10
10
  writeSync,
11
11
  } from 'node:fs';
12
12
  import { randomUUID } from 'node:crypto';
13
+ import { SUPPORTED_PALETTE_CONTRACTS } from './palette-contract.mjs';
13
14
  import { basename, dirname, join } from 'node:path';
14
15
  import { classifyVehicleMaterialSemantic, stampVehicleMaterialSemantics } from './material-semantics.mjs';
15
16
 
@@ -478,7 +479,11 @@ export function auditVehicleGlb(path, options = {}) {
478
479
  check('cabin.seats', seatIds.length === 2 || seatIds.length === 4, Object.fromEntries(seatIds.map((id) => [id, sockets[id]])),
479
480
  'two or four measured H-points');
480
481
  const interiorNodes = nodeNames.filter((name) => /(seat|dash|interior|cabin|console|steer|gauge|door.?card|door.?panel|pedal)/i.test(name));
481
- check('cabin.meshes', interiorNodes.length >= 8, interiorNodes.length, 'at least 8 semantic interior nodes');
482
+ // The runtime builds the cabin from the measured sockets checked above (seats, steering, pedals, cockpit
483
+ // camera) and merely ADOPTS authored geometry when a socket names it; it has no minimum node count (see
484
+ // VehicleInterior.adoptNamed). Converters routinely merge a small two-door cabin into a handful of meshes,
485
+ // so a count is not evidence. Require only that authored interior geometry survived conversion.
486
+ check('cabin.meshes', interiorNodes.length >= 1, interiorNodes.length, 'at least one semantic interior node; the cabin contract is the measured seat, steering, pedal and cockpit sockets');
482
487
  check('source.authored-seats', Number.isInteger(sourceMeasurements.seatHPoints)
483
488
  && (sourceMeasurements.seatHPoints === 2 || sourceMeasurements.seatHPoints === 4),
484
489
  sourceMeasurements.seatHPoints ?? null, 'two or four H-points measured from authored seat geometry');
@@ -542,11 +547,11 @@ export function auditVehicleGlb(path, options = {}) {
542
547
  { materials: materials.length, mapped, textureCoverage: Number(coverage.toFixed(3)), images: doc.images?.length ?? 0,
543
548
  sourceResolved, sourceMaterialTotal, sourceBindingCoverage: Number(sourceBindingCoverage.toFixed(3)) },
544
549
  'embedded maps on half of exported materials, source PBR bindings on at least 75%, or valid Palette render readiness on at least 90%');
545
- check('materials.palette-bindings', importQuality.materials?.paletteContract === 'helix-palette/3'
550
+ check('materials.palette-bindings', SUPPORTED_PALETTE_CONTRACTS.includes(importQuality.materials?.paletteContract)
546
551
  && paletteBound / Math.max(1, materials.length) >= 0.9 && renderReadyCoverage >= 0.9,
547
552
  { materials: materials.length, paletteBound, renderReady, renderReadyCoverage: Number(renderReadyCoverage.toFixed(3)),
548
553
  roles: finalRoles },
549
- 'helix-palette/3 projection with valid helix-material-binding/1 metadata and at least 90% render-ready material coverage');
554
+ 'helix-palette/4 (or /3) projection with valid helix-material-binding/1 metadata and at least 90% render-ready material coverage');
550
555
  const rear = semanticZ(doc, /(mainexhaust|exhaust|taillight|tailgate|trunk|boot|bumper[_-]?r)/i)
551
556
  .filter((z) => Math.abs(z) >= Math.max(0.75, dimensions[2] * 0.25));
552
557
  const exhaust = sockets.exhaust;
@@ -1,5 +1,6 @@
1
1
  import { basename, isAbsolute, relative, resolve, sep } from 'node:path';
2
2
  import { sha256FileSync } from './file-identity.mjs';
3
+ import { SUPPORTED_PALETTE_CONTRACTS } from './palette-contract.mjs';
3
4
 
4
5
  export const BEAMNG_VEHICLE_SOURCE_SCHEMA = 'helix.beamng-vehicle-source/1';
5
6
 
@@ -204,7 +205,7 @@ export function buildVehicleSourceManifest({ request, source, candidate, convers
204
205
  definitions: materials.definitions ?? 0,
205
206
  resolved: materials.resolved ?? 0,
206
207
  mapped: materials.mapped ?? 0,
207
- paletteContract: materials.paletteContract ?? 'helix-palette/3',
208
+ paletteContract: materials.paletteContract ?? SUPPORTED_PALETTE_CONTRACTS[0],
208
209
  declarationProvenance: materials.declarationProvenance ?? [],
209
210
  stageConflicts: materials.stageConflicts ?? [],
210
211
  sentinels: materials.sentinels ?? [],