@bitmagic/cli 0.1.52-dev.1 → 0.1.52-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.
- package/README.md +175 -5
- package/dist/assets/add.d.ts +40 -0
- package/dist/assets/add.js +229 -0
- package/dist/assets/add.js.map +1 -0
- package/dist/assets/entry.d.ts +44 -0
- package/dist/assets/entry.js +71 -0
- package/dist/assets/entry.js.map +1 -0
- package/dist/assets/file-kind.d.ts +61 -0
- package/dist/assets/file-kind.js +195 -0
- package/dist/assets/file-kind.js.map +1 -0
- package/dist/assets/list.d.ts +27 -0
- package/dist/assets/list.js +50 -0
- package/dist/assets/list.js.map +1 -0
- package/dist/assets/remove.d.ts +50 -0
- package/dist/assets/remove.js +91 -0
- package/dist/assets/remove.js.map +1 -0
- package/dist/assets/voxelize-glb.d.ts +37 -0
- package/dist/assets/voxelize-glb.js +65 -0
- package/dist/assets/voxelize-glb.js.map +1 -0
- package/dist/assets/vxl-summary.d.ts +32 -0
- package/dist/assets/vxl-summary.js +118 -0
- package/dist/assets/vxl-summary.js.map +1 -0
- package/dist/bin.js +25 -0
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts +4 -0
- package/dist/cli.js +15 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/assets.d.ts +56 -0
- package/dist/commands/assets.js +328 -0
- package/dist/commands/assets.js.map +1 -0
- package/dist/commands/cover.js +2 -3
- package/dist/commands/cover.js.map +1 -1
- package/dist/commands/forge.d.ts +2 -9
- package/dist/commands/forge.js +2 -13
- package/dist/commands/forge.js.map +1 -1
- package/dist/commands/generate.d.ts +41 -9
- package/dist/commands/generate.js +234 -54
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/judge.d.ts +2 -7
- package/dist/commands/judge.js +26 -19
- package/dist/commands/judge.js.map +1 -1
- package/dist/commands/levels.d.ts +33 -0
- package/dist/commands/levels.js +241 -0
- package/dist/commands/levels.js.map +1 -0
- package/dist/commands/number-flag.d.ts +7 -0
- package/dist/commands/number-flag.js +38 -0
- package/dist/commands/number-flag.js.map +1 -0
- package/dist/commands/publish.js +13 -0
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/run-deps.d.ts +27 -0
- package/dist/commands/run-deps.js +43 -0
- package/dist/commands/run-deps.js.map +1 -0
- package/dist/editor/journal.d.ts +48 -1
- package/dist/editor/journal.js +44 -0
- package/dist/editor/journal.js.map +1 -1
- package/dist/editor/previews.d.ts +6 -0
- package/dist/editor/previews.js +16 -0
- package/dist/editor/previews.js.map +1 -1
- package/dist/editor/server.js +228 -53
- package/dist/editor/server.js.map +1 -1
- package/dist/editor/shell-page.js +221 -116
- package/dist/editor/shell-page.js.map +1 -1
- package/dist/editor/voxel-save.d.ts +47 -0
- package/dist/editor/voxel-save.js +49 -0
- package/dist/editor/voxel-save.js.map +1 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -1
- package/dist/forge/apply-modifications.d.ts +18 -1
- package/dist/forge/apply-modifications.js +15 -32
- package/dist/forge/apply-modifications.js.map +1 -1
- package/dist/forge/browser-host.js +9 -4
- package/dist/forge/browser-host.js.map +1 -1
- package/dist/forge/voxelize-session.d.ts +61 -0
- package/dist/forge/voxelize-session.js +137 -0
- package/dist/forge/voxelize-session.js.map +1 -0
- package/dist/generate/model.d.ts +36 -0
- package/dist/generate/model.js +90 -0
- package/dist/generate/model.js.map +1 -0
- package/dist/generate/prop.d.ts +52 -4
- package/dist/generate/prop.js +169 -102
- package/dist/generate/prop.js.map +1 -1
- package/dist/generate/stream.d.ts +7 -0
- package/dist/generate/stream.js +2 -1
- package/dist/generate/stream.js.map +1 -1
- package/dist/generate/vehicle.js +5 -85
- package/dist/generate/vehicle.js.map +1 -1
- package/dist/http/signed-upload.d.ts +55 -0
- package/dist/http/signed-upload.js +168 -0
- package/dist/http/signed-upload.js.map +1 -0
- package/dist/judge/facts.js +72 -57
- package/dist/judge/facts.js.map +1 -1
- package/dist/levels/registry.d.ts +88 -0
- package/dist/levels/registry.js +309 -0
- package/dist/levels/registry.js.map +1 -0
- package/dist/messages/check.d.ts +30 -0
- package/dist/messages/check.js +119 -0
- package/dist/messages/check.js.map +1 -0
- package/dist/messages/notice.d.ts +58 -0
- package/dist/messages/notice.js +54 -0
- package/dist/messages/notice.js.map +1 -0
- package/dist/messages/refresh.d.ts +19 -0
- package/dist/messages/refresh.js +42 -0
- package/dist/messages/refresh.js.map +1 -0
- package/dist/project/jobs.d.ts +1 -1
- package/dist/project/jobs.js.map +1 -1
- package/dist/publish/client.d.ts +13 -0
- package/dist/publish/client.js +13 -34
- package/dist/publish/client.js.map +1 -1
- package/dist/publish/platform.d.ts +46 -0
- package/dist/publish/platform.js +92 -0
- package/dist/publish/platform.js.map +1 -0
- package/dist/scaffold/project-files.js +109 -21
- package/dist/scaffold/project-files.js.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/editor/journal.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/editor/journal.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,3 +21,9 @@ export declare function readPreview(root: string, assetId: string): Buffer | nul
|
|
|
21
21
|
* reporting a write that did not happen.
|
|
22
22
|
*/
|
|
23
23
|
export declare function writePreview(root: string, assetId: string, data: string): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Drop an asset's thumbnail — what `bitmagic assets remove` does so the next asset minted under a
|
|
26
|
+
* reused id is not drawn with the old one's picture (previews are keyed by id and never otherwise
|
|
27
|
+
* invalidated). Best-effort: a missing or unremovable file is not a failed removal.
|
|
28
|
+
*/
|
|
29
|
+
export declare function removePreview(root: string, assetId: string): void;
|
package/dist/editor/previews.js
CHANGED
|
@@ -105,4 +105,20 @@ export function writePreview(root, assetId, data) {
|
|
|
105
105
|
return false;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Drop an asset's thumbnail — what `bitmagic assets remove` does so the next asset minted under a
|
|
110
|
+
* reused id is not drawn with the old one's picture (previews are keyed by id and never otherwise
|
|
111
|
+
* invalidated). Best-effort: a missing or unremovable file is not a failed removal.
|
|
112
|
+
*/
|
|
113
|
+
export function removePreview(root, assetId) {
|
|
114
|
+
const file = previewPath(root, assetId);
|
|
115
|
+
if (file === null)
|
|
116
|
+
return;
|
|
117
|
+
try {
|
|
118
|
+
fs.rmSync(file, { force: true });
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Nothing depends on the thumbnail being gone.
|
|
122
|
+
}
|
|
123
|
+
}
|
|
108
124
|
//# sourceMappingURL=previews.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"previews.js","sourceRoot":"","sources":["../../src/editor/previews.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"previews.js","sourceRoot":"","sources":["../../src/editor/previews.ts"],"names":[],"mappings":"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"}
|
package/dist/editor/server.js
CHANGED
|
@@ -24,12 +24,14 @@ import { projectWorldJsonPath } from '../forge/run-pipeline.js';
|
|
|
24
24
|
import { renderEditorShell } from './shell-page.js';
|
|
25
25
|
import { renderAssetPreviewPage } from './asset-preview-page.js';
|
|
26
26
|
import { buildSceneModifications } from './save.js';
|
|
27
|
-
import {
|
|
27
|
+
import { buildVoxelSaveModifications } from './voxel-save.js';
|
|
28
|
+
import { asHostJournalEvent, deriveSceneEvents, EditorJournal } from './journal.js';
|
|
28
29
|
import { jobsDirPath, readJobLayout, readRunningJobs, withJobRecord } from '../project/jobs.js';
|
|
29
30
|
import { listPreviews, readPreview, writePreview } from './previews.js';
|
|
30
31
|
import { findPropAsset, generateAndInstallProp } from '../generate/prop.js';
|
|
31
32
|
import { resolveEnvironmentForCommand, resolveAuth0ClientId } from '../config/environments.js';
|
|
32
33
|
import { getAccessToken } from '../auth/session.js';
|
|
34
|
+
import { startUploadProxy } from '../forge/upload-proxy.js';
|
|
33
35
|
/** Bodies are a scene snapshot, not an upload — a megabyte is already generous. */
|
|
34
36
|
const MAX_BODY_BYTES = 8 * 1024 * 1024;
|
|
35
37
|
function readBody(req) {
|
|
@@ -46,6 +48,10 @@ function readBody(req) {
|
|
|
46
48
|
req.on('error', reject);
|
|
47
49
|
});
|
|
48
50
|
}
|
|
51
|
+
/** What a caught error says to a creator. Every handler below reports failures the same way. */
|
|
52
|
+
function messageOf(error) {
|
|
53
|
+
return error instanceof Error ? error.message : String(error);
|
|
54
|
+
}
|
|
49
55
|
function writeCors(res) {
|
|
50
56
|
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
51
57
|
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
@@ -54,6 +60,21 @@ function writeCors(res) {
|
|
|
54
60
|
function sendJson(res, status, body, headers = {}) {
|
|
55
61
|
res.writeHead(status, { 'Content-Type': 'application/json', ...headers }).end(JSON.stringify(body));
|
|
56
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* The request's parsed JSON body, or `undefined` once the 400 has already been answered.
|
|
65
|
+
*
|
|
66
|
+
* Every POST here takes JSON and refuses an unparseable body identically, so the refusal lives in
|
|
67
|
+
* one place. `undefined` is unambiguous as the failure signal: no JSON document parses to it.
|
|
68
|
+
*/
|
|
69
|
+
async function readJsonBody(req, res) {
|
|
70
|
+
try {
|
|
71
|
+
return JSON.parse(await readBody(req));
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
sendJson(res, 400, { ok: false, error: 'Request body must be JSON' });
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
57
78
|
/**
|
|
58
79
|
* The charset `newJobId` produces, plus nothing. A job id arrives here on a URL and is used to
|
|
59
80
|
* build a path, so anything outside this — a separator, a `..` segment — is refused rather than
|
|
@@ -182,11 +203,70 @@ export async function startEditorServer(options) {
|
|
|
182
203
|
* vite and headless Chrome, and two at once on a creator's laptop would fight for both.
|
|
183
204
|
*/
|
|
184
205
|
let hqJob = null;
|
|
185
|
-
/**
|
|
206
|
+
/**
|
|
207
|
+
* A token, or null when nobody is logged in. Never starts a device-code flow.
|
|
208
|
+
*
|
|
209
|
+
* `getAccessToken` THROWS when nobody is logged in rather than answering null, and both callers
|
|
210
|
+
* treat that as the ordinary case — it is the state `bitmagic dev` is designed to run in — so the
|
|
211
|
+
* catch belongs here rather than being repeated at each of them.
|
|
212
|
+
*/
|
|
186
213
|
const resolveAuth = async () => {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
214
|
+
try {
|
|
215
|
+
const environment = resolveEnvironmentForCommand({ cwd: options.root });
|
|
216
|
+
const token = await getAccessToken(environment, resolveAuth0ClientId(environment), { fetch: globalThis.fetch, sleep: (ms) => new Promise((r) => setTimeout(r, ms)) });
|
|
217
|
+
return { environment, token };
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
/**
|
|
224
|
+
* The engine's way out to Bitmagic's bucket, or null when there is none.
|
|
225
|
+
*
|
|
226
|
+
* `StorageUploadUtil` uploads terrain and edited voxel objects itself, to a hardcoded
|
|
227
|
+
* `${AI_AGENT_URL}/api/generate-upload-url` with no credentials — a path no scaffolded project
|
|
228
|
+
* serves, which is why terrain sculpting in this view used to be a dead end. `upload-proxy.ts`
|
|
229
|
+
* already bridges exactly that route to api-server's authenticated one for `bitmagic forge`; this
|
|
230
|
+
* points the dev view's engine at the same bridge.
|
|
231
|
+
*
|
|
232
|
+
* Best-effort by design. `bitmagic dev` runs offline and logged out, and must keep doing so — so a
|
|
233
|
+
* missing token means no proxy and no `agentUrl`, not a failed start. The engine then reports the
|
|
234
|
+
* failed upload in its own toolbar rather than losing the edit, which is what makes silence here
|
|
235
|
+
* safe.
|
|
236
|
+
*
|
|
237
|
+
* Resolved on demand and memoized, so logging in and reloading the page picks it up.
|
|
238
|
+
*/
|
|
239
|
+
let uploadProxy = null;
|
|
240
|
+
let uploadProxyAttempted = false;
|
|
241
|
+
const ensureUploadProxy = async () => {
|
|
242
|
+
if (uploadProxy)
|
|
243
|
+
return uploadProxy;
|
|
244
|
+
if (uploadProxyAttempted)
|
|
245
|
+
return null;
|
|
246
|
+
uploadProxyAttempted = true;
|
|
247
|
+
const auth = await resolveAuth();
|
|
248
|
+
if (auth === null) {
|
|
249
|
+
log('[dev] not signed in — sculpting works, but saving it needs `bitmagic login` first.');
|
|
250
|
+
// Retry on the next page load, so logging in and refreshing is all it takes.
|
|
251
|
+
uploadProxyAttempted = false;
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
try {
|
|
255
|
+
uploadProxy = await startUploadProxy({
|
|
256
|
+
apiUrl: auth.environment.apiUrl,
|
|
257
|
+
token: auth.token,
|
|
258
|
+
gameId: options.gameId,
|
|
259
|
+
log,
|
|
260
|
+
});
|
|
261
|
+
return uploadProxy;
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
log(`[dev] could not open the upload lane (${messageOf(error)}) `
|
|
265
|
+
+ '— terrain and voxel saves will fail until it does.');
|
|
266
|
+
// Usually a port collision or a network blip; worth another go on the next load.
|
|
267
|
+
uploadProxyAttempted = false;
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
190
270
|
};
|
|
191
271
|
/**
|
|
192
272
|
* Run the generation in the background and narrate it to the journal.
|
|
@@ -226,24 +306,120 @@ export async function startEditorServer(options) {
|
|
|
226
306
|
assetId,
|
|
227
307
|
assetName,
|
|
228
308
|
instanceCount: result.instanceCount,
|
|
229
|
-
|
|
309
|
+
// Whichever it actually was — see PropSourceResult.
|
|
310
|
+
...(result.glbUrl ? { glbUrl: result.glbUrl } : {}),
|
|
311
|
+
...(result.masterUrl ? { masterUrl: result.masterUrl } : {}),
|
|
230
312
|
...(result.assetUrl ? { assetUrl: result.assetUrl } : {}),
|
|
231
313
|
});
|
|
232
314
|
}).catch((error) => {
|
|
233
|
-
const message =
|
|
315
|
+
const message = messageOf(error);
|
|
234
316
|
hqJob = { assetId, assetName, prompt, status: 'failed', message };
|
|
235
317
|
journal.append({ event: 'hq.failed', assetId, assetName, error: message });
|
|
236
318
|
});
|
|
237
319
|
};
|
|
238
|
-
|
|
239
|
-
|
|
320
|
+
/**
|
|
321
|
+
* The engine finished uploading an edited terrain volume and is handing back its URL.
|
|
322
|
+
*
|
|
323
|
+
* The engine never writes world.json — it posts `TERRAIN_SAVED_INTERNAL` and leaves the write to
|
|
324
|
+
* whoever is hosting it. The web Creator turns that into a `POST /api/edit-world-config`; this is
|
|
325
|
+
* the same write against the project's own file, through the same surgical path every other
|
|
326
|
+
* editor save here uses, so `git diff` still shows one changed field.
|
|
327
|
+
*
|
|
328
|
+
* `set` (not `setRoot`) targets `worldProfileData.voxelUrl`, mirroring the Creator.
|
|
329
|
+
*/
|
|
330
|
+
const handleTerrainSaved = async (req, res) => {
|
|
331
|
+
const payload = await readJsonBody(req, res);
|
|
332
|
+
if (payload === undefined)
|
|
333
|
+
return;
|
|
334
|
+
const voxelUrl = payload?.voxelUrl;
|
|
335
|
+
if (typeof voxelUrl !== 'string' || voxelUrl.length === 0) {
|
|
336
|
+
sendJson(res, 400, { ok: false, error: 'voxelUrl is required' });
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
240
339
|
try {
|
|
241
|
-
|
|
340
|
+
const outcome = applyModificationsToWorld(worldPath, [{ type: 'set', path: ['voxelUrl'], value: voxelUrl }], { subject: 'Your terrain edit' });
|
|
341
|
+
recordOwnWrite();
|
|
342
|
+
journal.append({ event: 'terrain.saved', voxelUrl });
|
|
343
|
+
sendJson(res, 200, { ok: true, applied: outcome.applied, worldMtimeMs: lastWrittenMtimeMs });
|
|
242
344
|
}
|
|
243
|
-
catch {
|
|
244
|
-
|
|
345
|
+
catch (error) {
|
|
346
|
+
const message = messageOf(error);
|
|
347
|
+
log(`[editor] could not record the terrain save: ${message}`);
|
|
348
|
+
sendJson(res, 422, { ok: false, error: message });
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
/**
|
|
352
|
+
* `POST /api/editor/voxel-saved` — persist an object voxel sculpt the ENGINE has already uploaded.
|
|
353
|
+
*
|
|
354
|
+
* The counterpart of the terrain route above, for the other half of the same feature. The engine
|
|
355
|
+
* posts `VOXEL_ASSET_SAVED` precisely because mutating its own gameData is not persistence; until
|
|
356
|
+
* this route existed the dev view listened to it and did nothing, so a sculpt uploaded its bytes,
|
|
357
|
+
* reported success, and was gone on the next reload.
|
|
358
|
+
*/
|
|
359
|
+
const handleVoxelSaved = async (req, res) => {
|
|
360
|
+
const payload = await readJsonBody(req, res);
|
|
361
|
+
if (payload === undefined)
|
|
362
|
+
return;
|
|
363
|
+
let plan;
|
|
364
|
+
try {
|
|
365
|
+
plan = buildVoxelSaveModifications(payload, readWorld(worldPath));
|
|
366
|
+
}
|
|
367
|
+
catch (error) {
|
|
368
|
+
const message = messageOf(error);
|
|
369
|
+
log(`[editor] could not read world.json for a voxel save: ${message}`);
|
|
370
|
+
sendJson(res, 500, { ok: false, error: message });
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
// Refused loudly rather than ignored. The bytes are already uploaded and the engine has told
|
|
374
|
+
// the creator it saved, so a silent no-op here is the worst shape this bug can take.
|
|
375
|
+
if (plan === null) {
|
|
376
|
+
const error = 'The voxel save carried no asset id, so nothing could be written to world.json.';
|
|
377
|
+
log(`[editor] ${error}`);
|
|
378
|
+
journal.append({ event: 'voxel.saveFailed', assetName: 'unknown', error });
|
|
379
|
+
sendJson(res, 400, { ok: false, error });
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
try {
|
|
383
|
+
applyModificationsToWorld(worldPath, plan.modifications, { subject: 'Your voxel edit' });
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
const message = messageOf(error);
|
|
387
|
+
log(`[editor] voxel save failed: ${message}`);
|
|
388
|
+
journal.append({ event: 'voxel.saveFailed', assetName: plan.assetName, error: message });
|
|
389
|
+
sendJson(res, 422, { ok: false, error: message });
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
recordOwnWrite();
|
|
393
|
+
// Server-side, after the write: the engine only journals the FAILURE case, and an agent reading
|
|
394
|
+
// `voxel.saved` must be able to trust world.json already says so.
|
|
395
|
+
journal.append({ event: 'voxel.saved', assetId: plan.assetId, assetName: plan.assetName });
|
|
396
|
+
sendJson(res, 200, {
|
|
397
|
+
ok: true, assetId: plan.assetId, merged: plan.merged, worldMtimeMs: lastWrittenMtimeMs,
|
|
398
|
+
});
|
|
399
|
+
};
|
|
400
|
+
/**
|
|
401
|
+
* An editor event the journal cannot infer from a world.json diff.
|
|
402
|
+
*
|
|
403
|
+
* `deriveSceneEvents` reconstructs moves, adds and deletes by comparing the file before and after
|
|
404
|
+
* a save. A save that FAILED changes no file, so nothing downstream would ever know it happened —
|
|
405
|
+
* which is exactly the thing an agent watching this project needs told.
|
|
406
|
+
*/
|
|
407
|
+
const handleJournalEvent = async (req, res) => {
|
|
408
|
+
const payload = await readJsonBody(req, res);
|
|
409
|
+
if (payload === undefined)
|
|
410
|
+
return;
|
|
411
|
+
const event = asHostJournalEvent(payload);
|
|
412
|
+
if (!event) {
|
|
413
|
+
sendJson(res, 400, { ok: false, error: 'Unknown editor event' });
|
|
245
414
|
return;
|
|
246
415
|
}
|
|
416
|
+
journal.append(event);
|
|
417
|
+
sendJson(res, 200, { ok: true });
|
|
418
|
+
};
|
|
419
|
+
const handleSave = async (req, res) => {
|
|
420
|
+
const payload = await readJsonBody(req, res);
|
|
421
|
+
if (payload === undefined)
|
|
422
|
+
return;
|
|
247
423
|
if (payload?.status?.unlocked !== true) {
|
|
248
424
|
// Not an error: the engine reports the scene locked until the world has loaded, and the
|
|
249
425
|
// shell's poll can land in that window.
|
|
@@ -260,7 +436,7 @@ export async function startEditorServer(options) {
|
|
|
260
436
|
events = deriveSceneEvents(before, payload);
|
|
261
437
|
}
|
|
262
438
|
catch (error) {
|
|
263
|
-
const message =
|
|
439
|
+
const message = messageOf(error);
|
|
264
440
|
log(`[editor] could not read ${worldPath}: ${message}`);
|
|
265
441
|
sendJson(res, 500, { ok: false, error: message });
|
|
266
442
|
return;
|
|
@@ -270,7 +446,7 @@ export async function startEditorServer(options) {
|
|
|
270
446
|
return;
|
|
271
447
|
}
|
|
272
448
|
try {
|
|
273
|
-
const outcome = applyModificationsToWorld(worldPath, modifications);
|
|
449
|
+
const outcome = applyModificationsToWorld(worldPath, modifications, { subject: 'Your edit' });
|
|
274
450
|
recordOwnWrite();
|
|
275
451
|
// Journalled AFTER the write lands, never before: an agent reading a `object.moved` line
|
|
276
452
|
// must be able to trust that world.json already says so.
|
|
@@ -286,7 +462,7 @@ export async function startEditorServer(options) {
|
|
|
286
462
|
// `applyModificationsToWorld` writes nothing when it throws, so world.json still holds
|
|
287
463
|
// whatever it had. Report it rather than swallowing: the shell surfaces it, because a save
|
|
288
464
|
// that silently did nothing is the worst outcome for an autosaving editor.
|
|
289
|
-
const message =
|
|
465
|
+
const message = messageOf(error);
|
|
290
466
|
log(`[editor] save refused: ${message}`);
|
|
291
467
|
sendJson(res, 422, { ok: false, error: message });
|
|
292
468
|
}
|
|
@@ -310,14 +486,9 @@ export async function startEditorServer(options) {
|
|
|
310
486
|
* description the human just wrote is worth keeping whether or not a generation ever follows.
|
|
311
487
|
*/
|
|
312
488
|
const handleHqRequest = async (req, res) => {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
body = JSON.parse(await readBody(req));
|
|
316
|
-
}
|
|
317
|
-
catch {
|
|
318
|
-
sendJson(res, 400, { ok: false, error: 'Request body must be JSON' });
|
|
489
|
+
const body = await readJsonBody(req, res);
|
|
490
|
+
if (body === undefined)
|
|
319
491
|
return;
|
|
320
|
-
}
|
|
321
492
|
const { assetId, prompt } = body;
|
|
322
493
|
if (typeof assetId !== 'string' || typeof prompt !== 'string' || prompt.trim() === '') {
|
|
323
494
|
sendJson(res, 400, { ok: false, error: 'assetId and a non-empty prompt are required' });
|
|
@@ -333,11 +504,11 @@ export async function startEditorServer(options) {
|
|
|
333
504
|
// An updater, not a replacement: the asset carries fitBox, sourceGlbUrl and the rest, and
|
|
334
505
|
// the generation the agent runs later depends on every one of them.
|
|
335
506
|
value: (item) => ({ ...(isRecord(item) ? item : {}), description }),
|
|
336
|
-
}]);
|
|
507
|
+
}], { subject: 'The description' });
|
|
337
508
|
recordOwnWrite();
|
|
338
509
|
}
|
|
339
510
|
catch (error) {
|
|
340
|
-
const message =
|
|
511
|
+
const message = messageOf(error);
|
|
341
512
|
log(`[editor] could not save the description for ${assetId}: ${message}`);
|
|
342
513
|
sendJson(res, 422, { ok: false, error: message });
|
|
343
514
|
return;
|
|
@@ -369,15 +540,9 @@ export async function startEditorServer(options) {
|
|
|
369
540
|
return;
|
|
370
541
|
}
|
|
371
542
|
// A token is the one thing the editor cannot conjure: the mesh comes from an authenticated
|
|
372
|
-
// api-server route.
|
|
373
|
-
//
|
|
374
|
-
|
|
375
|
-
try {
|
|
376
|
-
auth = await resolveAuth();
|
|
377
|
-
}
|
|
378
|
-
catch {
|
|
379
|
-
auth = null;
|
|
380
|
-
}
|
|
543
|
+
// api-server route. Nobody opens a browser for it either — a logged-out creator degrades to the
|
|
544
|
+
// hand-off instead of having a device-code flow started under them.
|
|
545
|
+
const auth = await resolveAuth();
|
|
381
546
|
if (auth === null) {
|
|
382
547
|
journal.append({
|
|
383
548
|
event: 'hq.requested', assetId, assetName, prompt: description, command: hqCommand(assetId, description),
|
|
@@ -436,15 +601,20 @@ export async function startEditorServer(options) {
|
|
|
436
601
|
catch (error) {
|
|
437
602
|
// Only reachable from a broken install, and the overlay's own timeout would otherwise
|
|
438
603
|
// report it as "the preview did not load" with no way to tell why.
|
|
439
|
-
|
|
440
|
-
sendJson(res, 500, { ok: false, error: `The asset viewer is missing: ${message}` });
|
|
604
|
+
sendJson(res, 500, { ok: false, error: `The asset viewer is missing: ${messageOf(error)}` });
|
|
441
605
|
}
|
|
442
606
|
return;
|
|
443
607
|
}
|
|
444
608
|
if (req.method === 'GET' && url === '/api/game-data') {
|
|
445
609
|
try {
|
|
610
|
+
// Resolved per boot rather than once at startup, so signing in and reloading the page is
|
|
611
|
+
// all it takes to get uploads working.
|
|
612
|
+
const proxy = await ensureUploadProxy();
|
|
446
613
|
sendJson(res, 200, {
|
|
447
614
|
gameId: options.gameId,
|
|
615
|
+
// The engine reads this back as `window.AI_AGENT_URL` and uploads through it. Absent
|
|
616
|
+
// when logged out — see ensureUploadProxy.
|
|
617
|
+
agentUrl: proxy?.url ?? null,
|
|
448
618
|
// The same merge the forge browser uses: `GameEngine.loadGame` reads
|
|
449
619
|
// `worldProfileData` from world.json and `gameGenre` from game.json, and refuses to
|
|
450
620
|
// load with either missing.
|
|
@@ -453,8 +623,7 @@ export async function startEditorServer(options) {
|
|
|
453
623
|
});
|
|
454
624
|
}
|
|
455
625
|
catch (error) {
|
|
456
|
-
|
|
457
|
-
sendJson(res, 500, { ok: false, error: message });
|
|
626
|
+
sendJson(res, 500, { ok: false, error: messageOf(error) });
|
|
458
627
|
}
|
|
459
628
|
return;
|
|
460
629
|
}
|
|
@@ -503,9 +672,9 @@ export async function startEditorServer(options) {
|
|
|
503
672
|
catch (error) {
|
|
504
673
|
// A world.json the engine cannot load still has jobs worth showing — a forge in step 2
|
|
505
674
|
// is the most likely reason it is unreadable, and hiding it would be the worst moment to.
|
|
506
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
507
675
|
sendJson(res, 200, {
|
|
508
|
-
ok: true, assets: [], jobs: readRunningJobs(options.root), previews: [],
|
|
676
|
+
ok: true, assets: [], jobs: readRunningJobs(options.root), previews: [],
|
|
677
|
+
error: messageOf(error),
|
|
509
678
|
});
|
|
510
679
|
}
|
|
511
680
|
return;
|
|
@@ -514,14 +683,9 @@ export async function startEditorServer(options) {
|
|
|
514
683
|
// render costs a GLB fetch and a draw call in the GPU the creator is playing in, and this
|
|
515
684
|
// dev view reloads often.
|
|
516
685
|
if (req.method === 'POST' && url === '/api/assets/preview') {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
body = JSON.parse(await readBody(req));
|
|
520
|
-
}
|
|
521
|
-
catch {
|
|
522
|
-
sendJson(res, 400, { ok: false, error: 'Request body must be JSON' });
|
|
686
|
+
const body = await readJsonBody(req, res);
|
|
687
|
+
if (body === undefined)
|
|
523
688
|
return;
|
|
524
|
-
}
|
|
525
689
|
if (typeof body.assetId !== 'string' || typeof body.image !== 'string') {
|
|
526
690
|
sendJson(res, 400, { ok: false, error: 'assetId and image are required' });
|
|
527
691
|
return;
|
|
@@ -593,8 +757,7 @@ export async function startEditorServer(options) {
|
|
|
593
757
|
}).end(bytes);
|
|
594
758
|
}
|
|
595
759
|
catch (error) {
|
|
596
|
-
|
|
597
|
-
sendJson(res, 502, { ok: false, error: `Could not fetch the asset: ${message}` });
|
|
760
|
+
sendJson(res, 502, { ok: false, error: `Could not fetch the asset: ${messageOf(error)}` });
|
|
598
761
|
}
|
|
599
762
|
return;
|
|
600
763
|
}
|
|
@@ -637,6 +800,18 @@ export async function startEditorServer(options) {
|
|
|
637
800
|
handleHqStatus(res);
|
|
638
801
|
return;
|
|
639
802
|
}
|
|
803
|
+
if (req.method === 'POST' && url === '/api/editor/terrain-saved') {
|
|
804
|
+
await handleTerrainSaved(req, res);
|
|
805
|
+
return;
|
|
806
|
+
}
|
|
807
|
+
if (req.method === 'POST' && url === '/api/editor/voxel-saved') {
|
|
808
|
+
await handleVoxelSaved(req, res);
|
|
809
|
+
return;
|
|
810
|
+
}
|
|
811
|
+
if (req.method === 'POST' && url === '/api/editor/journal') {
|
|
812
|
+
await handleJournalEvent(req, res);
|
|
813
|
+
return;
|
|
814
|
+
}
|
|
640
815
|
sendJson(res, 404, { ok: false, error: `No route for ${req.method ?? '?'} ${url}` });
|
|
641
816
|
})();
|
|
642
817
|
});
|
|
@@ -678,8 +853,7 @@ export async function startEditorServer(options) {
|
|
|
678
853
|
catch (error) {
|
|
679
854
|
// Losing live job updates costs the panel its progress rows, which the shell's own poll still
|
|
680
855
|
// backfills. It must never cost the creator their dev server.
|
|
681
|
-
|
|
682
|
-
log(`[dev] could not watch generation jobs (${message}) — the panel will update on its poll.`);
|
|
856
|
+
log(`[dev] could not watch generation jobs (${messageOf(error)}) — the panel will update on its poll.`);
|
|
683
857
|
}
|
|
684
858
|
const url = `http://localhost:${options.port}/`;
|
|
685
859
|
journal.append({
|
|
@@ -694,13 +868,14 @@ export async function startEditorServer(options) {
|
|
|
694
868
|
// The bus first, always: `server.close()` waits for open connections to finish, and every SSE
|
|
695
869
|
// subscriber is an open connection that by design never finishes on its own. Closing the server
|
|
696
870
|
// without ending them hangs shutdown until the browser happens to go away.
|
|
697
|
-
close:
|
|
871
|
+
close: async () => {
|
|
698
872
|
if (jobsDebounce)
|
|
699
873
|
clearTimeout(jobsDebounce);
|
|
700
874
|
jobsWatcher?.close();
|
|
875
|
+
await uploadProxy?.close();
|
|
701
876
|
options.bus.close();
|
|
702
|
-
server.close(() => resolve());
|
|
703
|
-
}
|
|
877
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
878
|
+
},
|
|
704
879
|
};
|
|
705
880
|
}
|
|
706
881
|
//# sourceMappingURL=server.js.map
|