@aura3d/cli 4.0.8 → 4.1.1

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.
Files changed (55) hide show
  1. package/data/aura.exports.json +10 -10
  2. package/data/root-export-dispositions.json +504 -0
  3. package/dist/cli-help.d.ts.map +1 -1
  4. package/dist/cli-help.js +6 -0
  5. package/dist/cli-help.js.map +1 -1
  6. package/dist/cli.js +33 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/assets/gltfToolkit.d.ts +25 -0
  9. package/dist/commands/assets/gltfToolkit.d.ts.map +1 -0
  10. package/dist/commands/assets/gltfToolkit.js +59 -0
  11. package/dist/commands/assets/gltfToolkit.js.map +1 -0
  12. package/dist/commands/assets/importMeshy.d.ts +50 -0
  13. package/dist/commands/assets/importMeshy.d.ts.map +1 -0
  14. package/dist/commands/assets/importMeshy.js +112 -0
  15. package/dist/commands/assets/importMeshy.js.map +1 -0
  16. package/dist/commands/assets/index.d.ts +6 -0
  17. package/dist/commands/assets/index.d.ts.map +1 -0
  18. package/dist/commands/assets/index.js +54 -0
  19. package/dist/commands/assets/index.js.map +1 -0
  20. package/dist/commands/assets/mergeClips.d.ts +44 -0
  21. package/dist/commands/assets/mergeClips.d.ts.map +1 -0
  22. package/dist/commands/assets/mergeClips.js +103 -0
  23. package/dist/commands/assets/mergeClips.js.map +1 -0
  24. package/dist/commands/assets/optimize.d.ts +54 -0
  25. package/dist/commands/assets/optimize.d.ts.map +1 -0
  26. package/dist/commands/assets/optimize.js +76 -0
  27. package/dist/commands/assets/optimize.js.map +1 -0
  28. package/dist/commands/assets/optimizeVerb.d.ts +9 -0
  29. package/dist/commands/assets/optimizeVerb.d.ts.map +1 -0
  30. package/dist/commands/assets/optimizeVerb.js +40 -0
  31. package/dist/commands/assets/optimizeVerb.js.map +1 -0
  32. package/dist/commands/meshyLedger.d.ts +103 -0
  33. package/dist/commands/meshyLedger.d.ts.map +1 -0
  34. package/dist/commands/meshyLedger.js +308 -0
  35. package/dist/commands/meshyLedger.js.map +1 -0
  36. package/dist/commands/prd05/index.d.ts.map +1 -1
  37. package/dist/commands/prd05/index.js +8 -2
  38. package/dist/commands/prd05/index.js.map +1 -1
  39. package/dist/commands/registry.d.ts +1 -0
  40. package/dist/commands/registry.d.ts.map +1 -1
  41. package/dist/commands/registry.js +1 -0
  42. package/dist/commands/registry.js.map +1 -1
  43. package/package.json +5 -5
  44. package/skills/aura3d-assets/SKILL.md +28 -26
  45. package/skills/aura3d-browser-game/SKILL.md +16 -13
  46. package/skills/aura3d-browser-game/references/kits-and-hooks.md +107 -0
  47. package/skills/aura3d-core/SKILL.md +9 -8
  48. package/skills/aura3d-core/references/pitfalls.md +62 -0
  49. package/skills/aura3d-evidence-review/SKILL.md +22 -2
  50. package/skills/aura3d-materials-environments/SKILL.md +8 -0
  51. package/skills/aura3d-materials-environments/references/custom-shader-chunks.md +53 -0
  52. package/skills/aura3d-performance/SKILL.md +17 -1
  53. package/skills/llms.txt +30 -20
  54. package/skills/meshy-cli/SKILL.md +7 -5
  55. package/skills/meshy-cli/references/asset-tooling.md +72 -0
@@ -0,0 +1,308 @@
1
+ /**
2
+ * `aura3d meshy ledger` — a local credit ledger for paid Meshy generation.
3
+ *
4
+ * Bookkeeping only: this module never talks to Meshy and never reads, prints or stores a credential. A wrapper that
5
+ * calls Meshy (for example through Kiro Prism) reserves credits here BEFORE a paid call and settles the record after.
6
+ * Per-game caps and one global cap are enforced under a lock, so many agents or shells can share one ledger.
7
+ *
8
+ * Lessons baked in:
9
+ * - A rate-limited or timed-out poll does not mean the task failed: the task usually finishes and is charged.
10
+ * Such a call settles as `unconfirmed` and keeps counting its estimate until `reconcile` proves otherwise.
11
+ * - Only a confirmed no-charge outcome (auth/validation/credit errors, a FAILED task) settles as `failed` (counts 0).
12
+ * - Every record carries a required game/project tag, and `prefixedName` makes raw download names game-prefixed so
13
+ * two games cannot silently reuse each other's `rocks.raw.glb`.
14
+ */
15
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
16
+ import { homedir } from "node:os";
17
+ import { dirname, resolve } from "node:path";
18
+ /** Meshy's published per-operation credit costs (preview 20, refine 10, remesh 5, rigging 5, animate 3, retexture 10). */
19
+ export const MESHY_CREDIT_ESTIMATES = {
20
+ preview: 20,
21
+ refine: 10,
22
+ remesh: 5,
23
+ rigging: 5,
24
+ animate: 3,
25
+ retexture: 10
26
+ };
27
+ export const DEFAULT_MESHY_GLOBAL_CAP = 1000;
28
+ const GAME_TAG = /^[a-z][a-z0-9-]{1,39}$/;
29
+ const STALE_LOCK_MS = 60_000;
30
+ export class MeshyLedgerError extends Error {
31
+ code;
32
+ constructor(code, message) {
33
+ super(message);
34
+ this.code = code;
35
+ this.name = "MeshyLedgerError";
36
+ }
37
+ }
38
+ export function defaultLedgerPath() {
39
+ return process.env.AURA3D_MESHY_LEDGER ?? resolve(homedir(), ".aura3d", "meshy-ledger.jsonl");
40
+ }
41
+ function resolveOptions(options) {
42
+ const envCap = Number(process.env.AURA3D_MESHY_GLOBAL_CAP);
43
+ return {
44
+ ledgerPath: resolve(options.ledgerPath ?? defaultLedgerPath()),
45
+ globalCap: options.globalCap ?? (Number.isFinite(envCap) && envCap > 0 ? envCap : DEFAULT_MESHY_GLOBAL_CAP),
46
+ lockTimeoutMs: options.lockTimeoutMs ?? 30_000,
47
+ now: options.now ?? (() => new Date())
48
+ };
49
+ }
50
+ export function assertGameTag(game) {
51
+ if (!GAME_TAG.test(game)) {
52
+ throw new MeshyLedgerError("BAD_GAME_TAG", `Meshy ledger needs a game/project tag like "drift" or "last-train" (lowercase letters, digits, dashes; got "${game}").`);
53
+ }
54
+ return game;
55
+ }
56
+ /**
57
+ * Raw Meshy downloads must carry the game tag so two games never share `rocks.raw.glb`.
58
+ * `prefixedName("drift", "lamp")` -> `drift-lamp`; an already-prefixed name is returned unchanged.
59
+ */
60
+ export function prefixedName(game, name) {
61
+ assertGameTag(game);
62
+ if (!/^[A-Za-z][A-Za-z0-9_-]*$/.test(name))
63
+ throw new MeshyLedgerError("BAD_RECORD", `Asset name "${name}" must start with a letter and use letters, digits, "-" or "_".`);
64
+ return name === game || name.startsWith(`${game}-`) || name.startsWith(`${game}_`) ? name : `${game}-${name}`;
65
+ }
66
+ function sleepSync(ms) {
67
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
68
+ }
69
+ function pidAlive(pid) {
70
+ try {
71
+ process.kill(pid, 0);
72
+ return true;
73
+ }
74
+ catch (error) {
75
+ return error.code === "EPERM";
76
+ }
77
+ }
78
+ function withLock(resolved, fn) {
79
+ mkdirSync(dirname(resolved.ledgerPath), { recursive: true });
80
+ const lock = `${resolved.ledgerPath}.lock.d`;
81
+ const started = Date.now();
82
+ for (;;) {
83
+ try {
84
+ mkdirSync(lock);
85
+ writeFileSync(`${lock}/pid`, String(process.pid));
86
+ break;
87
+ }
88
+ catch (error) {
89
+ if (error.code !== "EEXIST")
90
+ throw error;
91
+ let stale = false;
92
+ try {
93
+ const owner = Number(readFileSync(`${lock}/pid`, "utf8"));
94
+ stale = !Number.isFinite(owner) || !pidAlive(owner) || Date.now() - statSync(lock).mtimeMs > STALE_LOCK_MS;
95
+ }
96
+ catch {
97
+ // pid file not written yet (owner is between mkdir and writeFile) or the lock was just released
98
+ const info = statSync(lock, { throwIfNoEntry: false });
99
+ if (!info)
100
+ continue;
101
+ stale = Date.now() - info.mtimeMs > 2_000;
102
+ }
103
+ if (stale) {
104
+ rmSync(lock, { recursive: true, force: true });
105
+ continue;
106
+ }
107
+ if (Date.now() - started > resolved.lockTimeoutMs)
108
+ throw new MeshyLedgerError("LOCK_TIMEOUT", `Meshy ledger lock ${lock} is held by another process.`);
109
+ sleepSync(50 + Math.floor(Math.random() * 100));
110
+ }
111
+ }
112
+ try {
113
+ return fn();
114
+ }
115
+ finally {
116
+ rmSync(lock, { recursive: true, force: true });
117
+ }
118
+ }
119
+ export function readMeshyLedger(options = {}) {
120
+ const { ledgerPath } = resolveOptions(options);
121
+ if (!existsSync(ledgerPath))
122
+ return [];
123
+ return readFileSync(ledgerPath, "utf8")
124
+ .split("\n")
125
+ .filter(Boolean)
126
+ .map((line) => JSON.parse(line));
127
+ }
128
+ /** Latest record per reservation id wins (fields merge). failed counts 0; reserved/unconfirmed/ok count actual ?? est. */
129
+ export function meshyLedgerTotals(records) {
130
+ const byRid = new Map();
131
+ for (const record of records)
132
+ byRid.set(record.rid, { ...(byRid.get(record.rid) ?? {}), ...record });
133
+ let spent = 0;
134
+ let unconfirmed = 0;
135
+ const byGame = {};
136
+ const unconfirmedRids = [];
137
+ for (const record of byRid.values()) {
138
+ const cost = record.status === "failed" ? 0 : record.actual ?? record.est ?? 0;
139
+ spent += cost;
140
+ if (record.game)
141
+ byGame[record.game] = (byGame[record.game] ?? 0) + cost;
142
+ if (record.status === "unconfirmed") {
143
+ unconfirmed += cost;
144
+ unconfirmedRids.push(record.rid);
145
+ }
146
+ }
147
+ return { spent, unconfirmed, byGame, unconfirmedRids };
148
+ }
149
+ /** Reserve credits before a paid call. Throws MeshyLedgerError (CAP_GLOBAL / CAP_GAME) without writing when over a cap. */
150
+ export function reserveMeshyCredits(input, options = {}) {
151
+ const resolved = resolveOptions(options);
152
+ const game = assertGameTag(input.game);
153
+ const est = input.est ?? MESHY_CREDIT_ESTIMATES[input.op];
154
+ if (est === undefined || !Number.isFinite(est) || est < 0)
155
+ throw new MeshyLedgerError("BAD_RECORD", `No credit estimate for op "${input.op}"; pass an explicit estimate.`);
156
+ if (!Number.isFinite(input.cap) || input.cap <= 0)
157
+ throw new MeshyLedgerError("BAD_RECORD", "A positive per-game cap is required.");
158
+ return withLock(resolved, () => {
159
+ const totals = meshyLedgerTotals(readMeshyLedger(resolved));
160
+ const gameSpent = totals.byGame[game] ?? 0;
161
+ if (totals.spent + est > resolved.globalCap) {
162
+ throw new MeshyLedgerError("CAP_GLOBAL", `REFUSED: global cap ${resolved.globalCap} would be exceeded (spent ${totals.spent}, need ${est}).`);
163
+ }
164
+ if (gameSpent + est > input.cap) {
165
+ throw new MeshyLedgerError("CAP_GAME", `REFUSED: ${game} cap ${input.cap} would be exceeded (spent ${gameSpent}, need ${est}).`);
166
+ }
167
+ const rid = `${resolved.now().getTime()}-${Math.random().toString(36).slice(2, 8)}`;
168
+ const record = { ts: resolved.now().toISOString(), rid, game, op: input.op, est, status: "reserved" };
169
+ appendFileSync(resolved.ledgerPath, JSON.stringify(record) + "\n");
170
+ return rid;
171
+ });
172
+ }
173
+ const ALLOWED = {
174
+ reserved: ["ok", "failed", "unconfirmed"],
175
+ unconfirmed: ["ok", "failed", "unconfirmed"],
176
+ ok: ["ok"],
177
+ failed: ["failed"]
178
+ };
179
+ /** Settle (or later reconcile) a reservation. `failed` is final; `ok` only accepts a corrected actual. */
180
+ export function settleMeshyCredits(rid, input, options = {}) {
181
+ const resolved = resolveOptions(options);
182
+ return withLock(resolved, () => {
183
+ const records = readMeshyLedger(resolved).filter((record) => record.rid === rid);
184
+ if (records.length === 0)
185
+ throw new MeshyLedgerError("UNKNOWN_RID", `Unknown reservation ${rid}.`);
186
+ const current = records.reduce((merged, record) => ({ ...merged, ...record }), records[0]);
187
+ if (!ALLOWED[current.status].includes(input.status)) {
188
+ throw new MeshyLedgerError("BAD_TRANSITION", `Reservation ${rid} is ${current.status}; it cannot become ${input.status}.`);
189
+ }
190
+ const next = {
191
+ ts: resolved.now().toISOString(),
192
+ rid,
193
+ status: input.status,
194
+ ...(input.task_id ? { task_id: input.task_id } : {}),
195
+ ...(input.actual !== undefined ? { actual: input.actual } : {}),
196
+ ...(input.note ? { note: input.note } : {})
197
+ };
198
+ appendFileSync(resolved.ledgerPath, JSON.stringify(next) + "\n");
199
+ return { ...current, ...next };
200
+ });
201
+ }
202
+ /**
203
+ * Decide how a finished Meshy call settles. A rate limit or timeout without a confirmed result is NOT a failure:
204
+ * the task may already be charged, so it stays `unconfirmed` (counted) until a `get` confirms it.
205
+ */
206
+ export function classifyMeshyOutcome(outcome) {
207
+ const taskStatus = outcome.taskStatus?.toUpperCase();
208
+ if (taskStatus === "FAILED" || taskStatus === "CANCELED")
209
+ return { status: "failed", task_id: outcome.taskId, note: `task ${taskStatus}` };
210
+ if (taskStatus === "SUCCEEDED")
211
+ return { status: "ok", task_id: outcome.taskId };
212
+ if (outcome.exitCode === 0)
213
+ return { status: "ok", task_id: outcome.taskId };
214
+ if (outcome.taskId)
215
+ return { status: "unconfirmed", task_id: outcome.taskId, note: `exit ${outcome.exitCode}; task exists, resume with get before paying again` };
216
+ if ([3, 4, 9].includes(outcome.exitCode))
217
+ return { status: "failed", note: `exit ${outcome.exitCode}: rejected before a task was created` };
218
+ return { status: "unconfirmed", note: `exit ${outcome.exitCode}: no task id seen (rate limit or timeout); verify before treating as failed` };
219
+ }
220
+ export function summarizeMeshyLedger(options = {}) {
221
+ const resolved = resolveOptions(options);
222
+ const totals = meshyLedgerTotals(readMeshyLedger(resolved));
223
+ return { globalCap: resolved.globalCap, spent: totals.spent, left: resolved.globalCap - totals.spent, unconfirmed: totals.unconfirmed, unconfirmedRids: totals.unconfirmedRids, byGame: totals.byGame };
224
+ }
225
+ function flag(argv, name) {
226
+ const index = argv.indexOf(name);
227
+ const value = index >= 0 ? argv[index + 1] : undefined;
228
+ return value && !value.startsWith("--") ? value : undefined;
229
+ }
230
+ const LEDGER_USAGE = "aura3d meshy ledger status|reserve|settle|reconcile|list [--ledger path] [--global-cap N]\n" +
231
+ " reserve --game <tag> --op preview|refine|remesh|rigging|animate|retexture [--est N] --cap N (prints the reservation id)\n" +
232
+ " settle --rid <id> --status ok|failed|unconfirmed [--task-id T] [--actual N] [--note text]\n" +
233
+ " settle --rid <id> --exit-code N [--task-id T] [--task-status SUCCEEDED|FAILED|...] (classified: a rate limit stays unconfirmed)\n" +
234
+ " reconcile --rid <id> --status ok|failed [--task-id T] [--actual N]\n" +
235
+ " list [--game <tag>]";
236
+ export async function meshyLedgerCommand(argv, io) {
237
+ const sub = argv[0];
238
+ const capFlag = flag(argv, "--global-cap");
239
+ const options = {
240
+ ...(flag(argv, "--ledger") ? { ledgerPath: resolve(io.cwd, flag(argv, "--ledger")) } : {}),
241
+ ...(capFlag ? { globalCap: Number(capFlag) } : {})
242
+ };
243
+ try {
244
+ if (sub === "status" || sub === undefined) {
245
+ io.stdout(JSON.stringify(summarizeMeshyLedger(options)));
246
+ return 0;
247
+ }
248
+ if (sub === "reserve") {
249
+ const game = flag(argv, "--game");
250
+ const op = flag(argv, "--op");
251
+ const cap = Number(flag(argv, "--cap"));
252
+ if (!game || !op || !Number.isFinite(cap)) {
253
+ io.stderr(LEDGER_USAGE);
254
+ return 2;
255
+ }
256
+ const est = flag(argv, "--est");
257
+ io.stdout(reserveMeshyCredits({ game, op, cap, ...(est ? { est: Number(est) } : {}) }, options));
258
+ return 0;
259
+ }
260
+ if (sub === "settle" || sub === "reconcile") {
261
+ const rid = flag(argv, "--rid");
262
+ if (!rid) {
263
+ io.stderr(LEDGER_USAGE);
264
+ return 2;
265
+ }
266
+ const taskId = flag(argv, "--task-id");
267
+ const exitCode = flag(argv, "--exit-code");
268
+ const status = flag(argv, "--status");
269
+ let input;
270
+ if (sub === "settle" && exitCode !== undefined) {
271
+ input = classifyMeshyOutcome({ exitCode: Number(exitCode), ...(taskId ? { taskId } : {}), ...(flag(argv, "--task-status") ? { taskStatus: flag(argv, "--task-status") } : {}) });
272
+ }
273
+ else if (status === "ok" || status === "failed" || status === "unconfirmed") {
274
+ if (sub === "reconcile" && status === "unconfirmed") {
275
+ io.stderr("reconcile settles an unconfirmed reservation to ok or failed.");
276
+ return 2;
277
+ }
278
+ input = { status, ...(taskId ? { task_id: taskId } : {}), ...(flag(argv, "--actual") ? { actual: Number(flag(argv, "--actual")) } : {}), ...(flag(argv, "--note") ? { note: flag(argv, "--note") } : {}) };
279
+ }
280
+ else {
281
+ io.stderr(LEDGER_USAGE);
282
+ return 2;
283
+ }
284
+ io.stdout(JSON.stringify(settleMeshyCredits(rid, input, options)));
285
+ return 0;
286
+ }
287
+ if (sub === "list") {
288
+ const game = flag(argv, "--game");
289
+ const merged = new Map();
290
+ for (const record of readMeshyLedger(options))
291
+ merged.set(record.rid, { ...(merged.get(record.rid) ?? {}), ...record });
292
+ for (const record of merged.values())
293
+ if (!game || record.game === game)
294
+ io.stdout(JSON.stringify(record));
295
+ return 0;
296
+ }
297
+ io.stderr(LEDGER_USAGE);
298
+ return 2;
299
+ }
300
+ catch (error) {
301
+ if (error instanceof MeshyLedgerError) {
302
+ io.stderr(error.message);
303
+ return error.code === "CAP_GLOBAL" || error.code === "CAP_GAME" ? 3 : 1;
304
+ }
305
+ throw error;
306
+ }
307
+ }
308
+ //# sourceMappingURL=meshyLedger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meshyLedger.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/meshyLedger.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/prd05/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoKH,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/prd05/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwKH,OAAO,EAAE,CAAC"}
@@ -9,6 +9,7 @@ import { registerCliCommand, registerCodemod } from "../../contracts/commands.js
9
9
  import { admitAsset, admitAssetMeasured } from "./admit.js";
10
10
  import { dispatchLookdevRun } from "./lookdev.js";
11
11
  import { optimizeAssetsVerb } from "./optimize.js";
12
+ import { optimizeFileVerb } from "../assets/optimizeVerb.js";
12
13
  import { reviewAsset } from "./review.js";
13
14
  import { assetsLibraryVerb } from "./library.js";
14
15
  import { assetsPrune } from "./prune.js";
@@ -120,8 +121,13 @@ registerCliCommand({
120
121
  name: "assets optimize",
121
122
  owner: "prd05",
122
123
  summary: "Optimize assets through the §6.3 step pipeline (tools/asset-optimize).",
123
- usage: "aura3d assets optimize <id...> [--profile <id>] [--geometry meshopt|draco|none] [--dry-run] [--allow-local-small] [--ktx <path>] [--report <file>] [--out-dir <dir>] [--no-manifest]",
124
- run: async (argv, io) => optimizeAssetsVerb({ projectDir: io.cwd, argv, stdout: io.stdout, stderr: io.stderr }),
124
+ usage: "aura3d assets optimize --file in.glb --out out.glb [--role hero|vehicle|character|prop|background] [--max-verts N] [--tex N] [--no-simplify] [--meshopt] [--json] | aura3d assets optimize <id...> [--profile <id>] [--geometry meshopt|draco|none] [--dry-run] [--allow-local-small] [--ktx <path>] [--report <file>] [--out-dir <dir>] [--no-manifest]",
125
+ run: async (argv, io) => {
126
+ // Direct-file mode: `assets optimize --file in.glb --out out.glb [--role ...]` (no manifest, no admission pipeline).
127
+ if (readFlag(argv, "--file") !== undefined)
128
+ return optimizeFileVerb(argv, io);
129
+ return optimizeAssetsVerb({ projectDir: io.cwd, argv, stdout: io.stdout, stderr: io.stderr });
130
+ },
125
131
  });
126
132
  registerCliCommand({
127
133
  name: "assets lookdev",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/prd05/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/aura3d-cli/src/commands/prd05/index.ts"],"names":[],"mappings":"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"}
@@ -15,5 +15,6 @@ import "./prd11/index.js";
15
15
  import "./prd13/index.js";
16
16
  import "./prd14/index.js";
17
17
  import "./prd15/index.js";
18
+ import "./assets/index.js";
18
19
  export {};
19
20
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,CAAC"}
@@ -15,5 +15,6 @@ import "./prd11/index.js";
15
15
  import "./prd13/index.js";
16
16
  import "./prd14/index.js";
17
17
  import "./prd15/index.js";
18
+ import "./assets/index.js";
18
19
  export {};
19
20
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/commands/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aura3d/cli",
3
- "version": "4.0.8",
3
+ "version": "4.1.1",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "aura3d": "dist/cli.js",
@@ -28,10 +28,10 @@
28
28
  "types": "./dist/index.d.ts",
29
29
  "dependencies": {
30
30
  "typescript": "^5.8.3",
31
- "@aura3d/asset-index": "4.0.8",
32
- "@aura3d/audio": "4.0.8",
33
- "@aura3d/rendering": "4.0.8",
34
- "create-aura3d": "4.0.8"
31
+ "@aura3d/asset-index": "4.1.1",
32
+ "@aura3d/audio": "4.1.1",
33
+ "@aura3d/rendering": "4.1.1",
34
+ "create-aura3d": "4.1.1"
35
35
  },
36
36
  "description": "Bring real GLB/glTF assets into Aura3D browser apps with typed references, provenance, catalog search, validation, screenshots, and deploy checks.",
37
37
  "keywords": [
@@ -78,23 +78,19 @@ lighting you evaluate materials and silhouettes against.
78
78
 
79
79
  `--source` scans `src` for raw ids, URLs, and loader code, and lists
80
80
  `typedAssetUsages`. Add `--no-placeholders --require-license` for anything
81
- public. Refresh stale manifest bounds by re-adding the file. Ensure every
82
- admitted entry in `aura.assets.json` and `src/aura-assets.ts` carries a valid
83
- 64-character `sha256-...` `hash` and `public/aura-assets/...` path for clean
84
- look and silhouette so `createAssetProvenance(node.asset).source === "typed-aura-assets-manifest"`
85
- preserves PBR lighting, palette, contrast, and reflection in the production
86
- glTF bridge. Never omit `hash` in custom `defineAuraAssets(...)` /
87
- `defineAssets` declarations (keeps look and shadow intact) and never place
88
- unhashed duplicate GLBs in route-local `apps/<route>/public/aura-assets/`
89
- that collide with root `public/aura-assets/` (keeps composition readable).
81
+ public. Refresh stale manifest bounds by re-adding the file. Every admitted
82
+ entry in `aura.assets.json` and `src/aura-assets.ts` needs a valid 64-character
83
+ `sha256-...` `hash` and a `public/aura-assets/...` path: the production glTF
84
+ bridge only accepts `createAssetProvenance(node.asset).source ===
85
+ "typed-aura-assets-manifest"`. Never omit `hash` in `defineAuraAssets(...)`
86
+ and never place unhashed duplicate GLBs in route-local
87
+ `apps/<route>/public/aura-assets/` that collide with root `public/aura-assets/`.
90
88
  7. Use the key as generated. Every character, athlete, enemy, vehicle, weapon,
91
- tree, and landmark must mount a real 3D GLB via `model(assets.<name>,
92
- { targetMaxDimension, role })` for a readable silhouette — use `targetHeight`
93
- only for upright humanoids and `targetMaxDimension` for vehicles, rackets,
94
- paddles, weapons, and wide props so aspect ratios never stretch vertically;
95
- drive rigged characters (`skins > 0`) with `handle.setAnimation({ clip,
96
- loop: true, speed })` so limbs articulate under the key light and shadow; and
97
- never build stick-figure humans or box cars from primitives.
89
+ tree, and landmark mounts a real 3D GLB via `model(assets.<name>,
90
+ { targetMaxDimension, role })`: `targetHeight` only for upright humanoids,
91
+ `targetMaxDimension` for vehicles, rackets, weapons, and wide props. Drive
92
+ rigged characters (`skins > 0`) with `handle.setAnimation({ clip, loop: true,
93
+ speed })`, and never build stick-figure humans or box cars from primitives.
98
94
 
99
95
  ```ts
100
96
  import { createAuraApp, groundedRenderedAssetPlacement, looks, model, scene } from "@aura3d/engine";
@@ -109,7 +105,15 @@ lighting you evaluate materials and silhouettes against.
109
105
  });
110
106
  ```
111
107
 
112
- 8. Hand off: fighters and games to `aura3d-browser-game`
108
+ 8. Games and examples without a project manifest declare models with
109
+ `defineModelAssets` (same-origin URL, `sha256`, license; `?models=0` falls
110
+ back to a procedural stand-in) and never use an http(s) URL: the production
111
+ bridge refuses it and the scene draws nothing. Admit generated models in an
112
+ isolated project: `assets import-meshy <dir> --into <assets-dir> --prefix
113
+ <game> --name <role>`. Never run `import-meshy`, `validate` or `typegen` from
114
+ the repo root while other work is open: they rewrite `aura.assets.json`,
115
+ `src/aura-assets.ts` (a 100k-line diff) and `public/aura-assets/*`.
116
+ 9. Hand off: fighters and games to `aura3d-browser-game`
113
117
  (`assets validate-game`), rigs and clips to `aura3d-character-animation`
114
118
  (`assets validate-animation`), release checks to `aura3d-evidence-review`.
115
119
 
@@ -122,10 +126,9 @@ lighting you evaluate materials and silhouettes against.
122
126
  - bounds are extreme, pivot is bad, or orientation is unknown and public APIs
123
127
  cannot correct it;
124
128
  - the hash duplicates another asset without an explanation;
125
- - a generated Meshy GLB has not been decimated and compressed before admission
126
- (`> 20,000` vertices, `> 2 MB`, 32-bit indices instead of 16-bit `Uint16Array`
127
- with `byteStride === 0`, or `> 1024x1024` textures that stall glTF parsing and
128
- exhaust GPU memory across the scene's look, lighting, and atmosphere);
129
+ - a generated Meshy GLB has not been through `assets optimize --file in.glb --out
130
+ out.glb --role prop` (role budgets: prop 6k, character 30k, hero or vehicle 40k
131
+ vertices; textures capped at 1024 to 2048 px; 16-bit indices);
129
132
  - it is placeholder-like, or only a generated thumbnail proves it is readable.
130
133
 
131
134
  ## Stop and report
@@ -134,13 +137,12 @@ lighting you evaluate materials and silhouettes against.
134
137
  reject list: stop, list the query, profile, and rejection reasons, and offer
135
138
  two options: a user-supplied licensed file, or Meshy generation (load
136
139
  `meshy-cli`, dry run first). Do not model the subject from primitives.
137
- - Search prints a catalog fetch warning (for example an HTTP 404 from the
138
- index): report it verbatim, label asset-dependent work `blocked`, and do not
139
- treat fallback deep-links as auto-pullable.
140
+ - Search prints a catalog fetch warning (for example an HTTP 404): report it
141
+ verbatim, label asset-dependent work `blocked`, and never treat fallback
142
+ deep-links as auto-pullable.
140
143
  - `assets validate --release` fails on provenance: keep the route `prototype`
141
144
  until durable evidence is added; never weaken the check.
142
- - A needed key is absent from `src/aura-assets.ts` after typegen: stop and fix
143
- the admission.
145
+ - A needed key is absent from `src/aura-assets.ts` after typegen: fix the admission.
144
146
 
145
147
  ## References
146
148
 
@@ -69,11 +69,11 @@ Genre → recipe row (full table: `../aura3d-art-direction/references/look-recip
69
69
 
70
70
  2. The look supplies sky light, key shadow, fog, and grade — never stack extra
71
71
  `lights.studio()` / `lights.directional()` on top, pass `{ fogDensityScale: 0,
72
- exposureEv: -0.1 }` to `looks.preset(...)` and
73
- `qualityRebuild: { flags: ["game", "-compiler", "-post", "-vfxFog"] }` on fast
74
- arcade routes so contrast and frame pacing stay crisp, and never set
75
- `emissive: "#ffffff"` on instanced pool materials (`instanceColors` multiply
76
- `u_baseColor`, not `u_emissiveColor`).
72
+ exposureEv: -0.1 }` to `looks.preset(...)` if fog whitewashes a fast route,
73
+ and never pin post-processing or the compiler off with a `qualityRebuild` flag
74
+ list (the engine defaults are right; install the safety net instead), and never
75
+ set `emissive: "#ffffff"` on instanced pool materials (`instanceColors`
76
+ multiply `u_baseColor`, not `u_emissiveColor`).
77
77
  3. Mount typed 3D GLBs for every character, athlete, enemy, vehicle, weapon,
78
78
  tree, and landmark (`model(assets.<name>, { targetMaxDimension, role })`,
79
79
  emissive 3–5 on pickups, and explicit `material: material.pbr({ color })` on
@@ -85,8 +85,8 @@ Genre → recipe row (full table: `../aura3d-art-direction/references/look-recip
85
85
  instead of sliding rigid statues. Never build stick-figure humans or box cars
86
86
  from primitives; ground `model()` actors (`minY = 0`) at `y + sy / 2` of
87
87
  centered platforms; wind custom `primitives.mesh` triangles CCW from `+Y`; and
88
- decimate/compress Meshy GLBs (`<= 20,000` vertices, `<= 2 MB`, 16-bit indices,
89
- `<= 1024x1024` textures, valid 64-char `sha256-...` `hash` for clean look).
88
+ run Meshy GLBs through `assets optimize --role` before admission and mount
89
+ them with a valid 64-char `sha256-...` `hash` (`defineModelAssets`).
90
90
  4. Camera state drives `app.camera` every frame — size `html, body, #app, canvas`
91
91
  to `100vw × 100vh` (`position: fixed; inset: 0`), extend the 3D ground apron
92
92
  deep in `+Z`/`-Z` so the bottom frame is never a black void, disable
@@ -117,13 +117,16 @@ Genre → recipe row (full table: `../aura3d-art-direction/references/look-recip
117
117
  `assets certify-game-geometry --asset track --category racing`.
118
118
  9. Runtime evidence: pause, step one frame, then `game.evidence` over input,
119
119
  bodies, events, HUD, and look state — see `aura3d-evidence-review` (one link).
120
+ 10. Build the shell from the kits, not by hand: `@aura3d/engine/game` (HUD, touch,
121
+ session, sound), `installQaHooks` + `createFixedStepLoop` for deterministic
122
+ replay, `createCueBank` for sound, `installSafetyNet` for `?diag=1` and
123
+ black-frame self-heal — [kits and hooks](references/kits-and-hooks.md).
120
124
 
121
125
  ## Look-dev loop
122
126
 
123
- Run the `aura3d look capture` → judge → iterate loop from
124
- `aura3d-art-direction`: lint first (`aura3d look lint`), then the weakest
125
- rubric category; one change per round until every category reads 7+, 6
126
- rounds, or 2 flat rounds.
127
+ Run the `aura3d look capture` → judge → iterate loop from `aura3d-art-direction`:
128
+ lint first (`aura3d look lint`), then the weakest rubric category; one change
129
+ per round until every category reads 7+, 6 rounds, or 2 flat rounds.
127
130
 
128
131
  ## Stop and report
129
132
 
@@ -134,8 +137,7 @@ rounds, or 2 flat rounds.
134
137
  - The primary player, vehicle, or world is a primitive stand-in: `prototype`.
135
138
  - `assets validate-game` crashes or fails: report the exact message, label
136
139
  `blocked` for public claims.
137
- - A kit is missing a needed rule (fail state, collision semantics, path
138
- alignment): write it route-local, say so, file a library gap.
140
+ - A kit is missing a needed rule: write it route-local, say so, file a gap.
139
141
  - Benchmark mode without `look capture`: build, stop, label `prototype`.
140
142
 
141
143
  ## References
@@ -147,3 +149,4 @@ rounds, or 2 flat rounds.
147
149
  - [Game example standards](https://github.com/auraoneai/aura3d/blob/main/docs/agents/game-example-standards.md)
148
150
  - [Game runtime API](https://github.com/auraoneai/aura3d/blob/main/docs/api/game-runtime.md)
149
151
  - [Genre looks in the frame](references/genre-looks.md)
152
+ - [Kits and hooks (4.1)](references/kits-and-hooks.md)