stim 1.14.0 → 1.16.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 (152) hide show
  1. package/README.md +2 -0
  2. package/dist/activity-BxwdD81S.mjs +609 -0
  3. package/dist/agent-device-usage-output-Dpih1Tfa.mjs +411 -0
  4. package/dist/{android-d6rGq1pA.mjs → android-B_NumVyQ.mjs} +169 -81
  5. package/dist/{android-LbPFRWVL.mjs → android-Ift4kVvt.mjs} +517 -413
  6. package/dist/android-cas-8U4DPqeR.mjs +167 -0
  7. package/dist/android-cas-compiler.mjs +2 -2
  8. package/dist/{android-XpvCrV7q.mjs → android-r2rBL8kV.mjs} +2 -2
  9. package/dist/{app-install-BpgSgkJj.mjs → app-install-CKWdbXIX.mjs} +128 -151
  10. package/dist/attempt-Bk2ouQVL.mjs +39 -0
  11. package/dist/budget-DjrURfQn.mjs +2700 -0
  12. package/dist/{build-plan-Dcr-3ie0.mjs → build-plan-DjeSb2Xl.mjs} +192 -653
  13. package/dist/build-slots-rUk77xqh.mjs +132 -0
  14. package/dist/{cache-manifest-C68QQ0ua.mjs → cache-manifest-DnUHBJaU.mjs} +2 -2
  15. package/dist/cache-manifest.mjs +1 -1
  16. package/dist/{chrome-BPCiC3ZX.mjs → chrome-BrcVWQyD.mjs} +1 -1
  17. package/dist/cli-BkYZ_6hy.mjs +51 -0
  18. package/dist/cli.mjs +6 -42
  19. package/dist/client-BTY686R6.mjs +1368 -0
  20. package/dist/collector-run.mjs +9 -195
  21. package/dist/{command-output-DVcpw6eE.mjs → command-output-DnJMdEY-.mjs} +1 -1
  22. package/dist/{config-lvc7d3C2.mjs → config-D0DbpZtM.mjs} +28 -29
  23. package/dist/{created-devices-CllH_8eb.mjs → created-devices-D5owjN4C.mjs} +2 -2
  24. package/dist/{dependency-state-DsT7aKeo.mjs → dependency-state-B6cMXZab.mjs} +2 -2
  25. package/dist/{deps-D9IcKqXS.mjs → deps-urbmfXig.mjs} +3 -3
  26. package/dist/{detached-entry-DJHoca49.mjs → detached-entry-CiTEgMR1.mjs} +1 -1
  27. package/dist/dev-client-CroAIjjj.mjs +43 -0
  28. package/dist/{device-CjuuAJjQ.mjs → device-DZQjF7H5.mjs} +8 -7
  29. package/dist/device-capacity-BHwxNBlu.mjs +136 -0
  30. package/dist/device-host-worker.d.mts +1 -0
  31. package/dist/device-host-worker.mjs +964 -0
  32. package/dist/device-ios-BadmeL2V.mjs +381 -0
  33. package/dist/{device-lease-5c3WrVRm.mjs → device-lease-D-hLqx1b.mjs} +43 -36
  34. package/dist/{device-pool-BiyDyPP-.mjs → device-lease-run-CqjShqWW.mjs} +6 -126
  35. package/dist/device-pool-CUaEWMMm.mjs +125 -0
  36. package/dist/{device-remote-D87zEzaq.mjs → device-remote-D5WVWqOq.mjs} +69 -163
  37. package/dist/{doctor-x9pnU9fq.mjs → doctor-Cimf-gGB.mjs} +241 -103
  38. package/dist/{error-diagnostics-C5HzcwCW.mjs → error-diagnostics-B9L4Ae0x.mjs} +15 -18
  39. package/dist/{exec-DK8KaVHK.mjs → exec-CaErVv7t.mjs} +5 -1
  40. package/dist/{gc-ko6mUAYD.mjs → gc-Bqy4bjEu.mjs} +599 -108
  41. package/dist/{android-cas-iZK3DOCr.mjs → gradle-BsO1MdsH.mjs} +8 -294
  42. package/dist/{guide-6R0VNFqI.mjs → guide-B_uyKTxW.mjs} +2511 -239
  43. package/dist/{guide-status-BZrFPIA_.mjs → guide-status-CjEZMAD4.mjs} +3 -3
  44. package/dist/hosted-client-a-WmqE2L.mjs +197 -0
  45. package/dist/hosted-ios-CIWelIqf.mjs +220 -0
  46. package/dist/hosted-logs-D5g041Q3.mjs +187 -0
  47. package/dist/hosted-macos-BSZyIb3y.mjs +135 -0
  48. package/dist/idle-DYVymG92.mjs +1099 -0
  49. package/dist/idle-shutdown-CTsDnAde.mjs +122 -0
  50. package/dist/in-use-DvBw0Kxo.mjs +130 -0
  51. package/dist/{ios-BwDPrnYQ.mjs → ios-BaInn3sW.mjs} +201 -10
  52. package/dist/ios-Cr1h5gnO.mjs +189 -0
  53. package/dist/{ios-P1f5nm2n.mjs → ios-aq3QoGI3.mjs} +1159 -633
  54. package/dist/{ios-device-BiOsSVzd.mjs → ios-device-Ee7sDXfp.mjs} +1 -1
  55. package/dist/{ios-device-DGglU3E_.mjs → ios-device-FfCN_C8p.mjs} +12 -7
  56. package/dist/ios-state-DS5UpYTH.mjs +48 -0
  57. package/dist/{launch-verify-Deg4tB3Z.mjs → launch-verify-2DBRizjo.mjs} +5 -5
  58. package/dist/logs-CHEVK8zD.mjs +371 -0
  59. package/dist/machines-BIBUdhpj.mjs +265 -0
  60. package/dist/macos-CSYEAFmF.mjs +473 -0
  61. package/dist/macos-run.d.mts +5 -0
  62. package/dist/macos-run.mjs +2 -0
  63. package/dist/maintenance-run.d.mts +4 -0
  64. package/dist/maintenance-run.mjs +254 -0
  65. package/dist/{metro-CcEo8Fl8.mjs → metro-BeK1ZPz1.mjs} +20 -120
  66. package/dist/metro-gateway-BJ-rxQAB.mjs +84 -0
  67. package/dist/{named-ports-Blg8IxOh.mjs → named-ports-Bk_YXEmE.mjs} +6 -59
  68. package/dist/native-run-NaBrRFtQ.mjs +147 -0
  69. package/dist/{native-runtime-DjBHRg5m.mjs → native-runtime-DBzRnEKS.mjs} +9 -5
  70. package/dist/{ndjson-CDY9IkVC.mjs → ndjson-PclOIwVY.mjs} +2 -2
  71. package/dist/offload-worker.d.mts +122 -0
  72. package/dist/offload-worker.mjs +606 -0
  73. package/dist/{ownership-DyYDF5ww.mjs → ownership-DiA16AsN.mjs} +3 -2
  74. package/dist/ownership-hCkPzGmr.mjs +571 -0
  75. package/dist/{page-BHUzTDFt.mjs → page-QF_Ke10s.mjs} +7 -2
  76. package/dist/{ports-BguS83ex.mjs → ports-R2k4Knz3.mjs} +3 -3
  77. package/dist/prebuild-D2fsca_Z.mjs +213 -0
  78. package/dist/preview-DhVbvPAZ.mjs +318 -0
  79. package/dist/process-identity-BmRm1qV0.mjs +12 -0
  80. package/dist/{project-CWlvEaeN.mjs → project-Du91Ilvc.mjs} +74 -19
  81. package/dist/pull-request-pxnDCQzn.mjs +322 -0
  82. package/dist/pull-requests.d.mts +120 -0
  83. package/dist/pull-requests.mjs +2 -0
  84. package/dist/recordings-BIXOzVnr.mjs +37 -0
  85. package/dist/{reload-BiniwsSZ.mjs → reload-rM9jV1fz.mjs} +109 -24
  86. package/dist/{remote-cache-CcR6o6lI.mjs → remote-cache-C8-V13XN.mjs} +5 -5
  87. package/dist/run-f4vI6EnK.mjs +119 -0
  88. package/dist/{server-bare-DGfgyJ5J.mjs → server-bare-CpPGmnmO.mjs} +33 -15
  89. package/dist/server-expo-CVqO2c35.mjs +2 -0
  90. package/dist/{server-expo-BVuwQ65v.mjs → server-expo-MC0rHlOC.mjs} +8 -12
  91. package/dist/settings-BBpMcDbD.mjs +25 -0
  92. package/dist/{settings-B-fsC-Om.mjs → settings-ZkDzkzvB.mjs} +22 -10
  93. package/dist/settings-oTSkkNrM.mjs +1439 -0
  94. package/dist/settings.schema.json +845 -97
  95. package/dist/{simslim-DrDN4WuV.mjs → simslim-B8-7AoTI.mjs} +8 -132
  96. package/dist/{slot-launch-D5t8EiMf.mjs → slot-launch-B8VrHxn1.mjs} +11 -8
  97. package/dist/{spawn-claims-Drw_o-Fb.mjs → spawn-claims-D0XfSe8u.mjs} +1 -1
  98. package/dist/spawn-entry-jw19m8Nl.mjs +17 -0
  99. package/dist/stage-CzaiwFsI.mjs +143 -0
  100. package/dist/start-CX8Ig-U2.mjs +2 -0
  101. package/dist/{start-s4RXp1wy.mjs → start-ClDfwXa4.mjs} +116 -65
  102. package/dist/state-3DwSQIBK.mjs +41 -0
  103. package/dist/state-B4PQFXMW.d.mts +12 -0
  104. package/dist/{state-Dk9RVXI7.mjs → state-C1jB7Q8q.mjs} +70 -8
  105. package/dist/{state-DHqvsbqC.mjs → state-DcW6vOd_.mjs} +7 -4
  106. package/dist/stats-CEZ_i5je.mjs +77 -0
  107. package/dist/{status-BgAuxESg.mjs → status-BuvBFeII.mjs} +118 -20
  108. package/dist/{status-BsPAnfOI.mjs → status-Cs7VLg9D.mjs} +542 -283
  109. package/dist/status-DlKvVJBE.mjs +49 -0
  110. package/dist/stdout-reader-C8yjre1x.mjs +23 -0
  111. package/dist/stim-desktop-Cnz8CPnl.mjs +63 -0
  112. package/dist/stim-footprint.swift +32 -0
  113. package/dist/{stim-installations-CINXy_su.mjs → stim-installations-QMEI32v1.mjs} +1 -1
  114. package/dist/stop-B0Yxtmiy.mjs +48 -0
  115. package/dist/{stop-BzreOWJp.mjs → stop-Bffozsac.mjs} +83 -16
  116. package/dist/{stop-BWIF_6BK.mjs → stop-Dt_dM16A.mjs} +2 -2
  117. package/dist/stop-cause-CidxIqup.mjs +97 -0
  118. package/dist/supervisor-run.d.mts +43 -11
  119. package/dist/supervisor-run.mjs +363 -24
  120. package/dist/support-CAP8qDUF.mjs +316 -0
  121. package/dist/support-D4aYJniO.mjs +201 -0
  122. package/dist/teardown-CL6vDs2Y.mjs +727 -0
  123. package/dist/{xcode-Cp5KvK9x.mjs → toolchain-DkUflduf.mjs} +364 -14
  124. package/dist/trigger-Bemu8ytw.mjs +65 -0
  125. package/dist/trigger-CXts6qt1.mjs +2 -0
  126. package/dist/warm-progress-CpGv3Wb6.mjs +732 -0
  127. package/dist/{web-BsQs1WlO.mjs → web-DWUaMp8P.mjs} +37 -21
  128. package/dist/web-run.mjs +310 -13
  129. package/dist/workspace-process-lock-BL7Q0HCO.mjs +57 -0
  130. package/dist/workspace-state-B8-aJ1_5.mjs +371 -0
  131. package/dist/workspaces-BV4pdHFz.mjs +306 -0
  132. package/dist/{worktree-UrQWXSeb.mjs → worktree-K-xj9Db0.mjs} +625 -256
  133. package/dist/worktree-jnG8Iph5.mjs +2 -0
  134. package/package.json +10 -5
  135. package/shim/bundle-response.cjs +28 -12
  136. package/dist/activity-CYVDcrt3.mjs +0 -356
  137. package/dist/budget-CGDkhvv_.mjs +0 -1745
  138. package/dist/build-progress-DxKpwnaS.mjs +0 -247
  139. package/dist/idle-DXtx3RbX.mjs +0 -191
  140. package/dist/in-use-DlqBDKqY.mjs +0 -249
  141. package/dist/logs-Civ4gbBH.mjs +0 -486
  142. package/dist/merge-state-ytFQCeh4.mjs +0 -262
  143. package/dist/server-expo-DIHDhvGg.mjs +0 -2
  144. package/dist/settings-D61iNOsB.mjs +0 -629
  145. package/dist/start-Cetfvy8l.mjs +0 -2
  146. package/dist/stats-CFpFGlJV.mjs +0 -62
  147. package/dist/stats-CX1Z8Tca.mjs +0 -368
  148. package/dist/stim-desktop-CXt8-Z3J.mjs +0 -40
  149. package/dist/stop-cause-hjGBOZTG.mjs +0 -1231
  150. package/dist/worktree-BVrHsYZG.mjs +0 -752
  151. package/dist/worktree-CHWWvm5v.mjs +0 -2
  152. package/dist/{metro-store-DzeWkfqW.mjs → metro-store-CDDZHtPl.mjs} +1 -1
@@ -239,6 +239,7 @@
239
239
  "key": "ios.deviceType",
240
240
  "kind": "string",
241
241
  "scopes": [
242
+ "machine",
242
243
  "workspace",
243
244
  "repo",
244
245
  "committed"
@@ -252,6 +253,7 @@
252
253
  "key": "ios.runtime",
253
254
  "kind": "string",
254
255
  "scopes": [
256
+ "machine",
255
257
  "workspace",
256
258
  "repo",
257
259
  "committed"
@@ -273,15 +275,12 @@
273
275
  }
274
276
  },
275
277
  "remote": {
276
- "description": "Default remote backend for iOS",
278
+ "description": "Default iOS remote target: eas, proxy, or an approved Mac in hosting.machines; auto is not available yet",
277
279
  "type": "string",
278
- "enum": [
279
- "proxy",
280
- "eas"
281
- ],
280
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9.-]*(?::(?!0+$)(?:[0-5]?[0-9]{1,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$",
282
281
  "x-stim": {
283
282
  "key": "ios.remote",
284
- "kind": "choice",
283
+ "kind": "string",
285
284
  "scopes": [
286
285
  "workspace",
287
286
  "repo",
@@ -357,6 +356,7 @@
357
356
  "key": "android.systemImage",
358
357
  "kind": "string",
359
358
  "scopes": [
359
+ "machine",
360
360
  "workspace",
361
361
  "repo",
362
362
  "committed"
@@ -486,14 +486,15 @@
486
486
  "type": "object",
487
487
  "properties": {
488
488
  "tunnel": {
489
- "description": "How a remote device reaches Metro",
489
+ "description": "How a remote device reaches Metro; tailscale is tailnet-only and requires explicit selection",
490
490
  "type": "string",
491
491
  "enum": [
492
492
  "auto",
493
493
  "off",
494
494
  "expo",
495
495
  "cloudflared",
496
- "ngrok"
496
+ "ngrok",
497
+ "tailscale"
497
498
  ],
498
499
  "default": "auto",
499
500
  "x-stim": {
@@ -532,6 +533,22 @@
532
533
  ]
533
534
  }
534
535
  },
536
+ "port": {
537
+ "description": "This workspace's Metro port, reserved instead of one Stim picks",
538
+ "type": "integer",
539
+ "minimum": 1024,
540
+ "maximum": 65535,
541
+ "x-stim": {
542
+ "key": "metro.port",
543
+ "kind": "number",
544
+ "scopes": [
545
+ "workspace",
546
+ "repo",
547
+ "committed"
548
+ ],
549
+ "env": "STIM_METRO_PORT"
550
+ }
551
+ },
535
552
  "warmupUrl": {
536
553
  "type": "object",
537
554
  "properties": {
@@ -582,6 +599,105 @@
582
599
  },
583
600
  "additionalProperties": false
584
601
  },
602
+ "devices": {
603
+ "type": "object",
604
+ "properties": {
605
+ "idleShutdownMinutes": {
606
+ "description": "Minutes an owned simulator or emulator stays idle before the workspace supervisor shuts it down; 0 never",
607
+ "type": "integer",
608
+ "minimum": 0,
609
+ "default": 0,
610
+ "x-stim": {
611
+ "key": "devices.idleShutdownMinutes",
612
+ "kind": "number",
613
+ "scopes": [
614
+ "machine",
615
+ "workspace",
616
+ "repo",
617
+ "committed"
618
+ ]
619
+ }
620
+ }
621
+ },
622
+ "additionalProperties": false
623
+ },
624
+ "macos": {
625
+ "type": "object",
626
+ "properties": {
627
+ "product": {
628
+ "description": "The Swift Package executable product stim macos builds in Debug.",
629
+ "type": "string",
630
+ "pattern": "^[A-Za-z0-9_-]+$",
631
+ "x-stim": {
632
+ "key": "macos.product",
633
+ "kind": "string",
634
+ "scopes": [
635
+ "workspace",
636
+ "repo",
637
+ "committed"
638
+ ]
639
+ }
640
+ },
641
+ "infoPlist": {
642
+ "description": "Development Info.plist relative to the Swift Package directory.",
643
+ "type": "string",
644
+ "x-stim": {
645
+ "key": "macos.infoPlist",
646
+ "kind": "path",
647
+ "scopes": [
648
+ "workspace",
649
+ "repo",
650
+ "committed"
651
+ ],
652
+ "relative": true
653
+ }
654
+ },
655
+ "arguments": {
656
+ "description": "Arguments passed directly to the owned macOS development executable.",
657
+ "type": "array",
658
+ "items": {
659
+ "type": "string"
660
+ },
661
+ "x-stim": {
662
+ "key": "macos.arguments",
663
+ "kind": "strings",
664
+ "scopes": [
665
+ "workspace",
666
+ "repo",
667
+ "committed"
668
+ ]
669
+ }
670
+ },
671
+ "assetCatalog": {
672
+ "description": "Optional .xcassets directory relative to the Swift Package directory.",
673
+ "type": "string",
674
+ "x-stim": {
675
+ "key": "macos.assetCatalog",
676
+ "kind": "path",
677
+ "scopes": [
678
+ "workspace",
679
+ "repo",
680
+ "committed"
681
+ ],
682
+ "relative": true
683
+ }
684
+ },
685
+ "resources": {
686
+ "description": "Resource destinations under Contents/Resources mapped to sources relative to the Swift Package directory.",
687
+ "type": "object",
688
+ "x-stim": {
689
+ "key": "macos.resources",
690
+ "kind": "object",
691
+ "scopes": [
692
+ "workspace",
693
+ "repo",
694
+ "committed"
695
+ ]
696
+ }
697
+ }
698
+ },
699
+ "additionalProperties": false
700
+ },
585
701
  "web": {
586
702
  "type": "object",
587
703
  "properties": {
@@ -634,6 +750,28 @@
634
750
  },
635
751
  "additionalProperties": false
636
752
  },
753
+ "archive": {
754
+ "type": "object",
755
+ "properties": {
756
+ "enabled": {
757
+ "description": "Keep workspace history on removal; false under STIM_HOME unless explicitly enabled",
758
+ "type": "boolean",
759
+ "default": true,
760
+ "x-stim": {
761
+ "key": "archive.enabled",
762
+ "kind": "boolean",
763
+ "scopes": [
764
+ "machine",
765
+ "workspace",
766
+ "repo",
767
+ "committed"
768
+ ],
769
+ "env": "STIM_ARCHIVE_ENABLED"
770
+ }
771
+ }
772
+ },
773
+ "additionalProperties": false
774
+ },
637
775
  "worktree": {
638
776
  "type": "object",
639
777
  "properties": {
@@ -934,9 +1072,57 @@
934
1072
  },
935
1073
  "additionalProperties": false
936
1074
  },
1075
+ "ios": {
1076
+ "type": "object",
1077
+ "properties": {
1078
+ "deviceType": {
1079
+ "description": "Simulator model for owned simulators",
1080
+ "type": "string",
1081
+ "x-stim": {
1082
+ "key": "ios.deviceType",
1083
+ "kind": "string",
1084
+ "scopes": [
1085
+ "machine",
1086
+ "workspace",
1087
+ "repo",
1088
+ "committed"
1089
+ ]
1090
+ }
1091
+ },
1092
+ "runtime": {
1093
+ "description": "iOS runtime owned simulators are created on",
1094
+ "type": "string",
1095
+ "x-stim": {
1096
+ "key": "ios.runtime",
1097
+ "kind": "string",
1098
+ "scopes": [
1099
+ "machine",
1100
+ "workspace",
1101
+ "repo",
1102
+ "committed"
1103
+ ]
1104
+ }
1105
+ }
1106
+ },
1107
+ "additionalProperties": false
1108
+ },
937
1109
  "android": {
938
1110
  "type": "object",
939
1111
  "properties": {
1112
+ "systemImage": {
1113
+ "description": "SDK system image for owned AVDs",
1114
+ "type": "string",
1115
+ "x-stim": {
1116
+ "key": "android.systemImage",
1117
+ "kind": "string",
1118
+ "scopes": [
1119
+ "machine",
1120
+ "workspace",
1121
+ "repo",
1122
+ "committed"
1123
+ ]
1124
+ }
1125
+ },
940
1126
  "deviceProfile": {
941
1127
  "description": "avdmanager hardware profile id for new owned AVDs",
942
1128
  "type": "string",
@@ -955,130 +1141,579 @@
955
1141
  },
956
1142
  "additionalProperties": false
957
1143
  },
958
- "iosSimulatorApp": {
959
- "description": "App that displays an owned iOS simulator; stim-desktop by default when Stim Desktop is installed",
960
- "type": "string",
961
- "enum": [
962
- "xcode",
963
- "siniulator",
964
- "stim-desktop"
965
- ],
966
- "default": "xcode",
967
- "x-stim": {
968
- "key": "iosSimulatorApp",
969
- "kind": "choice",
970
- "scopes": [
971
- "machine"
972
- ]
973
- }
974
- },
975
- "androidEmulatorApp": {
976
- "description": "App that displays an owned Android emulator Stim boots on macOS; stim-desktop by default when Stim Desktop is installed",
977
- "type": "string",
978
- "enum": [
979
- "emulator",
980
- "stim-desktop"
981
- ],
982
- "default": "emulator",
983
- "x-stim": {
984
- "key": "androidEmulatorApp",
985
- "kind": "choice",
986
- "scopes": [
987
- "machine"
988
- ]
989
- }
990
- },
991
- "concurrency": {
1144
+ "devices": {
992
1145
  "type": "object",
993
1146
  "properties": {
994
- "maxBuilds": {
995
- "description": "Concurrent native builds; 0 means no limit",
1147
+ "idleShutdownMinutes": {
1148
+ "description": "Minutes an owned simulator or emulator stays idle before the workspace supervisor shuts it down; 0 never",
996
1149
  "type": "integer",
997
1150
  "minimum": 0,
998
1151
  "default": 0,
999
1152
  "x-stim": {
1000
- "key": "concurrency.maxBuilds",
1153
+ "key": "devices.idleShutdownMinutes",
1001
1154
  "kind": "number",
1002
1155
  "scopes": [
1003
- "machine"
1004
- ],
1005
- "env": "STIM_MAX_BUILDS"
1156
+ "machine",
1157
+ "workspace",
1158
+ "repo",
1159
+ "committed"
1160
+ ]
1006
1161
  }
1007
- },
1008
- "maxDevices": {
1009
- "description": "Booted owned devices; 0 means no limit",
1010
- "type": "integer",
1011
- "minimum": 0,
1012
- "default": 0,
1162
+ }
1163
+ },
1164
+ "additionalProperties": false
1165
+ },
1166
+ "recording": {
1167
+ "type": "object",
1168
+ "properties": {
1169
+ "enabled": {
1170
+ "description": "Let stim-server record device screens for replay; false stops it and deletes the recordings",
1171
+ "type": "boolean",
1172
+ "default": true,
1013
1173
  "x-stim": {
1014
- "key": "concurrency.maxDevices",
1015
- "kind": "number",
1174
+ "key": "recording.enabled",
1175
+ "kind": "boolean",
1016
1176
  "scopes": [
1017
- "machine"
1177
+ "machine",
1178
+ "workspace",
1179
+ "repo"
1018
1180
  ],
1019
- "env": "STIM_MAX_DEVICES"
1181
+ "env": "STIM_RECORDING"
1020
1182
  }
1021
1183
  }
1022
1184
  },
1023
1185
  "additionalProperties": false
1024
1186
  },
1025
- "budget": {
1187
+ "archive": {
1026
1188
  "type": "object",
1027
1189
  "properties": {
1028
- "minFreeDiskGb": {
1029
- "description": "Free disk, in GB, ios, android and start reclaim toward; 0 reclaims only below the hard floor",
1030
- "type": "number",
1031
- "minimum": 0,
1032
- "default": 20,
1190
+ "enabled": {
1191
+ "description": "Keep workspace history on removal; false under STIM_HOME unless explicitly enabled",
1192
+ "type": "boolean",
1193
+ "default": true,
1033
1194
  "x-stim": {
1034
- "key": "budget.minFreeDiskGb",
1035
- "kind": "number",
1195
+ "key": "archive.enabled",
1196
+ "kind": "boolean",
1036
1197
  "scopes": [
1037
- "machine"
1198
+ "machine",
1199
+ "workspace",
1200
+ "repo",
1201
+ "committed"
1038
1202
  ],
1039
- "env": "STIM_BUDGET_MIN_FREE_DISK_GB"
1203
+ "env": "STIM_ARCHIVE_ENABLED"
1040
1204
  }
1041
1205
  },
1042
- "hardFloorDiskGb": {
1043
- "description": "Free disk, in GB, below which ios, android and start refuse with STIM_LOW_DISK; 0 never refuses",
1044
- "type": "number",
1206
+ "maxAgeDays": {
1207
+ "description": "Days to keep archived workspace records; 0 keeps nothing",
1208
+ "type": "integer",
1045
1209
  "minimum": 0,
1046
- "default": 5,
1210
+ "default": 30,
1047
1211
  "x-stim": {
1048
- "key": "budget.hardFloorDiskGb",
1212
+ "key": "archive.maxAgeDays",
1049
1213
  "kind": "number",
1050
1214
  "scopes": [
1051
1215
  "machine"
1052
1216
  ],
1053
- "env": "STIM_BUDGET_HARD_FLOOR_DISK_GB"
1217
+ "env": "STIM_ARCHIVE_MAX_AGE_DAYS"
1054
1218
  }
1055
1219
  },
1056
- "maxCommittedMemoryGb": {
1057
- "description": "Estimated memory, in GB, of live environments before idle ones are reclaimed; unset is 60% of RAM, 0 is off",
1058
- "type": "number",
1220
+ "maxCount": {
1221
+ "description": "Archived workspace count; oldest records go first, 0 keeps nothing",
1222
+ "type": "integer",
1059
1223
  "minimum": 0,
1224
+ "default": 200,
1060
1225
  "x-stim": {
1061
- "key": "budget.maxCommittedMemoryGb",
1226
+ "key": "archive.maxCount",
1062
1227
  "kind": "number",
1063
1228
  "scopes": [
1064
1229
  "machine"
1065
1230
  ],
1066
- "env": "STIM_BUDGET_MAX_COMMITTED_MEMORY_GB"
1231
+ "env": "STIM_ARCHIVE_MAX_COUNT"
1067
1232
  }
1068
1233
  },
1069
- "maxLiveWorkspaces": {
1070
- "description": "Live workspaces before idle ones are reclaimed; unset or 0 means no limit",
1071
- "type": "integer",
1234
+ "maxTotalGb": {
1235
+ "description": "Total archived bytes in binary GB; 0 keeps no artifacts",
1236
+ "type": "number",
1072
1237
  "minimum": 0,
1238
+ "default": 5,
1073
1239
  "x-stim": {
1074
- "key": "budget.maxLiveWorkspaces",
1240
+ "key": "archive.maxTotalGb",
1075
1241
  "kind": "number",
1076
1242
  "scopes": [
1077
1243
  "machine"
1078
1244
  ],
1079
- "env": "STIM_BUDGET_MAX_LIVE_WORKSPACES"
1245
+ "env": "STIM_ARCHIVE_MAX_TOTAL_GB"
1080
1246
  }
1081
- }
1247
+ },
1248
+ "logs": {
1249
+ "type": "object",
1250
+ "properties": {
1251
+ "maxAgeDays": {
1252
+ "description": "Days to keep archived logs; 0 keeps none",
1253
+ "type": "integer",
1254
+ "minimum": 0,
1255
+ "default": 14,
1256
+ "x-stim": {
1257
+ "key": "archive.logs.maxAgeDays",
1258
+ "kind": "number",
1259
+ "scopes": [
1260
+ "machine"
1261
+ ],
1262
+ "env": "STIM_ARCHIVE_LOGS_MAX_AGE_DAYS"
1263
+ }
1264
+ },
1265
+ "maxMbPerWorkspace": {
1266
+ "description": "Archived logs per workspace in binary MB; 0 keeps none",
1267
+ "type": "number",
1268
+ "minimum": 0,
1269
+ "default": 100,
1270
+ "x-stim": {
1271
+ "key": "archive.logs.maxMbPerWorkspace",
1272
+ "kind": "number",
1273
+ "scopes": [
1274
+ "machine"
1275
+ ],
1276
+ "env": "STIM_ARCHIVE_LOGS_MAX_MB_PER_WORKSPACE"
1277
+ }
1278
+ }
1279
+ },
1280
+ "additionalProperties": false
1281
+ },
1282
+ "recordings": {
1283
+ "type": "object",
1284
+ "properties": {
1285
+ "maxAgeDays": {
1286
+ "description": "Days to keep archived recordings; 0 keeps none",
1287
+ "type": "integer",
1288
+ "minimum": 0,
1289
+ "default": 3,
1290
+ "x-stim": {
1291
+ "key": "archive.recordings.maxAgeDays",
1292
+ "kind": "number",
1293
+ "scopes": [
1294
+ "machine"
1295
+ ],
1296
+ "env": "STIM_ARCHIVE_RECORDINGS_MAX_AGE_DAYS"
1297
+ }
1298
+ },
1299
+ "maxTotalGb": {
1300
+ "description": "Archived recordings in binary GB; 0 keeps none",
1301
+ "type": "number",
1302
+ "minimum": 0,
1303
+ "default": 2,
1304
+ "x-stim": {
1305
+ "key": "archive.recordings.maxTotalGb",
1306
+ "kind": "number",
1307
+ "scopes": [
1308
+ "machine"
1309
+ ],
1310
+ "env": "STIM_ARCHIVE_RECORDINGS_MAX_TOTAL_GB"
1311
+ }
1312
+ }
1313
+ },
1314
+ "additionalProperties": false
1315
+ },
1316
+ "agentActions": {
1317
+ "type": "object",
1318
+ "properties": {
1319
+ "maxAgeDays": {
1320
+ "description": "Days to keep archived agent-device sessions; 0 keeps none",
1321
+ "type": "integer",
1322
+ "minimum": 0,
1323
+ "default": 7,
1324
+ "x-stim": {
1325
+ "key": "archive.agentActions.maxAgeDays",
1326
+ "kind": "number",
1327
+ "scopes": [
1328
+ "machine"
1329
+ ],
1330
+ "env": "STIM_ARCHIVE_AGENT_ACTIONS_MAX_AGE_DAYS"
1331
+ }
1332
+ }
1333
+ },
1334
+ "additionalProperties": false
1335
+ }
1336
+ },
1337
+ "additionalProperties": false
1338
+ },
1339
+ "iosSimulatorApp": {
1340
+ "description": "App that displays an owned iOS simulator; stim-desktop by default when Stim Desktop is installed",
1341
+ "type": "string",
1342
+ "enum": [
1343
+ "xcode",
1344
+ "siniulator",
1345
+ "stim-desktop"
1346
+ ],
1347
+ "default": "xcode",
1348
+ "x-stim": {
1349
+ "key": "iosSimulatorApp",
1350
+ "kind": "choice",
1351
+ "scopes": [
1352
+ "machine"
1353
+ ]
1354
+ }
1355
+ },
1356
+ "androidEmulatorApp": {
1357
+ "description": "App that displays an owned Android emulator Stim boots on macOS; stim-desktop by default when Stim Desktop is installed",
1358
+ "type": "string",
1359
+ "enum": [
1360
+ "emulator",
1361
+ "stim-desktop"
1362
+ ],
1363
+ "default": "emulator",
1364
+ "x-stim": {
1365
+ "key": "androidEmulatorApp",
1366
+ "kind": "choice",
1367
+ "scopes": [
1368
+ "machine"
1369
+ ]
1370
+ }
1371
+ },
1372
+ "concurrency": {
1373
+ "type": "object",
1374
+ "properties": {
1375
+ "maxBuilds": {
1376
+ "description": "Concurrent native builds; 0 means no limit",
1377
+ "type": "integer",
1378
+ "minimum": 0,
1379
+ "default": 0,
1380
+ "x-stim": {
1381
+ "key": "concurrency.maxBuilds",
1382
+ "kind": "number",
1383
+ "scopes": [
1384
+ "machine"
1385
+ ],
1386
+ "env": "STIM_MAX_BUILDS"
1387
+ }
1388
+ },
1389
+ "maxDevices": {
1390
+ "description": "Booted owned devices; 0 means no limit",
1391
+ "type": "integer",
1392
+ "minimum": 0,
1393
+ "default": 0,
1394
+ "x-stim": {
1395
+ "key": "concurrency.maxDevices",
1396
+ "kind": "number",
1397
+ "scopes": [
1398
+ "machine"
1399
+ ],
1400
+ "env": "STIM_MAX_DEVICES"
1401
+ }
1402
+ }
1403
+ },
1404
+ "additionalProperties": false
1405
+ },
1406
+ "budget": {
1407
+ "type": "object",
1408
+ "properties": {
1409
+ "minFreeDiskGb": {
1410
+ "description": "Free disk, in GB, ios, android and start reclaim toward; 0 reclaims only below the hard floor",
1411
+ "type": "number",
1412
+ "minimum": 0,
1413
+ "default": 20,
1414
+ "x-stim": {
1415
+ "key": "budget.minFreeDiskGb",
1416
+ "kind": "number",
1417
+ "scopes": [
1418
+ "machine"
1419
+ ],
1420
+ "env": "STIM_BUDGET_MIN_FREE_DISK_GB"
1421
+ }
1422
+ },
1423
+ "hardFloorDiskGb": {
1424
+ "description": "Free disk, in GB, below which ios, android and start refuse with STIM_LOW_DISK; 0 never refuses",
1425
+ "type": "number",
1426
+ "minimum": 0,
1427
+ "default": 5,
1428
+ "x-stim": {
1429
+ "key": "budget.hardFloorDiskGb",
1430
+ "kind": "number",
1431
+ "scopes": [
1432
+ "machine"
1433
+ ],
1434
+ "env": "STIM_BUDGET_HARD_FLOOR_DISK_GB"
1435
+ }
1436
+ },
1437
+ "maxCommittedMemoryGb": {
1438
+ "description": "Estimated memory, in GB, of live environments before idle ones are reclaimed; unset is 60% of RAM, 0 is off",
1439
+ "type": "number",
1440
+ "minimum": 0,
1441
+ "x-stim": {
1442
+ "key": "budget.maxCommittedMemoryGb",
1443
+ "kind": "number",
1444
+ "scopes": [
1445
+ "machine"
1446
+ ],
1447
+ "env": "STIM_BUDGET_MAX_COMMITTED_MEMORY_GB"
1448
+ }
1449
+ },
1450
+ "maxLiveWorkspaces": {
1451
+ "description": "Live workspaces before idle ones are reclaimed; unset or 0 means no limit",
1452
+ "type": "integer",
1453
+ "minimum": 0,
1454
+ "x-stim": {
1455
+ "key": "budget.maxLiveWorkspaces",
1456
+ "kind": "number",
1457
+ "scopes": [
1458
+ "machine"
1459
+ ],
1460
+ "env": "STIM_BUDGET_MAX_LIVE_WORKSPACES"
1461
+ }
1462
+ }
1463
+ },
1464
+ "additionalProperties": false
1465
+ },
1466
+ "maintenance": {
1467
+ "type": "object",
1468
+ "properties": {
1469
+ "mode": {
1470
+ "description": "Automatic resource maintenance. report measures, plans and logs what it would do and never deletes or stops anything; off disables it. Off under STIM_HOME or CI unless STIM_MAINTENANCE is set",
1471
+ "type": "string",
1472
+ "enum": [
1473
+ "off",
1474
+ "report"
1475
+ ],
1476
+ "default": "report",
1477
+ "x-stim": {
1478
+ "key": "maintenance.mode",
1479
+ "kind": "choice",
1480
+ "scopes": [
1481
+ "machine"
1482
+ ],
1483
+ "env": "STIM_MAINTENANCE"
1484
+ }
1485
+ },
1486
+ "pressureCheckMinutes": {
1487
+ "description": "Disk and memory check interval in minutes",
1488
+ "type": "integer",
1489
+ "minimum": 1,
1490
+ "default": 1,
1491
+ "x-stim": {
1492
+ "key": "maintenance.pressureCheckMinutes",
1493
+ "kind": "number",
1494
+ "scopes": [
1495
+ "machine"
1496
+ ],
1497
+ "env": "STIM_MAINTENANCE_PRESSURE_CHECK_MINUTES"
1498
+ }
1499
+ },
1500
+ "sizeCheckMinutes": {
1501
+ "description": "Directory size check interval in minutes",
1502
+ "type": "integer",
1503
+ "minimum": 1,
1504
+ "default": 60,
1505
+ "x-stim": {
1506
+ "key": "maintenance.sizeCheckMinutes",
1507
+ "kind": "number",
1508
+ "scopes": [
1509
+ "machine"
1510
+ ],
1511
+ "env": "STIM_MAINTENANCE_SIZE_CHECK_MINUTES"
1512
+ }
1513
+ },
1514
+ "maxLoadPerCore": {
1515
+ "description": "Defer size scans above this one-minute load per CPU",
1516
+ "type": "number",
1517
+ "exclusiveMinimum": 0,
1518
+ "default": 4,
1519
+ "x-stim": {
1520
+ "key": "maintenance.maxLoadPerCore",
1521
+ "kind": "number",
1522
+ "scopes": [
1523
+ "machine"
1524
+ ],
1525
+ "env": "STIM_MAINTENANCE_MAX_LOAD_PER_CORE"
1526
+ }
1527
+ },
1528
+ "logMaxMb": {
1529
+ "description": "Machine maintenance log rotation size in MiB",
1530
+ "type": "number",
1531
+ "exclusiveMinimum": 0,
1532
+ "default": 1,
1533
+ "x-stim": {
1534
+ "key": "maintenance.logMaxMb",
1535
+ "kind": "number",
1536
+ "scopes": [
1537
+ "machine"
1538
+ ],
1539
+ "env": "STIM_MAINTENANCE_LOG_MAX_MB"
1540
+ }
1541
+ },
1542
+ "logRetentionDays": {
1543
+ "description": "Retention of the rotated machine maintenance log in days",
1544
+ "type": "integer",
1545
+ "minimum": 1,
1546
+ "default": 30,
1547
+ "x-stim": {
1548
+ "key": "maintenance.logRetentionDays",
1549
+ "kind": "number",
1550
+ "scopes": [
1551
+ "machine"
1552
+ ],
1553
+ "env": "STIM_MAINTENANCE_LOG_RETENTION_DAYS"
1554
+ }
1555
+ },
1556
+ "logChecks": {
1557
+ "description": "Write debug check records and routine skips",
1558
+ "type": "boolean",
1559
+ "default": false,
1560
+ "x-stim": {
1561
+ "key": "maintenance.logChecks",
1562
+ "kind": "boolean",
1563
+ "scopes": [
1564
+ "machine"
1565
+ ],
1566
+ "env": "STIM_MAINTENANCE_LOG_CHECKS"
1567
+ }
1568
+ },
1569
+ "memoryPressureLevel": {
1570
+ "description": "Lowest macOS memory pressure level considered; off disables memory pressure reporting",
1571
+ "type": "string",
1572
+ "enum": [
1573
+ "warning",
1574
+ "critical",
1575
+ "off"
1576
+ ],
1577
+ "default": "warning",
1578
+ "x-stim": {
1579
+ "key": "maintenance.memoryPressureLevel",
1580
+ "kind": "choice",
1581
+ "scopes": [
1582
+ "machine"
1583
+ ],
1584
+ "env": "STIM_MAINTENANCE_MEMORY_PRESSURE_LEVEL"
1585
+ }
1586
+ },
1587
+ "memoryWarningMinutes": {
1588
+ "description": "Consecutive warning minutes before memory counts as pressure",
1589
+ "type": "integer",
1590
+ "minimum": 0,
1591
+ "default": 10,
1592
+ "x-stim": {
1593
+ "key": "maintenance.memoryWarningMinutes",
1594
+ "kind": "number",
1595
+ "scopes": [
1596
+ "machine"
1597
+ ],
1598
+ "env": "STIM_MAINTENANCE_MEMORY_WARNING_MINUTES"
1599
+ }
1600
+ },
1601
+ "minAvailableMemoryGb": {
1602
+ "description": "Available-memory threshold in GiB; unset is 10% of RAM",
1603
+ "type": "number",
1604
+ "minimum": 0,
1605
+ "x-stim": {
1606
+ "key": "maintenance.minAvailableMemoryGb",
1607
+ "kind": "number",
1608
+ "scopes": [
1609
+ "machine"
1610
+ ],
1611
+ "env": "STIM_MAINTENANCE_MIN_AVAILABLE_MEMORY_GB"
1612
+ }
1613
+ },
1614
+ "capTargetPercent": {
1615
+ "description": "Plan toward this percentage of each size cap",
1616
+ "type": "integer",
1617
+ "minimum": 10,
1618
+ "maximum": 100,
1619
+ "default": 80,
1620
+ "x-stim": {
1621
+ "key": "maintenance.capTargetPercent",
1622
+ "kind": "number",
1623
+ "scopes": [
1624
+ "machine"
1625
+ ],
1626
+ "env": "STIM_MAINTENANCE_CAP_TARGET_PERCENT"
1627
+ }
1628
+ },
1629
+ "workspaceOutputsMaxGb": {
1630
+ "description": "Workspace build-output cap in GiB; 0 means no cap",
1631
+ "type": "number",
1632
+ "minimum": 0,
1633
+ "default": 20,
1634
+ "x-stim": {
1635
+ "key": "maintenance.workspaceOutputsMaxGb",
1636
+ "kind": "number",
1637
+ "scopes": [
1638
+ "machine"
1639
+ ],
1640
+ "env": "STIM_MAINTENANCE_WORKSPACE_OUTPUTS_MAX_GB"
1641
+ }
1642
+ }
1643
+ },
1644
+ "additionalProperties": false
1645
+ },
1646
+ "caches": {
1647
+ "type": "object",
1648
+ "properties": {
1649
+ "buildCacheMaxGb": {
1650
+ "description": "Shared native build-cache cap in GiB; 0 means no cap",
1651
+ "type": "number",
1652
+ "minimum": 0,
1653
+ "default": 10,
1654
+ "x-stim": {
1655
+ "key": "caches.buildCacheMaxGb",
1656
+ "kind": "number",
1657
+ "scopes": [
1658
+ "machine"
1659
+ ],
1660
+ "env": "STIM_CACHES_BUILD_CACHE_MAX_GB"
1661
+ }
1662
+ },
1663
+ "metroCacheMaxGb": {
1664
+ "description": "Combined Metro transform-cache cap in GiB; 0 means no cap",
1665
+ "type": "number",
1666
+ "minimum": 0,
1667
+ "default": 5,
1668
+ "x-stim": {
1669
+ "key": "caches.metroCacheMaxGb",
1670
+ "kind": "number",
1671
+ "scopes": [
1672
+ "machine"
1673
+ ],
1674
+ "env": "STIM_CACHES_METRO_CACHE_MAX_GB"
1675
+ }
1676
+ },
1677
+ "swiftCompilationCacheMaxGb": {
1678
+ "description": "Swift compilation-cache cap in GiB; planned emptying is whole; 0 means no cap",
1679
+ "type": "number",
1680
+ "minimum": 0,
1681
+ "default": 15,
1682
+ "x-stim": {
1683
+ "key": "caches.swiftCompilationCacheMaxGb",
1684
+ "kind": "number",
1685
+ "scopes": [
1686
+ "machine"
1687
+ ],
1688
+ "env": "STIM_CACHES_SWIFT_COMPILATION_CACHE_MAX_GB"
1689
+ }
1690
+ },
1691
+ "buildCache": {
1692
+ "description": "Absolute path of the shared build cache",
1693
+ "type": "string",
1694
+ "x-stim": {
1695
+ "key": "caches.buildCache",
1696
+ "kind": "path",
1697
+ "scopes": [
1698
+ "machine"
1699
+ ],
1700
+ "absolute": true,
1701
+ "env": "STIM_BUILD_CACHE"
1702
+ }
1703
+ },
1704
+ "metroCache": {
1705
+ "description": "Absolute parent path of the Metro transform caches",
1706
+ "type": "string",
1707
+ "x-stim": {
1708
+ "key": "caches.metroCache",
1709
+ "kind": "path",
1710
+ "scopes": [
1711
+ "machine"
1712
+ ],
1713
+ "absolute": true,
1714
+ "env": "STIM_METRO_CACHE"
1715
+ }
1716
+ }
1082
1717
  },
1083
1718
  "additionalProperties": false
1084
1719
  },
@@ -1136,33 +1771,146 @@
1136
1771
  },
1137
1772
  "additionalProperties": false
1138
1773
  },
1139
- "caches": {
1774
+ "hosting": {
1140
1775
  "type": "object",
1141
1776
  "properties": {
1142
- "buildCache": {
1143
- "description": "Absolute path of the shared build cache",
1777
+ "machines": {
1778
+ "description": "Tailscale names of the Macs that may host owned simulator sessions for this one, each optionally with :<port> of its tailscale serve route (default 7443); doctor --fix asks for separate device-host approval",
1779
+ "type": "array",
1780
+ "items": {
1781
+ "type": "string"
1782
+ },
1783
+ "x-stim": {
1784
+ "key": "hosting.machines",
1785
+ "kind": "strings",
1786
+ "scopes": [
1787
+ "machine"
1788
+ ]
1789
+ }
1790
+ },
1791
+ "agentDriver": {
1792
+ "description": "Tool this Mac starts so a client's coding agent can drive the macOS apps and iOS simulators it hosts for that client; none starts nothing",
1144
1793
  "type": "string",
1794
+ "enum": [
1795
+ "none",
1796
+ "agent-device"
1797
+ ],
1798
+ "default": "none",
1145
1799
  "x-stim": {
1146
- "key": "caches.buildCache",
1147
- "kind": "path",
1800
+ "key": "hosting.agentDriver",
1801
+ "kind": "choice",
1802
+ "scopes": [
1803
+ "machine"
1804
+ ]
1805
+ }
1806
+ }
1807
+ },
1808
+ "additionalProperties": false
1809
+ },
1810
+ "server": {
1811
+ "type": "object",
1812
+ "properties": {
1813
+ "acceptClientBuilds": {
1814
+ "description": "Whether a Mac approved for builds or device hosting here may update this Mac's stim-server service to that Mac's own stim-server build; releases from npm need no setting",
1815
+ "type": "boolean",
1816
+ "default": false,
1817
+ "x-stim": {
1818
+ "key": "server.acceptClientBuilds",
1819
+ "kind": "boolean",
1820
+ "scopes": [
1821
+ "machine"
1822
+ ]
1823
+ }
1824
+ }
1825
+ },
1826
+ "additionalProperties": false
1827
+ },
1828
+ "offload": {
1829
+ "type": "object",
1830
+ "properties": {
1831
+ "machines": {
1832
+ "description": "Tailscale names of the Macs that may build for this one, each optionally with :<port> of its tailscale serve route (default 7443)",
1833
+ "type": "array",
1834
+ "items": {
1835
+ "type": "string"
1836
+ },
1837
+ "x-stim": {
1838
+ "key": "offload.machines",
1839
+ "kind": "strings",
1840
+ "scopes": [
1841
+ "machine"
1842
+ ]
1843
+ }
1844
+ },
1845
+ "machine": {
1846
+ "description": "Build placement: auto follows offload.mode with local fallback; local always builds here; a name in offload.machines requires that machine without fallback. The ios, android and macos --build-machine flag overrides this setting and its environment override",
1847
+ "type": "string",
1848
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9.-]*(?::(?!0+$)(?:[0-5]?[0-9]{1,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$",
1849
+ "default": "auto",
1850
+ "x-stim": {
1851
+ "key": "offload.machine",
1852
+ "kind": "string",
1148
1853
  "scopes": [
1149
1854
  "machine"
1150
1855
  ],
1151
- "absolute": true,
1152
- "env": "STIM_BUILD_CACHE"
1856
+ "env": "STIM_OFFLOAD_MACHINE"
1153
1857
  }
1154
1858
  },
1155
- "metroCache": {
1156
- "description": "Absolute parent path of the Metro transform caches",
1859
+ "mode": {
1860
+ "description": "When offload.machine is auto, where iOS simulator Debug, Android emulator debug and macOS SwiftPM Debug builds run: auto builds here while this Mac has a free concurrency.maxBuilds slot and its load is under offload.maxLoadPerCore, and otherwise offloads to a less loaded machine in offload.machines; force offloads whenever a machine can take the build; off always builds here",
1157
1861
  "type": "string",
1862
+ "enum": [
1863
+ "auto",
1864
+ "force",
1865
+ "off"
1866
+ ],
1867
+ "default": "auto",
1158
1868
  "x-stim": {
1159
- "key": "caches.metroCache",
1869
+ "key": "offload.mode",
1870
+ "kind": "choice",
1871
+ "scopes": [
1872
+ "machine"
1873
+ ],
1874
+ "env": "STIM_OFFLOAD_MODE"
1875
+ }
1876
+ },
1877
+ "maxLoadPerCore": {
1878
+ "description": "Load per core (5-minute load average divided by the CPU count) at which a Mac counts as saturated: a build machine declines offloaded builds, and auto offload stops preferring this Mac",
1879
+ "type": "number",
1880
+ "minimum": 0.1,
1881
+ "default": 2,
1882
+ "x-stim": {
1883
+ "key": "offload.maxLoadPerCore",
1884
+ "kind": "number",
1885
+ "scopes": [
1886
+ "machine"
1887
+ ]
1888
+ }
1889
+ },
1890
+ "workerRoot": {
1891
+ "description": "Directory where stim-server keeps the checkouts, dependencies and build state of Macs that build here; default $STIM_HOME/build-worker",
1892
+ "type": "string",
1893
+ "x-stim": {
1894
+ "key": "offload.workerRoot",
1160
1895
  "kind": "path",
1161
1896
  "scopes": [
1162
1897
  "machine"
1163
1898
  ],
1164
- "absolute": true,
1165
- "env": "STIM_METRO_CACHE"
1899
+ "absolute": true
1900
+ }
1901
+ },
1902
+ "gradleDaemonIdleMinutes": {
1903
+ "description": "Minutes the Gradle daemon of an offloaded Android build stays warm on this build machine after the build; 0 stops it when the build ends",
1904
+ "type": "integer",
1905
+ "minimum": 0,
1906
+ "maximum": 35791,
1907
+ "default": 30,
1908
+ "x-stim": {
1909
+ "key": "offload.gradleDaemonIdleMinutes",
1910
+ "kind": "number",
1911
+ "scopes": [
1912
+ "machine"
1913
+ ]
1166
1914
  }
1167
1915
  }
1168
1916
  },