@bitmagic/cli 0.1.52-dev.1 → 0.1.52-dev.11

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 (152) hide show
  1. package/README.md +217 -11
  2. package/dist/assets/add.d.ts +40 -0
  3. package/dist/assets/add.js +229 -0
  4. package/dist/assets/add.js.map +1 -0
  5. package/dist/assets/entry.d.ts +44 -0
  6. package/dist/assets/entry.js +71 -0
  7. package/dist/assets/entry.js.map +1 -0
  8. package/dist/assets/file-kind.d.ts +61 -0
  9. package/dist/assets/file-kind.js +195 -0
  10. package/dist/assets/file-kind.js.map +1 -0
  11. package/dist/assets/list.d.ts +27 -0
  12. package/dist/assets/list.js +50 -0
  13. package/dist/assets/list.js.map +1 -0
  14. package/dist/assets/remove.d.ts +50 -0
  15. package/dist/assets/remove.js +91 -0
  16. package/dist/assets/remove.js.map +1 -0
  17. package/dist/assets/voxelize-glb.d.ts +37 -0
  18. package/dist/assets/voxelize-glb.js +65 -0
  19. package/dist/assets/voxelize-glb.js.map +1 -0
  20. package/dist/assets/vxl-summary.d.ts +32 -0
  21. package/dist/assets/vxl-summary.js +118 -0
  22. package/dist/assets/vxl-summary.js.map +1 -0
  23. package/dist/bin.js +25 -0
  24. package/dist/bin.js.map +1 -1
  25. package/dist/cli.d.ts +12 -0
  26. package/dist/cli.js +15 -1
  27. package/dist/cli.js.map +1 -1
  28. package/dist/commands/assets.d.ts +56 -0
  29. package/dist/commands/assets.js +328 -0
  30. package/dist/commands/assets.js.map +1 -0
  31. package/dist/commands/cover.js +2 -3
  32. package/dist/commands/cover.js.map +1 -1
  33. package/dist/commands/forge.d.ts +2 -9
  34. package/dist/commands/forge.js +2 -13
  35. package/dist/commands/forge.js.map +1 -1
  36. package/dist/commands/generate.d.ts +41 -9
  37. package/dist/commands/generate.js +234 -54
  38. package/dist/commands/generate.js.map +1 -1
  39. package/dist/commands/judge.d.ts +7 -7
  40. package/dist/commands/judge.js +53 -25
  41. package/dist/commands/judge.js.map +1 -1
  42. package/dist/commands/levels.d.ts +33 -0
  43. package/dist/commands/levels.js +241 -0
  44. package/dist/commands/levels.js.map +1 -0
  45. package/dist/commands/number-flag.d.ts +7 -0
  46. package/dist/commands/number-flag.js +38 -0
  47. package/dist/commands/number-flag.js.map +1 -0
  48. package/dist/commands/publish.d.ts +6 -1
  49. package/dist/commands/publish.js +42 -15
  50. package/dist/commands/publish.js.map +1 -1
  51. package/dist/commands/run-deps.d.ts +27 -0
  52. package/dist/commands/run-deps.js +43 -0
  53. package/dist/commands/run-deps.js.map +1 -0
  54. package/dist/commands/verify.d.ts +4 -0
  55. package/dist/commands/verify.js +94 -51
  56. package/dist/commands/verify.js.map +1 -1
  57. package/dist/editor/journal.d.ts +48 -1
  58. package/dist/editor/journal.js +44 -0
  59. package/dist/editor/journal.js.map +1 -1
  60. package/dist/editor/previews.d.ts +6 -0
  61. package/dist/editor/previews.js +16 -0
  62. package/dist/editor/previews.js.map +1 -1
  63. package/dist/editor/server.js +228 -53
  64. package/dist/editor/server.js.map +1 -1
  65. package/dist/editor/shell-page.js +221 -116
  66. package/dist/editor/shell-page.js.map +1 -1
  67. package/dist/editor/voxel-save.d.ts +47 -0
  68. package/dist/editor/voxel-save.js +49 -0
  69. package/dist/editor/voxel-save.js.map +1 -0
  70. package/dist/errors.d.ts +10 -0
  71. package/dist/errors.js +16 -0
  72. package/dist/errors.js.map +1 -1
  73. package/dist/forge/apply-modifications.d.ts +18 -1
  74. package/dist/forge/apply-modifications.js +15 -32
  75. package/dist/forge/apply-modifications.js.map +1 -1
  76. package/dist/forge/browser-host.js +9 -4
  77. package/dist/forge/browser-host.js.map +1 -1
  78. package/dist/forge/voxelize-session.d.ts +61 -0
  79. package/dist/forge/voxelize-session.js +137 -0
  80. package/dist/forge/voxelize-session.js.map +1 -0
  81. package/dist/generate/model.d.ts +36 -0
  82. package/dist/generate/model.js +90 -0
  83. package/dist/generate/model.js.map +1 -0
  84. package/dist/generate/prop.d.ts +52 -4
  85. package/dist/generate/prop.js +169 -102
  86. package/dist/generate/prop.js.map +1 -1
  87. package/dist/generate/stream.d.ts +7 -0
  88. package/dist/generate/stream.js +2 -1
  89. package/dist/generate/stream.js.map +1 -1
  90. package/dist/generate/vehicle.js +5 -85
  91. package/dist/generate/vehicle.js.map +1 -1
  92. package/dist/http/signed-upload.d.ts +55 -0
  93. package/dist/http/signed-upload.js +168 -0
  94. package/dist/http/signed-upload.js.map +1 -0
  95. package/dist/judge/facts.js +72 -57
  96. package/dist/judge/facts.js.map +1 -1
  97. package/dist/judge/record.d.ts +3 -0
  98. package/dist/judge/record.js +3 -0
  99. package/dist/judge/record.js.map +1 -1
  100. package/dist/levels/registry.d.ts +88 -0
  101. package/dist/levels/registry.js +309 -0
  102. package/dist/levels/registry.js.map +1 -0
  103. package/dist/messages/check.d.ts +30 -0
  104. package/dist/messages/check.js +119 -0
  105. package/dist/messages/check.js.map +1 -0
  106. package/dist/messages/notice.d.ts +58 -0
  107. package/dist/messages/notice.js +54 -0
  108. package/dist/messages/notice.js.map +1 -0
  109. package/dist/messages/refresh.d.ts +19 -0
  110. package/dist/messages/refresh.js +42 -0
  111. package/dist/messages/refresh.js.map +1 -0
  112. package/dist/project/jobs.d.ts +1 -1
  113. package/dist/project/jobs.js.map +1 -1
  114. package/dist/project/platform-declaration.d.ts +51 -0
  115. package/dist/project/platform-declaration.js +81 -0
  116. package/dist/project/platform-declaration.js.map +1 -0
  117. package/dist/publish/client.d.ts +13 -0
  118. package/dist/publish/client.js +13 -34
  119. package/dist/publish/client.js.map +1 -1
  120. package/dist/publish/platform.d.ts +42 -0
  121. package/dist/publish/platform.js +58 -0
  122. package/dist/publish/platform.js.map +1 -0
  123. package/dist/scaffold/project-files.js +124 -22
  124. package/dist/scaffold/project-files.js.map +1 -1
  125. package/dist/verify/artifacts.d.ts +19 -0
  126. package/dist/verify/artifacts.js +34 -0
  127. package/dist/verify/artifacts.js.map +1 -0
  128. package/dist/verify/browser.d.ts +10 -0
  129. package/dist/verify/browser.js +79 -9
  130. package/dist/verify/browser.js.map +1 -1
  131. package/dist/verify/classify.d.ts +37 -1
  132. package/dist/verify/classify.js +66 -2
  133. package/dist/verify/classify.js.map +1 -1
  134. package/dist/verify/device.d.ts +43 -0
  135. package/dist/verify/device.js +59 -0
  136. package/dist/verify/device.js.map +1 -0
  137. package/dist/verify/iterate.d.ts +21 -2
  138. package/dist/verify/iterate.js +43 -36
  139. package/dist/verify/iterate.js.map +1 -1
  140. package/dist/verify/mobile-parity.d.ts +42 -0
  141. package/dist/verify/mobile-parity.js +84 -0
  142. package/dist/verify/mobile-parity.js.map +1 -0
  143. package/dist/verify/platform.d.ts +47 -0
  144. package/dist/verify/platform.js +89 -0
  145. package/dist/verify/platform.js.map +1 -0
  146. package/dist/verify/result.d.ts +90 -6
  147. package/dist/verify/result.js +89 -10
  148. package/dist/verify/result.js.map +1 -1
  149. package/dist/verify/url.d.ts +9 -1
  150. package/dist/verify/url.js +10 -2
  151. package/dist/verify/url.js.map +1 -1
  152. 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;
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAE/D,0EAA0E;AAC1E,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,iFAAiF;AACjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACvD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACvD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,OAAe,EAAE,IAAY;IACtE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC;IAEhC,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB;QAAE,OAAO,KAAK,CAAC;IAEzE,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,6FAA6F;QAC7F,+EAA+E;QAC/E,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;QAC1C,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,0FAA0F;QAC1F,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"previews.js","sourceRoot":"","sources":["../../src/editor/previews.ts"],"names":[],"mappings":"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"}
@@ -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 { deriveSceneEvents, EditorJournal } from './journal.js';
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
- /** A token, or null when nobody is logged in. Never starts a device-code flow. */
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
- const environment = resolveEnvironmentForCommand({ cwd: options.root });
188
- const token = await getAccessToken(environment, resolveAuth0ClientId(environment), { fetch: globalThis.fetch, sleep: (ms) => new Promise((r) => setTimeout(r, ms)) });
189
- return { environment, token };
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
- glbUrl: result.glbUrl,
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 = error instanceof Error ? error.message : String(error);
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
- const handleSave = async (req, res) => {
239
- let payload;
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
- payload = JSON.parse(await readBody(req));
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
- sendJson(res, 400, { ok: false, error: 'Request body must be JSON' });
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 = error instanceof Error ? error.message : String(error);
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 = error instanceof Error ? error.message : String(error);
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
- let body;
314
- try {
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 = error instanceof Error ? error.message : String(error);
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. `getAccessToken` throws rather than opening a browser, so a logged-out
373
- // creator degrades to the hand-off instead of having a device-code flow started under them.
374
- let auth = null;
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
- const message = error instanceof Error ? error.message : String(error);
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
- const message = error instanceof Error ? error.message : String(error);
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: [], error: message,
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
- let body;
518
- try {
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
- const message = error instanceof Error ? error.message : String(error);
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
- const message = error instanceof Error ? error.message : String(error);
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: () => new Promise((resolve) => {
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