@helix3/helix-cli 0.1.14-helix3.167 → 0.1.14-helix3.169

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 (180) hide show
  1. package/README.md +5 -1
  2. package/assets/bridge/metahuman-eye-baked.png +0 -0
  3. package/dist/bridge/bridge.testutil.d.ts +73 -0
  4. package/dist/bridge/bridge.testutil.js +229 -0
  5. package/dist/bridge/bridge.testutil.js.map +1 -0
  6. package/dist/bridge/detect.d.ts +4 -0
  7. package/dist/bridge/detect.js +152 -0
  8. package/dist/bridge/detect.js.map +1 -0
  9. package/dist/bridge/execute.d.ts +3 -0
  10. package/dist/bridge/execute.js +177 -0
  11. package/dist/bridge/execute.js.map +1 -0
  12. package/dist/bridge/glb.d.ts +60 -0
  13. package/dist/bridge/glb.js +80 -0
  14. package/dist/bridge/glb.js.map +1 -0
  15. package/dist/bridge/hash.d.ts +6 -0
  16. package/dist/bridge/hash.js +40 -0
  17. package/dist/bridge/hash.js.map +1 -0
  18. package/dist/bridge/index.d.ts +10 -0
  19. package/dist/bridge/index.js +27 -0
  20. package/dist/bridge/index.js.map +1 -0
  21. package/dist/bridge/internal/artifacts.d.ts +5 -0
  22. package/dist/bridge/internal/artifacts.js +31 -0
  23. package/dist/bridge/internal/artifacts.js.map +1 -0
  24. package/dist/bridge/internal/builtInExecution.d.ts +4 -0
  25. package/dist/bridge/internal/builtInExecution.js +248 -0
  26. package/dist/bridge/internal/builtInExecution.js.map +1 -0
  27. package/dist/bridge/internal/externalExecution.d.ts +4 -0
  28. package/dist/bridge/internal/externalExecution.js +148 -0
  29. package/dist/bridge/internal/externalExecution.js.map +1 -0
  30. package/dist/bridge/internal/outputReservation.d.ts +13 -0
  31. package/dist/bridge/internal/outputReservation.js +145 -0
  32. package/dist/bridge/internal/outputReservation.js.map +1 -0
  33. package/dist/bridge/internal/snapshots.d.ts +32 -0
  34. package/dist/bridge/internal/snapshots.js +508 -0
  35. package/dist/bridge/internal/snapshots.js.map +1 -0
  36. package/dist/bridge/management.d.ts +40 -0
  37. package/dist/bridge/management.js +333 -0
  38. package/dist/bridge/management.js.map +1 -0
  39. package/dist/bridge/manifest.d.ts +8 -0
  40. package/dist/bridge/manifest.js +192 -0
  41. package/dist/bridge/manifest.js.map +1 -0
  42. package/dist/bridge/metahuman.d.ts +26 -0
  43. package/dist/bridge/metahuman.js +262 -0
  44. package/dist/bridge/metahuman.js.map +1 -0
  45. package/dist/bridge/planner.d.ts +6 -0
  46. package/dist/bridge/planner.js +214 -0
  47. package/dist/bridge/planner.js.map +1 -0
  48. package/dist/bridge/plugins.d.ts +16 -0
  49. package/dist/bridge/plugins.js +230 -0
  50. package/dist/bridge/plugins.js.map +1 -0
  51. package/dist/bridge/resolution.d.ts +8 -0
  52. package/dist/bridge/resolution.js +22 -0
  53. package/dist/bridge/resolution.js.map +1 -0
  54. package/dist/bridge/types.d.ts +209 -0
  55. package/dist/bridge/types.js +53 -0
  56. package/dist/bridge/types.js.map +1 -0
  57. package/dist/bridge/validate.d.ts +12 -0
  58. package/dist/bridge/validate.js +192 -0
  59. package/dist/bridge/validate.js.map +1 -0
  60. package/dist/builds/index.d.ts +54 -0
  61. package/dist/builds/index.js +215 -0
  62. package/dist/builds/index.js.map +1 -0
  63. package/dist/canary/cli.d.ts +17 -0
  64. package/dist/canary/cli.js +95 -0
  65. package/dist/canary/cli.js.map +1 -0
  66. package/dist/canary/index.d.ts +4 -0
  67. package/dist/canary/index.js +21 -0
  68. package/dist/canary/index.js.map +1 -0
  69. package/dist/canary/inventory.d.ts +46 -0
  70. package/dist/canary/inventory.js +499 -0
  71. package/dist/canary/inventory.js.map +1 -0
  72. package/dist/canary/pacifica.d.ts +51 -0
  73. package/dist/canary/pacifica.js +247 -0
  74. package/dist/canary/pacifica.js.map +1 -0
  75. package/dist/canary/plan.d.ts +115 -0
  76. package/dist/canary/plan.js +479 -0
  77. package/dist/canary/plan.js.map +1 -0
  78. package/dist/character/fbx.js +7 -4
  79. package/dist/character/fbx.js.map +1 -1
  80. package/dist/character/importCharacter.js +2 -2
  81. package/dist/character/importCharacter.js.map +1 -1
  82. package/dist/character/mat4.js +0 -2
  83. package/dist/character/mat4.js.map +1 -1
  84. package/dist/character/meshyToHelixMap.js +0 -2
  85. package/dist/character/meshyToHelixMap.js.map +1 -1
  86. package/dist/character/quat.js +2 -2
  87. package/dist/character/quat.js.map +1 -1
  88. package/dist/character/stages/bakeTexture.js +0 -2
  89. package/dist/character/stages/bakeTexture.js.map +1 -1
  90. package/dist/character/stages/conform.js +0 -2
  91. package/dist/character/stages/conform.js.map +1 -1
  92. package/dist/character/stages/ktx2.js +0 -2
  93. package/dist/character/stages/ktx2.js.map +1 -1
  94. package/dist/character/stages/mergeLods.js +0 -2
  95. package/dist/character/stages/mergeLods.js.map +1 -1
  96. package/dist/character/stages/report.js +0 -2
  97. package/dist/character/stages/report.js.map +1 -1
  98. package/dist/character/stages/resizeTextures.js +0 -2
  99. package/dist/character/stages/resizeTextures.js.map +1 -1
  100. package/dist/character/stages/retarget.js +0 -2
  101. package/dist/character/stages/retarget.js.map +1 -1
  102. package/dist/character/stages/retargetClip.js +0 -2
  103. package/dist/character/stages/retargetClip.js.map +1 -1
  104. package/dist/character/stages/sanitizeMaterials.js +0 -2
  105. package/dist/character/stages/sanitizeMaterials.js.map +1 -1
  106. package/dist/character/stages/simplifyMesh.js +0 -2
  107. package/dist/character/stages/simplifyMesh.js.map +1 -1
  108. package/dist/character/stages/splitFacePrimitive.js +0 -2
  109. package/dist/character/stages/splitFacePrimitive.js.map +1 -1
  110. package/dist/character/stages/weldedSimplify.js +0 -2
  111. package/dist/character/stages/weldedSimplify.js.map +1 -1
  112. package/dist/character/testutil/syntheticRig.js +0 -2
  113. package/dist/character/testutil/syntheticRig.js.map +1 -1
  114. package/dist/character/untrustedSource.js +1 -1
  115. package/dist/character/untrustedSource.js.map +1 -1
  116. package/dist/continuum/authoring.d.ts +31 -0
  117. package/dist/continuum/authoring.js +34 -0
  118. package/dist/continuum/authoring.js.map +1 -0
  119. package/dist/continuum/cli.d.ts +46 -0
  120. package/dist/continuum/cli.js +62 -0
  121. package/dist/continuum/cli.js.map +1 -0
  122. package/dist/continuum/cliAuthority.d.ts +17 -0
  123. package/dist/continuum/cliAuthority.js +28 -0
  124. package/dist/continuum/cliAuthority.js.map +1 -0
  125. package/dist/continuum/client.d.ts +40 -0
  126. package/dist/continuum/client.js +76 -0
  127. package/dist/continuum/client.js.map +1 -0
  128. package/dist/continuum/identity.d.ts +4 -0
  129. package/dist/continuum/identity.js +20 -0
  130. package/dist/continuum/identity.js.map +1 -0
  131. package/dist/continuum/index.d.ts +7 -0
  132. package/dist/continuum/index.js +24 -0
  133. package/dist/continuum/index.js.map +1 -0
  134. package/dist/continuum/state.d.ts +40 -0
  135. package/dist/continuum/state.js +194 -0
  136. package/dist/continuum/state.js.map +1 -0
  137. package/dist/continuum/types.d.ts +125 -0
  138. package/dist/continuum/types.js +6 -0
  139. package/dist/continuum/types.js.map +1 -0
  140. package/dist/continuum/workflow.d.ts +54 -0
  141. package/dist/continuum/workflow.js +404 -0
  142. package/dist/continuum/workflow.js.map +1 -0
  143. package/dist/index.js +495 -0
  144. package/dist/index.js.map +1 -1
  145. package/dist/lib.d.ts +6 -0
  146. package/dist/lib.js +30 -5
  147. package/dist/lib.js.map +1 -1
  148. package/dist/sceneElements/continuum.d.ts +48 -0
  149. package/dist/sceneElements/continuum.js +286 -0
  150. package/dist/sceneElements/continuum.js.map +1 -0
  151. package/dist/sceneImport/bistroMaterialBake.d.ts +1 -1
  152. package/dist/sceneImport/bistroMaterialBake.js +6 -2
  153. package/dist/sceneImport/bistroMaterialBake.js.map +1 -1
  154. package/dist/sceneImport/fbx.d.ts +4 -0
  155. package/dist/sceneImport/fbx.js +43 -63
  156. package/dist/sceneImport/fbx.js.map +1 -1
  157. package/dist/sceneImport/materials/binding.d.ts +16 -0
  158. package/dist/sceneImport/materials/binding.js +42 -0
  159. package/dist/sceneImport/materials/binding.js.map +1 -0
  160. package/dist/sceneImport/materials/catalog.d.ts +36 -0
  161. package/dist/sceneImport/materials/catalog.js +233 -0
  162. package/dist/sceneImport/materials/catalog.js.map +1 -0
  163. package/dist/sceneImport/materials/index.d.ts +4 -0
  164. package/dist/sceneImport/materials/index.js +21 -0
  165. package/dist/sceneImport/materials/index.js.map +1 -0
  166. package/dist/sceneImport/materials/matcher.d.ts +33 -0
  167. package/dist/sceneImport/materials/matcher.js +127 -0
  168. package/dist/sceneImport/materials/matcher.js.map +1 -0
  169. package/dist/sceneImport/materials/recipe.d.ts +30 -0
  170. package/dist/sceneImport/materials/recipe.js +134 -0
  171. package/dist/sceneImport/materials/recipe.js.map +1 -0
  172. package/dist/sceneImport/semantic.d.ts +75 -0
  173. package/dist/sceneImport/semantic.js +296 -0
  174. package/dist/sceneImport/semantic.js.map +1 -0
  175. package/dist/sceneImport/textureDecode.d.ts +4 -2
  176. package/dist/sceneImport/textureDecode.js +19 -2
  177. package/dist/sceneImport/textureDecode.js.map +1 -1
  178. package/dist/tsconfig.build.tsbuildinfo +1 -1
  179. package/docs/bridge.md +216 -0
  180. package/package.json +18 -2
package/README.md CHANGED
@@ -35,6 +35,8 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
35
35
 
36
36
  | Command | What it does |
37
37
  |---|---|
38
+ | `helix bridge detect\|inspect\|plan\|import\|validate\|doctor` | Universal plugin-driven intake for assets, characters, animations, scenes, and engine projects. Produces deterministic plans, HELIX-native outputs, and checksummed provenance. See [`docs/bridge.md`](docs/bridge.md). |
39
+ | `helix bridge plugins create\|test\|list\|inspect\|install\|remove` | Build and manage local/community Bridge Plugins using the versioned capability and permission contract. |
38
40
  | `helix login [--api-url <url>] [--web-url <url>] [--token <t>] [--no-browser]` | Sign in via the browser (`/cli-login`), or `--token` for CI/headless. Stores the client token. |
39
41
  | `helix logout` | Remove the stored token. |
40
42
  | `helix whoami` | Show current login status. |
@@ -65,6 +67,8 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
65
67
  | `helix world audit\|source-audit\|perf-gate\|prove-live` | Run the blocking world QA, performance, and deployed-build identity gates. |
66
68
  | `helix world scene-source inventory\|compile <helsinki\|bistro> <archive>` | Verify and safely inventory a known CC BY source archive, then compile deterministic local proxy/detail GLBs and an existing-schema Scene v2 package. |
67
69
  | `helix world scene-source publish <world-id> <package-dir> [--publish]` | Validate the Scene v2 package and print its multipart build receipt. Execution remains dry-run-only until backend private-pin entitlement lands; `--publish` currently fails closed, and access control never changes CC BY rights. |
70
+ | `helix continuum publish-source-map\|publish-scratch\|publish-package` | Resume exact-CID object adoption/ingestion, Package lease/seal, optional explicitly authorized Listing, and WorldRelease publication through one creator-owned pipeline. |
71
+ | `helix continuum receipt <job-id>` | Read the sanitized durable receipt for a completed Continuum publication. |
68
72
  | `helix unreal init\|validate\|doctor\|package [project]` | Create and gate a shared-runtime or native-game publish manifest, check optional editor MCP, and assemble a local upload-shaped package. |
69
73
  | `helix unreal publish <candidate> --world <slug>` | Upload a **cooked** Unreal world to HELIX: verify the candidate, presign, upload every artifact, finalize, and promote it as the world's active build. |
70
74
  | `helix doctor [--project <dir>]` | Print the environment + whether the @helix toolchain (CLI/MCP/SDK/manifest) is current. |
@@ -496,7 +500,7 @@ database column and the backend rejects it by name rather than dropping it in si
496
500
 
497
501
  ```bash
498
502
  npm install
499
- npm test # jest
503
+ npm test # build current source, then Jest
500
504
  npm run build # tsc → dist/ (bin: dist/index.js)
501
505
  npm run lint
502
506
  ```
@@ -0,0 +1,73 @@
1
+ import { Document } from '@gltf-transform/core';
2
+ export declare function addPrimitive(document: Document, mesh: ReturnType<Document['createMesh']>, materialName: string, triangles: number): void;
3
+ export declare function writeMetaHumanFixture(path: string): Promise<void>;
4
+ export declare function writeBipedFixture(path: string): Promise<void>;
5
+ export declare function writeExternalFixture(directory: string, options: {
6
+ id: string;
7
+ capability?: string;
8
+ priority?: number;
9
+ extension?: string;
10
+ accepts?: string[];
11
+ produces?: string[];
12
+ replaces?: string[];
13
+ args?: string[];
14
+ requires?: string[];
15
+ handler: string[];
16
+ }): void;
17
+ export declare function glb(json: Record<string, unknown>): Buffer;
18
+ export declare function writeLargeGlb(path: string, json: Record<string, unknown>, binaryBytes: number): void;
19
+ export declare function validBaseAvatar(): {
20
+ scenes: {
21
+ name: string;
22
+ nodes: number[];
23
+ }[];
24
+ nodes: ({
25
+ name: string;
26
+ mesh: number;
27
+ skin: number;
28
+ children: number[];
29
+ } | {
30
+ name: string;
31
+ mesh: number;
32
+ skin: number;
33
+ children?: undefined;
34
+ })[];
35
+ meshes: ({
36
+ primitives: {
37
+ attributes: {
38
+ POSITION: number;
39
+ };
40
+ indices: number;
41
+ material: number;
42
+ }[];
43
+ name?: undefined;
44
+ } | {
45
+ name: string;
46
+ primitives: {
47
+ attributes: {
48
+ POSITION: number;
49
+ };
50
+ indices: number;
51
+ material: number;
52
+ }[];
53
+ })[];
54
+ skins: {
55
+ joints: never[];
56
+ }[];
57
+ accessors: {
58
+ count: number;
59
+ }[];
60
+ materials: ({
61
+ name: string;
62
+ pbrMetallicRoughness?: undefined;
63
+ } | {
64
+ name: string;
65
+ pbrMetallicRoughness: {
66
+ baseColorTexture: {
67
+ index: number;
68
+ };
69
+ baseColorFactor: number[];
70
+ };
71
+ })[];
72
+ textures: {}[];
73
+ };
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.addPrimitive = addPrimitive;
7
+ exports.writeMetaHumanFixture = writeMetaHumanFixture;
8
+ exports.writeBipedFixture = writeBipedFixture;
9
+ exports.writeExternalFixture = writeExternalFixture;
10
+ exports.glb = glb;
11
+ exports.writeLargeGlb = writeLargeGlb;
12
+ exports.validBaseAvatar = validBaseAvatar;
13
+ const node_fs_1 = require("node:fs");
14
+ const node_path_1 = require("node:path");
15
+ const core_1 = require("@gltf-transform/core");
16
+ const sharp_1 = __importDefault(require("sharp"));
17
+ const index_1 = require("./index");
18
+ function addPrimitive(document, mesh, materialName, triangles) {
19
+ const buffer = document.getRoot().listBuffers()[0] ?? document.createBuffer();
20
+ const positions = new Float32Array(triangles * 9);
21
+ const texcoords = new Float32Array(triangles * 6);
22
+ const indices = new Uint16Array(triangles * 3);
23
+ for (let i = 0; i < indices.length; i++)
24
+ indices[i] = i;
25
+ const position = document.createAccessor().setType('VEC3').setArray(positions).setBuffer(buffer);
26
+ const texcoord = document.createAccessor().setType('VEC2').setArray(texcoords).setBuffer(buffer);
27
+ const index = document.createAccessor().setType('SCALAR').setArray(indices).setBuffer(buffer);
28
+ const material = document.createMaterial(materialName).setBaseColorFactor([0, 0, 0, 1]);
29
+ mesh.addPrimitive(document.createPrimitive()
30
+ .setAttribute('POSITION', position)
31
+ .setAttribute('TEXCOORD_0', texcoord)
32
+ .setIndices(index)
33
+ .setMaterial(material));
34
+ }
35
+ async function writeMetaHumanFixture(path) {
36
+ const document = new core_1.Document();
37
+ const faceMesh = document.createMesh('FaceMesh');
38
+ const eyeMesh = document.createMesh('Eyes');
39
+ addPrimitive(document, faceMesh, 'MI_Head_Baked', 2);
40
+ addPrimitive(document, faceMesh, 'M_Hide', 1);
41
+ addPrimitive(document, eyeMesh, 'MI_EyeL_Baked', 1);
42
+ addPrimitive(document, eyeMesh, 'MI_EyeR_Baked', 1);
43
+ document.createScene('scene')
44
+ .addChild(document.createNode('FaceMesh').setMesh(faceMesh))
45
+ .addChild(document.createNode('Eyes').setMesh(eyeMesh));
46
+ await new core_1.NodeIO().write(path, document);
47
+ }
48
+ async function writeBipedFixture(path) {
49
+ const document = new core_1.Document();
50
+ const buffer = document.createBuffer();
51
+ const scene = document.createScene('scene');
52
+ const node = (name) => document.createNode(name);
53
+ const hips = node('Hips');
54
+ const spine02 = node('Spine02');
55
+ const spine01 = node('Spine01');
56
+ const spine = node('Spine');
57
+ const neck = node('neck');
58
+ const head = node('Head');
59
+ hips.setTranslation([0, 1, 0]);
60
+ spine02.setTranslation([0, 0.2, 0]);
61
+ spine01.setTranslation([0, 0.2, 0]);
62
+ spine.setTranslation([0, 0.2, 0]);
63
+ neck.setTranslation([0, 0.15, 0]);
64
+ head.setTranslation([0, 0.15, 0]);
65
+ hips.addChild(spine02);
66
+ spine02.addChild(spine01);
67
+ spine01.addChild(spine);
68
+ spine.addChild(neck);
69
+ neck.addChild(head);
70
+ const addChain = (parent, names) => {
71
+ const nodes = [];
72
+ let current = parent;
73
+ for (const name of names) {
74
+ const child = node(name);
75
+ current.addChild(child);
76
+ nodes.push(child);
77
+ current = child;
78
+ }
79
+ return nodes;
80
+ };
81
+ const leftArm = addChain(spine, ['LeftShoulder', 'LeftArm', 'LeftForeArm', 'LeftHand']);
82
+ const rightArm = addChain(spine, ['RightShoulder', 'RightArm', 'RightForeArm', 'RightHand']);
83
+ const leftLeg = addChain(hips, ['LeftUpLeg', 'LeftLeg', 'LeftFoot', 'LeftToeBase']);
84
+ const rightLeg = addChain(hips, ['RightUpLeg', 'RightLeg', 'RightFoot', 'RightToeBase']);
85
+ leftArm.forEach((joint, index) => joint.setTranslation([index === 0 ? 0.15 : 0.2, 0, 0]));
86
+ rightArm.forEach((joint, index) => joint.setTranslation([index === 0 ? -0.15 : -0.2, 0, 0]));
87
+ leftLeg.forEach((joint, index) => joint.setTranslation([index === 0 ? 0.1 : 0, -0.25, index > 1 ? 0.05 : 0]));
88
+ rightLeg.forEach((joint, index) => joint.setTranslation([index === 0 ? -0.1 : 0, -0.25, index > 1 ? 0.05 : 0]));
89
+ scene.addChild(hips);
90
+ const joints = [hips, spine02, spine01, spine, neck, head, ...leftArm, ...rightArm, ...leftLeg, ...rightLeg];
91
+ const skin = document.createSkin('skin').setSkeleton(hips);
92
+ joints.forEach((joint) => skin.addJoint(joint));
93
+ const inverseBindMatrices = new Float32Array(joints.length * 16);
94
+ for (let index = 0; index < joints.length; index += 1) {
95
+ inverseBindMatrices[index * 16] = 1;
96
+ inverseBindMatrices[index * 16 + 5] = 1;
97
+ inverseBindMatrices[index * 16 + 10] = 1;
98
+ inverseBindMatrices[index * 16 + 15] = 1;
99
+ }
100
+ skin.setInverseBindMatrices(document.createAccessor().setType('MAT4').setArray(inverseBindMatrices).setBuffer(buffer));
101
+ const baseColorPng = await (0, sharp_1.default)(Buffer.from([180, 120, 80, 255]), {
102
+ raw: { width: 1, height: 1, channels: 4 },
103
+ }).png().toBuffer();
104
+ const material = document.createMaterial('BodyMaterial').setBaseColorTexture(document.createTexture('BodyTexture').setImage(new Uint8Array(baseColorPng)).setMimeType('image/png'));
105
+ const primitive = document.createPrimitive()
106
+ .setIndices(document.createAccessor().setType('SCALAR').setArray(new Uint16Array([0, 1, 2, 0, 2, 3])).setBuffer(buffer))
107
+ .setAttribute('POSITION', document.createAccessor().setType('VEC3')
108
+ .setArray(new Float32Array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0])).setBuffer(buffer))
109
+ .setAttribute('NORMAL', document.createAccessor().setType('VEC3')
110
+ .setArray(new Float32Array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1])).setBuffer(buffer))
111
+ .setAttribute('TEXCOORD_0', document.createAccessor().setType('VEC2')
112
+ .setArray(new Float32Array([0, 0, 1, 0, 1, 1, 0, 1])).setBuffer(buffer))
113
+ .setAttribute('JOINTS_0', document.createAccessor().setType('VEC4')
114
+ .setArray(new Uint16Array(16)).setBuffer(buffer))
115
+ .setAttribute('WEIGHTS_0', document.createAccessor().setType('VEC4')
116
+ .setArray(new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0])).setBuffer(buffer))
117
+ .setMaterial(material);
118
+ scene.addChild(document.createNode('BodyMesh').setMesh(document.createMesh('BodyMesh').addPrimitive(primitive)).setSkin(skin));
119
+ const times = document.createAccessor().setType('SCALAR').setArray(new Float32Array([0, 1])).setBuffer(buffer);
120
+ const translations = document.createAccessor().setType('VEC3')
121
+ .setArray(new Float32Array([0, 0, 0, 0, 0.1, 0])).setBuffer(buffer);
122
+ const sampler = document.createAnimationSampler().setInput(times).setOutput(translations).setInterpolation('LINEAR');
123
+ const rotations = document.createAccessor().setType('VEC4')
124
+ .setArray(new Float32Array([0, 0, 0, 1, 0, 0, 0.1, 0.995])).setBuffer(buffer);
125
+ const rotationSampler = document.createAnimationSampler().setInput(times).setOutput(rotations).setInterpolation('LINEAR');
126
+ document.createAnimation('fixture')
127
+ .addSampler(sampler)
128
+ .addChannel(document.createAnimationChannel().setSampler(sampler).setTargetNode(hips).setTargetPath('translation'))
129
+ .addSampler(rotationSampler)
130
+ .addChannel(document.createAnimationChannel().setSampler(rotationSampler).setTargetNode(spine).setTargetPath('rotation'));
131
+ await new core_1.NodeIO().write(path, document);
132
+ }
133
+ function writeExternalFixture(directory, options) {
134
+ const capability = options.capability ?? `${options.id}.import`;
135
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)(directory, 'bin'), { recursive: true });
136
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(directory, 'bridge-plugin.json'), JSON.stringify({
137
+ schemaVersion: index_1.BRIDGE_PLUGIN_SCHEMA,
138
+ id: options.id,
139
+ name: options.id,
140
+ version: '1.0.0',
141
+ trust: 'local-untrusted',
142
+ permissions: [],
143
+ capabilities: [{
144
+ id: capability,
145
+ stage: 'transform',
146
+ accepts: options.accepts ?? ['file.unknown'],
147
+ produces: options.produces ?? ['helix.package.asset'],
148
+ priority: options.priority ?? 0,
149
+ matches: { extensions: [options.extension ?? '.fixture'] },
150
+ ...(options.replaces === undefined ? {} : { replaces: options.replaces }),
151
+ ...(options.requires === undefined ? {} : { requires: options.requires }),
152
+ command: { executable: 'bin/import.js', ...(options.args === undefined ? {} : { args: options.args }), timeoutSeconds: 5 },
153
+ }],
154
+ }));
155
+ const executable = (0, node_path_1.join)(directory, 'bin', 'import.js');
156
+ (0, node_fs_1.writeFileSync)(executable, [
157
+ '#!/usr/bin/env node',
158
+ "let input = '';",
159
+ "process.stdin.setEncoding('utf8');",
160
+ "process.stdin.on('data', (chunk) => { input += chunk; });",
161
+ "process.stdin.on('end', () => {",
162
+ ' const request = JSON.parse(input);',
163
+ ...options.handler.map((line) => ` ${line}`),
164
+ '});',
165
+ '',
166
+ ].join('\n'));
167
+ (0, node_fs_1.chmodSync)(executable, 0o755);
168
+ }
169
+ function glb(json) {
170
+ const source = Buffer.from(JSON.stringify(json));
171
+ const paddedLength = Math.ceil(source.length / 4) * 4;
172
+ const bytes = Buffer.alloc(20 + paddedLength, 0x20);
173
+ bytes.writeUInt32LE(0x46546c67, 0);
174
+ bytes.writeUInt32LE(2, 4);
175
+ bytes.writeUInt32LE(bytes.length, 8);
176
+ bytes.writeUInt32LE(paddedLength, 12);
177
+ bytes.writeUInt32LE(0x4e4f534a, 16);
178
+ source.copy(bytes, 20);
179
+ return bytes;
180
+ }
181
+ function writeLargeGlb(path, json, binaryBytes) {
182
+ const source = Buffer.from(JSON.stringify(json));
183
+ const paddedLength = Math.ceil(source.length / 4) * 4;
184
+ const header = Buffer.alloc(20 + paddedLength, 0x20);
185
+ header.writeUInt32LE(0x46546c67, 0);
186
+ header.writeUInt32LE(2, 4);
187
+ header.writeUInt32LE(header.length + binaryBytes, 8);
188
+ header.writeUInt32LE(paddedLength, 12);
189
+ header.writeUInt32LE(0x4e4f534a, 16);
190
+ source.copy(header, 20);
191
+ const descriptor = (0, node_fs_1.openSync)(path, 'w');
192
+ try {
193
+ (0, node_fs_1.writeSync)(descriptor, header);
194
+ const chunk = Buffer.alloc(1024 * 1024);
195
+ for (let remaining = binaryBytes; remaining > 0; remaining -= chunk.length) {
196
+ (0, node_fs_1.writeSync)(descriptor, chunk, 0, Math.min(chunk.length, remaining));
197
+ }
198
+ }
199
+ finally {
200
+ (0, node_fs_1.closeSync)(descriptor);
201
+ }
202
+ }
203
+ function validBaseAvatar() {
204
+ return {
205
+ scenes: [{ name: 'lod1', nodes: [0] }, { name: 'lod2', nodes: [3] }, { name: 'lod3', nodes: [6] }],
206
+ nodes: [
207
+ { name: 'FaceMesh', mesh: 0, skin: 0, children: [1, 2] }, { name: 'BodyMesh', mesh: 1, skin: 0 }, { name: 'Eyes', mesh: 2, skin: 0 },
208
+ { name: 'FaceMesh', mesh: 0, skin: 0, children: [4, 5] }, { name: 'BodyMesh', mesh: 1, skin: 0 }, { name: 'Eyes', mesh: 2, skin: 0 },
209
+ { name: 'FaceMesh', mesh: 0, skin: 0, children: [7, 8] }, { name: 'BodyMesh', mesh: 1, skin: 0 }, { name: 'Eyes', mesh: 2, skin: 0 },
210
+ ],
211
+ meshes: [
212
+ { primitives: [{ attributes: { POSITION: 0 }, indices: 1, material: 0 }] },
213
+ { primitives: [{ attributes: { POSITION: 0 }, indices: 1, material: 0 }] },
214
+ { name: 'Eyes', primitives: [
215
+ { attributes: { POSITION: 0 }, indices: 1, material: 1 },
216
+ { attributes: { POSITION: 0 }, indices: 1, material: 2 },
217
+ ] },
218
+ ],
219
+ skins: [{ joints: [] }],
220
+ accessors: [{ count: 3 }, { count: 3 }],
221
+ materials: [
222
+ { name: 'MI_Head_Baked' },
223
+ { name: 'MI_EyeL_Baked', pbrMetallicRoughness: { baseColorTexture: { index: 0 }, baseColorFactor: [1, 1, 1, 1] } },
224
+ { name: 'MI_EyeR_Baked', pbrMetallicRoughness: { baseColorTexture: { index: 1 }, baseColorFactor: [1, 1, 1, 1] } },
225
+ ],
226
+ textures: [{}, {}],
227
+ };
228
+ }
229
+ //# sourceMappingURL=bridge.testutil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.testutil.js","sourceRoot":"","sources":["../../src/bridge/bridge.testutil.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type BridgeDetection } from './types';
2
+ /** Shared by detection and immutable execution snapshots. */
3
+ export declare function isBridgeDirectoryExcluded(name: string): boolean;
4
+ export declare function detectBridgeSource(source: string): Promise<BridgeDetection>;
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isBridgeDirectoryExcluded = isBridgeDirectoryExcluded;
4
+ exports.detectBridgeSource = detectBridgeSource;
5
+ const node_crypto_1 = require("node:crypto");
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
8
+ const glb_1 = require("./glb");
9
+ const hash_1 = require("./hash");
10
+ const types_1 = require("./types");
11
+ const DIRECTORY_EXCLUDES = new Set(['.git', 'node_modules', 'Intermediate', 'Saved', 'DerivedDataCache', 'Library', '.godot']);
12
+ /** Shared by detection and immutable execution snapshots. */
13
+ function isBridgeDirectoryExcluded(name) {
14
+ return DIRECTORY_EXCLUDES.has(name);
15
+ }
16
+ async function hashDirectoryFile(root, path, hash) {
17
+ const info = (0, node_fs_1.statSync)(path);
18
+ const name = (0, node_path_1.relative)(root, path).replaceAll('\\', '/');
19
+ hash.update(`F\0${name}\0${info.size}\0`);
20
+ await new Promise((resolvePromise, rejectPromise) => {
21
+ const stream = (0, node_fs_1.createReadStream)(path);
22
+ stream.on('data', (chunk) => hash.update(chunk));
23
+ stream.on('error', rejectPromise);
24
+ stream.on('end', resolvePromise);
25
+ });
26
+ return info.size;
27
+ }
28
+ async function hashDirectoryTree(root, current, hash, counter) {
29
+ let sizeBytes = 0;
30
+ for (const entry of (0, node_fs_1.readdirSync)(current, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
31
+ const path = (0, node_path_1.join)(current, entry.name);
32
+ if (entry.isSymbolicLink())
33
+ throw new Error(`Bridge directory sources may not contain symlinks: ${path}`);
34
+ if (entry.isDirectory()) {
35
+ if (!isBridgeDirectoryExcluded(entry.name)) {
36
+ counter.directories += 1;
37
+ hash.update(`D\0${(0, node_path_1.relative)(root, path).replaceAll('\\', '/')}\0`);
38
+ sizeBytes += await hashDirectoryTree(root, path, hash, counter);
39
+ }
40
+ }
41
+ else if (entry.isFile()) {
42
+ counter.files += 1;
43
+ sizeBytes += await hashDirectoryFile(root, path, hash);
44
+ }
45
+ }
46
+ return sizeBytes;
47
+ }
48
+ async function hashDirectory(root) {
49
+ const hash = (0, node_crypto_1.createHash)('sha256');
50
+ const counter = { files: 0, directories: 0 };
51
+ const sizeBytes = await hashDirectoryTree(root, root, hash, counter);
52
+ return {
53
+ sha256: hash.digest('hex'),
54
+ sizeBytes,
55
+ fileCount: counter.files,
56
+ directoryCount: counter.directories,
57
+ };
58
+ }
59
+ function directoryKind(path) {
60
+ const names = (0, node_fs_1.readdirSync)(path, { withFileTypes: true }).map((entry) => entry.name);
61
+ const uproject = names.find((name) => name.toLowerCase().endsWith('.uproject'));
62
+ if (uproject)
63
+ return { kind: 'unreal.project', evidence: [`found ${uproject}`] };
64
+ if ((0, node_fs_1.existsSync)((0, node_path_1.join)(path, 'ProjectSettings', 'ProjectVersion.txt')) && (0, node_fs_1.existsSync)((0, node_path_1.join)(path, 'Assets'))) {
65
+ return { kind: 'unity.project', evidence: ['found Assets/ and ProjectSettings/ProjectVersion.txt'] };
66
+ }
67
+ if ((0, node_fs_1.existsSync)((0, node_path_1.join)(path, 'project.godot')))
68
+ return { kind: 'godot.project', evidence: ['found project.godot'] };
69
+ return { kind: 'directory.unknown', evidence: ['no supported engine project marker found'] };
70
+ }
71
+ function fileKind(path) {
72
+ switch ((0, node_path_1.extname)(path).toLowerCase()) {
73
+ case '.glb': return 'format.glb';
74
+ case '.gltf': return 'format.gltf';
75
+ case '.fbx': return 'format.fbx';
76
+ case '.obj': return 'format.obj';
77
+ case '.usd':
78
+ case '.usda':
79
+ case '.usdc': return 'format.usd';
80
+ case '.usdz': return 'format.usdz';
81
+ case '.vrm': return 'format.vrm';
82
+ case '.png':
83
+ case '.jpg':
84
+ case '.jpeg':
85
+ case '.webp':
86
+ case '.tga':
87
+ case '.dds':
88
+ case '.ktx':
89
+ case '.ktx2': return 'format.image';
90
+ case '.wav':
91
+ case '.ogg':
92
+ case '.mp3':
93
+ case '.flac':
94
+ case '.m4a': return 'format.audio';
95
+ default: return 'file.unknown';
96
+ }
97
+ }
98
+ function suggestedType(kind, inspection) {
99
+ if (kind === 'metahuman.face' || kind === 'format.vrm' || (inspection?.skinCount ?? 0) > 0)
100
+ return 'character';
101
+ if (kind.endsWith('.project') || kind === 'format.obj')
102
+ return 'scene';
103
+ if ((inspection?.animationCount ?? 0) > 0 && (inspection?.meshCount ?? 0) === 0)
104
+ return 'animation';
105
+ return 'asset';
106
+ }
107
+ async function detectBridgeSource(source) {
108
+ const path = (0, node_path_1.resolve)(source);
109
+ if (!(0, node_fs_1.existsSync)(path))
110
+ throw new Error(`Bridge source does not exist: ${path}`);
111
+ const info = (0, node_fs_1.statSync)(path);
112
+ if (!info.isFile() && !info.isDirectory())
113
+ throw new Error(`Bridge source must be a regular file or directory: ${path}`);
114
+ if (info.isDirectory()) {
115
+ const detected = directoryKind(path);
116
+ const fingerprint = await hashDirectory(path);
117
+ return {
118
+ schemaVersion: types_1.BRIDGE_DETECTION_SCHEMA,
119
+ source: path,
120
+ sourceKind: detected.kind,
121
+ suggestedType: suggestedType(detected.kind),
122
+ confidence: detected.kind === 'directory.unknown' ? 0.2 : 1,
123
+ evidence: detected.evidence,
124
+ ...fingerprint,
125
+ };
126
+ }
127
+ let kind = fileKind(path);
128
+ const evidence = [`extension ${(0, node_path_1.extname)(path).toLowerCase() || '(none)'}`];
129
+ let inspection;
130
+ if (kind === 'format.glb' || kind === 'format.vrm') {
131
+ const gltf = (0, glb_1.readGlbJson)(path, info.size);
132
+ inspection = (0, glb_1.inspectGlbJson)(gltf);
133
+ evidence.push(`${inspection.meshCount} mesh(es), ${inspection.skinCount} skin(s), ${inspection.animationCount} animation(s)`);
134
+ if (inspection.nodeNames.some((name) => /FaceMesh/i.test(name)) &&
135
+ inspection.materialNames.some((name) => /MI_Eye[LR]_Baked/i.test(name))) {
136
+ kind = 'metahuman.face';
137
+ evidence.push('MetaHuman FaceMesh and baked eye materials');
138
+ }
139
+ }
140
+ return {
141
+ schemaVersion: types_1.BRIDGE_DETECTION_SCHEMA,
142
+ source: path,
143
+ sourceKind: kind,
144
+ suggestedType: suggestedType(kind, inspection),
145
+ confidence: kind === 'file.unknown' ? 0.1 : kind === 'format.fbx' ? 0.8 : 1,
146
+ evidence: [`${(0, node_path_1.basename)(path)}: ${evidence.join('; ')}`],
147
+ sha256: await (0, hash_1.sha256File)(path),
148
+ sizeBytes: info.size,
149
+ ...(inspection ? { inspection } : {}),
150
+ };
151
+ }
152
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/bridge/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type BridgeImportOptions, type BridgeImportResult } from './types';
2
+ export { BRIDGE_MAX_FBX_RAW_TEXTURE_BYTES, discoverGltfDependencies, readBridgeSiblingTextures, } from './internal/snapshots';
3
+ export declare function importWithBridge(source: string, options?: BridgeImportOptions): Promise<BridgeImportResult>;