windows-development-sandbox 1.25.0 → 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 +17 -5
- 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/data/data.def.d.ts +4 -4
- package/dist/app/features/data/data.run.d.ts +1 -1
- package/dist/app/features/defs.d.ts +356 -6
- package/dist/app/features/defs.js +15 -0
- package/dist/app/features/projects/projects.def.d.ts +1 -1
- package/dist/app/features/projects/projects.run.d.ts +1 -1
- 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/features/unreal/index.d.ts +2 -0
- package/dist/app/features/unreal/index.js +3 -0
- package/dist/app/features/unreal/unreal.def.d.ts +236 -0
- package/dist/app/features/unreal/unreal.def.js +379 -0
- package/dist/app/features/unreal/unreal.run.d.ts +96 -0
- package/dist/app/features/unreal/unreal.run.js +217 -0
- package/dist/app/registry.js +11 -0
- package/dist/bin/agent-sandbox.js +2 -2
- package/dist/bin/{chunk-IZRGTSQ5.js → chunk-6WWMBCT2.js} +4632 -1941
- package/dist/bin/{chunk-SUYYVIDW.js → chunk-JXL6ZOO3.js} +126 -6
- package/dist/bin/{chunk-KH4MI2U5.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 +17 -2
- package/dist/cli/commands/registry.js +6 -0
- package/dist/cli/manifest.d.ts +51 -1
- package/dist/cli/manifest.js +58 -1
- package/dist/cli/menu/coverage-exempt.js +2 -0
- package/dist/cli/menu/pages/sandbox-page.d.ts +6 -0
- package/dist/cli/menu/pages/sandbox-page.js +71 -4
- package/dist/cli/menu/views.js +4 -0
- package/dist/core/config/defaults.js +33 -6
- package/dist/core/schema/accounts.d.ts +3 -0
- package/dist/core/schema/accounts.js +1 -0
- package/dist/core/schema/config.d.ts +32 -14
- 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 +5 -2
- package/dist/core/schema/pc-installs.js +16 -2
- package/dist/core/schema/toolchains.d.ts +8 -0
- package/dist/core/schema/toolchains.js +20 -5
- package/dist/guest/accounts/adapters.js +2 -0
- package/dist/guest/accounts/apply.d.ts +4 -2
- package/dist/guest/accounts/kinds/epic.js +18 -13
- 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/after-install.d.ts +1 -1
- package/dist/guest/apps/after-install.js +6 -1
- package/dist/guest/apps/app-installer.d.ts +1 -0
- package/dist/guest/apps/app-installer.js +31 -3
- package/dist/guest/apps/comet-unpack.js +3 -2
- package/dist/guest/apps/resolvers-gamedev.js +55 -1
- 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 +15 -2
- package/dist/guest/boot/guide.js +42 -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 +5 -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 +12 -0
- package/dist/guest/setup/addon-mcp.js +29 -4
- package/dist/guest/setup/browser-gpu.js +14 -11
- package/dist/guest/setup/github-token.js +4 -4
- package/dist/guest/setup/headroom.js +4 -0
- package/dist/guest/setup/unity-agent.d.ts +11 -0
- package/dist/guest/setup/unity-agent.js +36 -0
- package/dist/guest/toolchains/engines/epic-launcher.d.ts +26 -0
- package/dist/guest/toolchains/engines/epic-launcher.js +127 -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/engines/unreal-engines.d.ts +21 -1
- package/dist/guest/toolchains/engines/unreal-engines.js +163 -3
- package/dist/guest/toolchains/engines/unreal-status.d.ts +13 -0
- package/dist/guest/toolchains/engines/unreal-status.js +41 -0
- package/dist/guest/toolchains/native/debuggers.d.ts +6 -0
- package/dist/guest/toolchains/native/debuggers.js +57 -0
- package/dist/guest/toolchains/native/mesa.js +15 -8
- package/dist/guest/toolchains/native/rust-extras.d.ts +7 -0
- package/dist/guest/toolchains/native/rust-extras.js +23 -1
- package/dist/guest/toolchains/native/unreal.d.ts +2 -2
- package/dist/guest/toolchains/native/unreal.js +96 -18
- package/dist/guest/toolchains/plan.js +17 -2
- package/dist/guest/toolchains/tools/cli.js +2 -2
- package/dist/guest/toolchains/tools/vscode-profile.js +2 -0
- package/dist/host/accounts/deliver.js +4 -0
- package/dist/host/accounts/kinds/epic.js +11 -5
- 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/source.d.ts +2 -0
- package/dist/host/accounts/source.js +1 -0
- 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 +6 -0
- package/dist/host/pc-installs/discover.js +37 -5
- package/dist/host/pc-installs/epic.d.ts +3 -0
- package/dist/host/pc-installs/epic.js +33 -2
- 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/host/pc-installs/unreal-vault.d.ts +11 -0
- package/dist/host/pc-installs/unreal-vault.js +78 -0
- package/dist/host/pc-installs/unreal.d.ts +36 -0
- package/dist/host/pc-installs/unreal.js +145 -2
- package/dist/host/profile/claude-profile.d.ts +8 -0
- package/dist/host/profile/claude-profile.js +43 -4
- package/dist/host/profile/index.d.ts +1 -1
- package/dist/host/profile/index.js +1 -1
- package/dist/runtime/agent.js +197 -18
- package/dist/runtime/daemon.js +3938 -1386
- package/dist/runtime/db.js +197 -18
- package/dist/runtime/main.js +4336 -1978
- package/dist/runtime/netproxy.js +197 -18
- package/dist/runtime/tool.js +214 -38
- package/dist/runtime/view.js +197 -18
- package/dist/selftest/agent-paths.test.js +1 -0
- package/dist/selftest/agents-web.test.js +14 -1
- package/dist/selftest/engines.test.js +602 -3
- package/dist/selftest/github.test.js +64 -1
- package/dist/selftest/heavy-load.test.js +3 -1
- package/dist/selftest/hostile-input.test.js +11 -1
- package/dist/selftest/index.js +12 -0
- package/dist/selftest/menu-screens.js +5 -1
- package/dist/selftest/mixamo.test.d.ts +2 -0
- package/dist/selftest/mixamo.test.js +60 -0
- package/dist/selftest/persisted-installs.test.js +1 -1
- package/dist/selftest/secrets.test.js +36 -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 +10 -0
- package/dist/selftest/support/fixtures.d.ts +13 -2
- package/dist/selftest/support/unity-sample.d.ts +2 -0
- package/dist/selftest/support/unity-sample.js +80 -0
- package/dist/selftest/support/unreal-sample.d.ts +2 -0
- package/dist/selftest/support/unreal-sample.js +83 -0
- package/dist/selftest/toolchains.test.js +32 -2
- 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 +2 -1
- package/dist/shared/accounts/index.js +2 -1
- package/dist/shared/accounts/kinds/epic.d.ts +6 -1
- package/dist/shared/accounts/kinds/epic.js +11 -1
- 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/associations.d.ts +7 -0
- package/dist/shared/apps/associations.js +26 -0
- package/dist/shared/apps/catalogue-agents-web.d.ts +11 -1
- package/dist/shared/apps/catalogue-agents-web.js +28 -2
- package/dist/shared/apps/catalogue-gamedev.d.ts +3 -0
- package/dist/shared/apps/catalogue-gamedev.js +102 -1
- package/dist/shared/apps/catalogue.d.ts +8 -0
- package/dist/shared/apps/index.d.ts +5 -2
- package/dist/shared/apps/index.js +5 -2
- package/dist/shared/apps/preview.d.ts +2 -0
- package/dist/shared/apps/preview.js +10 -0
- 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/browser-policy.d.ts +14 -0
- package/dist/shared/browser-policy.js +22 -0
- package/dist/shared/channel/schema.d.ts +24 -0
- package/dist/shared/channel/secrets.d.ts +17 -0
- package/dist/shared/io/index.d.ts +1 -0
- package/dist/shared/io/index.js +1 -0
- package/dist/shared/io/rotate-log.d.ts +2 -0
- package/dist/shared/io/rotate-log.js +16 -0
- package/dist/shared/memory/policy.d.ts +5 -0
- package/dist/shared/memory/policy.js +7 -0
- package/dist/shared/paths/pc-installs.d.ts +13 -2
- package/dist/shared/paths/pc-installs.js +2 -0
- package/dist/shared/readiness.d.ts +2 -3
- package/dist/shared/readiness.js +2 -3
- package/dist/shared/signer.d.ts +4 -0
- package/dist/shared/signer.js +2 -0
- 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/shared/unreal/engines.d.ts +161 -0
- package/dist/shared/unreal/engines.js +308 -0
- package/dist/shared/unreal/guide.d.ts +19 -0
- package/dist/shared/unreal/guide.js +105 -0
- package/dist/shared/unreal/index.d.ts +7 -0
- package/dist/shared/unreal/index.js +8 -0
- package/dist/shared/unreal/launcher-files.d.ts +88 -0
- package/dist/shared/unreal/launcher-files.js +292 -0
- package/dist/shared/unreal/mixamo.d.ts +5 -0
- package/dist/shared/unreal/mixamo.js +16 -0
- package/dist/shared/unreal/room.d.ts +17 -0
- package/dist/shared/unreal/room.js +34 -0
- package/dist/shared/unreal/status.d.ts +54 -0
- package/dist/shared/unreal/status.js +57 -0
- package/dist/shared/unreal/vault.d.ts +21 -0
- package/dist/shared/unreal/vault.js +67 -0
- package/dist/shared/unreal/vs-check.d.ts +39 -0
- package/dist/shared/unreal/vs-check.js +79 -0
- package/dist/web/index.html +1 -1
- package/dist/web/{main-CCILLX2M.js → main-VPMYTSUL.js} +87 -87
- 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/csharp/VsSetup.cs +210 -0
- package/sandbox/scripts/get-vs-setup.ps1 +93 -0
- package/sandbox/scripts/install-store-package.ps1 +28 -0
- package/sandbox/scripts/set-registry-values.ps1 +35 -0
- package/sandbox/scripts/start-store-app.ps1 +29 -0
- package/schemas/config.schema.json +96 -8
- package/schemas/sandbox-config.schema.json +46 -6
- package/dist/guest/devtools/unity.d.ts +0 -2
- package/dist/guest/devtools/unity.js +0 -7
|
@@ -33,16 +33,24 @@ export const SteamPayloadSchema = z.strictObject({
|
|
|
33
33
|
client: base64(256 * KB).optional(),
|
|
34
34
|
});
|
|
35
35
|
/** A Unity licence file (Unity_lic.ulf), and the Unity ID to sign in with when it has to be made again. */
|
|
36
|
-
export const UnityPayloadSchema = z
|
|
36
|
+
export const UnityPayloadSchema = z
|
|
37
|
+
.strictObject({
|
|
37
38
|
ulf: z
|
|
38
39
|
.string()
|
|
39
40
|
.min(1)
|
|
40
41
|
.max(128 * KB)
|
|
41
42
|
.optional(),
|
|
43
|
+
/** The named-user licence (UnityEntitlementLicense.xml) a Unity sign-in makes. */
|
|
44
|
+
entitlement: z
|
|
45
|
+
.string()
|
|
46
|
+
.min(1)
|
|
47
|
+
.max(128 * KB)
|
|
48
|
+
.optional(),
|
|
42
49
|
email: z.string().email().max(256).optional(),
|
|
43
50
|
password: secretText(1024).optional(),
|
|
44
51
|
serial: secretText(64).optional(),
|
|
45
|
-
})
|
|
52
|
+
})
|
|
53
|
+
.refine((p) => Object.keys(p).length > 0, 'empty Unity sign-in');
|
|
46
54
|
/** A FiveM / RedM server licence key from the Cfx.re keymaster, and an optional Steam Web API key. */
|
|
47
55
|
export const CfxPayloadSchema = z.strictObject({
|
|
48
56
|
licenseKey: z
|
|
@@ -125,6 +133,8 @@ export const CometCookieSchema = z.strictObject({
|
|
|
125
133
|
export const CometPayloadSchema = z.strictObject({
|
|
126
134
|
cookies: z.array(CometCookieSchema).min(1).max(MAX_COMET_COOKIES),
|
|
127
135
|
});
|
|
136
|
+
/** The Perplexity desktop app's sign-in: the same perplexity.ai cookies as Comet's. */
|
|
137
|
+
export const PerplexityAppPayloadSchema = CometPayloadSchema;
|
|
128
138
|
export const PAYLOADS = {
|
|
129
139
|
epic: EpicPayloadSchema,
|
|
130
140
|
steam: SteamPayloadSchema,
|
|
@@ -136,6 +146,7 @@ export const PAYLOADS = {
|
|
|
136
146
|
appstore: AppstorePayloadSchema,
|
|
137
147
|
perplexity: PerplexityPayloadSchema,
|
|
138
148
|
comet: CometPayloadSchema,
|
|
149
|
+
perplexityapp: PerplexityAppPayloadSchema,
|
|
139
150
|
};
|
|
140
151
|
/** The secrets-file field: the sign-ins this launch hands over, each optional. */
|
|
141
152
|
export const ServiceAccountsSchema = z.strictObject({
|
|
@@ -149,6 +160,7 @@ export const ServiceAccountsSchema = z.strictObject({
|
|
|
149
160
|
appstore: AppstorePayloadSchema.optional(),
|
|
150
161
|
perplexity: PerplexityPayloadSchema.optional(),
|
|
151
162
|
comet: CometPayloadSchema.optional(),
|
|
163
|
+
perplexityapp: PerplexityAppPayloadSchema.optional(),
|
|
152
164
|
});
|
|
153
165
|
/** A launch's id (generate.ts: "<ms>-<6 hex>"). */
|
|
154
166
|
export const LaunchIdSchema = z.string().regex(/^[A-Za-z0-9-]{1,64}$/);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RegistryValue } from '../unreal/engines.js';
|
|
2
|
+
export declare const ASSOCIATIONS: {
|
|
3
|
+
readonly f3d: readonly [".fbx", ".glb", ".gltf", ".obj", ".stl", ".ply", ".3ds", ".usd", ".usdz"];
|
|
4
|
+
readonly nomacs: readonly [".tga", ".psd", ".dds", ".exr"];
|
|
5
|
+
};
|
|
6
|
+
/** The registry values that make `appId` open its file types; no values for an app that opens none. */
|
|
7
|
+
export declare function associationPlan(appId: string, exe: string): RegistryValue[];
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Which apps open which game-asset files when you double-click them (per user, written to the registry each boot
|
|
2
|
+
// because the sandbox's registry is new every time). Pure: the guest writes the plan with set-registry-values.ps1.
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
export const ASSOCIATIONS = {
|
|
5
|
+
f3d: ['.fbx', '.glb', '.gltf', '.obj', '.stl', '.ply', '.3ds', '.usd', '.usdz'],
|
|
6
|
+
nomacs: ['.tga', '.psd', '.dds', '.exr'],
|
|
7
|
+
};
|
|
8
|
+
const NAMES = { f3d: 'F3D', nomacs: 'nomacs' };
|
|
9
|
+
/** The registry values that make `appId` open its file types; no values for an app that opens none. */
|
|
10
|
+
export function associationPlan(appId, exe) {
|
|
11
|
+
if (!Object.hasOwn(ASSOCIATIONS, appId))
|
|
12
|
+
return [];
|
|
13
|
+
const id = appId;
|
|
14
|
+
if (!path.win32.isAbsolute(exe) || /["\r\n]/.test(exe))
|
|
15
|
+
throw new Error('not a program path: ' + exe);
|
|
16
|
+
const classes = 'Software\\Classes';
|
|
17
|
+
const type = classes + '\\Sandbox.' + id;
|
|
18
|
+
const quoted = '"' + exe + '"';
|
|
19
|
+
const v = (key, value) => ({ hive: 'HKCU', key, name: '', value });
|
|
20
|
+
return [
|
|
21
|
+
...ASSOCIATIONS[id].map((ext) => v(classes + '\\' + ext, 'Sandbox.' + id)),
|
|
22
|
+
v(type, NAMES[id] + ' file'),
|
|
23
|
+
v(type + '\\DefaultIcon', quoted + ',0'),
|
|
24
|
+
v(type + '\\shell\\open\\command', quoted + ' "%1"'),
|
|
25
|
+
];
|
|
26
|
+
}
|
|
@@ -9,6 +9,16 @@ export declare const BROWSER_USE_VERSION = "0.13.14";
|
|
|
9
9
|
export declare const PERPLEXITY_COMPUTER_MCP_URL = "https://www.perplexity.ai/rest/computer/mcp";
|
|
10
10
|
/** Comet's Windows installer: a redirect to the current release (no checksum is published; its signer is checked). */
|
|
11
11
|
export declare const COMET_DOWNLOAD_URL = "https://www.perplexity.ai/rest/browser/download?platform=win_x64&channel=stable";
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Who signs Comet: Perplexity AI, Inc., with an EV code-signing certificate from GlobalSign. Windows reports the
|
|
14
|
+
* subject with E=<contact address> first (E=..., CN="PERPLEXITY AI, INC.", O=...), so CN is not at the start.
|
|
15
|
+
*/
|
|
13
16
|
export declare const COMET_SIGNER: AppSigner;
|
|
17
|
+
/**
|
|
18
|
+
* The Perplexity desktop app is Store-only (its old installer is gone): product 9P9XG917PWCJ, an MSIX of about 300 MB.
|
|
19
|
+
* The package is fetched on this PC with your own Store tooling and installed in the sandbox with Add-AppxPackage.
|
|
20
|
+
*/
|
|
21
|
+
export declare const PERPLEXITY_DESKTOP_PRODUCT_ID = "9P9XG917PWCJ";
|
|
22
|
+
export declare const PERPLEXITY_DESKTOP_PACKAGE = "PerplexityAI.PerplexityApp";
|
|
23
|
+
export declare const PERPLEXITY_DESKTOP_FAMILY = "PerplexityAI.PerplexityApp_3jh4kjrg4dzr2";
|
|
14
24
|
export declare const AGENTS_WEB_APPS: readonly AppEntry[];
|
|
@@ -7,11 +7,21 @@ export const BROWSER_USE_VERSION = '0.13.14';
|
|
|
7
7
|
export const PERPLEXITY_COMPUTER_MCP_URL = 'https://www.perplexity.ai/rest/computer/mcp';
|
|
8
8
|
/** Comet's Windows installer: a redirect to the current release (no checksum is published; its signer is checked). */
|
|
9
9
|
export const COMET_DOWNLOAD_URL = 'https://www.perplexity.ai/rest/browser/download?platform=win_x64&channel=stable';
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Who signs Comet: Perplexity AI, Inc., with an EV code-signing certificate from GlobalSign. Windows reports the
|
|
12
|
+
* subject with E=<contact address> first (E=..., CN="PERPLEXITY AI, INC.", O=...), so CN is not at the start.
|
|
13
|
+
*/
|
|
11
14
|
export const COMET_SIGNER = {
|
|
12
|
-
subject: ['
|
|
15
|
+
subject: ['(^|, )CN="?PERPLEXITY AI, INC\\.?"?(,|$)', '(^|, )O="?PERPLEXITY AI, INC\\.?"?(,|$)'],
|
|
13
16
|
issuer: ['^CN=GlobalSign GCC R45 EV CodeSigning CA 2020(,|$)'],
|
|
14
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* The Perplexity desktop app is Store-only (its old installer is gone): product 9P9XG917PWCJ, an MSIX of about 300 MB.
|
|
20
|
+
* The package is fetched on this PC with your own Store tooling and installed in the sandbox with Add-AppxPackage.
|
|
21
|
+
*/
|
|
22
|
+
export const PERPLEXITY_DESKTOP_PRODUCT_ID = '9P9XG917PWCJ';
|
|
23
|
+
export const PERPLEXITY_DESKTOP_PACKAGE = 'PerplexityAI.PerplexityApp';
|
|
24
|
+
export const PERPLEXITY_DESKTOP_FAMILY = 'PerplexityAI.PerplexityApp_3jh4kjrg4dzr2';
|
|
15
25
|
/** Microsoft Edge, already in every sandbox: the browser Chrome DevTools MCP starts. */
|
|
16
26
|
const EDGE_EXE = 'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe';
|
|
17
27
|
export const AGENTS_WEB_APPS = [
|
|
@@ -59,6 +69,22 @@ export const AGENTS_WEB_APPS = [
|
|
|
59
69
|
signer: COMET_SIGNER,
|
|
60
70
|
userOnly: true,
|
|
61
71
|
},
|
|
72
|
+
{
|
|
73
|
+
id: 'perplexity-desktop',
|
|
74
|
+
name: 'Perplexity (desktop app)',
|
|
75
|
+
category: 'agents',
|
|
76
|
+
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.",
|
|
77
|
+
size: '300 MB',
|
|
78
|
+
source: {
|
|
79
|
+
store: {
|
|
80
|
+
productId: PERPLEXITY_DESKTOP_PRODUCT_ID,
|
|
81
|
+
packageName: PERPLEXITY_DESKTOP_PACKAGE,
|
|
82
|
+
family: PERPLEXITY_DESKTOP_FAMILY,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
exe: '',
|
|
86
|
+
userOnly: true,
|
|
87
|
+
},
|
|
62
88
|
{
|
|
63
89
|
id: 'comet-mcp',
|
|
64
90
|
name: 'Comet MCP',
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import type { AppEntry } from './catalogue.js';
|
|
2
|
+
/** Pinned packages, installed from the lock files in sandbox\addons\<id> (renewing them: docs/toolchains.md). */
|
|
3
|
+
export declare const UNITY_MCP_VERSION = "10.3.0";
|
|
4
|
+
export declare const OPENUPM_CLI_VERSION = "4.5.3";
|
|
2
5
|
export declare const GAMEDEV_APPS: readonly AppEntry[];
|
|
@@ -1 +1,102 @@
|
|
|
1
|
-
|
|
1
|
+
/** Pinned packages, installed from the lock files in sandbox\addons\<id> (renewing them: docs/toolchains.md). */
|
|
2
|
+
export const UNITY_MCP_VERSION = '10.3.0';
|
|
3
|
+
export const OPENUPM_CLI_VERSION = '4.5.3';
|
|
4
|
+
export const GAMEDEV_APPS = [
|
|
5
|
+
{
|
|
6
|
+
id: 'krita',
|
|
7
|
+
name: 'Krita',
|
|
8
|
+
category: 'gamedev',
|
|
9
|
+
about: 'Painting and texture editor (PSD, layers, brushes), checked against the SHA-256 download.kde.org publishes.',
|
|
10
|
+
size: '450 MB',
|
|
11
|
+
source: { resolve: 'krita' },
|
|
12
|
+
exe: 'krita.exe',
|
|
13
|
+
needs: ['mesa'],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: 'inkscape',
|
|
17
|
+
name: 'Inkscape',
|
|
18
|
+
category: 'gamedev',
|
|
19
|
+
about: 'Vector graphics for UI, icons and 2D art (SVG), checked against the SHA-256 inkscape.org publishes.',
|
|
20
|
+
size: '400 MB',
|
|
21
|
+
source: { resolve: 'inkscape' },
|
|
22
|
+
exe: 'inkscape.exe',
|
|
23
|
+
needs: ['7zip'],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'audacity',
|
|
27
|
+
name: 'Audacity',
|
|
28
|
+
category: 'gamedev',
|
|
29
|
+
about: 'Records and edits sound effects and music (WAV, OGG, FLAC).',
|
|
30
|
+
size: '80 MB',
|
|
31
|
+
source: { github: 'audacity/audacity', asset: '^audacity-win-[\\d.]+-(?:64bit\\.zip|x86_64\\.7z)$' },
|
|
32
|
+
exe: 'Audacity.exe',
|
|
33
|
+
needs: ['7zip'],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'renderdoc',
|
|
37
|
+
name: 'RenderDoc',
|
|
38
|
+
category: 'gamedev',
|
|
39
|
+
about: "Captures a frame of a game (Unreal's -d3d12/-vulkan builds) to inspect every draw call, texture and shader. Needs the sandbox's GPU (vGPU) for live captures.",
|
|
40
|
+
size: '70 MB',
|
|
41
|
+
source: { resolve: 'renderdoc' },
|
|
42
|
+
exe: 'qrenderdoc.exe',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
id: 'f3d',
|
|
46
|
+
name: 'F3D',
|
|
47
|
+
category: 'gamedev',
|
|
48
|
+
about: 'Fast 3D viewer (FBX, glTF/GLB, OBJ, STL, PLY, 3DS, USD); renders still previews from the command line.',
|
|
49
|
+
size: '100 MB',
|
|
50
|
+
source: { github: 'f3d-app/f3d', asset: '^F3D-[\\d.]+-Windows-x86_64\\.zip$' },
|
|
51
|
+
exe: 'f3d.exe',
|
|
52
|
+
needs: ['mesa'],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: 'imagemagick',
|
|
56
|
+
name: 'ImageMagick',
|
|
57
|
+
category: 'gamedev',
|
|
58
|
+
about: 'Converts and thumbnails textures (TGA, PSD, DDS, EXR, HDR) and builds contact sheets (magick montage).',
|
|
59
|
+
size: '150 MB',
|
|
60
|
+
source: { github: 'ImageMagick/ImageMagick', asset: '^ImageMagick-[\\d.]+-\\d+-portable-Q16-HDRI-x64\\.7z$' },
|
|
61
|
+
exe: 'magick.exe',
|
|
62
|
+
cli: true,
|
|
63
|
+
needs: ['7zip'],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: 'nomacs',
|
|
67
|
+
name: 'nomacs',
|
|
68
|
+
category: 'gamedev',
|
|
69
|
+
about: 'Image viewer for textures (TGA, PSD, DDS, EXR).',
|
|
70
|
+
size: '60 MB',
|
|
71
|
+
source: { github: 'nomacs/nomacs', asset: '^nomacs-portable-win\\.zip$' },
|
|
72
|
+
exe: 'nomacs.exe',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'unity-mcp',
|
|
76
|
+
name: 'MCP for Unity',
|
|
77
|
+
category: 'agents',
|
|
78
|
+
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.',
|
|
79
|
+
size: '60 MB',
|
|
80
|
+
source: { locked: 'uv', package: 'mcpforunityserver', version: UNITY_MCP_VERSION },
|
|
81
|
+
exe: 'mcp-for-unity.exe',
|
|
82
|
+
service: true,
|
|
83
|
+
mcp: {
|
|
84
|
+
name: 'sbx-unity-mcp',
|
|
85
|
+
program: true,
|
|
86
|
+
args: ['--transport', 'stdio'],
|
|
87
|
+
env: { DISABLE_TELEMETRY: '1', UNITY_MCP_DISABLE_TELEMETRY: '1', MCP_DISABLE_TELEMETRY: '1' },
|
|
88
|
+
codex: true,
|
|
89
|
+
},
|
|
90
|
+
plugsInto: 'Claude Code and Codex as the MCP server sbx-unity-mcp',
|
|
91
|
+
userOnly: true,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: 'openupm-cli',
|
|
95
|
+
name: 'openupm-cli',
|
|
96
|
+
category: 'gamedev',
|
|
97
|
+
about: 'Adds OpenUPM packages to Unity projects from the command line (openupm 4.5.3, BSD-3-Clause).',
|
|
98
|
+
size: '15 MB',
|
|
99
|
+
source: { locked: 'npm', package: 'openupm-cli', version: OPENUPM_CLI_VERSION },
|
|
100
|
+
exe: 'openupm.cmd',
|
|
101
|
+
},
|
|
102
|
+
];
|
|
@@ -28,6 +28,14 @@ export type AppSource = {
|
|
|
28
28
|
/** Nothing to download: a remote MCP server (AddonMcp.url). */
|
|
29
29
|
| {
|
|
30
30
|
remote: true;
|
|
31
|
+
}
|
|
32
|
+
/** A Microsoft Store app: this PC fetches the package with its own Store tooling; the sandbox installs it. */
|
|
33
|
+
| {
|
|
34
|
+
store: {
|
|
35
|
+
productId: string;
|
|
36
|
+
packageName: string;
|
|
37
|
+
family: string;
|
|
38
|
+
};
|
|
31
39
|
};
|
|
32
40
|
/**
|
|
33
41
|
* An MCP server an add-on adds to the sandbox's Claude Code (and Codex, with `codex`): `node <its folder>\<script>
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { type AddonMcp, type AppCategory, APP_CATEGORIES, type AppSource, type AppEntry, APPS, appById, CCUSAGE_VERSION, CONTEXT7_MCP_VERSION, HEADROOM_VERSION, PLAYWRIGHT_MCP_VERSION, RTK_VERSION, } from './catalogue.js';
|
|
2
|
-
export {
|
|
2
|
+
export { ASSOCIATIONS, associationPlan } from './associations.js';
|
|
3
|
+
export { previewGuideLine } from './preview.js';
|
|
4
|
+
export { exeMatcher, appsToInstall, appsNeedMesa, appsNeedUv, storeApps } from './selection.js';
|
|
3
5
|
export { signerMatches, type AppSigner, type Signature } from '../signer.js';
|
|
4
|
-
export { AGENTS_WEB_APPS, BROWSER_USE_VERSION, CHROME_DEVTOOLS_MCP_VERSION, COMET_DOWNLOAD_URL, COMET_MCP_VERSION, COMET_SIGNER, PERPLEXITY_COMPUTER_MCP_URL, PERPLEXITY_MCP_VERSION, } from './catalogue-agents-web.js';
|
|
6
|
+
export { AGENTS_WEB_APPS, BROWSER_USE_VERSION, CHROME_DEVTOOLS_MCP_VERSION, COMET_DOWNLOAD_URL, PERPLEXITY_DESKTOP_FAMILY, PERPLEXITY_DESKTOP_PACKAGE, PERPLEXITY_DESKTOP_PRODUCT_ID, COMET_MCP_VERSION, COMET_SIGNER, PERPLEXITY_COMPUTER_MCP_URL, PERPLEXITY_MCP_VERSION, } from './catalogue-agents-web.js';
|
|
5
7
|
export { ADDON_MCP_PREFIX, addonGuideLine, addonMcpServer, type AddonPlace, claudeManagedSettings, codexWithAddonMcpServers, type CodexMcpServer, HEADROOM_ENV, HEADROOM_PORT, HEADROOM_UPSTREAM, headroomArgs, headroomEnv, headroomGuideLine, headroomUrl, type ManagedSettings, type McpServerConfig, rtkHookCommand, RTK_GUIDE_LINE, withAddonMcpServers, } from './agent-addons.js';
|
|
8
|
+
export { isStorePackageFile, STORE_PACKAGE_MANIFEST, StorePackageFileSchema, StorePackageManifestSchema, storePackageRole, type StorePackageFile, type StorePackageManifest, } from './store-package.js';
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { APP_CATEGORIES, APPS, appById, CCUSAGE_VERSION, CONTEXT7_MCP_VERSION, HEADROOM_VERSION, PLAYWRIGHT_MCP_VERSION, RTK_VERSION, } from './catalogue.js';
|
|
2
|
-
export {
|
|
2
|
+
export { ASSOCIATIONS, associationPlan } from './associations.js';
|
|
3
|
+
export { previewGuideLine } from './preview.js';
|
|
4
|
+
export { exeMatcher, appsToInstall, appsNeedMesa, appsNeedUv, storeApps } from './selection.js';
|
|
3
5
|
export { signerMatches } from '../signer.js';
|
|
4
|
-
export { AGENTS_WEB_APPS, BROWSER_USE_VERSION, CHROME_DEVTOOLS_MCP_VERSION, COMET_DOWNLOAD_URL, COMET_MCP_VERSION, COMET_SIGNER, PERPLEXITY_COMPUTER_MCP_URL, PERPLEXITY_MCP_VERSION, } from './catalogue-agents-web.js';
|
|
6
|
+
export { AGENTS_WEB_APPS, BROWSER_USE_VERSION, CHROME_DEVTOOLS_MCP_VERSION, COMET_DOWNLOAD_URL, PERPLEXITY_DESKTOP_FAMILY, PERPLEXITY_DESKTOP_PACKAGE, PERPLEXITY_DESKTOP_PRODUCT_ID, COMET_MCP_VERSION, COMET_SIGNER, PERPLEXITY_COMPUTER_MCP_URL, PERPLEXITY_MCP_VERSION, } from './catalogue-agents-web.js';
|
|
5
7
|
export { ADDON_MCP_PREFIX, addonGuideLine, addonMcpServer, claudeManagedSettings, codexWithAddonMcpServers, HEADROOM_ENV, HEADROOM_PORT, HEADROOM_UPSTREAM, headroomArgs, headroomEnv, headroomGuideLine, headroomUrl, rtkHookCommand, RTK_GUIDE_LINE, withAddonMcpServers, } from './agent-addons.js';
|
|
8
|
+
export { isStorePackageFile, STORE_PACKAGE_MANIFEST, StorePackageFileSchema, StorePackageManifestSchema, storePackageRole, } from './store-package.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// The one line that tells an agent how to render previews of meshes and textures for the owner (pure).
|
|
2
|
+
/** Null unless F3D or ImageMagick is installed; `installed` holds app ids. */
|
|
3
|
+
export function previewGuideLine(installed) {
|
|
4
|
+
if (!installed.includes('f3d') && !installed.includes('imagemagick'))
|
|
5
|
+
return null;
|
|
6
|
+
return ('asset previews: `f3d "<mesh>" --output="<pkg>\\previews\\<name>.png" --resolution=1024,768 --up=+Y` per mesh ' +
|
|
7
|
+
'(--up=+Z for Unreal-space files), `magick montage "<pkg>\\source\\**\\*.png" -thumbnail 256x256 -geometry +4+4 ' +
|
|
8
|
+
'-label %f "<pkg>\\previews\\textures.png"` for textures (convert TGA/PSD/DDS/EXR to PNG first with magick); ' +
|
|
9
|
+
"leave them in the package's previews\\ folder for the owner to look at before import");
|
|
10
|
+
}
|
|
@@ -11,3 +11,9 @@ export declare function appsToInstall(apps: Config['apps'], gitAccess: GitAccess
|
|
|
11
11
|
export declare function appsNeedUv(apps: Config['apps'] | undefined): boolean;
|
|
12
12
|
/** Does any chosen app draw with OpenGL (so the Mesa step must run first)? */
|
|
13
13
|
export declare function appsNeedMesa(apps: Config['apps'] | undefined): boolean;
|
|
14
|
+
/** The chosen apps that come from the Microsoft Store: what this PC has to fetch for them. */
|
|
15
|
+
export declare function storeApps(install: readonly string[]): {
|
|
16
|
+
id: string;
|
|
17
|
+
productId: string;
|
|
18
|
+
packageName: string;
|
|
19
|
+
}[];
|
|
@@ -47,3 +47,12 @@ export function appsNeedUv(apps) {
|
|
|
47
47
|
export function appsNeedMesa(apps) {
|
|
48
48
|
return Boolean(apps?.install.some((id) => appById(id)?.needs?.includes('mesa')));
|
|
49
49
|
}
|
|
50
|
+
/** The chosen apps that come from the Microsoft Store: what this PC has to fetch for them. */
|
|
51
|
+
export function storeApps(install) {
|
|
52
|
+
return install.flatMap((id) => {
|
|
53
|
+
const source = appById(id)?.source;
|
|
54
|
+
return source !== undefined && 'store' in source
|
|
55
|
+
? [{ id, productId: source.store.productId, packageName: source.store.packageName }]
|
|
56
|
+
: [];
|
|
57
|
+
});
|
|
58
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const StorePackageFileSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
role: z.ZodEnum<{
|
|
5
|
+
main: "main";
|
|
6
|
+
dependency: "dependency";
|
|
7
|
+
}>;
|
|
8
|
+
sha256: z.ZodString;
|
|
9
|
+
bytes: z.ZodNumber;
|
|
10
|
+
}, z.core.$strict>;
|
|
11
|
+
export type StorePackageFile = z.output<typeof StorePackageFileSchema>;
|
|
12
|
+
/** store-package.json: next to the package files, on this PC's cache and in the sandbox's data folder. */
|
|
13
|
+
export declare const StorePackageManifestSchema: z.ZodObject<{
|
|
14
|
+
productId: z.ZodString;
|
|
15
|
+
fetchedAt: z.ZodString;
|
|
16
|
+
files: z.ZodArray<z.ZodObject<{
|
|
17
|
+
name: z.ZodString;
|
|
18
|
+
role: z.ZodEnum<{
|
|
19
|
+
main: "main";
|
|
20
|
+
dependency: "dependency";
|
|
21
|
+
}>;
|
|
22
|
+
sha256: z.ZodString;
|
|
23
|
+
bytes: z.ZodNumber;
|
|
24
|
+
}, z.core.$strict>>;
|
|
25
|
+
}, z.core.$strict>;
|
|
26
|
+
export type StorePackageManifest = z.output<typeof StorePackageManifestSchema>;
|
|
27
|
+
export declare const STORE_PACKAGE_MANIFEST = "store-package.json";
|
|
28
|
+
/** Whether a file name is a package file this feature handles. */
|
|
29
|
+
export declare function isStorePackageFile(name: string): boolean;
|
|
30
|
+
/** The app itself (named <package name>_<version>_...), as opposed to a framework it depends on (VCLibs ...). */
|
|
31
|
+
export declare function storePackageRole(fileName: string, packageName: string): 'main' | 'dependency';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// A Microsoft Store app handed to the sandbox as package files (.msix and its dependencies). The PC fetches them with
|
|
2
|
+
// its own Store tooling (host/apps/store-package.ts) and the sandbox installs them with Add-AppxPackage.
|
|
3
|
+
// Pure, web-safe: the shape of the manifest that travels with the files, and which file is the app itself.
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
const GB = 1024 * 1024 * 1024;
|
|
6
|
+
const FILE_NAME = /^[A-Za-z0-9._~+-]{1,200}\.(msix|appx|msixbundle|appxbundle)$/i;
|
|
7
|
+
export const StorePackageFileSchema = z.strictObject({
|
|
8
|
+
name: z.string().regex(FILE_NAME),
|
|
9
|
+
role: z.enum(['main', 'dependency']),
|
|
10
|
+
sha256: z.string().regex(/^[0-9a-f]{64}$/),
|
|
11
|
+
bytes: z
|
|
12
|
+
.number()
|
|
13
|
+
.int()
|
|
14
|
+
.positive()
|
|
15
|
+
.max(2 * GB),
|
|
16
|
+
});
|
|
17
|
+
/** store-package.json: next to the package files, on this PC's cache and in the sandbox's data folder. */
|
|
18
|
+
export const StorePackageManifestSchema = z
|
|
19
|
+
.strictObject({
|
|
20
|
+
productId: z.string().regex(/^[A-Z0-9]{12}$/),
|
|
21
|
+
fetchedAt: z.string().max(40),
|
|
22
|
+
files: z.array(StorePackageFileSchema).min(1).max(24),
|
|
23
|
+
})
|
|
24
|
+
.refine((m) => m.files.filter((f) => f.role === 'main').length === 1, 'exactly one file must be the app itself')
|
|
25
|
+
.refine((m) => new Set(m.files.map((f) => f.name.toLowerCase())).size === m.files.length, 'file names repeat');
|
|
26
|
+
export const STORE_PACKAGE_MANIFEST = 'store-package.json';
|
|
27
|
+
/** Whether a file name is a package file this feature handles. */
|
|
28
|
+
export function isStorePackageFile(name) {
|
|
29
|
+
return FILE_NAME.test(name);
|
|
30
|
+
}
|
|
31
|
+
/** The app itself (named <package name>_<version>_...), as opposed to a framework it depends on (VCLibs ...). */
|
|
32
|
+
export function storePackageRole(fileName, packageName) {
|
|
33
|
+
return fileName.toLowerCase().startsWith(packageName.toLowerCase() + '_') ? 'main' : 'dependency';
|
|
34
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface BrowserPolicy {
|
|
2
|
+
readonly key: string;
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly type: 'REG_DWORD' | 'REG_SZ';
|
|
5
|
+
readonly data: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const BROWSER_POLICY_KEYS: readonly ["HKLM\\SOFTWARE\\Policies\\Microsoft\\Edge", "HKLM\\SOFTWARE\\Policies\\Google\\Chrome"];
|
|
8
|
+
/**
|
|
9
|
+
* The policies for each browser: no hardware acceleration (today's behaviour) and, when a downloads folder is given,
|
|
10
|
+
* DefaultDownloadDirectory (the default only: Playwright's download path and the user's own choice still win).
|
|
11
|
+
*/
|
|
12
|
+
export declare function browserPolicies(o: {
|
|
13
|
+
readonly downloads: string | null;
|
|
14
|
+
}): BrowserPolicy[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// The machine policy of the sandbox's browsers (Edge and Chrome), written under HKLM at every boot by the guest: no GPU
|
|
2
|
+
// and the folder downloads go to. Pure (no reads or writes here): the guest runs reg.exe with these entries and the
|
|
3
|
+
// self-test checks them.
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
export const BROWSER_POLICY_KEYS = [
|
|
6
|
+
'HKLM\\SOFTWARE\\Policies\\Microsoft\\Edge',
|
|
7
|
+
'HKLM\\SOFTWARE\\Policies\\Google\\Chrome',
|
|
8
|
+
];
|
|
9
|
+
/**
|
|
10
|
+
* The policies for each browser: no hardware acceleration (today's behaviour) and, when a downloads folder is given,
|
|
11
|
+
* DefaultDownloadDirectory (the default only: Playwright's download path and the user's own choice still win).
|
|
12
|
+
*/
|
|
13
|
+
export function browserPolicies(o) {
|
|
14
|
+
if (o.downloads !== null && (!path.win32.isAbsolute(o.downloads) || /["\r\n%]/.test(o.downloads)))
|
|
15
|
+
throw new Error('not a folder');
|
|
16
|
+
return BROWSER_POLICY_KEYS.flatMap((key) => [
|
|
17
|
+
{ key, name: 'HardwareAccelerationModeEnabled', type: 'REG_DWORD', data: '0' },
|
|
18
|
+
...(o.downloads === null
|
|
19
|
+
? []
|
|
20
|
+
: [{ key, name: 'DefaultDownloadDirectory', type: 'REG_SZ', data: o.downloads }]),
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
@@ -126,6 +126,14 @@ export declare const ProjectSpecSchema: z.ZodObject<{
|
|
|
126
126
|
modules: z.ZodArray<z.ZodString>;
|
|
127
127
|
hub: z.ZodBoolean;
|
|
128
128
|
keepVersions: z.ZodNumber;
|
|
129
|
+
mcp: z.ZodBoolean;
|
|
130
|
+
agentSkills: z.ZodBoolean;
|
|
131
|
+
cliVersion: z.ZodString;
|
|
132
|
+
assetCache: z.ZodEnum<{
|
|
133
|
+
pc: "pc";
|
|
134
|
+
persisted: "persisted";
|
|
135
|
+
local: "local";
|
|
136
|
+
}>;
|
|
129
137
|
}, z.core.$strict>;
|
|
130
138
|
godot: z.ZodObject<{
|
|
131
139
|
enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
|
|
@@ -362,6 +370,14 @@ export declare const GuestRequestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
362
370
|
modules: z.ZodArray<z.ZodString>;
|
|
363
371
|
hub: z.ZodBoolean;
|
|
364
372
|
keepVersions: z.ZodNumber;
|
|
373
|
+
mcp: z.ZodBoolean;
|
|
374
|
+
agentSkills: z.ZodBoolean;
|
|
375
|
+
cliVersion: z.ZodString;
|
|
376
|
+
assetCache: z.ZodEnum<{
|
|
377
|
+
pc: "pc";
|
|
378
|
+
persisted: "persisted";
|
|
379
|
+
local: "local";
|
|
380
|
+
}>;
|
|
365
381
|
}, z.core.$strict>;
|
|
366
382
|
godot: z.ZodObject<{
|
|
367
383
|
enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
|
|
@@ -618,6 +634,14 @@ export declare const GuestRequestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
618
634
|
modules: z.ZodArray<z.ZodString>;
|
|
619
635
|
hub: z.ZodBoolean;
|
|
620
636
|
keepVersions: z.ZodNumber;
|
|
637
|
+
mcp: z.ZodBoolean;
|
|
638
|
+
agentSkills: z.ZodBoolean;
|
|
639
|
+
cliVersion: z.ZodString;
|
|
640
|
+
assetCache: z.ZodEnum<{
|
|
641
|
+
pc: "pc";
|
|
642
|
+
persisted: "persisted";
|
|
643
|
+
local: "local";
|
|
644
|
+
}>;
|
|
621
645
|
}, z.core.$strict>;
|
|
622
646
|
godot: z.ZodObject<{
|
|
623
647
|
enabled: z.ZodUnion<readonly [z.ZodBoolean, z.ZodLiteral<"auto">]>;
|
|
@@ -25,6 +25,7 @@ export declare const SecretsFileSchema: z.ZodObject<{
|
|
|
25
25
|
}, z.core.$strict>>;
|
|
26
26
|
unity: z.ZodOptional<z.ZodObject<{
|
|
27
27
|
ulf: z.ZodOptional<z.ZodString>;
|
|
28
|
+
entitlement: z.ZodOptional<z.ZodString>;
|
|
28
29
|
email: z.ZodOptional<z.ZodString>;
|
|
29
30
|
password: z.ZodOptional<z.ZodString>;
|
|
30
31
|
serial: z.ZodOptional<z.ZodString>;
|
|
@@ -70,6 +71,22 @@ export declare const SecretsFileSchema: z.ZodObject<{
|
|
|
70
71
|
}>>;
|
|
71
72
|
}, z.core.$strict>>;
|
|
72
73
|
}, z.core.$strict>>;
|
|
74
|
+
perplexityapp: z.ZodOptional<z.ZodObject<{
|
|
75
|
+
cookies: z.ZodArray<z.ZodObject<{
|
|
76
|
+
name: z.ZodString;
|
|
77
|
+
value: z.ZodString;
|
|
78
|
+
domain: z.ZodString;
|
|
79
|
+
path: z.ZodString;
|
|
80
|
+
expires: z.ZodOptional<z.ZodNumber>;
|
|
81
|
+
secure: z.ZodBoolean;
|
|
82
|
+
httpOnly: z.ZodBoolean;
|
|
83
|
+
sameSite: z.ZodOptional<z.ZodEnum<{
|
|
84
|
+
Strict: "Strict";
|
|
85
|
+
Lax: "Lax";
|
|
86
|
+
None: "None";
|
|
87
|
+
}>>;
|
|
88
|
+
}, z.core.$strict>>;
|
|
89
|
+
}, z.core.$strict>>;
|
|
73
90
|
}, z.core.$strict>>;
|
|
74
91
|
liveFoldersKey: z.ZodOptional<z.ZodString>;
|
|
75
92
|
}, z.core.$strict>;
|
package/dist/shared/io/index.js
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// Keeps a log that a detached program appends to from growing for ever: past the limit it becomes <log>.1.
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
/** Moves `file` to `file + '.1'` (replacing the older copy) when it is over `maxBytes`; true when it moved. */
|
|
4
|
+
export function rotateLog(file, maxBytes) {
|
|
5
|
+
try {
|
|
6
|
+
if (fs.statSync(file).size <= maxBytes)
|
|
7
|
+
return false;
|
|
8
|
+
fs.rmSync(file + '.1', { force: true });
|
|
9
|
+
fs.renameSync(file, file + '.1');
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
// No log yet, or it is held open: the next start tries again.
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -67,3 +67,8 @@ export declare function chooseTargetDir(targetDir: string, freeBytes: number): {
|
|
|
67
67
|
};
|
|
68
68
|
/** The most heavy compilers (rustc, clippy-driver, link ...) that run at once in the agents' job: only with vGPU on. */
|
|
69
69
|
export declare function maxCompilers(cpus: number, profile: LoadProfile): number | null;
|
|
70
|
+
/**
|
|
71
|
+
* The cargo variable that names the linker of a Rust host (`x86_64-pc-windows-msvc` ->
|
|
72
|
+
* `CARGO_TARGET_X86_64_PC_WINDOWS_MSVC_LINKER`).
|
|
73
|
+
*/
|
|
74
|
+
export declare function cargoLinkerVar(host: string): string;
|
|
@@ -108,3 +108,10 @@ export function chooseTargetDir(targetDir, freeBytes) {
|
|
|
108
108
|
export function maxCompilers(cpus, profile) {
|
|
109
109
|
return profile === 'gentle' ? Math.min(4, Math.max(2, Math.floor(cpus / 4))) : null;
|
|
110
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* The cargo variable that names the linker of a Rust host (`x86_64-pc-windows-msvc` ->
|
|
113
|
+
* `CARGO_TARGET_X86_64_PC_WINDOWS_MSVC_LINKER`).
|
|
114
|
+
*/
|
|
115
|
+
export function cargoLinkerVar(host) {
|
|
116
|
+
return 'CARGO_TARGET_' + host.toUpperCase().replace(/[^A-Z0-9]/g, '_') + '_LINKER';
|
|
117
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Where this PC's installs appear in the sandbox (reserved: RESERVED_GUEST). */
|
|
2
2
|
export declare const PC_INSTALLS_GUEST = "C:\\PcInstalls";
|
|
3
|
-
export type PcInstallKind = 'steam-game' | 'steam-library' | 'epic-game' | 'unreal' | 'unity';
|
|
3
|
+
export type PcInstallKind = 'steam-game' | 'steam-library' | 'epic-game' | 'unreal' | 'unreal-vault' | 'unity' | 'unity-assets';
|
|
4
4
|
export interface PcInstall {
|
|
5
5
|
readonly kind: PcInstallKind;
|
|
6
6
|
/** The Steam app ID or library (library1), the Epic app name, the engine (UE_5.4) or editor version. */
|
|
@@ -9,8 +9,19 @@ export interface PcInstall {
|
|
|
9
9
|
readonly version?: string;
|
|
10
10
|
/** The folder on this PC (never sent to the sandbox). */
|
|
11
11
|
readonly host: string;
|
|
12
|
-
/** Where it appears in the sandbox, read-only
|
|
12
|
+
/** Where it appears in the sandbox, read-only unless `writable`. */
|
|
13
13
|
readonly guest: string;
|
|
14
|
+
/** Mapped writable: an engine folder you registered (pcInstalls.unrealEngineFolders). */
|
|
15
|
+
readonly writable?: boolean;
|
|
16
|
+
/** An Unreal source build's registered name on this PC (HKCU\Software\Epic Games\Unreal Engine\Builds). */
|
|
17
|
+
readonly buildId?: string;
|
|
18
|
+
/** The Epic Games Launcher's own ids of the app (from this PC's LauncherInstalled.dat). */
|
|
19
|
+
readonly launcher?: {
|
|
20
|
+
readonly namespaceId: string;
|
|
21
|
+
readonly itemId: string;
|
|
22
|
+
readonly artifactId: string;
|
|
23
|
+
readonly appVersion: string;
|
|
24
|
+
};
|
|
14
25
|
}
|
|
15
26
|
/** What session.json says about them: no host paths. */
|
|
16
27
|
export interface PcInstallManifest {
|
|
@@ -9,7 +9,9 @@ const AREA = {
|
|
|
9
9
|
'steam-library': 'steam',
|
|
10
10
|
'epic-game': 'epic',
|
|
11
11
|
unreal: 'unreal',
|
|
12
|
+
'unreal-vault': 'unreal',
|
|
12
13
|
unity: 'unity',
|
|
14
|
+
'unity-assets': 'unity',
|
|
13
15
|
};
|
|
14
16
|
/** The guest folder of one install: C:\PcInstalls\steam\<appid>, \epic\<AppName>, \unreal\UE_5.4, \unity\<ver>. */
|
|
15
17
|
export function pcInstallGuest(kind, id) {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
export declare const NOT_READY: {
|
|
2
2
|
/** Toolchains whose step is a stub: their settings rows are hidden and "auto" never turns them on. */
|
|
3
|
-
readonly toolchains: readonly ["
|
|
3
|
+
readonly toolchains: readonly ["godot", "android", "flutter", "dart", "reactNative"];
|
|
4
4
|
/** Service sign-ins whose host or guest side is a stub: the menu and the web do not list them. */
|
|
5
|
-
readonly kinds: readonly ["
|
|
6
|
-
readonly unreal: readonly ["engines"];
|
|
5
|
+
readonly kinds: readonly ["keystore", "play", "expo", "appstore"];
|
|
7
6
|
};
|
|
8
7
|
export declare const isToolchainReady: (name: string) => boolean;
|
|
9
8
|
export declare const isKindReady: (kind: string) => boolean;
|