@helix3/helix-cli 0.1.20-helix3.390 → 0.1.20-helix3.392
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/dist/continuum/pull.js +6 -2
- package/dist/continuum/pull.js.map +1 -1
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -1
- package/dist/itemPublishVersion.d.ts +46 -0
- package/dist/itemPublishVersion.js +242 -0
- package/dist/itemPublishVersion.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/visualQa/moveUx.d.ts +1 -1
- package/dist/visualQa/moveUx.js +7 -5
- package/dist/visualQa/moveUx.js.map +1 -1
- package/dist/visualQa/resolve.js +5 -1
- package/dist/visualQa/resolve.js.map +1 -1
- package/dist/visualQa/viewerPage.d.ts +1 -1
- package/dist/visualQa/viewerPage.js +18 -12
- package/dist/visualQa/viewerPage.js.map +1 -1
- package/docs/visual-qa.md +4 -0
- package/package.json +1 -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/dist/continuum/pull.js
CHANGED
|
@@ -13,8 +13,12 @@ async function pullContinuumPackageSource(api, packageId, version, outputDirecto
|
|
|
13
13
|
if (!validation.valid)
|
|
14
14
|
throw new TypeError(`Package Version is invalid: ${validation.errors.join('; ')}`);
|
|
15
15
|
const manifest = validation.manifest;
|
|
16
|
-
if (!manifest.source)
|
|
17
|
-
throw new TypeError('Package Version has no creator source bundle
|
|
16
|
+
if (!manifest.source) {
|
|
17
|
+
throw new TypeError('Package Version has no creator source bundle, so there is nothing to pull for remix. ' +
|
|
18
|
+
'A publish-glb (asset/character) Package stores only the sealed GLB: read its manifest with ' +
|
|
19
|
+
'GET /api/v1/continuum/public/packages/<packageId>/versions/<version>, then fetch the GLB bytes from ' +
|
|
20
|
+
'the public object/artifact bytes route the manifest names.');
|
|
21
|
+
}
|
|
18
22
|
const downloaded = await api.readPackageObject(packageId, version, inspection.manifestCid, manifest.source.cid);
|
|
19
23
|
if (downloaded.mediaType !== manifest.source.mediaType || downloaded.bytes.byteLength !== manifest.source.bytes || (0, helix_manifest_1.cidFromBytes)(downloaded.bytes) !== manifest.source.cid) {
|
|
20
24
|
throw new TypeError('downloaded source bundle does not match its exact Package descriptor');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/continuum/pull.ts"],"names":[],"mappings":";;AAwBA,
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/continuum/pull.ts"],"names":[],"mappings":";;AAwBA,gEAwCC;AAhED,6CAAqC;AACrC,mEAA6H;AAC7H,+CAA2D;AAC3D,yCAAoC;AACpC,mEAAoE;AACpE,iDAA0F;AAmBnF,KAAK,UAAU,0BAA0B,CAC9C,GAA2B,EAC3B,SAAiB,EACjB,OAAe,EACf,eAAuB;IAEvB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,IAAA,gDAA+B,EAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxE,IAAI,CAAC,UAAU,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1G,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,SAAS,CACjB,uFAAuF;YACrF,6FAA6F;YAC7F,sGAAsG;YACtG,4DAA4D,CAC/D,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChH,IAAI,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,IAAA,6BAAY,EAAC,UAAU,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1K,MAAM,IAAI,SAAS,CAAC,sEAAsE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,MAAM,GAAG,IAAA,yCAA0B,EAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,eAAe,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,IAAA,gBAAK,EAAC,MAAM,CAAC,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;IACtE,CAAC;IACD,MAAM,IAAA,gBAAK,EAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,IAAA,2CAA4B,EAAC,MAAM,EAAE,IAAA,mBAAO,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpF,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,gCAAgC;QACxC,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;QACnG,aAAa,EAAE,QAAQ;QACvB,OAAO,EAAE,6IAA6I;KACvJ,CAAC;IACF,MAAM,IAAA,oBAAS,EAAC,IAAA,mBAAO,EAAC,MAAM,EAAE,qBAAqB,CAAC,EAAE,oBAAM,CAAC,IAAI,CAAC,IAAA,mCAAkB,EAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChI,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC/H,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -36,6 +36,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
37
|
require("./stdioBlocking");
|
|
38
38
|
const itemSetVersion_1 = require("./itemSetVersion");
|
|
39
|
+
const itemPublishVersion_1 = require("./itemPublishVersion");
|
|
39
40
|
const moveUx_1 = require("./visualQa/moveUx");
|
|
40
41
|
const validate_1 = require("./vehicle/validate");
|
|
41
42
|
const commander_1 = require("commander");
|
|
@@ -1706,6 +1707,53 @@ itemThumbnail
|
|
|
1706
1707
|
fail(`✖ ${(0, itemThumbnail_1.describeThumbnailError)(error, itemId)}`);
|
|
1707
1708
|
}
|
|
1708
1709
|
});
|
|
1710
|
+
// Ship a corrected mesh onto an already-published GLB add-on/prop/avatar IN PLACE: seal a new Version of the item's
|
|
1711
|
+
// own Continuum Package, then move the item pointer. On a listed item the move is refused by the visual-QA gate (the
|
|
1712
|
+
// sealed Version stays behind), and the refusal names the two finishing steps: `item visual-qa --package-version vN
|
|
1713
|
+
// --submit`, then `item set-version`. This is step 1 of `VERSION_MOVE_FLOW_HELP`.
|
|
1714
|
+
item
|
|
1715
|
+
.command('publish-version')
|
|
1716
|
+
.description('Ship a corrected mesh onto an already-published GLB add-on/prop/avatar, IN PLACE — new Package Version, same item id/owner/listings; every existing owner gets it at their next spawn')
|
|
1717
|
+
.argument('<item-id>', 'existing, already-published universal item UUID')
|
|
1718
|
+
.argument('<file>', 'corrected mesh (binary glTF, .glb)')
|
|
1719
|
+
.requiredOption('--reason <text>', 'required, lands in the audit ledger (e.g. "fixed poke-through on the left cuff")')
|
|
1720
|
+
.option('--notes <text>', 'optional creator-facing changelog note')
|
|
1721
|
+
.option('--expected-current-version-id <uuid>', 'refuse if the item has moved off this Package Version since you last read it')
|
|
1722
|
+
.option('--update-id <uuid>', 'idempotency key — retrying with the same id never double-publishes')
|
|
1723
|
+
.option('--json', 'machine-readable output')
|
|
1724
|
+
.addHelpText('after', moveUx_1.VERSION_MOVE_FLOW_HELP)
|
|
1725
|
+
.action(async (itemId, file, opts) => {
|
|
1726
|
+
const creds = requireAuth();
|
|
1727
|
+
try {
|
|
1728
|
+
const result = await (0, itemPublishVersion_1.publishItemVersion)(itemId, (0, node_path_1.resolve)(file), {
|
|
1729
|
+
reason: opts.reason,
|
|
1730
|
+
notes: opts.notes,
|
|
1731
|
+
expectedCurrentVersionId: opts.expectedCurrentVersionId,
|
|
1732
|
+
updateId: opts.updateId,
|
|
1733
|
+
onProgress: (message) => !opts.json && console.log(message),
|
|
1734
|
+
}, creds);
|
|
1735
|
+
if (opts.json) {
|
|
1736
|
+
console.log(JSON.stringify({ ...result, refusal: result.refusal ? { status: result.refusal.status, body: result.refusal.body } : undefined }, null, 2));
|
|
1737
|
+
if (!result.move)
|
|
1738
|
+
process.exitCode = 1;
|
|
1739
|
+
return;
|
|
1740
|
+
}
|
|
1741
|
+
if (result.move) {
|
|
1742
|
+
for (const line of (0, itemSetVersion_1.renderSetVersionSuccess)(result.move))
|
|
1743
|
+
console.log(line);
|
|
1744
|
+
console.log(` sealed: ${result.packageId}@${result.version} (manifest ${result.manifestCid})`);
|
|
1745
|
+
return;
|
|
1746
|
+
}
|
|
1747
|
+
console.log(`✔ Sealed ${result.packageId}@${result.version} — a new Version of ${itemId} (manifest ${result.manifestCid}).`);
|
|
1748
|
+
console.log(` The move is gated by visual QA; the seal is left in place and is reused by a retry with the same mesh.`);
|
|
1749
|
+
if (result.refusal)
|
|
1750
|
+
console.log((0, itemSetVersion_1.renderSetVersionError)(result.refusal));
|
|
1751
|
+
process.exitCode = 1;
|
|
1752
|
+
}
|
|
1753
|
+
catch (error) {
|
|
1754
|
+
fail(error instanceof lib_1.ApiError ? error.render() : `✖ ${error instanceof Error ? error.message : String(error)}`);
|
|
1755
|
+
}
|
|
1756
|
+
});
|
|
1709
1757
|
// Move a (listed) item to an already-sealed Package Version of its own package. The visual-QA gate refuses the move
|
|
1710
1758
|
// until that version has a passing run; a refusal prints the server's message first because it names the next command.
|
|
1711
1759
|
item
|