@hypersoniclabs/helix-cli 0.1.24 → 0.1.25-helix3.461
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 +14 -5
- package/dist/assets.d.ts +1 -1
- package/dist/assets.js +5 -5
- package/dist/assets.js.map +1 -1
- package/dist/audioCommand.js +3 -3
- package/dist/audioCommand.js.map +1 -1
- package/dist/character/avatarPreflight.js +11 -2
- package/dist/character/avatarPreflight.js.map +1 -1
- package/dist/character/check/check.d.ts +23 -3
- package/dist/character/check/check.js +38 -12
- package/dist/character/check/check.js.map +1 -1
- package/dist/character/check/sheets.d.ts +1 -1
- package/dist/character/check/types.d.ts +1 -1
- package/dist/index.js +103 -27
- package/dist/index.js.map +1 -1
- package/dist/money.d.ts +1 -1
- package/dist/money.js +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/vehicle/mintVehicle.d.ts +37 -15
- package/dist/vehicle/mintVehicle.js +139 -28
- package/dist/vehicle/mintVehicle.js.map +1 -1
- package/dist/vehicle/publish.d.ts +14 -0
- package/dist/vehicle/publish.js +28 -5
- package/dist/vehicle/publish.js.map +1 -1
- package/dist/vehicle/pull.d.ts +89 -0
- package/dist/vehicle/pull.js +274 -0
- package/dist/vehicle/pull.js.map +1 -0
- package/dist/visualQa/avatarSeverity.d.ts +22 -0
- package/dist/visualQa/avatarSeverity.js +86 -0
- package/dist/visualQa/avatarSeverity.js.map +1 -0
- package/dist/visualQa/command.d.ts +7 -1
- package/dist/visualQa/command.js +3 -1
- package/dist/visualQa/command.js.map +1 -1
- package/dist/visualQa/hosted.d.ts +18 -2
- package/dist/visualQa/hosted.js +2 -2
- package/dist/visualQa/hosted.js.map +1 -1
- package/dist/visualQa/moveUx.js +2 -0
- package/dist/visualQa/moveUx.js.map +1 -1
- package/dist/visualQa/types.d.ts +71 -1
- package/dist/visualQa/verdictText.d.ts +37 -0
- package/dist/visualQa/verdictText.js +83 -0
- package/dist/visualQa/verdictText.js.map +1 -0
- package/docs/character-check.md +30 -2
- package/docs/visual-qa.md +38 -1
- package/package.json +3 -3
- 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__/beamng_stock_events.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/vehicle/publish.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/vehicle/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type Json } from './platform';
|
|
2
|
+
export interface VehiclePullItem {
|
|
3
|
+
id: string;
|
|
4
|
+
slug?: string;
|
|
5
|
+
title?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
tags?: string[];
|
|
8
|
+
contentRating?: string | null;
|
|
9
|
+
status?: string;
|
|
10
|
+
continuumPackagePin?: {
|
|
11
|
+
packageId: string;
|
|
12
|
+
version: string;
|
|
13
|
+
manifestCid?: string;
|
|
14
|
+
} | null;
|
|
15
|
+
}
|
|
16
|
+
/** What `pullVehicle` reads. Every call is injected so the decision is unit-testable without a network. */
|
|
17
|
+
export interface VehiclePullApi {
|
|
18
|
+
readItem(itemId: string): Promise<VehiclePullItem>;
|
|
19
|
+
/** The sealed Package Version's manifest (`GET …/packages/:id/versions/:version`). */
|
|
20
|
+
readVersion(packageId: string, version: string): Promise<{
|
|
21
|
+
manifestCid?: string;
|
|
22
|
+
manifest: Json;
|
|
23
|
+
}>;
|
|
24
|
+
/** An object's exact bytes, by `cid:sha256:…` or bare sha256 hex; undefined when it is not publicly readable. */
|
|
25
|
+
readObject(cidOrSha: string): Promise<Uint8Array | undefined>;
|
|
26
|
+
}
|
|
27
|
+
export type PulledRendition = {
|
|
28
|
+
id: string;
|
|
29
|
+
sha: string;
|
|
30
|
+
file: string;
|
|
31
|
+
bytes: number;
|
|
32
|
+
tiers: string[];
|
|
33
|
+
};
|
|
34
|
+
export type VehiclePullResult = {
|
|
35
|
+
itemId: string;
|
|
36
|
+
title: string;
|
|
37
|
+
dir: string;
|
|
38
|
+
packageId: string;
|
|
39
|
+
version: string;
|
|
40
|
+
manifestCid?: string;
|
|
41
|
+
rootCid: string;
|
|
42
|
+
rootSha: string;
|
|
43
|
+
renditions: PulledRendition[];
|
|
44
|
+
audio: {
|
|
45
|
+
files: number;
|
|
46
|
+
bytes: number;
|
|
47
|
+
};
|
|
48
|
+
rating: {
|
|
49
|
+
from?: string | null;
|
|
50
|
+
to?: string;
|
|
51
|
+
};
|
|
52
|
+
files: string[];
|
|
53
|
+
notes: string[];
|
|
54
|
+
};
|
|
55
|
+
export type VehiclePullOptions = {
|
|
56
|
+
itemId: string;
|
|
57
|
+
dir: string;
|
|
58
|
+
/** Pull this Version instead of the item's current pin (a car's history is copyable too). */
|
|
59
|
+
packageVersion?: string;
|
|
60
|
+
/** The rating to write into publish.json for the COPY (default: the item's own, mapped to the new vocabulary). */
|
|
61
|
+
contentRating?: string;
|
|
62
|
+
onProgress?: (message: string) => void;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* The Item's rating in the vocabulary a NEW Item attests. `general` is `Everyone` under its old name
|
|
66
|
+
* (`helix-backend-api` `ContentMaturity` -> `ContentRating`), so the mapping is exact — but an unrecognised value is
|
|
67
|
+
* never guessed at, because a rating is a creator attestation rather than a formatting detail.
|
|
68
|
+
*/
|
|
69
|
+
export declare function mapItemRating(rating: string | null | undefined): {
|
|
70
|
+
to?: string;
|
|
71
|
+
note?: string;
|
|
72
|
+
};
|
|
73
|
+
type Rendition = {
|
|
74
|
+
id: string;
|
|
75
|
+
kind?: string;
|
|
76
|
+
sha?: string;
|
|
77
|
+
bytes?: number;
|
|
78
|
+
tiers: string[];
|
|
79
|
+
};
|
|
80
|
+
export declare function primaryRendition(renditions: ReadonlyArray<Rendition>): Rendition | undefined;
|
|
81
|
+
/** The file a rendition's bytes are written to: `model.glb` for the primary, `model-<renditionId>.glb` for the rest. */
|
|
82
|
+
export declare const modelFileName: (renditionId: string, primary: boolean) => string;
|
|
83
|
+
/**
|
|
84
|
+
* Rebuild the published inputs of a live car into `opts.dir` (which must not exist yet). Nothing is uploaded, nothing
|
|
85
|
+
* is deleted, and no ledger is written — the copy has no item, which is exactly what makes it mint a new one.
|
|
86
|
+
*/
|
|
87
|
+
export declare function pullVehicle(opts: VehiclePullOptions, api: VehiclePullApi): Promise<VehiclePullResult>;
|
|
88
|
+
export declare function formatVehiclePull(r: VehiclePullResult): string;
|
|
89
|
+
export {};
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.modelFileName = void 0;
|
|
4
|
+
exports.mapItemRating = mapItemRating;
|
|
5
|
+
exports.primaryRendition = primaryRendition;
|
|
6
|
+
exports.pullVehicle = pullVehicle;
|
|
7
|
+
exports.formatVehiclePull = formatVehiclePull;
|
|
8
|
+
/**
|
|
9
|
+
* `helix vehicle pull <item-id> <dir>` — a first-class COPY of a live car.
|
|
10
|
+
*
|
|
11
|
+
* Why it exists. A vehicle on the catalogue is a sealed Continuum Package Version: a `vehicle-definition` root object
|
|
12
|
+
* (the `helix.vehicle-package/2` JSON), every WAV its audio rows name, and one GLB per served mesh rendition. None of
|
|
13
|
+
* that is on disk anywhere after the machine that published it is gone, so "publish a copy of this car" had no
|
|
14
|
+
* supported path: a `cp -R` of whatever happened to be lying around is a DIFFERENT car (or a stale one), and copying
|
|
15
|
+
* the publishing directory drags its `.helix-publish/ledger.json` along, which claims the ORIGINAL item id and makes
|
|
16
|
+
* the publish resume against the live item instead of minting a copy.
|
|
17
|
+
*
|
|
18
|
+
* What it does. Rebuilds the exact published inputs from the public Continuum routes into a directory `vehicle publish`
|
|
19
|
+
* can seal as a NEW item: `vehicle-package.json` (the sealed root, byte-for-byte), `audio/<file>` for every audio object
|
|
20
|
+
* the root pins, `model.glb` plus `model-<renditionId>.glb` for every served mesh rendition, a `publish.json` carrying
|
|
21
|
+
* the Item fields, and a `pull.json` recording where each byte came from. Nothing writes into an existing directory.
|
|
22
|
+
*
|
|
23
|
+
* The one thing it must TRANSLATE is the Item's rating. Every live vehicle carries the legacy `general` rating
|
|
24
|
+
* (`helix-backend-api` `ContentMaturity`), while a NEW Item attests one of `everyone|teen|mature|adult`; a copy that
|
|
25
|
+
* carries `general` through is refused by the seal (`SEAL_CONTENT_RATING`) for a reason that has nothing to do with the
|
|
26
|
+
* car. The mapping is exact where the vocabulary overlaps and refuses to guess where it does not.
|
|
27
|
+
*/
|
|
28
|
+
const node_buffer_1 = require("node:buffer");
|
|
29
|
+
const node_fs_1 = require("node:fs");
|
|
30
|
+
const node_fs_2 = require("node:fs");
|
|
31
|
+
const node_path_1 = require("node:path");
|
|
32
|
+
const platform_1 = require("./platform");
|
|
33
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
34
|
+
const SHA_RE = /^[0-9a-f]{64}$/i;
|
|
35
|
+
const shaOfCid = (cid) => SHA_RE.test(cid) ? cid.toLowerCase() : (/^cid:sha256:([0-9a-f]{64})$/i.exec(cid)?.[1]?.toLowerCase() ?? null);
|
|
36
|
+
/**
|
|
37
|
+
* The Item's rating in the vocabulary a NEW Item attests. `general` is `Everyone` under its old name
|
|
38
|
+
* (`helix-backend-api` `ContentMaturity` -> `ContentRating`), so the mapping is exact — but an unrecognised value is
|
|
39
|
+
* never guessed at, because a rating is a creator attestation rather than a formatting detail.
|
|
40
|
+
*/
|
|
41
|
+
function mapItemRating(rating) {
|
|
42
|
+
const value = String(rating ?? '').trim().toLowerCase();
|
|
43
|
+
if (value === '')
|
|
44
|
+
return {};
|
|
45
|
+
if (value === 'general' || value === 'everyone')
|
|
46
|
+
return { to: 'everyone', ...(value === 'general' ? { note: 'the item\'s legacy rating "general" is written as "everyone" (the same rating, renamed) — change it with --content-rating if that is not what you mean to attest' } : {}) };
|
|
47
|
+
if (value === 'teen' || value === 'mature' || value === 'adult')
|
|
48
|
+
return { to: value };
|
|
49
|
+
return { note: `the item's rating ${JSON.stringify(rating)} is not one of everyone|teen|mature|adult; pass --content-rating (a rating is an attestation, so this command will not guess)` };
|
|
50
|
+
}
|
|
51
|
+
/** A row of the root that pins an object at a relative path (`{ cid, path, … }`), walked in document order. */
|
|
52
|
+
function objectRows(node, out = []) {
|
|
53
|
+
if (Array.isArray(node)) {
|
|
54
|
+
for (const item of node)
|
|
55
|
+
objectRows(item, out);
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
if (!isRecord(node))
|
|
59
|
+
return out;
|
|
60
|
+
if (typeof node.cid === 'string' && typeof node.path === 'string' && node.path) {
|
|
61
|
+
out.push({ cid: node.cid, path: node.path, ...(typeof node.bytes === 'number' ? { bytes: node.bytes } : {}) });
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
for (const value of Object.values(node))
|
|
65
|
+
objectRows(value, out);
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
/** The served mesh renditions the engine draws from (`mesh.visual.tiers[tier].renditionId` -> that rendition). */
|
|
69
|
+
function servedRenditions(root) {
|
|
70
|
+
const visual = isRecord(isRecord(root.mesh) ? root.mesh.visual : undefined) ? root.mesh.visual : undefined;
|
|
71
|
+
const raw = Array.isArray(visual?.renditions) ? visual.renditions : [];
|
|
72
|
+
const byRendition = new Map();
|
|
73
|
+
if (isRecord(visual?.tiers)) {
|
|
74
|
+
for (const [tier, spec] of Object.entries(visual.tiers)) {
|
|
75
|
+
const id = isRecord(spec) && typeof spec.renditionId === 'string' ? spec.renditionId : undefined;
|
|
76
|
+
if (id)
|
|
77
|
+
byRendition.set(id, [...(byRendition.get(id) ?? []), tier]);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return raw.flatMap((entry) => {
|
|
81
|
+
if (!isRecord(entry) || typeof entry.id !== 'string')
|
|
82
|
+
return [];
|
|
83
|
+
const sha = typeof entry.checksumSha256 === 'string' && SHA_RE.test(entry.checksumSha256) ? entry.checksumSha256.toLowerCase() : undefined;
|
|
84
|
+
// The declared `source` rendition with no bytes is a description, not a served model (same rule as pinMeshRendition).
|
|
85
|
+
if (entry.kind === 'source' && sha === undefined)
|
|
86
|
+
return [];
|
|
87
|
+
return [{ id: entry.id, ...(typeof entry.kind === 'string' ? { kind: entry.kind } : {}), ...(sha ? { sha } : {}), ...(typeof entry.byteLength === 'number' ? { bytes: entry.byteLength } : {}), tiers: byRendition.get(entry.id) ?? [] }];
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/** Highest fidelity first, so `model.glb` is the rendition the best tier draws. */
|
|
91
|
+
const TIER_ORDER = ['ultra', 'high', 'medium', 'low', 'minimal'];
|
|
92
|
+
function primaryRendition(renditions) {
|
|
93
|
+
const rank = (r) => Math.min(...(r.tiers.length ? r.tiers : ['medium']).map((t) => {
|
|
94
|
+
const at = TIER_ORDER.indexOf(t);
|
|
95
|
+
return at === -1 ? TIER_ORDER.length : at;
|
|
96
|
+
}));
|
|
97
|
+
return [...renditions].sort((a, b) => rank(a) - rank(b) || (b.bytes ?? 0) - (a.bytes ?? 0))[0];
|
|
98
|
+
}
|
|
99
|
+
/** The file a rendition's bytes are written to: `model.glb` for the primary, `model-<renditionId>.glb` for the rest. */
|
|
100
|
+
const modelFileName = (renditionId, primary) => primary ? 'model.glb' : `model-${renditionId.replace(/[^A-Za-z0-9._-]/g, '_')}.glb`;
|
|
101
|
+
exports.modelFileName = modelFileName;
|
|
102
|
+
/** A path from the root, safe to join under the output directory. */
|
|
103
|
+
function safeRelativePath(path, dir) {
|
|
104
|
+
const clean = path.replace(/^\.?\//, '');
|
|
105
|
+
if (clean === '' || clean.startsWith('/') || clean.split(/[\\/]/).includes('..'))
|
|
106
|
+
throw new Error(`the package names an unsafe object path ${JSON.stringify(path)}; refusing to write it under ${dir}`);
|
|
107
|
+
return clean;
|
|
108
|
+
}
|
|
109
|
+
const prettyJson = (value) => `${JSON.stringify(value, null, 2)}\n`;
|
|
110
|
+
/**
|
|
111
|
+
* Rebuild the published inputs of a live car into `opts.dir` (which must not exist yet). Nothing is uploaded, nothing
|
|
112
|
+
* is deleted, and no ledger is written — the copy has no item, which is exactly what makes it mint a new one.
|
|
113
|
+
*/
|
|
114
|
+
async function pullVehicle(opts, api) {
|
|
115
|
+
const say = opts.onProgress ?? (() => undefined);
|
|
116
|
+
const dir = (0, node_path_1.resolve)(opts.dir);
|
|
117
|
+
if ((0, node_fs_2.existsSync)(dir) && (!(0, node_fs_2.statSync)(dir).isDirectory() || (0, node_fs_2.readdirSync)(dir).length > 0)) {
|
|
118
|
+
throw new Error(`${dir} already exists and is not empty; pull into a new directory (the copy must not inherit another car's files or its .helix-publish ledger)`);
|
|
119
|
+
}
|
|
120
|
+
const item = await api.readItem(opts.itemId);
|
|
121
|
+
if (!item?.id)
|
|
122
|
+
throw new Error(`item ${opts.itemId} was not found`);
|
|
123
|
+
const pin = item.continuumPackagePin;
|
|
124
|
+
if (!pin?.packageId || !pin.version) {
|
|
125
|
+
throw new Error(`item ${item.id} (${item.title ?? 'untitled'}) has no Vehicle Package pin, so there is no sealed Version to copy — it predates Package-first publication`);
|
|
126
|
+
}
|
|
127
|
+
const version = opts.packageVersion ?? pin.version;
|
|
128
|
+
say(`reading ${pin.packageId}@${version} (${version === pin.version ? 'the item\'s current version' : 'a historical version'})`);
|
|
129
|
+
const sealed = await api.readVersion(pin.packageId, version);
|
|
130
|
+
const manifest = sealed.manifest;
|
|
131
|
+
const rootRef = isRecord(manifest.root) ? manifest.root : undefined;
|
|
132
|
+
const rootCid = typeof rootRef?.cid === 'string' ? rootRef.cid : undefined;
|
|
133
|
+
const rootSha = rootCid ? shaOfCid(rootCid) : null;
|
|
134
|
+
if (!rootCid || !rootSha)
|
|
135
|
+
throw new Error(`the Version ${pin.packageId}@${version} names no vehicle-definition root object`);
|
|
136
|
+
const rootBytes = await api.readObject(rootCid);
|
|
137
|
+
if (!rootBytes)
|
|
138
|
+
throw new Error(`the package root ${rootCid} is not publicly readable; the Package may be private — copy it from the account that owns it`);
|
|
139
|
+
if ((0, platform_1.sha256Hex)(rootBytes) !== rootSha)
|
|
140
|
+
throw new Error(`the bytes served for the root ${rootCid} are not its own sha256 (${(0, platform_1.sha256Hex)(rootBytes)}); refusing to write a root that does not match its pin`);
|
|
141
|
+
const root = JSON.parse(node_buffer_1.Buffer.from(rootBytes).toString('utf8'));
|
|
142
|
+
if (!isRecord(root))
|
|
143
|
+
throw new Error(`the package root ${rootCid} is not a JSON object`);
|
|
144
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
145
|
+
const files = [];
|
|
146
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, 'vehicle-package.json'), prettyJson(root));
|
|
147
|
+
files.push('vehicle-package.json');
|
|
148
|
+
// ── audio: every object the root pins at a path ────────────────────────────────────────────────────────────────
|
|
149
|
+
const rows = objectRows(root);
|
|
150
|
+
const audioDir = (0, node_path_1.join)(dir, 'audio');
|
|
151
|
+
let audioBytes = 0;
|
|
152
|
+
let audioFiles = 0;
|
|
153
|
+
for (const row of rows) {
|
|
154
|
+
const target = (0, node_path_1.join)(dir, safeRelativePath(row.path, dir));
|
|
155
|
+
if (!target.startsWith(dir + node_path_1.sep))
|
|
156
|
+
throw new Error(`the package names ${row.path}, outside ${dir}`);
|
|
157
|
+
const bytes = await api.readObject(row.cid);
|
|
158
|
+
if (!bytes)
|
|
159
|
+
throw new Error(`audio object ${row.cid} (${row.path}) is not publicly readable; the copy would publish with a sound the runtime cannot fetch`);
|
|
160
|
+
const sha = shaOfCid(row.cid);
|
|
161
|
+
if (sha && (0, platform_1.sha256Hex)(bytes) !== sha)
|
|
162
|
+
throw new Error(`the bytes served for ${row.path} are not ${row.cid}; refusing to write them`);
|
|
163
|
+
if (row.bytes !== undefined && row.bytes !== bytes.length)
|
|
164
|
+
throw new Error(`the bytes served for ${row.path} are ${bytes.length}, the root pins ${row.bytes}`);
|
|
165
|
+
if (target.startsWith(audioDir))
|
|
166
|
+
audioFiles += 1;
|
|
167
|
+
audioBytes += bytes.length;
|
|
168
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(target), { recursive: true });
|
|
169
|
+
(0, node_fs_1.writeFileSync)(target, bytes);
|
|
170
|
+
files.push(row.path);
|
|
171
|
+
}
|
|
172
|
+
// ── models: one file per distinct served rendition ─────────────────────────────────────────────────────────────
|
|
173
|
+
const renditions = servedRenditions(root);
|
|
174
|
+
if (renditions.length === 0)
|
|
175
|
+
throw new Error(`the package root ${rootCid} declares no served mesh rendition, so a copy would publish a car with no model`);
|
|
176
|
+
const variants = Array.isArray(manifest.variants) ? manifest.variants.filter(isRecord) : [];
|
|
177
|
+
const variantSha = new Map();
|
|
178
|
+
for (const variant of variants) {
|
|
179
|
+
const object = isRecord(variant.object) ? variant.object : undefined;
|
|
180
|
+
const sha = typeof object?.cid === 'string' ? shaOfCid(object.cid) : null;
|
|
181
|
+
const isModel = typeof object?.mediaType === 'string' ? object.mediaType === 'model/gltf-binary' : /^vehicle\.model\./.test(String(object?.role ?? ''));
|
|
182
|
+
if (sha && isModel && typeof variant.id === 'string')
|
|
183
|
+
variantSha.set(variant.id, sha);
|
|
184
|
+
}
|
|
185
|
+
const primary = primaryRendition(renditions);
|
|
186
|
+
const pulled = [];
|
|
187
|
+
const bySha = new Map();
|
|
188
|
+
for (const rendition of renditions) {
|
|
189
|
+
const declared = variantSha.get(rendition.id);
|
|
190
|
+
if (declared && rendition.sha && declared !== rendition.sha) {
|
|
191
|
+
throw new Error(`rendition "${rendition.id}" draws ${rendition.sha.slice(0, 12)}… but the Version's "${rendition.id}" variant is ${declared.slice(0, 12)}…; the package and its own manifest disagree, so a copy would draw other bytes than it seals`);
|
|
192
|
+
}
|
|
193
|
+
const sha = rendition.sha ?? declared;
|
|
194
|
+
if (!sha) {
|
|
195
|
+
const artifact = typeof rendition.artifactRef === 'string' ? ' (its artifactRef names an object outside the Version)' : '';
|
|
196
|
+
throw new Error(`rendition "${rendition.id}" pins no checksum sha256${artifact}; a copy cannot be rebuilt from it`);
|
|
197
|
+
}
|
|
198
|
+
const existing = bySha.get(sha);
|
|
199
|
+
if (existing) {
|
|
200
|
+
pulled.push({ id: rendition.id, sha, file: existing, bytes: rendition.bytes ?? 0, tiers: rendition.tiers });
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
const bytes = await api.readObject(`cid:sha256:${sha}`);
|
|
204
|
+
if (!bytes)
|
|
205
|
+
throw new Error(`model object cid:sha256:${sha} (rendition "${rendition.id}") is not publicly readable; the copy would publish a car with no model`);
|
|
206
|
+
if ((0, platform_1.sha256Hex)(bytes) !== sha)
|
|
207
|
+
throw new Error(`the bytes served for rendition "${rendition.id}" are not its pinned sha256; refusing to write them`);
|
|
208
|
+
if (rendition.bytes !== undefined && rendition.bytes !== bytes.length)
|
|
209
|
+
throw new Error(`the bytes served for rendition "${rendition.id}" are ${bytes.length}, the root pins ${rendition.bytes}`);
|
|
210
|
+
const file = (0, exports.modelFileName)(rendition.id, primary !== undefined && rendition.id === primary.id);
|
|
211
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, file), bytes);
|
|
212
|
+
files.push(file);
|
|
213
|
+
bySha.set(sha, file);
|
|
214
|
+
pulled.push({ id: rendition.id, sha, file, bytes: bytes.length, tiers: rendition.tiers });
|
|
215
|
+
}
|
|
216
|
+
// ── publish.json: the Item fields a seal needs, rating included ────────────────────────────────────────────────
|
|
217
|
+
const mapped = opts.contentRating ? { to: opts.contentRating } : mapItemRating(item.contentRating);
|
|
218
|
+
const rating = mapped.to;
|
|
219
|
+
const publish = {
|
|
220
|
+
...(item.title ? { title: item.title } : {}),
|
|
221
|
+
...(item.description ? { description: item.description } : {}),
|
|
222
|
+
...(item.tags?.length ? { tags: item.tags } : {}),
|
|
223
|
+
version,
|
|
224
|
+
...(rating ? { contentRating: rating } : {}),
|
|
225
|
+
...(isRecord(root.provenance) ? { provenance: root.provenance } : {}),
|
|
226
|
+
...(root.hostGrantExtensions !== undefined ? { hostGrantExtensions: root.hostGrantExtensions } : {}),
|
|
227
|
+
};
|
|
228
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, 'publish.json'), prettyJson(publish));
|
|
229
|
+
files.push('publish.json');
|
|
230
|
+
const notes = [];
|
|
231
|
+
if (mapped.note)
|
|
232
|
+
notes.push(mapped.note);
|
|
233
|
+
if (!rating)
|
|
234
|
+
notes.push('publish.json carries no contentRating because the item has none and none was passed: a new Item needs one (--content-rating everyone|teen|mature|adult)');
|
|
235
|
+
if (pulled.length > 1)
|
|
236
|
+
notes.push(`this car declares ${pulled.length} served mesh renditions (${pulled.map((r) => r.id).join(', ')}); they are written as ${pulled.map((r) => r.file).join(', ')} and sealed together`);
|
|
237
|
+
if (!publish.description)
|
|
238
|
+
notes.push('the item has no description, so publish.json has none — the seal does not require one, but a blank catalogue page does');
|
|
239
|
+
const record = {
|
|
240
|
+
schema: 'helix.vehicle-pull/1',
|
|
241
|
+
item: { id: item.id, ...(item.slug ? { slug: item.slug } : {}), title: item.title ?? null, status: item.status ?? null },
|
|
242
|
+
package: { id: pin.packageId, version, ...(sealed.manifestCid ?? pin.manifestCid ? { manifestCid: sealed.manifestCid ?? pin.manifestCid } : {}) },
|
|
243
|
+
root: { cid: rootCid, sha: rootSha },
|
|
244
|
+
renditions: pulled,
|
|
245
|
+
audio: { objects: rows.length, files: audioFiles, bytes: audioBytes },
|
|
246
|
+
rating: { from: item.contentRating ?? null, to: rating ?? null },
|
|
247
|
+
next: `helix vehicle publish ${dir} --dry-run`,
|
|
248
|
+
};
|
|
249
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(dir, 'pull.json'), prettyJson(record));
|
|
250
|
+
files.push('pull.json');
|
|
251
|
+
return {
|
|
252
|
+
itemId: item.id, title: item.title ?? item.id, dir, packageId: pin.packageId, version,
|
|
253
|
+
...(sealed.manifestCid ?? pin.manifestCid ? { manifestCid: sealed.manifestCid ?? pin.manifestCid } : {}),
|
|
254
|
+
rootCid, rootSha, renditions: pulled,
|
|
255
|
+
audio: { files: audioFiles, bytes: audioBytes },
|
|
256
|
+
rating: { from: item.contentRating ?? null, to: rating ?? '' },
|
|
257
|
+
files, notes,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function formatVehiclePull(r) {
|
|
261
|
+
const lines = [
|
|
262
|
+
`pulled ${r.itemId} ${JSON.stringify(r.title)} -> ${r.dir}`,
|
|
263
|
+
` package: ${r.packageId}@${r.version}${r.manifestCid ? ` ${r.manifestCid}` : ''}`,
|
|
264
|
+
` root: ${r.rootCid} (${r.files.includes('vehicle-package.json') ? 'vehicle-package.json' : '?'})`,
|
|
265
|
+
` model: ${r.renditions.map((x) => `${x.id} -> ${x.file} (${(x.bytes / 1048576).toFixed(1)} MiB${x.tiers.length ? `, ${x.tiers.join('/')}` : ''})`).join('; ')}`,
|
|
266
|
+
` audio: ${r.audio.files} file(s), ${(r.audio.bytes / 1048576).toFixed(1)} MiB`,
|
|
267
|
+
` rating: ${r.rating.from ?? 'none'} -> ${r.rating.to || 'NOT SET'}`,
|
|
268
|
+
];
|
|
269
|
+
for (const note of r.notes)
|
|
270
|
+
lines.push(` note: ${note}`);
|
|
271
|
+
lines.push(` next: helix vehicle publish ${r.dir} --dry-run`);
|
|
272
|
+
return lines.join('\n');
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/vehicle/pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { VisualQaVerdictItem } from './types';
|
|
2
|
+
export declare const AVATAR_SEVERITY_RUBRIC_VERSION = "avatar-severity@1";
|
|
3
|
+
/** The fix hint of each defect class (the backend's `AVATAR_DEFECT_CLASSES[].fixHint`, wording verbatim). */
|
|
4
|
+
export declare const AVATAR_CLASS_HINTS: Readonly<Record<string, {
|
|
5
|
+
severity: 'block' | 'warn';
|
|
6
|
+
fixHint: string;
|
|
7
|
+
}>>;
|
|
8
|
+
/**
|
|
9
|
+
* MEASURED asserts that are a generator limit on an avatar: a failing one is a warning, not a blocker. Every other failing
|
|
10
|
+
* `block` assert blocks. (`AVATAR_WARN_ASSERTS` in the backend.)
|
|
11
|
+
*/
|
|
12
|
+
export declare const AVATAR_WARN_ASSERTS: ReadonlyMap<string, string>;
|
|
13
|
+
/** The defect class a measured assert's failure belongs to (`ASSERT_CLASS` in the backend). */
|
|
14
|
+
export declare const AVATAR_ASSERT_CLASS: Readonly<Record<string, string>>;
|
|
15
|
+
export declare function isAvatarWarnAssert(assertId: string): boolean;
|
|
16
|
+
/** The server's fix hint for a failed measured assert, or null when the backend has no class for it. */
|
|
17
|
+
export declare function assertFixHint(assertId: string): string | null;
|
|
18
|
+
/** The fix hint of the defect class a WARN assert belongs to. */
|
|
19
|
+
export declare function warnAssertFixHint(assertId: string): string;
|
|
20
|
+
export declare const GENERIC_FIX_HINT = "Read the detail, fix the cause and check again with a current helix-creator-cli.";
|
|
21
|
+
/** Merge items with the same id (the server's `mergeVerdictItems`). */
|
|
22
|
+
export declare function mergeVerdictItems(items: readonly VisualQaVerdictItem[]): VisualQaVerdictItem[];
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GENERIC_FIX_HINT = exports.AVATAR_ASSERT_CLASS = exports.AVATAR_WARN_ASSERTS = exports.AVATAR_CLASS_HINTS = exports.AVATAR_SEVERITY_RUBRIC_VERSION = void 0;
|
|
4
|
+
exports.isAvatarWarnAssert = isAvatarWarnAssert;
|
|
5
|
+
exports.assertFixHint = assertFixHint;
|
|
6
|
+
exports.warnAssertFixHint = warnAssertFixHint;
|
|
7
|
+
exports.mergeVerdictItems = mergeVerdictItems;
|
|
8
|
+
exports.AVATAR_SEVERITY_RUBRIC_VERSION = 'avatar-severity@1';
|
|
9
|
+
const IMPROVE = 'Improve it: regenerate with create_avatar from a reference sheet that shows this clearly, or hand it to the cloud agent (Improve) to rework it.';
|
|
10
|
+
/** The fix hint of each defect class (the backend's `AVATAR_DEFECT_CLASSES[].fixHint`, wording verbatim). */
|
|
11
|
+
exports.AVATAR_CLASS_HINTS = {
|
|
12
|
+
limb_in_body: { severity: 'block', fixHint: 'The arms are bound too close to the body. Re-bind the rig (helix character fix-rig / fix_avatar_rig), or regenerate from a sheet with the arms held clear of the body.' },
|
|
13
|
+
surface_torn: { severity: 'block', fixHint: 'The surface tears open as the limbs move. Re-bind the rig (helix character fix-rig / fix_avatar_rig); if the mesh itself is open, regenerate.' },
|
|
14
|
+
bind_pose: { severity: 'block', fixHint: 'Re-bind the rig (helix character fix-rig / fix_avatar_rig) and check again.' },
|
|
15
|
+
not_animating: { severity: 'block', fixHint: 'The avatar does not animate: re-import it so the skeleton is the standard one (helix character import), then check again.' },
|
|
16
|
+
limb_distortion: { severity: 'block', fixHint: 'The skin weights or bone rolls are wrong. Re-bind the rig (helix character fix-rig / fix_avatar_rig), or regenerate.' },
|
|
17
|
+
posture: { severity: 'block', fixHint: 'The head or spine is bound bent. Re-bind the rig (helix character fix-rig / fix_avatar_rig).' },
|
|
18
|
+
washout: { severity: 'block', fixHint: 'A material emits a flat colour or is lit wrong. Re-import it (helix character import normalises the materials) and check again.' },
|
|
19
|
+
texture_missing: { severity: 'block', fixHint: 'A texture is missing or did not decode. Re-import it with valid textures (helix character import) and check again.' },
|
|
20
|
+
detached_part: { severity: 'block', fixHint: 'There is generation debris or a part that does not follow the body. Regenerate with create_avatar (there is no mesh-editing tool).' },
|
|
21
|
+
not_grounded: { severity: 'block', fixHint: 'The avatar does not stand on the ground. Re-import it (helix character import sets the feet on the floor) and check again.' },
|
|
22
|
+
wrong_scale: { severity: 'block', fixHint: 'The avatar is the wrong size. Re-import it with the right height (helix character import --height) and check again.' },
|
|
23
|
+
wrong_facing: { severity: 'block', fixHint: 'The avatar faces the wrong way. Re-import it (helix character import) and check again.' },
|
|
24
|
+
other: { severity: 'block', fixHint: 'Read the reason, fix the cause and check again.' },
|
|
25
|
+
cloth_clipping: { severity: 'warn', fixHint: `Loose cloth passes through the legs as they move. ${IMPROVE} A shorter or tighter garment avoids it.` },
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* MEASURED asserts that are a generator limit on an avatar: a failing one is a warning, not a blocker. Every other failing
|
|
29
|
+
* `block` assert blocks. (`AVATAR_WARN_ASSERTS` in the backend.)
|
|
30
|
+
*/
|
|
31
|
+
exports.AVATAR_WARN_ASSERTS = new Map([['wear.walk.no_poke_through', 'cloth_clipping']]);
|
|
32
|
+
/** The defect class a measured assert's failure belongs to (`ASSERT_CLASS` in the backend). */
|
|
33
|
+
exports.AVATAR_ASSERT_CLASS = {
|
|
34
|
+
'avatar.preview.arms_clear': 'limb_in_body',
|
|
35
|
+
'avatar.preview.surface_closed': 'surface_torn',
|
|
36
|
+
'wear.walk.no_holes': 'surface_torn',
|
|
37
|
+
'wear.walk.no_poke_through': 'cloth_clipping',
|
|
38
|
+
'avatar.bind_pose': 'bind_pose',
|
|
39
|
+
'avatar.skinned': 'not_animating',
|
|
40
|
+
'avatar.locomotes': 'not_animating',
|
|
41
|
+
'avatar.limbs_untwisted': 'limb_distortion',
|
|
42
|
+
'avatar.skin_intact': 'limb_distortion',
|
|
43
|
+
'avatar.preview.posture': 'posture',
|
|
44
|
+
'avatar.no_emissive_washout': 'washout',
|
|
45
|
+
'avatar.colour_matches_albedo': 'washout',
|
|
46
|
+
'avatar.materials_resolved': 'texture_missing',
|
|
47
|
+
'render.textured': 'texture_missing',
|
|
48
|
+
'avatar.mesh.no_strands': 'detached_part',
|
|
49
|
+
'avatar.preview.silhouette': 'detached_part',
|
|
50
|
+
'avatar.grounded': 'not_grounded',
|
|
51
|
+
'scale.sane_for_category': 'wrong_scale',
|
|
52
|
+
'avatar.height_matches_body': 'wrong_scale',
|
|
53
|
+
'avatar.faces_forward': 'wrong_facing',
|
|
54
|
+
};
|
|
55
|
+
/** `helix character check` measures the run and idle with the walk's math under `avatar.run.*` / `avatar.idle.*` ids. */
|
|
56
|
+
const canonicalAssertId = (id) => id.replace(/^avatar\.(run|idle)\./, 'avatar.preview.').replace(/^avatar\.preview\.skin_intact$/, 'avatar.skin_intact');
|
|
57
|
+
function isAvatarWarnAssert(assertId) {
|
|
58
|
+
return exports.AVATAR_WARN_ASSERTS.has(canonicalAssertId(assertId));
|
|
59
|
+
}
|
|
60
|
+
/** The server's fix hint for a failed measured assert, or null when the backend has no class for it. */
|
|
61
|
+
function assertFixHint(assertId) {
|
|
62
|
+
const cls = exports.AVATAR_ASSERT_CLASS[canonicalAssertId(assertId)];
|
|
63
|
+
return cls ? (exports.AVATAR_CLASS_HINTS[cls]?.fixHint ?? null) : null;
|
|
64
|
+
}
|
|
65
|
+
/** The fix hint of the defect class a WARN assert belongs to. */
|
|
66
|
+
function warnAssertFixHint(assertId) {
|
|
67
|
+
const cls = exports.AVATAR_WARN_ASSERTS.get(canonicalAssertId(assertId));
|
|
68
|
+
return (cls && exports.AVATAR_CLASS_HINTS[cls]?.fixHint) || exports.AVATAR_CLASS_HINTS.other.fixHint;
|
|
69
|
+
}
|
|
70
|
+
exports.GENERIC_FIX_HINT = 'Read the detail, fix the cause and check again with a current helix-creator-cli.';
|
|
71
|
+
/** Merge items with the same id (the server's `mergeVerdictItems`). */
|
|
72
|
+
function mergeVerdictItems(items) {
|
|
73
|
+
const out = new Map();
|
|
74
|
+
for (const item of items) {
|
|
75
|
+
const existing = out.get(item.id);
|
|
76
|
+
if (!existing) {
|
|
77
|
+
out.set(item.id, { ...item, checks: [...item.checks] });
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
for (const c of item.checks)
|
|
81
|
+
if (!existing.checks.includes(c))
|
|
82
|
+
existing.checks.push(c);
|
|
83
|
+
}
|
|
84
|
+
return [...out.values()];
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=avatarSeverity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatarSeverity.js","sourceRoot":"","sources":["../../src/visualQa/avatarSeverity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type CandidateConfig } from './candidate';
|
|
2
2
|
import { type ResolvedItem } from './resolve';
|
|
3
|
-
import { type VisualQaAssert, type VisualQaBundle, type VisualQaCriticResult, type VisualQaVerdict } from './types';
|
|
3
|
+
import { type VisualQaAssert, type VisualQaBundle, type VisualQaCriticResult, type VisualQaVerdict, type VisualQaVerdictItem } from './types';
|
|
4
4
|
export declare const HARNESS_REVISION = "vqa-1";
|
|
5
5
|
export interface VisualQaOptions {
|
|
6
6
|
apiBase: string;
|
|
@@ -35,6 +35,10 @@ export interface VisualQaOptions {
|
|
|
35
35
|
export interface VisualQaOutcome {
|
|
36
36
|
verdict: VisualQaVerdict;
|
|
37
37
|
reasons: string[];
|
|
38
|
+
/** Avatars: generator-limit defects of a `warn` verdict (released privately). Empty unless the server sent some. */
|
|
39
|
+
warnings: VisualQaVerdictItem[];
|
|
40
|
+
/** What stops the item, machine-readable (the server's `blockers`). Empty unless the server sent some. */
|
|
41
|
+
blockers: VisualQaVerdictItem[];
|
|
38
42
|
bundleDir: string;
|
|
39
43
|
bundle: VisualQaBundle;
|
|
40
44
|
critic: VisualQaCriticResult | null;
|
|
@@ -48,6 +52,8 @@ export interface VisualQaOutcome {
|
|
|
48
52
|
verdict?: VisualQaVerdict;
|
|
49
53
|
contactSheetUrl?: string;
|
|
50
54
|
reasons?: string[];
|
|
55
|
+
warnings?: VisualQaVerdictItem[];
|
|
56
|
+
blockers?: VisualQaVerdictItem[];
|
|
51
57
|
hostedJob?: unknown;
|
|
52
58
|
} | null;
|
|
53
59
|
/** Why a requested submit did not happen (hosted runner reads this to call `/fail`). */
|
package/dist/visualQa/command.js
CHANGED
|
@@ -63,6 +63,7 @@ const worldWalkMath_1 = require("./worldWalkMath");
|
|
|
63
63
|
const mirror_1 = require("./mirror");
|
|
64
64
|
const resolve_1 = require("./resolve");
|
|
65
65
|
const types_1 = require("./types");
|
|
66
|
+
const verdictText_1 = require("./verdictText");
|
|
66
67
|
exports.HARNESS_REVISION = 'vqa-1';
|
|
67
68
|
/** Critic checks that never block on their own (the measured occupant asserts decide a breach). */
|
|
68
69
|
exports.ADVISORY_CRITIC_CHECKS = new Set(['vehicle.occupant.no_clipping', 'vehicle.occupant.head_clearance']);
|
|
@@ -520,6 +521,7 @@ async function runVisualQa(itemId, opts) {
|
|
|
520
521
|
const submitMs = Date.now() - ts;
|
|
521
522
|
const verdict = (server?.verdict ?? local.verdict);
|
|
522
523
|
const reasons = server?.reasons ?? local.reasons;
|
|
523
|
-
|
|
524
|
+
const items = (0, verdictText_1.verdictItemsOf)(server);
|
|
525
|
+
return { verdict, reasons, warnings: items.warnings, blockers: items.blockers, bundleDir, bundle, critic, contactSheet, server, submitSkipped, candidate: resolved.candidate ? { currentVersion: resolved.candidate.currentVersion } : null, timings: { renderMs, criticMs, submitMs, totalMs: Date.now() - t0 } };
|
|
524
526
|
}
|
|
525
527
|
//# sourceMappingURL=command.js.map
|