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
package/dist/runtime/view.js
CHANGED
|
@@ -26254,7 +26254,7 @@ var ToolchainsSchema = external_exports.strictObject({
|
|
|
26254
26254
|
`"auto" (default): on the sandbox's own disk when C: has 25 GB free at boot, else "separate" (builds then write through the mapped workspace, which can overload this PC's disk). "shared": cargo's default target\\ (shared with builds on this PC, so builds on either side invalidate the other), "separate": <workspace>\\target\\sandbox (kept, no cross-talk), "local": on the sandbox's own disk (fastest, lost every boot), or a guest path.`
|
|
26255
26255
|
),
|
|
26256
26256
|
linker: external_exports.enum(["lld", "gnu"]).describe(
|
|
26257
|
-
`
|
|
26257
|
+
`"lld" (default) links with Rust's own lld: through MinGW's gcc on the GNU host (much less memory than GNU ld), and instead of link.exe on the MSVC host (link.exe writes executables into mapped folders as all zeros: os error 1392). "gnu" keeps GNU ld / link.exe.`
|
|
26258
26258
|
),
|
|
26259
26259
|
linkSlots: external_exports.union([external_exports.literal("auto"), external_exports.number().int().min(1).max(32)]).describe(
|
|
26260
26260
|
'GNU host: how many programs may link at the same time in the whole sandbox (other links wait). "auto" = one per 6 GB of sandbox memory, 1 to 4 (the memory governor slows links down too when memory runs short).'
|
|
@@ -26294,21 +26294,35 @@ var ToolchainsSchema = external_exports.strictObject({
|
|
|
26294
26294
|
}),
|
|
26295
26295
|
unity: external_exports.strictObject({
|
|
26296
26296
|
enabled: enabled(
|
|
26297
|
-
"Unity: the editor version a project asks for, from Unity's release API (checked against its published hash), installed
|
|
26297
|
+
"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.",
|
|
26298
26298
|
"ProjectSettings/ProjectVersion.txt"
|
|
26299
26299
|
),
|
|
26300
26300
|
acceptLicense: external_exports.boolean().describe(
|
|
26301
26301
|
"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."
|
|
26302
26302
|
),
|
|
26303
26303
|
version: external_exports.string().min(1).describe(
|
|
26304
|
-
|
|
26304
|
+
`"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).`
|
|
26305
26305
|
),
|
|
26306
26306
|
modules: external_exports.array(external_exports.string().regex(/^[a-z0-9-]+$/)).describe(
|
|
26307
26307
|
`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).`
|
|
26308
26308
|
),
|
|
26309
|
-
hub: external_exports.boolean().describe(
|
|
26309
|
+
hub: external_exports.boolean().describe(
|
|
26310
|
+
"Also Unity Hub (kept on the data disk), for signing in to Unity Personal and installing editors by hand."
|
|
26311
|
+
),
|
|
26310
26312
|
keepVersions: external_exports.number().int().min(1).max(20).describe(
|
|
26311
26313
|
"How many editor versions to keep in tools\\unity; older ones are removed (the least recently used first)."
|
|
26314
|
+
),
|
|
26315
|
+
mcp: external_exports.boolean().describe(
|
|
26316
|
+
"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."
|
|
26317
|
+
),
|
|
26318
|
+
agentSkills: external_exports.boolean().describe(
|
|
26319
|
+
"Unity's skills for Claude Code and Codex, from Unity-Technologies/skills at the commit the Unity CLI pins."
|
|
26320
|
+
),
|
|
26321
|
+
cliVersion: external_exports.string().regex(/^(latest|\d+\.\d+\.\d+(-[A-Za-z0-9.]+)?)$/).describe(
|
|
26322
|
+
'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.'
|
|
26323
|
+
),
|
|
26324
|
+
assetCache: external_exports.enum(["persisted", "pc", "local"]).describe(
|
|
26325
|
+
`"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).`
|
|
26312
26326
|
)
|
|
26313
26327
|
}),
|
|
26314
26328
|
godot: external_exports.strictObject({
|
|
@@ -26460,7 +26474,7 @@ var ToolchainsSchema = external_exports.strictObject({
|
|
|
26460
26474
|
}),
|
|
26461
26475
|
cli: external_exports.strictObject({
|
|
26462
26476
|
gh: EnabledSchema.describe(
|
|
26463
|
-
'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
|
|
26477
|
+
'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.'
|
|
26464
26478
|
),
|
|
26465
26479
|
zstd: EnabledSchema.describe('Zstandard (zstd). "auto" = off; set true to get it.'),
|
|
26466
26480
|
openssl: EnabledSchema.describe(
|
|
@@ -26512,9 +26526,12 @@ var CHROME_DEVTOOLS_MCP_VERSION = "1.12.0";
|
|
|
26512
26526
|
var BROWSER_USE_VERSION = "0.13.14";
|
|
26513
26527
|
var PERPLEXITY_COMPUTER_MCP_URL = "https://www.perplexity.ai/rest/computer/mcp";
|
|
26514
26528
|
var COMET_SIGNER = {
|
|
26515
|
-
subject: ['
|
|
26529
|
+
subject: ['(^|, )CN="?PERPLEXITY AI, INC\\.?"?(,|$)', '(^|, )O="?PERPLEXITY AI, INC\\.?"?(,|$)'],
|
|
26516
26530
|
issuer: ["^CN=GlobalSign GCC R45 EV CodeSigning CA 2020(,|$)"]
|
|
26517
26531
|
};
|
|
26532
|
+
var PERPLEXITY_DESKTOP_PRODUCT_ID = "9P9XG917PWCJ";
|
|
26533
|
+
var PERPLEXITY_DESKTOP_PACKAGE = "PerplexityAI.PerplexityApp";
|
|
26534
|
+
var PERPLEXITY_DESKTOP_FAMILY = "PerplexityAI.PerplexityApp_3jh4kjrg4dzr2";
|
|
26518
26535
|
var EDGE_EXE = "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe";
|
|
26519
26536
|
var AGENTS_WEB_APPS = [
|
|
26520
26537
|
{
|
|
@@ -26561,6 +26578,22 @@ var AGENTS_WEB_APPS = [
|
|
|
26561
26578
|
signer: COMET_SIGNER,
|
|
26562
26579
|
userOnly: true
|
|
26563
26580
|
},
|
|
26581
|
+
{
|
|
26582
|
+
id: "perplexity-desktop",
|
|
26583
|
+
name: "Perplexity (desktop app)",
|
|
26584
|
+
category: "agents",
|
|
26585
|
+
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.",
|
|
26586
|
+
size: "300 MB",
|
|
26587
|
+
source: {
|
|
26588
|
+
store: {
|
|
26589
|
+
productId: PERPLEXITY_DESKTOP_PRODUCT_ID,
|
|
26590
|
+
packageName: PERPLEXITY_DESKTOP_PACKAGE,
|
|
26591
|
+
family: PERPLEXITY_DESKTOP_FAMILY
|
|
26592
|
+
}
|
|
26593
|
+
},
|
|
26594
|
+
exe: "",
|
|
26595
|
+
userOnly: true
|
|
26596
|
+
},
|
|
26564
26597
|
{
|
|
26565
26598
|
id: "comet-mcp",
|
|
26566
26599
|
name: "Comet MCP",
|
|
@@ -26614,7 +26647,107 @@ var AGENTS_WEB_APPS = [
|
|
|
26614
26647
|
];
|
|
26615
26648
|
|
|
26616
26649
|
// src/shared/apps/catalogue-gamedev.ts
|
|
26617
|
-
var
|
|
26650
|
+
var UNITY_MCP_VERSION = "10.3.0";
|
|
26651
|
+
var OPENUPM_CLI_VERSION = "4.5.3";
|
|
26652
|
+
var GAMEDEV_APPS = [
|
|
26653
|
+
{
|
|
26654
|
+
id: "krita",
|
|
26655
|
+
name: "Krita",
|
|
26656
|
+
category: "gamedev",
|
|
26657
|
+
about: "Painting and texture editor (PSD, layers, brushes), checked against the SHA-256 download.kde.org publishes.",
|
|
26658
|
+
size: "450 MB",
|
|
26659
|
+
source: { resolve: "krita" },
|
|
26660
|
+
exe: "krita.exe",
|
|
26661
|
+
needs: ["mesa"]
|
|
26662
|
+
},
|
|
26663
|
+
{
|
|
26664
|
+
id: "inkscape",
|
|
26665
|
+
name: "Inkscape",
|
|
26666
|
+
category: "gamedev",
|
|
26667
|
+
about: "Vector graphics for UI, icons and 2D art (SVG), checked against the SHA-256 inkscape.org publishes.",
|
|
26668
|
+
size: "400 MB",
|
|
26669
|
+
source: { resolve: "inkscape" },
|
|
26670
|
+
exe: "inkscape.exe",
|
|
26671
|
+
needs: ["7zip"]
|
|
26672
|
+
},
|
|
26673
|
+
{
|
|
26674
|
+
id: "audacity",
|
|
26675
|
+
name: "Audacity",
|
|
26676
|
+
category: "gamedev",
|
|
26677
|
+
about: "Records and edits sound effects and music (WAV, OGG, FLAC).",
|
|
26678
|
+
size: "80 MB",
|
|
26679
|
+
source: { github: "audacity/audacity", asset: "^audacity-win-[\\d.]+-(?:64bit\\.zip|x86_64\\.7z)$" },
|
|
26680
|
+
exe: "Audacity.exe",
|
|
26681
|
+
needs: ["7zip"]
|
|
26682
|
+
},
|
|
26683
|
+
{
|
|
26684
|
+
id: "renderdoc",
|
|
26685
|
+
name: "RenderDoc",
|
|
26686
|
+
category: "gamedev",
|
|
26687
|
+
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.",
|
|
26688
|
+
size: "70 MB",
|
|
26689
|
+
source: { resolve: "renderdoc" },
|
|
26690
|
+
exe: "qrenderdoc.exe"
|
|
26691
|
+
},
|
|
26692
|
+
{
|
|
26693
|
+
id: "f3d",
|
|
26694
|
+
name: "F3D",
|
|
26695
|
+
category: "gamedev",
|
|
26696
|
+
about: "Fast 3D viewer (FBX, glTF/GLB, OBJ, STL, PLY, 3DS, USD); renders still previews from the command line.",
|
|
26697
|
+
size: "100 MB",
|
|
26698
|
+
source: { github: "f3d-app/f3d", asset: "^F3D-[\\d.]+-Windows-x86_64\\.zip$" },
|
|
26699
|
+
exe: "f3d.exe",
|
|
26700
|
+
needs: ["mesa"]
|
|
26701
|
+
},
|
|
26702
|
+
{
|
|
26703
|
+
id: "imagemagick",
|
|
26704
|
+
name: "ImageMagick",
|
|
26705
|
+
category: "gamedev",
|
|
26706
|
+
about: "Converts and thumbnails textures (TGA, PSD, DDS, EXR, HDR) and builds contact sheets (magick montage).",
|
|
26707
|
+
size: "150 MB",
|
|
26708
|
+
source: { github: "ImageMagick/ImageMagick", asset: "^ImageMagick-[\\d.]+-\\d+-portable-Q16-HDRI-x64\\.7z$" },
|
|
26709
|
+
exe: "magick.exe",
|
|
26710
|
+
cli: true,
|
|
26711
|
+
needs: ["7zip"]
|
|
26712
|
+
},
|
|
26713
|
+
{
|
|
26714
|
+
id: "nomacs",
|
|
26715
|
+
name: "nomacs",
|
|
26716
|
+
category: "gamedev",
|
|
26717
|
+
about: "Image viewer for textures (TGA, PSD, DDS, EXR).",
|
|
26718
|
+
size: "60 MB",
|
|
26719
|
+
source: { github: "nomacs/nomacs", asset: "^nomacs-portable-win\\.zip$" },
|
|
26720
|
+
exe: "nomacs.exe"
|
|
26721
|
+
},
|
|
26722
|
+
{
|
|
26723
|
+
id: "unity-mcp",
|
|
26724
|
+
name: "MCP for Unity",
|
|
26725
|
+
category: "agents",
|
|
26726
|
+
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.",
|
|
26727
|
+
size: "60 MB",
|
|
26728
|
+
source: { locked: "uv", package: "mcpforunityserver", version: UNITY_MCP_VERSION },
|
|
26729
|
+
exe: "mcp-for-unity.exe",
|
|
26730
|
+
service: true,
|
|
26731
|
+
mcp: {
|
|
26732
|
+
name: "sbx-unity-mcp",
|
|
26733
|
+
program: true,
|
|
26734
|
+
args: ["--transport", "stdio"],
|
|
26735
|
+
env: { DISABLE_TELEMETRY: "1", UNITY_MCP_DISABLE_TELEMETRY: "1", MCP_DISABLE_TELEMETRY: "1" },
|
|
26736
|
+
codex: true
|
|
26737
|
+
},
|
|
26738
|
+
plugsInto: "Claude Code and Codex as the MCP server sbx-unity-mcp",
|
|
26739
|
+
userOnly: true
|
|
26740
|
+
},
|
|
26741
|
+
{
|
|
26742
|
+
id: "openupm-cli",
|
|
26743
|
+
name: "openupm-cli",
|
|
26744
|
+
category: "gamedev",
|
|
26745
|
+
about: "Adds OpenUPM packages to Unity projects from the command line (openupm 4.5.3, BSD-3-Clause).",
|
|
26746
|
+
size: "15 MB",
|
|
26747
|
+
source: { locked: "npm", package: "openupm-cli", version: OPENUPM_CLI_VERSION },
|
|
26748
|
+
exe: "openupm.cmd"
|
|
26749
|
+
}
|
|
26750
|
+
];
|
|
26618
26751
|
|
|
26619
26752
|
// src/shared/apps/catalogue-mobile.ts
|
|
26620
26753
|
var MOBILE_APPS = [];
|
|
@@ -27487,6 +27620,21 @@ var CORE_APPS = [
|
|
|
27487
27620
|
];
|
|
27488
27621
|
var APPS = [...CORE_APPS, ...GAMEDEV_APPS, ...MODDING_APPS, ...MOBILE_APPS, ...AGENTS_WEB_APPS];
|
|
27489
27622
|
|
|
27623
|
+
// src/shared/apps/store-package.ts
|
|
27624
|
+
var GB = 1024 * 1024 * 1024;
|
|
27625
|
+
var FILE_NAME = /^[A-Za-z0-9._~+-]{1,200}\.(msix|appx|msixbundle|appxbundle)$/i;
|
|
27626
|
+
var StorePackageFileSchema = external_exports.strictObject({
|
|
27627
|
+
name: external_exports.string().regex(FILE_NAME),
|
|
27628
|
+
role: external_exports.enum(["main", "dependency"]),
|
|
27629
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
27630
|
+
bytes: external_exports.number().int().positive().max(2 * GB)
|
|
27631
|
+
});
|
|
27632
|
+
var StorePackageManifestSchema = external_exports.strictObject({
|
|
27633
|
+
productId: external_exports.string().regex(/^[A-Z0-9]{12}$/),
|
|
27634
|
+
fetchedAt: external_exports.string().max(40),
|
|
27635
|
+
files: external_exports.array(StorePackageFileSchema).min(1).max(24)
|
|
27636
|
+
}).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");
|
|
27637
|
+
|
|
27490
27638
|
// src/core/schema/apps.ts
|
|
27491
27639
|
var CATALOGUE_IDS = APPS.filter((a) => !a.setting).map((a) => a.id);
|
|
27492
27640
|
var AppIdSchema = external_exports.enum(CATALOGUE_IDS);
|
|
@@ -27621,6 +27769,9 @@ var VpnSchema = external_exports.strictObject({
|
|
|
27621
27769
|
var GithubSchema = external_exports.strictObject({
|
|
27622
27770
|
shareToken: external_exports.boolean().describe(
|
|
27623
27771
|
'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.'
|
|
27772
|
+
),
|
|
27773
|
+
usePcLogin: external_exports.boolean().describe(
|
|
27774
|
+
'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.'
|
|
27624
27775
|
)
|
|
27625
27776
|
});
|
|
27626
27777
|
|
|
@@ -27669,7 +27820,9 @@ var SERVICE_SPECS = {
|
|
|
27669
27820
|
warnings: [
|
|
27670
27821
|
AGENT_CAN_USE,
|
|
27671
27822
|
ONE_PLACE,
|
|
27672
|
-
"
|
|
27823
|
+
"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).",
|
|
27824
|
+
"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).",
|
|
27825
|
+
"A licence file taken from this PC may not work in a sandbox: Unity ties it to the computer."
|
|
27673
27826
|
],
|
|
27674
27827
|
fields: [
|
|
27675
27828
|
{ name: "email", label: "Unity ID email", secret: false, optional: true },
|
|
@@ -27796,11 +27949,28 @@ var SERVICE_SPECS = {
|
|
|
27796
27949
|
"Several sandboxes can use it at once: the sign-in the last one hands back is kept."
|
|
27797
27950
|
],
|
|
27798
27951
|
fields: []
|
|
27952
|
+
},
|
|
27953
|
+
perplexityapp: {
|
|
27954
|
+
kind: "perplexityapp",
|
|
27955
|
+
label: "Perplexity desktop app",
|
|
27956
|
+
usedBy: ["perplexityapp"],
|
|
27957
|
+
sources: ["sandbox"],
|
|
27958
|
+
singleHolder: false,
|
|
27959
|
+
returns: true,
|
|
27960
|
+
maxBytes: 256 * 1024,
|
|
27961
|
+
warnings: [
|
|
27962
|
+
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.",
|
|
27963
|
+
"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.",
|
|
27964
|
+
"Only the perplexity.ai sign-in cookies are kept: never saved passwords, other sites, localStorage or history.",
|
|
27965
|
+
"Several sandboxes can use it at once: the sign-in the last one hands back is kept."
|
|
27966
|
+
],
|
|
27967
|
+
fields: []
|
|
27799
27968
|
}
|
|
27800
27969
|
};
|
|
27801
27970
|
var APP_USER_TEXT = {
|
|
27802
27971
|
perplexity: "the Perplexity MCP app",
|
|
27803
|
-
comet: "the Comet app"
|
|
27972
|
+
comet: "the Comet app",
|
|
27973
|
+
perplexityapp: "the Perplexity desktop app"
|
|
27804
27974
|
};
|
|
27805
27975
|
function usedByText(usedBy) {
|
|
27806
27976
|
return usedBy.map((u) => u in APP_USER_TEXT ? APP_USER_TEXT[u] : u).join(" or ");
|
|
@@ -27825,7 +27995,11 @@ var AccountsSchema = external_exports.strictObject({
|
|
|
27825
27995
|
expo: share("expo", "type the token in Accounts"),
|
|
27826
27996
|
appstore: share("appstore", "import the AuthKey.p8 file in Accounts"),
|
|
27827
27997
|
perplexity: share("perplexity", "type the API key in Accounts, or import it from a .env file"),
|
|
27828
|
-
comet: share("comet", "sign in to Comet once in a sandbox: it cannot be taken from this PC")
|
|
27998
|
+
comet: share("comet", "sign in to Comet once in a sandbox: it cannot be taken from this PC"),
|
|
27999
|
+
perplexityapp: share(
|
|
28000
|
+
"perplexityapp",
|
|
28001
|
+
"sign in to the Perplexity app once in a sandbox: it cannot be taken from this PC"
|
|
28002
|
+
)
|
|
27829
28003
|
}).describe("Service sign-ins for sandboxes (game stores, engines, app signing, Perplexity). Manage them in Accounts.");
|
|
27830
28004
|
|
|
27831
28005
|
// src/core/schema/pc-installs.ts
|
|
@@ -27843,15 +28017,20 @@ var PcInstallsSchema = external_exports.strictObject({
|
|
|
27843
28017
|
"Epic Games Launcher games (by their app name)",
|
|
27844
28018
|
'["Fortnite"]'
|
|
27845
28019
|
),
|
|
27846
|
-
unrealEngines:
|
|
27847
|
-
|
|
27848
|
-
|
|
27849
|
-
|
|
28020
|
+
unrealEngines: external_exports.union([external_exports.literal("auto"), external_exports.boolean(), external_exports.array(external_exports.string().regex(/^(UE_)?\d+\.\d+$/))]).describe(
|
|
28021
|
+
'Unreal Engine versions installed on this PC (with the Epic Games Launcher, or source builds it lists), read-only in the sandbox under C:\\PcInstalls\\unreal and registered there, so projects build with them without a download. "auto" = all of them whenever the sandbox is set up for Unreal, true = always, false = never, or a list (e.g. ["5.4"]).'
|
|
28022
|
+
),
|
|
28023
|
+
unrealEngineFolders: external_exports.array(external_exports.string().min(3).max(260)).max(8).describe(
|
|
28024
|
+
"Unreal Engine folders of this PC to use in the sandbox, writable (a source build, or a copy you build plugins into): each must hold Engine\\Build\\Build.version. Mapped under C:\\PcInstalls\\unreal and registered there."
|
|
28025
|
+
),
|
|
28026
|
+
unrealAssets: external_exports.union([external_exports.literal("auto"), external_exports.boolean()]).describe(
|
|
28027
|
+
`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.`
|
|
28028
|
+
),
|
|
28029
|
+
unityEditors: external_exports.union([external_exports.literal("auto"), external_exports.boolean(), external_exports.array(external_exports.string().regex(/^\d+\.\d+\.\d+[abfp]\d+$/))]).describe(
|
|
28030
|
+
`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"]).`
|
|
27850
28031
|
),
|
|
27851
|
-
|
|
27852
|
-
|
|
27853
|
-
"Unity editors installed with Unity Hub",
|
|
27854
|
-
'["6000.0.32f1"]'
|
|
28032
|
+
unityAssets: external_exports.union([external_exports.literal("auto"), external_exports.boolean()]).describe(
|
|
28033
|
+
`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.`
|
|
27855
28034
|
)
|
|
27856
28035
|
}).describe(
|
|
27857
28036
|
"Games, engines and editors installed on this PC, mapped read-only into sandboxes (no copy, no room on the sandbox's disk)."
|
|
@@ -56,6 +56,7 @@ export const agentPathsSuite = {
|
|
|
56
56
|
'C:\\AgentData\\state\\codex\\.sandbox\\setup_marker.json',
|
|
57
57
|
'C:\\AgentData\\state\\codex\\.sandbox\\deny_read_acl_state.json',
|
|
58
58
|
'C:\\AgentData\\state\\codex\\tmp\\arg0',
|
|
59
|
+
'C:\\AgentData\\state\\codex\\tmp\\arg0-windows',
|
|
59
60
|
], "codex's DPAPI-sealed sandbox users and setup marker are removed at boot (CryptUnprotectData otherwise)");
|
|
60
61
|
t.check(HarnessSchema.safeParse({ ...DEFAULTS.harnesses.codex, bootReset: ['..\\login'] }).success === false &&
|
|
61
62
|
HarnessSchema.safeParse({ ...DEFAULTS.harnesses.codex, bootReset: ['C:\\Windows'] }).success === false, 'bootReset takes only plain paths below the agent state folder');
|
|
@@ -539,11 +539,12 @@ export const agentsWebSuite = {
|
|
|
539
539
|
'perplexity-mcp',
|
|
540
540
|
'perplexity-computer-mcp',
|
|
541
541
|
'comet',
|
|
542
|
+
'perplexity-desktop',
|
|
542
543
|
'comet-mcp',
|
|
543
544
|
'chrome-devtools-mcp',
|
|
544
545
|
'browser-use-mcp',
|
|
545
546
|
];
|
|
546
|
-
t.equal(AGENTS_WEB_APPS.map((a) => a.id), ids, 'the
|
|
547
|
+
t.equal(AGENTS_WEB_APPS.map((a) => a.id), ids, 'the seven entries');
|
|
547
548
|
for (const entry of AGENTS_WEB_APPS) {
|
|
548
549
|
t.check(APPS.filter((a) => a.id === entry.id).length === 1 &&
|
|
549
550
|
entry.userOnly === true &&
|
|
@@ -622,6 +623,10 @@ export const agentsWebSuite = {
|
|
|
622
623
|
issuer: 'CN=GlobalSign GCC R45 EV CodeSigning CA 2020, O=GlobalSign nv-sa, C=BE',
|
|
623
624
|
};
|
|
624
625
|
t.check(signerMatches(signed, COMET_SIGNER), 'Perplexity AI, Inc. with its GlobalSign EV certificate passes');
|
|
626
|
+
t.check(signerMatches({
|
|
627
|
+
subject: 'E=dmitryp@perplexity.ai, CN="PERPLEXITY AI, INC.", O="PERPLEXITY AI, INC.", L=San Francisco, S=California, C=US, SERIALNUMBER=6909743, OID.2.5.4.15=Private Organization',
|
|
628
|
+
issuer: signed.issuer,
|
|
629
|
+
}, COMET_SIGNER), 'the subject as Windows reports it (E= contact address first) passes: it was refused before');
|
|
625
630
|
t.check(!signerMatches(null, COMET_SIGNER) &&
|
|
626
631
|
!signerMatches({ ...signed, subject: signed.subject.replace('O="PERPLEXITY AI, INC."', 'O=Someone Else') }, COMET_SIGNER) &&
|
|
627
632
|
!signerMatches({ ...signed, subject: 'CN="PERPLEXITY AI, INC. EVIL", O="PERPLEXITY AI, INC. EVIL"' }, COMET_SIGNER) &&
|
|
@@ -639,6 +644,14 @@ export const agentsWebSuite = {
|
|
|
639
644
|
t.check(chromiumBin(stage, 'comet.exe') === null, 'a Chrome-bin without the browser does not count');
|
|
640
645
|
t.write(path.join(stage, 'd', 'Chrome-bin', 'comet.exe'), 'x');
|
|
641
646
|
t.equal(chromiumBin(stage, 'comet.exe'), path.join(stage, 'd', 'Chrome-bin'), 'the browser folder is found');
|
|
647
|
+
const real = t.dir('web-unpack-real');
|
|
648
|
+
const nested = path.join(real, 'bin', 'Offline', '{a8c89918}', '{42e10078}');
|
|
649
|
+
t.write(path.join(nested, 'mini_installer.exe'), 'x');
|
|
650
|
+
t.write(path.join(real, 'updater.7z'), 'x');
|
|
651
|
+
t.check(path.basename(nextInner(real) ?? '') === 'mini_installer.exe', "Comet's current installer (updater.7z, mini_installer.exe five folders down) is opened stage by stage");
|
|
652
|
+
const only = t.dir('web-unpack-first');
|
|
653
|
+
t.write(path.join(only, 'updater.7z'), 'x');
|
|
654
|
+
t.check(path.basename(nextInner(only) ?? '') === 'updater.7z', 'updater.7z is a stage too');
|
|
642
655
|
const appDir = t.dir('web-kept');
|
|
643
656
|
t.check(keptInstaller(appDir) === null, 'no installer kept when it was unpacked');
|
|
644
657
|
t.write(path.join(appDir, 'installer', 'comet_installer.exe'), 'x');
|