windows-development-sandbox 1.17.3 → 1.18.0

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 (315) hide show
  1. package/README.md +1 -1
  2. package/config.example.json +97 -4
  3. package/dist/app/features/accounts/accounts.def.d.ts +116 -2
  4. package/dist/app/features/accounts/accounts.def.js +80 -12
  5. package/dist/app/features/accounts/accounts.run.d.ts +29 -0
  6. package/dist/app/features/accounts/accounts.run.js +36 -6
  7. package/dist/app/features/accounts/index.d.ts +2 -0
  8. package/dist/app/features/accounts/index.js +4 -1
  9. package/dist/app/features/accounts/services.def.d.ts +111 -0
  10. package/dist/app/features/accounts/services.def.js +187 -0
  11. package/dist/app/features/accounts/services.run.d.ts +65 -0
  12. package/dist/app/features/accounts/services.run.js +212 -0
  13. package/dist/app/features/defs.d.ts +112 -1
  14. package/dist/app/features/defs.js +5 -0
  15. package/dist/app/features/settings/categories.def.js +21 -4
  16. package/dist/app/registry.js +5 -1
  17. package/dist/bin/agent-sandbox.js +2 -2
  18. package/dist/bin/{chunk-QLGGAG3D.js → chunk-BKF43GJ3.js} +51 -16
  19. package/dist/bin/{chunk-REE3EMHD.js → chunk-YD3A67RS.js} +3812 -1702
  20. package/dist/bin/{chunk-XYUVIVJT.js → chunk-Z5D32FN3.js} +1 -1
  21. package/dist/bin/claude-host.js +2 -2
  22. package/dist/bin/claude-sbx.js +2 -2
  23. package/dist/bin/codex-sbx.js +2 -2
  24. package/dist/bin/gemini-sbx.js +2 -2
  25. package/dist/bin/sandbox.js +2 -2
  26. package/dist/bin/sbx-hide.js +2 -2
  27. package/dist/bin/sbx-show.js +2 -2
  28. package/dist/cli/commands/launch/launch.js +30 -1
  29. package/dist/cli/manifest.d.ts +93 -65
  30. package/dist/cli/manifest.js +23 -5
  31. package/dist/cli/menu/pages/accounts-page.js +31 -16
  32. package/dist/cli/services/accounts-service.d.ts +14 -4
  33. package/dist/cli/services/accounts-service.js +19 -6
  34. package/dist/cli/services/data-collect.js +26 -1
  35. package/dist/core/config/defaults.js +47 -4
  36. package/dist/core/detect/toolchains.d.ts +15 -1
  37. package/dist/core/detect/toolchains.js +45 -12
  38. package/dist/core/local-config/overrides.js +6 -0
  39. package/dist/core/schema/accounts.d.ts +27 -0
  40. package/dist/core/schema/accounts.js +32 -0
  41. package/dist/core/schema/config.d.ts +239 -0
  42. package/dist/core/schema/config.js +6 -0
  43. package/dist/core/schema/pc-installs.d.ts +7 -0
  44. package/dist/core/schema/pc-installs.js +17 -0
  45. package/dist/core/schema/toolchains.d.ts +61 -0
  46. package/dist/core/schema/toolchains.js +106 -0
  47. package/dist/core/types.d.ts +18 -0
  48. package/dist/guest/accounts/adapter.d.ts +25 -0
  49. package/dist/guest/accounts/adapter.js +21 -0
  50. package/dist/guest/accounts/adapters.d.ts +5 -0
  51. package/dist/guest/accounts/adapters.js +18 -0
  52. package/dist/guest/accounts/apply.d.ts +41 -0
  53. package/dist/guest/accounts/apply.js +47 -0
  54. package/dist/guest/accounts/kinds/appstore.d.ts +2 -0
  55. package/dist/guest/accounts/kinds/appstore.js +7 -0
  56. package/dist/guest/accounts/kinds/cfx.d.ts +2 -0
  57. package/dist/guest/accounts/kinds/cfx.js +7 -0
  58. package/dist/guest/accounts/kinds/epic.d.ts +2 -0
  59. package/dist/guest/accounts/kinds/epic.js +26 -0
  60. package/dist/guest/accounts/kinds/expo.d.ts +2 -0
  61. package/dist/guest/accounts/kinds/expo.js +7 -0
  62. package/dist/guest/accounts/kinds/keystore.d.ts +2 -0
  63. package/dist/guest/accounts/kinds/keystore.js +7 -0
  64. package/dist/guest/accounts/kinds/play.d.ts +2 -0
  65. package/dist/guest/accounts/kinds/play.js +7 -0
  66. package/dist/guest/accounts/kinds/steam.d.ts +4 -0
  67. package/dist/guest/accounts/kinds/steam.js +17 -0
  68. package/dist/guest/accounts/kinds/unity.d.ts +2 -0
  69. package/dist/guest/accounts/kinds/unity.js +7 -0
  70. package/dist/guest/accounts/watch.d.ts +28 -0
  71. package/dist/guest/accounts/watch.js +78 -0
  72. package/dist/guest/apps/resolvers-gamedev.d.ts +2 -0
  73. package/dist/guest/apps/resolvers-gamedev.js +1 -0
  74. package/dist/guest/apps/resolvers-mobile.d.ts +2 -0
  75. package/dist/guest/apps/resolvers-mobile.js +1 -0
  76. package/dist/guest/apps/resolvers.js +4 -0
  77. package/dist/guest/boot/boot.d.ts +5 -0
  78. package/dist/guest/boot/boot.js +35 -1
  79. package/dist/guest/daemon/accounts.d.ts +3 -0
  80. package/dist/guest/daemon/accounts.js +25 -0
  81. package/dist/guest/daemon/daemon.js +2 -0
  82. package/dist/guest/daemon/idle-shutdown.js +3 -1
  83. package/dist/guest/daemon/sessions.js +2 -0
  84. package/dist/guest/devtools/android.d.ts +2 -0
  85. package/dist/guest/devtools/android.js +7 -0
  86. package/dist/guest/devtools/devtool.d.ts +9 -0
  87. package/dist/guest/devtools/devtool.js +5 -0
  88. package/dist/guest/devtools/fivem.d.ts +2 -0
  89. package/dist/guest/devtools/fivem.js +7 -0
  90. package/dist/guest/devtools/registry.d.ts +6 -0
  91. package/dist/guest/devtools/registry.js +12 -0
  92. package/dist/guest/devtools/steam.d.ts +2 -0
  93. package/dist/guest/devtools/steam.js +228 -0
  94. package/dist/guest/devtools/unity.d.ts +2 -0
  95. package/dist/guest/devtools/unity.js +7 -0
  96. package/dist/guest/entries/daemon.js +2 -0
  97. package/dist/guest/entries/tool.d.ts +1 -0
  98. package/dist/guest/entries/tool.js +17 -0
  99. package/dist/guest/toolchains/engines/godot.d.ts +4 -0
  100. package/dist/guest/toolchains/engines/godot.js +4 -0
  101. package/dist/guest/toolchains/engines/unity-release.d.ts +15 -0
  102. package/dist/guest/toolchains/engines/unity-release.js +6 -0
  103. package/dist/guest/toolchains/engines/unity.d.ts +4 -0
  104. package/dist/guest/toolchains/engines/unity.js +4 -0
  105. package/dist/guest/toolchains/engines/unreal-engines.d.ts +4 -0
  106. package/dist/guest/toolchains/engines/unreal-engines.js +4 -0
  107. package/dist/guest/toolchains/fivem/artifacts.d.ts +6 -0
  108. package/dist/guest/toolchains/fivem/artifacts.js +7 -0
  109. package/dist/guest/toolchains/fivem/fivem.d.ts +4 -0
  110. package/dist/guest/toolchains/fivem/fivem.js +4 -0
  111. package/dist/guest/toolchains/installers.d.ts +12 -0
  112. package/dist/guest/toolchains/installers.js +39 -0
  113. package/dist/guest/toolchains/languages/java.js +1 -1
  114. package/dist/guest/toolchains/languages/kotlin.d.ts +3 -0
  115. package/dist/guest/toolchains/languages/kotlin.js +6 -0
  116. package/dist/guest/toolchains/mobile/android-repo.d.ts +11 -0
  117. package/dist/guest/toolchains/mobile/android-repo.js +10 -0
  118. package/dist/guest/toolchains/mobile/android.d.ts +17 -0
  119. package/dist/guest/toolchains/mobile/android.js +16 -0
  120. package/dist/guest/toolchains/mobile/dart.d.ts +4 -0
  121. package/dist/guest/toolchains/mobile/dart.js +4 -0
  122. package/dist/guest/toolchains/mobile/flutter.d.ts +4 -0
  123. package/dist/guest/toolchains/mobile/flutter.js +4 -0
  124. package/dist/guest/toolchains/mobile/react-native.d.ts +4 -0
  125. package/dist/guest/toolchains/mobile/react-native.js +4 -0
  126. package/dist/guest/toolchains/native/unreal.d.ts +3 -7
  127. package/dist/guest/toolchains/native/unreal.js +16 -167
  128. package/dist/guest/toolchains/native/visual-studio.d.ts +15 -0
  129. package/dist/guest/toolchains/native/visual-studio.js +159 -0
  130. package/dist/guest/toolchains/native/vs-request.d.ts +19 -0
  131. package/dist/guest/toolchains/native/vs-request.js +46 -0
  132. package/dist/guest/toolchains/not-yet.d.ts +2 -0
  133. package/dist/guest/toolchains/not-yet.js +6 -0
  134. package/dist/guest/toolchains/persisted.d.ts +48 -0
  135. package/dist/guest/toolchains/persisted.js +159 -0
  136. package/dist/guest/toolchains/plan.js +80 -4
  137. package/dist/guest/toolchains/steam/apps.d.ts +27 -0
  138. package/dist/guest/toolchains/steam/apps.js +112 -0
  139. package/dist/guest/toolchains/steam/client.d.ts +5 -0
  140. package/dist/guest/toolchains/steam/client.js +67 -0
  141. package/dist/guest/toolchains/steam/commands.d.ts +58 -0
  142. package/dist/guest/toolchains/steam/commands.js +155 -0
  143. package/dist/guest/toolchains/steam/steam.d.ts +4 -0
  144. package/dist/guest/toolchains/steam/steam.js +61 -0
  145. package/dist/guest/toolchains/steam/steamcmd-install.d.ts +29 -0
  146. package/dist/guest/toolchains/steam/steamcmd-install.js +177 -0
  147. package/dist/guest/toolchains/steam/steamcmd.d.ts +6 -0
  148. package/dist/guest/toolchains/steam/steamcmd.js +23 -0
  149. package/dist/guest/toolchains/step.d.ts +10 -0
  150. package/dist/host/accounts/deliver.d.ts +26 -0
  151. package/dist/host/accounts/deliver.js +80 -0
  152. package/dist/host/accounts/handoff.d.ts +17 -0
  153. package/dist/host/accounts/handoff.js +110 -0
  154. package/dist/host/accounts/index.d.ts +6 -0
  155. package/dist/host/accounts/index.js +8 -0
  156. package/dist/host/accounts/kinds/appstore.d.ts +2 -0
  157. package/dist/host/accounts/kinds/appstore.js +10 -0
  158. package/dist/host/accounts/kinds/cfx.d.ts +2 -0
  159. package/dist/host/accounts/kinds/cfx.js +7 -0
  160. package/dist/host/accounts/kinds/epic.d.ts +2 -0
  161. package/dist/host/accounts/kinds/epic.js +15 -0
  162. package/dist/host/accounts/kinds/expo.d.ts +2 -0
  163. package/dist/host/accounts/kinds/expo.js +7 -0
  164. package/dist/host/accounts/kinds/keystore.d.ts +2 -0
  165. package/dist/host/accounts/kinds/keystore.js +7 -0
  166. package/dist/host/accounts/kinds/play.d.ts +2 -0
  167. package/dist/host/accounts/kinds/play.js +7 -0
  168. package/dist/host/accounts/kinds/steam.d.ts +6 -0
  169. package/dist/host/accounts/kinds/steam.js +31 -0
  170. package/dist/host/accounts/kinds/unity.d.ts +2 -0
  171. package/dist/host/accounts/kinds/unity.js +13 -0
  172. package/dist/host/accounts/leases.d.ts +40 -0
  173. package/dist/host/accounts/leases.js +62 -0
  174. package/dist/host/accounts/source.d.ts +21 -0
  175. package/dist/host/accounts/source.js +15 -0
  176. package/dist/host/accounts/sources.d.ts +5 -0
  177. package/dist/host/accounts/sources.js +18 -0
  178. package/dist/host/accounts/store.d.ts +23 -0
  179. package/dist/host/accounts/store.js +74 -0
  180. package/dist/host/audit/log.d.ts +1 -1
  181. package/dist/host/launch/generate.d.ts +2 -0
  182. package/dist/host/launch/generate.js +16 -1
  183. package/dist/host/launch/hints/android.d.ts +3 -0
  184. package/dist/host/launch/hints/android.js +3 -0
  185. package/dist/host/launch/hints/engines.d.ts +3 -0
  186. package/dist/host/launch/hints/engines.js +3 -0
  187. package/dist/host/launch/hints/fivem.d.ts +3 -0
  188. package/dist/host/launch/hints/fivem.js +3 -0
  189. package/dist/host/launch/hints/hint.d.ts +2 -0
  190. package/dist/host/launch/hints/hint.js +1 -0
  191. package/dist/host/launch/hints/index.d.ts +5 -0
  192. package/dist/host/launch/hints/index.js +29 -0
  193. package/dist/host/launch/hints/mobile.d.ts +3 -0
  194. package/dist/host/launch/hints/mobile.js +3 -0
  195. package/dist/host/launch/hints/steam.d.ts +7 -0
  196. package/dist/host/launch/hints/steam.js +59 -0
  197. package/dist/host/launch/index.d.ts +2 -2
  198. package/dist/host/launch/index.js +2 -2
  199. package/dist/host/launch/mappings.js +2 -0
  200. package/dist/host/launch/session-file.js +2 -0
  201. package/dist/host/launch/stage.js +10 -1
  202. package/dist/host/launch/toolchains.d.ts +7 -0
  203. package/dist/host/launch/toolchains.js +11 -0
  204. package/dist/host/pc-installs/discover.d.ts +19 -0
  205. package/dist/host/pc-installs/discover.js +59 -0
  206. package/dist/host/pc-installs/epic.d.ts +2 -0
  207. package/dist/host/pc-installs/epic.js +7 -0
  208. package/dist/host/pc-installs/index.d.ts +3 -0
  209. package/dist/host/pc-installs/index.js +2 -0
  210. package/dist/host/pc-installs/source.d.ts +9 -0
  211. package/dist/host/pc-installs/source.js +1 -0
  212. package/dist/host/pc-installs/steam.d.ts +16 -0
  213. package/dist/host/pc-installs/steam.js +143 -0
  214. package/dist/host/pc-installs/unity.d.ts +2 -0
  215. package/dist/host/pc-installs/unity.js +7 -0
  216. package/dist/host/pc-installs/unreal.d.ts +2 -0
  217. package/dist/host/pc-installs/unreal.js +7 -0
  218. package/dist/host/profile/accounts.d.ts +21 -6
  219. package/dist/host/profile/accounts.js +108 -28
  220. package/dist/host/profile/claude-login.d.ts +32 -2
  221. package/dist/host/profile/claude-login.js +100 -8
  222. package/dist/host/profile/index.d.ts +1 -1
  223. package/dist/host/profile/index.js +1 -1
  224. package/dist/host/secrets/launch-secrets.js +1 -0
  225. package/dist/runtime/agent.js +321 -9
  226. package/dist/runtime/daemon.js +1987 -604
  227. package/dist/runtime/db.js +334 -11
  228. package/dist/runtime/main.js +2519 -723
  229. package/dist/runtime/netproxy.js +321 -9
  230. package/dist/runtime/tool.js +28549 -0
  231. package/dist/runtime/view.js +321 -9
  232. package/dist/selftest/accounts.test.js +172 -1
  233. package/dist/selftest/agent-paths.test.js +1 -0
  234. package/dist/selftest/android.test.d.ts +2 -0
  235. package/dist/selftest/android.test.js +7 -0
  236. package/dist/selftest/app.test.js +1 -1
  237. package/dist/selftest/engines.test.d.ts +2 -0
  238. package/dist/selftest/engines.test.js +7 -0
  239. package/dist/selftest/fivem.test.d.ts +2 -0
  240. package/dist/selftest/fivem.test.js +7 -0
  241. package/dist/selftest/generate.test.js +1 -1
  242. package/dist/selftest/index.js +18 -0
  243. package/dist/selftest/menu-screens.js +1 -0
  244. package/dist/selftest/menu.test.js +2 -1
  245. package/dist/selftest/mobile.test.d.ts +2 -0
  246. package/dist/selftest/mobile.test.js +7 -0
  247. package/dist/selftest/pc-installs.test.d.ts +2 -0
  248. package/dist/selftest/pc-installs.test.js +111 -0
  249. package/dist/selftest/persisted-installs.test.d.ts +2 -0
  250. package/dist/selftest/persisted-installs.test.js +107 -0
  251. package/dist/selftest/projects.test.js +6 -4
  252. package/dist/selftest/service-accounts.test.d.ts +2 -0
  253. package/dist/selftest/service-accounts.test.js +320 -0
  254. package/dist/selftest/steam.test.d.ts +2 -0
  255. package/dist/selftest/steam.test.js +316 -0
  256. package/dist/selftest/storage-helper.test.js +31 -8
  257. package/dist/selftest/support/engine-golden.js +3 -0
  258. package/dist/selftest/support/fixtures.d.ts +87 -0
  259. package/dist/selftest/support/fixtures.js +4 -3
  260. package/dist/selftest/support/pc-memory.d.ts +2 -0
  261. package/dist/selftest/support/pc-memory.js +17 -0
  262. package/dist/selftest/support/web-preview.js +20 -1
  263. package/dist/selftest/unity.test.d.ts +2 -0
  264. package/dist/selftest/unity.test.js +7 -0
  265. package/dist/shared/accounts/fingerprint.d.ts +1 -0
  266. package/dist/shared/accounts/fingerprint.js +20 -0
  267. package/dist/shared/accounts/index.d.ts +5 -0
  268. package/dist/shared/accounts/index.js +7 -0
  269. package/dist/shared/accounts/kinds/epic.d.ts +10 -0
  270. package/dist/shared/accounts/kinds/epic.js +56 -0
  271. package/dist/shared/accounts/kinds/steam.d.ts +28 -0
  272. package/dist/shared/accounts/kinds/steam.js +99 -0
  273. package/dist/shared/accounts/kinds.d.ts +41 -0
  274. package/dist/shared/accounts/kinds.js +154 -0
  275. package/dist/shared/accounts/payloads.d.ts +151 -0
  276. package/dist/shared/accounts/payloads.js +128 -0
  277. package/dist/shared/apps/catalogue-gamedev.d.ts +2 -0
  278. package/dist/shared/apps/catalogue-gamedev.js +1 -0
  279. package/dist/shared/apps/catalogue-mobile.d.ts +2 -0
  280. package/dist/shared/apps/catalogue-mobile.js +1 -0
  281. package/dist/shared/apps/catalogue-modding.d.ts +2 -0
  282. package/dist/shared/apps/catalogue-modding.js +1 -0
  283. package/dist/shared/apps/catalogue.d.ts +1 -0
  284. package/dist/shared/apps/catalogue.js +6 -1
  285. package/dist/shared/channel/schema.d.ts +183 -0
  286. package/dist/shared/channel/secrets.d.ts +42 -0
  287. package/dist/shared/channel/secrets.js +3 -0
  288. package/dist/shared/download/downloader.d.ts +7 -0
  289. package/dist/shared/download/downloader.js +10 -3
  290. package/dist/shared/installs.d.ts +19 -0
  291. package/dist/shared/installs.js +13 -0
  292. package/dist/shared/io/bounded.d.ts +6 -0
  293. package/dist/shared/io/bounded.js +38 -0
  294. package/dist/shared/io/index.d.ts +2 -0
  295. package/dist/shared/io/index.js +2 -0
  296. package/dist/shared/io/text.d.ts +9 -0
  297. package/dist/shared/io/text.js +18 -0
  298. package/dist/shared/paths/guest-paths.js +1 -1
  299. package/dist/shared/paths/index.d.ts +1 -0
  300. package/dist/shared/paths/index.js +1 -0
  301. package/dist/shared/paths/pc-installs.d.ts +20 -0
  302. package/dist/shared/paths/pc-installs.js +19 -0
  303. package/dist/shared/vdf.d.ts +25 -0
  304. package/dist/shared/vdf.js +151 -0
  305. package/dist/sync/sync-cycle.js +9 -0
  306. package/dist/web/index.html +1 -1
  307. package/dist/web/{main-JTH3FT4O.js → main-CWIF4VQI.js} +63 -61
  308. package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
  309. package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
  310. package/native/csharp/StorageHelper/AssemblyInfo.cs +3 -3
  311. package/package.json +1 -1
  312. package/sandbox/scripts/add-firewall-port.ps1 +13 -0
  313. package/sandbox/templates/fivem/README.txt +2 -0
  314. package/schemas/config.schema.json +485 -0
  315. package/schemas/sandbox-config.schema.json +416 -0
@@ -96,6 +96,38 @@ export declare const ConfigSchema: z.ZodObject<{
96
96
  github: z.ZodObject<{
97
97
  shareToken: z.ZodBoolean;
98
98
  }, z.core.$strict>;
99
+ accounts: z.ZodObject<{
100
+ epic: z.ZodObject<{
101
+ share: z.ZodBoolean;
102
+ }, z.core.$strict>;
103
+ steam: z.ZodObject<{
104
+ share: z.ZodBoolean;
105
+ }, z.core.$strict>;
106
+ unity: z.ZodObject<{
107
+ share: z.ZodBoolean;
108
+ }, z.core.$strict>;
109
+ cfx: z.ZodObject<{
110
+ share: z.ZodBoolean;
111
+ }, z.core.$strict>;
112
+ keystore: z.ZodObject<{
113
+ share: z.ZodBoolean;
114
+ }, z.core.$strict>;
115
+ play: z.ZodObject<{
116
+ share: z.ZodBoolean;
117
+ }, z.core.$strict>;
118
+ expo: z.ZodObject<{
119
+ share: z.ZodBoolean;
120
+ }, z.core.$strict>;
121
+ appstore: z.ZodObject<{
122
+ share: z.ZodBoolean;
123
+ }, z.core.$strict>;
124
+ }, z.core.$strict>;
125
+ pcInstalls: z.ZodObject<{
126
+ steamGames: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodNumber>]>;
127
+ epicGames: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>;
128
+ unrealEngines: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>;
129
+ unityEditors: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>;
130
+ }, z.core.$strict>;
99
131
  provisioning: z.ZodObject<{
100
132
  copyFromHost: z.ZodBoolean;
101
133
  fallbackToInstall: z.ZodBoolean;
@@ -158,6 +190,65 @@ export declare const ConfigSchema: z.ZodObject<{
158
190
  acceptLicense: z.ZodBoolean;
159
191
  components: z.ZodArray<z.ZodString>;
160
192
  keepInstallFiles: z.ZodBoolean;
193
+ persistEngines: z.ZodBoolean;
194
+ derivedDataCache: z.ZodEnum<{
195
+ persisted: "persisted";
196
+ local: "local";
197
+ }>;
198
+ }, z.core.$strict>;
199
+ unity: z.ZodObject<{
200
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
201
+ acceptLicense: z.ZodBoolean;
202
+ version: z.ZodString;
203
+ modules: z.ZodArray<z.ZodString>;
204
+ hub: z.ZodBoolean;
205
+ keepVersions: z.ZodNumber;
206
+ }, z.core.$strict>;
207
+ godot: z.ZodObject<{
208
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
209
+ version: z.ZodString;
210
+ dotnet: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
211
+ exportTemplates: z.ZodBoolean;
212
+ keepVersions: z.ZodNumber;
213
+ }, z.core.$strict>;
214
+ steam: z.ZodObject<{
215
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
216
+ client: z.ZodBoolean;
217
+ sdkFolder: z.ZodString;
218
+ }, z.core.$strict>;
219
+ fivem: z.ZodObject<{
220
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
221
+ acceptLicense: z.ZodBoolean;
222
+ game: z.ZodEnum<{
223
+ gta5: "gta5";
224
+ rdr3: "rdr3";
225
+ }>;
226
+ artifact: z.ZodString;
227
+ txAdmin: z.ZodBoolean;
228
+ keepVersions: z.ZodNumber;
229
+ }, z.core.$strict>;
230
+ android: z.ZodObject<{
231
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
232
+ acceptLicense: z.ZodBoolean;
233
+ platforms: z.ZodArray<z.ZodString>;
234
+ buildTools: z.ZodString;
235
+ ndk: z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodString]>;
236
+ cmake: z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodString]>;
237
+ packages: z.ZodArray<z.ZodString>;
238
+ }, z.core.$strict>;
239
+ flutter: z.ZodObject<{
240
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
241
+ version: z.ZodString;
242
+ windowsDesktop: z.ZodBoolean;
243
+ precache: z.ZodArray<z.ZodString>;
244
+ }, z.core.$strict>;
245
+ dart: z.ZodObject<{
246
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
247
+ version: z.ZodString;
248
+ }, z.core.$strict>;
249
+ reactNative: z.ZodObject<{
250
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
251
+ easCli: z.ZodBoolean;
161
252
  }, z.core.$strict>;
162
253
  cpp: z.ZodObject<{
163
254
  enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
@@ -170,6 +261,7 @@ export declare const ConfigSchema: z.ZodObject<{
170
261
  workloads: z.ZodArray<z.ZodString>;
171
262
  frameworkTargets: z.ZodArray<z.ZodString>;
172
263
  netfx35: z.ZodBoolean;
264
+ templates: z.ZodArray<z.ZodString>;
173
265
  }, z.core.$strict>;
174
266
  go: z.ZodObject<{
175
267
  enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
@@ -181,6 +273,7 @@ export declare const ConfigSchema: z.ZodObject<{
181
273
  version: z.ZodString;
182
274
  maven: z.ZodBoolean;
183
275
  gradle: z.ZodBoolean;
276
+ kotlin: z.ZodBoolean;
184
277
  }, z.core.$strict>;
185
278
  ruby: z.ZodObject<{
186
279
  enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
@@ -416,6 +509,32 @@ export declare const LocalOverridesSchema: z.ZodObject<{
416
509
  vpn: z.ZodOptional<z.ZodObject<{
417
510
  killSwitch: z.ZodOptional<z.ZodBoolean>;
418
511
  }, z.core.$strict>>;
512
+ accounts: z.ZodOptional<z.ZodObject<{
513
+ epic: z.ZodOptional<z.ZodObject<{
514
+ share: z.ZodOptional<z.ZodBoolean>;
515
+ }, z.core.$strict>>;
516
+ steam: z.ZodOptional<z.ZodObject<{
517
+ share: z.ZodOptional<z.ZodBoolean>;
518
+ }, z.core.$strict>>;
519
+ unity: z.ZodOptional<z.ZodObject<{
520
+ share: z.ZodOptional<z.ZodBoolean>;
521
+ }, z.core.$strict>>;
522
+ cfx: z.ZodOptional<z.ZodObject<{
523
+ share: z.ZodOptional<z.ZodBoolean>;
524
+ }, z.core.$strict>>;
525
+ keystore: z.ZodOptional<z.ZodObject<{
526
+ share: z.ZodOptional<z.ZodBoolean>;
527
+ }, z.core.$strict>>;
528
+ play: z.ZodOptional<z.ZodObject<{
529
+ share: z.ZodOptional<z.ZodBoolean>;
530
+ }, z.core.$strict>>;
531
+ expo: z.ZodOptional<z.ZodObject<{
532
+ share: z.ZodOptional<z.ZodBoolean>;
533
+ }, z.core.$strict>>;
534
+ appstore: z.ZodOptional<z.ZodObject<{
535
+ share: z.ZodOptional<z.ZodBoolean>;
536
+ }, z.core.$strict>>;
537
+ }, z.core.$strict>>;
419
538
  provisioning: z.ZodOptional<z.ZodObject<{
420
539
  copyFromHost: z.ZodOptional<z.ZodBoolean>;
421
540
  fallbackToInstall: z.ZodOptional<z.ZodBoolean>;
@@ -527,6 +646,126 @@ export declare const LocalOverridesSchema: z.ZodObject<{
527
646
  zstd: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
528
647
  openssl: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
529
648
  }, z.core.$strict>>;
649
+ unity: z.ZodOptional<z.ZodObject<{
650
+ enabled: z.ZodOptional<z.ZodBoolean>;
651
+ }, z.core.$strict> | z.ZodObject<{
652
+ version: z.ZodOptional<z.ZodString>;
653
+ extraVersions: z.ZodOptional<z.ZodArray<z.ZodString>>;
654
+ corepack: z.ZodOptional<z.ZodBoolean>;
655
+ volta: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
656
+ globalPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
657
+ }, z.core.$strict> | z.ZodObject<{
658
+ enabled: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
659
+ }, z.core.$strict> | z.ZodObject<{
660
+ gh: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
661
+ zstd: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
662
+ openssl: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
663
+ }, z.core.$strict>>;
664
+ godot: z.ZodOptional<z.ZodObject<{
665
+ enabled: z.ZodOptional<z.ZodBoolean>;
666
+ }, z.core.$strict> | z.ZodObject<{
667
+ version: z.ZodOptional<z.ZodString>;
668
+ extraVersions: z.ZodOptional<z.ZodArray<z.ZodString>>;
669
+ corepack: z.ZodOptional<z.ZodBoolean>;
670
+ volta: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
671
+ globalPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
672
+ }, z.core.$strict> | z.ZodObject<{
673
+ enabled: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
674
+ }, z.core.$strict> | z.ZodObject<{
675
+ gh: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
676
+ zstd: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
677
+ openssl: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
678
+ }, z.core.$strict>>;
679
+ steam: z.ZodOptional<z.ZodObject<{
680
+ enabled: z.ZodOptional<z.ZodBoolean>;
681
+ }, z.core.$strict> | z.ZodObject<{
682
+ version: z.ZodOptional<z.ZodString>;
683
+ extraVersions: z.ZodOptional<z.ZodArray<z.ZodString>>;
684
+ corepack: z.ZodOptional<z.ZodBoolean>;
685
+ volta: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
686
+ globalPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
687
+ }, z.core.$strict> | z.ZodObject<{
688
+ enabled: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
689
+ }, z.core.$strict> | z.ZodObject<{
690
+ gh: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
691
+ zstd: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
692
+ openssl: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
693
+ }, z.core.$strict>>;
694
+ fivem: z.ZodOptional<z.ZodObject<{
695
+ enabled: z.ZodOptional<z.ZodBoolean>;
696
+ }, z.core.$strict> | z.ZodObject<{
697
+ version: z.ZodOptional<z.ZodString>;
698
+ extraVersions: z.ZodOptional<z.ZodArray<z.ZodString>>;
699
+ corepack: z.ZodOptional<z.ZodBoolean>;
700
+ volta: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
701
+ globalPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
702
+ }, z.core.$strict> | z.ZodObject<{
703
+ enabled: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
704
+ }, z.core.$strict> | z.ZodObject<{
705
+ gh: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
706
+ zstd: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
707
+ openssl: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
708
+ }, z.core.$strict>>;
709
+ android: z.ZodOptional<z.ZodObject<{
710
+ enabled: z.ZodOptional<z.ZodBoolean>;
711
+ }, z.core.$strict> | z.ZodObject<{
712
+ version: z.ZodOptional<z.ZodString>;
713
+ extraVersions: z.ZodOptional<z.ZodArray<z.ZodString>>;
714
+ corepack: z.ZodOptional<z.ZodBoolean>;
715
+ volta: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
716
+ globalPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
717
+ }, z.core.$strict> | z.ZodObject<{
718
+ enabled: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
719
+ }, z.core.$strict> | z.ZodObject<{
720
+ gh: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
721
+ zstd: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
722
+ openssl: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
723
+ }, z.core.$strict>>;
724
+ flutter: z.ZodOptional<z.ZodObject<{
725
+ enabled: z.ZodOptional<z.ZodBoolean>;
726
+ }, z.core.$strict> | z.ZodObject<{
727
+ version: z.ZodOptional<z.ZodString>;
728
+ extraVersions: z.ZodOptional<z.ZodArray<z.ZodString>>;
729
+ corepack: z.ZodOptional<z.ZodBoolean>;
730
+ volta: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
731
+ globalPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
732
+ }, z.core.$strict> | z.ZodObject<{
733
+ enabled: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
734
+ }, z.core.$strict> | z.ZodObject<{
735
+ gh: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
736
+ zstd: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
737
+ openssl: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
738
+ }, z.core.$strict>>;
739
+ dart: z.ZodOptional<z.ZodObject<{
740
+ enabled: z.ZodOptional<z.ZodBoolean>;
741
+ }, z.core.$strict> | z.ZodObject<{
742
+ version: z.ZodOptional<z.ZodString>;
743
+ extraVersions: z.ZodOptional<z.ZodArray<z.ZodString>>;
744
+ corepack: z.ZodOptional<z.ZodBoolean>;
745
+ volta: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
746
+ globalPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
747
+ }, z.core.$strict> | z.ZodObject<{
748
+ enabled: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
749
+ }, z.core.$strict> | z.ZodObject<{
750
+ gh: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
751
+ zstd: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
752
+ openssl: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
753
+ }, z.core.$strict>>;
754
+ reactNative: z.ZodOptional<z.ZodObject<{
755
+ enabled: z.ZodOptional<z.ZodBoolean>;
756
+ }, z.core.$strict> | z.ZodObject<{
757
+ version: z.ZodOptional<z.ZodString>;
758
+ extraVersions: z.ZodOptional<z.ZodArray<z.ZodString>>;
759
+ corepack: z.ZodOptional<z.ZodBoolean>;
760
+ volta: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
761
+ globalPackages: z.ZodOptional<z.ZodArray<z.ZodString>>;
762
+ }, z.core.$strict> | z.ZodObject<{
763
+ enabled: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
764
+ }, z.core.$strict> | z.ZodObject<{
765
+ gh: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
766
+ zstd: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
767
+ openssl: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>>;
768
+ }, z.core.$strict>>;
530
769
  cpp: z.ZodOptional<z.ZodObject<{
531
770
  enabled: z.ZodOptional<z.ZodBoolean>;
532
771
  }, z.core.$strict> | z.ZodObject<{
@@ -14,6 +14,8 @@ import { ResumeSchema } from './resume.js';
14
14
  import { WebSchema } from './web.js';
15
15
  import { VpnSchema } from './vpn.js';
16
16
  import { GithubSchema } from './github.js';
17
+ import { AccountsSchema } from './accounts.js';
18
+ import { PcInstallsSchema } from './pc-installs.js';
17
19
  const RESERVED_ENV_PREFIX = /^(AGENT_|GIT_|GH_|GITHUB_|NODE_|NPM_CONFIG_(USERCONFIG|GLOBALCONFIG|PREFIX|SCRIPT_SHELL)|SSL_|CLAUDE|ANTHROPIC_|OPENAI_|CODEX_|GEMINI_|GOOGLE_|COPILOT_|AWS_|AZURE_)/i;
18
20
  const RESERVED_ENV_SUFFIX = /(_PROXY|_BASE_URL|_ENDPOINT|_CA_BUNDLE|_CA_CERTS)$/i;
19
21
  const RESERVED_ENV_NAMES = new Set([
@@ -85,6 +87,8 @@ export const ConfigSchema = z
85
87
  network: NetworkSchema,
86
88
  vpn: VpnSchema,
87
89
  github: GithubSchema,
90
+ accounts: AccountsSchema,
91
+ pcInstalls: PcInstallsSchema,
88
92
  provisioning: ProvisioningSchema,
89
93
  downloads: DownloadsSchema,
90
94
  toolchains: ToolchainsSchema,
@@ -137,6 +141,8 @@ export const LocalOverridesSchema = z
137
141
  network: NetworkSchema.pick({ blockPrivateRanges: true, blockHosts: true }).partial(),
138
142
  // A project may turn the kill switch on, never off, and never choose a VPN, a server, a file or a login.
139
143
  vpn: VpnSchema.pick({ killSwitch: true }).partial(),
144
+ // A project may only turn a sign-in off (policy: OFF_IS_SAFER); pcInstalls is never here (folders of this PC).
145
+ accounts: z.strictObject(_.mapValues(AccountsSchema.shape, (shape) => shape.partial())).partial(),
140
146
  provisioning: ProvisioningSchema.pick({ copyFromHost: true, fallbackToInstall: true, refresh: true })
141
147
  .extend({ git: GitSchema.partial(), terminal: toggle('Windows Terminal as the sandbox window.').partial() })
142
148
  .partial(),
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare const PcInstallsSchema: z.ZodObject<{
3
+ steamGames: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodNumber>]>;
4
+ epicGames: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>;
5
+ unrealEngines: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>;
6
+ unityEditors: z.ZodUnion<readonly [z.ZodBoolean, z.ZodArray<z.ZodString>]>;
7
+ }, z.core.$strict>;
@@ -0,0 +1,17 @@
1
+ // pcInstalls: games, engines and editors already installed on this PC, mapped read-only into the sandbox (nothing is
2
+ // copied). Yours only: a project file can never map folders of this PC.
3
+ import { z } from 'zod';
4
+ const pick = (item, what, example) => z
5
+ .union([z.boolean(), z.array(item)])
6
+ .describe(what +
7
+ ' of this PC, read-only in the sandbox under C:\\PcInstalls: true = all of them, false = none, or a list (e.g. ' +
8
+ example +
9
+ '). The agent can read their files.');
10
+ export const PcInstallsSchema = z
11
+ .strictObject({
12
+ steamGames: pick(z.number().int().positive(), 'Steam games (true maps each library; a list of app IDs maps only those games)', '[480, 730]'),
13
+ epicGames: pick(z.string().regex(/^[A-Za-z0-9._-]{1,100}$/), 'Epic Games Launcher games (by their app name)', '["Fortnite"]'),
14
+ unrealEngines: pick(z.string().regex(/^(UE_)?\d+\.\d+$/), 'Unreal Engine versions installed with the Epic Games Launcher', '["5.4"]'),
15
+ unityEditors: pick(z.string().regex(/^\d+\.\d+\.\d+[abfp]\d+$/), 'Unity editors installed with Unity Hub', '["6000.0.32f1"]'),
16
+ })
17
+ .describe("Games, engines and editors installed on this PC, mapped read-only into sandboxes (no copy, no room on the sandbox's disk).");
@@ -39,6 +39,65 @@ export declare const ToolchainsSchema: z.ZodObject<{
39
39
  acceptLicense: z.ZodBoolean;
40
40
  components: z.ZodArray<z.ZodString>;
41
41
  keepInstallFiles: z.ZodBoolean;
42
+ persistEngines: z.ZodBoolean;
43
+ derivedDataCache: z.ZodEnum<{
44
+ persisted: "persisted";
45
+ local: "local";
46
+ }>;
47
+ }, z.core.$strict>;
48
+ unity: z.ZodObject<{
49
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
50
+ acceptLicense: z.ZodBoolean;
51
+ version: z.ZodString;
52
+ modules: z.ZodArray<z.ZodString>;
53
+ hub: z.ZodBoolean;
54
+ keepVersions: z.ZodNumber;
55
+ }, z.core.$strict>;
56
+ godot: z.ZodObject<{
57
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
58
+ version: z.ZodString;
59
+ dotnet: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
60
+ exportTemplates: z.ZodBoolean;
61
+ keepVersions: z.ZodNumber;
62
+ }, z.core.$strict>;
63
+ steam: z.ZodObject<{
64
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
65
+ client: z.ZodBoolean;
66
+ sdkFolder: z.ZodString;
67
+ }, z.core.$strict>;
68
+ fivem: z.ZodObject<{
69
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
70
+ acceptLicense: z.ZodBoolean;
71
+ game: z.ZodEnum<{
72
+ gta5: "gta5";
73
+ rdr3: "rdr3";
74
+ }>;
75
+ artifact: z.ZodString;
76
+ txAdmin: z.ZodBoolean;
77
+ keepVersions: z.ZodNumber;
78
+ }, z.core.$strict>;
79
+ android: z.ZodObject<{
80
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
81
+ acceptLicense: z.ZodBoolean;
82
+ platforms: z.ZodArray<z.ZodString>;
83
+ buildTools: z.ZodString;
84
+ ndk: z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodString]>;
85
+ cmake: z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodString]>;
86
+ packages: z.ZodArray<z.ZodString>;
87
+ }, z.core.$strict>;
88
+ flutter: z.ZodObject<{
89
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
90
+ version: z.ZodString;
91
+ windowsDesktop: z.ZodBoolean;
92
+ precache: z.ZodArray<z.ZodString>;
93
+ }, z.core.$strict>;
94
+ dart: z.ZodObject<{
95
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
96
+ version: z.ZodString;
97
+ }, z.core.$strict>;
98
+ reactNative: z.ZodObject<{
99
+ enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
100
+ easCli: z.ZodBoolean;
42
101
  }, z.core.$strict>;
43
102
  cpp: z.ZodObject<{
44
103
  enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
@@ -51,6 +110,7 @@ export declare const ToolchainsSchema: z.ZodObject<{
51
110
  workloads: z.ZodArray<z.ZodString>;
52
111
  frameworkTargets: z.ZodArray<z.ZodString>;
53
112
  netfx35: z.ZodBoolean;
113
+ templates: z.ZodArray<z.ZodString>;
54
114
  }, z.core.$strict>;
55
115
  go: z.ZodObject<{
56
116
  enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
@@ -62,6 +122,7 @@ export declare const ToolchainsSchema: z.ZodObject<{
62
122
  version: z.ZodString;
63
123
  maven: z.ZodBoolean;
64
124
  gradle: z.ZodBoolean;
125
+ kotlin: z.ZodBoolean;
65
126
  }, z.core.$strict>;
66
127
  ruby: z.ZodObject<{
67
128
  enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
@@ -62,6 +62,108 @@ export const ToolchainsSchema = z.strictObject({
62
62
  keepInstallFiles: z
63
63
  .boolean()
64
64
  .describe('Keep an offline copy of the Visual Studio install files in tools\\visualstudio (~10 GB, made once), so later boots install without downloading them again. Skipped while that disk has too little room.'),
65
+ persistEngines: z
66
+ .boolean()
67
+ .describe('Engines the Epic Games Launcher installs go to tools\\unreal\\engines (kept between sandboxes, 40-60 GB each) and are registered with the launcher again every boot. Off: they go on the sandbox disk and are lost when it closes. Engines installed on this PC can be mapped instead (pcInstalls.unrealEngines).'),
68
+ derivedDataCache: z
69
+ .enum(['persisted', 'local'])
70
+ .describe('"persisted": the engine\'s local derived data cache (compiled shaders, 10-50 GB) in tools\\unreal\\ddc, kept between sandboxes. "local": Unreal\'s own place on the sandbox disk (rebuilt every boot).'),
71
+ }),
72
+ unity: z.strictObject({
73
+ enabled: enabled("Unity: the editor version a project asks for, from Unity's release API (checked against its published hash), installed into tools\\unity\\<version> (6-7 GB each), with the modules you list.", 'ProjectSettings/ProjectVersion.txt'),
74
+ acceptLicense: z
75
+ .boolean()
76
+ .describe('Required to install: you accept the Unity terms of service (https://unity.com/legal/terms-of-service), and the editor needs a Unity licence (Personal is free). A project file cannot accept it for you.'),
77
+ version: z
78
+ .string()
79
+ .min(1)
80
+ .describe('"project" = the version in ProjectSettings/ProjectVersion.txt, or an editor version such as "6000.0.32f1".'),
81
+ modules: z
82
+ .array(z.string().regex(/^[a-z0-9-]+$/))
83
+ .describe('Editor modules to add: "android" (4-5 GB, also the Android SDK), "webgl" (1.5 GB), "windows-il2cpp" (adds Visual Studio\'s C++ parts), "ios" (Xcode project export only: iOS builds need a Mac).'),
84
+ hub: z.boolean().describe('Also Unity Hub, with the installed editors listed in it.'),
85
+ keepVersions: z
86
+ .number()
87
+ .int()
88
+ .min(1)
89
+ .max(20)
90
+ .describe('How many editor versions to keep in tools\\unity; older ones are removed (the least recently used first).'),
91
+ }),
92
+ godot: z.strictObject({
93
+ enabled: enabled('Godot from its official builds (checked against the published SHA-512 sums), self-contained in tools\\godot\\<version> with `godot` (the console build) on PATH.', 'project.godot'),
94
+ version: z
95
+ .string()
96
+ .min(1)
97
+ .describe('"project" = the version project.godot was saved with (else the newest stable), or a version such as "4.3".'),
98
+ dotnet: EnabledSchema.describe('The .NET (C#) build of Godot and the .NET SDK: true, false, or "auto" = when the project has a .csproj.'),
99
+ exportTemplates: z.boolean().describe('Also the export templates for that version (~1.2 GB), for exporting games.'),
100
+ keepVersions: z
101
+ .number()
102
+ .int()
103
+ .min(1)
104
+ .max(20)
105
+ .describe('How many Godot versions to keep; older ones are removed (the least recently used first).'),
106
+ }),
107
+ steam: z.strictObject({
108
+ enabled: enabled('SteamCMD (`steamcmd` on PATH, Valve-signed, ~0.3 GB) and `sbx-steam` for logging in, downloading apps and workshop items, and uploading builds (ContentBuilder) and workshop items.', 'steam_appid.txt, steam_api64.dll, steam_api.dll, or an app_build / workshop_item .vdf'),
109
+ client: z
110
+ .boolean()
111
+ .describe('Also the Steam client (1-1.5 GB, in tools\\steam), for testing the Steamworks API, the overlay or in-game uploads. You sign in to it in each sandbox.'),
112
+ sdkFolder: z
113
+ .string()
114
+ .describe('Where the Steamworks SDK is in the sandbox (relative paths are inside the project); it sets STEAMWORKS_SDK. Empty = not set. The SDK is never downloaded (it needs a Steamworks partner login).'),
115
+ }),
116
+ fivem: z.strictObject({
117
+ enabled: enabled('A FiveM / RedM server (FXServer with txAdmin) for resource development, from the Cfx.re artifacts (the game client is not supported). `sbx-fivem serve` starts it.', 'fxmanifest.lua or __resource.lua (up to 3 folders down)'),
118
+ acceptLicense: z
119
+ .boolean()
120
+ .describe('Required to install: you accept the Cfx.re platform terms (https://fivem.net/terms) and the FXServer licence. A project file cannot accept it for you.'),
121
+ game: z.enum(['gta5', 'rdr3']).describe('"gta5" = FiveM, "rdr3" = RedM.'),
122
+ artifact: z
123
+ .string()
124
+ .regex(/^(recommended|optional|latest|\d+)$/)
125
+ .describe('The server build: "recommended", "optional", "latest", or a build number.'),
126
+ txAdmin: z.boolean().describe('Start the server with txAdmin (its web panel on port 40120).'),
127
+ keepVersions: z
128
+ .number()
129
+ .int()
130
+ .min(1)
131
+ .max(20)
132
+ .describe('How many server builds to keep in tools\\fivem\\artifacts.'),
133
+ }),
134
+ android: z.strictObject({
135
+ enabled: enabled('The Android SDK (command-line tools, platform-tools, build-tools, platforms, NDK and CMake as needed) in tools\\android-sdk, with a JDK. No emulator (Windows Sandbox cannot run one): use a device over the network, or build only.', 'a Gradle build using com.android, an AndroidManifest.xml (up to 3 folders down), a .NET MAUI project, or a Flutter / React Native / Godot Android project'),
136
+ acceptLicense: z
137
+ .boolean()
138
+ .describe('Required to install: you accept the Android SDK licence (https://developer.android.com/studio/terms) and the licences sdkmanager shows. A project file cannot accept them for you.'),
139
+ platforms: StringsSchema.describe('Platforms to install, e.g. ["android-35"]; "project" = the compileSdk the project\'s Gradle files ask for.'),
140
+ buildTools: z.string().min(1).describe('"latest" or a build-tools version such as "35.0.0".'),
141
+ ndk: z
142
+ .union([z.literal(false), z.string().min(1)])
143
+ .describe('"auto" = when the project uses native code (ndkVersion, CMake or ndk-build), false = never, or a version.'),
144
+ cmake: z
145
+ .union([z.literal(false), z.string().min(1)])
146
+ .describe('"auto" = when the project builds native code with CMake, false = never, or a version.'),
147
+ packages: Packages('More sdkmanager packages (not the emulator or system images)', '["extras;google;usb_driver"]'),
148
+ }),
149
+ flutter: z.strictObject({
150
+ enabled: enabled('Flutter (with its Dart) from the official releases (checked against their SHA-256), with the Android SDK for Android builds.', 'a pubspec.yaml with a flutter: section'),
151
+ version: z
152
+ .string()
153
+ .min(1)
154
+ .describe('"project" = the version in .fvmrc (else the newest stable), "stable", "beta", or a version such as "3.24.5".'),
155
+ windowsDesktop: z
156
+ .boolean()
157
+ .describe("Windows desktop builds: needs Visual Studio Build Tools' C++ parts (a real installer: it runs every boot, ~5 GB on the sandbox disk)."),
158
+ precache: StringsSchema.describe('Platforms whose engine files are downloaded ahead (flutter precache), e.g. ["android", "web"].'),
159
+ }),
160
+ dart: z.strictObject({
161
+ enabled: enabled('The Dart SDK (without Flutter), checked against its published SHA-256.', 'a pubspec.yaml without a flutter: section'),
162
+ version: z.string().min(1).describe('"stable", "beta" or a version such as "3.5.4".'),
163
+ }),
164
+ reactNative: z.strictObject({
165
+ enabled: enabled('React Native / Expo: the Android SDK and JDK for Android builds (Node is always there). iOS builds run in EAS Build (the cloud).', 'a package.json depending on react-native or expo'),
166
+ easCli: z.boolean().describe('Also eas-cli (Expo Application Services) as a global npm package.'),
65
167
  }),
66
168
  cpp: z.strictObject({
67
169
  enabled: enabled("MinGW-w64 GCC with CMake, Ninja, premake5 and mingw32-make (also Rust's linker).", 'CMakeLists.txt, Makefile, meson.build, premake5.lua or Cargo.toml'),
@@ -78,6 +180,7 @@ export const ToolchainsSchema = z.strictObject({
78
180
  netfx35: z
79
181
  .boolean()
80
182
  .describe('.NET Framework 3.5 runtime (a Windows feature, enabled from Windows Update on every boot; a few minutes).'),
183
+ templates: Packages('Project templates (`dotnet new install`)', '["MonoGame.Templates.CSharp"]'),
81
184
  }),
82
185
  go: z.strictObject({
83
186
  enabled: enabled('Go.', 'go.mod or go.work'),
@@ -95,6 +198,9 @@ export const ToolchainsSchema = z.strictObject({
95
198
  .describe('"lts" (newest LTS) or a major version such as "21". A project\'s .java-version or .sdkmanrc wins.'),
96
199
  maven: z.boolean().describe("Apache Maven (mvn). A project's mvnw works either way."),
97
200
  gradle: z.boolean().describe("Gradle (gradle). A project's gradlew works either way."),
201
+ kotlin: z
202
+ .boolean()
203
+ .describe("Also the Kotlin compiler (kotlinc) from JetBrains' releases. Gradle builds fetch their own."),
98
204
  }),
99
205
  ruby: z.strictObject({
100
206
  enabled: enabled('Ruby (RubyInstaller, with gem and bundler). Gems with C extensions need MSYS2, which is not included.', 'Gemfile, a .gemspec or .ruby-version'),
@@ -2,6 +2,9 @@ import type { z } from 'zod';
2
2
  import type { AutoToolchain, ToolchainDecision } from './detect/index.js';
3
3
  import type { BootWant } from './local-config/index.js';
4
4
  import type { ConfigSchema, GitAccessSchema, HarnessSchema, LocalOverridesSchema, MappingSchema } from './schema/index.js';
5
+ import type { Payloads } from '../shared/accounts/payloads.js';
6
+ import type { ServiceKind } from '../shared/accounts/kinds.js';
7
+ import type { PcInstallManifest } from '../shared/paths/pc-installs.js';
5
8
  export type { AttachEndpoint, GuestRequest, GuestResponse, SandboxStatus, SessionStatus, } from '../shared/channel/index.js';
6
9
  export type Config = z.output<typeof ConfigSchema>;
7
10
  export type Overrides = z.output<typeof LocalOverridesSchema>;
@@ -143,6 +146,17 @@ export interface GenerateOptions {
143
146
  vpn?: PreparedVpn;
144
147
  /** The saved GitHub token (github.shareToken, host/github/deliver.ts): only ever written to the one-shot file. */
145
148
  githubToken?: string;
149
+ /** Saved service sign-ins this launch hands over (accounts.<kind>.share): only ever in the one-shot file. */
150
+ serviceAccounts?: Payloads;
151
+ /** The kinds whose lease this launch holds (a sign-in made or renewed there may come back). Names only. */
152
+ accountLeases?: ServiceKind[];
153
+ /** The launch's id, when the caller made it first (service-account leases name it). */
154
+ launchId?: string;
155
+ /** pcInstalls: this PC's games, engines and editors, read-only under C:\PcInstalls (host/pc-installs). */
156
+ pcInstalls?: {
157
+ mappings: ResolvedMapping[];
158
+ manifest: PcInstallManifest;
159
+ };
146
160
  /** The data set's mappings from a storage provider (contained storage); else the data folder is one mapping. */
147
161
  dataMappings?: ResolvedMapping[];
148
162
  }
@@ -284,4 +298,8 @@ export interface GuestSession {
284
298
  agentProfileDirs?: Record<string, string[]>;
285
299
  /** Every configured agent (without its environment): a terminal command each; older launch folders lack it. */
286
300
  agents?: Record<string, Harness>;
301
+ /** pcInstalls: what is mapped read-only under C:\PcInstalls (paths in the sandbox only); older launches lack it. */
302
+ pcInstalls?: PcInstallManifest;
303
+ /** Service sign-ins whose lease this launch holds: the sandbox hands renewed ones back (names only). */
304
+ accountLeases?: ServiceKind[];
287
305
  }
@@ -0,0 +1,25 @@
1
+ import type { Payload, ServiceKind } from '../../shared/accounts/index.js';
2
+ export interface Applied {
3
+ /** Variables the agent's sessions get (EXPO_TOKEN ...), in memory only. */
4
+ readonly env?: Readonly<Record<string, string>>;
5
+ /** One line for the boot log; never the secret. */
6
+ readonly summary: string;
7
+ }
8
+ export interface GuestAdapter<K extends ServiceKind> {
9
+ readonly kind: K;
10
+ apply(p: Payload<K>): Promise<Applied> | Applied;
11
+ /** Bounded, BOM-aware read of what the tool holds now; null when it holds none. */
12
+ current?(): Payload<K> | null;
13
+ /** How often current() is asked (default 60000 ms). */
14
+ readonly checkMs?: number;
15
+ /** When the sandbox stops: let go of what must not stay taken (a Unity seat). */
16
+ release?(): Promise<void> | void;
17
+ }
18
+ /** %LOCALAPPDATA% of the sandbox's user (its own disk). */
19
+ export declare function localAppData(): string;
20
+ /** The sandbox's own folder for the accounts: %LOCALAPPDATA%\AgentSandbox\accounts (wiped with the sandbox). */
21
+ export declare function accountsRoot(): string;
22
+ /** Where one kind's files go (a keystore, a .p8, a cfg the server reads). */
23
+ export declare function secretDir(kind: ServiceKind): string;
24
+ /** What a kind whose sandbox side is not written yet says (the sign-in is not used). */
25
+ export declare function notAvailableYet(kind: ServiceKind): Applied;
@@ -0,0 +1,21 @@
1
+ // How a handed-over service sign-in becomes the tool's own (one adapter per kind under kinds/): apply writes it where
2
+ // the tool reads it, current reads back what the tool holds now (a renewed sign-in), release lets go of it when the
3
+ // sandbox stops (a Unity seat). Adapters write only to secretDir(kind) or the tool's own files on the sandbox's disk,
4
+ // which is wiped when the sandbox closes. No runtime imports: the self-test loads these files.
5
+ import path from 'node:path';
6
+ /** %LOCALAPPDATA% of the sandbox's user (its own disk). */
7
+ export function localAppData() {
8
+ return process.env.LOCALAPPDATA ?? 'C:\\Users\\WDAGUtilityAccount\\AppData\\Local';
9
+ }
10
+ /** The sandbox's own folder for the accounts: %LOCALAPPDATA%\AgentSandbox\accounts (wiped with the sandbox). */
11
+ export function accountsRoot() {
12
+ return path.join(localAppData(), 'AgentSandbox', 'accounts');
13
+ }
14
+ /** Where one kind's files go (a keystore, a .p8, a cfg the server reads). */
15
+ export function secretDir(kind) {
16
+ return path.join(accountsRoot(), kind);
17
+ }
18
+ /** What a kind whose sandbox side is not written yet says (the sign-in is not used). */
19
+ export function notAvailableYet(kind) {
20
+ return { summary: kind + ': using a saved sign-in is not available yet (it is not used)' };
21
+ }
@@ -0,0 +1,5 @@
1
+ import type { ServiceKind } from '../../shared/accounts/index.js';
2
+ import type { GuestAdapter } from './adapter.js';
3
+ export declare const ADAPTERS: {
4
+ readonly [K in ServiceKind]: GuestAdapter<K>;
5
+ };