@aura3d/cli 1.3.2 → 1.4.0
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/asset-constants.d.ts +5 -0
- package/dist/asset-constants.d.ts.map +1 -0
- package/dist/asset-constants.js +5 -0
- package/dist/asset-constants.js.map +1 -0
- package/dist/asset-core-types.d.ts +206 -0
- package/dist/asset-core-types.d.ts.map +1 -0
- package/dist/asset-core-types.js +2 -0
- package/dist/asset-core-types.js.map +1 -0
- package/dist/asset-inspection-types.d.ts +131 -0
- package/dist/asset-inspection-types.d.ts.map +1 -0
- package/dist/asset-inspection-types.js +2 -0
- package/dist/asset-inspection-types.js.map +1 -0
- package/dist/asset-manifest.d.ts +8 -0
- package/dist/asset-manifest.d.ts.map +1 -0
- package/dist/asset-manifest.js +116 -0
- package/dist/asset-manifest.js.map +1 -0
- package/dist/asset-readiness-types.d.ts +164 -0
- package/dist/asset-readiness-types.d.ts.map +1 -0
- package/dist/asset-readiness-types.js +2 -0
- package/dist/asset-readiness-types.js.map +1 -0
- package/dist/asset-source-ast.d.ts +8 -0
- package/dist/asset-source-ast.d.ts.map +1 -0
- package/dist/asset-source-ast.js +241 -0
- package/dist/asset-source-ast.js.map +1 -0
- package/dist/asset-source-roles.d.ts +4 -0
- package/dist/asset-source-roles.d.ts.map +1 -0
- package/dist/asset-source-roles.js +79 -0
- package/dist/asset-source-roles.js.map +1 -0
- package/dist/asset-source-validation.d.ts +4 -0
- package/dist/asset-source-validation.d.ts.map +1 -0
- package/dist/asset-source-validation.js +200 -0
- package/dist/asset-source-validation.js.map +1 -0
- package/dist/character-assembly-types.d.ts +39 -0
- package/dist/character-assembly-types.d.ts.map +1 -0
- package/dist/character-assembly-types.js +2 -0
- package/dist/character-assembly-types.js.map +1 -0
- package/dist/cli-help.d.ts +4 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +48 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/cli-options.d.ts +66 -0
- package/dist/cli-options.d.ts.map +1 -0
- package/dist/cli-options.js +234 -0
- package/dist/cli-options.js.map +1 -0
- package/dist/cli.js +20 -177
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +12 -402
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +948 -90
- package/dist/index.js.map +1 -1
- package/dist/pull-bridge/adapters.d.ts +4 -0
- package/dist/pull-bridge/adapters.d.ts.map +1 -0
- package/dist/pull-bridge/adapters.js +38 -0
- package/dist/pull-bridge/adapters.js.map +1 -0
- package/dist/pull-bridge/download.d.ts +6 -0
- package/dist/pull-bridge/download.d.ts.map +1 -0
- package/dist/pull-bridge/download.js +208 -0
- package/dist/pull-bridge/download.js.map +1 -0
- package/dist/pull-bridge/profiles.d.ts +14 -0
- package/dist/pull-bridge/profiles.d.ts.map +1 -0
- package/dist/pull-bridge/profiles.js +63 -0
- package/dist/pull-bridge/profiles.js.map +1 -0
- package/dist/pull-bridge/provenance.d.ts +9 -0
- package/dist/pull-bridge/provenance.d.ts.map +1 -0
- package/dist/pull-bridge/provenance.js +99 -0
- package/dist/pull-bridge/provenance.js.map +1 -0
- package/dist/pull-bridge/pullable.d.ts +14 -0
- package/dist/pull-bridge/pullable.d.ts.map +1 -0
- package/dist/pull-bridge/pullable.js +58 -0
- package/dist/pull-bridge/pullable.js.map +1 -0
- package/dist/pull-bridge/scoring.d.ts +21 -0
- package/dist/pull-bridge/scoring.d.ts.map +1 -0
- package/dist/pull-bridge/scoring.js +177 -0
- package/dist/pull-bridge/scoring.js.map +1 -0
- package/dist/pull-bridge/search.d.ts +39 -0
- package/dist/pull-bridge/search.d.ts.map +1 -0
- package/dist/pull-bridge/search.js +114 -0
- package/dist/pull-bridge/search.js.map +1 -0
- package/dist/pull-bridge/types.d.ts +9 -0
- package/dist/pull-bridge/types.d.ts.map +1 -0
- package/dist/pull-bridge/types.js +2 -0
- package/dist/pull-bridge/types.js.map +1 -0
- package/dist/pull-bridge/vector3.d.ts +2 -0
- package/dist/pull-bridge/vector3.d.ts.map +1 -0
- package/dist/pull-bridge/vector3.js +4 -0
- package/dist/pull-bridge/vector3.js.map +1 -0
- package/dist/pull-bridge.d.ts +18 -100
- package/dist/pull-bridge.d.ts.map +1 -1
- package/dist/pull-bridge.js +59 -526
- package/dist/pull-bridge.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, join } from "node:path";
|
|
3
|
+
import { inflateRawSync } from "node:zlib";
|
|
4
|
+
const ZIP_MAGIC = Buffer.from([0x50, 0x4b, 0x03, 0x04]);
|
|
5
|
+
const GLB_MAGIC = Buffer.from([0x67, 0x6c, 0x54, 0x46]);
|
|
6
|
+
export const defaultDownloadFile = async (url, destPath) => {
|
|
7
|
+
const res = await fetch(url, { headers: { accept: "model/gltf-binary,application/zip,*/*" } });
|
|
8
|
+
if (!res.ok) {
|
|
9
|
+
if (res.status === 401 || res.status === 403) {
|
|
10
|
+
throw new Error(`Aura3D resolve failed: ${url} requires authentication (HTTP ${res.status}). ` +
|
|
11
|
+
`This source (e.g. Sketchfab) needs an OAuth download token; set SKETCHFAB_API_TOKEN ` +
|
|
12
|
+
`or pull a direct-download (Objaverse) candidate instead.`);
|
|
13
|
+
}
|
|
14
|
+
throw new Error(`Aura3D resolve failed: download of ${url} returned HTTP ${res.status}.`);
|
|
15
|
+
}
|
|
16
|
+
const buffer = Buffer.from(await res.arrayBuffer());
|
|
17
|
+
if (buffer.length === 0) {
|
|
18
|
+
throw new Error(`Aura3D resolve failed: download of ${url} was empty.`);
|
|
19
|
+
}
|
|
20
|
+
const contentType = res.headers.get("content-type") ?? "";
|
|
21
|
+
if (contentType.includes("application/json") || buffer[0] === 0x7b) {
|
|
22
|
+
const followed = await followSignedDownload(buffer, destPath);
|
|
23
|
+
if (followed)
|
|
24
|
+
return followed;
|
|
25
|
+
throw new Error(`Aura3D resolve failed: ${url} returned a JSON envelope, not model bytes ` +
|
|
26
|
+
`(auth-gated download requiring an OAuth token). Pull a direct-download candidate instead.`);
|
|
27
|
+
}
|
|
28
|
+
if (startsWith(buffer, ZIP_MAGIC)) {
|
|
29
|
+
return unpackZipToModel(buffer, destPath);
|
|
30
|
+
}
|
|
31
|
+
writeFileSync(destPath, buffer);
|
|
32
|
+
await fetchExternalDependencies(buffer, url, destPath);
|
|
33
|
+
return { path: destPath };
|
|
34
|
+
};
|
|
35
|
+
function externalUris(modelBytes, destPath) {
|
|
36
|
+
let json;
|
|
37
|
+
try {
|
|
38
|
+
if (startsWith(modelBytes, GLB_MAGIC)) {
|
|
39
|
+
if (modelBytes.length < 20)
|
|
40
|
+
return [];
|
|
41
|
+
const jsonLen = modelBytes.readUInt32LE(12);
|
|
42
|
+
json = JSON.parse(modelBytes.toString("utf8", 20, 20 + jsonLen));
|
|
43
|
+
}
|
|
44
|
+
else if (destPath.toLowerCase().endsWith(".gltf")) {
|
|
45
|
+
json = JSON.parse(modelBytes.toString("utf8"));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
const doc = json;
|
|
55
|
+
const uris = [...(doc.images ?? []), ...(doc.buffers ?? [])]
|
|
56
|
+
.map((entry) => entry.uri)
|
|
57
|
+
.filter((uri) => typeof uri === "string" && uri.length > 0 && !uri.startsWith("data:"));
|
|
58
|
+
return [...new Set(uris)];
|
|
59
|
+
}
|
|
60
|
+
async function fetchExternalDependencies(modelBytes, sourceUrl, destPath) {
|
|
61
|
+
const uris = externalUris(modelBytes, destPath);
|
|
62
|
+
if (uris.length === 0)
|
|
63
|
+
return;
|
|
64
|
+
const dir = dirname(destPath);
|
|
65
|
+
await Promise.all(uris.map(async (uri) => {
|
|
66
|
+
const decoded = decodeURIComponent(uri);
|
|
67
|
+
const target = join(dir, decoded);
|
|
68
|
+
let resolvedUrl;
|
|
69
|
+
try {
|
|
70
|
+
resolvedUrl = new URL(uri, sourceUrl).toString();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const res = await fetch(resolvedUrl, { headers: { accept: "*/*" } });
|
|
77
|
+
if (!res.ok)
|
|
78
|
+
return;
|
|
79
|
+
const bytes = Buffer.from(await res.arrayBuffer());
|
|
80
|
+
if (bytes.length === 0)
|
|
81
|
+
return;
|
|
82
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
83
|
+
writeFileSync(target, bytes);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
function startsWith(buffer, magic) {
|
|
91
|
+
return buffer.length >= magic.length && buffer.subarray(0, magic.length).equals(magic);
|
|
92
|
+
}
|
|
93
|
+
async function followSignedDownload(buffer, destPath) {
|
|
94
|
+
let parsed;
|
|
95
|
+
try {
|
|
96
|
+
parsed = JSON.parse(buffer.toString("utf8"));
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
const envelope = parsed;
|
|
102
|
+
const directUrl = pickUrl(envelope?.["glb"]) ?? pickUrl(envelope?.["gltf"]) ?? pickUrl(envelope?.["model"]);
|
|
103
|
+
if (!directUrl)
|
|
104
|
+
return undefined;
|
|
105
|
+
const res = await fetch(directUrl, { headers: { accept: "model/gltf-binary,application/zip,*/*" } });
|
|
106
|
+
if (!res.ok)
|
|
107
|
+
return undefined;
|
|
108
|
+
const inner = Buffer.from(await res.arrayBuffer());
|
|
109
|
+
if (inner.length === 0)
|
|
110
|
+
return undefined;
|
|
111
|
+
if (startsWith(inner, ZIP_MAGIC))
|
|
112
|
+
return unpackZipToModel(inner, destPath);
|
|
113
|
+
writeFileSync(destPath, inner);
|
|
114
|
+
return { path: destPath };
|
|
115
|
+
}
|
|
116
|
+
function pickUrl(value) {
|
|
117
|
+
if (typeof value === "string")
|
|
118
|
+
return value;
|
|
119
|
+
if (value && typeof value === "object") {
|
|
120
|
+
const url = value["url"];
|
|
121
|
+
if (typeof url === "string")
|
|
122
|
+
return url;
|
|
123
|
+
}
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
function unpackZipToModel(zip, destPath) {
|
|
127
|
+
const dir = dirname(destPath);
|
|
128
|
+
const entries = readZipEntries(zip);
|
|
129
|
+
if (entries.length === 0) {
|
|
130
|
+
throw new Error("Aura3D resolve failed: downloaded ZIP contained no files.");
|
|
131
|
+
}
|
|
132
|
+
let glbPath;
|
|
133
|
+
let gltfPath;
|
|
134
|
+
for (const entry of entries) {
|
|
135
|
+
if (entry.name.endsWith("/"))
|
|
136
|
+
continue;
|
|
137
|
+
const safeName = basename(entry.name);
|
|
138
|
+
if (!safeName)
|
|
139
|
+
continue;
|
|
140
|
+
const outPath = join(dir, safeName);
|
|
141
|
+
writeFileSync(outPath, entry.data);
|
|
142
|
+
const lower = safeName.toLowerCase();
|
|
143
|
+
if (lower.endsWith(".glb") && (!glbPath || isPlausibleGlb(entry.data)))
|
|
144
|
+
glbPath = outPath;
|
|
145
|
+
else if (lower.endsWith(".gltf") && !gltfPath)
|
|
146
|
+
gltfPath = outPath;
|
|
147
|
+
}
|
|
148
|
+
const chosen = glbPath ?? gltfPath;
|
|
149
|
+
if (!chosen) {
|
|
150
|
+
throw new Error("Aura3D resolve failed: ZIP did not contain a .glb or .gltf model.");
|
|
151
|
+
}
|
|
152
|
+
return { path: chosen };
|
|
153
|
+
}
|
|
154
|
+
function isPlausibleGlb(data) {
|
|
155
|
+
return startsWith(data, GLB_MAGIC);
|
|
156
|
+
}
|
|
157
|
+
function readZipEntries(zip) {
|
|
158
|
+
const eocd = findEocd(zip);
|
|
159
|
+
if (eocd < 0)
|
|
160
|
+
return [];
|
|
161
|
+
const total = zip.readUInt16LE(eocd + 10);
|
|
162
|
+
let cd = zip.readUInt32LE(eocd + 16);
|
|
163
|
+
const entries = [];
|
|
164
|
+
for (let i = 0; i < total; i += 1) {
|
|
165
|
+
if (cd + 46 > zip.length || zip.readUInt32LE(cd) !== 0x02014b50)
|
|
166
|
+
break;
|
|
167
|
+
const method = zip.readUInt16LE(cd + 10);
|
|
168
|
+
const compSize = zip.readUInt32LE(cd + 20);
|
|
169
|
+
const nameLen = zip.readUInt16LE(cd + 28);
|
|
170
|
+
const extraLen = zip.readUInt16LE(cd + 30);
|
|
171
|
+
const commentLen = zip.readUInt16LE(cd + 32);
|
|
172
|
+
const localOffset = zip.readUInt32LE(cd + 42);
|
|
173
|
+
const name = zip.toString("utf8", cd + 46, cd + 46 + nameLen);
|
|
174
|
+
const data = inflateLocalEntry(zip, localOffset, method, compSize);
|
|
175
|
+
if (data)
|
|
176
|
+
entries.push({ name, data });
|
|
177
|
+
cd += 46 + nameLen + extraLen + commentLen;
|
|
178
|
+
}
|
|
179
|
+
return entries;
|
|
180
|
+
}
|
|
181
|
+
function inflateLocalEntry(zip, localOffset, method, compSize) {
|
|
182
|
+
if (localOffset + 30 > zip.length || zip.readUInt32LE(localOffset) !== 0x04034b50)
|
|
183
|
+
return undefined;
|
|
184
|
+
const nameLen = zip.readUInt16LE(localOffset + 26);
|
|
185
|
+
const extraLen = zip.readUInt16LE(localOffset + 28);
|
|
186
|
+
const dataStart = localOffset + 30 + nameLen + extraLen;
|
|
187
|
+
const comp = zip.subarray(dataStart, dataStart + compSize);
|
|
188
|
+
if (method === 0)
|
|
189
|
+
return Buffer.from(comp);
|
|
190
|
+
if (method === 8) {
|
|
191
|
+
try {
|
|
192
|
+
return inflateRawSync(comp);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
function findEocd(zip) {
|
|
201
|
+
const min = Math.max(0, zip.length - 0xffff - 22);
|
|
202
|
+
for (let i = zip.length - 22; i >= min; i -= 1) {
|
|
203
|
+
if (zip.readUInt32LE(i) === 0x06054b50)
|
|
204
|
+
return i;
|
|
205
|
+
}
|
|
206
|
+
return -1;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/pull-bridge/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AnimationAssetProfile, AuraCanonicalAsset, ResolveCandidate, ResolveConstraints } from "@aura3d/asset-index";
|
|
2
|
+
import type { CliAssetSearchProfile, CliResolveConstraints } from "./types.js";
|
|
3
|
+
export declare function toResolveConstraints(cli: CliResolveConstraints, redistributableOnly: boolean): ResolveConstraints;
|
|
4
|
+
export declare function rankForProfile(candidates: readonly ResolveCandidate[], profile: CliAssetSearchProfile): readonly ResolveCandidate[];
|
|
5
|
+
export declare function isAnimationCliProfile(profile: CliAssetSearchProfile | undefined): profile is AnimationAssetProfile;
|
|
6
|
+
export declare function evaluateAssetProfile(asset: AuraCanonicalAsset, profile: Exclude<CliAssetSearchProfile, "general">): {
|
|
7
|
+
readonly suitable: boolean;
|
|
8
|
+
readonly scoreBonus: number;
|
|
9
|
+
readonly rejectionReasons: readonly string[];
|
|
10
|
+
readonly warnings: readonly string[];
|
|
11
|
+
readonly validationHooks?: readonly string[];
|
|
12
|
+
};
|
|
13
|
+
export declare function animationProfileMaxTriangles(profile: AnimationAssetProfile): number;
|
|
14
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/pull-bridge/profiles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAQpB,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,qBAAqB,EAC1B,mBAAmB,EAAE,OAAO,GAC3B,kBAAkB,CA0BpB;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,OAAO,EAAE,qBAAqB,GAC7B,SAAS,gBAAgB,EAAE,CAW7B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,GAAG,OAAO,IAAI,qBAAqB,CAElH;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC,GACjD;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAI/L;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAWnF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import * as assetIndex from "@aura3d/asset-index";
|
|
2
|
+
const { evaluateAnimationAssetProfile, evaluateGameAssetProfile, isAnimationAssetProfile, } = assetIndex;
|
|
3
|
+
export function toResolveConstraints(cli, redistributableOnly) {
|
|
4
|
+
const constraints = {};
|
|
5
|
+
if (cli.profile === "fighting-character") {
|
|
6
|
+
constraints.license = cli.license && cli.license.length > 0 ? cli.license : ["CC0", "CC-BY"];
|
|
7
|
+
constraints.animated = true;
|
|
8
|
+
constraints.format = "glb";
|
|
9
|
+
constraints.maxTriangles = cli.maxTriangles ?? 200_000;
|
|
10
|
+
}
|
|
11
|
+
else if (isAnimationCliProfile(cli.profile)) {
|
|
12
|
+
constraints.license = cli.license && cli.license.length > 0 ? cli.license : ["CC0", "CC-BY"];
|
|
13
|
+
constraints.format = "glb";
|
|
14
|
+
constraints.maxTriangles = cli.maxTriangles ?? animationProfileMaxTriangles(cli.profile);
|
|
15
|
+
if (cli.profile === "animation-character")
|
|
16
|
+
constraints.animated = true;
|
|
17
|
+
else if (typeof cli.animated === "boolean")
|
|
18
|
+
constraints.animated = cli.animated;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
if (cli.license && cli.license.length > 0)
|
|
22
|
+
constraints.license = cli.license;
|
|
23
|
+
if (typeof cli.maxTriangles === "number")
|
|
24
|
+
constraints.maxTriangles = cli.maxTriangles;
|
|
25
|
+
if (typeof cli.animated === "boolean")
|
|
26
|
+
constraints.animated = cli.animated;
|
|
27
|
+
}
|
|
28
|
+
if (redistributableOnly)
|
|
29
|
+
constraints.redistributableOnly = true;
|
|
30
|
+
return constraints;
|
|
31
|
+
}
|
|
32
|
+
export function rankForProfile(candidates, profile) {
|
|
33
|
+
if (profile === "general")
|
|
34
|
+
return candidates;
|
|
35
|
+
return [...candidates].sort((a, b) => {
|
|
36
|
+
const aEval = evaluateAssetProfile(a.asset, profile);
|
|
37
|
+
const bEval = evaluateAssetProfile(b.asset, profile);
|
|
38
|
+
return (Number(bEval.suitable) - Number(aEval.suitable) ||
|
|
39
|
+
(b.score + bEval.scoreBonus) - (a.score + aEval.scoreBonus) ||
|
|
40
|
+
a.asset.id.localeCompare(b.asset.id));
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function isAnimationCliProfile(profile) {
|
|
44
|
+
return typeof profile === "string" && isAnimationAssetProfile(profile);
|
|
45
|
+
}
|
|
46
|
+
export function evaluateAssetProfile(asset, profile) {
|
|
47
|
+
return profile === "fighting-character"
|
|
48
|
+
? evaluateGameAssetProfile(asset, "fighting-character")
|
|
49
|
+
: evaluateAnimationAssetProfile(asset, profile, { preDownload: true });
|
|
50
|
+
}
|
|
51
|
+
export function animationProfileMaxTriangles(profile) {
|
|
52
|
+
switch (profile) {
|
|
53
|
+
case "animation-character":
|
|
54
|
+
return 160_000;
|
|
55
|
+
case "animation-prop":
|
|
56
|
+
return 100_000;
|
|
57
|
+
case "animation-set":
|
|
58
|
+
return 350_000;
|
|
59
|
+
case "animation-environment":
|
|
60
|
+
return 250_000;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/pull-bridge/profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AuraAssetIntendedRole, AuraCanonicalAsset, ResolveCandidate } from "@aura3d/asset-index";
|
|
2
|
+
import type { AssetInspectionReport, AuraCliAssetRole, AuraCliResolveCandidateProvenance } from "../index.js";
|
|
3
|
+
import type { AssetResolveCandidateScore } from "./scoring.js";
|
|
4
|
+
import type { CliAssetSearchProfile } from "./types.js";
|
|
5
|
+
export declare function createPreDownloadCandidateBlockingWarnings(asset: AuraCanonicalAsset): readonly string[];
|
|
6
|
+
export declare function createPostDownloadCandidateBlockingWarnings(asset: AuraCanonicalAsset, inspection: AssetInspectionReport, profile: CliAssetSearchProfile): readonly string[];
|
|
7
|
+
export declare function createResolveCandidateProvenance(candidate: ResolveCandidate, query: string, score: AssetResolveCandidateScore, inspection: AssetInspectionReport): AuraCliResolveCandidateProvenance;
|
|
8
|
+
export declare function mapCanonicalRoleToCli(role: AuraAssetIntendedRole | undefined): AuraCliAssetRole;
|
|
9
|
+
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/pull-bridge/provenance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,iCAAiC,EAClC,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,wBAAgB,0CAA0C,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,MAAM,EAAE,CASvG;AAED,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,kBAAkB,EACzB,UAAU,EAAE,qBAAqB,EACjC,OAAO,EAAE,qBAAqB,GAC7B,SAAS,MAAM,EAAE,CA2BnB;AAED,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,0BAA0B,EACjC,UAAU,EAAE,qBAAqB,GAChC,iCAAiC,CAuDnC;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,SAAS,GAAG,gBAAgB,CAE/F"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { isPositiveVector3 } from "./vector3.js";
|
|
2
|
+
export function createPreDownloadCandidateBlockingWarnings(asset) {
|
|
3
|
+
const warnings = [];
|
|
4
|
+
if (asset.duplicateHash && !asset.duplicateOkReason) {
|
|
5
|
+
warnings.push(`duplicate hash ${asset.duplicateHash} has no allowlist/explanation`);
|
|
6
|
+
}
|
|
7
|
+
if (asset.access === "direct-download" && !(asset.downloadUrl ?? asset.url)) {
|
|
8
|
+
warnings.push("direct-download candidate is missing a download URL");
|
|
9
|
+
}
|
|
10
|
+
return warnings;
|
|
11
|
+
}
|
|
12
|
+
export function createPostDownloadCandidateBlockingWarnings(asset, inspection, profile) {
|
|
13
|
+
const warnings = [];
|
|
14
|
+
const expectedBounds = asset.bounds?.size ?? asset.dimensions;
|
|
15
|
+
if (isPositiveVector3(expectedBounds) && !isPositiveVector3(inspection.bounds)) {
|
|
16
|
+
warnings.push("catalog advertised bounds/dimensions, but downloaded file produced no bounds");
|
|
17
|
+
}
|
|
18
|
+
if (typeof asset.materialCount === "number" && asset.materialCount > 0 && inspection.materials.length === 0) {
|
|
19
|
+
warnings.push("catalog advertised materials, but downloaded file has none");
|
|
20
|
+
}
|
|
21
|
+
if (typeof asset.textureCount === "number" && asset.textureCount > 0 && inspection.textures.length === 0) {
|
|
22
|
+
warnings.push("catalog advertised textures, but downloaded file has none");
|
|
23
|
+
}
|
|
24
|
+
const expectedAnimationCount = asset.animationClipCount ?? asset.animationClips?.length;
|
|
25
|
+
const requiresAnimation = asset.hasAnimations === true ||
|
|
26
|
+
(typeof expectedAnimationCount === "number" && expectedAnimationCount > 0) ||
|
|
27
|
+
profile === "fighting-character" ||
|
|
28
|
+
profile === "animation-character";
|
|
29
|
+
if (requiresAnimation && inspection.animations.length === 0) {
|
|
30
|
+
warnings.push("catalog/profile expected animation clips, but downloaded file has none");
|
|
31
|
+
}
|
|
32
|
+
if (typeof asset.skinCount === "number" && asset.skinCount > 0 && (inspection.skeleton?.skinCount ?? 0) === 0) {
|
|
33
|
+
warnings.push("catalog advertised skins/skeletons, but downloaded file has none");
|
|
34
|
+
}
|
|
35
|
+
if (inspection.warnings.some((warning) => warning.includes("invisible or unreadable"))) {
|
|
36
|
+
warnings.push("downloaded file contains invisible or unreadable materials");
|
|
37
|
+
}
|
|
38
|
+
return warnings;
|
|
39
|
+
}
|
|
40
|
+
export function createResolveCandidateProvenance(candidate, query, score, inspection) {
|
|
41
|
+
const { asset } = candidate;
|
|
42
|
+
return {
|
|
43
|
+
catalogId: asset.id,
|
|
44
|
+
query,
|
|
45
|
+
source: asset.source,
|
|
46
|
+
...(asset.sourceFamily ? { sourceFamily: asset.sourceFamily } : {}),
|
|
47
|
+
...(asset.retrievedAt ? { retrievedAt: asset.retrievedAt } : {}),
|
|
48
|
+
scoreTotal: score.total,
|
|
49
|
+
scoreBreakdown: {
|
|
50
|
+
semantic: score.semantic,
|
|
51
|
+
sourceQuality: score.sourceQuality,
|
|
52
|
+
license: score.license,
|
|
53
|
+
inspection: score.inspection,
|
|
54
|
+
roleFit: score.roleFit,
|
|
55
|
+
},
|
|
56
|
+
reasons: score.reasons,
|
|
57
|
+
penalties: score.penalties,
|
|
58
|
+
...(asset.sourcePage ? { sourcePage: asset.sourcePage } : {}),
|
|
59
|
+
...(asset.downloadUrl ?? asset.url ? { downloadUrl: asset.downloadUrl ?? asset.url } : {}),
|
|
60
|
+
license: asset.license.spdx,
|
|
61
|
+
...(asset.licenseName ?? asset.license.raw ? { licenseName: asset.licenseName ?? asset.license.raw } : {}),
|
|
62
|
+
...(asset.licenseUrl ?? asset.license.sourcePage ? { licenseUrl: asset.licenseUrl ?? asset.license.sourcePage } : {}),
|
|
63
|
+
...(asset.license.raw ? { licenseRaw: asset.license.raw } : {}),
|
|
64
|
+
...(asset.author ? { author: asset.author } : {}),
|
|
65
|
+
...(asset.attribution ? { attribution: asset.attribution } : {}),
|
|
66
|
+
...(typeof asset.semanticScore === "number" ? { semanticScore: asset.semanticScore } : {}),
|
|
67
|
+
...(typeof asset.workerScore === "number" ? { workerScore: asset.workerScore } : {}),
|
|
68
|
+
...(typeof asset.qualityScore === "number" ? { qualityScore: asset.qualityScore } : {}),
|
|
69
|
+
...(asset.bounds?.size ? { bounds: asset.bounds.size } : {}),
|
|
70
|
+
...(asset.dimensions ? { dimensions: asset.dimensions } : {}),
|
|
71
|
+
...(typeof (asset.triangleCount ?? asset.triangles) === "number" ? { triangleCount: asset.triangleCount ?? asset.triangles } : {}),
|
|
72
|
+
...(typeof asset.meshCount === "number" ? { meshCount: asset.meshCount } : {}),
|
|
73
|
+
...(typeof asset.materialCount === "number" ? { materialCount: asset.materialCount } : {}),
|
|
74
|
+
...(typeof asset.textureCount === "number" ? { textureCount: asset.textureCount } : {}),
|
|
75
|
+
...(typeof (asset.animationClipCount ?? asset.animationClips?.length) === "number" ? { animationClipCount: asset.animationClipCount ?? asset.animationClips?.length } : {}),
|
|
76
|
+
...(asset.animationClips ? { animationClips: asset.animationClips } : {}),
|
|
77
|
+
...(typeof asset.skinCount === "number" ? { skinCount: asset.skinCount } : {}),
|
|
78
|
+
...(typeof asset.morphTargetCount === "number" ? { morphTargetCount: asset.morphTargetCount } : {}),
|
|
79
|
+
...(asset.intendedRole ? { intendedRole: asset.intendedRole } : {}),
|
|
80
|
+
...(asset.roleSuitability ? { roleSuitability: asset.roleSuitability } : {}),
|
|
81
|
+
...(asset.qualityWarnings ? { qualityWarnings: asset.qualityWarnings } : {}),
|
|
82
|
+
...(asset.duplicateHash ? { duplicateHash: asset.duplicateHash } : {}),
|
|
83
|
+
...(asset.duplicateOkReason ? { duplicateOkReason: asset.duplicateOkReason } : {}),
|
|
84
|
+
postDownloadInspection: {
|
|
85
|
+
...(inspection.bounds ? { bounds: inspection.bounds } : {}),
|
|
86
|
+
materialCount: inspection.materials.length,
|
|
87
|
+
textureCount: inspection.textures.length,
|
|
88
|
+
animationClipCount: inspection.animations.length,
|
|
89
|
+
skinCount: inspection.skeleton?.skinCount ?? 0,
|
|
90
|
+
morphTargetCount: inspection.morphTargets?.targetCount ?? 0,
|
|
91
|
+
warnings: inspection.warnings,
|
|
92
|
+
},
|
|
93
|
+
...(asset.rawCatalogMetadata ? { rawCatalogMetadata: asset.rawCatalogMetadata } : {}),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function mapCanonicalRoleToCli(role) {
|
|
97
|
+
return role ?? "unknown";
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/pull-bridge/provenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ResolveCandidate } from "@aura3d/asset-index";
|
|
2
|
+
import type { CliAssetSearchProfile } from "./types.js";
|
|
3
|
+
export interface PullableSelection {
|
|
4
|
+
readonly ok: true;
|
|
5
|
+
readonly candidate: ResolveCandidate;
|
|
6
|
+
}
|
|
7
|
+
export interface PullableRefusal {
|
|
8
|
+
readonly ok: false;
|
|
9
|
+
readonly reason: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function selectPullable(candidates: readonly ResolveCandidate[], options?: {
|
|
12
|
+
readonly profile?: CliAssetSearchProfile;
|
|
13
|
+
}): PullableSelection | PullableRefusal;
|
|
14
|
+
//# sourceMappingURL=pullable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pullable.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/pull-bridge/pullable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAsB,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAIxD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,cAAc,CAC5B,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,OAAO,GAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAA;CAAO,GACzD,iBAAiB,GAAG,eAAe,CA4CrC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as assetIndex from "@aura3d/asset-index";
|
|
2
|
+
import { evaluateAssetProfile } from "./profiles.js";
|
|
3
|
+
import { rankResolveCandidates } from "./scoring.js";
|
|
4
|
+
const { isAutoPullable } = assetIndex;
|
|
5
|
+
export function selectPullable(candidates, options = {}) {
|
|
6
|
+
const profile = options.profile ?? "general";
|
|
7
|
+
const ranked = rankResolveCandidates(candidates, { profile });
|
|
8
|
+
const pullable = ranked.find((c) => {
|
|
9
|
+
if (!isAutoPullable(c.asset))
|
|
10
|
+
return false;
|
|
11
|
+
if (profile === "general")
|
|
12
|
+
return true;
|
|
13
|
+
return evaluateAssetProfile(c.asset, profile).suitable;
|
|
14
|
+
});
|
|
15
|
+
if (pullable)
|
|
16
|
+
return { ok: true, candidate: pullable };
|
|
17
|
+
if (candidates.length === 0) {
|
|
18
|
+
return {
|
|
19
|
+
ok: false,
|
|
20
|
+
reason: "No candidates matched the query. Try a broader query or relax constraints.",
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
if (profile !== "general") {
|
|
24
|
+
const rejectedPullable = ranked.filter((c) => isAutoPullable(c.asset));
|
|
25
|
+
if (rejectedPullable.length > 0) {
|
|
26
|
+
return {
|
|
27
|
+
ok: false,
|
|
28
|
+
reason: `No auto-pullable candidate passed the ${profile} profile. ` +
|
|
29
|
+
rejectedPullable.slice(0, 5).map((candidate) => {
|
|
30
|
+
const evaluation = evaluateAssetProfile(candidate.asset, profile);
|
|
31
|
+
const reasons = evaluation.rejectionReasons.length > 0
|
|
32
|
+
? evaluation.rejectionReasons.join("; ")
|
|
33
|
+
: "profile did not report a concrete reason";
|
|
34
|
+
return `"${candidate.asset.title}" (${candidate.asset.id}): ${reasons}`;
|
|
35
|
+
}).join(" | "),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const top = ranked[0].asset;
|
|
40
|
+
return {
|
|
41
|
+
ok: false,
|
|
42
|
+
reason: `No auto-pullable candidate found. The best match "${top.title}" (${top.id}) ` +
|
|
43
|
+
`is ${describeWhyNotPullable(top)}. Aura will not auto-pull an asset whose ` +
|
|
44
|
+
`license is unverified or that is marketplace deep-link only. ` +
|
|
45
|
+
`Review it at ${top.sourcePage ?? top.url} and add it manually once the ` +
|
|
46
|
+
`license is confirmed.`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function describeWhyNotPullable(asset) {
|
|
50
|
+
if (asset.access !== "direct-download")
|
|
51
|
+
return "marketplace deep-link only";
|
|
52
|
+
if (!asset.license.verified)
|
|
53
|
+
return `license UNVERIFIED (raw: "${asset.license.raw}")`;
|
|
54
|
+
if (!asset.license.redistributable)
|
|
55
|
+
return `license "${asset.license.spdx}" is not redistributable`;
|
|
56
|
+
return "not auto-pullable";
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=pullable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pullable.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/pull-bridge/pullable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ResolveCandidate } from "@aura3d/asset-index";
|
|
2
|
+
import type { CliAssetSearchProfile } from "./types.js";
|
|
3
|
+
export interface AssetResolveCandidateScore {
|
|
4
|
+
readonly total: number;
|
|
5
|
+
readonly semantic: number;
|
|
6
|
+
readonly sourceQuality: number;
|
|
7
|
+
readonly license: number;
|
|
8
|
+
readonly inspection: number;
|
|
9
|
+
readonly roleFit: number;
|
|
10
|
+
readonly penalties: readonly string[];
|
|
11
|
+
readonly reasons: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
export declare function scoreResolveCandidate(candidate: ResolveCandidate, options?: {
|
|
14
|
+
readonly query?: string;
|
|
15
|
+
readonly profile?: CliAssetSearchProfile;
|
|
16
|
+
}): AssetResolveCandidateScore;
|
|
17
|
+
export declare function rankResolveCandidates(candidates: readonly ResolveCandidate[], options?: {
|
|
18
|
+
readonly query?: string;
|
|
19
|
+
readonly profile?: CliAssetSearchProfile;
|
|
20
|
+
}): readonly ResolveCandidate[];
|
|
21
|
+
//# sourceMappingURL=scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/pull-bridge/scoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGxD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,gBAAgB,EAC3B,OAAO,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAA;CAAO,GAClF,0BAA0B,CA2G5B;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,SAAS,gBAAgB,EAAE,EACvC,OAAO,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAA;CAAO,GAClF,SAAS,gBAAgB,EAAE,CAM7B"}
|