@helix3/helix-cli 0.1.18-helix3.322 → 0.1.18-helix3.324
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 +1 -1
- package/dist/addOnPackageVersion.d.ts +19 -0
- package/dist/addOnPackageVersion.js +31 -1
- package/dist/addOnPackageVersion.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/visualQa/avatar.d.ts +3 -0
- package/dist/visualQa/avatar.js +288 -0
- package/dist/visualQa/avatar.js.map +1 -0
- package/dist/visualQa/avatarMath.d.ts +56 -0
- package/dist/visualQa/avatarMath.js +113 -0
- package/dist/visualQa/avatarMath.js.map +1 -0
- package/dist/visualQa/avatarProbe.d.ts +1 -0
- package/dist/visualQa/avatarProbe.js +113 -0
- package/dist/visualQa/avatarProbe.js.map +1 -0
- package/dist/visualQa/checklists.js +6 -2
- package/dist/visualQa/checklists.js.map +1 -1
- package/dist/visualQa/command.d.ts +3 -0
- package/dist/visualQa/command.js +8 -3
- package/dist/visualQa/command.js.map +1 -1
- package/dist/visualQa/viewer.js +1 -1
- package/dist/visualQa/viewer.js.map +1 -1
- 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_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/README.md
CHANGED
|
@@ -48,7 +48,7 @@ The token is stored in `~/.helix/credentials.json` (mode `600`). It's sent as
|
|
|
48
48
|
| `helix item list-slots [--json]` | Print the Character-Creator vocabulary a wearable declares: the cosmetic slot tags, and the genders. |
|
|
49
49
|
| `helix item publish <mesh.glb> --title <t> [--collectible-supply <n>] [initial distribution flags] [--dry-run\|--quote]` | Publish a Standard item by default, or one fixed-supply Collectible. The item definition is separate from acquisition routes. |
|
|
50
50
|
| `helix item distribution create\|list\|update\|disable …` | Manage Marketplace/World Claim or Buy routes without republishing the item or paying another publish fee. |
|
|
51
|
-
| `helix item visual-qa <item-id> [--submit] [--local-critic] [--storage-state <file>] [--host <id…>]` | Render the item's current package version headless in the real runtime (test-grounds world for vehicles, the customiser for add-ons and wearables on every declared host/base, the item viewer for props), measure it, and with `--submit` record the backend's verdict (numeric asserts + vision critic) against that exact version. **Marketplace/Vault listing, distributions and version moves on a public item require a pass.** See [docs/visual-qa.md](docs/visual-qa.md). |
|
|
51
|
+
| `helix item visual-qa <item-id> [--submit] [--local-critic] [--storage-state <file>] [--host <id…>]` | Render the item's current package version headless in the real runtime (test-grounds world for vehicles and whole avatars, the customiser for add-ons and wearables on every declared host/base, the item viewer for props), measure it, and with `--submit` record the backend's verdict (numeric asserts + vision critic) against that exact version. **Marketplace/Vault listing, distributions and version moves on a public item require a pass.** See [docs/visual-qa.md](docs/visual-qa.md). |
|
|
52
52
|
| `helix device create <dir> --id <slug> --title <t> --model <mesh.glb> --template standing-desk\|clock\|television` | Scaffold a GLB-backed `helix.device/1` definition, including the interactive TV/media-player template. There is intentionally no website Device editor. |
|
|
53
53
|
| `helix device validate [dir] [--json]` | Validate the definition, GLB bytes and named-node bindings, typed state/controls, capabilities, and Home+World compatibility, including [declarative character hand reach](docs/device-hand-reach.md). |
|
|
54
54
|
| `helix device test [dir] [--mode single\|multiplayer\|both] [--json]` | Exercise every interaction, persistence remount, and deterministic one-/two-client authority convergence. |
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import type { CliCredentials } from './config';
|
|
2
|
+
type AssetRow = {
|
|
3
|
+
id: string;
|
|
4
|
+
rendition: string;
|
|
5
|
+
status: string;
|
|
6
|
+
cdnUrl: string;
|
|
7
|
+
sizeBytes: number;
|
|
8
|
+
createdAt?: string;
|
|
9
|
+
uploadUrl?: string;
|
|
10
|
+
/** Pipeline metadata; a refused build carries `verification.errors`, a failed one `pipeline.lastError`. */
|
|
11
|
+
metadata?: Record<string, unknown> | null;
|
|
12
|
+
};
|
|
2
13
|
export type PackagePin = {
|
|
3
14
|
packageId: string;
|
|
4
15
|
version: string;
|
|
@@ -59,3 +70,11 @@ export type PublishAddOnPackageVersionResult = {
|
|
|
59
70
|
* same as `helix item publish`.
|
|
60
71
|
*/
|
|
61
72
|
export declare function publishAddOnPackageVersion(itemId: string, file: string, options: PublishAddOnPackageVersionOptions, credentials: CliCredentials): Promise<PublishAddOnPackageVersionResult>;
|
|
73
|
+
/**
|
|
74
|
+
* The pipeline's own words for why it refused the upload: the verifier's errors
|
|
75
|
+
* for a `rejected` build, the last processing error for a `failed` one. Without
|
|
76
|
+
* this a creator sees only a status and has to go digging in the asset JSON for
|
|
77
|
+
* something as plain as "File is 6.3 MB (limit 6.0 MB)".
|
|
78
|
+
*/
|
|
79
|
+
export declare function assetRefusalReason(row: Pick<AssetRow, 'metadata'>): string | null;
|
|
80
|
+
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.publishAddOnPackageVersion = publishAddOnPackageVersion;
|
|
4
|
+
exports.assetRefusalReason = assetRefusalReason;
|
|
4
5
|
const baseColorGuard_1 = require("./character/baseColorGuard");
|
|
5
6
|
const promises_1 = require("node:fs/promises");
|
|
6
7
|
const node_path_1 = require("node:path");
|
|
@@ -69,7 +70,11 @@ async function publishAddOnPackageVersion(itemId, file, options, credentials) {
|
|
|
69
70
|
progress('Waiting for the pipeline to mark the mesh ready…');
|
|
70
71
|
const ready = await waitForAssetReady(api, itemId, presign.id, options.assetReadyTimeoutMs ?? DEFAULT_ASSET_READY_TIMEOUT_MS);
|
|
71
72
|
if (ready.status !== 'ready') {
|
|
72
|
-
|
|
73
|
+
const why = assetRefusalReason(ready);
|
|
74
|
+
throw new Error(`Upload finished but the pipeline left it "${ready.status}", not "ready" — it will not be sealed into a new Package Version. ` +
|
|
75
|
+
(why
|
|
76
|
+
? `Reason: ${why} The live item is unchanged.`
|
|
77
|
+
: `Check the item's assets (asset ${ready.id}) for the rejection reason.`));
|
|
73
78
|
}
|
|
74
79
|
progress('Sealing the new Package Version and publishing it to every owner…');
|
|
75
80
|
const body = { reason };
|
|
@@ -118,6 +123,31 @@ async function updateFitsAndOps(api, itemId, fits, ops, progress) {
|
|
|
118
123
|
progress('Updating fitment/ops before sealing the new mesh…');
|
|
119
124
|
await api.request('PATCH', `/api/v1/universal-items/${itemId}`, body);
|
|
120
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* The pipeline's own words for why it refused the upload: the verifier's errors
|
|
128
|
+
* for a `rejected` build, the last processing error for a `failed` one. Without
|
|
129
|
+
* this a creator sees only a status and has to go digging in the asset JSON for
|
|
130
|
+
* something as plain as "File is 6.3 MB (limit 6.0 MB)".
|
|
131
|
+
*/
|
|
132
|
+
function assetRefusalReason(row) {
|
|
133
|
+
const meta = row.metadata ?? {};
|
|
134
|
+
const verification = meta['verification'];
|
|
135
|
+
if (verification && typeof verification === 'object') {
|
|
136
|
+
const errors = verification.errors;
|
|
137
|
+
if (Array.isArray(errors)) {
|
|
138
|
+
const text = errors.filter((e) => typeof e === 'string' && e.trim() !== '');
|
|
139
|
+
if (text.length > 0)
|
|
140
|
+
return text.join(' ');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const pipeline = meta['pipeline'];
|
|
144
|
+
if (pipeline && typeof pipeline === 'object') {
|
|
145
|
+
const lastError = pipeline.lastError;
|
|
146
|
+
if (typeof lastError === 'string' && lastError.trim() !== '')
|
|
147
|
+
return lastError.trim();
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
121
151
|
async function waitForAssetReady(api, itemId, assetId, timeoutMs) {
|
|
122
152
|
const deadline = Date.now() + timeoutMs;
|
|
123
153
|
for (;;) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addOnPackageVersion.js","sourceRoot":"","sources":["../src/addOnPackageVersion.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"addOnPackageVersion.js","sourceRoot":"","sources":["../src/addOnPackageVersion.ts"],"names":[],"mappings":"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"}
|