@helix3/helix-cli 0.1.13-helix3.141 → 0.1.13-helix3.142
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 +2 -0
- package/dist/index.js +109 -1
- package/dist/index.js.map +1 -1
- package/dist/sceneImport/archive.d.ts +30 -0
- package/dist/sceneImport/archive.js +336 -0
- package/dist/sceneImport/archive.js.map +1 -0
- package/dist/sceneImport/bistroMaterialBake.d.ts +20 -0
- package/dist/sceneImport/bistroMaterialBake.js +165 -0
- package/dist/sceneImport/bistroMaterialBake.js.map +1 -0
- package/dist/sceneImport/bistroTexturePlan.d.ts +6 -0
- package/dist/sceneImport/bistroTexturePlan.js +23 -0
- package/dist/sceneImport/bistroTexturePlan.js.map +1 -0
- package/dist/sceneImport/compiler.d.ts +36 -0
- package/dist/sceneImport/compiler.js +244 -0
- package/dist/sceneImport/compiler.js.map +1 -0
- package/dist/sceneImport/fbx.d.ts +32 -0
- package/dist/sceneImport/fbx.js +208 -0
- package/dist/sceneImport/fbx.js.map +1 -0
- package/dist/sceneImport/obj.d.ts +14 -0
- package/dist/sceneImport/obj.js +231 -0
- package/dist/sceneImport/obj.js.map +1 -0
- package/dist/sceneImport/package.d.ts +34 -0
- package/dist/sceneImport/package.js +411 -0
- package/dist/sceneImport/package.js.map +1 -0
- package/dist/sceneImport/packageReader.d.ts +10 -0
- package/dist/sceneImport/packageReader.js +200 -0
- package/dist/sceneImport/packageReader.js.map +1 -0
- package/dist/sceneImport/publish.d.ts +43 -0
- package/dist/sceneImport/publish.js +88 -0
- package/dist/sceneImport/publish.js.map +1 -0
- package/dist/sceneImport/spawnProbe.d.ts +48 -0
- package/dist/sceneImport/spawnProbe.js +94 -0
- package/dist/sceneImport/spawnProbe.js.map +1 -0
- package/dist/sceneImport/textureDecode.d.ts +19 -0
- package/dist/sceneImport/textureDecode.js +275 -0
- package/dist/sceneImport/textureDecode.js.map +1 -0
- package/dist/sceneImport/types.d.ts +50 -0
- package/dist/sceneImport/types.js +9 -0
- package/dist/sceneImport/types.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/vaultPublish.d.ts +4 -1
- package/dist/vaultPublish.js +15 -1
- package/dist/vaultPublish.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -59,6 +59,8 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
|
|
|
59
59
|
| `helix assets credits\|check-loaders` | Render asset credits from provenance and reject models requiring unsupported loaders. |
|
|
60
60
|
| `helix character retarget-animation <clip.fbx\|clip.glb>` | Retarget a raw Mixamo/Meshy clip directly to `helix-humanoid@1`. FBX conversion is deterministic and runs inside the CLI; no hidden Blender/DCC pre-export is required. |
|
|
61
61
|
| `helix world audit\|source-audit\|perf-gate\|prove-live` | Run the blocking world QA, performance, and deployed-build identity gates. |
|
|
62
|
+
| `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. |
|
|
63
|
+
| `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. |
|
|
62
64
|
| `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. |
|
|
63
65
|
| `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. |
|
|
64
66
|
| `helix doctor [--project <dir>]` | Print the environment + whether the @helix toolchain (CLI/MCP/SDK/manifest) is current. |
|
package/dist/index.js
CHANGED
|
@@ -1742,15 +1742,19 @@ assets
|
|
|
1742
1742
|
.option('--description <text>', 'what this asset is')
|
|
1743
1743
|
.option('--tags <a,b>', 'comma-separated tags')
|
|
1744
1744
|
.option('--private', 'keep it out of Vault search — only you can reference it')
|
|
1745
|
+
.option('--license <license>', 'asset license (use cc_by for CC BY source derivatives)')
|
|
1745
1746
|
.option('--human', 'readable summary instead of JSON')
|
|
1746
1747
|
.action(async (file, opts) => {
|
|
1747
1748
|
const creds = requireAuth();
|
|
1748
1749
|
try {
|
|
1749
|
-
const { publishVaultAsset } = await Promise.resolve().then(() => __importStar(require('./vaultPublish')));
|
|
1750
|
+
const { isVaultAssetLicense, publishVaultAsset } = await Promise.resolve().then(() => __importStar(require('./vaultPublish')));
|
|
1750
1751
|
const path = (0, node_path_1.resolve)(file);
|
|
1751
1752
|
if (!(0, node_fs_1.existsSync)(path))
|
|
1752
1753
|
fail(`✖ no such file: ${file}`);
|
|
1753
1754
|
const bytes = (0, node_fs_1.readFileSync)(path);
|
|
1755
|
+
if (opts.license !== undefined && !isVaultAssetLicense(opts.license)) {
|
|
1756
|
+
fail('✖ unknown Vault license; use helix_standard, cc0, cc_by, or all_rights_reserved');
|
|
1757
|
+
}
|
|
1754
1758
|
const result = await publishVaultAsset(lib_1.HelixApi.forCredentials(creds), {
|
|
1755
1759
|
bytes,
|
|
1756
1760
|
filename: (0, node_path_1.basename)(path),
|
|
@@ -1759,6 +1763,7 @@ assets
|
|
|
1759
1763
|
...(opts.description !== undefined && { description: opts.description }),
|
|
1760
1764
|
...(opts.tags !== undefined && { tags: opts.tags.split(',') }),
|
|
1761
1765
|
...(opts.private === true && { visibility: 'private' }),
|
|
1766
|
+
...(opts.license !== undefined && { license: opts.license }),
|
|
1762
1767
|
});
|
|
1763
1768
|
if (opts.human) {
|
|
1764
1769
|
console.log(`✔ ${result.assetId} v${result.artifact.version}`);
|
|
@@ -3119,6 +3124,109 @@ world
|
|
|
3119
3124
|
fail(err instanceof lib_1.ApiError ? err.render() : `✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
3120
3125
|
}
|
|
3121
3126
|
});
|
|
3127
|
+
const sceneSource = world
|
|
3128
|
+
.command('scene-source')
|
|
3129
|
+
.description('Inventory and compile rights-clean native Scene v2 source packages');
|
|
3130
|
+
sceneSource
|
|
3131
|
+
.command('inventory')
|
|
3132
|
+
.description('Hash and inventory one supported source archive without extracting it')
|
|
3133
|
+
.argument('<source>', 'helsinki-672496d1 or bistro-interior')
|
|
3134
|
+
.argument('<archive>', 'immutable original ZIP')
|
|
3135
|
+
.action(async (source, archive) => {
|
|
3136
|
+
try {
|
|
3137
|
+
const { inventoryKnownSceneSource } = await Promise.resolve().then(() => __importStar(require('./sceneImport/compiler')));
|
|
3138
|
+
if (source !== 'helsinki-672496d1' && source !== 'bistro-interior') {
|
|
3139
|
+
fail('✖ source must be helsinki-672496d1 or bistro-interior');
|
|
3140
|
+
}
|
|
3141
|
+
console.log(JSON.stringify(await inventoryKnownSceneSource(source, (0, node_path_1.resolve)(archive)), null, 2));
|
|
3142
|
+
}
|
|
3143
|
+
catch (err) {
|
|
3144
|
+
fail(`✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
3145
|
+
}
|
|
3146
|
+
});
|
|
3147
|
+
sceneSource
|
|
3148
|
+
.command('compile')
|
|
3149
|
+
.description('Compile deterministic proxy/detail GLBs and an existing-schema Scene v2 package')
|
|
3150
|
+
.argument('<source>', 'helsinki-672496d1 or bistro-interior')
|
|
3151
|
+
.argument('<archive>', 'immutable original ZIP')
|
|
3152
|
+
.requiredOption('-o, --output <dir>', 'empty/new output directory for generated artifacts')
|
|
3153
|
+
.action(async (source, archive, opts) => {
|
|
3154
|
+
try {
|
|
3155
|
+
const { compileKnownSceneSource } = await Promise.resolve().then(() => __importStar(require('./sceneImport/compiler')));
|
|
3156
|
+
if (source !== 'helsinki-672496d1' && source !== 'bistro-interior') {
|
|
3157
|
+
fail('✖ source must be helsinki-672496d1 or bistro-interior');
|
|
3158
|
+
}
|
|
3159
|
+
const outputDir = (0, node_path_1.resolve)(opts.output);
|
|
3160
|
+
const result = await compileKnownSceneSource({ source, archivePath: (0, node_path_1.resolve)(archive), outputDir });
|
|
3161
|
+
const vaultPublication = result.resourcePaths.map((path) => ({
|
|
3162
|
+
path,
|
|
3163
|
+
license: 'cc_by',
|
|
3164
|
+
visibility: 'private',
|
|
3165
|
+
command: `helix assets publish ${JSON.stringify((0, node_path_1.join)(outputDir, path))} --license cc_by --private`,
|
|
3166
|
+
}));
|
|
3167
|
+
console.log(JSON.stringify({ ...result, scene: undefined, vaultPublication }, null, 2));
|
|
3168
|
+
}
|
|
3169
|
+
catch (err) {
|
|
3170
|
+
fail(`✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
3171
|
+
}
|
|
3172
|
+
});
|
|
3173
|
+
sceneSource
|
|
3174
|
+
.command('publish')
|
|
3175
|
+
.description('Validate and dry-run the native Scene v2 World-build multipart request')
|
|
3176
|
+
.argument('<world-id>', 'owned World UUID')
|
|
3177
|
+
.argument('<package-dir>', 'compiled Scene v2 package directory')
|
|
3178
|
+
.option('--profile <id>', 'Scene profile', 'world')
|
|
3179
|
+
.option('--content-rating <rating>', 'everyone, teen, or mature', 'everyone')
|
|
3180
|
+
.option('--supports-mobile', 'declare mobile support', false)
|
|
3181
|
+
.option('--requires-auth', 'require an authenticated player', false)
|
|
3182
|
+
.option('--visibility <visibility>', 'private, unlisted, or public', 'private')
|
|
3183
|
+
.option('--publish', 'upload the package and activate it as the World\'s build', false)
|
|
3184
|
+
.action(async (worldId, packageDir, opts) => {
|
|
3185
|
+
try {
|
|
3186
|
+
if (!['everyone', 'teen', 'mature'].includes(opts.contentRating)) {
|
|
3187
|
+
fail('✖ --content-rating must be everyone, teen, or mature');
|
|
3188
|
+
}
|
|
3189
|
+
if (!['private', 'unlisted', 'public'].includes(opts.visibility)) {
|
|
3190
|
+
fail('✖ --visibility must be private, unlisted, or public');
|
|
3191
|
+
}
|
|
3192
|
+
const { loadSceneV2Package } = await Promise.resolve().then(() => __importStar(require('./sceneImport/packageReader')));
|
|
3193
|
+
const { createSceneV2DryRunReceipt, publishSceneV2World } = await Promise.resolve().then(() => __importStar(require('./sceneImport/publish')));
|
|
3194
|
+
const input = await loadSceneV2Package({
|
|
3195
|
+
packageDir: (0, node_path_1.resolve)(packageDir),
|
|
3196
|
+
worldId,
|
|
3197
|
+
profileId: opts.profile,
|
|
3198
|
+
contentRating: opts.contentRating,
|
|
3199
|
+
supportsMobile: opts.supportsMobile,
|
|
3200
|
+
requiresAuth: opts.requiresAuth,
|
|
3201
|
+
visibility: opts.visibility,
|
|
3202
|
+
});
|
|
3203
|
+
if (!opts.publish) {
|
|
3204
|
+
console.log(JSON.stringify(createSceneV2DryRunReceipt(input), null, 2));
|
|
3205
|
+
return;
|
|
3206
|
+
}
|
|
3207
|
+
// `--visibility private` gates the WORLD ROW, not the bytes: published
|
|
3208
|
+
// Scene resources are content-addressed objects on the public worlds
|
|
3209
|
+
// bucket, so a private World is unlisted, not confidential. Say so
|
|
3210
|
+
// rather than letting the flag name imply a guarantee the backend does
|
|
3211
|
+
// not make yet.
|
|
3212
|
+
const creds = requireAuth();
|
|
3213
|
+
const receipt = await publishSceneV2World(lib_1.HelixApi.forCredentials(creds), input);
|
|
3214
|
+
console.log(JSON.stringify({
|
|
3215
|
+
schemaVersion: 'helix.scene-v2-world-build/1',
|
|
3216
|
+
dryRun: false,
|
|
3217
|
+
published: true,
|
|
3218
|
+
apiUrl: creds.apiUrl,
|
|
3219
|
+
worldId: input.worldId,
|
|
3220
|
+
profileId: input.profileId,
|
|
3221
|
+
visibility: input.visibility,
|
|
3222
|
+
contentDelivery: 'public-content-addressed; --visibility gates World discovery only',
|
|
3223
|
+
receipt,
|
|
3224
|
+
}, null, 2));
|
|
3225
|
+
}
|
|
3226
|
+
catch (err) {
|
|
3227
|
+
fail(err instanceof lib_1.ApiError ? err.render() : `✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
3228
|
+
}
|
|
3229
|
+
});
|
|
3122
3230
|
addBundledAudit(world, {
|
|
3123
3231
|
name: 'audit',
|
|
3124
3232
|
description: 'Run the blocking composition, bundle-budget, loader, and provenance audit',
|