@helix3/helix-cli 0.1.18-helix3.274 → 0.1.18-helix3.275

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.
Files changed (36) hide show
  1. package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.addon.json +1 -0
  2. package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-2.json +1 -0
  3. package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.addon.json +1 -0
  4. package/bridge-recipes/unreal/helix-character-creator-male/male-carnival-mask-3.json +1 -0
  5. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.addon.json +1 -0
  6. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask-2.json +1 -0
  7. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.addon.json +1 -0
  8. package/bridge-recipes/unreal/helix-character-creator-male/male-eye-hole-mask.json +1 -0
  9. package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.addon.json +1 -0
  10. package/bridge-recipes/unreal/helix-character-creator-male/male-marshmallow-mask.json +1 -0
  11. package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.addon.json +1 -0
  12. package/bridge-recipes/unreal/helix-character-creator-male/male-nebula-executive-coat.json +1 -0
  13. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.addon.json +1 -0
  14. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-mantle.json +1 -0
  15. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.addon.json +1 -0
  16. package/bridge-recipes/unreal/helix-character-creator-male/male-neo-arcane-heir-tunic.json +1 -0
  17. package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.addon.json +1 -0
  18. package/bridge-recipes/unreal/helix-character-creator-male/male-paper-bag-mask.json +1 -0
  19. package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.addon.json +1 -0
  20. package/bridge-recipes/unreal/helix-character-creator-male/male-pig-mask.json +1 -0
  21. package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.addon.json +1 -0
  22. package/bridge-recipes/unreal/helix-character-creator-male/male-puffer-jacket.json +1 -0
  23. package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.addon.json +1 -0
  24. package/bridge-recipes/unreal/helix-character-creator-male/male-pullover-hoodie.json +1 -0
  25. package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.addon.json +1 -0
  26. package/bridge-recipes/unreal/helix-character-creator-male/male-sinth-ascetic-jacket.json +1 -0
  27. package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.addon.json +1 -0
  28. package/bridge-recipes/unreal/helix-character-creator-male/male-surgeon-mask.json +1 -0
  29. package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.addon.json +1 -0
  30. package/bridge-recipes/unreal/helix-character-creator-male/male-tech-hoodie.json +1 -0
  31. package/bridge-recipes/unreal/helix-character-creator-male/test/recipes.test.js +31 -8
  32. package/package.json +1 -1
  33. package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
  34. package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
  35. package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
  36. package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Carnival Mask 2", "slug": "male-carnival-mask-2", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.mask@1", "socket": "head", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-carnival-mask-2", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/M_Carnival_Mask_2/M_Carnival_Mask_2", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Carnival Mask 3", "slug": "male-carnival-mask-3", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.mask@1", "socket": "head", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-carnival-mask-3", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/M_Carnival_Mask_3/M_Carnival_Mask_3", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Eye Hole Mask 2", "slug": "male-eye-hole-mask-2", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.mask@1", "socket": "head", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-eye-hole-mask-2", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/M_Eye_Hole_Mask_2/M_Eye_Hole_Mask_2_skinning", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Eye Hole Mask", "slug": "male-eye-hole-mask", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.mask@1", "socket": "head", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-eye-hole-mask", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/M_Eye_Hole_Mask/M_Eye_Hole_Mask_skinning", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Marshmallow Mask", "slug": "male-marshmallow-mask", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.mask@1", "socket": "head", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-marshmallow-mask", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/Marshmallow_Mask/M_Marshmallow_Mask", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Nebula Executive Coat", "slug": "male-nebula-executive-coat", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.top@1", "socket": "chest", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-nebula-executive-coat", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/Nebula_Executive_Coat/SKM_M_Nebula_Executive_West_Coat", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "NEO Arcane Heir Mantle", "slug": "male-neo-arcane-heir-mantle", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.top@1", "socket": "chest", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-neo-arcane-heir-mantle", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/NEO_Arcane_Heir_Mantle/SKM_M_NEO_Arcane_Heir_Mantle", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "NEO Arcane Heir Tunic", "slug": "male-neo-arcane-heir-tunic", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.top@1", "socket": "chest", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-neo-arcane-heir-tunic", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/NEO_Arcane_Heir_Tunic/SKM_M_NEO_Arcane_Heir_Tunic", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Paper Bag Mask", "slug": "male-paper-bag-mask", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.mask@1", "socket": "head", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-paper-bag-mask", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/M_Paper_Bag_Mask/M_Paper_Bag_Mask", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Pig Mask", "slug": "male-pig-mask", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.mask@1", "socket": "head", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-pig-mask", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/M_Pig_Mask/M_Pig_Mask", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Puffer Jacket", "slug": "male-puffer-jacket", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.top@1", "socket": "chest", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-puffer-jacket", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/Puffer_Jacket/SKM_M_Puffer_Jacket", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Pullover Hoodie", "slug": "male-pullover-hoodie", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.top@1", "socket": "chest", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-pullover-hoodie", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/Pullover_Hoodie/SKM_M_Pullover_Hoodie", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Sinth Ascetic Jacket", "slug": "male-sinth-ascetic-jacket", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.top@1", "socket": "chest", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-sinth-ascetic-jacket", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/Sinth_Ascetic_Jacket/SKM_M_Sinth_Ascetic_Jacket", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Surgeon Mask", "slug": "male-surgeon-mask", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.mask@1", "socket": "head", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-surgeon-mask", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/M_Surgeon_Mask/M_Surgeon_Mask_skinning", "exportMorphTargets": true}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge-character-addon-profile/1", "title": "Tech Hoodie", "slug": "male-tech-hoodie", "hostItemId": "b45e4a1e-0000-4000-8000-000000000001", "hostSha256": "3fdb769bf0dbcc0e1b1b1ae8dd800d6ddedfda976c6422d4de15b80ce71c132b", "slotType": "character.top@1", "socket": "chest", "nodes": [], "ops": []}
@@ -0,0 +1 @@
1
+ {"schemaVersion": "helix.bridge.unreal-asset/1", "slug": "male-tech-hoodie", "assetPath": "/HelixCharacterCreator/Characters/Clothes/Man/Tech_Hoodie/SKM_M_Tech_Hoodie", "exportMorphTargets": true}
@@ -8,15 +8,28 @@ const test = require('node:test');
8
8
  const directory = resolve(__dirname, '..');
9
9
  const hostItemId = 'b45e4a1e-0000-4000-8000-000000000001';
10
10
 
11
+ // The fixed, one-representative-item-per-customizer-slot pilot set that
12
+ // `all.json` is a canonical batch of. This list is intentionally NOT derived
13
+ // from a directory scan: the batch phase adds many more `<item-slug>.json` /
14
+ // `<item-slug>.addon.json` recipe pairs to this same directory (one per
15
+ // wearable, not one per slot), and those must coexist without being folded
16
+ // into — or breaking the identity check against — this specific pilot batch.
17
+ const canonicalSlotFiles = [
18
+ 'base-male.json',
19
+ 'base-male-face.json',
20
+ 'back.json', 'bottom.json', 'eyewear.json', 'footwear.json', 'gloves.json',
21
+ 'hair.json', 'headwear.json', 'mask.json', 'neck.json', 'outfit.json', 'top.json',
22
+ ];
23
+ const canonicalSlots = [
24
+ 'back', 'bottom', 'eyewear', 'footwear', 'gloves', 'hair', 'headwear', 'mask', 'neck', 'outfit', 'top',
25
+ ];
26
+
11
27
  function read(file) {
12
28
  return JSON.parse(readFileSync(join(directory, file), 'utf8'));
13
29
  }
14
30
 
15
31
  test('keeps the canonical batch identical to its individual source profiles', () => {
16
- const files = readdirSync(directory)
17
- .filter((file) => file.endsWith('.json') && !['all.json', 'palette-pilot.json'].includes(file) && !file.endsWith('.addon.json'))
18
- .sort();
19
- const profiles = files.map(read);
32
+ const profiles = canonicalSlotFiles.map(read);
20
33
  const batch = read('all.json');
21
34
  assert.equal(batch.schemaVersion, 'helix.bridge.unreal-asset-set/1');
22
35
  assert.deepEqual(
@@ -26,11 +39,19 @@ test('keeps the canonical batch identical to its individual source profiles', ()
26
39
  assert.equal(new Set(batch.assets.map((asset) => asset.slug)).size, batch.assets.length);
27
40
  });
28
41
 
29
- test('pairs every wearable source with a runtime customizer add-on profile', () => {
42
+ test('every add-on profile in this directory pairs with a runtime customizer add-on profile of matching shape', () => {
43
+ // Covers every `.addon.json` file present — the fixed 11-slot pilot set AND
44
+ // any number of additional per-item batch-phase recipes — rather than a
45
+ // closed exact-list. A new wearable's recipe pair must satisfy the same
46
+ // schema contract as the originals; it does not need to be one of the 11
47
+ // canonical slot names, and there may be many per slot.
30
48
  const addonFiles = readdirSync(directory).filter((file) => file.endsWith('.addon.json')).sort();
31
- assert.deepEqual(addonFiles.map((file) => basename(file, '.addon.json')), [
32
- 'back', 'bottom', 'eyewear', 'footwear', 'gloves', 'hair', 'headwear', 'mask', 'neck', 'outfit', 'top',
33
- ]);
49
+ // The 11 canonical per-slot pilot add-ons must still exist under their
50
+ // original slot-named files.
51
+ for (const slot of canonicalSlots) {
52
+ assert.ok(addonFiles.includes(`${slot}.addon.json`), `missing canonical ${slot}.addon.json`);
53
+ }
54
+ const seenSlugs = new Set();
34
55
  for (const file of addonFiles) {
35
56
  const addon = read(file);
36
57
  const source = read(`${basename(file, '.addon.json')}.json`);
@@ -39,6 +60,8 @@ test('pairs every wearable source with a runtime customizer add-on profile', ()
39
60
  assert.equal(addon.hostItemId, hostItemId);
40
61
  assert.match(addon.slotType, /^character\.[a-z]+@1$/);
41
62
  assert.equal(addon.slotType.startsWith('Cosmetic.Slot.'), false);
63
+ assert.equal(seenSlugs.has(addon.slug), false, `duplicate add-on slug ${addon.slug} (${file})`);
64
+ seenSlugs.add(addon.slug);
42
65
  }
43
66
  });
44
67
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helix3/helix-cli",
3
- "version": "0.1.18-helix3.274",
3
+ "version": "0.1.18-helix3.275",
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",