@bitmagic/cli 0.1.59-dev.1 → 0.1.59-dev.10

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 (80) hide show
  1. package/README.md +146 -2
  2. package/dist/assets/file-kind.d.ts +8 -0
  3. package/dist/assets/file-kind.js +24 -0
  4. package/dist/assets/file-kind.js.map +1 -1
  5. package/dist/assets/materials.d.ts +165 -0
  6. package/dist/assets/materials.js +395 -0
  7. package/dist/assets/materials.js.map +1 -0
  8. package/dist/assets/vxl-summary.js +12 -5
  9. package/dist/assets/vxl-summary.js.map +1 -1
  10. package/dist/cli.d.ts +1 -0
  11. package/dist/cli.js +2 -0
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/assets.d.ts +25 -0
  14. package/dist/commands/assets.js +245 -2
  15. package/dist/commands/assets.js.map +1 -1
  16. package/dist/commands/forge.d.ts +2 -2
  17. package/dist/commands/forge.js +40 -17
  18. package/dist/commands/forge.js.map +1 -1
  19. package/dist/commands/generate.d.ts +29 -0
  20. package/dist/commands/generate.js +139 -3
  21. package/dist/commands/generate.js.map +1 -1
  22. package/dist/commands/theme.d.ts +3 -0
  23. package/dist/commands/theme.js +201 -0
  24. package/dist/commands/theme.js.map +1 -0
  25. package/dist/editor/animation-preview-page.d.ts +6 -0
  26. package/dist/editor/animation-preview-page.js +123 -0
  27. package/dist/editor/animation-preview-page.js.map +1 -0
  28. package/dist/editor/journal.d.ts +25 -0
  29. package/dist/editor/journal.js +8 -0
  30. package/dist/editor/journal.js.map +1 -1
  31. package/dist/editor/motion-panel.d.ts +20 -0
  32. package/dist/editor/motion-panel.js +432 -0
  33. package/dist/editor/motion-panel.js.map +1 -0
  34. package/dist/editor/motion-sink.d.ts +35 -0
  35. package/dist/editor/motion-sink.js +70 -0
  36. package/dist/editor/motion-sink.js.map +1 -0
  37. package/dist/editor/server.js +126 -0
  38. package/dist/editor/server.js.map +1 -1
  39. package/dist/editor/shell-page.js +16 -1
  40. package/dist/editor/shell-page.js.map +1 -1
  41. package/dist/forge/voxelize-session.d.ts +11 -0
  42. package/dist/forge/voxelize-session.js +23 -1
  43. package/dist/forge/voxelize-session.js.map +1 -1
  44. package/dist/generate/animation-from-video.d.ts +52 -0
  45. package/dist/generate/animation-from-video.js +152 -0
  46. package/dist/generate/animation-from-video.js.map +1 -0
  47. package/dist/project/jobs.d.ts +1 -1
  48. package/dist/project/jobs.js.map +1 -1
  49. package/dist/scaffold/project-files.d.ts +1 -0
  50. package/dist/scaffold/project-files.js +47 -1
  51. package/dist/scaffold/project-files.js.map +1 -1
  52. package/dist/scaffold/project.js +2 -1
  53. package/dist/scaffold/project.js.map +1 -1
  54. package/dist/theme/hud-theme-catalog.d.ts +236 -0
  55. package/dist/theme/hud-theme-catalog.js +386 -0
  56. package/dist/theme/hud-theme-catalog.js.map +1 -0
  57. package/dist/theme/theme-color-math.d.ts +21 -0
  58. package/dist/theme/theme-color-math.js +99 -0
  59. package/dist/theme/theme-color-math.js.map +1 -0
  60. package/dist/theme/theme-io.d.ts +49 -0
  61. package/dist/theme/theme-io.js +190 -0
  62. package/dist/theme/theme-io.js.map +1 -0
  63. package/dist/theme/theme-merge.d.ts +36 -0
  64. package/dist/theme/theme-merge.js +81 -0
  65. package/dist/theme/theme-merge.js.map +1 -0
  66. package/dist/theme/theme-report.d.ts +28 -0
  67. package/dist/theme/theme-report.js +142 -0
  68. package/dist/theme/theme-report.js.map +1 -0
  69. package/dist/theme/theme-stored.d.ts +21 -0
  70. package/dist/theme/theme-stored.js +50 -0
  71. package/dist/theme/theme-stored.js.map +1 -0
  72. package/dist/theme/theme-validate.d.ts +41 -0
  73. package/dist/theme/theme-validate.js +406 -0
  74. package/dist/theme/theme-validate.js.map +1 -0
  75. package/dist/verify/classify.js +19 -0
  76. package/dist/verify/classify.js.map +1 -1
  77. package/dist/verify/hud-theme.d.ts +55 -0
  78. package/dist/verify/hud-theme.js +70 -0
  79. package/dist/verify/hud-theme.js.map +1 -0
  80. package/package.json +4 -4
@@ -0,0 +1,395 @@
1
+ /**
2
+ * Read and set what an asset's voxels are MADE OF.
3
+ *
4
+ * A voxel asset's colours say nothing about its materials, so a generated sword's
5
+ * steel blade shades exactly like its leather grip. `bitmagic assets materials`
6
+ * closes that gap in two steps, and the split is the whole design:
7
+ *
8
+ * bitmagic assets materials <id> → print what the asset looks like
9
+ * bitmagic assets materials <id> --set f → say what those colours are
10
+ *
11
+ * Nothing here classifies anything, and the CLI deliberately does not try. A pro
12
+ * project has no language model of its own — `buildCliForgeDeps` hands the forge a
13
+ * `model` that throws on purpose, because the scene design runs on api-server —
14
+ * but it does have one sitting right there: the creator's own coding agent, which
15
+ * already knows what it asked for, has the world.json and the game's art
16
+ * direction in context, and costs the project nothing. So the CLI's job is to
17
+ * print a readable description and accept an answer back.
18
+ *
19
+ * That makes this lane's classifier better informed than a server-side one, not
20
+ * worse: it is the same agent that wrote the prompt.
21
+ *
22
+ * Writes under the SAME asset id, so every placed instance changes with it — the
23
+ * upgrade-in-place contract `generate prop` and `assets revoxelize` both make.
24
+ */
25
+ import * as fs from 'fs';
26
+ import * as path from 'path';
27
+ import { CliError } from '../errors.js';
28
+ import { VOXELIZE_TIMEOUT_MS, withVoxelizeSession } from '../forge/voxelize-session.js';
29
+ import { applyModificationsToWorld } from '../forge/apply-modifications.js';
30
+ import { projectWorldJsonPath } from '../forge/run-pipeline.js';
31
+ import { apiPost } from '../http/client.js';
32
+ import { uploadProjectFile } from '../http/signed-upload.js';
33
+ import { isJsonObject, readWorldJson } from '../project/world-json.js';
34
+ import { summarizeVxl } from './vxl-summary.js';
35
+ /**
36
+ * Whether this project's vendored engine can answer these messages at all.
37
+ *
38
+ * A capability PROBE, not a version compare, exactly as `engineSupportsVxlMaster`
39
+ * does and for the reason its own doc gives: an engine with no handler never
40
+ * replies, so the request would stall for the full ten-minute bake timeout and
41
+ * then report a timeout, with nothing pointing at the real cause.
42
+ */
43
+ export function engineSupportsMaterialClasses(projectRoot) {
44
+ return fs.existsSync(path.join(projectRoot, 'engine', 'engine', 'template', 'VxlMaterialAssetHandler.ts'));
45
+ }
46
+ /**
47
+ * The asset to work on, refused before the browser starts if it cannot be.
48
+ *
49
+ * Only a `vxl` asset has voxels to classify. A GLB kept as a mesh, an image, a
50
+ * sound: none of them have a palette, and saying so up front costs nothing while
51
+ * a browser launch costs seconds.
52
+ */
53
+ export function findVoxelAsset(world, assetId) {
54
+ const assets = Array.isArray(world.assets) ? world.assets : [];
55
+ const asset = assets.find((item) => isJsonObject(item) && item.id === assetId);
56
+ if (!isJsonObject(asset)) {
57
+ throw new CliError(`No asset with id "${assetId}" in this project's world.json. `
58
+ + 'Run `bitmagic assets list` to see the ids.');
59
+ }
60
+ const name = typeof asset.name === 'string' ? asset.name : assetId;
61
+ const url = asset.url;
62
+ if (asset.type !== 'vxl' || typeof url !== 'string' || url === '') {
63
+ throw new CliError(`"${name}" is not a voxel asset, so it has no voxels to give materials to. `
64
+ + 'Material classes apply to `vxl` assets — those produced by `bitmagic generate prop`, '
65
+ + '`generate model`, or `assets add <file.glb>` without `--keep-glb`.');
66
+ }
67
+ return { asset, url, name };
68
+ }
69
+ /**
70
+ * The text this asset was generated from, if it records any.
71
+ *
72
+ * The single most valuable signal a classifier has — it names the materials
73
+ * outright — and also what the plausibility guard checks a precious-material
74
+ * claim against. Absent for an asset added from a file, which is exactly the case
75
+ * where classifying on colour alone would be guessing.
76
+ */
77
+ export function assetPromptText(asset) {
78
+ const production = asset.production;
79
+ if (isJsonObject(production) && typeof production.prompt === 'string' && production.prompt !== '') {
80
+ return production.prompt;
81
+ }
82
+ if (typeof asset.description === 'string' && asset.description !== '')
83
+ return asset.description;
84
+ return undefined;
85
+ }
86
+ /** Placed instances pointing at this asset — the blast radius, reported not assumed. */
87
+ function countInstances(world, assetId) {
88
+ const objects = Array.isArray(world.environmentObjects) ? world.environmentObjects : [];
89
+ return objects.filter((item) => isJsonObject(item) && item.assetId === assetId).length;
90
+ }
91
+ function assertEngineSupport(context) {
92
+ if (engineSupportsMaterialClasses(context.root))
93
+ return;
94
+ throw new CliError('This project\'s vendored engine does not know about voxel material classes. '
95
+ + 'Run `bitmagic upgrade` to get a newer engine, then try again. world.json is unchanged.');
96
+ }
97
+ /**
98
+ * Ask the engine what the asset is made of.
99
+ *
100
+ * Reads only — no upload, no world.json write, nothing spent. Safe to run as often
101
+ * as you like, which matters because it is the step an agent runs first.
102
+ */
103
+ export async function readAssetMaterials(options) {
104
+ const { context, environment, token, assetId, log } = options;
105
+ assertEngineSupport(context);
106
+ const world = readWorldJson(projectWorldJsonPath(context.root));
107
+ const { asset, url, name } = findVoxelAsset(world, assetId);
108
+ const runSession = options.session ?? withVoxelizeSession;
109
+ const read = await runSession({
110
+ context, environment, token, log, subject: `"${name}"`,
111
+ retryHint: 'Nothing was written — this only reads the asset, so it is safe to retry.',
112
+ }, (session) => readSignatureInSession(session, { assetId, name, url, log }));
113
+ const promptText = assetPromptText(asset);
114
+ return {
115
+ assetId,
116
+ assetName: name,
117
+ ...read,
118
+ ...(promptText === undefined ? {} : { promptText }),
119
+ };
120
+ }
121
+ /** The one READ message, inside a session someone else opened. */
122
+ async function readSignatureInSession({ host, port }, target) {
123
+ const { assetId, name, url, log } = target;
124
+ log(`Reading "${name}"'s colours…`);
125
+ const result = await host.transport.sendAndWait({
126
+ type: 'READ_VXL_MATERIAL_SIGNATURE',
127
+ requestId: `materials-read-${assetId}-${port}`,
128
+ vxlUrl: url,
129
+ }, 'READ_VXL_MATERIAL_SIGNATURE_RESULT', VOXELIZE_TIMEOUT_MS, { maxRetries: 1 });
130
+ if (!result)
131
+ throw new CliError(`Reading "${name}" timed out.`);
132
+ if (result.success === false) {
133
+ const reason = typeof result.error === 'string' ? result.error : 'unknown error';
134
+ throw new CliError(`Reading "${name}" failed: ${reason}`);
135
+ }
136
+ const signature = result.signature;
137
+ if (!signature || typeof signature.hash !== 'string') {
138
+ throw new CliError(`The engine returned no material signature for "${name}".`);
139
+ }
140
+ return { signature, table: typeof result.table === 'string' ? result.table : '' };
141
+ }
142
+ /**
143
+ * Apply an assignment — or strip every class with `--clear` — and record the
144
+ * result in world.json.
145
+ *
146
+ * The engine hands back BYTES rather than uploading, the same split
147
+ * `REVOXELIZE_FROM_VXL_MASTER` uses: in a pro project the CLI owns world.json,
148
+ * and two writers on one asset thrash the reload watcher.
149
+ */
150
+ export async function setAssetMaterials(options) {
151
+ const { context, environment, token, assetId, log } = options;
152
+ assertEngineSupport(context);
153
+ const worldPath = projectWorldJsonPath(context.root);
154
+ const world = readWorldJson(worldPath);
155
+ const { asset, url, name } = findVoxelAsset(world, assetId);
156
+ const clearing = 'clear' in options;
157
+ const promptText = assetPromptText(asset);
158
+ const runSession = options.session ?? withVoxelizeSession;
159
+ const retryHint = `Nothing was written — "${name}" is unchanged, so this is safe to retry.`;
160
+ const reply = await runSession({
161
+ context, environment, token, log, subject: `"${name}"`, retryHint,
162
+ }, (session) => applyInSession(session, {
163
+ assetId, name, url, log, retryHint,
164
+ ...(promptText === undefined ? {} : { promptText }),
165
+ ...(clearing ? { clear: true } : {
166
+ assignment: {
167
+ signatureVersion: options.signatureVersion,
168
+ signatureHash: options.signatureHash,
169
+ verdicts: options.verdicts,
170
+ // 'agent' because in this lane the classifier IS the creator's own coding
171
+ // agent; nothing here decided anything.
172
+ classifier: 'agent',
173
+ },
174
+ }),
175
+ }));
176
+ return recordApplied({
177
+ options, world, worldPath, asset, assetId, name, retryHint, reply,
178
+ classifier: clearing ? 'manual' : 'agent',
179
+ });
180
+ }
181
+ /** The one APPLY message, inside a session someone else opened. */
182
+ async function applyInSession({ host, port }, target) {
183
+ const { assetId, name, url, log, retryHint } = target;
184
+ log(target.clear
185
+ ? `Removing "${name}"'s material classes…`
186
+ : `Setting "${name}"'s materials…`);
187
+ const result = await host.transport.sendAndWait({
188
+ type: 'APPLY_VXL_MATERIALS',
189
+ requestId: `materials-set-${assetId}-${port}`,
190
+ assetId,
191
+ assetName: name,
192
+ vxlUrl: url,
193
+ // The CLI uploads, so the engine returns bytes (see the doc above).
194
+ upload: false,
195
+ ...(target.clear ? { clear: true } : { assignment: target.assignment }),
196
+ ...(target.promptText === undefined ? {} : { promptText: target.promptText }),
197
+ }, 'APPLY_VXL_MATERIALS_RESULT', VOXELIZE_TIMEOUT_MS, { maxRetries: 1 });
198
+ if (!result)
199
+ throw new CliError(`Setting "${name}"'s materials timed out. ${retryHint}`);
200
+ if (result.success === false) {
201
+ const reason = typeof result.error === 'string' ? result.error : 'unknown error';
202
+ throw new CliError(`Setting "${name}"'s materials failed: ${reason}. ${retryHint}`);
203
+ }
204
+ return result;
205
+ }
206
+ /**
207
+ * After the engine answered: upload the bytes and record the result in world.json,
208
+ * or do neither when the file was left alone.
209
+ */
210
+ async function recordApplied(input) {
211
+ const { options, world, worldPath, asset, assetId, name, retryHint, reply } = input;
212
+ const { context, environment, token } = options;
213
+ const slots = Array.isArray(reply.slots) ? reply.slots.filter((s) => typeof s === 'string') : [];
214
+ const dropped = Array.isArray(reply.dropped) ? reply.dropped : [];
215
+ const baseShare = typeof reply.baseShare === 'number' ? reply.baseShare : 1;
216
+ const instanceCount = countInstances(world, assetId);
217
+ if (reply.unchanged === true) {
218
+ // Byte-identical output: no upload, no url churn, no world.json write. "Nothing
219
+ // was classified" has to be indistinguishable from "this never ran".
220
+ return {
221
+ assetId, assetName: name, slots, dropped, baseShare,
222
+ unchanged: true, instanceCount,
223
+ };
224
+ }
225
+ const raw = reply.vxlBytes;
226
+ if (!(raw instanceof Uint8Array) && !Array.isArray(raw)) {
227
+ throw new CliError(`The engine returned no voxels for "${name}". ${retryHint}`);
228
+ }
229
+ const bytes = raw instanceof Uint8Array ? raw : new Uint8Array(raw);
230
+ // Read the header BEFORE uploading, as the re-bake path does: bytes that are not
231
+ // a readable `.vxl` must never reach storage under a name the engine will later
232
+ // try to load. This also catches the one failure this command could plausibly
233
+ // introduce — a version the project's own vxl-summary does not accept.
234
+ const summary = summarizeVxl(bytes);
235
+ if (summary === null) {
236
+ throw new CliError(`The engine returned bytes that are not a readable .vxl for "${name}". ${retryHint}`);
237
+ }
238
+ const upload = await uploadProjectFile(environment, token, {
239
+ gameId: context.metadata.gameId,
240
+ filename: `${context.metadata.gameId}-${name}-materials-${Date.now()}.vxl`,
241
+ contentType: 'application/octet-stream',
242
+ bytes,
243
+ }, { fetch: options.fetchImpl ?? globalThis.fetch });
244
+ // MERGED over the existing record, never substituted for it. An asset accumulates
245
+ // authored state this command knows nothing about — `fitBox`, `collision`,
246
+ // `light`, `voxelizeSettings` — and a fresh record would discard all of it. Only
247
+ // the file and its size change: geometry, bounds and voxel size are untouched by
248
+ // a material class, so re-asserting them here could only introduce a disagreement.
249
+ const modification = {
250
+ type: 'upsertRoot',
251
+ path: ['assets'],
252
+ predicate: (item) => isJsonObject(item) && item.id === assetId,
253
+ value: {
254
+ ...asset,
255
+ url: upload.url,
256
+ size: bytes.byteLength,
257
+ // Provenance only — the classes themselves live in the `.vxl`. `--clear`
258
+ // records the absence rather than deleting the field, so "this was
259
+ // deliberately put back to plain" stays distinguishable from "never
260
+ // classified".
261
+ materials: {
262
+ classifier: input.classifier,
263
+ slots,
264
+ at: new Date().toISOString(),
265
+ ...(input.model === undefined ? {} : { model: input.model }),
266
+ },
267
+ },
268
+ };
269
+ applyModificationsToWorld(worldPath, [modification], { subject: 'The asset\'s materials' });
270
+ return {
271
+ assetId,
272
+ assetName: name,
273
+ slots,
274
+ dropped,
275
+ baseShare,
276
+ unchanged: false,
277
+ assetUrl: upload.url,
278
+ instanceCount,
279
+ };
280
+ }
281
+ /**
282
+ * Read, classify and apply in ONE browser session: what `generate prop|model` run
283
+ * on the asset they just baked, and what `assets materials --auto` runs on demand.
284
+ *
285
+ * The middle step is api-server's light model rather than the creator's coding
286
+ * agent — the same prompt that agent would be shown, answered without a round
287
+ * trip through it, so a generated sword shines before anyone has looked at it.
288
+ * `assets materials --set` still overrides whatever this decided.
289
+ *
290
+ * An empty verdict list skips the APPLY entirely: the engine would leave the
291
+ * file byte-identical anyway, and not asking is one fewer thing to time out.
292
+ */
293
+ export async function classifyAssetMaterials(options) {
294
+ const { context, environment, token, assetId, log } = options;
295
+ assertEngineSupport(context);
296
+ const worldPath = projectWorldJsonPath(context.root);
297
+ const world = readWorldJson(worldPath);
298
+ const { asset, url, name } = findVoxelAsset(world, assetId);
299
+ const promptText = assetPromptText(asset);
300
+ const retryHint = `Nothing was written — "${name}" is unchanged, so this is safe to retry.`;
301
+ const fetchImpl = options.fetchImpl ?? globalThis.fetch;
302
+ const classify = options.classify ?? ((request) => apiPost(environment, '/api/cli/v1/assets/materials/classify', token, request, { fetch: fetchImpl }));
303
+ const runSession = options.session ?? withVoxelizeSession;
304
+ const outcome = await runSession({
305
+ context, environment, token, log, subject: `"${name}"`, retryHint,
306
+ }, async (session) => {
307
+ const { signature, table } = await readSignatureInSession(session, { assetId, name, url, log });
308
+ log(`Deciding what "${name}" is made of…`);
309
+ const answer = await classify({
310
+ gameId: context.metadata.gameId,
311
+ assetName: name,
312
+ table,
313
+ signatureHash: signature.hash,
314
+ ...(promptText === undefined ? {} : { promptText }),
315
+ });
316
+ const verdicts = parseVerdictList(answer.verdicts);
317
+ const model = typeof answer.model === 'string' ? answer.model : undefined;
318
+ if (verdicts.length === 0)
319
+ return { reply: null, model };
320
+ const reply = await applyInSession(session, {
321
+ assetId, name, url, log, retryHint,
322
+ ...(promptText === undefined ? {} : { promptText }),
323
+ assignment: {
324
+ signatureVersion: signature.version,
325
+ signatureHash: signature.hash,
326
+ verdicts,
327
+ classifier: 'ai',
328
+ ...(model === undefined ? {} : { model }),
329
+ },
330
+ });
331
+ return { reply, model };
332
+ });
333
+ if (outcome.reply === null) {
334
+ return {
335
+ assetId, assetName: name, slots: [], dropped: [], baseShare: 1,
336
+ unchanged: true, instanceCount: countInstances(world, assetId),
337
+ ...(outcome.model === undefined ? {} : { model: outcome.model }),
338
+ };
339
+ }
340
+ const recorded = await recordApplied({
341
+ options, world, worldPath, asset, assetId, name, retryHint, reply: outcome.reply,
342
+ classifier: 'ai',
343
+ ...(outcome.model === undefined ? {} : { model: outcome.model }),
344
+ });
345
+ return { ...recorded, ...(outcome.model === undefined ? {} : { model: outcome.model }) };
346
+ }
347
+ /**
348
+ * The tail of `generate prop|model` and `assets revoxelize`: classify the asset
349
+ * just baked, and say what happened.
350
+ *
351
+ * **Never throws.** The asset is baked, uploaded and in world.json by the time
352
+ * this runs, and a generation is paid for; a classification that fails —
353
+ * api-server without a model credential, a browser that would not come up a
354
+ * second time, a vendored engine too old to write classes — costs a note, never
355
+ * the asset. `bitmagic assets materials <id> --auto` re-runs it on demand.
356
+ */
357
+ export async function classifyAssetMaterialsQuietly(options) {
358
+ const { context, assetId, log } = options;
359
+ if (!engineSupportsMaterialClasses(context.root))
360
+ return null;
361
+ try {
362
+ const result = await classifyAssetMaterials(options);
363
+ if (result.unchanged) {
364
+ log(`Materials: nothing on "${result.assetName}" needs special shading.`);
365
+ }
366
+ else {
367
+ log(`Materials: ${result.slots.join(', ')} — `
368
+ + `${Math.round(result.baseShare * 100)}% of "${result.assetName}" keeps the default look.`);
369
+ }
370
+ return { slots: result.slots };
371
+ }
372
+ catch (error) {
373
+ const message = error instanceof Error ? error.message : String(error);
374
+ log(`note: could not decide what the asset is made of (${message}). `
375
+ + `It is baked and in world.json; \`bitmagic assets materials ${assetId} --auto\` retries.`);
376
+ return null;
377
+ }
378
+ }
379
+ /** api-server's verdict list, with anything malformed dropped rather than refused. */
380
+ function parseVerdictList(value) {
381
+ if (!Array.isArray(value))
382
+ return [];
383
+ const verdicts = [];
384
+ for (const item of value) {
385
+ if (!isJsonObject(item))
386
+ continue;
387
+ const { id, confidence } = item;
388
+ const className = item.class;
389
+ if (typeof id !== 'string' || typeof className !== 'string' || typeof confidence !== 'number')
390
+ continue;
391
+ verdicts.push({ id, class: className, confidence });
392
+ }
393
+ return verdicts;
394
+ }
395
+ //# sourceMappingURL=materials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"materials.js","sourceRoot":"","sources":["../../src/assets/materials.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,10 @@
7
7
  * Only what the fixed 48-byte body header states outright is trusted unconditionally: bounds,
8
8
  * LOD-0 voxel size and fragment count. `voxelCount` is the sum of the LOD-0 fragments' leaf counts,
9
9
  * found by walking the fragment table (its stride is `16 + leafCount × (7 + paletteIdxBytes)` for
10
- * every version through v8 — the columnar and emissive/slot additions changed what is INSIDE a
11
- * fragment and what follows the table, not its size). Should a future version change that, the
12
- * walk runs off the end and the count is simply omitted rather than reported wrong.
10
+ * every version through v11 — every addition since v5 changed what is INSIDE a fragment and what
11
+ * FOLLOWS the table, never its size; the v10 rig's bone column is per leaf but lives in its own
12
+ * trailing section). Should a future version change that, the walk runs off the end and the count
13
+ * is simply omitted rather than reported wrong.
13
14
  *
14
15
  * Layout reference: game/src/engine/VxlV3Format.ts (the wire-format doc comment at its top).
15
16
  */
@@ -20,15 +21,21 @@ const WRAPPER_BYTES = 5;
20
21
  const BODY_HEADER_BYTES = 48;
21
22
  /**
22
23
  * The versions the engine's own decoder accepts (`VxlV3Format.ts`: 3 no-LOD, 4 LOD trailer,
23
- * 5 columnar, 6 emissive, 7 slots, 8 per-LOD material columns, 9 block types).
24
+ * 5 columnar, 6 emissive, 7 slots, 8 per-LOD material columns, 9 block types, 10 rig,
25
+ * 11 material classes).
24
26
  *
25
27
  * Checked rather than merely recorded: this header parse only reads the fixed 48-byte prologue,
26
28
  * which a FUTURE version could keep byte-compatible while changing what follows. Accepting such a
27
29
  * file would write an `assets[]` entry the vendored engine then throws on at load — the exact
28
30
  * outcome returning `null` exists to prevent.
31
+ *
32
+ * KEEP THIS IN STEP with the engine's version ladder. The cost of lagging is silent and one-sided:
33
+ * the engine happily loads a version this file has not heard of, so a stale ceiling refuses a
34
+ * perfectly good asset — `bitmagic assets add` reports the file as malformed, with nothing to
35
+ * suggest that the file is fine and the CLI is behind.
29
36
  */
30
37
  const MIN_SUPPORTED_VERSION = 3;
31
- const MAX_SUPPORTED_VERSION = 9;
38
+ const MAX_SUPPORTED_VERSION = 11;
32
39
  /** True when the first four bytes are the VXL3 magic — cheap, no copy, no decompression. */
33
40
  export function isVxl3(bytes) {
34
41
  if (bytes.byteLength < 4)
@@ -1 +1 @@
1
- {"version":3,"file":"vxl-summary.js","sourceRoot":"","sources":["../../src/assets/vxl-summary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vxl-summary.js","sourceRoot":"","sources":["../../src/assets/vxl-summary.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -263,6 +263,7 @@ declare const rawCommands: {
263
263
  generate: CommandDef<ArgsDef>;
264
264
  assets: CommandDef<ArgsDef>;
265
265
  levels: CommandDef<ArgsDef>;
266
+ theme: CommandDef<ArgsDef>;
266
267
  cover: CommandDef<{
267
268
  readonly prompt: {
268
269
  readonly type: "string";
package/dist/cli.js CHANGED
@@ -22,6 +22,7 @@ import { buildCommand } from './commands/build.js';
22
22
  import { generateCommand } from './commands/generate.js';
23
23
  import { assetsCommand } from './commands/assets.js';
24
24
  import { levelsCommand } from './commands/levels.js';
25
+ import { themeCommand } from './commands/theme.js';
25
26
  import { coverCommand } from './commands/cover.js';
26
27
  import { referenceCommand } from './commands/reference.js';
27
28
  import { judgeCommand } from './commands/judge.js';
@@ -206,6 +207,7 @@ const rawCommands = {
206
207
  generate: generateCommand,
207
208
  assets: assetsCommand,
208
209
  levels: levelsCommand,
210
+ theme: themeCommand,
209
211
  cover: coverCommand,
210
212
  reference: referenceCommand,
211
213
  judge: judgeCommand,
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { type AddAssetResult } from '../assets/add.js';
3
3
  import type { VoxelizeGlb } from '../assets/voxelize-glb.js';
4
4
  import { type AssetRow } from '../assets/list.js';
5
5
  import { type RevoxelizeResult } from '../assets/revoxelize.js';
6
+ import { type MaterialVerdictInput } from '../assets/materials.js';
6
7
  /** The Creator's voxelize-dialog defaults (assetsVoxelizeDialog.ts), so a plain `add` bakes the same way. */
7
8
  export declare const DEFAULT_MIN_VOXEL_SIZE = 0.1;
8
9
  export declare const DEFAULT_MAX_VOXEL_SIZE = 0.5;
@@ -61,6 +62,8 @@ export interface RevoxelizeOptions {
61
62
  height?: string;
62
63
  hollow?: boolean;
63
64
  solid?: boolean;
65
+ /** `--no-materials`: leave the re-baked asset matte rather than classifying it again. */
66
+ materials?: boolean;
64
67
  json: boolean;
65
68
  deps?: AssetsRunDeps;
66
69
  }
@@ -71,4 +74,26 @@ export interface RevoxelizeOptions {
71
74
  * See assets/revoxelize.ts for which source that is and why the choice is the asset's to answer.
72
75
  */
73
76
  export declare function runAssetsRevoxelize(options: RevoxelizeOptions): Promise<RevoxelizeResult>;
77
+ export declare function runAssetsMaterials(options: {
78
+ assetId: string;
79
+ set?: string;
80
+ clear?: boolean;
81
+ /** `--auto`: let api-server's light model write the verdicts. */
82
+ auto?: boolean;
83
+ json?: boolean;
84
+ /** Test-only, matching the other subcommands' seam. */
85
+ deps?: AssetsRunDeps;
86
+ }): Promise<void>;
87
+ /**
88
+ * Read and validate a `--set` file.
89
+ *
90
+ * Validated here rather than in the engine so a malformed answer costs nothing: a
91
+ * browser launch is seconds, and a typo in a class name should be a message, not a
92
+ * timeout.
93
+ */
94
+ export declare function readAssignmentFile(filePath: string): {
95
+ signatureVersion: number;
96
+ signatureHash: string;
97
+ verdicts: MaterialVerdictInput[];
98
+ };
74
99
  export declare const assetsCommand: import("citty").CommandDef<import("citty").ArgsDef>;