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
@@ -25678,7 +25678,7 @@ var ToolchainsSchema = external_exports.strictObject({
25678
25678
  `"auto" (default): on the sandbox's own disk when C: has 25 GB free at boot, else "separate" (builds then write through the mapped workspace, which can overload this PC's disk). "shared": cargo's default target\\ (shared with builds on this PC, so builds on either side invalidate the other), "separate": <workspace>\\target\\sandbox (kept, no cross-talk), "local": on the sandbox's own disk (fastest, lost every boot), or a guest path.`
25679
25679
  ),
25680
25680
  linker: external_exports.enum(["lld", "gnu"]).describe(
25681
- `GNU host: "lld" links with Rust's own lld through MinGW's gcc (much less memory than GNU ld), "gnu" with GNU ld.`
25681
+ `"lld" (default) links with Rust's own lld: through MinGW's gcc on the GNU host (much less memory than GNU ld), and instead of link.exe on the MSVC host (link.exe writes executables into mapped folders as all zeros: os error 1392). "gnu" keeps GNU ld / link.exe.`
25682
25682
  ),
25683
25683
  linkSlots: external_exports.union([external_exports.literal("auto"), external_exports.number().int().min(1).max(32)]).describe(
25684
25684
  'GNU host: how many programs may link at the same time in the whole sandbox (other links wait). "auto" = one per 6 GB of sandbox memory, 1 to 4 (the memory governor slows links down too when memory runs short).'
@@ -25936,7 +25936,7 @@ var CHROME_DEVTOOLS_MCP_VERSION = "1.12.0";
25936
25936
  var BROWSER_USE_VERSION = "0.13.14";
25937
25937
  var PERPLEXITY_COMPUTER_MCP_URL = "https://www.perplexity.ai/rest/computer/mcp";
25938
25938
  var COMET_SIGNER = {
25939
- subject: ['^CN="?PERPLEXITY AI, INC\\.?"?(,|$)', '(^|, )O="?PERPLEXITY AI, INC\\.?"?(,|$)'],
25939
+ subject: ['(^|, )CN="?PERPLEXITY AI, INC\\.?"?(,|$)', '(^|, )O="?PERPLEXITY AI, INC\\.?"?(,|$)'],
25940
25940
  issuer: ["^CN=GlobalSign GCC R45 EV CodeSigning CA 2020(,|$)"]
25941
25941
  };
25942
25942
  var EDGE_EXE = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
@@ -26038,7 +26038,77 @@ var AGENTS_WEB_APPS = [
26038
26038
  ];
26039
26039
 
26040
26040
  // src/shared/apps/catalogue-gamedev.ts
26041
- var GAMEDEV_APPS = [];
26041
+ var GAMEDEV_APPS = [
26042
+ {
26043
+ id: "krita",
26044
+ name: "Krita",
26045
+ category: "gamedev",
26046
+ about: "Painting and texture editor (PSD, layers, brushes), checked against the SHA-256 download.kde.org publishes.",
26047
+ size: "450 MB",
26048
+ source: { resolve: "krita" },
26049
+ exe: "krita.exe",
26050
+ needs: ["mesa"]
26051
+ },
26052
+ {
26053
+ id: "inkscape",
26054
+ name: "Inkscape",
26055
+ category: "gamedev",
26056
+ about: "Vector graphics for UI, icons and 2D art (SVG), checked against the SHA-256 inkscape.org publishes.",
26057
+ size: "400 MB",
26058
+ source: { resolve: "inkscape" },
26059
+ exe: "inkscape.exe",
26060
+ needs: ["7zip"]
26061
+ },
26062
+ {
26063
+ id: "audacity",
26064
+ name: "Audacity",
26065
+ category: "gamedev",
26066
+ about: "Records and edits sound effects and music (WAV, OGG, FLAC).",
26067
+ size: "80 MB",
26068
+ source: { github: "audacity/audacity", asset: "^audacity-win-[\\d.]+-(?:64bit\\.zip|x86_64\\.7z)$" },
26069
+ exe: "Audacity.exe",
26070
+ needs: ["7zip"]
26071
+ },
26072
+ {
26073
+ id: "renderdoc",
26074
+ name: "RenderDoc",
26075
+ category: "gamedev",
26076
+ about: "Captures a frame of a game (Unreal's -d3d12/-vulkan builds) to inspect every draw call, texture and shader. Needs the sandbox's GPU (vGPU) for live captures.",
26077
+ size: "70 MB",
26078
+ source: { resolve: "renderdoc" },
26079
+ exe: "qrenderdoc.exe"
26080
+ },
26081
+ {
26082
+ id: "f3d",
26083
+ name: "F3D",
26084
+ category: "gamedev",
26085
+ about: "Fast 3D viewer (FBX, glTF/GLB, OBJ, STL, PLY, 3DS, USD); renders still previews from the command line.",
26086
+ size: "100 MB",
26087
+ source: { github: "f3d-app/f3d", asset: "^F3D-[\\d.]+-Windows-x86_64\\.zip$" },
26088
+ exe: "f3d.exe",
26089
+ needs: ["mesa"]
26090
+ },
26091
+ {
26092
+ id: "imagemagick",
26093
+ name: "ImageMagick",
26094
+ category: "gamedev",
26095
+ about: "Converts and thumbnails textures (TGA, PSD, DDS, EXR, HDR) and builds contact sheets (magick montage).",
26096
+ size: "150 MB",
26097
+ source: { github: "ImageMagick/ImageMagick", asset: "^ImageMagick-[\\d.]+-\\d+-portable-Q16-HDRI-x64\\.7z$" },
26098
+ exe: "magick.exe",
26099
+ cli: true,
26100
+ needs: ["7zip"]
26101
+ },
26102
+ {
26103
+ id: "nomacs",
26104
+ name: "nomacs",
26105
+ category: "gamedev",
26106
+ about: "Image viewer for textures (TGA, PSD, DDS, EXR).",
26107
+ size: "60 MB",
26108
+ source: { github: "nomacs/nomacs", asset: "^nomacs-portable-win\\.zip$" },
26109
+ exe: "nomacs.exe"
26110
+ }
26111
+ ];
26042
26112
 
26043
26113
  // src/shared/apps/catalogue-mobile.ts
26044
26114
  var MOBILE_APPS = [];
@@ -27267,10 +27337,14 @@ var PcInstallsSchema = external_exports.strictObject({
27267
27337
  "Epic Games Launcher games (by their app name)",
27268
27338
  '["Fortnite"]'
27269
27339
  ),
27270
- unrealEngines: pick2(
27271
- external_exports.string().regex(/^(UE_)?\d+\.\d+$/),
27272
- "Unreal Engine versions installed with the Epic Games Launcher",
27273
- '["5.4"]'
27340
+ unrealEngines: external_exports.union([external_exports.literal("auto"), external_exports.boolean(), external_exports.array(external_exports.string().regex(/^(UE_)?\d+\.\d+$/))]).describe(
27341
+ 'Unreal Engine versions installed on this PC (with the Epic Games Launcher, or source builds it lists), read-only in the sandbox under C:\\PcInstalls\\unreal and registered there, so projects build with them without a download. "auto" = all of them whenever the sandbox is set up for Unreal, true = always, false = never, or a list (e.g. ["5.4"]).'
27342
+ ),
27343
+ unrealEngineFolders: external_exports.array(external_exports.string().min(3).max(260)).max(8).describe(
27344
+ "Unreal Engine folders of this PC to use in the sandbox, writable (a source build, or a copy you build plugins into): each must hold Engine\\Build\\Build.version. Mapped under C:\\PcInstalls\\unreal and registered there."
27345
+ ),
27346
+ unrealAssets: external_exports.union([external_exports.literal("auto"), external_exports.boolean()]).describe(
27347
+ `The Epic Games Launcher's vault cache of this PC (the Fab and Marketplace packs you downloaded), read-only in the sandbox at C:\\PcInstalls\\unreal\\Vault: what you download on your PC is there for the agents at once. "auto" = whenever the sandbox is set up for Unreal, true = always, false = never.`
27274
27348
  ),
27275
27349
  unityEditors: pick2(
27276
27350
  external_exports.string().regex(/^\d+\.\d+\.\d+[abfp]\d+$/),
@@ -26051,7 +26051,7 @@ var ToolchainsSchema = external_exports.strictObject({
26051
26051
  `"auto" (default): on the sandbox's own disk when C: has 25 GB free at boot, else "separate" (builds then write through the mapped workspace, which can overload this PC's disk). "shared": cargo's default target\\ (shared with builds on this PC, so builds on either side invalidate the other), "separate": <workspace>\\target\\sandbox (kept, no cross-talk), "local": on the sandbox's own disk (fastest, lost every boot), or a guest path.`
26052
26052
  ),
26053
26053
  linker: external_exports.enum(["lld", "gnu"]).describe(
26054
- `GNU host: "lld" links with Rust's own lld through MinGW's gcc (much less memory than GNU ld), "gnu" with GNU ld.`
26054
+ `"lld" (default) links with Rust's own lld: through MinGW's gcc on the GNU host (much less memory than GNU ld), and instead of link.exe on the MSVC host (link.exe writes executables into mapped folders as all zeros: os error 1392). "gnu" keeps GNU ld / link.exe.`
26055
26055
  ),
26056
26056
  linkSlots: external_exports.union([external_exports.literal("auto"), external_exports.number().int().min(1).max(32)]).describe(
26057
26057
  'GNU host: how many programs may link at the same time in the whole sandbox (other links wait). "auto" = one per 6 GB of sandbox memory, 1 to 4 (the memory governor slows links down too when memory runs short).'
@@ -26309,7 +26309,7 @@ var CHROME_DEVTOOLS_MCP_VERSION = "1.12.0";
26309
26309
  var BROWSER_USE_VERSION = "0.13.14";
26310
26310
  var PERPLEXITY_COMPUTER_MCP_URL = "https://www.perplexity.ai/rest/computer/mcp";
26311
26311
  var COMET_SIGNER = {
26312
- subject: ['^CN="?PERPLEXITY AI, INC\\.?"?(,|$)', '(^|, )O="?PERPLEXITY AI, INC\\.?"?(,|$)'],
26312
+ subject: ['(^|, )CN="?PERPLEXITY AI, INC\\.?"?(,|$)', '(^|, )O="?PERPLEXITY AI, INC\\.?"?(,|$)'],
26313
26313
  issuer: ["^CN=GlobalSign GCC R45 EV CodeSigning CA 2020(,|$)"]
26314
26314
  };
26315
26315
  var EDGE_EXE = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
@@ -26411,7 +26411,77 @@ var AGENTS_WEB_APPS = [
26411
26411
  ];
26412
26412
 
26413
26413
  // src/shared/apps/catalogue-gamedev.ts
26414
- var GAMEDEV_APPS = [];
26414
+ var GAMEDEV_APPS = [
26415
+ {
26416
+ id: "krita",
26417
+ name: "Krita",
26418
+ category: "gamedev",
26419
+ about: "Painting and texture editor (PSD, layers, brushes), checked against the SHA-256 download.kde.org publishes.",
26420
+ size: "450 MB",
26421
+ source: { resolve: "krita" },
26422
+ exe: "krita.exe",
26423
+ needs: ["mesa"]
26424
+ },
26425
+ {
26426
+ id: "inkscape",
26427
+ name: "Inkscape",
26428
+ category: "gamedev",
26429
+ about: "Vector graphics for UI, icons and 2D art (SVG), checked against the SHA-256 inkscape.org publishes.",
26430
+ size: "400 MB",
26431
+ source: { resolve: "inkscape" },
26432
+ exe: "inkscape.exe",
26433
+ needs: ["7zip"]
26434
+ },
26435
+ {
26436
+ id: "audacity",
26437
+ name: "Audacity",
26438
+ category: "gamedev",
26439
+ about: "Records and edits sound effects and music (WAV, OGG, FLAC).",
26440
+ size: "80 MB",
26441
+ source: { github: "audacity/audacity", asset: "^audacity-win-[\\d.]+-(?:64bit\\.zip|x86_64\\.7z)$" },
26442
+ exe: "Audacity.exe",
26443
+ needs: ["7zip"]
26444
+ },
26445
+ {
26446
+ id: "renderdoc",
26447
+ name: "RenderDoc",
26448
+ category: "gamedev",
26449
+ about: "Captures a frame of a game (Unreal's -d3d12/-vulkan builds) to inspect every draw call, texture and shader. Needs the sandbox's GPU (vGPU) for live captures.",
26450
+ size: "70 MB",
26451
+ source: { resolve: "renderdoc" },
26452
+ exe: "qrenderdoc.exe"
26453
+ },
26454
+ {
26455
+ id: "f3d",
26456
+ name: "F3D",
26457
+ category: "gamedev",
26458
+ about: "Fast 3D viewer (FBX, glTF/GLB, OBJ, STL, PLY, 3DS, USD); renders still previews from the command line.",
26459
+ size: "100 MB",
26460
+ source: { github: "f3d-app/f3d", asset: "^F3D-[\\d.]+-Windows-x86_64\\.zip$" },
26461
+ exe: "f3d.exe",
26462
+ needs: ["mesa"]
26463
+ },
26464
+ {
26465
+ id: "imagemagick",
26466
+ name: "ImageMagick",
26467
+ category: "gamedev",
26468
+ about: "Converts and thumbnails textures (TGA, PSD, DDS, EXR, HDR) and builds contact sheets (magick montage).",
26469
+ size: "150 MB",
26470
+ source: { github: "ImageMagick/ImageMagick", asset: "^ImageMagick-[\\d.]+-\\d+-portable-Q16-HDRI-x64\\.7z$" },
26471
+ exe: "magick.exe",
26472
+ cli: true,
26473
+ needs: ["7zip"]
26474
+ },
26475
+ {
26476
+ id: "nomacs",
26477
+ name: "nomacs",
26478
+ category: "gamedev",
26479
+ about: "Image viewer for textures (TGA, PSD, DDS, EXR).",
26480
+ size: "60 MB",
26481
+ source: { github: "nomacs/nomacs", asset: "^nomacs-portable-win\\.zip$" },
26482
+ exe: "nomacs.exe"
26483
+ }
26484
+ ];
26415
26485
 
26416
26486
  // src/shared/apps/catalogue-mobile.ts
26417
26487
  var MOBILE_APPS = [];
@@ -27640,10 +27710,14 @@ var PcInstallsSchema = external_exports.strictObject({
27640
27710
  "Epic Games Launcher games (by their app name)",
27641
27711
  '["Fortnite"]'
27642
27712
  ),
27643
- unrealEngines: pick2(
27644
- external_exports.string().regex(/^(UE_)?\d+\.\d+$/),
27645
- "Unreal Engine versions installed with the Epic Games Launcher",
27646
- '["5.4"]'
27713
+ unrealEngines: external_exports.union([external_exports.literal("auto"), external_exports.boolean(), external_exports.array(external_exports.string().regex(/^(UE_)?\d+\.\d+$/))]).describe(
27714
+ 'Unreal Engine versions installed on this PC (with the Epic Games Launcher, or source builds it lists), read-only in the sandbox under C:\\PcInstalls\\unreal and registered there, so projects build with them without a download. "auto" = all of them whenever the sandbox is set up for Unreal, true = always, false = never, or a list (e.g. ["5.4"]).'
27715
+ ),
27716
+ unrealEngineFolders: external_exports.array(external_exports.string().min(3).max(260)).max(8).describe(
27717
+ "Unreal Engine folders of this PC to use in the sandbox, writable (a source build, or a copy you build plugins into): each must hold Engine\\Build\\Build.version. Mapped under C:\\PcInstalls\\unreal and registered there."
27718
+ ),
27719
+ unrealAssets: external_exports.union([external_exports.literal("auto"), external_exports.boolean()]).describe(
27720
+ `The Epic Games Launcher's vault cache of this PC (the Fab and Marketplace packs you downloaded), read-only in the sandbox at C:\\PcInstalls\\unreal\\Vault: what you download on your PC is there for the agents at once. "auto" = whenever the sandbox is set up for Unreal, true = always, false = never.`
27647
27721
  ),
27648
27722
  unityEditors: pick2(
27649
27723
  external_exports.string().regex(/^\d+\.\d+\.\d+[abfp]\d+$/),
@@ -26254,7 +26254,7 @@ var ToolchainsSchema = external_exports.strictObject({
26254
26254
  `"auto" (default): on the sandbox's own disk when C: has 25 GB free at boot, else "separate" (builds then write through the mapped workspace, which can overload this PC's disk). "shared": cargo's default target\\ (shared with builds on this PC, so builds on either side invalidate the other), "separate": <workspace>\\target\\sandbox (kept, no cross-talk), "local": on the sandbox's own disk (fastest, lost every boot), or a guest path.`
26255
26255
  ),
26256
26256
  linker: external_exports.enum(["lld", "gnu"]).describe(
26257
- `GNU host: "lld" links with Rust's own lld through MinGW's gcc (much less memory than GNU ld), "gnu" with GNU ld.`
26257
+ `"lld" (default) links with Rust's own lld: through MinGW's gcc on the GNU host (much less memory than GNU ld), and instead of link.exe on the MSVC host (link.exe writes executables into mapped folders as all zeros: os error 1392). "gnu" keeps GNU ld / link.exe.`
26258
26258
  ),
26259
26259
  linkSlots: external_exports.union([external_exports.literal("auto"), external_exports.number().int().min(1).max(32)]).describe(
26260
26260
  'GNU host: how many programs may link at the same time in the whole sandbox (other links wait). "auto" = one per 6 GB of sandbox memory, 1 to 4 (the memory governor slows links down too when memory runs short).'
@@ -26512,7 +26512,7 @@ var CHROME_DEVTOOLS_MCP_VERSION = "1.12.0";
26512
26512
  var BROWSER_USE_VERSION = "0.13.14";
26513
26513
  var PERPLEXITY_COMPUTER_MCP_URL = "https://www.perplexity.ai/rest/computer/mcp";
26514
26514
  var COMET_SIGNER = {
26515
- subject: ['^CN="?PERPLEXITY AI, INC\\.?"?(,|$)', '(^|, )O="?PERPLEXITY AI, INC\\.?"?(,|$)'],
26515
+ subject: ['(^|, )CN="?PERPLEXITY AI, INC\\.?"?(,|$)', '(^|, )O="?PERPLEXITY AI, INC\\.?"?(,|$)'],
26516
26516
  issuer: ["^CN=GlobalSign GCC R45 EV CodeSigning CA 2020(,|$)"]
26517
26517
  };
26518
26518
  var EDGE_EXE = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
@@ -26614,7 +26614,77 @@ var AGENTS_WEB_APPS = [
26614
26614
  ];
26615
26615
 
26616
26616
  // src/shared/apps/catalogue-gamedev.ts
26617
- var GAMEDEV_APPS = [];
26617
+ var GAMEDEV_APPS = [
26618
+ {
26619
+ id: "krita",
26620
+ name: "Krita",
26621
+ category: "gamedev",
26622
+ about: "Painting and texture editor (PSD, layers, brushes), checked against the SHA-256 download.kde.org publishes.",
26623
+ size: "450 MB",
26624
+ source: { resolve: "krita" },
26625
+ exe: "krita.exe",
26626
+ needs: ["mesa"]
26627
+ },
26628
+ {
26629
+ id: "inkscape",
26630
+ name: "Inkscape",
26631
+ category: "gamedev",
26632
+ about: "Vector graphics for UI, icons and 2D art (SVG), checked against the SHA-256 inkscape.org publishes.",
26633
+ size: "400 MB",
26634
+ source: { resolve: "inkscape" },
26635
+ exe: "inkscape.exe",
26636
+ needs: ["7zip"]
26637
+ },
26638
+ {
26639
+ id: "audacity",
26640
+ name: "Audacity",
26641
+ category: "gamedev",
26642
+ about: "Records and edits sound effects and music (WAV, OGG, FLAC).",
26643
+ size: "80 MB",
26644
+ source: { github: "audacity/audacity", asset: "^audacity-win-[\\d.]+-(?:64bit\\.zip|x86_64\\.7z)$" },
26645
+ exe: "Audacity.exe",
26646
+ needs: ["7zip"]
26647
+ },
26648
+ {
26649
+ id: "renderdoc",
26650
+ name: "RenderDoc",
26651
+ category: "gamedev",
26652
+ about: "Captures a frame of a game (Unreal's -d3d12/-vulkan builds) to inspect every draw call, texture and shader. Needs the sandbox's GPU (vGPU) for live captures.",
26653
+ size: "70 MB",
26654
+ source: { resolve: "renderdoc" },
26655
+ exe: "qrenderdoc.exe"
26656
+ },
26657
+ {
26658
+ id: "f3d",
26659
+ name: "F3D",
26660
+ category: "gamedev",
26661
+ about: "Fast 3D viewer (FBX, glTF/GLB, OBJ, STL, PLY, 3DS, USD); renders still previews from the command line.",
26662
+ size: "100 MB",
26663
+ source: { github: "f3d-app/f3d", asset: "^F3D-[\\d.]+-Windows-x86_64\\.zip$" },
26664
+ exe: "f3d.exe",
26665
+ needs: ["mesa"]
26666
+ },
26667
+ {
26668
+ id: "imagemagick",
26669
+ name: "ImageMagick",
26670
+ category: "gamedev",
26671
+ about: "Converts and thumbnails textures (TGA, PSD, DDS, EXR, HDR) and builds contact sheets (magick montage).",
26672
+ size: "150 MB",
26673
+ source: { github: "ImageMagick/ImageMagick", asset: "^ImageMagick-[\\d.]+-\\d+-portable-Q16-HDRI-x64\\.7z$" },
26674
+ exe: "magick.exe",
26675
+ cli: true,
26676
+ needs: ["7zip"]
26677
+ },
26678
+ {
26679
+ id: "nomacs",
26680
+ name: "nomacs",
26681
+ category: "gamedev",
26682
+ about: "Image viewer for textures (TGA, PSD, DDS, EXR).",
26683
+ size: "60 MB",
26684
+ source: { github: "nomacs/nomacs", asset: "^nomacs-portable-win\\.zip$" },
26685
+ exe: "nomacs.exe"
26686
+ }
26687
+ ];
26618
26688
 
26619
26689
  // src/shared/apps/catalogue-mobile.ts
26620
26690
  var MOBILE_APPS = [];
@@ -27843,10 +27913,14 @@ var PcInstallsSchema = external_exports.strictObject({
27843
27913
  "Epic Games Launcher games (by their app name)",
27844
27914
  '["Fortnite"]'
27845
27915
  ),
27846
- unrealEngines: pick2(
27847
- external_exports.string().regex(/^(UE_)?\d+\.\d+$/),
27848
- "Unreal Engine versions installed with the Epic Games Launcher",
27849
- '["5.4"]'
27916
+ unrealEngines: external_exports.union([external_exports.literal("auto"), external_exports.boolean(), external_exports.array(external_exports.string().regex(/^(UE_)?\d+\.\d+$/))]).describe(
27917
+ 'Unreal Engine versions installed on this PC (with the Epic Games Launcher, or source builds it lists), read-only in the sandbox under C:\\PcInstalls\\unreal and registered there, so projects build with them without a download. "auto" = all of them whenever the sandbox is set up for Unreal, true = always, false = never, or a list (e.g. ["5.4"]).'
27918
+ ),
27919
+ unrealEngineFolders: external_exports.array(external_exports.string().min(3).max(260)).max(8).describe(
27920
+ "Unreal Engine folders of this PC to use in the sandbox, writable (a source build, or a copy you build plugins into): each must hold Engine\\Build\\Build.version. Mapped under C:\\PcInstalls\\unreal and registered there."
27921
+ ),
27922
+ unrealAssets: external_exports.union([external_exports.literal("auto"), external_exports.boolean()]).describe(
27923
+ `The Epic Games Launcher's vault cache of this PC (the Fab and Marketplace packs you downloaded), read-only in the sandbox at C:\\PcInstalls\\unreal\\Vault: what you download on your PC is there for the agents at once. "auto" = whenever the sandbox is set up for Unreal, true = always, false = never.`
27850
27924
  ),
27851
27925
  unityEditors: pick2(
27852
27926
  external_exports.string().regex(/^\d+\.\d+\.\d+[abfp]\d+$/),
@@ -56,6 +56,7 @@ export const agentPathsSuite = {
56
56
  'C:\\AgentData\\state\\codex\\.sandbox\\setup_marker.json',
57
57
  'C:\\AgentData\\state\\codex\\.sandbox\\deny_read_acl_state.json',
58
58
  'C:\\AgentData\\state\\codex\\tmp\\arg0',
59
+ 'C:\\AgentData\\state\\codex\\tmp\\arg0-windows',
59
60
  ], "codex's DPAPI-sealed sandbox users and setup marker are removed at boot (CryptUnprotectData otherwise)");
60
61
  t.check(HarnessSchema.safeParse({ ...DEFAULTS.harnesses.codex, bootReset: ['..\\login'] }).success === false &&
61
62
  HarnessSchema.safeParse({ ...DEFAULTS.harnesses.codex, bootReset: ['C:\\Windows'] }).success === false, 'bootReset takes only plain paths below the agent state folder');
@@ -622,6 +622,10 @@ export const agentsWebSuite = {
622
622
  issuer: 'CN=GlobalSign GCC R45 EV CodeSigning CA 2020, O=GlobalSign nv-sa, C=BE',
623
623
  };
624
624
  t.check(signerMatches(signed, COMET_SIGNER), 'Perplexity AI, Inc. with its GlobalSign EV certificate passes');
625
+ t.check(signerMatches({
626
+ subject: 'E=dmitryp@perplexity.ai, CN="PERPLEXITY AI, INC.", O="PERPLEXITY AI, INC.", L=San Francisco, S=California, C=US, SERIALNUMBER=6909743, OID.2.5.4.15=Private Organization',
627
+ issuer: signed.issuer,
628
+ }, COMET_SIGNER), 'the subject as Windows reports it (E= contact address first) passes: it was refused before');
625
629
  t.check(!signerMatches(null, COMET_SIGNER) &&
626
630
  !signerMatches({ ...signed, subject: signed.subject.replace('O="PERPLEXITY AI, INC."', 'O=Someone Else') }, COMET_SIGNER) &&
627
631
  !signerMatches({ ...signed, subject: 'CN="PERPLEXITY AI, INC. EVIL", O="PERPLEXITY AI, INC. EVIL"' }, COMET_SIGNER) &&
@@ -639,6 +643,14 @@ export const agentsWebSuite = {
639
643
  t.check(chromiumBin(stage, 'comet.exe') === null, 'a Chrome-bin without the browser does not count');
640
644
  t.write(path.join(stage, 'd', 'Chrome-bin', 'comet.exe'), 'x');
641
645
  t.equal(chromiumBin(stage, 'comet.exe'), path.join(stage, 'd', 'Chrome-bin'), 'the browser folder is found');
646
+ const real = t.dir('web-unpack-real');
647
+ const nested = path.join(real, 'bin', 'Offline', '{a8c89918}', '{42e10078}');
648
+ t.write(path.join(nested, 'mini_installer.exe'), 'x');
649
+ t.write(path.join(real, 'updater.7z'), 'x');
650
+ t.check(path.basename(nextInner(real) ?? '') === 'mini_installer.exe', "Comet's current installer (updater.7z, mini_installer.exe five folders down) is opened stage by stage");
651
+ const only = t.dir('web-unpack-first');
652
+ t.write(path.join(only, 'updater.7z'), 'x');
653
+ t.check(path.basename(nextInner(only) ?? '') === 'updater.7z', 'updater.7z is a stage too');
642
654
  const appDir = t.dir('web-kept');
643
655
  t.check(keptInstaller(appDir) === null, 'no installer kept when it was unpacked');
644
656
  t.write(path.join(appDir, 'installer', 'comet_installer.exe'), 'x');