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.
- package/config.example.json +12 -3
- package/dist/app/features/accounts/services.def.d.ts +1 -1
- package/dist/app/features/accounts/services.def.js +1 -1
- package/dist/app/features/defs.d.ts +198 -3
- package/dist/app/features/defs.js +8 -0
- package/dist/app/features/settings/categories.def.js +1 -0
- package/dist/app/features/unity/index.d.ts +2 -0
- package/dist/app/features/unity/index.js +3 -0
- package/dist/app/features/unity/unity.def.d.ts +294 -0
- package/dist/app/features/unity/unity.def.js +471 -0
- package/dist/app/features/unity/unity.run.d.ts +142 -0
- package/dist/app/features/unity/unity.run.js +363 -0
- package/dist/app/registry.js +6 -0
- package/dist/bin/agent-sandbox.js +2 -2
- package/dist/bin/{chunk-F4PVBN23.js → chunk-6WWMBCT2.js} +3580 -1962
- package/dist/bin/{chunk-3GAXLATK.js → chunk-JXL6ZOO3.js} +72 -5
- package/dist/bin/{chunk-G3TG4ZT7.js → chunk-ZXCAVVS4.js} +1 -1
- package/dist/bin/claude-host.js +2 -2
- package/dist/bin/claude-sbx.js +2 -2
- package/dist/bin/codex-sbx.js +2 -2
- package/dist/bin/gemini-sbx.js +2 -2
- package/dist/bin/sandbox.js +2 -2
- package/dist/bin/sbx-hide.js +2 -2
- package/dist/bin/sbx-show.js +2 -2
- package/dist/cli/commands/launch/launch.js +12 -0
- package/dist/cli/commands/registry.js +3 -0
- package/dist/cli/manifest.d.ts +33 -1
- package/dist/cli/manifest.js +32 -1
- package/dist/cli/menu/coverage-exempt.js +1 -0
- package/dist/cli/menu/pages/sandbox-page.d.ts +3 -0
- package/dist/cli/menu/pages/sandbox-page.js +40 -3
- package/dist/cli/menu/views.js +2 -0
- package/dist/core/config/defaults.js +16 -3
- package/dist/core/schema/accounts.d.ts +3 -0
- package/dist/core/schema/accounts.js +1 -0
- package/dist/core/schema/config.d.ts +29 -13
- package/dist/core/schema/github.d.ts +1 -0
- package/dist/core/schema/github.js +3 -0
- package/dist/core/schema/pc-installs.d.ts +2 -1
- package/dist/core/schema/pc-installs.js +6 -1
- package/dist/core/schema/toolchains.d.ts +8 -0
- package/dist/core/schema/toolchains.js +19 -4
- package/dist/guest/accounts/adapters.js +2 -0
- package/dist/guest/accounts/apply.d.ts +4 -2
- package/dist/guest/accounts/kinds/perplexityapp.d.ts +7 -0
- package/dist/guest/accounts/kinds/perplexityapp.js +53 -0
- package/dist/guest/accounts/kinds/unity.d.ts +27 -0
- package/dist/guest/accounts/kinds/unity.js +164 -7
- package/dist/guest/apps/app-installer.js +18 -0
- package/dist/guest/apps/store-app.d.ts +4 -0
- package/dist/guest/apps/store-app.js +19 -0
- package/dist/guest/apps/store-check.d.ts +8 -0
- package/dist/guest/apps/store-check.js +33 -0
- package/dist/guest/boot/boot.js +1 -1
- package/dist/guest/boot/guide.js +18 -0
- package/dist/guest/browser/comet.d.ts +3 -1
- package/dist/guest/browser/comet.js +1 -1
- package/dist/guest/browser/perplexity-app.d.ts +12 -0
- package/dist/guest/browser/perplexity-app.js +60 -0
- package/dist/guest/daemon/daemon.js +2 -0
- package/dist/guest/devtools/devtool.d.ts +1 -1
- package/dist/guest/devtools/registry.js +1 -2
- package/dist/guest/entries/tool.js +1 -1
- package/dist/guest/setup/addon-mcp.d.ts +7 -2
- package/dist/guest/setup/addon-mcp.js +19 -9
- package/dist/guest/setup/github-token.js +4 -4
- package/dist/guest/setup/unity-agent.d.ts +11 -0
- package/dist/guest/setup/unity-agent.js +36 -0
- package/dist/guest/toolchains/engines/unity-cli.d.ts +24 -0
- package/dist/guest/toolchains/engines/unity-cli.js +74 -0
- package/dist/guest/toolchains/engines/unity-hub.d.ts +2 -0
- package/dist/guest/toolchains/engines/unity-hub.js +27 -0
- package/dist/guest/toolchains/engines/unity-release.d.ts +4 -15
- package/dist/guest/toolchains/engines/unity-release.js +17 -5
- package/dist/guest/toolchains/engines/unity-status.d.ts +11 -0
- package/dist/guest/toolchains/engines/unity-status.js +39 -0
- package/dist/guest/toolchains/engines/unity.d.ts +20 -1
- package/dist/guest/toolchains/engines/unity.js +250 -3
- package/dist/guest/toolchains/plan.js +5 -1
- package/dist/guest/toolchains/tools/cli.js +2 -2
- package/dist/host/accounts/deliver.js +4 -0
- package/dist/host/accounts/kinds/perplexityapp.d.ts +2 -0
- package/dist/host/accounts/kinds/perplexityapp.js +8 -0
- package/dist/host/accounts/kinds/unity.d.ts +1 -1
- package/dist/host/accounts/kinds/unity.js +60 -8
- package/dist/host/accounts/leases.d.ts +2 -1
- package/dist/host/accounts/sources.js +2 -0
- package/dist/host/apps/index.d.ts +1 -0
- package/dist/host/apps/index.js +2 -0
- package/dist/host/apps/store-package.d.ts +51 -0
- package/dist/host/apps/store-package.js +209 -0
- package/dist/host/github/deliver.d.ts +8 -3
- package/dist/host/github/deliver.js +42 -29
- package/dist/host/github/index.d.ts +1 -0
- package/dist/host/github/index.js +1 -0
- package/dist/host/github/pc-login.d.ts +27 -0
- package/dist/host/github/pc-login.js +129 -0
- package/dist/host/pc-installs/discover.d.ts +4 -0
- package/dist/host/pc-installs/discover.js +16 -4
- package/dist/host/pc-installs/source.d.ts +1 -1
- package/dist/host/pc-installs/unity-assets.d.ts +5 -0
- package/dist/host/pc-installs/unity-assets.js +18 -0
- package/dist/host/pc-installs/unity.d.ts +20 -0
- package/dist/host/pc-installs/unity.js +135 -2
- package/dist/runtime/agent.js +116 -11
- package/dist/runtime/daemon.js +2170 -976
- package/dist/runtime/db.js +116 -11
- package/dist/runtime/main.js +2543 -1364
- package/dist/runtime/netproxy.js +116 -11
- package/dist/runtime/tool.js +133 -31
- package/dist/runtime/view.js +116 -11
- package/dist/selftest/agents-web.test.js +2 -1
- package/dist/selftest/engines.test.js +2 -2
- package/dist/selftest/github.test.js +64 -1
- package/dist/selftest/index.js +10 -0
- package/dist/selftest/menu-screens.js +3 -1
- package/dist/selftest/persisted-installs.test.js +1 -1
- package/dist/selftest/service-accounts.test.js +1 -1
- package/dist/selftest/store-app.test.d.ts +2 -0
- package/dist/selftest/store-app.test.js +162 -0
- package/dist/selftest/support/engine-golden.js +7 -0
- package/dist/selftest/support/fixtures.d.ts +10 -1
- package/dist/selftest/support/unity-sample.d.ts +2 -0
- package/dist/selftest/support/unity-sample.js +80 -0
- package/dist/selftest/unity-accounts.test.d.ts +2 -0
- package/dist/selftest/unity-accounts.test.js +106 -0
- package/dist/selftest/unity-agent.test.d.ts +2 -0
- package/dist/selftest/unity-agent.test.js +47 -0
- package/dist/selftest/unity-page.test.d.ts +2 -0
- package/dist/selftest/unity-page.test.js +177 -0
- package/dist/selftest/unity-setup.test.d.ts +2 -0
- package/dist/selftest/unity-setup.test.js +49 -0
- package/dist/selftest/unity.test.js +238 -3
- package/dist/shared/accounts/index.d.ts +1 -0
- package/dist/shared/accounts/index.js +1 -0
- package/dist/shared/accounts/kinds/unity.d.ts +28 -0
- package/dist/shared/accounts/kinds/unity.js +88 -0
- package/dist/shared/accounts/kinds.d.ts +2 -2
- package/dist/shared/accounts/kinds.js +23 -1
- package/dist/shared/accounts/payloads.d.ts +52 -0
- package/dist/shared/accounts/payloads.js +14 -2
- package/dist/shared/apps/catalogue-agents-web.d.ts +7 -0
- package/dist/shared/apps/catalogue-agents-web.js +23 -0
- package/dist/shared/apps/catalogue-gamedev.d.ts +3 -0
- package/dist/shared/apps/catalogue-gamedev.js +31 -0
- package/dist/shared/apps/catalogue.d.ts +8 -0
- package/dist/shared/apps/index.d.ts +3 -2
- package/dist/shared/apps/index.js +3 -2
- package/dist/shared/apps/selection.d.ts +6 -0
- package/dist/shared/apps/selection.js +9 -0
- package/dist/shared/apps/store-package.d.ts +31 -0
- package/dist/shared/apps/store-package.js +34 -0
- package/dist/shared/channel/schema.d.ts +24 -0
- package/dist/shared/channel/secrets.d.ts +17 -0
- package/dist/shared/paths/pc-installs.d.ts +1 -1
- package/dist/shared/paths/pc-installs.js +1 -0
- package/dist/shared/readiness.d.ts +2 -2
- package/dist/shared/readiness.js +2 -2
- package/dist/shared/unity/asset-cache.d.ts +20 -0
- package/dist/shared/unity/asset-cache.js +44 -0
- package/dist/shared/unity/cli.d.ts +40 -0
- package/dist/shared/unity/cli.js +77 -0
- package/dist/shared/unity/editors.d.ts +46 -0
- package/dist/shared/unity/editors.js +89 -0
- package/dist/shared/unity/guide.d.ts +9 -0
- package/dist/shared/unity/guide.js +84 -0
- package/dist/shared/unity/index.d.ts +9 -0
- package/dist/shared/unity/index.js +11 -0
- package/dist/shared/unity/manifest.d.ts +10 -0
- package/dist/shared/unity/manifest.js +53 -0
- package/dist/shared/unity/mcp.d.ts +8 -0
- package/dist/shared/unity/mcp.js +12 -0
- package/dist/shared/unity/release.d.ts +28 -0
- package/dist/shared/unity/release.js +83 -0
- package/dist/shared/unity/status.d.ts +59 -0
- package/dist/shared/unity/status.js +45 -0
- package/dist/shared/unity/version.d.ts +27 -0
- package/dist/shared/unity/version.js +75 -0
- package/dist/web/index.html +1 -1
- package/dist/web/{main-FNE6XEHA.js → main-VPMYTSUL.js} +67 -67
- package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
- package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
- package/native/csharp/StorageHelper/AssemblyInfo.cs +3 -3
- package/native/scripts/get-store-package.ps1 +58 -0
- package/package.json +1 -1
- package/sandbox/addons/openupm-cli/package-lock.json +2921 -0
- package/sandbox/addons/openupm-cli/package.json +7 -0
- package/sandbox/addons/unity-mcp/requirements.in +1 -0
- package/sandbox/addons/unity-mcp/requirements.txt +1165 -0
- package/sandbox/csharp/AppActivation.cs +38 -0
- package/sandbox/scripts/install-store-package.ps1 +28 -0
- package/sandbox/scripts/start-store-app.ps1 +29 -0
- package/schemas/config.schema.json +61 -6
- package/schemas/sandbox-config.schema.json +38 -5
- package/dist/guest/devtools/unity.d.ts +0 -2
- package/dist/guest/devtools/unity.js +0 -7
|
@@ -1,7 +1,140 @@
|
|
|
1
|
+
// Unity editors of this PC (pcInstalls.unityEditors): Unity Hub's default folder (<Program Files>\Unity\Hub\Editor),
|
|
2
|
+
// the folder named by %APPDATA%\UnityHub\secondaryInstallPath.json and the editors in editors-v2.json. An editor counts
|
|
3
|
+
// only with Editor\Unity.exe; its folder is mapped read-only at C:\PcInstalls\unity\<version>. Every file is read
|
|
4
|
+
// bounded and every name is checked: what Hub wrote is data, never trusted.
|
|
5
|
+
import fs from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { readBoundedFile } from '../../shared/io/index.js';
|
|
9
|
+
import { assetStoreDir, pcAssetCacheDirs, UNITY_VERSION } from '../../shared/unity/index.js';
|
|
10
|
+
const win = path.win32;
|
|
11
|
+
/** At most this many editors of this PC are mapped. */
|
|
12
|
+
export const MAX_PC_EDITORS = 12;
|
|
13
|
+
const MAX_SECONDARY_BYTES = 4 * 1024;
|
|
14
|
+
const MAX_EDITORS_FILE_BYTES = 1024 * 1024;
|
|
15
|
+
const MAX_EDITOR_ENTRIES = 200;
|
|
16
|
+
const MAX_LISTED = 500;
|
|
17
|
+
const EditorsFileSchema = z.union([
|
|
18
|
+
z.array(z.unknown()).max(MAX_EDITOR_ENTRIES),
|
|
19
|
+
z.object({ data: z.array(z.unknown()).max(MAX_EDITOR_ENTRIES) }).passthrough(),
|
|
20
|
+
]);
|
|
21
|
+
const EditorEntrySchema = z
|
|
22
|
+
.object({
|
|
23
|
+
version: z.string().max(40),
|
|
24
|
+
location: z.union([z.string().max(1000), z.array(z.string().max(1000)).max(8)]),
|
|
25
|
+
})
|
|
26
|
+
.passthrough();
|
|
27
|
+
function jsonOf(files, file, max) {
|
|
28
|
+
const bytes = files.read(file, max);
|
|
29
|
+
if (!bytes)
|
|
30
|
+
return null;
|
|
31
|
+
try {
|
|
32
|
+
return JSON.parse(bytes.toString('utf8').replace(/^\uFEFF/, ''));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null; // Not JSON: Hub's file is ignored.
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** The folder in secondaryInstallPath.json (a JSON string, absolute only), or null. */
|
|
39
|
+
function secondaryRoot(files) {
|
|
40
|
+
const json = jsonOf(files, win.join(files.appData, 'UnityHub', 'secondaryInstallPath.json'), MAX_SECONDARY_BYTES);
|
|
41
|
+
return typeof json === 'string' && json.length < 1000 && win.isAbsolute(json) ? win.normalize(json) : null;
|
|
42
|
+
}
|
|
43
|
+
const hasEditorExe = (root, files) => files.list(win.join(root, 'Editor')).some((n) => n.toLowerCase() === 'unity.exe');
|
|
44
|
+
/** The editors editors-v2.json lists: only `...\Editor\Unity.exe`, the root two levels up. */
|
|
45
|
+
function listedEditors(files) {
|
|
46
|
+
const parsed = EditorsFileSchema.safeParse(jsonOf(files, win.join(files.appData, 'UnityHub', 'editors-v2.json'), MAX_EDITORS_FILE_BYTES));
|
|
47
|
+
if (!parsed.success)
|
|
48
|
+
return [];
|
|
49
|
+
const entries = Array.isArray(parsed.data) ? parsed.data : parsed.data.data;
|
|
50
|
+
const out = [];
|
|
51
|
+
for (const raw of entries) {
|
|
52
|
+
const e = EditorEntrySchema.safeParse(raw);
|
|
53
|
+
if (!e.success)
|
|
54
|
+
continue;
|
|
55
|
+
for (const location of [e.data.location].flat()) {
|
|
56
|
+
const exe = win.normalize(location);
|
|
57
|
+
if (!win.isAbsolute(exe) || win.basename(exe).toLowerCase() !== 'unity.exe')
|
|
58
|
+
continue;
|
|
59
|
+
const editorDir = win.dirname(exe);
|
|
60
|
+
if (win.basename(editorDir).toLowerCase() !== 'editor')
|
|
61
|
+
continue;
|
|
62
|
+
out.push({ version: e.data.version, root: win.dirname(editorDir) });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
/** The editors of this PC: all of them (true) or the listed versions. Each version once, each folder once. */
|
|
68
|
+
export function findUnityEditorsOnPc(files, wanted) {
|
|
69
|
+
const candidates = [];
|
|
70
|
+
const hubFolders = [win.join(files.programFiles, 'Unity', 'Hub', 'Editor'), secondaryRoot(files)].filter((d) => d !== null);
|
|
71
|
+
for (const folder of hubFolders)
|
|
72
|
+
for (const name of files.list(folder).slice(0, MAX_LISTED).sort())
|
|
73
|
+
if (UNITY_VERSION.test(name))
|
|
74
|
+
candidates.push({ version: name, root: win.join(folder, name) });
|
|
75
|
+
candidates.push(...listedEditors(files));
|
|
76
|
+
const found = [];
|
|
77
|
+
for (const c of candidates) {
|
|
78
|
+
if (found.length >= MAX_PC_EDITORS)
|
|
79
|
+
break;
|
|
80
|
+
if (!UNITY_VERSION.test(c.version))
|
|
81
|
+
continue;
|
|
82
|
+
if (wanted !== true && !wanted.includes(c.version))
|
|
83
|
+
continue;
|
|
84
|
+
const key = c.root.toLowerCase();
|
|
85
|
+
if (found.some((f) => f.id === c.version || f.host.toLowerCase() === key))
|
|
86
|
+
continue;
|
|
87
|
+
if (!files.isDir(c.root) || !hasEditorExe(c.root, files))
|
|
88
|
+
continue;
|
|
89
|
+
found.push({
|
|
90
|
+
kind: 'unity',
|
|
91
|
+
id: c.version,
|
|
92
|
+
name: 'Unity ' + c.version,
|
|
93
|
+
version: c.version,
|
|
94
|
+
host: c.root,
|
|
95
|
+
guest: '',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return found;
|
|
99
|
+
}
|
|
100
|
+
/** The Asset Store-5.x folders of this PC (the environment's cache root first, then %APPDATA%\Unity), to map. */
|
|
101
|
+
export function unityAssetCacheDirs(files, envValue) {
|
|
102
|
+
return pcAssetCacheDirs({ appData: files.appData, envValue }, files.isDir).map(assetStoreDir);
|
|
103
|
+
}
|
|
104
|
+
function listDir(dir) {
|
|
105
|
+
try {
|
|
106
|
+
return fs.readdirSync(dir).slice(0, MAX_LISTED);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return []; // Not a folder: nothing in it.
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function isDir(dir) {
|
|
113
|
+
try {
|
|
114
|
+
return fs.statSync(dir).isDirectory();
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** This PC's disk for the search. */
|
|
121
|
+
export function unityPcFiles(pc) {
|
|
122
|
+
return {
|
|
123
|
+
read: readBoundedFile,
|
|
124
|
+
isDir,
|
|
125
|
+
list: listDir,
|
|
126
|
+
appData: pc.appData,
|
|
127
|
+
programFiles: pc.programFiles ?? 'C:\\Program Files',
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/** The cache root the environment names: this terminal's variable, else the saved user one. */
|
|
131
|
+
export function assetCacheEnv(pc) {
|
|
132
|
+
return pc.env?.ASSETSTORE_CACHE_PATH ?? pc.userVariable?.('ASSETSTORE_CACHE_PATH') ?? undefined;
|
|
133
|
+
}
|
|
1
134
|
export const unityInstalls = {
|
|
2
135
|
kind: 'unity',
|
|
3
136
|
setting: 'unityEditors',
|
|
4
|
-
find(
|
|
5
|
-
return
|
|
137
|
+
find(wanted, pc) {
|
|
138
|
+
return findUnityEditorsOnPc(unityPcFiles(pc), wanted === true ? true : wanted.map(String));
|
|
6
139
|
},
|
|
7
140
|
};
|
package/dist/runtime/agent.js
CHANGED
|
@@ -25690,21 +25690,35 @@ var ToolchainsSchema = external_exports.strictObject({
|
|
|
25690
25690
|
}),
|
|
25691
25691
|
unity: external_exports.strictObject({
|
|
25692
25692
|
enabled: enabled(
|
|
25693
|
-
"Unity: the editor version a project asks for, from Unity's release API (checked against its published hash), installed
|
|
25693
|
+
"Unity: the editor version a project asks for, from Unity's release API (checked against its published hash), installed on the data disk (tools\\unity\\editors\\<version>, 8-13 GB each, kept between sandboxes), with the modules you list. This PC's editors (pcInstalls.unityEditors) are used first.",
|
|
25694
25694
|
"ProjectSettings/ProjectVersion.txt"
|
|
25695
25695
|
),
|
|
25696
25696
|
acceptLicense: external_exports.boolean().describe(
|
|
25697
25697
|
"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."
|
|
25698
25698
|
),
|
|
25699
25699
|
version: external_exports.string().min(1).describe(
|
|
25700
|
-
|
|
25700
|
+
`"project" = the version in ProjectSettings/ProjectVersion.txt, or an editor version such as "6000.0.32f1" for folders without one (a project's own version always wins).`
|
|
25701
25701
|
),
|
|
25702
25702
|
modules: external_exports.array(external_exports.string().regex(/^[a-z0-9-]+$/)).describe(
|
|
25703
25703
|
`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).`
|
|
25704
25704
|
),
|
|
25705
|
-
hub: external_exports.boolean().describe(
|
|
25705
|
+
hub: external_exports.boolean().describe(
|
|
25706
|
+
"Also Unity Hub (kept on the data disk), for signing in to Unity Personal and installing editors by hand."
|
|
25707
|
+
),
|
|
25706
25708
|
keepVersions: external_exports.number().int().min(1).max(20).describe(
|
|
25707
25709
|
"How many editor versions to keep in tools\\unity; older ones are removed (the least recently used first)."
|
|
25710
|
+
),
|
|
25711
|
+
mcp: external_exports.boolean().describe(
|
|
25712
|
+
"The Unity CLI's MCP server (unity mcp) in Claude Code and Codex as sbx-unity: Unity's read-only tools always, the open editor's tools when the project has the Unity Pipeline package (Unity 6 and later). Nothing in your project changes."
|
|
25713
|
+
),
|
|
25714
|
+
agentSkills: external_exports.boolean().describe(
|
|
25715
|
+
"Unity's skills for Claude Code and Codex, from Unity-Technologies/skills at the commit the Unity CLI pins."
|
|
25716
|
+
),
|
|
25717
|
+
cliVersion: external_exports.string().regex(/^(latest|\d+\.\d+\.\d+(-[A-Za-z0-9.]+)?)$/).describe(
|
|
25718
|
+
'The Unity CLI version, checked against the SHA-256 Unity publishes: a version such as "1.0.0-beta.16", or "latest". It never updates itself.'
|
|
25719
|
+
),
|
|
25720
|
+
assetCache: external_exports.enum(["persisted", "pc", "local"]).describe(
|
|
25721
|
+
`"persisted": Asset Store downloads made in the sandbox go to tools\\unity\\asset-store (kept). "pc": the sandbox uses this PC's Asset Store downloads (read-only; download new ones on your PC). "local": Unity's own place on the sandbox disk (lost when it closes).`
|
|
25708
25722
|
)
|
|
25709
25723
|
}),
|
|
25710
25724
|
godot: external_exports.strictObject({
|
|
@@ -25856,7 +25870,7 @@ var ToolchainsSchema = external_exports.strictObject({
|
|
|
25856
25870
|
}),
|
|
25857
25871
|
cli: external_exports.strictObject({
|
|
25858
25872
|
gh: EnabledSchema.describe(
|
|
25859
|
-
'GitHub CLI (gh). Only with provisioning.git.access "full": gh can push and merge through the GitHub API, past a read-only git. Your PC\'s gh login is
|
|
25873
|
+
'GitHub CLI (gh). Only with provisioning.git.access "full": gh can push and merge through the GitHub API, past a read-only git. Your PC\'s gh login is copied only with github.usePcLogin (or a token you saved for sandboxes with github.shareToken); otherwise `gh auth login` inside persists (GH_CONFIG_DIR). "auto" = when the project has a .github folder.'
|
|
25860
25874
|
),
|
|
25861
25875
|
zstd: EnabledSchema.describe('Zstandard (zstd). "auto" = off; set true to get it.'),
|
|
25862
25876
|
openssl: EnabledSchema.describe(
|
|
@@ -25911,6 +25925,9 @@ var COMET_SIGNER = {
|
|
|
25911
25925
|
subject: ['(^|, )CN="?PERPLEXITY AI, INC\\.?"?(,|$)', '(^|, )O="?PERPLEXITY AI, INC\\.?"?(,|$)'],
|
|
25912
25926
|
issuer: ["^CN=GlobalSign GCC R45 EV CodeSigning CA 2020(,|$)"]
|
|
25913
25927
|
};
|
|
25928
|
+
var PERPLEXITY_DESKTOP_PRODUCT_ID = "9P9XG917PWCJ";
|
|
25929
|
+
var PERPLEXITY_DESKTOP_PACKAGE = "PerplexityAI.PerplexityApp";
|
|
25930
|
+
var PERPLEXITY_DESKTOP_FAMILY = "PerplexityAI.PerplexityApp_3jh4kjrg4dzr2";
|
|
25914
25931
|
var EDGE_EXE = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
|
|
25915
25932
|
var AGENTS_WEB_APPS = [
|
|
25916
25933
|
{
|
|
@@ -25957,6 +25974,22 @@ var AGENTS_WEB_APPS = [
|
|
|
25957
25974
|
signer: COMET_SIGNER,
|
|
25958
25975
|
userOnly: true
|
|
25959
25976
|
},
|
|
25977
|
+
{
|
|
25978
|
+
id: "perplexity-desktop",
|
|
25979
|
+
name: "Perplexity (desktop app)",
|
|
25980
|
+
category: "agents",
|
|
25981
|
+
about: "Perplexity's desktop app, with Perplexity Computer, from the Microsoft Store. The package comes from this PC (winget with your own Microsoft Store access) and is kept on the data disk; the sandbox installs it on every boot. With accounts.perplexityapp.share on, your sign-in made in a sandbox is kept for the next ones (it cannot be copied from this PC). It acts on what it reads: use it only on what you would let it act on.",
|
|
25982
|
+
size: "300 MB",
|
|
25983
|
+
source: {
|
|
25984
|
+
store: {
|
|
25985
|
+
productId: PERPLEXITY_DESKTOP_PRODUCT_ID,
|
|
25986
|
+
packageName: PERPLEXITY_DESKTOP_PACKAGE,
|
|
25987
|
+
family: PERPLEXITY_DESKTOP_FAMILY
|
|
25988
|
+
}
|
|
25989
|
+
},
|
|
25990
|
+
exe: "",
|
|
25991
|
+
userOnly: true
|
|
25992
|
+
},
|
|
25960
25993
|
{
|
|
25961
25994
|
id: "comet-mcp",
|
|
25962
25995
|
name: "Comet MCP",
|
|
@@ -26010,6 +26043,8 @@ var AGENTS_WEB_APPS = [
|
|
|
26010
26043
|
];
|
|
26011
26044
|
|
|
26012
26045
|
// src/shared/apps/catalogue-gamedev.ts
|
|
26046
|
+
var UNITY_MCP_VERSION = "10.3.0";
|
|
26047
|
+
var OPENUPM_CLI_VERSION = "4.5.3";
|
|
26013
26048
|
var GAMEDEV_APPS = [
|
|
26014
26049
|
{
|
|
26015
26050
|
id: "krita",
|
|
@@ -26079,6 +26114,34 @@ var GAMEDEV_APPS = [
|
|
|
26079
26114
|
size: "60 MB",
|
|
26080
26115
|
source: { github: "nomacs/nomacs", asset: "^nomacs-portable-win\\.zip$" },
|
|
26081
26116
|
exe: "nomacs.exe"
|
|
26117
|
+
},
|
|
26118
|
+
{
|
|
26119
|
+
id: "unity-mcp",
|
|
26120
|
+
name: "MCP for Unity",
|
|
26121
|
+
category: "agents",
|
|
26122
|
+
about: "Lets Claude Code and Codex work in an open Unity editor (CoplayDev/unity-mcp 10.3.0, MIT; Unity 2021.3 to 6.x). Your project needs its package (Unity page: Add the editor bridge). Telemetry is off.",
|
|
26123
|
+
size: "60 MB",
|
|
26124
|
+
source: { locked: "uv", package: "mcpforunityserver", version: UNITY_MCP_VERSION },
|
|
26125
|
+
exe: "mcp-for-unity.exe",
|
|
26126
|
+
service: true,
|
|
26127
|
+
mcp: {
|
|
26128
|
+
name: "sbx-unity-mcp",
|
|
26129
|
+
program: true,
|
|
26130
|
+
args: ["--transport", "stdio"],
|
|
26131
|
+
env: { DISABLE_TELEMETRY: "1", UNITY_MCP_DISABLE_TELEMETRY: "1", MCP_DISABLE_TELEMETRY: "1" },
|
|
26132
|
+
codex: true
|
|
26133
|
+
},
|
|
26134
|
+
plugsInto: "Claude Code and Codex as the MCP server sbx-unity-mcp",
|
|
26135
|
+
userOnly: true
|
|
26136
|
+
},
|
|
26137
|
+
{
|
|
26138
|
+
id: "openupm-cli",
|
|
26139
|
+
name: "openupm-cli",
|
|
26140
|
+
category: "gamedev",
|
|
26141
|
+
about: "Adds OpenUPM packages to Unity projects from the command line (openupm 4.5.3, BSD-3-Clause).",
|
|
26142
|
+
size: "15 MB",
|
|
26143
|
+
source: { locked: "npm", package: "openupm-cli", version: OPENUPM_CLI_VERSION },
|
|
26144
|
+
exe: "openupm.cmd"
|
|
26082
26145
|
}
|
|
26083
26146
|
];
|
|
26084
26147
|
|
|
@@ -26953,6 +27016,21 @@ var CORE_APPS = [
|
|
|
26953
27016
|
];
|
|
26954
27017
|
var APPS = [...CORE_APPS, ...GAMEDEV_APPS, ...MODDING_APPS, ...MOBILE_APPS, ...AGENTS_WEB_APPS];
|
|
26955
27018
|
|
|
27019
|
+
// src/shared/apps/store-package.ts
|
|
27020
|
+
var GB = 1024 * 1024 * 1024;
|
|
27021
|
+
var FILE_NAME = /^[A-Za-z0-9._~+-]{1,200}\.(msix|appx|msixbundle|appxbundle)$/i;
|
|
27022
|
+
var StorePackageFileSchema = external_exports.strictObject({
|
|
27023
|
+
name: external_exports.string().regex(FILE_NAME),
|
|
27024
|
+
role: external_exports.enum(["main", "dependency"]),
|
|
27025
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
27026
|
+
bytes: external_exports.number().int().positive().max(2 * GB)
|
|
27027
|
+
});
|
|
27028
|
+
var StorePackageManifestSchema = external_exports.strictObject({
|
|
27029
|
+
productId: external_exports.string().regex(/^[A-Z0-9]{12}$/),
|
|
27030
|
+
fetchedAt: external_exports.string().max(40),
|
|
27031
|
+
files: external_exports.array(StorePackageFileSchema).min(1).max(24)
|
|
27032
|
+
}).refine((m) => m.files.filter((f) => f.role === "main").length === 1, "exactly one file must be the app itself").refine((m) => new Set(m.files.map((f) => f.name.toLowerCase())).size === m.files.length, "file names repeat");
|
|
27033
|
+
|
|
26956
27034
|
// src/core/schema/apps.ts
|
|
26957
27035
|
var CATALOGUE_IDS = APPS.filter((a) => !a.setting).map((a) => a.id);
|
|
26958
27036
|
var AppIdSchema = external_exports.enum(CATALOGUE_IDS);
|
|
@@ -27087,6 +27165,9 @@ var VpnSchema = external_exports.strictObject({
|
|
|
27087
27165
|
var GithubSchema = external_exports.strictObject({
|
|
27088
27166
|
shareToken: external_exports.boolean().describe(
|
|
27089
27167
|
'Give each sandbox the GitHub token you saved in Accounts (best a fine-grained token limited to some repositories and permissions), so gh and https git work there without logging in. Only with provisioning.git.access "full". The agent in the sandbox can read the token and use it for whatever it allows. A project file (.sandbox-config.json) cannot turn this on.'
|
|
27168
|
+
),
|
|
27169
|
+
usePcLogin: external_exports.boolean().describe(
|
|
27170
|
+
'Give each sandbox the GitHub CLI (gh) login from this PC, when there is one, so gh and https git work there without logging in. Used when no token saved for sandboxes is handed over. Only with provisioning.git.access "full". Without a gh login on the PC nothing happens. The login reaches everything your account can, and the agent in the sandbox can read it. A project file (.sandbox-config.json) cannot turn this on.'
|
|
27090
27171
|
)
|
|
27091
27172
|
});
|
|
27092
27173
|
|
|
@@ -27135,7 +27216,9 @@ var SERVICE_SPECS = {
|
|
|
27135
27216
|
warnings: [
|
|
27136
27217
|
AGENT_CAN_USE,
|
|
27137
27218
|
ONE_PLACE,
|
|
27138
|
-
"
|
|
27219
|
+
"Unity Personal is activated by signing in: sign in to Unity once in a sandbox and the licence it makes is kept for the next ones (if Unity refuses it there, sign in again).",
|
|
27220
|
+
"A Plus or Pro serial is activated in each sandbox and handed back when the sandbox stops cleanly; a sandbox closed abruptly may keep the seat until you remove it at id.unity.com (My Seats).",
|
|
27221
|
+
"A licence file taken from this PC may not work in a sandbox: Unity ties it to the computer."
|
|
27139
27222
|
],
|
|
27140
27223
|
fields: [
|
|
27141
27224
|
{ name: "email", label: "Unity ID email", secret: false, optional: true },
|
|
@@ -27262,11 +27345,28 @@ var SERVICE_SPECS = {
|
|
|
27262
27345
|
"Several sandboxes can use it at once: the sign-in the last one hands back is kept."
|
|
27263
27346
|
],
|
|
27264
27347
|
fields: []
|
|
27348
|
+
},
|
|
27349
|
+
perplexityapp: {
|
|
27350
|
+
kind: "perplexityapp",
|
|
27351
|
+
label: "Perplexity desktop app",
|
|
27352
|
+
usedBy: ["perplexityapp"],
|
|
27353
|
+
sources: ["sandbox"],
|
|
27354
|
+
singleHolder: false,
|
|
27355
|
+
returns: true,
|
|
27356
|
+
maxBytes: 256 * 1024,
|
|
27357
|
+
warnings: [
|
|
27358
|
+
AGENT_CAN_USE + " It can act as you in the Perplexity app and spend your Perplexity Computer credits; the app acts on the pages it reads, which can try to steer it.",
|
|
27359
|
+
"Your sign-in in the Perplexity app can't be copied from this PC: Windows locks it to your PC account. Sign in once inside a sandbox and it is kept for the next ones.",
|
|
27360
|
+
"Only the perplexity.ai sign-in cookies are kept: never saved passwords, other sites, localStorage or history.",
|
|
27361
|
+
"Several sandboxes can use it at once: the sign-in the last one hands back is kept."
|
|
27362
|
+
],
|
|
27363
|
+
fields: []
|
|
27265
27364
|
}
|
|
27266
27365
|
};
|
|
27267
27366
|
var APP_USER_TEXT = {
|
|
27268
27367
|
perplexity: "the Perplexity MCP app",
|
|
27269
|
-
comet: "the Comet app"
|
|
27368
|
+
comet: "the Comet app",
|
|
27369
|
+
perplexityapp: "the Perplexity desktop app"
|
|
27270
27370
|
};
|
|
27271
27371
|
function usedByText(usedBy) {
|
|
27272
27372
|
return usedBy.map((u) => u in APP_USER_TEXT ? APP_USER_TEXT[u] : u).join(" or ");
|
|
@@ -27291,7 +27391,11 @@ var AccountsSchema = external_exports.strictObject({
|
|
|
27291
27391
|
expo: share("expo", "type the token in Accounts"),
|
|
27292
27392
|
appstore: share("appstore", "import the AuthKey.p8 file in Accounts"),
|
|
27293
27393
|
perplexity: share("perplexity", "type the API key in Accounts, or import it from a .env file"),
|
|
27294
|
-
comet: share("comet", "sign in to Comet once in a sandbox: it cannot be taken from this PC")
|
|
27394
|
+
comet: share("comet", "sign in to Comet once in a sandbox: it cannot be taken from this PC"),
|
|
27395
|
+
perplexityapp: share(
|
|
27396
|
+
"perplexityapp",
|
|
27397
|
+
"sign in to the Perplexity app once in a sandbox: it cannot be taken from this PC"
|
|
27398
|
+
)
|
|
27295
27399
|
}).describe("Service sign-ins for sandboxes (game stores, engines, app signing, Perplexity). Manage them in Accounts.");
|
|
27296
27400
|
|
|
27297
27401
|
// src/core/schema/pc-installs.ts
|
|
@@ -27318,10 +27422,11 @@ var PcInstallsSchema = external_exports.strictObject({
|
|
|
27318
27422
|
unrealAssets: external_exports.union([external_exports.literal("auto"), external_exports.boolean()]).describe(
|
|
27319
27423
|
`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.`
|
|
27320
27424
|
),
|
|
27321
|
-
unityEditors:
|
|
27322
|
-
|
|
27323
|
-
|
|
27324
|
-
|
|
27425
|
+
unityEditors: external_exports.union([external_exports.literal("auto"), external_exports.boolean(), external_exports.array(external_exports.string().regex(/^\d+\.\d+\.\d+[abfp]\d+$/))]).describe(
|
|
27426
|
+
`Unity editors installed on this PC (with Unity Hub), read-only in the sandbox under C:\\PcInstalls\\unity: a project opens with the PC's editor without a download. "auto" = all of them whenever the sandbox is set up for Unity, true = always, false = never, or a list (e.g. ["6000.0.32f1"]).`
|
|
27427
|
+
),
|
|
27428
|
+
unityAssets: external_exports.union([external_exports.literal("auto"), external_exports.boolean()]).describe(
|
|
27429
|
+
`This PC's Unity Asset Store downloads (.unitypackage files), read-only at C:\\PcInstalls\\unity\\AssetStore: what you download on your PC is there for the agents at once. "auto" = whenever the sandbox is set up for Unity, true = always, false = never.`
|
|
27325
27430
|
)
|
|
27326
27431
|
}).describe(
|
|
27327
27432
|
"Games, engines and editors installed on this PC, mapped read-only into sandboxes (no copy, no room on the sandbox's disk)."
|