windows-development-sandbox 1.27.1 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/app/context.d.ts +5 -0
  2. package/dist/app/context.js +13 -0
  3. package/dist/app/features/accounts/accounts.def.d.ts +16 -0
  4. package/dist/app/features/accounts/accounts.run.d.ts +4 -0
  5. package/dist/app/features/accounts/services.def.d.ts +15 -1
  6. package/dist/app/features/accounts/services.def.js +67 -31
  7. package/dist/app/features/accounts/services.run.d.ts +7 -2
  8. package/dist/app/features/accounts/services.run.js +25 -6
  9. package/dist/app/features/defs.d.ts +17 -0
  10. package/dist/app/registry.d.ts +1 -1
  11. package/dist/app/registry.js +15 -2
  12. package/dist/bin/agent-sandbox.js +2 -2
  13. package/dist/bin/{chunk-RSIX7C6D.js → chunk-CB44HTTN.js} +444 -175
  14. package/dist/bin/{chunk-4TLSWPG7.js → chunk-UZ5S3EMB.js} +1 -1
  15. package/dist/bin/{chunk-QUHNXHVG.js → chunk-ZMZI3625.js} +46 -41
  16. package/dist/bin/claude-host.js +2 -2
  17. package/dist/bin/claude-sbx.js +2 -2
  18. package/dist/bin/codex-sbx.js +2 -2
  19. package/dist/bin/gemini-sbx.js +2 -2
  20. package/dist/bin/sandbox.js +2 -2
  21. package/dist/bin/sbx-hide.js +2 -2
  22. package/dist/bin/sbx-show.js +2 -2
  23. package/dist/cli/menu/menu.js +6 -1
  24. package/dist/cli/menu/pages/accounts-page.js +9 -5
  25. package/dist/core/schema/sandbox.js +1 -1
  26. package/dist/guest/apps/app-installer.js +7 -5
  27. package/dist/guest/apps/comet-unpack.js +2 -2
  28. package/dist/guest/daemon/heartbeat.js +1 -0
  29. package/dist/guest/governor/core.d.ts +53 -1
  30. package/dist/guest/governor/core.js +95 -1
  31. package/dist/guest/governor/decide.d.ts +4 -0
  32. package/dist/guest/governor/decide.js +2 -0
  33. package/dist/guest/governor/governor.js +23 -9
  34. package/dist/guest/runtime/pools.d.ts +4 -4
  35. package/dist/guest/runtime/pools.js +4 -15
  36. package/dist/guest/runtime/process.d.ts +5 -2
  37. package/dist/guest/runtime/process.js +23 -3
  38. package/dist/guest/toolchains/engines/epic-launcher.d.ts +6 -0
  39. package/dist/guest/toolchains/engines/epic-launcher.js +19 -1
  40. package/dist/guest/toolchains/engines/unreal-engines.js +2 -1
  41. package/dist/guest/toolchains/installers.d.ts +3 -3
  42. package/dist/guest/toolchains/installers.js +5 -5
  43. package/dist/guest/toolchains/native/unreal.js +22 -3
  44. package/dist/guest/toolchains/native/vcruntime.js +2 -2
  45. package/dist/guest/toolchains/native/vs-persist.d.ts +2 -2
  46. package/dist/guest/toolchains/runtimes.js +7 -6
  47. package/dist/guest/toolchains/signature.d.ts +2 -0
  48. package/dist/guest/toolchains/signature.js +9 -2
  49. package/dist/guest/toolchains/step-scheduler.js +1 -1
  50. package/dist/host/accounts/deliver.js +15 -7
  51. package/dist/host/life/crash-report.d.ts +4 -0
  52. package/dist/host/life/crash-report.js +30 -1
  53. package/dist/host/life/last-end.js +1 -0
  54. package/dist/host/pc-installs/discover.js +5 -2
  55. package/dist/host/pc-installs/unreal.d.ts +3 -1
  56. package/dist/host/pc-installs/unreal.js +27 -1
  57. package/dist/host/tools/windows-terminal.d.ts +4 -1
  58. package/dist/host/tools/windows-terminal.js +25 -9
  59. package/dist/runtime/agent.js +39 -23
  60. package/dist/runtime/daemon.js +279 -121
  61. package/dist/runtime/db.js +37 -17
  62. package/dist/runtime/main.js +340 -109
  63. package/dist/runtime/netproxy.js +31 -13
  64. package/dist/runtime/tool.js +37 -16
  65. package/dist/runtime/view.js +150 -38
  66. package/dist/selftest/agent-paths.test.js +3 -1
  67. package/dist/selftest/app.test.js +20 -2
  68. package/dist/selftest/boot-runner.test.js +15 -1
  69. package/dist/selftest/channel.test.js +33 -0
  70. package/dist/selftest/engines.test.js +22 -1
  71. package/dist/selftest/heavy-load.test.js +116 -4
  72. package/dist/selftest/live-terminal.test.js +103 -0
  73. package/dist/selftest/menu-screens.js +52 -1
  74. package/dist/selftest/menu.test.js +29 -3
  75. package/dist/selftest/personalization.test.js +2 -1
  76. package/dist/selftest/service-accounts.test.js +77 -2
  77. package/dist/selftest/support/engine-golden.js +2 -0
  78. package/dist/selftest/ui-text.test.js +4 -0
  79. package/dist/shared/accounts/kinds.js +9 -9
  80. package/dist/shared/apps/catalogue-gamedev.js +1 -0
  81. package/dist/shared/apps/catalogue.d.ts +2 -0
  82. package/dist/shared/channel/schema.d.ts +2 -0
  83. package/dist/shared/channel/schema.js +4 -0
  84. package/dist/shared/concurrency/pools.js +1 -1
  85. package/dist/shared/download/archive.js +4 -2
  86. package/dist/shared/download/index.d.ts +1 -1
  87. package/dist/shared/download/index.js +1 -1
  88. package/dist/shared/download/spawn.d.ts +7 -1
  89. package/dist/shared/download/spawn.js +16 -1
  90. package/dist/shared/memory/index.d.ts +1 -0
  91. package/dist/shared/memory/index.js +1 -0
  92. package/dist/shared/memory/policy.d.ts +12 -0
  93. package/dist/shared/memory/policy.js +4 -0
  94. package/dist/shared/memory/unreal-build.d.ts +2 -0
  95. package/dist/shared/memory/unreal-build.js +21 -0
  96. package/dist/shared/paths/pc-installs.d.ts +8 -0
  97. package/dist/shared/pty/clipboard-watch.d.ts +4 -0
  98. package/dist/shared/pty/clipboard-watch.js +40 -0
  99. package/dist/shared/pty/ctrl-c.d.ts +13 -7
  100. package/dist/shared/pty/ctrl-c.js +35 -19
  101. package/dist/shared/pty/index.d.ts +1 -0
  102. package/dist/shared/pty/index.js +1 -0
  103. package/dist/shared/pty/terminal.d.ts +1 -1
  104. package/dist/shared/pty/terminal.js +16 -13
  105. package/dist/shared/unreal/launcher-files.d.ts +7 -0
  106. package/dist/shared/unreal/launcher-files.js +32 -1
  107. package/dist/shared/web/ctrl-c.d.ts +26 -0
  108. package/dist/shared/web/ctrl-c.js +64 -0
  109. package/dist/shared/web/index.d.ts +1 -0
  110. package/dist/shared/web/index.js +1 -0
  111. package/dist/web/index.html +1 -1
  112. package/dist/web/{main-VPMYTSUL.js → main-7NY4X6YU.js} +67 -67
  113. package/native/csharp/HcsHost/AssemblyInfo.cs +3 -3
  114. package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
  115. package/native/csharp/StorageHelper/AssemblyInfo.cs +3 -3
  116. package/package.json +1 -1
  117. package/sandbox/csharp/ClipboardWatch.cs +59 -0
  118. package/sandbox/csharp/MemGov.cs +752 -7
  119. package/sandbox/scripts/watch-clipboard.ps1 +8 -0
  120. package/schemas/config.schema.json +10 -10
  121. package/schemas/sandbox-config.schema.json +9 -9
@@ -25530,7 +25530,7 @@ var SandboxSchema = external_exports.strictObject({
25530
25530
  'The last resort that keeps the sandbox up, in MB below its commit limit (RAM plus paging file): builds are slowed down long before (sandbox.pressureResponse); only if everything the agents start together would take the sandbox to the very edge of its memory, where Windows inside it would start failing, is a build refused memory instead of Windows. "auto" = the larger of 1536 MB and 3 % of the commit limit; "none" = no backstop. Yours only: a project file cannot change it.'
25531
25531
  ),
25532
25532
  pressureResponse: external_exports.boolean().describe(
25533
- "When the sandbox (or this PC) runs low on memory, slow builds down in steps, like a PC that gets slower instead of failing: build programs get lower CPU and memory priority, then less CPU, then compilers take turns (the waiting ones briefly suspended and trimmed to the paging file). Nothing is stopped or killed, and the agents themselves are never touched. Yours only: a project file cannot change it."
25533
+ "When the sandbox (or this PC) runs low on memory, slow builds down in steps, like a PC that gets slower instead of failing: build programs get lower CPU and memory priority, then less CPU, then compilers take turns (the waiting ones briefly suspended and trimmed to the paging file). Nothing is stopped or killed, and the agents themselves are never touched. A memory gate also holds new compilers and linkers for a moment when the memory of the build programs grows faster than 4 GB in 3 seconds (3 GB with vGPU), and lets them go one at a time. Yours only: a project file cannot change it."
25534
25534
  ),
25535
25535
  vGpu: external_exports.boolean().describe(
25536
25536
  "Virtual GPU. Off by default: Microsoft notes it widens the sandbox attack surface. The sandbox then uses this PC's graphics card, and with some graphics drivers heavy use can freeze the whole PC: turn it on only when a program in the sandbox needs the GPU (the mesa toolchain gives software OpenGL without it). Browsers in the sandbox never use it (they draw in software)."
@@ -26121,6 +26121,7 @@ var GAMEDEV_APPS = [
26121
26121
  size: "100 MB",
26122
26122
  source: { github: "f3d-app/f3d", asset: "^F3D-[\\d.]+-Windows-x86_64\\.zip$" },
26123
26123
  exe: "f3d.exe",
26124
+ onPath: true,
26124
26125
  needs: ["mesa"]
26125
26126
  },
26126
26127
  {
@@ -27220,7 +27221,7 @@ var SERVICE_SPECS = {
27220
27221
  },
27221
27222
  steam: {
27222
27223
  kind: "steam",
27223
- label: "Steam (SteamCMD)",
27224
+ label: "Steam",
27224
27225
  usedBy: ["steam"],
27225
27226
  sources: ["file", "sandbox"],
27226
27227
  singleHolder: true,
@@ -27256,7 +27257,7 @@ var SERVICE_SPECS = {
27256
27257
  },
27257
27258
  cfx: {
27258
27259
  kind: "cfx",
27259
- label: "Cfx.re (FiveM / RedM server key)",
27260
+ label: "FiveM key",
27260
27261
  usedBy: ["fivem"],
27261
27262
  sources: ["typed", "file"],
27262
27263
  singleHolder: false,
@@ -27285,7 +27286,7 @@ var SERVICE_SPECS = {
27285
27286
  },
27286
27287
  keystore: {
27287
27288
  kind: "keystore",
27288
- label: "Android upload keystore",
27289
+ label: "Android keystore",
27289
27290
  usedBy: ["android"],
27290
27291
  sources: ["file"],
27291
27292
  singleHolder: false,
@@ -27300,7 +27301,7 @@ var SERVICE_SPECS = {
27300
27301
  },
27301
27302
  play: {
27302
27303
  kind: "play",
27303
- label: "Google Play (service account)",
27304
+ label: "Google Play",
27304
27305
  usedBy: ["android"],
27305
27306
  sources: ["file"],
27306
27307
  singleHolder: false,
@@ -27311,7 +27312,7 @@ var SERVICE_SPECS = {
27311
27312
  },
27312
27313
  expo: {
27313
27314
  kind: "expo",
27314
- label: "Expo (EAS)",
27315
+ label: "Expo",
27315
27316
  usedBy: ["reactNative"],
27316
27317
  sources: ["typed"],
27317
27318
  singleHolder: false,
@@ -27322,7 +27323,7 @@ var SERVICE_SPECS = {
27322
27323
  },
27323
27324
  appstore: {
27324
27325
  kind: "appstore",
27325
- label: "App Store Connect API key",
27326
+ label: "App Store Connect",
27326
27327
  usedBy: ["reactNative", "flutter"],
27327
27328
  sources: ["file", "typed"],
27328
27329
  singleHolder: false,
@@ -27336,7 +27337,7 @@ var SERVICE_SPECS = {
27336
27337
  },
27337
27338
  perplexity: {
27338
27339
  kind: "perplexity",
27339
- label: "Perplexity API key",
27340
+ label: "Perplexity API",
27340
27341
  usedBy: ["perplexity"],
27341
27342
  sources: ["pc", "file", "typed"],
27342
27343
  singleHolder: false,
@@ -27360,7 +27361,7 @@ var SERVICE_SPECS = {
27360
27361
  },
27361
27362
  comet: {
27362
27363
  kind: "comet",
27363
- label: "Comet (Perplexity browser)",
27364
+ label: "Comet",
27364
27365
  usedBy: ["comet"],
27365
27366
  sources: ["sandbox"],
27366
27367
  singleHolder: false,
@@ -27376,7 +27377,7 @@ var SERVICE_SPECS = {
27376
27377
  },
27377
27378
  perplexityapp: {
27378
27379
  kind: "perplexityapp",
27379
- label: "Perplexity desktop app",
27380
+ label: "Perplexity app",
27380
27381
  usedBy: ["perplexityapp"],
27381
27382
  sources: ["sandbox"],
27382
27383
  singleHolder: false,
@@ -27727,6 +27728,8 @@ var PressureStatusSchema = external_exports.object({
27727
27728
  lowered: external_exports.number().int().min(0).max(1024),
27728
27729
  /** Compilers waiting their turn right now (name, process id, seconds until they may go on). */
27729
27730
  paused: external_exports.array(external_exports.object({ name: Text(64), pid: external_exports.number().int(), seconds: external_exports.number().int().min(0).max(60) })).max(8),
27731
+ /** Build programs the memory gate holds right now (let go one at a time). */
27732
+ held: external_exports.number().int().min(0).max(1024).optional(),
27730
27733
  /** The CPU share the compilers get together (percent; 100 = no cap). */
27731
27734
  cpuPercent: external_exports.number().int().min(0).max(100).optional(),
27732
27735
  /** The PC itself asked for slowing down (its memory or CPU is low). */
@@ -27747,6 +27750,8 @@ var HeartbeatSchema = external_exports.object({
27747
27750
  topProcesses: external_exports.array(external_exports.object({ name: Text(64), privateMb: external_exports.number().int().min(0).max(1e7) })).max(5),
27748
27751
  /** The disk queue this PC last reported while asking the sandbox to slow down. */
27749
27752
  diskQueueReported: external_exports.number().min(0).max(1e5).optional(),
27753
+ /** Build programs the memory gate holds right now (let go one at a time). */
27754
+ held: external_exports.number().int().min(0).max(1024).optional(),
27750
27755
  /** "ending": the sandbox is shutting down in order (idle shutdown, sandbox stop, Windows shutting down). */
27751
27756
  phase: external_exports.enum(["ready", "working", "ending"])
27752
27757
  });
@@ -28124,10 +28129,20 @@ function scriptArgs(name, args = []) {
28124
28129
  }
28125
28130
 
28126
28131
  // src/shared/download/spawn.ts
28132
+ import os3 from "node:os";
28127
28133
  import { spawn } from "node:child_process";
28134
+ function lowerPriority(pid) {
28135
+ if (pid === void 0) return;
28136
+ try {
28137
+ os3.setPriority(pid, os3.constants.priority.PRIORITY_BELOW_NORMAL);
28138
+ } catch {
28139
+ }
28140
+ }
28128
28141
  function spawnAsync(file2, args, options = {}) {
28142
+ const { lowPriority, ...spawnOptions } = options;
28129
28143
  return new Promise((resolve, reject) => {
28130
- const child = spawn(file2, args, { stdio: "ignore", windowsHide: true, ...options });
28144
+ const child = spawn(file2, args, { stdio: "ignore", windowsHide: true, ...spawnOptions });
28145
+ if (lowPriority) lowerPriority(child.pid);
28131
28146
  child.once("error", reject);
28132
28147
  child.once("close", (code) => resolve(code ?? -1));
28133
28148
  });
@@ -28148,13 +28163,16 @@ function extractArchive(archive, destination, members2 = []) {
28148
28163
  }
28149
28164
  async function extract(archive, destination, members2) {
28150
28165
  fs6.mkdirSync(destination, { recursive: true });
28151
- let status = await spawnAsync(SYSTEM.tar(), ["-xf", archive, "-C", destination, ...members2]);
28166
+ let status = await spawnAsync(SYSTEM.tar(), ["-xf", archive, "-C", destination, ...members2], {
28167
+ lowPriority: true
28168
+ });
28152
28169
  if (status !== 0 && /\.(zip|nupkg)$/i.test(archive)) {
28153
28170
  const zip = archive.endsWith(".zip") ? archive : archive + ".zip";
28154
28171
  if (zip !== archive) fs6.copyFileSync(archive, zip);
28155
28172
  status = await spawnAsync(
28156
28173
  SYSTEM.powershell(),
28157
- scriptArgs("expand-archive.ps1", ["-Archive", zip, "-Destination", destination])
28174
+ scriptArgs("expand-archive.ps1", ["-Archive", zip, "-Destination", destination]),
28175
+ { lowPriority: true }
28158
28176
  );
28159
28177
  }
28160
28178
  if (status !== 0) throw new Error("Could not extract " + archive);
@@ -5551,7 +5551,7 @@ var androidTool = {
5551
5551
 
5552
5552
  // src/guest/devtools/fivem.ts
5553
5553
  import fs17 from "node:fs";
5554
- import os3 from "node:os";
5554
+ import os4 from "node:os";
5555
5555
  import path20 from "node:path";
5556
5556
  import { spawnSync as spawnSync2 } from "node:child_process";
5557
5557
 
@@ -5831,10 +5831,20 @@ function scriptArgs(name2, args2 = []) {
5831
5831
  }
5832
5832
 
5833
5833
  // src/shared/download/spawn.ts
5834
+ import os3 from "node:os";
5834
5835
  import { spawn } from "node:child_process";
5836
+ function lowerPriority(pid) {
5837
+ if (pid === void 0) return;
5838
+ try {
5839
+ os3.setPriority(pid, os3.constants.priority.PRIORITY_BELOW_NORMAL);
5840
+ } catch {
5841
+ }
5842
+ }
5835
5843
  function spawnAsync(file2, args2, options = {}) {
5844
+ const { lowPriority, ...spawnOptions } = options;
5836
5845
  return new Promise((resolve, reject) => {
5837
- const child = spawn(file2, args2, { stdio: "ignore", windowsHide: true, ...options });
5846
+ const child = spawn(file2, args2, { stdio: "ignore", windowsHide: true, ...spawnOptions });
5847
+ if (lowPriority) lowerPriority(child.pid);
5838
5848
  child.once("error", reject);
5839
5849
  child.once("close", (code) => resolve(code ?? -1));
5840
5850
  });
@@ -5855,13 +5865,16 @@ function extractArchive(archive, destination, members2 = []) {
5855
5865
  }
5856
5866
  async function extract(archive, destination, members2) {
5857
5867
  fs7.mkdirSync(destination, { recursive: true });
5858
- let status = await spawnAsync(SYSTEM.tar(), ["-xf", archive, "-C", destination, ...members2]);
5868
+ let status = await spawnAsync(SYSTEM.tar(), ["-xf", archive, "-C", destination, ...members2], {
5869
+ lowPriority: true
5870
+ });
5859
5871
  if (status !== 0 && /\.(zip|nupkg)$/i.test(archive)) {
5860
5872
  const zip = archive.endsWith(".zip") ? archive : archive + ".zip";
5861
5873
  if (zip !== archive) fs7.copyFileSync(archive, zip);
5862
5874
  status = await spawnAsync(
5863
5875
  SYSTEM.powershell(),
5864
- scriptArgs("expand-archive.ps1", ["-Archive", zip, "-Destination", destination])
5876
+ scriptArgs("expand-archive.ps1", ["-Archive", zip, "-Destination", destination]),
5877
+ { lowPriority: true }
5865
5878
  );
5866
5879
  }
5867
5880
  if (status !== 0) throw new Error("Could not extract " + archive);
@@ -25903,7 +25916,7 @@ var SandboxSchema = external_exports.strictObject({
25903
25916
  'The last resort that keeps the sandbox up, in MB below its commit limit (RAM plus paging file): builds are slowed down long before (sandbox.pressureResponse); only if everything the agents start together would take the sandbox to the very edge of its memory, where Windows inside it would start failing, is a build refused memory instead of Windows. "auto" = the larger of 1536 MB and 3 % of the commit limit; "none" = no backstop. Yours only: a project file cannot change it.'
25904
25917
  ),
25905
25918
  pressureResponse: external_exports.boolean().describe(
25906
- "When the sandbox (or this PC) runs low on memory, slow builds down in steps, like a PC that gets slower instead of failing: build programs get lower CPU and memory priority, then less CPU, then compilers take turns (the waiting ones briefly suspended and trimmed to the paging file). Nothing is stopped or killed, and the agents themselves are never touched. Yours only: a project file cannot change it."
25919
+ "When the sandbox (or this PC) runs low on memory, slow builds down in steps, like a PC that gets slower instead of failing: build programs get lower CPU and memory priority, then less CPU, then compilers take turns (the waiting ones briefly suspended and trimmed to the paging file). Nothing is stopped or killed, and the agents themselves are never touched. A memory gate also holds new compilers and linkers for a moment when the memory of the build programs grows faster than 4 GB in 3 seconds (3 GB with vGPU), and lets them go one at a time. Yours only: a project file cannot change it."
25907
25920
  ),
25908
25921
  vGpu: external_exports.boolean().describe(
25909
25922
  "Virtual GPU. Off by default: Microsoft notes it widens the sandbox attack surface. The sandbox then uses this PC's graphics card, and with some graphics drivers heavy use can freeze the whole PC: turn it on only when a program in the sandbox needs the GPU (the mesa toolchain gives software OpenGL without it). Browsers in the sandbox never use it (they draw in software)."
@@ -26494,6 +26507,7 @@ var GAMEDEV_APPS = [
26494
26507
  size: "100 MB",
26495
26508
  source: { github: "f3d-app/f3d", asset: "^F3D-[\\d.]+-Windows-x86_64\\.zip$" },
26496
26509
  exe: "f3d.exe",
26510
+ onPath: true,
26497
26511
  needs: ["mesa"]
26498
26512
  },
26499
26513
  {
@@ -27593,7 +27607,7 @@ var SERVICE_SPECS = {
27593
27607
  },
27594
27608
  steam: {
27595
27609
  kind: "steam",
27596
- label: "Steam (SteamCMD)",
27610
+ label: "Steam",
27597
27611
  usedBy: ["steam"],
27598
27612
  sources: ["file", "sandbox"],
27599
27613
  singleHolder: true,
@@ -27629,7 +27643,7 @@ var SERVICE_SPECS = {
27629
27643
  },
27630
27644
  cfx: {
27631
27645
  kind: "cfx",
27632
- label: "Cfx.re (FiveM / RedM server key)",
27646
+ label: "FiveM key",
27633
27647
  usedBy: ["fivem"],
27634
27648
  sources: ["typed", "file"],
27635
27649
  singleHolder: false,
@@ -27658,7 +27672,7 @@ var SERVICE_SPECS = {
27658
27672
  },
27659
27673
  keystore: {
27660
27674
  kind: "keystore",
27661
- label: "Android upload keystore",
27675
+ label: "Android keystore",
27662
27676
  usedBy: ["android"],
27663
27677
  sources: ["file"],
27664
27678
  singleHolder: false,
@@ -27673,7 +27687,7 @@ var SERVICE_SPECS = {
27673
27687
  },
27674
27688
  play: {
27675
27689
  kind: "play",
27676
- label: "Google Play (service account)",
27690
+ label: "Google Play",
27677
27691
  usedBy: ["android"],
27678
27692
  sources: ["file"],
27679
27693
  singleHolder: false,
@@ -27684,7 +27698,7 @@ var SERVICE_SPECS = {
27684
27698
  },
27685
27699
  expo: {
27686
27700
  kind: "expo",
27687
- label: "Expo (EAS)",
27701
+ label: "Expo",
27688
27702
  usedBy: ["reactNative"],
27689
27703
  sources: ["typed"],
27690
27704
  singleHolder: false,
@@ -27695,7 +27709,7 @@ var SERVICE_SPECS = {
27695
27709
  },
27696
27710
  appstore: {
27697
27711
  kind: "appstore",
27698
- label: "App Store Connect API key",
27712
+ label: "App Store Connect",
27699
27713
  usedBy: ["reactNative", "flutter"],
27700
27714
  sources: ["file", "typed"],
27701
27715
  singleHolder: false,
@@ -27709,7 +27723,7 @@ var SERVICE_SPECS = {
27709
27723
  },
27710
27724
  perplexity: {
27711
27725
  kind: "perplexity",
27712
- label: "Perplexity API key",
27726
+ label: "Perplexity API",
27713
27727
  usedBy: ["perplexity"],
27714
27728
  sources: ["pc", "file", "typed"],
27715
27729
  singleHolder: false,
@@ -27733,7 +27747,7 @@ var SERVICE_SPECS = {
27733
27747
  },
27734
27748
  comet: {
27735
27749
  kind: "comet",
27736
- label: "Comet (Perplexity browser)",
27750
+ label: "Comet",
27737
27751
  usedBy: ["comet"],
27738
27752
  sources: ["sandbox"],
27739
27753
  singleHolder: false,
@@ -27749,7 +27763,7 @@ var SERVICE_SPECS = {
27749
27763
  },
27750
27764
  perplexityapp: {
27751
27765
  kind: "perplexityapp",
27752
- label: "Perplexity desktop app",
27766
+ label: "Perplexity app",
27753
27767
  usedBy: ["perplexityapp"],
27754
27768
  sources: ["sandbox"],
27755
27769
  singleHolder: false,
@@ -28100,6 +28114,8 @@ var PressureStatusSchema = external_exports.object({
28100
28114
  lowered: external_exports.number().int().min(0).max(1024),
28101
28115
  /** Compilers waiting their turn right now (name, process id, seconds until they may go on). */
28102
28116
  paused: external_exports.array(external_exports.object({ name: Text(64), pid: external_exports.number().int(), seconds: external_exports.number().int().min(0).max(60) })).max(8),
28117
+ /** Build programs the memory gate holds right now (let go one at a time). */
28118
+ held: external_exports.number().int().min(0).max(1024).optional(),
28103
28119
  /** The CPU share the compilers get together (percent; 100 = no cap). */
28104
28120
  cpuPercent: external_exports.number().int().min(0).max(100).optional(),
28105
28121
  /** The PC itself asked for slowing down (its memory or CPU is low). */
@@ -28120,6 +28136,8 @@ var HeartbeatSchema = external_exports.object({
28120
28136
  topProcesses: external_exports.array(external_exports.object({ name: Text(64), privateMb: external_exports.number().int().min(0).max(1e7) })).max(5),
28121
28137
  /** The disk queue this PC last reported while asking the sandbox to slow down. */
28122
28138
  diskQueueReported: external_exports.number().min(0).max(1e5).optional(),
28139
+ /** Build programs the memory gate holds right now (let go one at a time). */
28140
+ held: external_exports.number().int().min(0).max(1024).optional(),
28123
28141
  /** "ending": the sandbox is shutting down in order (idle shutdown, sandbox stop, Windows shutting down). */
28124
28142
  phase: external_exports.enum(["ready", "working", "ending"])
28125
28143
  });
@@ -28484,7 +28502,10 @@ function warn(message) {
28484
28502
  // src/guest/toolchains/signature.ts
28485
28503
  var SignatureSchema = external_exports.object({ subject: external_exports.string().max(4096), issuer: external_exports.string().max(4096) });
28486
28504
  function signatureOf(file2) {
28487
- const text = scriptOutput("get-signature.ps1", ["-Path", file2]).trim();
28505
+ return parseSignature(scriptOutput("get-signature.ps1", ["-Path", file2]));
28506
+ }
28507
+ function parseSignature(output2) {
28508
+ const text = output2.trim();
28488
28509
  if (!text) return null;
28489
28510
  try {
28490
28511
  const parsed = SignatureSchema.safeParse(JSON.parse(text));
@@ -29014,7 +29035,7 @@ function parse3(args2) {
29014
29035
  return { positionals, flags, dir: dir === void 0 ? void 0 : path20.resolve(dir) };
29015
29036
  }
29016
29037
  function addresses() {
29017
- return Object.values(os3.networkInterfaces()).flat().filter((a) => Boolean(a && a.family === "IPv4" && !a.internal)).map((a) => a.address);
29038
+ return Object.values(os4.networkInterfaces()).flat().filter((a) => Boolean(a && a.family === "IPv4" && !a.internal)).map((a) => a.address);
29018
29039
  }
29019
29040
  function mariadbClient() {
29020
29041
  const root = path20.join(toolsDir, "mariadb");