windows-development-sandbox 1.25.1 → 1.27.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 (196) hide show
  1. package/config.example.json +12 -3
  2. package/dist/app/features/accounts/services.def.d.ts +1 -1
  3. package/dist/app/features/accounts/services.def.js +1 -1
  4. package/dist/app/features/defs.d.ts +198 -3
  5. package/dist/app/features/defs.js +8 -0
  6. package/dist/app/features/settings/categories.def.js +1 -0
  7. package/dist/app/features/unity/index.d.ts +2 -0
  8. package/dist/app/features/unity/index.js +3 -0
  9. package/dist/app/features/unity/unity.def.d.ts +294 -0
  10. package/dist/app/features/unity/unity.def.js +471 -0
  11. package/dist/app/features/unity/unity.run.d.ts +142 -0
  12. package/dist/app/features/unity/unity.run.js +363 -0
  13. package/dist/app/registry.js +6 -0
  14. package/dist/bin/agent-sandbox.js +2 -2
  15. package/dist/bin/{chunk-F4PVBN23.js → chunk-6WWMBCT2.js} +3580 -1962
  16. package/dist/bin/{chunk-3GAXLATK.js → chunk-JXL6ZOO3.js} +72 -5
  17. package/dist/bin/{chunk-G3TG4ZT7.js → chunk-ZXCAVVS4.js} +1 -1
  18. package/dist/bin/claude-host.js +2 -2
  19. package/dist/bin/claude-sbx.js +2 -2
  20. package/dist/bin/codex-sbx.js +2 -2
  21. package/dist/bin/gemini-sbx.js +2 -2
  22. package/dist/bin/sandbox.js +2 -2
  23. package/dist/bin/sbx-hide.js +2 -2
  24. package/dist/bin/sbx-show.js +2 -2
  25. package/dist/cli/commands/launch/launch.js +12 -0
  26. package/dist/cli/commands/registry.js +3 -0
  27. package/dist/cli/manifest.d.ts +33 -1
  28. package/dist/cli/manifest.js +32 -1
  29. package/dist/cli/menu/coverage-exempt.js +1 -0
  30. package/dist/cli/menu/pages/sandbox-page.d.ts +3 -0
  31. package/dist/cli/menu/pages/sandbox-page.js +40 -3
  32. package/dist/cli/menu/views.js +2 -0
  33. package/dist/core/config/defaults.js +16 -3
  34. package/dist/core/schema/accounts.d.ts +3 -0
  35. package/dist/core/schema/accounts.js +1 -0
  36. package/dist/core/schema/config.d.ts +29 -13
  37. package/dist/core/schema/github.d.ts +1 -0
  38. package/dist/core/schema/github.js +3 -0
  39. package/dist/core/schema/pc-installs.d.ts +2 -1
  40. package/dist/core/schema/pc-installs.js +6 -1
  41. package/dist/core/schema/toolchains.d.ts +8 -0
  42. package/dist/core/schema/toolchains.js +19 -4
  43. package/dist/guest/accounts/adapters.js +2 -0
  44. package/dist/guest/accounts/apply.d.ts +4 -2
  45. package/dist/guest/accounts/kinds/perplexityapp.d.ts +7 -0
  46. package/dist/guest/accounts/kinds/perplexityapp.js +53 -0
  47. package/dist/guest/accounts/kinds/unity.d.ts +27 -0
  48. package/dist/guest/accounts/kinds/unity.js +164 -7
  49. package/dist/guest/apps/app-installer.js +18 -0
  50. package/dist/guest/apps/store-app.d.ts +4 -0
  51. package/dist/guest/apps/store-app.js +19 -0
  52. package/dist/guest/apps/store-check.d.ts +8 -0
  53. package/dist/guest/apps/store-check.js +33 -0
  54. package/dist/guest/boot/boot.js +1 -1
  55. package/dist/guest/boot/guide.js +18 -0
  56. package/dist/guest/browser/comet.d.ts +3 -1
  57. package/dist/guest/browser/comet.js +1 -1
  58. package/dist/guest/browser/perplexity-app.d.ts +12 -0
  59. package/dist/guest/browser/perplexity-app.js +60 -0
  60. package/dist/guest/daemon/daemon.js +2 -0
  61. package/dist/guest/devtools/devtool.d.ts +1 -1
  62. package/dist/guest/devtools/registry.js +1 -2
  63. package/dist/guest/entries/tool.js +1 -1
  64. package/dist/guest/setup/addon-mcp.d.ts +7 -2
  65. package/dist/guest/setup/addon-mcp.js +19 -9
  66. package/dist/guest/setup/github-token.js +4 -4
  67. package/dist/guest/setup/unity-agent.d.ts +11 -0
  68. package/dist/guest/setup/unity-agent.js +36 -0
  69. package/dist/guest/toolchains/engines/unity-cli.d.ts +24 -0
  70. package/dist/guest/toolchains/engines/unity-cli.js +74 -0
  71. package/dist/guest/toolchains/engines/unity-hub.d.ts +2 -0
  72. package/dist/guest/toolchains/engines/unity-hub.js +27 -0
  73. package/dist/guest/toolchains/engines/unity-release.d.ts +4 -15
  74. package/dist/guest/toolchains/engines/unity-release.js +17 -5
  75. package/dist/guest/toolchains/engines/unity-status.d.ts +11 -0
  76. package/dist/guest/toolchains/engines/unity-status.js +39 -0
  77. package/dist/guest/toolchains/engines/unity.d.ts +20 -1
  78. package/dist/guest/toolchains/engines/unity.js +250 -3
  79. package/dist/guest/toolchains/plan.js +5 -1
  80. package/dist/guest/toolchains/tools/cli.js +2 -2
  81. package/dist/host/accounts/deliver.js +4 -0
  82. package/dist/host/accounts/kinds/perplexityapp.d.ts +2 -0
  83. package/dist/host/accounts/kinds/perplexityapp.js +8 -0
  84. package/dist/host/accounts/kinds/unity.d.ts +1 -1
  85. package/dist/host/accounts/kinds/unity.js +60 -8
  86. package/dist/host/accounts/leases.d.ts +2 -1
  87. package/dist/host/accounts/sources.js +2 -0
  88. package/dist/host/apps/index.d.ts +1 -0
  89. package/dist/host/apps/index.js +2 -0
  90. package/dist/host/apps/store-package.d.ts +51 -0
  91. package/dist/host/apps/store-package.js +209 -0
  92. package/dist/host/github/deliver.d.ts +8 -3
  93. package/dist/host/github/deliver.js +42 -29
  94. package/dist/host/github/index.d.ts +1 -0
  95. package/dist/host/github/index.js +1 -0
  96. package/dist/host/github/pc-login.d.ts +27 -0
  97. package/dist/host/github/pc-login.js +129 -0
  98. package/dist/host/pc-installs/discover.d.ts +4 -0
  99. package/dist/host/pc-installs/discover.js +16 -4
  100. package/dist/host/pc-installs/source.d.ts +1 -1
  101. package/dist/host/pc-installs/unity-assets.d.ts +5 -0
  102. package/dist/host/pc-installs/unity-assets.js +18 -0
  103. package/dist/host/pc-installs/unity.d.ts +20 -0
  104. package/dist/host/pc-installs/unity.js +135 -2
  105. package/dist/runtime/agent.js +116 -11
  106. package/dist/runtime/daemon.js +2170 -976
  107. package/dist/runtime/db.js +116 -11
  108. package/dist/runtime/main.js +2543 -1364
  109. package/dist/runtime/netproxy.js +116 -11
  110. package/dist/runtime/tool.js +133 -31
  111. package/dist/runtime/view.js +116 -11
  112. package/dist/selftest/agents-web.test.js +2 -1
  113. package/dist/selftest/engines.test.js +2 -2
  114. package/dist/selftest/github.test.js +64 -1
  115. package/dist/selftest/index.js +10 -0
  116. package/dist/selftest/menu-screens.js +3 -1
  117. package/dist/selftest/persisted-installs.test.js +1 -1
  118. package/dist/selftest/service-accounts.test.js +1 -1
  119. package/dist/selftest/store-app.test.d.ts +2 -0
  120. package/dist/selftest/store-app.test.js +162 -0
  121. package/dist/selftest/support/engine-golden.js +7 -0
  122. package/dist/selftest/support/fixtures.d.ts +10 -1
  123. package/dist/selftest/support/unity-sample.d.ts +2 -0
  124. package/dist/selftest/support/unity-sample.js +80 -0
  125. package/dist/selftest/unity-accounts.test.d.ts +2 -0
  126. package/dist/selftest/unity-accounts.test.js +106 -0
  127. package/dist/selftest/unity-agent.test.d.ts +2 -0
  128. package/dist/selftest/unity-agent.test.js +47 -0
  129. package/dist/selftest/unity-page.test.d.ts +2 -0
  130. package/dist/selftest/unity-page.test.js +177 -0
  131. package/dist/selftest/unity-setup.test.d.ts +2 -0
  132. package/dist/selftest/unity-setup.test.js +49 -0
  133. package/dist/selftest/unity.test.js +238 -3
  134. package/dist/shared/accounts/index.d.ts +1 -0
  135. package/dist/shared/accounts/index.js +1 -0
  136. package/dist/shared/accounts/kinds/unity.d.ts +28 -0
  137. package/dist/shared/accounts/kinds/unity.js +88 -0
  138. package/dist/shared/accounts/kinds.d.ts +2 -2
  139. package/dist/shared/accounts/kinds.js +23 -1
  140. package/dist/shared/accounts/payloads.d.ts +52 -0
  141. package/dist/shared/accounts/payloads.js +14 -2
  142. package/dist/shared/apps/catalogue-agents-web.d.ts +7 -0
  143. package/dist/shared/apps/catalogue-agents-web.js +23 -0
  144. package/dist/shared/apps/catalogue-gamedev.d.ts +3 -0
  145. package/dist/shared/apps/catalogue-gamedev.js +31 -0
  146. package/dist/shared/apps/catalogue.d.ts +8 -0
  147. package/dist/shared/apps/index.d.ts +3 -2
  148. package/dist/shared/apps/index.js +3 -2
  149. package/dist/shared/apps/selection.d.ts +6 -0
  150. package/dist/shared/apps/selection.js +9 -0
  151. package/dist/shared/apps/store-package.d.ts +31 -0
  152. package/dist/shared/apps/store-package.js +34 -0
  153. package/dist/shared/channel/schema.d.ts +24 -0
  154. package/dist/shared/channel/secrets.d.ts +17 -0
  155. package/dist/shared/paths/pc-installs.d.ts +1 -1
  156. package/dist/shared/paths/pc-installs.js +1 -0
  157. package/dist/shared/readiness.d.ts +2 -2
  158. package/dist/shared/readiness.js +2 -2
  159. package/dist/shared/unity/asset-cache.d.ts +20 -0
  160. package/dist/shared/unity/asset-cache.js +44 -0
  161. package/dist/shared/unity/cli.d.ts +40 -0
  162. package/dist/shared/unity/cli.js +77 -0
  163. package/dist/shared/unity/editors.d.ts +46 -0
  164. package/dist/shared/unity/editors.js +89 -0
  165. package/dist/shared/unity/guide.d.ts +9 -0
  166. package/dist/shared/unity/guide.js +84 -0
  167. package/dist/shared/unity/index.d.ts +9 -0
  168. package/dist/shared/unity/index.js +11 -0
  169. package/dist/shared/unity/manifest.d.ts +10 -0
  170. package/dist/shared/unity/manifest.js +53 -0
  171. package/dist/shared/unity/mcp.d.ts +8 -0
  172. package/dist/shared/unity/mcp.js +12 -0
  173. package/dist/shared/unity/release.d.ts +28 -0
  174. package/dist/shared/unity/release.js +83 -0
  175. package/dist/shared/unity/status.d.ts +59 -0
  176. package/dist/shared/unity/status.js +45 -0
  177. package/dist/shared/unity/version.d.ts +27 -0
  178. package/dist/shared/unity/version.js +75 -0
  179. package/dist/web/index.html +1 -1
  180. package/dist/web/{main-FNE6XEHA.js → main-VPMYTSUL.js} +67 -67
  181. package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
  182. package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
  183. package/native/csharp/StorageHelper/AssemblyInfo.cs +3 -3
  184. package/native/scripts/get-store-package.ps1 +58 -0
  185. package/package.json +1 -1
  186. package/sandbox/addons/openupm-cli/package-lock.json +2921 -0
  187. package/sandbox/addons/openupm-cli/package.json +7 -0
  188. package/sandbox/addons/unity-mcp/requirements.in +1 -0
  189. package/sandbox/addons/unity-mcp/requirements.txt +1165 -0
  190. package/sandbox/csharp/AppActivation.cs +38 -0
  191. package/sandbox/scripts/install-store-package.ps1 +28 -0
  192. package/sandbox/scripts/start-store-app.ps1 +29 -0
  193. package/schemas/config.schema.json +61 -6
  194. package/schemas/sandbox-config.schema.json +38 -5
  195. package/dist/guest/devtools/unity.d.ts +0 -2
  196. package/dist/guest/devtools/unity.js +0 -7
@@ -223,6 +223,9 @@ import {
223
223
  takeHiddenInstallNotice,
224
224
  toWireError,
225
225
  trustStorePath,
226
+ unityOverview,
227
+ unityPage,
228
+ unityView,
226
229
  unrealOverview,
227
230
  unrealPage,
228
231
  unrealView,
@@ -254,7 +257,7 @@ import {
254
257
  withOperationCommands,
255
258
  working,
256
259
  writeJson
257
- } from "./chunk-F4PVBN23.js";
260
+ } from "./chunk-6WWMBCT2.js";
258
261
 
259
262
  // node_modules/commander/lib/error.js
260
263
  var require_error = __commonJS({
@@ -3987,7 +3990,7 @@ var COMMAND_LIST = [
3987
3990
  },
3988
3991
  {
3989
3992
  name: "name",
3990
- description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity or comet",
3993
+ description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity, comet or perplexityapp",
3991
3994
  required: false,
3992
3995
  choices: "accounts"
3993
3996
  }
@@ -4095,6 +4098,37 @@ var COMMAND_LIST = [
4095
4098
  ],
4096
4099
  options: []
4097
4100
  },
4101
+ {
4102
+ name: "unity",
4103
+ summary: "Unity: the sandbox's editors, this PC's editors and Asset Store downloads, the licence, the editor bridge, Unity Hub",
4104
+ group: "Projects & accounts",
4105
+ json,
4106
+ examples: [
4107
+ "sandbox unity editors, which project opens with which, the licence",
4108
+ "sandbox unity sign-in sign in to Unity in the running sandbox",
4109
+ "sandbox unity add-bridge D:\\Game add the editor bridge to a project (asks first)"
4110
+ ],
4111
+ args: [
4112
+ {
4113
+ name: "action",
4114
+ description: "status, hub, sign-in, add-bridge, remove-bridge",
4115
+ required: false,
4116
+ choices: ["status"]
4117
+ },
4118
+ {
4119
+ name: "project",
4120
+ description: "(add-bridge, remove-bridge) the Unity project folder",
4121
+ required: false,
4122
+ when: []
4123
+ }
4124
+ ],
4125
+ options: [
4126
+ text("--bridge", "name", "(add-bridge) pipeline (Unity 6 and later) or coplay (older Unity)", {
4127
+ when: "add-bridge",
4128
+ label: "Bridge"
4129
+ })
4130
+ ]
4131
+ },
4098
4132
  {
4099
4133
  name: "engine",
4100
4134
  summary: "(beta) what runs your sandbox (Windows Sandbox or HCS) and what each engine can do on this PC",
@@ -6768,6 +6802,7 @@ var MENU_VIEWS = [
6768
6802
  { view: appsView, section: "Apps" },
6769
6803
  { view: projectsView, section: "Sandbox" },
6770
6804
  { view: unrealView, section: "Sandbox" },
6805
+ { view: unityView, section: "Sandbox" },
6771
6806
  { view: healthView, section: "Maintenance" },
6772
6807
  { view: dataView, section: "Maintenance" },
6773
6808
  { view: storageView, section: "Maintenance" },
@@ -8649,11 +8684,19 @@ var CATEGORIES3 = [
8649
8684
  id: "unreal",
8650
8685
  label: "Unreal Engine",
8651
8686
  description: "Engines, which project uses which, this PC's engines and assets, Visual Studio and the debugger."
8687
+ },
8688
+ {
8689
+ id: "unity",
8690
+ label: "Unity",
8691
+ description: "Editors, this PC's editors and Asset Store downloads, the licence, the editor bridge and Unity Hub."
8652
8692
  }
8653
8693
  ];
8654
8694
  function unrealMenu(m) {
8655
8695
  return m.unreal ? menuView(unrealPage(m.unreal), { category: "unreal", prefix: "unreal:", refresh: false }) : void 0;
8656
8696
  }
8697
+ function unityMenu(m) {
8698
+ return m.unity ? menuView(unityPage(m.unity), { category: "unity", prefix: "unity:", refresh: false }) : void 0;
8699
+ }
8657
8700
  function statusView(m) {
8658
8701
  return menuView(sandboxPage(m.report), { category: "status", prefix: "status:", refresh: false });
8659
8702
  }
@@ -8663,6 +8706,7 @@ function projectsView2(m) {
8663
8706
  function viewFor(m, category) {
8664
8707
  if (category === "projects") return projectsView2(m);
8665
8708
  if (category === "unreal") return unrealMenu(m);
8709
+ if (category === "unity") return unityMenu(m);
8666
8710
  if (category === "status" || category === void 0) return statusView(m);
8667
8711
  return void 0;
8668
8712
  }
@@ -8700,12 +8744,32 @@ function sandboxOptions(m) {
8700
8744
  disabled: "l looks again."
8701
8745
  }
8702
8746
  ];
8747
+ const unity = unityMenu(m);
8748
+ const noUnity = unity ? [] : [
8749
+ {
8750
+ value: "info:unity",
8751
+ label: "Could not read the Unity set-up",
8752
+ category: "unity",
8753
+ section: "Unity",
8754
+ description: "l looks again.",
8755
+ disabled: "l looks again."
8756
+ }
8757
+ ];
8703
8758
  return {
8704
8759
  path: [],
8705
- items: [...statusItems, ...projects.items, ...databases, ...noDatabases, ...unreal?.items ?? [], ...noUnreal],
8760
+ items: [
8761
+ ...statusItems,
8762
+ ...projects.items,
8763
+ ...databases,
8764
+ ...noDatabases,
8765
+ ...unreal?.items ?? [],
8766
+ ...noUnreal,
8767
+ ...unity?.items ?? [],
8768
+ ...noUnity
8769
+ ],
8706
8770
  categories: CATEGORIES3,
8707
8771
  empty: "Nothing here yet.",
8708
- actions: (category) => category === "projects" ? [...projects.actions, REFRESH] : category === "databases" ? [REFRESH] : category === "unreal" ? [...unreal?.actions ?? [], REFRESH] : [...status.actions, REFRESH],
8772
+ actions: (category) => category === "projects" ? [...projects.actions, REFRESH] : category === "databases" ? [REFRESH] : category === "unreal" ? [...unreal?.actions ?? [], REFRESH] : category === "unity" ? [...unity?.actions ?? [], REFRESH] : [...status.actions, REFRESH],
8709
8773
  enterLabel: (category, id) => viewFor(m, category)?.enterLabel(category, id) || enterLabel2(id ?? "", m)
8710
8774
  };
8711
8775
  }
@@ -8759,7 +8823,8 @@ var SandboxPage = class extends ListPage {
8759
8823
  projects: await readQuery(listProjects, this.ctx),
8760
8824
  databases,
8761
8825
  defaultAgent: this.defaultAgent(),
8762
- unreal: await readQuery(unrealOverview, this.ctx).catch(() => null)
8826
+ unreal: await readQuery(unrealOverview, this.ctx).catch(() => null),
8827
+ unity: await readQuery(unityOverview, this.ctx).catch(() => null)
8763
8828
  };
8764
8829
  }
8765
8830
  /** The folder `sbx-db` runs in: the sandbox's own workspace. */
@@ -10531,6 +10596,8 @@ var HANDLERS = {
10531
10596
  engine,
10532
10597
  // The bare command shows the overview; its actions (add-engine, forget-engine, launcher) are the operations' hints.
10533
10598
  unreal: definitionHandler(unrealOverview),
10599
+ // Same for Unity: its actions (hub, sign-in, add-bridge, remove-bridge) are the operations' hints.
10600
+ unity: definitionHandler(unityOverview),
10534
10601
  "host-claude": claudeHost,
10535
10602
  host: hostCommand,
10536
10603
  _watch: watcher,
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  attach
4
- } from "./chunk-F4PVBN23.js";
4
+ } from "./chunk-6WWMBCT2.js";
5
5
  export {
6
6
  attach
7
7
  };
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-3GAXLATK.js";
6
- import "./chunk-F4PVBN23.js";
5
+ } from "./chunk-JXL6ZOO3.js";
6
+ import "./chunk-6WWMBCT2.js";
7
7
 
8
8
  // src/bin/claude-host.ts
9
9
  var args = process.argv.slice(2);
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-3GAXLATK.js";
6
- import "./chunk-F4PVBN23.js";
5
+ } from "./chunk-JXL6ZOO3.js";
6
+ import "./chunk-6WWMBCT2.js";
7
7
 
8
8
  // src/bin/claude-sbx.ts
9
9
  run(process.argv.slice(2), { harness: "claude" });
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-3GAXLATK.js";
6
- import "./chunk-F4PVBN23.js";
5
+ } from "./chunk-JXL6ZOO3.js";
6
+ import "./chunk-6WWMBCT2.js";
7
7
 
8
8
  // src/bin/codex-sbx.ts
9
9
  run(process.argv.slice(2), { harness: "codex" });
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-3GAXLATK.js";
6
- import "./chunk-F4PVBN23.js";
5
+ } from "./chunk-JXL6ZOO3.js";
6
+ import "./chunk-6WWMBCT2.js";
7
7
 
8
8
  // src/bin/gemini-sbx.ts
9
9
  run(process.argv.slice(2), { harness: "gemini" });
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-3GAXLATK.js";
6
- import "./chunk-F4PVBN23.js";
5
+ } from "./chunk-JXL6ZOO3.js";
6
+ import "./chunk-6WWMBCT2.js";
7
7
 
8
8
  // src/bin/sandbox.ts
9
9
  run(process.argv.slice(2));
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-3GAXLATK.js";
6
- import "./chunk-F4PVBN23.js";
5
+ } from "./chunk-JXL6ZOO3.js";
6
+ import "./chunk-6WWMBCT2.js";
7
7
 
8
8
  // src/bin/sbx-hide.ts
9
9
  run(process.argv.slice(2), { command: "hide" });
@@ -2,8 +2,8 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  run
5
- } from "./chunk-3GAXLATK.js";
6
- import "./chunk-F4PVBN23.js";
5
+ } from "./chunk-JXL6ZOO3.js";
6
+ import "./chunk-6WWMBCT2.js";
7
7
 
8
8
  // src/bin/sbx-show.ts
9
9
  run(process.argv.slice(2), { command: "show" });
@@ -11,6 +11,8 @@ import { RepoGuardStore } from '../../../host/guard/index.js';
11
11
  import { hostPublicIp, prepareVpn, readVpnLine, vpnNotes } from '../../../host/vpn/index.js';
12
12
  import { prepareGithubToken } from '../../../host/github/index.js';
13
13
  import { prepareServiceAccounts } from '../../../host/accounts/index.js';
14
+ import { prepareStorePackages } from '../../../host/apps/index.js';
15
+ import { storeApps } from '../../../shared/apps/index.js';
14
16
  import { discoverPcInstalls } from '../../../host/pc-installs/index.js';
15
17
  import { clearSecrets } from '../../../host/secrets/index.js';
16
18
  import { assertCanLaunch, isSandboxRunning, spawnDetached, probeHost, hideSandboxWindow, realContainedDeps, } from '../../../host/sandbox/index.js';
@@ -193,12 +195,20 @@ class Launcher {
193
195
  // A new launch needs no sandbox running, so a lease held elsewhere is from one that stopped.
194
196
  isRunning: () => isSandboxRunning(),
195
197
  });
198
+ // Store apps (apps.install): their packages are fetched with this PC's own Store tooling.
199
+ const store = generateOnly
200
+ ? null
201
+ : await prepareStorePackages(storeApps(config.apps.install), {
202
+ storageRoot: ctx.storageRoot,
203
+ dataPath: run.dataPath,
204
+ });
196
205
  // pcInstalls: this PC's games, engines and editors, read-only (yours only: never from a project file). The
197
206
  // engines ("auto") come along whenever this launch sets the sandbox up for Unreal.
198
207
  const pcInstalls = discoverPcInstalls(ctx.loaded.config.pcInstalls, {
199
208
  packageRoot: ctx.packageRoot,
200
209
  storageRoot: ctx.storageRoot,
201
210
  unrealOn: toolchainsOn.has('unreal'),
211
+ unityOn: toolchainsOn.has('unity'),
202
212
  });
203
213
  // This PC's commit (RAM plus paging file) bounds the sandbox's memory as much as free RAM does.
204
214
  const hostMemory = generateOnly ? null : readHostMemory(ctx.storageRoot);
@@ -236,6 +246,8 @@ class Launcher {
236
246
  console.log(c.yellow(line));
237
247
  for (const line of accounts?.notes ?? [])
238
248
  console.log(c.yellow(line));
249
+ for (const line of store?.notes ?? [])
250
+ console.log(c.yellow(line));
239
251
  for (const line of pcInstalls.notes)
240
252
  console.log(c.yellow(line));
241
253
  table(launchSummary(run, generated, prepared));
@@ -8,6 +8,7 @@ import { listAccounts } from '../../app/features/accounts/index.js';
8
8
  import { containedStatus, showStorage } from '../../app/features/storage/index.js';
9
9
  import { listProjects } from '../../app/features/projects/index.js';
10
10
  import { unrealOverview } from '../../app/features/unreal/index.js';
11
+ import { unityOverview } from '../../app/features/unity/index.js';
11
12
  import { definitionHandler } from '../operations/index.js';
12
13
  import { fail } from '../../core/util/index.js';
13
14
  import { claudeHost, config, doctor, hostCommand, logs, sync, watcher } from './maintenance/index.js';
@@ -51,6 +52,8 @@ export const HANDLERS = {
51
52
  engine: engine,
52
53
  // The bare command shows the overview; its actions (add-engine, forget-engine, launcher) are the operations' hints.
53
54
  unreal: definitionHandler(unrealOverview),
55
+ // Same for Unity: its actions (hub, sign-in, add-bridge, remove-bridge) are the operations' hints.
56
+ unity: definitionHandler(unityOverview),
54
57
  'host-claude': claudeHost,
55
58
  host: hostCommand,
56
59
  _watch: watcher,
@@ -304,7 +304,7 @@ declare const COMMAND_LIST: readonly [{
304
304
  readonly choices: readonly ["list", "save", "use", "default", "rename", "remove"];
305
305
  }, {
306
306
  readonly name: "name";
307
- readonly description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity or comet";
307
+ readonly description: "account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity, comet or perplexityapp";
308
308
  readonly required: false;
309
309
  readonly choices: "accounts";
310
310
  }];
@@ -506,6 +506,38 @@ declare const COMMAND_LIST: readonly [{
506
506
  readonly when: readonly [];
507
507
  }];
508
508
  readonly options: readonly [];
509
+ }, {
510
+ readonly name: "unity";
511
+ readonly summary: "Unity: the sandbox's editors, this PC's editors and Asset Store downloads, the licence, the editor bridge, Unity Hub";
512
+ readonly group: "Projects & accounts";
513
+ readonly json: true;
514
+ readonly examples: readonly ["sandbox unity editors, which project opens with which, the licence", "sandbox unity sign-in sign in to Unity in the running sandbox", "sandbox unity add-bridge D:\\Game add the editor bridge to a project (asks first)"];
515
+ readonly args: readonly [{
516
+ readonly name: "action";
517
+ readonly description: "status, hub, sign-in, add-bridge, remove-bridge";
518
+ readonly required: false;
519
+ readonly choices: readonly ["status"];
520
+ }, {
521
+ readonly name: "project";
522
+ readonly description: "(add-bridge, remove-bridge) the Unity project folder";
523
+ readonly required: false;
524
+ readonly when: readonly [];
525
+ }];
526
+ readonly options: readonly [{
527
+ flag: string;
528
+ type: "string" | "number" | "boolean" | "list";
529
+ description: string;
530
+ short?: string | undefined;
531
+ value?: string | undefined;
532
+ label?: string | undefined;
533
+ default?: string | number | undefined;
534
+ choices?: string[] | "accounts" | "harnesses" | "sessions" | undefined;
535
+ advanced?: boolean | undefined;
536
+ when?: string | string[] | undefined;
537
+ noMenu?: boolean | undefined;
538
+ group?: string | undefined;
539
+ shownAs?: string | undefined;
540
+ }];
509
541
  }, {
510
542
  readonly name: "engine";
511
543
  readonly summary: "(beta) what runs your sandbox (Windows Sandbox or HCS) and what each engine can do on this PC";
@@ -299,7 +299,7 @@ const COMMAND_LIST = [
299
299
  },
300
300
  {
301
301
  name: 'name',
302
- description: 'account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity or comet',
302
+ description: 'account name, or the service (status, import, login, logout): epic, steam, unity, cfx, keystore, play, expo, appstore, perplexity, comet or perplexityapp',
303
303
  required: false,
304
304
  choices: 'accounts',
305
305
  },
@@ -407,6 +407,37 @@ const COMMAND_LIST = [
407
407
  ],
408
408
  options: [],
409
409
  },
410
+ {
411
+ name: 'unity',
412
+ summary: "Unity: the sandbox's editors, this PC's editors and Asset Store downloads, the licence, the editor bridge, Unity Hub",
413
+ group: 'Projects & accounts',
414
+ json,
415
+ examples: [
416
+ 'sandbox unity editors, which project opens with which, the licence',
417
+ 'sandbox unity sign-in sign in to Unity in the running sandbox',
418
+ 'sandbox unity add-bridge D:\\Game add the editor bridge to a project (asks first)',
419
+ ],
420
+ args: [
421
+ {
422
+ name: 'action',
423
+ description: 'status, hub, sign-in, add-bridge, remove-bridge',
424
+ required: false,
425
+ choices: ['status'],
426
+ },
427
+ {
428
+ name: 'project',
429
+ description: '(add-bridge, remove-bridge) the Unity project folder',
430
+ required: false,
431
+ when: [],
432
+ },
433
+ ],
434
+ options: [
435
+ text('--bridge', 'name', '(add-bridge) pipeline (Unity 6 and later) or coplay (older Unity)', {
436
+ when: 'add-bridge',
437
+ label: 'Bridge',
438
+ }),
439
+ ],
440
+ },
410
441
  {
411
442
  name: 'engine',
412
443
  summary: '(beta) what runs your sandbox (Windows Sandbox or HCS) and what each engine can do on this PC',
@@ -13,6 +13,7 @@ export const COMMAND_PLACES = {
13
13
  storage: { place: 'Maintenance > Storage' },
14
14
  engine: { place: 'Maintenance > Engine' },
15
15
  unreal: { place: 'Sandbox > Unreal Engine' },
16
+ unity: { place: 'Sandbox > Unity' },
16
17
  sync: { place: 'Maintenance > More commands' },
17
18
  logs: { place: 'Maintenance > Logs (key f follows)' },
18
19
  setup: { place: 'Maintenance > Health' },
@@ -1,6 +1,7 @@
1
1
  import { type ProjectsList } from '../../../app/features/projects/index.js';
2
2
  import { type SandboxStatus } from '../../../app/features/sandbox/index.js';
3
3
  import { type UnrealOverview } from '../../../app/features/unreal/index.js';
4
+ import { type UnityOverview } from '../../../app/features/unity/index.js';
4
5
  import type { Context } from '../../commands/context.js';
5
6
  import { type DatabaseRow } from '../../services/index.js';
6
7
  import { type App, type ListOptions, type ListResult } from '../../tui/index.js';
@@ -14,6 +15,8 @@ export interface SandboxModel {
14
15
  readonly defaultAgent: string;
15
16
  /** The Unreal overview; null when it could not be read. */
16
17
  readonly unreal: UnrealOverview | null;
18
+ /** The Unity overview; null when it could not be read. */
19
+ readonly unity: UnityOverview | null;
17
20
  }
18
21
  /** The list for the sandbox tab. Pure. */
19
22
  export declare function sandboxOptions(m: SandboxModel): ListOptions<string>;
@@ -1,10 +1,11 @@
1
1
  // Section 3: the sandbox as a whole. Status (the sandbox view: its facts, the window, stopping it), Projects (the
2
2
  // projects view: roots, the projects and the all-projects setting), Databases (start and stop) and Unreal Engine (the
3
- // unreal view), each a category on the left.
3
+ // unreal view) and Unity (the unity view), each a category on the left.
4
4
  import { listProjects, projectsPage } from '../../../app/features/projects/index.js';
5
5
  import { sandboxPage, sandboxStatus } from '../../../app/features/sandbox/index.js';
6
6
  import { readQuery } from '../../../app/registry.js';
7
7
  import { unrealOverview, unrealPage } from '../../../app/features/unreal/index.js';
8
+ import { unityOverview, unityPage } from '../../../app/features/unity/index.js';
8
9
  import { errMsg, safeText } from '../../../core/util/index.js';
9
10
  import { RunDir } from '../../../shared/channel/index.js';
10
11
  import { DatabasesService } from '../../services/index.js';
@@ -25,6 +26,11 @@ const CATEGORIES = [
25
26
  label: 'Unreal Engine',
26
27
  description: "Engines, which project uses which, this PC's engines and assets, Visual Studio and the debugger.",
27
28
  },
29
+ {
30
+ id: 'unity',
31
+ label: 'Unity',
32
+ description: "Editors, this PC's editors and Asset Store downloads, the licence, the editor bridge and Unity Hub.",
33
+ },
28
34
  ];
29
35
  /** The Unreal category: the Unreal view's rows and keys (prefixed, so they never clash with other rows). */
30
36
  function unrealMenu(m) {
@@ -32,6 +38,10 @@ function unrealMenu(m) {
32
38
  ? menuView(unrealPage(m.unreal), { category: 'unreal', prefix: 'unreal:', refresh: false })
33
39
  : undefined;
34
40
  }
41
+ /** The Unity category: the Unity view's rows and keys (prefixed, so they never clash with other rows). */
42
+ function unityMenu(m) {
43
+ return m.unity ? menuView(unityPage(m.unity), { category: 'unity', prefix: 'unity:', refresh: false }) : undefined;
44
+ }
35
45
  /** The status category: the sandbox view's rows (prefixed, so they never clash with the projects' rows). */
36
46
  function statusView(m) {
37
47
  return menuView(sandboxPage(m.report), { category: 'status', prefix: 'status:', refresh: false });
@@ -46,6 +56,8 @@ function viewFor(m, category) {
46
56
  return projectsView(m);
47
57
  if (category === 'unreal')
48
58
  return unrealMenu(m);
59
+ if (category === 'unity')
60
+ return unityMenu(m);
49
61
  if (category === 'status' || category === undefined)
50
62
  return statusView(m);
51
63
  return undefined;
@@ -91,9 +103,31 @@ export function sandboxOptions(m) {
91
103
  disabled: 'l looks again.',
92
104
  },
93
105
  ];
106
+ const unity = unityMenu(m);
107
+ const noUnity = unity
108
+ ? []
109
+ : [
110
+ {
111
+ value: 'info:unity',
112
+ label: 'Could not read the Unity set-up',
113
+ category: 'unity',
114
+ section: 'Unity',
115
+ description: 'l looks again.',
116
+ disabled: 'l looks again.',
117
+ },
118
+ ];
94
119
  return {
95
120
  path: [],
96
- items: [...statusItems, ...projects.items, ...databases, ...noDatabases, ...(unreal?.items ?? []), ...noUnreal],
121
+ items: [
122
+ ...statusItems,
123
+ ...projects.items,
124
+ ...databases,
125
+ ...noDatabases,
126
+ ...(unreal?.items ?? []),
127
+ ...noUnreal,
128
+ ...(unity?.items ?? []),
129
+ ...noUnity,
130
+ ],
97
131
  categories: CATEGORIES,
98
132
  empty: 'Nothing here yet.',
99
133
  actions: (category) => category === 'projects'
@@ -102,7 +136,9 @@ export function sandboxOptions(m) {
102
136
  ? [REFRESH]
103
137
  : category === 'unreal'
104
138
  ? [...(unreal?.actions ?? []), REFRESH]
105
- : [...status.actions, REFRESH],
139
+ : category === 'unity'
140
+ ? [...(unity?.actions ?? []), REFRESH]
141
+ : [...status.actions, REFRESH],
106
142
  enterLabel: (category, id) => viewFor(m, category)?.enterLabel(category, id) || enterLabel(id ?? '', m),
107
143
  };
108
144
  }
@@ -163,6 +199,7 @@ export class SandboxPage extends ListPage {
163
199
  databases,
164
200
  defaultAgent: this.defaultAgent(),
165
201
  unreal: await readQuery(unrealOverview, this.ctx).catch(() => null),
202
+ unity: await readQuery(unityOverview, this.ctx).catch(() => null),
166
203
  };
167
204
  }
168
205
  /** The folder `sbx-db` runs in: the sandbox's own workspace. */
@@ -20,6 +20,7 @@ import { vpnView } from '../../app/features/vpn/index.js';
20
20
  import { githubView } from '../../app/features/github/index.js';
21
21
  import { accessView } from '../../app/features/access/index.js';
22
22
  import { unrealView } from '../../app/features/unreal/index.js';
23
+ import { unityView } from '../../app/features/unity/index.js';
23
24
  export const MENU_VIEWS = [
24
25
  { view: agentsView, section: 'Agents' },
25
26
  { view: agentEnvView, section: 'Agents' },
@@ -30,6 +31,7 @@ export const MENU_VIEWS = [
30
31
  { view: appsView, section: 'Apps' },
31
32
  { view: projectsView, section: 'Sandbox' },
32
33
  { view: unrealView, section: 'Sandbox' },
34
+ { view: unityView, section: 'Sandbox' },
33
35
  { view: healthView, section: 'Maintenance' },
34
36
  { view: dataView, section: 'Maintenance' },
35
37
  { view: storageView, section: 'Maintenance' },
@@ -37,7 +37,7 @@ export const DEFAULTS = {
37
37
  },
38
38
  network: { blockPrivateRanges: true, allowOnly: [], blockHosts: [], forwardPorts: [], dns: [], proxy: '' },
39
39
  vpn: { enabled: false, provider: 'nordvpn', protocol: 'udp', country: '', configFile: '', killSwitch: true },
40
- github: { shareToken: false },
40
+ github: { shareToken: false, usePcLogin: false },
41
41
  codex: {
42
42
  sandboxMode: 'danger-full-access',
43
43
  approvalPolicy: 'never',
@@ -57,6 +57,7 @@ export const DEFAULTS = {
57
57
  appstore: { share: false },
58
58
  perplexity: { share: false },
59
59
  comet: { share: false },
60
+ perplexityapp: { share: false },
60
61
  },
61
62
  pcInstalls: {
62
63
  steamGames: false,
@@ -64,7 +65,8 @@ export const DEFAULTS = {
64
65
  unrealEngines: 'auto',
65
66
  unrealEngineFolders: [],
66
67
  unrealAssets: 'auto',
67
- unityEditors: false,
68
+ unityEditors: 'auto',
69
+ unityAssets: 'auto',
68
70
  },
69
71
  provisioning: {
70
72
  copyFromHost: true,
@@ -98,7 +100,18 @@ export const DEFAULTS = {
98
100
  persistEngines: true,
99
101
  derivedDataCache: 'persisted',
100
102
  },
101
- unity: { enabled: 'auto', acceptLicense: false, version: 'project', modules: [], hub: false, keepVersions: 2 },
103
+ unity: {
104
+ enabled: 'auto',
105
+ acceptLicense: false,
106
+ version: 'project',
107
+ modules: [],
108
+ hub: false,
109
+ keepVersions: 2,
110
+ mcp: true,
111
+ agentSkills: true,
112
+ cliVersion: '1.0.0-beta.16',
113
+ assetCache: 'persisted',
114
+ },
102
115
  godot: { enabled: 'auto', version: 'project', dotnet: 'auto', exportTemplates: true, keepVersions: 2 },
103
116
  steam: { enabled: 'auto', client: false, sdkFolder: '' },
104
117
  fivem: {
@@ -30,4 +30,7 @@ export declare const AccountsSchema: z.ZodObject<{
30
30
  comet: z.ZodObject<{
31
31
  share: z.ZodBoolean;
32
32
  }, z.core.$strict>;
33
+ perplexityapp: z.ZodObject<{
34
+ share: z.ZodBoolean;
35
+ }, z.core.$strict>;
33
36
  }, z.core.$strict>;
@@ -30,5 +30,6 @@ export const AccountsSchema = z
30
30
  appstore: share('appstore', 'import the AuthKey.p8 file in Accounts'),
31
31
  perplexity: share('perplexity', 'type the API key in Accounts, or import it from a .env file'),
32
32
  comet: share('comet', 'sign in to Comet once in a sandbox: it cannot be taken from this PC'),
33
+ perplexityapp: share('perplexityapp', 'sign in to the Perplexity app once in a sandbox: it cannot be taken from this PC'),
33
34
  })
34
35
  .describe('Service sign-ins for sandboxes (game stores, engines, app signing, Perplexity). Manage them in Accounts.');