@helix3/helix-cli 0.1.13-helix3.93 → 0.1.13-helix3.97
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/assets/item-def-sounds/Common/A_DryShot.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_CloseCoverA.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_CloseCoverB.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_InsertMag.ogg +0 -0
- package/assets/item-def-sounds/Common/A_LMG_RemoveMag.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_InsertMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Pistol_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_ChargingHandle_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_InsertMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Rifle_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_SMG_ChargingHandle_003.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_ChargingHandle.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_001.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_002.ogg +0 -0
- package/assets/item-def-sounds/Common/A_Sniper_RemoveMag_003.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/LMG/A_LWS-32_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Pistol/A_Gaston_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Rifle/A_KAL_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_InsertMag.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_RemoveMag.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/SMG/A_Bison_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Shotgun/A_DB-12_Shot_003.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_001.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_002.ogg +0 -0
- package/assets/item-def-sounds/Sniper/A_CS-446_Shot_003.ogg +0 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -1
- package/dist/init.js +3 -0
- package/dist/init.js.map +1 -1
- package/dist/itemDef/gunConfigRules.d.ts +24 -0
- package/dist/itemDef/gunConfigRules.js +244 -0
- package/dist/itemDef/gunConfigRules.js.map +1 -0
- package/dist/itemDef/inspect.d.ts +17 -0
- package/dist/itemDef/inspect.js +118 -0
- package/dist/itemDef/inspect.js.map +1 -0
- package/dist/itemDef/publish.d.ts +33 -0
- package/dist/itemDef/publish.js +131 -0
- package/dist/itemDef/publish.js.map +1 -0
- package/dist/itemDef/scaffold.d.ts +28 -0
- package/dist/itemDef/scaffold.js +165 -0
- package/dist/itemDef/scaffold.js.map +1 -0
- package/dist/itemDef/tables.d.ts +56 -0
- package/dist/itemDef/tables.js +169 -0
- package/dist/itemDef/tables.js.map +1 -0
- package/dist/itemDef/validate.d.ts +16 -0
- package/dist/itemDef/validate.js +93 -0
- package/dist/itemDef/validate.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/verifySubPath.js +19 -2
- package/dist/verifySubPath.js.map +1 -1
- package/dist/world/baseline.js +7 -0
- package/dist/world/baseline.js.map +1 -1
- package/package.json +4 -3
- package/vendor/ability-manifest.mjs +4 -4
- package/vendor/installed-index.mjs +1 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/index.js
CHANGED
|
@@ -2666,6 +2666,113 @@ gesture
|
|
|
2666
2666
|
fail(`✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
2667
2667
|
}
|
|
2668
2668
|
});
|
|
2669
|
+
const itemDef = program
|
|
2670
|
+
.command('item-def')
|
|
2671
|
+
.description('Interactive weapon definitions — scaffold a complete descriptor from a mesh + category, validate it offline, publish it to the Vault, and inspect a published one');
|
|
2672
|
+
itemDef
|
|
2673
|
+
.command('scaffold')
|
|
2674
|
+
.description('Emit a complete, publishable weapon descriptor: category archetype + engine spread/reload tables resolved in, default (or your own) sounds copied next to it')
|
|
2675
|
+
.requiredOption('--mesh <file.glb>', 'the prop mesh (grip at origin, +y up, +z out the barrel, meters)')
|
|
2676
|
+
.requiredOption('--category <category>', 'Rifle | Pistol | SMG | Shotgun | Sniper | LMG — inherits spread, reload foley, grip preset and shell class')
|
|
2677
|
+
.option('--sounds <dir>', 'directory of your own .ogg shot sounds (mono opus-in-ogg; a file named *dry* becomes the dry-fire click)')
|
|
2678
|
+
.option('--title <name>', 'item title, also the source of the item id (default: the mesh basename)')
|
|
2679
|
+
.option('--out <dir>', 'output directory for the descriptor + copied files', '.')
|
|
2680
|
+
.action(async (opts) => {
|
|
2681
|
+
try {
|
|
2682
|
+
const { scaffoldItemDef } = await Promise.resolve().then(() => __importStar(require('./itemDef/scaffold')));
|
|
2683
|
+
const result = scaffoldItemDef({
|
|
2684
|
+
mesh: opts.mesh,
|
|
2685
|
+
category: opts.category,
|
|
2686
|
+
...(opts.sounds !== undefined && { sounds: opts.sounds }),
|
|
2687
|
+
...(opts.title !== undefined && { title: opts.title }),
|
|
2688
|
+
out: opts.out,
|
|
2689
|
+
});
|
|
2690
|
+
console.log(`✔ ${result.descriptorPath}`);
|
|
2691
|
+
console.log(` ${result.copiedSounds.length} sound file(s) copied into sounds/`);
|
|
2692
|
+
if (result.warnings.length > 0)
|
|
2693
|
+
console.log(`warnings:\n ${result.warnings.join('\n ')}`);
|
|
2694
|
+
console.log(`next steps:\n ${result.nextSteps.join('\n ')}`);
|
|
2695
|
+
}
|
|
2696
|
+
catch (err) {
|
|
2697
|
+
fail(`✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
2698
|
+
}
|
|
2699
|
+
});
|
|
2700
|
+
itemDef
|
|
2701
|
+
.command('validate')
|
|
2702
|
+
.description('Validate a weapon descriptor offline: the manifest authority validator, the vendored engine gun-config rules, referenced-file existence, and the mesh precheck')
|
|
2703
|
+
.argument('<file>', 'the .helix-interactive.json descriptor')
|
|
2704
|
+
.action(async (file) => {
|
|
2705
|
+
try {
|
|
2706
|
+
const { validateItemDefFile } = await Promise.resolve().then(() => __importStar(require('./itemDef/validate')));
|
|
2707
|
+
const result = validateItemDefFile(file);
|
|
2708
|
+
if (result.warnings.length > 0)
|
|
2709
|
+
console.log(`warnings:\n ${result.warnings.join('\n ')}`);
|
|
2710
|
+
if (result.errors.length > 0) {
|
|
2711
|
+
fail(`✖ ${result.errors.length} error(s):\n - ${result.errors.join('\n - ')}`);
|
|
2712
|
+
}
|
|
2713
|
+
console.log(`✔ valid — ${result.relativeRefs.length} referenced file(s) present`);
|
|
2714
|
+
}
|
|
2715
|
+
catch (err) {
|
|
2716
|
+
fail(`✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
2717
|
+
}
|
|
2718
|
+
});
|
|
2719
|
+
itemDef
|
|
2720
|
+
.command('publish')
|
|
2721
|
+
.description('Publish a weapon definition: upload the mesh + every referenced sound, rewrite sound paths to vault: refs, publish the descriptor, link the product')
|
|
2722
|
+
.argument('<file>', 'the .helix-interactive.json descriptor')
|
|
2723
|
+
.option('--slug <slug>', 'product slug, unique platform-wide (default: weapon-<id>; reruns need a fresh one)')
|
|
2724
|
+
.option('--keep-personal', 'keep the product off the marketplace and out of the publish fee; the link still grants you an instance')
|
|
2725
|
+
.action(async (file, opts) => {
|
|
2726
|
+
const creds = requireAuth();
|
|
2727
|
+
const mismatch = (0, config_1.credsEnvMismatchWarning)(creds.apiUrl);
|
|
2728
|
+
if (mismatch)
|
|
2729
|
+
console.log(mismatch);
|
|
2730
|
+
try {
|
|
2731
|
+
const { publishItemDef } = await Promise.resolve().then(() => __importStar(require('./itemDef/publish')));
|
|
2732
|
+
if (opts.keepPersonal !== true) {
|
|
2733
|
+
console.log('note: a marketplace product link can charge a publish fee — pass --keep-personal for a fee-free personal publish.');
|
|
2734
|
+
}
|
|
2735
|
+
const report = await publishItemDef(lib_1.HelixApi.forCredentials(creds), {
|
|
2736
|
+
file,
|
|
2737
|
+
...(opts.slug !== undefined && { slug: opts.slug }),
|
|
2738
|
+
keepPersonal: opts.keepPersonal === true,
|
|
2739
|
+
});
|
|
2740
|
+
console.log(`✔ ${report.title} — definition ${report.definition.assetId}@${report.definition.version}`);
|
|
2741
|
+
console.log(` prop ${report.prop.assetId}@${report.prop.version} · ${report.audio.length} audio upload(s) · product slug ${report.product.slug}`);
|
|
2742
|
+
if (report.warnings.length > 0)
|
|
2743
|
+
console.log(`warnings:\n ${report.warnings.join('\n ')}`);
|
|
2744
|
+
}
|
|
2745
|
+
catch (err) {
|
|
2746
|
+
fail(err instanceof lib_1.ApiError ? err.render() : `✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
2747
|
+
}
|
|
2748
|
+
});
|
|
2749
|
+
itemDef
|
|
2750
|
+
.command('inspect')
|
|
2751
|
+
.description('Resolve a published weapon definition and print the numbers an author tunes against')
|
|
2752
|
+
.argument('<asset-ref>', 'definition assetId, optionally @version (e.g. abc123@2)')
|
|
2753
|
+
.option('--json', 'machine-readable output (the raw descriptor + resolve metadata)')
|
|
2754
|
+
.action(async (ref, opts) => {
|
|
2755
|
+
const creds = (0, config_1.loadCredentials)();
|
|
2756
|
+
const apiUrl = creds?.apiUrl ?? config_1.DEFAULT_API_URL;
|
|
2757
|
+
try {
|
|
2758
|
+
const { inspectItemDef, formatItemDefInspect } = await Promise.resolve().then(() => __importStar(require('./itemDef/inspect')));
|
|
2759
|
+
const fetchText = async (url) => {
|
|
2760
|
+
const res = await fetch(url);
|
|
2761
|
+
if (!res.ok)
|
|
2762
|
+
throw new Error(`HTTP ${res.status}`);
|
|
2763
|
+
return res.text();
|
|
2764
|
+
};
|
|
2765
|
+
const api = creds ? lib_1.HelixApi.forCredentials(creds) : new lib_1.HelixApi(apiUrl);
|
|
2766
|
+
const result = await inspectItemDef(api, fetchText, ref);
|
|
2767
|
+
if (opts.json)
|
|
2768
|
+
console.log(JSON.stringify(result, null, 2));
|
|
2769
|
+
else
|
|
2770
|
+
console.log(formatItemDefInspect(result));
|
|
2771
|
+
}
|
|
2772
|
+
catch (err) {
|
|
2773
|
+
fail(err instanceof lib_1.ApiError ? err.render() : `✖ ${err instanceof Error ? err.message : String(err)}`);
|
|
2774
|
+
}
|
|
2775
|
+
});
|
|
2669
2776
|
const world = program
|
|
2670
2777
|
.command('world')
|
|
2671
2778
|
.description("World tools — create the world's identity before publishing, and measure a built world's geometry as data instead of eyeballing screenshots");
|