@helix3/helix-cli 0.1.21-helix3.404 → 0.1.21-helix3.405
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 -1
- package/dist/index.js +33 -3
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +1 -0
- package/dist/lib.js +13 -7
- package/dist/lib.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/vehicle/addOnDefinition.d.ts +19 -0
- package/dist/vehicle/addOnDefinition.js +21 -0
- package/dist/vehicle/addOnDefinition.js.map +1 -0
- package/dist/vehicle/addon.d.ts +6 -0
- package/dist/vehicle/addon.js +21 -0
- package/dist/vehicle/addon.js.map +1 -1
- package/dist/vehicle/addonDefinitionGuard.d.ts +53 -0
- package/dist/vehicle/addonDefinitionGuard.js +206 -0
- package/dist/vehicle/addonDefinitionGuard.js.map +1 -0
- package/dist/vehicle/addonPublished.d.ts +72 -0
- package/dist/vehicle/addonPublished.js +154 -0
- package/dist/vehicle/addonPublished.js.map +1 -0
- package/dist/vehicle/mintAddOn.d.ts +1 -13
- package/dist/vehicle/mintAddOn.js +6 -19
- package/dist/vehicle/mintAddOn.js.map +1 -1
- package/package.json +2 -1
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
package/README.md
CHANGED
|
@@ -54,7 +54,8 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
|
|
|
54
54
|
| `helix continuum make-item --package-id <id> --package-version <v> --manifest-cid <cid> --content-rating <rating> [--offer marketplace\|world --price-lix <n>]` | Project one exact sealed Package Version into an Item, with an optional first offer. |
|
|
55
55
|
| `helix continuum publish-owned-item <item-id> --package-id <id> --package-version <v> --manifest-cid <cid> --content-rating <rating> --accept-rating-attestation` | Publish an existing personal Item from its unchanged public sealed Package pin. Offers are separate. |
|
|
56
56
|
| `helix vehicle audio-check <dir\|package.json\|item-id> [--json]` | Proves every sound the runtime will select resolves, is PCM WAV and is audible (pre-publish on local files, or read-back on a published item). |
|
|
57
|
-
| `helix vehicle addon check <dir> [--json]` | Add-on fit gate for local source and host compatibility. |
|
|
57
|
+
| `helix vehicle addon check <dir> [--json]` | Add-on fit gate for local source and host compatibility, including the web customizer's meshless guard (`ADDON_CUSTOMIZER_REFUSES`: a part with no `model.glb` must be a verified tune-only/sound-only definition). |
|
|
58
|
+
| `helix vehicle addon check --item <addOnId>... / --host <vehicleId>... [--json]` | Published mode (public reads, no sign-in): reads each add-on Item's exact Package pin and runs exactly what the web customizer runs; `--host` checks every add-on on the car's rail. Exit `1` = the customizer would refuse a part, with its message. |
|
|
58
59
|
| `helix item list-slots [--json]` | Print the Character-Creator vocabulary a wearable declares: the cosmetic slot tags, and the genders. |
|
|
59
60
|
|
|
60
61
|
| `helix item distribution create\|list\|update\|disable …` | Manage Marketplace/World Claim or Buy routes without republishing the item or paying another publish fee. |
|
package/dist/index.js
CHANGED
|
@@ -839,16 +839,46 @@ vehicleAddOnCommand
|
|
|
839
839
|
.description('Prove an add-on will fit and land where it should BEFORE paying for it: the local fits/ops contract, the model\'s helixMeshFrame anchoring '
|
|
840
840
|
+ '(a socket-frame part centred on its mount), per host — a vehicle, wheel origins at the hubs, hide targets present, hide grants on the board — '
|
|
841
841
|
+ 'tunable paths the part requires exposed on the host surface, the backend\'s own fit dry run (POST /universal-items/validate-fit: how many '
|
|
842
|
-
+ 'hosts it actually fits),
|
|
842
|
+
+ 'hosts it actually fits), the web customizer\'s meshless guard on the exact definition publish would seal (a part with no model.glb must be a verified '
|
|
843
|
+
+ 'tune-only/sound-only definition, or the customizer refuses to equip it: ADDON_CUSTOMIZER_REFUSES), and — for tune ops — the DRIVE EFFECT on each host, measured with the live runtime\'s own physics and add-on fold '
|
|
843
844
|
+ '(0-100, top speed, quarter mile, skidpad g and roll, full- and part-pedal stops, handbrake), each op judged on a figure it can move; an op '
|
|
844
845
|
+ 'that changes nothing or cancels another is reported. Directory: addon.json { title, fits, ops, ... } + model.glb (none for a tune-only part: '
|
|
845
|
-
+ 'ECU, gearbox, brakes, sway bars, coilovers, tyre compound — every op a tune). Exit 0 = fits every named host and does something'
|
|
846
|
-
|
|
846
|
+
+ 'ECU, gearbox, brakes, sway bars, coilovers, tyre compound — every op a tune). Exit 0 = fits every named host and does something. '
|
|
847
|
+
+ 'PUBLISHED mode (no directory, public reads, no sign-in): --item <addOnItemId> (repeatable) reads the Item\'s exact Package pin, the public manifest and, for a meshless part, '
|
|
848
|
+
+ 'its root, and runs exactly what the web customizer runs; --host <vehicleItemId> does that for every add-on on the car\'s rail. Exit 1 = the customizer would refuse a part, with its message')
|
|
849
|
+
.argument('[dir]', 'the add-on directory (omit with --item / --host)')
|
|
847
850
|
.option('--glb <file>', 'the add-on model, when the directory holds more than one .glb')
|
|
848
851
|
.option('--no-measure', 'skip the drive-effect measurement (it downloads the live runtime and runs its physics, ~1-5 s per host)')
|
|
852
|
+
.option('--item <id>', 'PUBLISHED mode: an add-on Item id to check the way the web customizer reads it (repeatable)', (value, previous) => [...previous, value], [])
|
|
853
|
+
.option('--host <id>', 'PUBLISHED mode: a vehicle Item id; checks every add-on on its rail (repeatable)', (value, previous) => [...previous, value], [])
|
|
854
|
+
.option('--api-url <url>', 'platform API base URL for --item / --host', config_1.DEFAULT_API_URL)
|
|
849
855
|
.option('--json', 'print the machine-readable report')
|
|
850
856
|
.action(async (dir, opts) => {
|
|
851
857
|
try {
|
|
858
|
+
if (opts.item.length || opts.host.length) {
|
|
859
|
+
if (dir)
|
|
860
|
+
throw new Error('pass either an add-on directory or --item/--host, not both');
|
|
861
|
+
const published = await Promise.resolve().then(() => __importStar(require('./vehicle/addonPublished')));
|
|
862
|
+
const deps = { api: published.publicRequester(opts.apiUrl), apiUrl: opts.apiUrl.replace(/\/$/, '') };
|
|
863
|
+
const verdicts = [];
|
|
864
|
+
for (const id of opts.item)
|
|
865
|
+
verdicts.push(await published.checkPublishedAddOn(id, deps));
|
|
866
|
+
const hosts = [];
|
|
867
|
+
for (const id of opts.host)
|
|
868
|
+
hosts.push(await published.checkHostAddOns(id, deps));
|
|
869
|
+
const ok = verdicts.every((v) => v.ok) && hosts.every((h) => h.ok && !h.truncated);
|
|
870
|
+
printVehicleJsonOr(opts.json, { ok, items: verdicts, hosts }, () => {
|
|
871
|
+
for (const v of verdicts)
|
|
872
|
+
console.log(published.formatPublishedVerdict(v));
|
|
873
|
+
for (const h of hosts)
|
|
874
|
+
console.log(published.formatHostAddOns(h));
|
|
875
|
+
});
|
|
876
|
+
if (!ok)
|
|
877
|
+
process.exitCode = 1;
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
if (!dir)
|
|
881
|
+
throw new Error('name an add-on directory, or --item <addOnItemId> / --host <vehicleItemId> to check published add-ons');
|
|
852
882
|
const addon = await Promise.resolve().then(() => __importStar(require('./vehicle/addon')));
|
|
853
883
|
const creds = requireAuth();
|
|
854
884
|
const report = await addon.checkAddOn(addon.readAddOnDir(dir, { glb: opts.glb }), creds, {
|