windows-development-sandbox 1.25.0 → 1.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/config.example.json +5 -2
  2. package/dist/app/features/data/data.def.d.ts +4 -4
  3. package/dist/app/features/data/data.run.d.ts +1 -1
  4. package/dist/app/features/defs.d.ts +161 -6
  5. package/dist/app/features/defs.js +7 -0
  6. package/dist/app/features/projects/projects.def.d.ts +1 -1
  7. package/dist/app/features/projects/projects.run.d.ts +1 -1
  8. package/dist/app/features/unreal/index.d.ts +2 -0
  9. package/dist/app/features/unreal/index.js +3 -0
  10. package/dist/app/features/unreal/unreal.def.d.ts +236 -0
  11. package/dist/app/features/unreal/unreal.def.js +379 -0
  12. package/dist/app/features/unreal/unreal.run.d.ts +96 -0
  13. package/dist/app/features/unreal/unreal.run.js +217 -0
  14. package/dist/app/registry.js +5 -0
  15. package/dist/bin/agent-sandbox.js +2 -2
  16. package/dist/bin/{chunk-SUYYVIDW.js → chunk-3GAXLATK.js} +58 -5
  17. package/dist/bin/{chunk-IZRGTSQ5.js → chunk-F4PVBN23.js} +2465 -1392
  18. package/dist/bin/{chunk-KH4MI2U5.js → chunk-G3TG4ZT7.js} +1 -1
  19. package/dist/bin/claude-host.js +2 -2
  20. package/dist/bin/claude-sbx.js +2 -2
  21. package/dist/bin/codex-sbx.js +2 -2
  22. package/dist/bin/gemini-sbx.js +2 -2
  23. package/dist/bin/sandbox.js +2 -2
  24. package/dist/bin/sbx-hide.js +2 -2
  25. package/dist/bin/sbx-show.js +2 -2
  26. package/dist/cli/commands/launch/launch.js +5 -2
  27. package/dist/cli/commands/registry.js +3 -0
  28. package/dist/cli/manifest.d.ts +18 -0
  29. package/dist/cli/manifest.js +26 -0
  30. package/dist/cli/menu/coverage-exempt.js +1 -0
  31. package/dist/cli/menu/pages/sandbox-page.d.ts +3 -0
  32. package/dist/cli/menu/pages/sandbox-page.js +34 -4
  33. package/dist/cli/menu/views.js +2 -0
  34. package/dist/core/config/defaults.js +18 -4
  35. package/dist/core/schema/config.d.ts +9 -7
  36. package/dist/core/schema/pc-installs.d.ts +3 -1
  37. package/dist/core/schema/pc-installs.js +10 -1
  38. package/dist/core/schema/toolchains.js +1 -1
  39. package/dist/guest/accounts/kinds/epic.js +18 -13
  40. package/dist/guest/apps/after-install.d.ts +1 -1
  41. package/dist/guest/apps/after-install.js +6 -1
  42. package/dist/guest/apps/app-installer.d.ts +1 -0
  43. package/dist/guest/apps/app-installer.js +13 -3
  44. package/dist/guest/apps/comet-unpack.js +3 -2
  45. package/dist/guest/apps/resolvers-gamedev.js +55 -1
  46. package/dist/guest/boot/boot.js +14 -1
  47. package/dist/guest/boot/guide.js +24 -0
  48. package/dist/guest/daemon/daemon.js +3 -0
  49. package/dist/guest/setup/addon-mcp.d.ts +7 -0
  50. package/dist/guest/setup/addon-mcp.js +19 -4
  51. package/dist/guest/setup/browser-gpu.js +14 -11
  52. package/dist/guest/setup/headroom.js +4 -0
  53. package/dist/guest/toolchains/engines/epic-launcher.d.ts +26 -0
  54. package/dist/guest/toolchains/engines/epic-launcher.js +127 -0
  55. package/dist/guest/toolchains/engines/unreal-engines.d.ts +21 -1
  56. package/dist/guest/toolchains/engines/unreal-engines.js +163 -3
  57. package/dist/guest/toolchains/engines/unreal-status.d.ts +13 -0
  58. package/dist/guest/toolchains/engines/unreal-status.js +41 -0
  59. package/dist/guest/toolchains/native/debuggers.d.ts +6 -0
  60. package/dist/guest/toolchains/native/debuggers.js +57 -0
  61. package/dist/guest/toolchains/native/mesa.js +15 -8
  62. package/dist/guest/toolchains/native/rust-extras.d.ts +7 -0
  63. package/dist/guest/toolchains/native/rust-extras.js +23 -1
  64. package/dist/guest/toolchains/native/unreal.d.ts +2 -2
  65. package/dist/guest/toolchains/native/unreal.js +96 -18
  66. package/dist/guest/toolchains/plan.js +12 -1
  67. package/dist/guest/toolchains/tools/vscode-profile.js +2 -0
  68. package/dist/host/accounts/kinds/epic.js +11 -5
  69. package/dist/host/accounts/source.d.ts +2 -0
  70. package/dist/host/accounts/source.js +1 -0
  71. package/dist/host/pc-installs/discover.d.ts +2 -0
  72. package/dist/host/pc-installs/discover.js +25 -5
  73. package/dist/host/pc-installs/epic.d.ts +3 -0
  74. package/dist/host/pc-installs/epic.js +33 -2
  75. package/dist/host/pc-installs/source.d.ts +1 -1
  76. package/dist/host/pc-installs/unreal-vault.d.ts +11 -0
  77. package/dist/host/pc-installs/unreal-vault.js +78 -0
  78. package/dist/host/pc-installs/unreal.d.ts +36 -0
  79. package/dist/host/pc-installs/unreal.js +145 -2
  80. package/dist/host/profile/claude-profile.d.ts +8 -0
  81. package/dist/host/profile/claude-profile.js +43 -4
  82. package/dist/host/profile/index.d.ts +1 -1
  83. package/dist/host/profile/index.js +1 -1
  84. package/dist/runtime/agent.js +81 -7
  85. package/dist/runtime/daemon.js +2645 -1287
  86. package/dist/runtime/db.js +81 -7
  87. package/dist/runtime/main.js +2901 -1722
  88. package/dist/runtime/netproxy.js +81 -7
  89. package/dist/runtime/tool.js +81 -7
  90. package/dist/runtime/view.js +81 -7
  91. package/dist/selftest/agent-paths.test.js +1 -0
  92. package/dist/selftest/agents-web.test.js +12 -0
  93. package/dist/selftest/engines.test.js +602 -3
  94. package/dist/selftest/heavy-load.test.js +3 -1
  95. package/dist/selftest/hostile-input.test.js +11 -1
  96. package/dist/selftest/index.js +2 -0
  97. package/dist/selftest/menu-screens.js +3 -1
  98. package/dist/selftest/mixamo.test.d.ts +2 -0
  99. package/dist/selftest/mixamo.test.js +60 -0
  100. package/dist/selftest/secrets.test.js +36 -1
  101. package/dist/selftest/support/engine-golden.js +3 -0
  102. package/dist/selftest/support/fixtures.d.ts +3 -1
  103. package/dist/selftest/support/unreal-sample.d.ts +2 -0
  104. package/dist/selftest/support/unreal-sample.js +83 -0
  105. package/dist/selftest/toolchains.test.js +32 -2
  106. package/dist/shared/accounts/index.d.ts +1 -1
  107. package/dist/shared/accounts/index.js +1 -1
  108. package/dist/shared/accounts/kinds/epic.d.ts +6 -1
  109. package/dist/shared/accounts/kinds/epic.js +11 -1
  110. package/dist/shared/apps/associations.d.ts +7 -0
  111. package/dist/shared/apps/associations.js +26 -0
  112. package/dist/shared/apps/catalogue-agents-web.d.ts +4 -1
  113. package/dist/shared/apps/catalogue-agents-web.js +5 -2
  114. package/dist/shared/apps/catalogue-gamedev.js +71 -1
  115. package/dist/shared/apps/index.d.ts +2 -0
  116. package/dist/shared/apps/index.js +2 -0
  117. package/dist/shared/apps/preview.d.ts +2 -0
  118. package/dist/shared/apps/preview.js +10 -0
  119. package/dist/shared/browser-policy.d.ts +14 -0
  120. package/dist/shared/browser-policy.js +22 -0
  121. package/dist/shared/io/index.d.ts +1 -0
  122. package/dist/shared/io/index.js +1 -0
  123. package/dist/shared/io/rotate-log.d.ts +2 -0
  124. package/dist/shared/io/rotate-log.js +16 -0
  125. package/dist/shared/memory/policy.d.ts +5 -0
  126. package/dist/shared/memory/policy.js +7 -0
  127. package/dist/shared/paths/pc-installs.d.ts +13 -2
  128. package/dist/shared/paths/pc-installs.js +1 -0
  129. package/dist/shared/readiness.d.ts +0 -1
  130. package/dist/shared/readiness.js +0 -1
  131. package/dist/shared/signer.d.ts +4 -0
  132. package/dist/shared/signer.js +2 -0
  133. package/dist/shared/unreal/engines.d.ts +161 -0
  134. package/dist/shared/unreal/engines.js +308 -0
  135. package/dist/shared/unreal/guide.d.ts +19 -0
  136. package/dist/shared/unreal/guide.js +105 -0
  137. package/dist/shared/unreal/index.d.ts +7 -0
  138. package/dist/shared/unreal/index.js +8 -0
  139. package/dist/shared/unreal/launcher-files.d.ts +88 -0
  140. package/dist/shared/unreal/launcher-files.js +292 -0
  141. package/dist/shared/unreal/mixamo.d.ts +5 -0
  142. package/dist/shared/unreal/mixamo.js +16 -0
  143. package/dist/shared/unreal/room.d.ts +17 -0
  144. package/dist/shared/unreal/room.js +34 -0
  145. package/dist/shared/unreal/status.d.ts +54 -0
  146. package/dist/shared/unreal/status.js +57 -0
  147. package/dist/shared/unreal/vault.d.ts +21 -0
  148. package/dist/shared/unreal/vault.js +67 -0
  149. package/dist/shared/unreal/vs-check.d.ts +39 -0
  150. package/dist/shared/unreal/vs-check.js +79 -0
  151. package/dist/web/index.html +1 -1
  152. package/dist/web/{main-CCILLX2M.js → main-FNE6XEHA.js} +84 -84
  153. package/package.json +1 -1
  154. package/sandbox/csharp/VsSetup.cs +210 -0
  155. package/sandbox/scripts/get-vs-setup.ps1 +93 -0
  156. package/sandbox/scripts/set-registry-values.ps1 +35 -0
  157. package/schemas/config.schema.json +35 -2
  158. package/schemas/sandbox-config.schema.json +8 -1
@@ -0,0 +1,57 @@
1
+ // What the sandbox last found for Unreal (tools\unreal\status.json): its engines, which engine each project builds
2
+ // with, the Epic Games Launcher's install folder, Visual Studio, the debuggers and the derived data cache. The sandbox
3
+ // writes it every boot and when a project joins; the Unreal page on this PC reads it. It is written by the guest, so
4
+ // the host reads it with this schema (bounded strings and lists) and prints its text through safeText.
5
+ import { z } from 'zod';
6
+ /** The file in tools\unreal. */
7
+ export const UNREAL_STATUS_FILE = 'status.json';
8
+ const Text = (max = 400) => z.string().max(max);
9
+ export const UnrealStatusSchema = z.object({
10
+ updatedAt: Text(40),
11
+ engines: z
12
+ .array(z.object({
13
+ id: Text(100),
14
+ dir: Text(),
15
+ version: Text(40),
16
+ build: z.enum(['installed', 'source']),
17
+ origin: z.enum(['pc', 'pc-folder', 'launcher', 'data', 'project']),
18
+ writable: z.boolean(),
19
+ /** Its size on disk, when it was counted (the launcher's manifest says it). */
20
+ sizeBytes: z.number().int().min(0).nullable(),
21
+ }))
22
+ .max(32),
23
+ projects: z
24
+ .array(z.object({
25
+ workspace: Text(),
26
+ /** The engine's folder, null when there is none for it. */
27
+ engine: Text().nullable(),
28
+ reason: Text(),
29
+ }))
30
+ .max(64),
31
+ launcher: z.object({
32
+ installed: z.boolean(),
33
+ /** Where the launcher installs engines; null when it could not be set. */
34
+ installLocation: Text().nullable(),
35
+ /** Why engines would not go to the data disk (shown loudly), null when they do. */
36
+ problem: Text(600).nullable(),
37
+ freeBytes: z.number().min(0).nullable(),
38
+ needBytes: z.number().min(0),
39
+ }),
40
+ visualStudio: z.object({
41
+ version: Text(60),
42
+ path: Text(),
43
+ /** "kept on the data disk", "installed" ... ('' when there is none). */
44
+ how: Text(100),
45
+ /** What UnrealBuildTool's way of looking finds (the Setup API, MSVC, the Windows SDK), in plain words. */
46
+ check: Text(600),
47
+ /** Whether that check found everything a build needs. */
48
+ ok: z.boolean(),
49
+ }),
50
+ /** cdb.exe of the Windows SDK's debuggers, null when they are missing. */
51
+ debugger: Text().nullable(),
52
+ ddc: z.object({ mode: z.enum(['persisted', 'local']), dir: Text().nullable() }),
53
+ /** This PC's vault cache folders (Fab and Marketplace packs), read-only in the sandbox. */
54
+ vaults: z.array(Text()).max(4).default([]),
55
+ /** The editor's MCP server address when the project's engine has the plugin. */
56
+ mcpUrl: Text(200).nullable(),
57
+ });
@@ -0,0 +1,21 @@
1
+ /** The default vault cache under a ProgramData folder. */
2
+ export declare function defaultVaultDir(programData: string): string;
3
+ /** The vault cache folders a launcher settings text names (VaultCacheDirectories / VaultCacheLocation lines). */
4
+ export declare function vaultDirsFromIni(ini: string): string[];
5
+ export interface VaultFs {
6
+ exists(file: string): boolean;
7
+ list(dir: string): string[];
8
+ /** A file's size, or null when it is a folder or missing. */
9
+ size(file: string): number | null;
10
+ isDir(dir: string): boolean;
11
+ }
12
+ export interface VaultPack {
13
+ readonly name: string;
14
+ /** Bytes counted (at least this much when `partial`). */
15
+ readonly sizeBytes: number;
16
+ readonly partial: boolean;
17
+ /** "content" (data\Content: copy it into a project's Content) or "plugin" (a code plugin: into Plugins). */
18
+ readonly kind: 'content' | 'plugin' | 'other';
19
+ }
20
+ /** The packs in a vault cache folder, by name, with their size (bounded: very big packs read "at least"). */
21
+ export declare function vaultPacks(vault: string, fs: VaultFs): VaultPack[];
@@ -0,0 +1,67 @@
1
+ // The Epic Games Launcher's vault cache: the Fab and Marketplace packs it downloaded but has not added to a project
2
+ // yet, one folder per pack (<VaultCache>\<Pack>\data\Content\..., or data\<Plugin>.uplugin for a code plugin). Where
3
+ // it is comes from the launcher's GameUserSettings.ini (VaultCacheDirectories in launcher 20.3; older files may say
4
+ // VaultCacheLocation), else its default %ProgramData%\Epic\EpicGamesLauncher\VaultCache. Pure apart from the
5
+ // EngineFs-style reads it is given; every walk is bounded.
6
+ import path from 'node:path';
7
+ const win = path.win32;
8
+ const MAX_PACKS = 500;
9
+ const MAX_FILES_PER_PACK = 5_000;
10
+ const MAX_FILES = 50_000;
11
+ /** The default vault cache under a ProgramData folder. */
12
+ export function defaultVaultDir(programData) {
13
+ return win.join(programData, 'Epic', 'EpicGamesLauncher', 'VaultCache');
14
+ }
15
+ /** The vault cache folders a launcher settings text names (VaultCacheDirectories / VaultCacheLocation lines). */
16
+ export function vaultDirsFromIni(ini) {
17
+ const found = [];
18
+ for (const raw of ini.split(/\r?\n/).slice(0, 5000)) {
19
+ const m = /^\s*[+.-]?\s*(VaultCacheDirectories|VaultCacheLocation)\s*=\s*(.{0,2000})$/i.exec(raw);
20
+ if (!m)
21
+ continue;
22
+ for (const hit of m[2].matchAll(/[A-Za-z]:[\\/][^"\r\n,()]{0,400}/g)) {
23
+ const dir = win.normalize(hit[0].trim().replace(/\//g, '\\')).replace(/\\+$/, '');
24
+ if (dir.length > 3 && !found.some((f) => f.toLowerCase() === dir.toLowerCase()))
25
+ found.push(dir);
26
+ }
27
+ }
28
+ return found;
29
+ }
30
+ function walk(dir, fs, budget) {
31
+ let bytes = 0;
32
+ let files = 0;
33
+ const stack = [dir];
34
+ while (stack.length) {
35
+ const at = stack.pop();
36
+ for (const name of fs.list(at)) {
37
+ if (++files > MAX_FILES_PER_PACK || --budget.left < 0)
38
+ return { bytes, partial: true };
39
+ const full = win.join(at, name);
40
+ const size = fs.size(full);
41
+ if (size === null) {
42
+ if (fs.isDir(full))
43
+ stack.push(full);
44
+ }
45
+ else
46
+ bytes += size;
47
+ }
48
+ }
49
+ return { bytes, partial: false };
50
+ }
51
+ /** The packs in a vault cache folder, by name, with their size (bounded: very big packs read "at least"). */
52
+ export function vaultPacks(vault, fs) {
53
+ const budget = { left: MAX_FILES };
54
+ return fs
55
+ .list(vault)
56
+ .filter((n) => !n.startsWith('.') && fs.isDir(win.join(vault, n)))
57
+ .sort((a, b) => a.localeCompare(b))
58
+ .slice(0, MAX_PACKS)
59
+ .map((name) => {
60
+ const dir = win.join(vault, name);
61
+ const data = win.join(dir, 'data');
62
+ const plugin = fs.list(data).some((n) => /\.uplugin$/i.test(n));
63
+ const kind = plugin ? 'plugin' : fs.isDir(win.join(data, 'Content')) ? 'content' : 'other';
64
+ const { bytes, partial } = walk(dir, fs, budget);
65
+ return { name, sizeBytes: bytes, partial, kind };
66
+ });
67
+ }
@@ -0,0 +1,39 @@
1
+ import { z } from 'zod';
2
+ export declare const VsSetupReportSchema: z.ZodObject<{
3
+ setupError: z.ZodString;
4
+ instances: z.ZodArray<z.ZodObject<{
5
+ instanceId: z.ZodString;
6
+ installationPath: z.ZodString;
7
+ installationVersion: z.ZodString;
8
+ productId: z.ZodString;
9
+ state: z.ZodNumber;
10
+ isComplete: z.ZodBoolean;
11
+ isLaunchable: z.ZodBoolean;
12
+ packages: z.ZodArray<z.ZodString>;
13
+ toolchains: z.ZodArray<z.ZodObject<{
14
+ version: z.ZodString;
15
+ cl: z.ZodBoolean;
16
+ link: z.ZodBoolean;
17
+ }, z.core.$strip>>;
18
+ }, z.core.$strip>>;
19
+ kitsRoots: z.ZodArray<z.ZodObject<{
20
+ where: z.ZodString;
21
+ path: z.ZodString;
22
+ }, z.core.$strip>>;
23
+ sdks: z.ZodArray<z.ZodObject<{
24
+ version: z.ZodString;
25
+ root: z.ZodString;
26
+ windowsH: z.ZodBoolean;
27
+ kernel32: z.ZodBoolean;
28
+ ucrt: z.ZodBoolean;
29
+ }, z.core.$strip>>;
30
+ }, z.core.$strip>;
31
+ export type VsSetupReport = z.output<typeof VsSetupReportSchema>;
32
+ /** The oldest MSVC Unreal 5.4+ builds with. */
33
+ export declare const MIN_MSVC: readonly [14, 38];
34
+ export interface VsVerdict {
35
+ readonly ok: boolean;
36
+ readonly text: string;
37
+ }
38
+ /** What UnrealBuildTool would find, in plain words. */
39
+ export declare function vsVerdict(r: VsSetupReport): VsVerdict;
@@ -0,0 +1,79 @@
1
+ // Whether UnrealBuildTool would find a compiler: the verdict on what sandbox\scripts\get-vs-setup.ps1 reports. UBT
2
+ // (MicrosoftPlatformSDK / VCToolChain) lists Visual Studio instances through the Setup Configuration API
3
+ // (EnumAllInstances), takes those with the MSVC x64 tools (Microsoft.VisualStudio.Component.VC.Tools.x86.x64) and a
4
+ // VC\Tools\MSVC\<version> with Hostx64\x64\cl.exe, and a Windows SDK under the KitsRoot10 the registry names with its
5
+ // headers and libraries. Unreal 5.4 and later want MSVC 14.38 or newer. Pure.
6
+ import { z } from 'zod';
7
+ export const VsSetupReportSchema = z.object({
8
+ setupError: z.string().max(2000),
9
+ instances: z
10
+ .array(z.object({
11
+ instanceId: z.string().max(100),
12
+ installationPath: z.string().max(400),
13
+ installationVersion: z.string().max(60),
14
+ productId: z.string().max(200),
15
+ state: z.number().int().min(0),
16
+ isComplete: z.boolean(),
17
+ isLaunchable: z.boolean(),
18
+ packages: z.array(z.string().max(200)).max(50),
19
+ toolchains: z.array(z.object({ version: z.string().max(40), cl: z.boolean(), link: z.boolean() })).max(50),
20
+ }))
21
+ .max(20),
22
+ kitsRoots: z.array(z.object({ where: z.string().max(40), path: z.string().max(400) })).max(10),
23
+ sdks: z
24
+ .array(z.object({
25
+ version: z.string().max(40),
26
+ root: z.string().max(400),
27
+ windowsH: z.boolean(),
28
+ kernel32: z.boolean(),
29
+ ucrt: z.boolean(),
30
+ }))
31
+ .max(50),
32
+ });
33
+ /** The oldest MSVC Unreal 5.4+ builds with. */
34
+ export const MIN_MSVC = [14, 38];
35
+ const parts = (v) => v.split('.').map((p) => parseInt(p, 10) || 0);
36
+ const newer = (a, b) => {
37
+ const x = parts(a);
38
+ const y = parts(b);
39
+ for (let i = 0; i < Math.max(x.length, y.length); i++)
40
+ if ((x[i] ?? 0) !== (y[i] ?? 0))
41
+ return (x[i] ?? 0) - (y[i] ?? 0);
42
+ return 0;
43
+ };
44
+ /** What UnrealBuildTool would find, in plain words. */
45
+ export function vsVerdict(r) {
46
+ if (r.setupError)
47
+ return { ok: false, text: 'the Setup Configuration API failed: ' + r.setupError.slice(0, 300) };
48
+ const usable = r.instances.filter((i) => (i.state & 1) === 1 && i.isComplete && i.packages.includes('Microsoft.VisualStudio.Component.VC.Tools.x86.x64'));
49
+ if (!usable.length)
50
+ return {
51
+ ok: false,
52
+ text: r.instances.length
53
+ ? 'Visual Studio is listed, but no complete instance has the C++ x64 tools'
54
+ : 'the Setup Configuration API lists no Visual Studio',
55
+ };
56
+ const tools = usable
57
+ .flatMap((i) => i.toolchains.filter((t) => t.cl && t.link).map((t) => ({ i, t })))
58
+ .sort((a, b) => newer(b.t.version, a.t.version));
59
+ const best = tools[0];
60
+ if (!best)
61
+ return { ok: false, text: 'Visual Studio has no MSVC with the x64 compiler (VC\\Tools\\MSVC)' };
62
+ const [major, minor] = parts(best.t.version);
63
+ const oldMsvc = major < MIN_MSVC[0] || (major === MIN_MSVC[0] && minor < MIN_MSVC[1]);
64
+ const sdk = r.sdks.filter((s) => s.windowsH && s.kernel32 && s.ucrt).sort((a, b) => newer(b.version, a.version))[0];
65
+ const where = 'Visual Studio ' + best.i.installationVersion + ' at ' + best.i.installationPath;
66
+ if (!sdk)
67
+ return { ok: false, text: where + ', MSVC ' + best.t.version + ', but no complete Windows SDK' };
68
+ return {
69
+ ok: !oldMsvc,
70
+ text: where +
71
+ ', MSVC ' +
72
+ best.t.version +
73
+ (oldMsvc ? ' (too old: Unreal 5.4 and later need 14.38 or newer)' : '') +
74
+ ', Windows SDK ' +
75
+ sdk.version +
76
+ ' at ' +
77
+ sdk.root,
78
+ };
79
+ }
@@ -6,7 +6,7 @@
6
6
  <title>Sandbox</title>
7
7
  <link rel="icon" href="data:," />
8
8
  <link rel="stylesheet" href="/main-XT7T6ODM.css" />
9
- <script type="module" src="/main-CCILLX2M.js"></script>
9
+ <script type="module" src="/main-FNE6XEHA.js"></script>
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>