stim 1.32.0 → 1.34.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 (173) hide show
  1. package/dist/{acquire-artifact-CI9fIokp.mjs → acquire-artifact-B0SWoVNt.mjs} +2 -2
  2. package/dist/{act-BfChMxcU.mjs → act-7f7wIvCQ.mjs} +22 -22
  3. package/dist/{activity-yjH7Q3zn.mjs → activity-DkS-Ir6V.mjs} +6 -6
  4. package/dist/{agent-device-usage-output-DO412bsG.mjs → agent-device-usage-output-BVdgKbfz.mjs} +5 -5
  5. package/dist/{android-BeeC15Ve.mjs → android-B2DSKg-A.mjs} +2 -2
  6. package/dist/{android-D56S_GX3.mjs → android-BU4uBX8I.mjs} +5 -5
  7. package/dist/{android-BNm5A40S.mjs → android-D7qjT2fq.mjs} +87 -53
  8. package/dist/{android-DsEj2CCs.mjs → android-Iq0M2t2d.mjs} +27 -15
  9. package/dist/{android-cas-CbumHXIq.mjs → android-cas-Dhcjkys1.mjs} +4 -4
  10. package/dist/android-cas-compiler.mjs +1 -1
  11. package/dist/android-image-DFk26aY6.mjs +254 -0
  12. package/dist/{android-project-CCEQyYJK.d.mts → android-project-DhO6el8N.d.mts} +2 -2
  13. package/dist/api.d.mts +2 -1
  14. package/dist/api.mjs +28 -28
  15. package/dist/{apk-signed-tail-B9Usseps.mjs → apk-signed-tail-CPpA-3vu.mjs} +2 -2
  16. package/dist/{artifact-k1x9Jrn0.mjs → artifact-CNnTZs3R.mjs} +34 -21
  17. package/dist/{artifact-C8Nvp07y.mjs → artifact-DmRtKFXW.mjs} +13 -13
  18. package/dist/{artifact-platform-BO2Uvk_A.mjs → artifact-platform-DqCWUieN.mjs} +1 -1
  19. package/dist/{auto-placement--nfdQ9rp.mjs → auto-placement-DA65VQH7.mjs} +11 -9
  20. package/dist/{browser-web-6RDAeH0z.mjs → browser-web-Dn_hgKZC.mjs} +15 -15
  21. package/dist/{build-VXX_dtl5.mjs → build-D7SuVoRX.mjs} +23 -23
  22. package/dist/build-artifact-cache-D7B6seMj.mjs +174 -0
  23. package/dist/build-artifact-cache.d.mts +25 -0
  24. package/dist/build-artifact-cache.mjs +2 -0
  25. package/dist/{build-cache-BsKim4V7.mjs → build-cache-Cqj4FGnX.mjs} +20 -8
  26. package/dist/{build-plan-BK34X2iY.mjs → build-plan-Ct1FiA3E.mjs} +7 -7
  27. package/dist/{cache-manifest-CfiEny4T.mjs → cache-manifest-8JX9S1QJ.mjs} +1 -1
  28. package/dist/cache-manifest.mjs +1 -1
  29. package/dist/{ccache-BrwGIxmV.mjs → ccache-ChBMXlBq.mjs} +35 -67
  30. package/dist/{cdp-C3svvXiE.mjs → cdp-C216kOAn.mjs} +1 -1
  31. package/dist/{chrome-DyDWurWG.mjs → chrome-C8sC5tdl.mjs} +1 -1
  32. package/dist/{cli-Jc7obreB.mjs → cli-DjdvQG5U.mjs} +20 -20
  33. package/dist/cli.mjs +1 -1
  34. package/dist/{client-lDmA-5jx.mjs → client-kU37gURU.mjs} +70 -13
  35. package/dist/collector-run.mjs +7 -7
  36. package/dist/{command-output-CfPW1bKP.mjs → command-output-DjExb_tZ.mjs} +1 -1
  37. package/dist/{config-D5qNWJEP.mjs → config-BW0fAtoK.mjs} +256 -246
  38. package/dist/{dependencies-DkZ8681S.mjs → dependencies-CZ7c8XX_.mjs} +39 -39
  39. package/dist/{dependency-state-DZVln1P9.mjs → dependency-state-mL5g4H6K.mjs} +2 -2
  40. package/dist/{detached-entry-BPlSaCwC.mjs → detached-entry-tfrgGVWb.mjs} +1 -1
  41. package/dist/{dev-client-eDZy6RoX.mjs → dev-client-D3wOllNd.mjs} +2 -2
  42. package/dist/{device-CeIikWac.mjs → device-CWPFAqs0.mjs} +13 -13
  43. package/dist/{device-CTozKhU0.mjs → device-DH5yf6TU.mjs} +11 -11
  44. package/dist/{device-android-zgD9We85.mjs → device-android-ChfF5I9A.mjs} +10 -10
  45. package/dist/{device-capacity-Bki6B-7h.mjs → device-capacity-CHC3dKWg.mjs} +9 -9
  46. package/dist/device-host-worker.mjs +58 -17
  47. package/dist/{device-ios-TE5ejeXx.mjs → device-ios-B3-Ah--R.mjs} +9 -9
  48. package/dist/{device-lease-run-DeNGjJZM.mjs → device-lease-run-i3FNX4OE.mjs} +5 -5
  49. package/dist/{device-pool-mjyUYaau.mjs → device-pool-EZziQ0uS.mjs} +3 -3
  50. package/dist/{device-provision-j_B7G0e6.mjs → device-provision-CfpEy-Vm.mjs} +10 -10
  51. package/dist/{doctor-sSLtn-j1.mjs → doctor-B5uEZiKp.mjs} +30 -17
  52. package/dist/{doctor-CNZuvTSe.mjs → doctor-CGBsS_68.mjs} +1 -1
  53. package/dist/{doctor-BlrcoQ7B.mjs → doctor-dwRboaXx.mjs} +54 -25
  54. package/dist/{doctor-fingerprint-o7ZI9YLn.mjs → doctor-fingerprint-DqWvIhMb.mjs} +1 -1
  55. package/dist/doctor-fingerprint.mjs +1 -1
  56. package/dist/{doctor-watchman-CCuboyj1.mjs → doctor-watchman-r7M9UPi0.mjs} +5 -5
  57. package/dist/{eas-build-CaG-Sfs9.mjs → eas-build-BpHIt_M3.mjs} +4 -4
  58. package/dist/{eas-fallback-BpX1lpco.mjs → eas-fallback-CNPcjq3K.mjs} +6 -6
  59. package/dist/{eas-session-ledger-B-nTfdfk.mjs → eas-session-ledger-CXwagcQ7.mjs} +6 -6
  60. package/dist/{error-diagnostics-q56Im4D8.mjs → error-diagnostics-Ym2mjmJ0.mjs} +10 -10
  61. package/dist/{exec-aULwtNly.mjs → exec-CGuDzt40.mjs} +103 -103
  62. package/dist/{gc-By2Kc-Ek.mjs → gc-B464w_a5.mjs} +2 -2
  63. package/dist/{gc-Dv6nb9nf.mjs → gc-C7YxKNci.mjs} +25 -54
  64. package/dist/{guide-CwpsGWTJ.mjs → guide-BFW-cB7R.mjs} +141 -44
  65. package/dist/{hosted-android-c5nPJA6S.mjs → hosted-android-B7yfqXEy.mjs} +4 -4
  66. package/dist/{hosted-client-Hs-fD4L3.mjs → hosted-client-CQuzZwAu.mjs} +6 -5
  67. package/dist/{hosted-logs-BteXG8rm.mjs → hosted-logs-DfYCqrrR.mjs} +7 -7
  68. package/dist/{hosted-logs-sync-B8bjLEMs.mjs → hosted-logs-sync-Dlpa2mQF.mjs} +5 -5
  69. package/dist/{hosted-macos-B4byscei.mjs → hosted-macos-JKefapEm.mjs} +6 -6
  70. package/dist/{hosted-native-Bh9IJ_t5.mjs → hosted-native-B7OFt5gB.mjs} +14 -10
  71. package/dist/{idle-shutdown-BaeCo4ps.mjs → idle-shutdown-DPD8oV36.mjs} +6 -6
  72. package/dist/{ios-CdAV4-1E.mjs → ios-BdZdNsAj.mjs} +6 -6
  73. package/dist/{ios-D3oK9-O4.mjs → ios-DSBs9c6d.mjs} +28 -28
  74. package/dist/{ios-CsRVik64.mjs → ios-Qam0bT9n.mjs} +1 -1
  75. package/dist/{ios-device-CiBA-er9.mjs → ios-device-DLdEDWJj.mjs} +1 -1
  76. package/dist/{ios-device-D7Gi3e1I.mjs → ios-device-Drplrgzo.mjs} +3 -3
  77. package/dist/{ios-project-DDQlX_jX.mjs → ios-project-DoTQYghg.mjs} +7 -7
  78. package/dist/{ios-D1XKSITX.mjs → ios-sUPbWqEh.mjs} +8 -8
  79. package/dist/ios-signing-R34vbrNU.mjs +202 -0
  80. package/dist/{ios-state-BEIJRJ7P.mjs → ios-state-CWsBysyN.mjs} +1 -1
  81. package/dist/{js-swap-C8N5DXHl.mjs → js-swap-DrokhOfo.mjs} +6 -6
  82. package/dist/{launch-DxpvL6il.mjs → launch-Cy-MWEZc.mjs} +20 -20
  83. package/dist/{lightened-Df6II_XI.mjs → lightened-ALwQcQtV.mjs} +5 -5
  84. package/dist/{logs-zv3ge7c6.mjs → logs-DWT7jGpF.mjs} +6 -6
  85. package/dist/{logs-CuWJWF88.mjs → logs-DuED-01Z.mjs} +7 -7
  86. package/dist/{macos-C6U-4Iip.mjs → macos-CtBtA_hW.mjs} +22 -22
  87. package/dist/{macos-CbRZheLw.mjs → macos-kWGcfLzx.mjs} +1 -1
  88. package/dist/macos-run.mjs +1 -1
  89. package/dist/maintenance-run.mjs +6 -6
  90. package/dist/{metro-mKHEMO-a.mjs → metro-B5PVz0Wv.mjs} +4 -4
  91. package/dist/{metro-request-DODHNXCN.mjs → metro-request-2LmFpC1z.mjs} +2 -2
  92. package/dist/{named-ports-B0hCk2v-.mjs → named-ports-CA0nB9Yw.mjs} +3 -3
  93. package/dist/{native-android-9dVFqvTT.mjs → native-android-tISP2EVp.mjs} +29 -19
  94. package/dist/{native-gradle-artifact-inputs-BlY97pt8.mjs → native-gradle-artifact-inputs-DVoeZkrw.mjs} +5 -5
  95. package/dist/{native-runtime-DQfxW5Au.mjs → native-runtime-CNgxeOCG.mjs} +6 -6
  96. package/dist/{native-source-D1AzWiuP.mjs → native-source-ChAGj7R1.mjs} +1 -1
  97. package/dist/{native-xcode-inputs-tDuUvSU8.mjs → native-xcode-inputs-DGzkhpu4.mjs} +3 -3
  98. package/dist/{native-xcode-ios-CG-PD-7g.mjs → native-xcode-ios-B9nsfId2.mjs} +17 -17
  99. package/dist/offload-worker.d.mts +8 -1
  100. package/dist/offload-worker.mjs +62 -23
  101. package/dist/{operation-exec-Dp4FuIGR.mjs → operation-exec-DKlBcKAL.mjs} +1 -1
  102. package/dist/{ownership-CCfiBfOP.mjs → ownership-hC7xvvxF.mjs} +3 -3
  103. package/dist/{page-CQJlcj3x.mjs → page-Dj8IqvGM.mjs} +2 -2
  104. package/dist/{phone-reverses-CnNwdz9A.mjs → phone-reverses-Bo0EzJ-P.mjs} +4 -4
  105. package/dist/{placement-log-CRL0IY-k.mjs → placement-log-BsGvKLtU.mjs} +1 -1
  106. package/dist/{plan-placement-2imvnlWP.mjs → plan-placement-Am0IjuxB.mjs} +6 -6
  107. package/dist/{ports-CKktj5lV.mjs → ports-CNzg1LYD.mjs} +3 -3
  108. package/dist/{prebuild-CyNrUWgV.mjs → prebuild-BfJII57G.mjs} +12 -12
  109. package/dist/{project-Crtcbfl0.mjs → project-DU3jjnBE.mjs} +16 -16
  110. package/dist/{pull-request-BzLmzAIQ.mjs → pull-request-BpMTNkMB.mjs} +2 -2
  111. package/dist/pull-requests.mjs +1 -1
  112. package/dist/{react-native-android-Cabe2YER.mjs → react-native-android-3dZiJv-4.mjs} +37 -33
  113. package/dist/{react-native-build-DhWBUV_H.mjs → react-native-build-CuvNPt-q.mjs} +10 -10
  114. package/dist/{react-native-doctor-D-twmBon.mjs → react-native-doctor-a35BwMUO.mjs} +6 -6
  115. package/dist/{react-native-ios-u_ley41B.mjs → react-native-ios-CqnReM1t.mjs} +22 -17
  116. package/dist/{recordings-BWnIlhZH.mjs → recordings-AKZfsW2W.mjs} +1 -1
  117. package/dist/{registration-BwCe64PH.mjs → registration-DKjJGQ6p.mjs} +1 -1
  118. package/dist/{reload-D2TpUlns.mjs → reload-CC3sNo10.mjs} +17 -17
  119. package/dist/{reload-f9hvEHE9.mjs → reload-YPnvXGlB.mjs} +1 -1
  120. package/dist/{remote-BsBAjlD2.mjs → remote-BfaIHnhM.mjs} +9 -9
  121. package/dist/{result-EOsWV6sp.mjs → result-H-AxY7Ud.mjs} +24 -20
  122. package/dist/{run-2CHAJ9Oj.mjs → run-N-BbRxnC.mjs} +2 -2
  123. package/dist/{selection-C4ZQz_ER.mjs → selection-CH-MUVGD.mjs} +5 -4
  124. package/dist/{server-bare-CFyVFZXJ.mjs → server-bare-BTlICuaX.mjs} +2 -2
  125. package/dist/{server-command-BMyKtnjH.mjs → server-command-Bn_gOObU.mjs} +5 -5
  126. package/dist/server-expo-B59N16uT.mjs +2 -0
  127. package/dist/{server-expo-BLxcN2x2.mjs → server-expo-CUJ2fuv1.mjs} +3 -3
  128. package/dist/{settings-C6UTYW2K.mjs → settings-B5IBDfTx.mjs} +4 -4
  129. package/dist/{settings-jeS0WmUF.mjs → settings-DoWHJopy.mjs} +2 -2
  130. package/dist/{settings-payload-CrX933Xi.mjs → settings-payload-Bxw3hid5.mjs} +5 -5
  131. package/dist/{settings-write-DMcT23Kl.mjs → settings-write-C6d7EC54.mjs} +6 -6
  132. package/dist/settings.schema.json +38 -0
  133. package/dist/{simslim-93xmPh-d.mjs → simslim-DKdJx0LL.mjs} +2 -2
  134. package/dist/{slot-launch-CSpQcFZw.mjs → slot-launch-kq0-7w9C.mjs} +6 -6
  135. package/dist/{stage-Cf9uSM1a.mjs → stage-CBfMTUK3.mjs} +2 -2
  136. package/dist/{start-CquYgzVf.mjs → start-Diu8q6_U.mjs} +1 -1
  137. package/dist/{start-CLN_r9EG.mjs → start-WTMumMHi.mjs} +12 -12
  138. package/dist/{state-CM_HvvkS.mjs → state-CtmYTRWm.mjs} +4 -4
  139. package/dist/{state-CiflgxTP.mjs → state-DSOUqO-o.mjs} +2 -2
  140. package/dist/{stats-BVEZuSlg.mjs → stats-D4cW247z.mjs} +5 -5
  141. package/dist/{stats-report-B86Cv7Uc.mjs → stats-report-BVRCqwWA.mjs} +1 -1
  142. package/dist/{status-Bhdy07v0.mjs → status-B-oeWS0Z.mjs} +1 -1
  143. package/dist/{status-D0ruTmPl.mjs → status-CEwxo-PS.mjs} +37 -28
  144. package/dist/{status-GQ-JqvRi.mjs → status-DTFhDnd1.mjs} +1 -1
  145. package/dist/{status-watch-DSu_hhg6.mjs → status-watch-D63R5nSI.mjs} +5 -5
  146. package/dist/status-worker.mjs +1 -1
  147. package/dist/{stim-desktop-1XxET4S8.mjs → stim-desktop-_WTria-r.mjs} +2 -2
  148. package/dist/{stop-RZqER_Ww.mjs → stop-Dm9ON6Os.mjs} +2 -2
  149. package/dist/{stop-B616ZyTv.mjs → stop-HL2RvhrE.mjs} +5 -5
  150. package/dist/{stop-W4DK8qZq.mjs → stop-vX4w3_8V.mjs} +16 -16
  151. package/dist/supervisor-run.mjs +16 -16
  152. package/dist/{support-S_5nkkzs.mjs → support-BNe1_Hg7.mjs} +18 -8
  153. package/dist/{support-NxnD8QXd.mjs → support-ivsfDj0v.mjs} +9 -9
  154. package/dist/{swiftpm-artifact-inputs-yp8D5LE4.mjs → swiftpm-artifact-inputs-uq5oV7xR.mjs} +4 -4
  155. package/dist/{swiftpm-macos-Gtq9bNQb.mjs → swiftpm-macos-ClF203_2.mjs} +11 -11
  156. package/dist/{toolchain-B2bN8jEo.mjs → toolchain-CECahBDa.mjs} +1 -1
  157. package/dist/{toolchain-Bnm8vUCV.mjs → toolchain-CYonNjd_.mjs} +429 -20
  158. package/dist/{trigger-CfnOfpDd.mjs → trigger-BtB4kbe0.mjs} +2 -2
  159. package/dist/trigger-D8B7QR0q.mjs +2 -0
  160. package/dist/{warm-progress-_aTMvkIH.mjs → warm-progress-q11Vdvhh.mjs} +6 -6
  161. package/dist/{web-BdWG8b5_.mjs → web-BdaMBr2O.mjs} +9 -9
  162. package/dist/web-CIpHpGp8.mjs +2 -0
  163. package/dist/web-run.mjs +8 -8
  164. package/dist/windows-report.mjs +1 -1
  165. package/dist/{workspace-state-3bF4TB8P.mjs → workspace-state-BdZ-QgmB.mjs} +3 -3
  166. package/dist/{workspaces-C59v9bpD.mjs → workspaces-B9v5V7Es.mjs} +14 -14
  167. package/dist/{worktree-CinoSsGy.mjs → worktree-C3N86KpI.mjs} +77 -31
  168. package/dist/{worktree-K9F50fD_.mjs → worktree-C4MBOMz7.mjs} +1 -1
  169. package/package.json +12 -7
  170. package/dist/ios-signing-BJzvDPfU.mjs +0 -489
  171. package/dist/server-expo-DwR3eD-a.mjs +0 -2
  172. package/dist/trigger-DBZ-GBrl.mjs +0 -2
  173. package/dist/web-DwuluWJt.mjs +0 -2
@@ -1,14 +1,14 @@
1
- import { D as ownership_claim_exports, _ as spawnDeclared, b as operationState, g as signalDeclaredSpawns, h as refuseDeclaredSpawns, m as declareSpawnsOn, p as allowDeclaredSpawns, t as getExecutor, u as withWorkspaceProcessLock, v as stopDeclaringSpawnsOn, y as isTermination } from "./exec-aULwtNly.mjs";
2
- import { E as workspaceDir, T as workspaceDerivedData, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-3bF4TB8P.mjs";
1
+ import { C as operationState, D as ownership_claim_exports, S as isTermination, _ as declareSpawnsOn, b as spawnDeclared, g as allowDeclaredSpawns, p as withWorkspaceProcessLock, t as getExecutor, v as refuseDeclaredSpawns, x as stopDeclaringSpawnsOn, y as signalDeclaredSpawns } from "./exec-CGuDzt40.mjs";
2
+ import { E as workspaceDir, T as workspaceDerivedData, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-BdZ-QgmB.mjs";
3
3
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { a as formatElapsed, l as phaseLine } from "./command-output-CfPW1bKP.mjs";
5
- import { a as killOnAbort } from "./operation-exec-Dp4FuIGR.mjs";
6
- import { o as androidHome } from "./android-DsEj2CCs.mjs";
4
+ import { a as formatElapsed, l as phaseLine } from "./command-output-DjExb_tZ.mjs";
5
+ import { a as killOnAbort } from "./operation-exec-DKlBcKAL.mjs";
6
+ import { o as androidHome } from "./android-Iq0M2t2d.mjs";
7
7
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
8
8
  import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
9
- import { t as cleanLine } from "./server-expo-BLxcN2x2.mjs";
9
+ import { t as cleanLine } from "./server-expo-CUJ2fuv1.mjs";
10
10
  import { createRequire } from "node:module";
11
- import { createHash } from "node:crypto";
11
+ import { X509Certificate, createHash } from "node:crypto";
12
12
  import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
13
13
  import { homedir, tmpdir } from "node:os";
14
14
  import { basename, delimiter, dirname, isAbsolute, join, posix, relative, resolve, sep } from "node:path";
@@ -283,6 +283,403 @@ function withNativeBuildRun(context, root, details, fn, { write }) {
283
283
  });
284
284
  }
285
285
  //#endregion
286
+ //#region src/engine/ios-profile.ts
287
+ const TAG = /<(\/?)\s*([A-Za-z0-9_]+)(?:\s[^>]*?)?(\/?)>/g;
288
+ const ENTITIES = {
289
+ amp: "&",
290
+ lt: "<",
291
+ gt: ">",
292
+ quot: "\"",
293
+ apos: "'"
294
+ };
295
+ var PlistError = class extends Error {};
296
+ function codePoint(value) {
297
+ if (!Number.isInteger(value) || value < 0 || value > 1114111 || value >= 55296 && value <= 57343) throw new PlistError(`character reference out of range: ${value}`);
298
+ return String.fromCodePoint(value);
299
+ }
300
+ function decodeEntities(raw) {
301
+ return raw.replace(/&(#x?[0-9A-Fa-f]+|[a-z]+);/g, (match, body) => {
302
+ if (body.startsWith("#x") || body.startsWith("#X")) return codePoint(Number.parseInt(body.slice(2), 16));
303
+ if (body.startsWith("#")) return codePoint(Number.parseInt(body.slice(1), 10));
304
+ return ENTITIES[body] ?? match;
305
+ });
306
+ }
307
+ function peekTag(cursor) {
308
+ TAG.lastIndex = cursor.pos;
309
+ const match = TAG.exec(cursor.xml);
310
+ if (!match) return null;
311
+ return {
312
+ name: (match[2] ?? "").toLowerCase(),
313
+ closing: match[1] === "/",
314
+ selfClosing: match[3] === "/",
315
+ end: TAG.lastIndex
316
+ };
317
+ }
318
+ function takeTag(cursor) {
319
+ const tag = peekTag(cursor);
320
+ if (tag) cursor.pos = tag.end;
321
+ return tag;
322
+ }
323
+ function takeText(cursor, name) {
324
+ const close = cursor.xml.indexOf(`</${name}>`, cursor.pos);
325
+ if (close < 0) {
326
+ cursor.pos = cursor.xml.length;
327
+ return "";
328
+ }
329
+ const raw = cursor.xml.slice(cursor.pos, close);
330
+ cursor.pos = close + name.length + 3;
331
+ return raw;
332
+ }
333
+ function parseValue(cursor) {
334
+ const peeked = peekTag(cursor);
335
+ if (!peeked || peeked.closing) return void 0;
336
+ const tag = takeTag(cursor);
337
+ if (tag.selfClosing) {
338
+ if (tag.name === "true") return true;
339
+ if (tag.name === "false") return false;
340
+ if (tag.name === "array") return [];
341
+ if (tag.name === "dict") return {};
342
+ return "";
343
+ }
344
+ switch (tag.name) {
345
+ case "plist": return parseValue(cursor);
346
+ case "dict": {
347
+ const out = {};
348
+ for (;;) {
349
+ const next = peekTag(cursor);
350
+ if (!next) break;
351
+ if (next.closing) {
352
+ cursor.pos = next.end;
353
+ break;
354
+ }
355
+ cursor.pos = next.end;
356
+ if (next.name !== "key") continue;
357
+ const key = decodeEntities(next.selfClosing ? "" : takeText(cursor, "key"));
358
+ const value = parseValue(cursor);
359
+ if (value !== void 0) out[key] = value;
360
+ }
361
+ return out;
362
+ }
363
+ case "array": {
364
+ const out = [];
365
+ for (;;) {
366
+ const next = peekTag(cursor);
367
+ if (!next) break;
368
+ if (next.closing) {
369
+ cursor.pos = next.end;
370
+ break;
371
+ }
372
+ const value = parseValue(cursor);
373
+ if (value === void 0) break;
374
+ out.push(value);
375
+ }
376
+ return out;
377
+ }
378
+ case "string":
379
+ case "key": return decodeEntities(takeText(cursor, tag.name));
380
+ case "integer": return Number.parseInt(takeText(cursor, "integer").trim(), 10);
381
+ case "real": return Number.parseFloat(takeText(cursor, "real").trim());
382
+ case "date": return new Date(takeText(cursor, "date").trim());
383
+ case "data": return Buffer.from(takeText(cursor, "data").replace(/\s+/g, ""), "base64");
384
+ case "true":
385
+ takeText(cursor, "true");
386
+ return true;
387
+ case "false":
388
+ takeText(cursor, "false");
389
+ return false;
390
+ default:
391
+ takeText(cursor, tag.name);
392
+ return "";
393
+ }
394
+ }
395
+ function parsePlist(xml) {
396
+ if (typeof xml !== "string" || xml.trim() === "") return null;
397
+ const stripped = xml.replace(/<!--[\s\S]*?-->/g, "");
398
+ const start = stripped.indexOf("<plist");
399
+ const cursor = {
400
+ xml: stripped,
401
+ pos: start < 0 ? 0 : start
402
+ };
403
+ try {
404
+ const value = parseValue(cursor);
405
+ return value === void 0 ? null : value;
406
+ } catch {
407
+ return null;
408
+ }
409
+ }
410
+ function isDict(value) {
411
+ return value !== null && typeof value === "object" && !Array.isArray(value) && !Buffer.isBuffer(value) && !(value instanceof Date);
412
+ }
413
+ function stringsOf(value) {
414
+ if (!Array.isArray(value)) return null;
415
+ return value.filter((v) => typeof v === "string");
416
+ }
417
+ function parseProvisioningProfilePlist(xml) {
418
+ const root = parsePlist(xml);
419
+ if (!isDict(root)) return null;
420
+ const entitlements = isDict(root.Entitlements ?? null) ? root.Entitlements : {};
421
+ const teamIdentifier = stringsOf(root.TeamIdentifier);
422
+ const expiration = root.ExpirationDate;
423
+ const certificates = Array.isArray(root.DeveloperCertificates) ? root.DeveloperCertificates.filter((v) => Buffer.isBuffer(v)) : [];
424
+ return {
425
+ name: typeof root.Name === "string" ? root.Name : null,
426
+ uuid: typeof root.UUID === "string" ? root.UUID : null,
427
+ teamIdentifier: teamIdentifier?.[0] ?? null,
428
+ expirationDate: expiration instanceof Date && !Number.isNaN(expiration.getTime()) ? expiration : null,
429
+ provisionedDevices: stringsOf(root.ProvisionedDevices),
430
+ provisionsAllDevices: root.ProvisionsAllDevices === true,
431
+ getTaskAllow: entitlements["get-task-allow"] === true,
432
+ certificates
433
+ };
434
+ }
435
+ function provisioningProfileKind(profile) {
436
+ if (profile.provisionedDevices) return profile.getTaskAllow ? "development" : "ad hoc";
437
+ return profile.provisionsAllDevices ? "enterprise" : "App Store";
438
+ }
439
+ function certificateCommonName(der) {
440
+ if (!Buffer.isBuffer(der) || der.length === 0) return null;
441
+ let subject;
442
+ try {
443
+ subject = new X509Certificate(der).subject;
444
+ } catch {
445
+ return null;
446
+ }
447
+ for (const part of String(subject).split(/\r?\n/)) {
448
+ const trimmed = part.trim();
449
+ if (trimmed.startsWith("CN=")) return trimmed.slice(3).trim() || null;
450
+ }
451
+ return /(?:^|,)\s*CN=([^,]+)/.exec(String(subject))?.[1]?.trim() || null;
452
+ }
453
+ const IDENTITY_LINE = /^\s*\d+\)\s+([0-9A-Fa-f]{40})\s+"(.+)"\s*$/;
454
+ function parseSigningIdentities(text) {
455
+ if (typeof text !== "string") return [];
456
+ const out = [];
457
+ for (const line of text.split(/\r?\n/)) {
458
+ const match = IDENTITY_LINE.exec(line);
459
+ if (!match) continue;
460
+ out.push({
461
+ sha1: match[1].toUpperCase(),
462
+ name: match[2]
463
+ });
464
+ }
465
+ return out;
466
+ }
467
+ const SIGNING_CODES = {
468
+ noProfile: "STIM_NO_PROFILE",
469
+ profileMismatch: "STIM_PROFILE_MISMATCH",
470
+ noIdentity: "STIM_NO_SIGNING_IDENTITY",
471
+ codesignFailed: "STIM_CODESIGN_FAILED"
472
+ };
473
+ const XCODE_STEP = "run `stim device provision ios`, which asks before it registers the device or creates the profile (agents run it only with the user's go-ahead), or build once from Xcode to install it. A build never does this, because registering a device or minting a profile changes your Apple Developer account.";
474
+ const KEYCHAIN_REMEDY = "Open Xcode > Settings > Accounts and download your certificates, or unlock the login keychain with `security unlock-keychain`. `security find-identity -v -p codesigning` should list `Apple Development: ...`.";
475
+ function signingConfiguration(input) {
476
+ return input.configuration ?? "Debug";
477
+ }
478
+ function profileGate(input) {
479
+ const now = input.now ?? Date.now();
480
+ if (!input.profilePresent) return {
481
+ ok: false,
482
+ code: SIGNING_CODES.noProfile,
483
+ reason: "The app bundle has no embedded.mobileprovision, so it was built unsigned or for the simulator.",
484
+ remedy: `Set a team and profile for the target's ${signingConfiguration(input)} configuration in Xcode > Signing & Capabilities, then ${XCODE_STEP}`
485
+ };
486
+ if (!input.profile) return {
487
+ ok: false,
488
+ code: SIGNING_CODES.noProfile,
489
+ reason: "`openssl smime` could not decode the app bundle's embedded.mobileprovision.",
490
+ remedy: `The profile inside the app is corrupt. Delete the build cache entry with \`stim gc --delete\`, then ${XCODE_STEP}`
491
+ };
492
+ const profile = input.profile;
493
+ const named = profile.name ? `"${profile.name}"` : "the embedded profile";
494
+ if (!profile.expirationDate || profile.expirationDate.getTime() <= now) return {
495
+ ok: false,
496
+ code: SIGNING_CODES.profileMismatch,
497
+ reason: profile.expirationDate ? `The ${provisioningProfileKind(profile)} profile ${named} expired on ${profile.expirationDate.toISOString()}.` : `The ${provisioningProfileKind(profile)} profile ${named} carries no ExpirationDate, so Stim cannot prove it is still valid.`,
498
+ remedy: `Renew the profile under Signing & Capabilities, then ${XCODE_STEP}`
499
+ };
500
+ if (!profile.provisionedDevices) {
501
+ const kind = provisioningProfileKind(profile);
502
+ return {
503
+ ok: false,
504
+ code: SIGNING_CODES.profileMismatch,
505
+ reason: `${named} is an ${kind} profile, which carries no ProvisionedDevices list, so Stim cannot prove ${input.udid ?? "the target device"} is admitted.`,
506
+ remedy: `Local device runs need a development profile. Select one under Signing & Capabilities, then ${XCODE_STEP}`
507
+ };
508
+ }
509
+ const udid = input.udid;
510
+ if (!udid || !profile.provisionedDevices.some((d) => d.toLowerCase() === udid.toLowerCase())) return {
511
+ ok: false,
512
+ code: SIGNING_CODES.profileMismatch,
513
+ reason: `The ${provisioningProfileKind(profile)} profile ${named} lists ${profile.provisionedDevices.length} device(s) and ${udid ?? "the target device"} is not one of them.`,
514
+ remedy: `Run \`stim device provision ios${udid ? ` ${udid}` : ""}\`, which asks before it registers the device and refreshes the profile (agents run it only with the user's go-ahead), or register it at developer.apple.com, regenerate the profile and build once from Xcode. A build never does this, because registering a device or minting a profile changes your Apple Developer account.`
515
+ };
516
+ return {
517
+ ok: true,
518
+ profile
519
+ };
520
+ }
521
+ function signingGate(input) {
522
+ const gated = profileGate(input);
523
+ if (!gated.ok) return gated;
524
+ const profile = gated.profile;
525
+ const named = profile.name ? `"${profile.name}"` : "the embedded profile";
526
+ const identities = Array.isArray(input.identities) ? input.identities : [];
527
+ if (identities.length === 0) return {
528
+ ok: false,
529
+ code: SIGNING_CODES.noIdentity,
530
+ reason: "`security find-identity -v -p codesigning` lists no codesigning identity on this machine.",
531
+ remedy: KEYCHAIN_REMEDY
532
+ };
533
+ if (input.pinnedSha1) {
534
+ const wanted = input.pinnedSha1.trim().toUpperCase();
535
+ const match = identities.find((i) => i.sha1 === wanted);
536
+ if (match) return {
537
+ ok: true,
538
+ identity: match
539
+ };
540
+ return {
541
+ ok: false,
542
+ code: SIGNING_CODES.noIdentity,
543
+ reason: `ios.signingIdentitySha1 is ${wanted}, which is not in the keychain. Available: ${identities.map((i) => `${i.sha1} "${i.name}"`).join(", ")}.`,
544
+ remedy: KEYCHAIN_REMEDY
545
+ };
546
+ }
547
+ const wantedName = input.pinnedName?.trim() || certificateCommonName(profile.certificates[0] ?? null);
548
+ if (!wantedName) return {
549
+ ok: false,
550
+ code: SIGNING_CODES.noIdentity,
551
+ reason: `Stim could not read a signing-identity name out of ${named}: its DeveloperCertificates entry has no readable subject CN.`,
552
+ remedy: "Set ios.signingIdentity in .stim.json to the identity name to re-sign with, or ios.signingIdentitySha1 to its SHA-1 hash."
553
+ };
554
+ const matches = identities.filter((i) => i.name === wantedName);
555
+ if (matches.length === 1) return {
556
+ ok: true,
557
+ identity: matches[0]
558
+ };
559
+ if (matches.length === 0) return {
560
+ ok: false,
561
+ code: SIGNING_CODES.noIdentity,
562
+ reason: `The app was signed by "${wantedName}", which is not in this machine's keychain. Available: ${identities.map((i) => `"${i.name}"`).join(", ")}.`,
563
+ remedy: `${KEYCHAIN_REMEDY} Or set ios.signingIdentity in .stim.json to one of the identities listed above.`
564
+ };
565
+ return {
566
+ ok: false,
567
+ code: SIGNING_CODES.noIdentity,
568
+ reason: `${matches.length} keychain identities share the name "${wantedName}", so Stim cannot pick one: ${matches.map((i) => i.sha1).join(", ")}.`,
569
+ remedy: "Set ios.signingIdentitySha1 in .stim.json to the SHA-1 hash of the certificate to sign with."
570
+ };
571
+ }
572
+ //#endregion
573
+ //#region src/engine/app-schemes.ts
574
+ function schemesFromInfoPlist(plist) {
575
+ const types = plist?.CFBundleURLTypes;
576
+ if (!Array.isArray(types)) return [];
577
+ const out = [];
578
+ for (const type of types) {
579
+ const schemes = type?.CFBundleURLSchemes;
580
+ if (Array.isArray(schemes)) out.push(...schemes.filter((s) => typeof s === "string" && s.trim() !== ""));
581
+ }
582
+ return out;
583
+ }
584
+ function readBundleSchemes(appPath, { exec = null } = {}) {
585
+ if (typeof appPath !== "string" || appPath.trim() === "") return [];
586
+ const e = exec || getExecutor();
587
+ const file = join(appPath, "Info.plist");
588
+ try {
589
+ return schemesFromInfoPlist(JSON.parse(String(e.runFile("plutil", [
590
+ "-convert",
591
+ "json",
592
+ "-o",
593
+ "-",
594
+ file
595
+ ], { timeoutMs: 1e4 }))));
596
+ } catch {
597
+ return schemesFromInfoPlist(readPlistFile(file));
598
+ }
599
+ }
600
+ const APPLE_EPOCH_SECONDS = 978307200;
601
+ function readPlistFile(file) {
602
+ try {
603
+ const data = readFileSync(file);
604
+ return data.subarray(0, 8).toString("latin1") === "bplist00" ? parseBinaryPlist(data) : parsePlist(data.toString("utf8"));
605
+ } catch {
606
+ return null;
607
+ }
608
+ }
609
+ function parseBinaryPlist(data) {
610
+ const trailer = data.subarray(data.length - 32);
611
+ if (trailer.length !== 32) throw new Error("truncated binary plist");
612
+ const offsetSize = trailer.readUInt8(6);
613
+ const refSize = trailer.readUInt8(7);
614
+ const count = Number(trailer.readBigUInt64BE(8));
615
+ const top = Number(trailer.readBigUInt64BE(16));
616
+ const table = Number(trailer.readBigUInt64BE(24));
617
+ const span = (at, size) => {
618
+ if (at < 0 || size < 0 || at + size > data.length) throw new Error("binary plist offset out of range");
619
+ return data.subarray(at, at + size);
620
+ };
621
+ const uint = (at, size) => span(at, size).reduce((value, byte) => value * 256 + byte, 0);
622
+ const read = (ref) => {
623
+ if (ref >= count) throw new Error("binary plist reference out of range");
624
+ let at = uint(table + ref * offsetSize, offsetSize);
625
+ const marker = span(at++, 1).readUInt8();
626
+ const info = marker & 15;
627
+ const length = () => {
628
+ if (info !== 15) return info;
629
+ const size = 1 << (span(at, 1).readUInt8() & 15);
630
+ const value = uint(at + 1, size);
631
+ at += 1 + size;
632
+ return value;
633
+ };
634
+ switch (marker >> 4) {
635
+ case 0: return marker === 9;
636
+ case 1: {
637
+ const size = 1 << info;
638
+ return size === 8 ? Number(span(at, 8).readBigInt64BE()) : uint(at, size);
639
+ }
640
+ case 2: return info === 2 ? span(at, 4).readFloatBE() : span(at, 8).readDoubleBE();
641
+ case 3: return /* @__PURE__ */ new Date((APPLE_EPOCH_SECONDS + span(at, 8).readDoubleBE()) * 1e3);
642
+ case 4: {
643
+ const size = length();
644
+ return Buffer.from(span(at, size));
645
+ }
646
+ case 5: {
647
+ const size = length();
648
+ return span(at, size).toString("latin1");
649
+ }
650
+ case 6: {
651
+ const size = length() * 2;
652
+ return Buffer.from(span(at, size)).swap16().toString("utf16le");
653
+ }
654
+ case 10: {
655
+ const size = length();
656
+ return Array.from({ length: size }, (_, i) => read(uint(at + i * refSize, refSize)));
657
+ }
658
+ case 13: {
659
+ const size = length();
660
+ const dict = {};
661
+ for (let i = 0; i < size; i++) {
662
+ const key = read(uint(at + i * refSize, refSize));
663
+ if (typeof key !== "string") throw new Error("binary plist dictionary key is not a string");
664
+ dict[key] = read(uint(at + (size + i) * refSize, refSize));
665
+ }
666
+ return dict;
667
+ }
668
+ default: throw new Error(`unsupported binary plist object type ${marker.toString(16)}`);
669
+ }
670
+ };
671
+ return read(top);
672
+ }
673
+ const THIRD_PARTY_SCHEME = /^(?:fb\d+|com\.googleusercontent\.apps\.|msauth\.|msauthv2|twitterkit-|db-[a-z0-9]+$|spotify|snapchat|com\.facebook)/i;
674
+ function approvableSchemes(schemes) {
675
+ return (Array.isArray(schemes) ? schemes : []).filter((s) => typeof s === "string" && s.trim() !== "").map((s) => s.trim()).filter((s) => !/^(?:https?|mailto|tel|sms|itms(?:-apps)?)$/i.test(s) && !THIRD_PARTY_SCHEME.test(s));
676
+ }
677
+ function pickDevClientScheme(schemes) {
678
+ const all = approvableSchemes(schemes);
679
+ const expo = all.filter((s) => s.startsWith("exp+"));
680
+ return (expo.length ? expo : all).toSorted((a, b) => b.length - a.length)[0] ?? null;
681
+ }
682
+ //#endregion
286
683
  //#region src/engine/bundler.ts
287
684
  const COCOAPODS_SPEC = /^ {4}cocoapods \(([^)\s]+)/m;
288
685
  /**
@@ -720,10 +1117,11 @@ async function readBundleId(appPath, { exec = null } = {}) {
720
1117
  "CFBundleIdentifier"
721
1118
  ], { timeoutMs: 1e4 });
722
1119
  const trimmed = String(value).trim();
723
- return trimmed === "" ? null : trimmed;
724
- } catch {
725
- return null;
726
- }
1120
+ if (trimmed !== "") return trimmed;
1121
+ } catch {}
1122
+ const plist = readPlistFile(join(appPath, "Info.plist"));
1123
+ const id = typeof plist === "object" && plist !== null && "CFBundleIdentifier" in plist ? plist.CFBundleIdentifier : null;
1124
+ return typeof id === "string" && id.trim() !== "" ? id.trim() : null;
727
1125
  }
728
1126
  function parseBundleExecutable(plistJson) {
729
1127
  if (typeof plistJson !== "string") return null;
@@ -2195,10 +2593,16 @@ function jdkInstall(major, os) {
2195
2593
  }
2196
2594
  function androidMismatches(local, requires, worker) {
2197
2595
  const out = [];
2198
- if ((!local.jdk || worker.jdk !== local.jdk) && !(local.jdk && worker.jdks?.includes(local.jdk))) out.push({
2596
+ if (!local.jdk) {
2597
+ if (!worker.jdk) out.push({
2598
+ code: "jdk",
2599
+ reason: "no JDK there",
2600
+ ...jdkInstall("17", worker.os)
2601
+ });
2602
+ } else if (worker.jdk !== local.jdk && !worker.jdks?.includes(local.jdk)) out.push({
2199
2603
  code: "jdk",
2200
- reason: `JDK ${worker.jdk ?? "none"} there, ${local.jdk ?? "none"} here`,
2201
- ...local.jdk && worker.jdks ? jdkInstall(local.jdk, worker.os) : {}
2604
+ reason: `JDK ${worker.jdk ?? "none"} there, ${local.jdk} here`,
2605
+ ...worker.jdks ? jdkInstall(local.jdk, worker.os) : {}
2202
2606
  });
2203
2607
  const sdk = worker.androidSdk;
2204
2608
  if (!sdk) return [...out, {
@@ -2249,8 +2653,8 @@ function cocoapodsDifference(target, worker) {
2249
2653
  }
2250
2654
  /**
2251
2655
  * What a build on the worker does beyond the match: the SDK packages it lacks and Gradle downloads on the first build,
2252
- * because its SDK licenses are accepted and the project allows the download. None of them stops the build. For iOS, the
2253
- * CocoaPods difference a named machine is sent the build despite.
2656
+ * because its SDK licenses are accepted and the project allows the download, and the JDK it builds on for a client with
2657
+ * none. None of them stops the build. For iOS, the CocoaPods difference a named machine is sent the build despite.
2254
2658
  */
2255
2659
  function toolchainNotes(target, worker) {
2256
2660
  if (target.platform === "ios") {
@@ -2260,14 +2664,19 @@ function toolchainNotes(target, worker) {
2260
2664
  reason: `${pods.reason}; its pod install runs anyway and a failure is reported`
2261
2665
  }] : [];
2262
2666
  }
2263
- if (target.platform !== "android" || !worker.androidSdk || !gradleDownloads(target.requires, worker)) return [];
2667
+ if (target.platform !== "android") return [];
2668
+ const jdk = !target.local.jdk && worker.jdk ? [{
2669
+ code: "jdk",
2670
+ reason: `this machine has no JDK, so the build runs on JDK ${worker.jdk} there`
2671
+ }] : [];
2672
+ if (!worker.androidSdk || !gradleDownloads(target.requires, worker)) return jdk;
2264
2673
  const sdkManager = sdkManagerPath(worker);
2265
- return sdkGaps(target.requires, worker.androidSdk).map((gap) => ({
2674
+ return [...jdk, ...sdkGaps(target.requires, worker.androidSdk).map((gap) => ({
2266
2675
  code: gap.code,
2267
2676
  reason: `${gap.label} is not installed there; Gradle downloads it on the first build${gap.size ? ` (${gap.size})` : ""}`,
2268
2677
  commands: [`${sdkManager} "${gap.id}"`],
2269
2678
  lead: "install the package now so the first build does not download it"
2270
- }));
2679
+ }))];
2271
2680
  }
2272
2681
  function versionMismatch(tool, there, here) {
2273
2682
  const side = (version) => version ? version.startsWith(tool) ? version : `${tool} ${version}` : `no ${tool}`;
@@ -2418,4 +2827,4 @@ function toolchainMismatches(target, worker) {
2418
2827
  return out;
2419
2828
  }
2420
2829
  //#endregion
2421
- export { cancelledFailure as $, COMPILATION_CACHE_NOT_RUN as A, pickXcodeProject as B, DEPS_ERROR as C, readRubyVersion as D, readPodState as E, compilationCacheActivityLine as F, swiftPrefixMappingSupported as G, readBundleId as H, compilationCacheSettings as I, describeDiagnostic as J, tailLines as K, detectXcodeMajorAsync as L, HEARTBEAT_INTERVAL_MS as M, SWIFT_PREFIX_MAPPING_MIN_SWIFT as N, runCaptured as O, buildXcode as P, NATIVE_RUN_WAIT_MS as Q, parseSwiftVersion as R, workerToolchain as S, podsAreStale as T, resolveScheme as U, readBundleExecutable as V, startBuildHeartbeat as W, podInstallCommand as X, bundlerPin as Y, NATIVE_RUN_LOCK as Z, parseXcodeVersionPlist as _, buildsOnlyOnWorker as a, requestNativeRunCancel as at, toolchainNotes as b, iosToolchainAsync as c, withNativeBuildRun as ct, jdkHomes as d, clearNativeRunCancel as et, jdkMajor as f, parseAndroidRequirements as g, macosToolchainAsync as h, availableIphone as i, nativeRunWaitNotice as it, COMPILATION_CACHE_UNAVAILABLE as j, runPodInstall as k, iphoneRuntimes as l, cacheUser as lt, macosToolchain as m, androidToolchain as n, describeNativeRunHolder as nt, cocoapodsDifference as o, runCancellation as ot, listXcodeApps as p, xcodebuildArgs as q, androidToolchainAsync as r, nativeRunHolder as rt, cocoapodsInstall as s, runCancellationSignal as st, androidRequirements as t, decideStopAction as tt, jdkCandidates as u, claimForEmptying as ut, sdkDownloadDisabled as v, POD_MISSING_REASON as w, useJdkMajor as x, toolchainMismatches as y, parseXcodeMajor as z };
2830
+ export { readBundleSchemes as $, COMPILATION_CACHE_NOT_RUN as A, pickXcodeProject as B, DEPS_ERROR as C, readRubyVersion as D, readPodState as E, compilationCacheActivityLine as F, swiftPrefixMappingSupported as G, readBundleId as H, compilationCacheSettings as I, describeDiagnostic as J, tailLines as K, detectXcodeMajorAsync as L, HEARTBEAT_INTERVAL_MS as M, SWIFT_PREFIX_MAPPING_MIN_SWIFT as N, runCaptured as O, buildXcode as P, pickDevClientScheme as Q, parseSwiftVersion as R, workerToolchain as S, podsAreStale as T, resolveScheme as U, readBundleExecutable as V, startBuildHeartbeat as W, podInstallCommand as X, bundlerPin as Y, approvableSchemes as Z, parseXcodeVersionPlist as _, runCancellationSignal as _t, buildsOnlyOnWorker as a, profileGate as at, toolchainNotes as b, claimForEmptying as bt, iosToolchainAsync as c, NATIVE_RUN_WAIT_MS as ct, jdkHomes as d, decideStopAction as dt, schemesFromInfoPlist as et, jdkMajor as f, describeNativeRunHolder as ft, parseAndroidRequirements as g, runCancellation as gt, macosToolchainAsync as h, requestNativeRunCancel as ht, availableIphone as i, parseSigningIdentities as it, COMPILATION_CACHE_UNAVAILABLE as j, runPodInstall as k, iphoneRuntimes as l, cancelledFailure as lt, macosToolchain as m, nativeRunWaitNotice as mt, androidToolchain as n, parsePlist as nt, cocoapodsDifference as o, signingGate as ot, listXcodeApps as p, nativeRunHolder as pt, xcodebuildArgs as q, androidToolchainAsync as r, parseProvisioningProfilePlist as rt, cocoapodsInstall as s, NATIVE_RUN_LOCK as st, androidRequirements as t, SIGNING_CODES as tt, jdkCandidates as u, clearNativeRunCancel as ut, sdkDownloadDisabled as v, withNativeBuildRun as vt, POD_MISSING_REASON as w, useJdkMajor as x, toolchainMismatches as y, cacheUser as yt, parseXcodeMajor as z };
@@ -1,7 +1,7 @@
1
- import { t as getExecutor } from "./exec-aULwtNly.mjs";
1
+ import { t as getExecutor } from "./exec-CGuDzt40.mjs";
2
2
  import { t as resolveMaintenanceSettings } from "./settings-D9LtQaUw.mjs";
3
3
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
4
- import { n as windowsLauncherArgs } from "./detached-entry-BPlSaCwC.mjs";
4
+ import { n as windowsLauncherArgs } from "./detached-entry-tfrgGVWb.mjs";
5
5
  import { n as stampAttempt, r as due, t as capChildLog } from "./attempt-ClyJlZPT.mjs";
6
6
  import { readClaimSet } from "@stim-cli/core/ownership-claim";
7
7
  import { closeSync, openSync } from "node:fs";
@@ -0,0 +1,2 @@
1
+ import { t as triggerMaintenance } from "./trigger-BtB4kbe0.mjs";
2
+ export { triggerMaintenance };
@@ -1,9 +1,9 @@
1
- import { D as ownership_claim_exports, E as debugLog, l as WorkspaceProcessCleanupError, n as isTimeoutError, t as getExecutor } from "./exec-aULwtNly.mjs";
2
- import { E as workspaceDir, M as withDirLock, _ as ensureWorkspaceStorage, h as discoverAgentSessions, m as attributeAgentSessions, o as updateWorkspaceState, p as agentKey } from "./workspace-state-3bF4TB8P.mjs";
3
- import { l as gitQuietAsync, o as git$1, s as gitAsync } from "./operation-exec-Dp4FuIGR.mjs";
4
- import { Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk } from "./settings-C6UTYW2K.mjs";
5
- import { U as ownedAvdDirectory } from "./android-DsEj2CCs.mjs";
6
- import { s as pullRequestLookups } from "./pull-request-BzLmzAIQ.mjs";
1
+ import { D as ownership_claim_exports, E as debugLog, f as WorkspaceProcessCleanupError, n as isTimeoutError, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
+ import { E as workspaceDir, M as withDirLock, _ as ensureWorkspaceStorage, h as discoverAgentSessions, m as attributeAgentSessions, o as updateWorkspaceState, p as agentKey } from "./workspace-state-BdZ-QgmB.mjs";
3
+ import { l as gitQuietAsync, o as git$1, s as gitAsync } from "./operation-exec-DKlBcKAL.mjs";
4
+ import { Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk } from "./settings-B5IBDfTx.mjs";
5
+ import { U as ownedAvdDirectory } from "./android-Iq0M2t2d.mjs";
6
+ import { s as pullRequestLookups } from "./pull-request-BpMTNkMB.mjs";
7
7
  import { clearClaimChild, markClaimChildPending, releaseClaim, setClaimChild, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
8
8
  import { randomUUID } from "node:crypto";
9
9
  import { existsSync, mkdirSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -1,12 +1,12 @@
1
- import { i as recordWorkspaceUse, k as workspaceLogsDir } from "./workspace-state-3bF4TB8P.mjs";
2
- import { D as upsertProject, k as withConfigLockAsync, m as getProject } from "./config-D5qNWJEP.mjs";
3
- import { f as refuseNoProject, l as phaseLine } from "./command-output-CfPW1bKP.mjs";
4
- import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-C6UTYW2K.mjs";
5
- import { f as projectRegistry, n as findCommandWorkspace } from "./project-Crtcbfl0.mjs";
6
- import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-1XxET4S8.mjs";
7
- import { o as readWebRecord, r as cdpEndpoint } from "./state-CM_HvvkS.mjs";
8
- import { t as liveWebRecord } from "./page-CQJlcj3x.mjs";
9
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-DQfxW5Au.mjs";
1
+ import { i as recordWorkspaceUse, k as workspaceLogsDir } from "./workspace-state-BdZ-QgmB.mjs";
2
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-DjExb_tZ.mjs";
3
+ import { D as upsertProject, k as withConfigLockAsync, m as getProject } from "./config-BW0fAtoK.mjs";
4
+ import { Z as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, rt as settingShapeErrors } from "./settings-B5IBDfTx.mjs";
5
+ import { f as projectRegistry, n as findCommandWorkspace } from "./project-DU3jjnBE.mjs";
6
+ import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-_WTria-r.mjs";
7
+ import { o as readWebRecord, r as cdpEndpoint } from "./state-CtmYTRWm.mjs";
8
+ import { t as liveWebRecord } from "./page-Dj8IqvGM.mjs";
9
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-CNgxeOCG.mjs";
10
10
  import chalk from "chalk";
11
11
  //#region src/commands/web.ts
12
12
  const printNote = (line) => console.error(line);
@@ -0,0 +1,2 @@
1
+ import { n as webCommand, t as runWeb } from "./web-BdaMBr2O.mjs";
2
+ export { webCommand as default, runWeb };
package/dist/web-run.mjs CHANGED
@@ -1,12 +1,12 @@
1
- import { D as ownership_claim_exports, S as process_identity_exports, o as cancellableSleep, t as getExecutor } from "./exec-aULwtNly.mjs";
2
- import { Dt as recordCreatedDevice } from "./android-DsEj2CCs.mjs";
3
- import { f as signalProcessTree } from "./metro-mKHEMO-a.mjs";
1
+ import { D as ownership_claim_exports, T as process_identity_exports, l as cancellableSleep, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
+ import { Dt as recordCreatedDevice } from "./android-Iq0M2t2d.mjs";
3
+ import { f as signalProcessTree } from "./metro-B5PVz0Wv.mjs";
4
4
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
5
- import { c as webClaimRoot, f as webLogFile, g as chromeProcessState, h as writeWebRecord, i as clearWebRecord, l as webDir, n as browserLogFile, p as webProfileDir, s as updateWebRecord, v as liveProfileHolder, y as removeSingletonFiles } from "./state-CM_HvvkS.mjs";
6
- import { l as probeWebDrivers } from "./activity-yjH7Q3zn.mjs";
7
- import { t as connectOwnedBrowser } from "./cdp-C3svvXiE.mjs";
8
- import { t as relaunchWithLogFile } from "./detached-entry-BPlSaCwC.mjs";
9
- import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-DyDWurWG.mjs";
5
+ import { c as webClaimRoot, f as webLogFile, g as chromeProcessState, h as writeWebRecord, i as clearWebRecord, l as webDir, n as browserLogFile, p as webProfileDir, s as updateWebRecord, v as liveProfileHolder, y as removeSingletonFiles } from "./state-CtmYTRWm.mjs";
6
+ import { l as probeWebDrivers } from "./activity-DkS-Ir6V.mjs";
7
+ import { t as connectOwnedBrowser } from "./cdp-C216kOAn.mjs";
8
+ import { t as relaunchWithLogFile } from "./detached-entry-tfrgGVWb.mjs";
9
+ import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-C8sC5tdl.mjs";
10
10
  import { existsSync, mkdirSync, openSync, realpathSync } from "node:fs";
11
11
  import { isAbsolute, resolve } from "node:path";
12
12
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
@@ -1,4 +1,4 @@
1
- import { t as getExecutor } from "./exec-aULwtNly.mjs";
1
+ import { t as getExecutor } from "./exec-CGuDzt40.mjs";
2
2
  import { writeFileSync } from "node:fs";
3
3
  //#region bin/windows-report.ts
4
4
  const request = JSON.parse(process.env.STIM_REPORT_CHILD ?? "");
@@ -1,6 +1,6 @@
1
- import { S as process_identity_exports, t as getExecutor } from "./exec-aULwtNly.mjs";
2
- import { A as writeConfigSetting, h as getProjectSettings, j as writeConfigSettingAsync } from "./config-D5qNWJEP.mjs";
3
- import { lt as workspaceHiddenSetting } from "./settings-C6UTYW2K.mjs";
1
+ import { T as process_identity_exports, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
+ import { A as writeConfigSetting, h as getProjectSettings, j as writeConfigSettingAsync } from "./config-BW0fAtoK.mjs";
3
+ import { lt as workspaceHiddenSetting } from "./settings-B5IBDfTx.mjs";
4
4
  import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
5
5
  import { homedir } from "node:os";
6
6
  import { dirname, isAbsolute, join, relative } from "node:path";