stim 1.33.0 → 1.35.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 (125) hide show
  1. package/dist/{acquire-artifact-DTh_LxrE.mjs → acquire-artifact-0E_iw7Rf.mjs} +1 -1
  2. package/dist/{act-Cur4YKtK.mjs → act-CyxFP8Vj.mjs} +9 -10
  3. package/dist/{activity-C8kBq9w0.mjs → activity-BQpJpAjA.mjs} +2 -2
  4. package/dist/{agent-device-usage-output-BTRaK_up.mjs → agent-device-usage-output-BoOC3ZF9.mjs} +3 -3
  5. package/dist/{android-D5mCdVl2.mjs → android-CjcJE7uA.mjs} +5 -5
  6. package/dist/{android-BL-QqHjc.mjs → android-YRb1UzSy.mjs} +27 -29
  7. package/dist/{android-project-BDlPnfmL.d.mts → android-project-DhO6el8N.d.mts} +1 -1
  8. package/dist/api.d.mts +1 -1
  9. package/dist/api.mjs +21 -21
  10. package/dist/{artifact-BufzdGbT.mjs → artifact-2NIRz6SC.mjs} +19 -15
  11. package/dist/{artifact-BMjubIP2.mjs → artifact-BG4h_WTC.mjs} +11 -11
  12. package/dist/{auto-placement-D7P98glJ.mjs → auto-placement-CBdWa87P.mjs} +4 -5
  13. package/dist/{browser-web-C74et-Nv.mjs → browser-web-CNlRugJv.mjs} +5 -5
  14. package/dist/{build-DFBGWOTc.mjs → build-CNE3Wo5-.mjs} +15 -16
  15. package/dist/build-artifact-cache-D7B6seMj.mjs +174 -0
  16. package/dist/build-artifact-cache.d.mts +25 -0
  17. package/dist/build-artifact-cache.mjs +2 -0
  18. package/dist/{build-cache-Cqj4FGnX.mjs → build-cache-_fkewiwH.mjs} +6 -1
  19. package/dist/{build-plan-T3Hi24ax.mjs → build-plan-BSgR9yKo.mjs} +5 -5
  20. package/dist/{cli-B2YSjc9s.mjs → cli-DK24VzHi.mjs} +17 -17
  21. package/dist/cli.mjs +1 -1
  22. package/dist/{client-0_Mnfz0a.mjs → client-Dy0eJJtz.mjs} +49 -11
  23. package/dist/{command-output-DWI9tGPU.mjs → command-output-CGxrQ3Bd.mjs} +1 -1
  24. package/dist/{dependencies-CgvBZbXD.mjs → dependencies-IVl2Ga2D.mjs} +27 -30
  25. package/dist/{dev-client-ChsHwgrn.mjs → dev-client-DDApoVvd.mjs} +2 -2
  26. package/dist/{device-android-B8TQP5AX.mjs → device-android-C-biM49_.mjs} +3 -3
  27. package/dist/{ccache-BXtzEL6M.mjs → device-capacity-C0PiTyRb.mjs} +1004 -63
  28. package/dist/device-host-worker.mjs +6 -7
  29. package/dist/{device-B0htCt2u.mjs → device-mOFYiHiw.mjs} +8 -8
  30. package/dist/{device-DOehZpyx.mjs → device-p_cp8IzW.mjs} +6 -6
  31. package/dist/{device-pool-DP4sCeCC.mjs → device-pool-nsMvt2X2.mjs} +2 -2
  32. package/dist/{device-provision-CnNOIxCF.mjs → device-provision-BYYJuRKZ.mjs} +7 -7
  33. package/dist/{doctor-C6Xn96RS.mjs → doctor-BBAb8NLe.mjs} +1 -1
  34. package/dist/{doctor-9GrW5YSP.mjs → doctor-BptE4PaK.mjs} +10 -11
  35. package/dist/{doctor-nRLBoajo.mjs → doctor-RosbBfTV.mjs} +11 -12
  36. package/dist/doctor-fingerprint.mjs +1 -1
  37. package/dist/{doctor-watchman-CDhpC3Oh.mjs → doctor-watchman-CKOnCINh.mjs} +2 -2
  38. package/dist/{eas-build-CpJ4h9tG.mjs → eas-build-BxJdzQnF.mjs} +2 -2
  39. package/dist/{eas-fallback-B3z5nL1g.mjs → eas-fallback-DU2WDF8r.mjs} +2 -2
  40. package/dist/{eas-session-ledger-Bspy-VJQ.mjs → eas-session-ledger-DCUfh6m7.mjs} +1 -1
  41. package/dist/{error-diagnostics-DoLGklYX.mjs → error-diagnostics-D6wlK-yX.mjs} +3 -3
  42. package/dist/{gc-DolXpMSB.mjs → gc-BUkonUfz.mjs} +10 -10
  43. package/dist/{gc-BWoOp9q7.mjs → gc-CvMEytXz.mjs} +2 -2
  44. package/dist/{guide-CmZB0GtP.mjs → guide-BWozWG7D.mjs} +25 -15
  45. package/dist/{hosted-android-ByG-ICuh.mjs → hosted-android-y6K3DKQT.mjs} +2 -2
  46. package/dist/{hosted-client-D19Lv0tg.mjs → hosted-client-Bb89P6an.mjs} +2 -2
  47. package/dist/{hosted-logs-D7anR6Dk.mjs → hosted-logs-DYPsnWMF.mjs} +2 -2
  48. package/dist/{hosted-logs-sync-D182b1eJ.mjs → hosted-logs-sync-DfUJ2GpF.mjs} +4 -4
  49. package/dist/{hosted-macos-D0DDQxvl.mjs → hosted-macos-DsEzYVY_.mjs} +4 -4
  50. package/dist/{hosted-native-BzXIy97W.mjs → hosted-native-C9xQYYFb.mjs} +4 -4
  51. package/dist/{ios-AdhPKXO3.mjs → ios-BCKxjpRp.mjs} +8 -8
  52. package/dist/{ios-dbXzjTxx.mjs → ios-FhMkDfNC.mjs} +19 -21
  53. package/dist/{ios-device-DXbHZfFe.mjs → ios-device-DMOnaH5n.mjs} +1 -1
  54. package/dist/{ios-project-BzfLigfh.mjs → ios-project-PXBDoaii.mjs} +5 -5
  55. package/dist/ios-signing-CCFNjjWU.mjs +202 -0
  56. package/dist/{js-swap-EDVOJmqx.mjs → js-swap-07ikLRJJ.mjs} +3 -3
  57. package/dist/{launch-CKHpthsw.mjs → launch-CTq5gBim.mjs} +13 -13
  58. package/dist/{lightened-Cv4ToJRX.mjs → lightened-DikgC3-S.mjs} +2 -2
  59. package/dist/{logs-IagR9dWI.mjs → logs-DwI3Rkpf.mjs} +5 -5
  60. package/dist/{logs-DCQ3_tGS.mjs → logs-YDMfEohb.mjs} +3 -3
  61. package/dist/{macos-Ch7vuM-G.mjs → macos-BoNM-l6f.mjs} +14 -14
  62. package/dist/{macos-pc0aVVbN.mjs → macos-C_e9f5-5.mjs} +1 -1
  63. package/dist/maintenance-run.mjs +3 -3
  64. package/dist/{native-android-B3CEDq4R.mjs → native-android-Mv4YTrVN.mjs} +11 -11
  65. package/dist/{native-gradle-artifact-inputs-BLnO2hHR.mjs → native-gradle-artifact-inputs-C_TU6wPq.mjs} +2 -2
  66. package/dist/{native-runtime-e1OU8gEN.mjs → native-runtime-oDqT4UES.mjs} +3 -3
  67. package/dist/{native-xcode-inputs-DL3ETb8s.mjs → native-xcode-inputs-DsozghTX.mjs} +1 -1
  68. package/dist/{native-xcode-ios-D4e8k2Jy.mjs → native-xcode-ios-UXnH9NRY.mjs} +13 -13
  69. package/dist/offload-worker.d.mts +6 -1
  70. package/dist/offload-worker.mjs +40 -15
  71. package/dist/{phone-reverses-rvyxW1Fl.mjs → phone-reverses-B9WyCBKQ.mjs} +1 -1
  72. package/dist/{placement-log-nnGnu8mo.mjs → placement-log-D0DZLcJk.mjs} +1 -1
  73. package/dist/{plan-placement-D3JD-T-K.mjs → plan-placement-DqmLrWoX.mjs} +4 -4
  74. package/dist/{ports-CZJJfJ8Q.mjs → ports-C1_1Qgdy.mjs} +1 -1
  75. package/dist/{prebuild-Bhs7TTcz.mjs → prebuild-BptrXmh_.mjs} +6 -6
  76. package/dist/{project-DWEXiBA9.mjs → project-Dqqj3IkW.mjs} +11 -11
  77. package/dist/{react-native-android-C6Y270GS.mjs → react-native-android-Bsm_o4A8.mjs} +18 -18
  78. package/dist/{react-native-build-DaPfzf_e.mjs → react-native-build-BTUcE926.mjs} +4 -4
  79. package/dist/{react-native-doctor-DGMPxkPS.mjs → react-native-doctor-CfsCTKZt.mjs} +4 -4
  80. package/dist/{react-native-ios-dX48_92n.mjs → react-native-ios-_cK2pjZn.mjs} +25 -19
  81. package/dist/{reload-BGwblBJ9.mjs → reload-CXgce4Yo.mjs} +1 -1
  82. package/dist/{reload-DsOByDfy.mjs → reload-DsTMtMDU.mjs} +6 -6
  83. package/dist/{remote-D0uJZ76R.mjs → remote-BsmYHUxH.mjs} +6 -6
  84. package/dist/{result-DuimMZKJ.mjs → result-DK6nTO-M.mjs} +9 -10
  85. package/dist/{server-command-BC0EgMfY.mjs → server-command-Cu2w-UjB.mjs} +2 -2
  86. package/dist/{server-expo-15RjL0ir.mjs → server-expo-CjQwxvIi.mjs} +1 -1
  87. package/dist/server-expo-DbSypdNl.mjs +2 -0
  88. package/dist/{settings-CuP55ieT.mjs → settings-DcmVICCn.mjs} +2 -2
  89. package/dist/{settings-payload-BIGGQ3or.mjs → settings-payload-BoiFMiFq.mjs} +1 -1
  90. package/dist/{settings-write-D85j8mej.mjs → settings-write-B3LzEVwf.mjs} +2 -2
  91. package/dist/{slot-launch-D4oREwhx.mjs → slot-launch-DsQmPdlg.mjs} +2 -2
  92. package/dist/{stage-DKC6tDXu.mjs → stage-Dqk0qvaI.mjs} +1 -1
  93. package/dist/{start-BsEV4S-s.mjs → start-DIFiT2P5.mjs} +5 -5
  94. package/dist/{start-DfPSLc__.mjs → start-GkRBR1e3.mjs} +1 -1
  95. package/dist/{stats-ByEUblPr.mjs → stats-Dz08IopP.mjs} +3 -3
  96. package/dist/{status-C6hLlDqW.mjs → status-DhKv_e8a.mjs} +11 -12
  97. package/dist/{status-FP1MH9qn.mjs → status-Dost__Vn.mjs} +1 -1
  98. package/dist/{status-watch-D8s823CZ.mjs → status-watch-UecLnPQD.mjs} +1 -1
  99. package/dist/status-worker.mjs +1 -1
  100. package/dist/{stop-CpTy6bod.mjs → stop-CcZISot5.mjs} +2 -2
  101. package/dist/{stop-5LKfVv-0.mjs → stop-QFOqgICJ.mjs} +2 -2
  102. package/dist/{stop-BVI2-L7s.mjs → stop-vRe6TQk5.mjs} +9 -9
  103. package/dist/supervisor-run.mjs +7 -8
  104. package/dist/{support-CqyWfZZI.mjs → support-CNqJDBrH.mjs} +3 -3
  105. package/dist/support-DW575Dnx.mjs +2050 -0
  106. package/dist/{swiftpm-artifact-inputs-uq5oV7xR.mjs → swiftpm-artifact-inputs-DQTJTczX.mjs} +1 -1
  107. package/dist/{swiftpm-macos-BuhqYB3n.mjs → swiftpm-macos-BKczZ0k9.mjs} +4 -4
  108. package/dist/{toolchain-D_jotUG7.mjs → toolchain-BDlugtoh.mjs} +1 -1
  109. package/dist/{toolchain-s5ZmG42Z.mjs → toolchain-DRQyCvlp.mjs} +406 -8
  110. package/dist/web-D1m1LKEz.mjs +2 -0
  111. package/dist/{web-DwYCTFdh.mjs → web-TDWjHUT3.mjs} +3 -3
  112. package/dist/web-run.mjs +1 -1
  113. package/dist/{workspaces-B3ahAHZc.mjs → workspaces-CY3KSdC0.mjs} +2 -2
  114. package/dist/{worktree-CrjsPIs2.mjs → worktree-D6myrQ2H.mjs} +1 -1
  115. package/dist/{worktree-BhsML6GV.mjs → worktree-fKKe8j5M.mjs} +10 -10
  116. package/package.json +12 -7
  117. package/dist/device-capacity-BAkETfIl.mjs +0 -867
  118. package/dist/device-ios-DFaYFdar.mjs +0 -716
  119. package/dist/device-lease-run-DpiCnRbZ.mjs +0 -282
  120. package/dist/idle-shutdown-6i8CHoNq.mjs +0 -142
  121. package/dist/ios-signing-D-tSX1iF.mjs +0 -489
  122. package/dist/selection-xS50Mt0V.mjs +0 -791
  123. package/dist/server-expo-gYIypb0-.mjs +0 -2
  124. package/dist/support-D8OH0z98.mjs +0 -287
  125. package/dist/web-cCfM8kwV.mjs +0 -2
@@ -1,6 +1,6 @@
1
1
  import { t as getExecutor } from "./exec-CGuDzt40.mjs";
2
2
  import { s as gitAsync } from "./operation-exec-DKlBcKAL.mjs";
3
- import { n as buildCacheKey } from "./build-cache-Cqj4FGnX.mjs";
3
+ import { n as buildCacheKey } from "./build-cache-_fkewiwH.mjs";
4
4
  import { n as fingerprintNativeInputs, r as manifestDigest } from "./native-inputs-TRTTTRxt.mjs";
5
5
  import { a as sourceManifest, r as nativeFileDigest } from "./native-source-ChAGj7R1.mjs";
6
6
  import { createHash } from "node:crypto";
@@ -2,14 +2,14 @@ import { a as trackReportResource, b as spawnDeclared, t as getExecutor } from "
2
2
  import { y as sharedBuildCache } from "./workspace-state-BdZ-QgmB.mjs";
3
3
  import { J as resolveCacheProviderConfig, Vt as repoRootAsync, it as settingValueAt, z as projectSettingsContextAsync } from "./settings-B5IBDfTx.mjs";
4
4
  import { r as register } from "./cache-manifest-8JX9S1QJ.mjs";
5
- import { h as macosToolchainAsync, st as runCancellationSignal } from "./toolchain-s5ZmG42Z.mjs";
6
- import "./build-cache-Cqj4FGnX.mjs";
5
+ import { _t as runCancellationSignal, h as macosToolchainAsync } from "./toolchain-DRQyCvlp.mjs";
6
+ import "./build-cache-_fkewiwH.mjs";
7
7
  import { l as artifactCachePolicy, p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
8
8
  import { r as nativeFileDigest } from "./native-source-ChAGj7R1.mjs";
9
- import { a as validateInfoPlist, i as stageBundle, n as resolveBundleExtras, r as setBundleName, t as reidentifyBundle } from "./stage-DKC6tDXu.mjs";
9
+ import { a as validateInfoPlist, i as stageBundle, n as resolveBundleExtras, r as setBundleName, t as reidentifyBundle } from "./stage-Dqk0qvaI.mjs";
10
10
  import { t as validateMacosArtifactPlatform } from "./artifact-platform-DqCWUieN.mjs";
11
11
  import { t as logLines } from "./run-N-BbRxnC.mjs";
12
- import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-uq5oV7xR.mjs";
12
+ import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-DQTJTczX.mjs";
13
13
  import { createHash } from "node:crypto";
14
14
  import { createReadStream, createWriteStream, existsSync, realpathSync } from "node:fs";
15
15
  import { tmpdir } from "node:os";
@@ -1,2 +1,2 @@
1
- import { h as macosToolchainAsync, m as macosToolchain } from "./toolchain-s5ZmG42Z.mjs";
1
+ import { h as macosToolchainAsync, m as macosToolchain } from "./toolchain-DRQyCvlp.mjs";
2
2
  export { macosToolchain, macosToolchainAsync };
@@ -1,14 +1,14 @@
1
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
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-DWI9tGPU.mjs";
4
+ import { a as formatElapsed, l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
5
5
  import { a as killOnAbort } from "./operation-exec-DKlBcKAL.mjs";
6
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-15RjL0ir.mjs";
9
+ import { t as cleanLine } from "./server-expo-CjQwxvIi.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;
@@ -2429,4 +2827,4 @@ function toolchainMismatches(target, worker) {
2429
2827
  return out;
2430
2828
  }
2431
2829
  //#endregion
2432
- 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 };
@@ -0,0 +1,2 @@
1
+ import { n as webCommand, t as runWeb } from "./web-TDWjHUT3.mjs";
2
+ export { webCommand as default, runWeb };
@@ -1,12 +1,12 @@
1
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-DWI9tGPU.mjs";
2
+ import { f as refuseNoProject, l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
3
3
  import { D as upsertProject, k as withConfigLockAsync, m as getProject } from "./config-BW0fAtoK.mjs";
4
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-DWEXiBA9.mjs";
5
+ import { f as projectRegistry, n as findCommandWorkspace } from "./project-Dqqj3IkW.mjs";
6
6
  import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-_WTria-r.mjs";
7
7
  import { o as readWebRecord, r as cdpEndpoint } from "./state-CtmYTRWm.mjs";
8
8
  import { t as liveWebRecord } from "./page-Dj8IqvGM.mjs";
9
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-e1OU8gEN.mjs";
9
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-oDqT4UES.mjs";
10
10
  import chalk from "chalk";
11
11
  //#region src/commands/web.ts
12
12
  const printNote = (line) => console.error(line);
package/dist/web-run.mjs CHANGED
@@ -3,7 +3,7 @@ import { Dt as recordCreatedDevice } from "./android-Iq0M2t2d.mjs";
3
3
  import { f as signalProcessTree } from "./metro-B5PVz0Wv.mjs";
4
4
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
5
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-C8kBq9w0.mjs";
6
+ import { l as probeWebDrivers } from "./activity-BQpJpAjA.mjs";
7
7
  import { t as connectOwnedBrowser } from "./cdp-C216kOAn.mjs";
8
8
  import { t as relaunchWithLogFile } from "./detached-entry-tfrgGVWb.mjs";
9
9
  import { i as chromeArgs, n as DESKTOP_PAGE, r as PHONE_SCREEN } from "./chrome-C8sC5tdl.mjs";
@@ -1,7 +1,7 @@
1
1
  import { C as operationState, D as ownership_claim_exports, T as process_identity_exports, _ as declareSpawnsOn, d as throwIfCancelled, f as WorkspaceProcessCleanupError, h as workspaceProcessLockPath, l as cancellableSleep, m as workspaceProcessLockError, p as withWorkspaceProcessLock, t as getExecutor, x as stopDeclaringSpawnsOn } from "./exec-CGuDzt40.mjs";
2
2
  import { A as workspaceName$1, E as workspaceDir, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey, u as workspaceLastUsed, w as workspaceAgentDeviceDir } from "./workspace-state-BdZ-QgmB.mjs";
3
3
  import { t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { a as formatElapsed, d as quotedPath$1, l as phaseLine, o as formatLongDuration, u as plural } from "./command-output-DWI9tGPU.mjs";
4
+ import { a as formatElapsed, d as quotedPath$1, l as phaseLine, o as formatLongDuration, u as plural } from "./command-output-CGxrQ3Bd.mjs";
5
5
  import { M as acquireAvdClaim, O as withConfigLock$1, _ as isPathPrefix$1, at as isOnMountedVolume, d as getConfigDir, ft as deviceSlotPlatforms, ht as projectDeviceSlots, k as withConfigLockAsync$1, m as getProject, ot as listMountedVolumes, rt as formatBytes, st as measuredDirectorySizeAsync, v as loadConfig$1 } from "./config-BW0fAtoK.mjs";
6
6
  import { c as gitQuiet, l as gitQuietAsync, t as runOperationFile } from "./operation-exec-DKlBcKAL.mjs";
7
7
  import { Pt as lockReason, Vt as repoRootAsync, Xt as worktreeLockAsync, Yt as worktreeLock, pt as resolveTailscaleBinary } from "./settings-B5IBDfTx.mjs";
@@ -10,7 +10,7 @@ import { B as listOrphanedAvdDirectories, C as deleteAvd, Dt as recordCreatedDev
10
10
  import { c as pidExists, f as signalProcessTree, p as signalProcessTreeAsync } from "./metro-B5PVz0Wv.mjs";
11
11
  import { _ as chromeProcessStateAsync, c as webClaimRoot, i as clearWebRecord, o as readWebRecord, p as webProfileDir, t as CDP_PORT_LABEL, u as webFacts, v as liveProfileHolder, y as removeSingletonFiles } from "./state-CtmYTRWm.mjs";
12
12
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
13
- import { N as listBuildLocks, d as readAgentDeviceRecords, i as createActivityReaderAsync, r as createActivityReader, s as idleForMs, t as agentDeviceDaemon } from "./activity-C8kBq9w0.mjs";
13
+ import { N as listBuildLocks, d as readAgentDeviceRecords, i as createActivityReaderAsync, r as createActivityReader, s as idleForMs, t as agentDeviceDaemon } from "./activity-BQpJpAjA.mjs";
14
14
  import { C as renameIosSim, D as resolveOwnedIosSim, c as eraseIosSim, f as listAllIosSimsAsync, k as shutdownIosSim, o as deleteIosSim, p as listIosDeviceTypesAsync, s as deleteParkedIosSim, v as parkedSimName, y as parseRuntimeVersion } from "./ios-BdZdNsAj.mjs";
15
15
  import { r as releaseBrowserPort } from "./named-ports-CA0nB9Yw.mjs";
16
16
  import { createHash, randomUUID } from "node:crypto";
@@ -1,2 +1,2 @@
1
- import { a as nestedWorktrees, c as registerRemove, d as removalPath, f as removalRemedy, g as worktreeCommand, h as warmedWorkspace, i as excludeWatchmanCookies, l as registerWarm, m as warmWorktreeTarget, n as dependencyInstallCommand, o as porcelainPath, p as removeWorktreeTarget, r as excludePodChurn, s as reclaimKeys, t as customIosDirs, u as removalBlockers } from "./worktree-BhsML6GV.mjs";
1
+ import { a as nestedWorktrees, c as registerRemove, d as removalPath, f as removalRemedy, g as worktreeCommand, h as warmedWorkspace, i as excludeWatchmanCookies, l as registerWarm, m as warmWorktreeTarget, n as dependencyInstallCommand, o as porcelainPath, p as removeWorktreeTarget, r as excludePodChurn, s as reclaimKeys, t as customIosDirs, u as removalBlockers } from "./worktree-fKKe8j5M.mjs";
2
2
  export { customIosDirs, worktreeCommand as default, dependencyInstallCommand, excludePodChurn, excludeWatchmanCookies, nestedWorktrees, porcelainPath, reclaimKeys, registerRemove, registerWarm, removalBlockers, removalPath, removalRemedy, removeWorktreeTarget, warmWorktreeTarget, warmedWorkspace };
@@ -1,32 +1,32 @@
1
1
  import { C as operationState, D as ownership_claim_exports, T as process_identity_exports, _ as declareSpawnsOn, f as WorkspaceProcessCleanupError, n as isTimeoutError, t as getExecutor, x as stopDeclaringSpawnsOn } from "./exec-CGuDzt40.mjs";
2
2
  import { E as workspaceDir, a as recordWorkspaceUseAsync, l as withWorkspaceStateLockAsync, r as readWorkspaceState$1, w as workspaceAgentDeviceDir } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { a as formatElapsed, h as shortUdid, i as formatDuration, l as phaseLine, p as releasedLeaseFact, u as plural } from "./command-output-DWI9tGPU.mjs";
3
+ import { a as formatElapsed, h as shortUdid, i as formatDuration, l as phaseLine, p as releasedLeaseFact, u as plural } from "./command-output-CGxrQ3Bd.mjs";
4
4
  import { C as removeProject, D as upsertProject, M as acquireAvdClaim, _ as isPathPrefix$1, a as clearDevice, at as isOnMountedVolume, ct as volumeRootFor, d as getConfigDir, ht as projectDeviceSlots, it as isAbsentPath, k as withConfigLockAsync$1, m as getProject, ot as listMountedVolumes, st as measuredDirectorySizeAsync, v as loadConfig$1 } from "./config-BW0fAtoK.mjs";
5
5
  import { c as gitQuiet, l as gitQuietAsync, o as git, r as childEnvironment, s as gitAsync, t as runOperationFile } from "./operation-exec-DKlBcKAL.mjs";
6
6
  import { Ct as gitCommonDirOnDisk, Dt as isPodInstallChurn, Et as hasUncommittedWorkAsync, Ft as matchWorktreeEntry, Gt as restoreFileAsync, Ht as resolveFullRef, It as nativeCanonicalPath, Jt as warmWorktreePaths, Kt as sourceCheckoutOf, Lt as podsOutOfSync, Mt as locallyKnownUpstream, Q as resolveSettings, Rt as readWorktreeExclude, St as gitCommonDirAsync, Tt as hasRemoteAsync, Ut as resolveFullRefAsync, V as readCommittedSettings, X as resolveProjectSettings, Y as resolveIosProjectDir, _ as inertSettingWarning, _t as deleteBranchAsync, a as SETTING_SHAPE_REMEDY, bt as dirtyPathsAsync, gt as cloneIgnoredEntries, ht as branchExistsAsync, jt as listWorktreesAsync, nn as moveIgnoredTreesToTrash, qt as unpushedCommitsAsync, rn as restoreTrashedTrees, rt as settingShapeErrors, st as unknownSettingKeys, tn as disposeTrash, vt as depsOutOfSync, wt as hasPopulatedSubmodulesAsync, zt as removeWorktreeAsync } from "./settings-B5IBDfTx.mjs";
7
- import { F as readRemoteSessionId, M as readMetroTunnel, O as clearManagedMetroTunnel, P as readRemoteSession, T as MODE_COMMAND, i as findProjectRoot$1, k as clearRemoteSession, o as isMobileProject } from "./project-DWEXiBA9.mjs";
7
+ import { F as readRemoteSessionId, M as readMetroTunnel, O as clearManagedMetroTunnel, P as readRemoteSession, T as MODE_COMMAND, i as findProjectRoot$1, k as clearRemoteSession, o as isMobileProject } from "./project-Dqqj3IkW.mjs";
8
8
  import { t as macosAppPresent } from "./state-DSOUqO-o.mjs";
9
9
  import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-_WTria-r.mjs";
10
10
  import { bt as parkedMaxSetting, mt as POOL_SETTING_REMEDY } from "./android-Iq0M2t2d.mjs";
11
11
  import { c as pidExists, d as resolveProjectMetro, p as signalProcessTreeAsync, r as killMetroTreeAsync } from "./metro-B5PVz0Wv.mjs";
12
- import { A as diskPressureLevel, D as requestDevServerStop, En as runProcessOperation, G as planCacheEmptying, Ln as resolveEasCliBin, N as lowestFree, Ot as endRecordedSession, _ as resolveBudget, g as readVolumeSpaceAsync, h as readVolumeSpace, k as withdrawDevServerStopRequest, p as machineNumber, ur as discoverCaches } from "./ccache-BXtzEL6M.mjs";
12
+ import { I as readVolumeSpace, J as requestDevServerStop, L as readVolumeSpaceAsync, Or as discoverCaches, P as machineNumber, R as resolveBudget, Wn as runProcessOperation, X as withdrawDevServerStopRequest, Yt as endRecordedSession, Z as diskPressureLevel, et as lowestFree, ft as planCacheEmptying, tr as resolveEasCliBin } from "./device-capacity-C0PiTyRb.mjs";
13
13
  import { o as readWebRecord } from "./state-CtmYTRWm.mjs";
14
- import { C as stopTunnel, E as withManagedRemoteWorktreeRemovalLock, O as withManagedTunnelRemovalLock, _ as emptyWorkspaceDir, ht as teardownOwnedIosSim, mt as teardownOwnedBrowser, o as collectWorkspaceOutputs, pt as teardownOwnedAvd, v as withIdleWorkspace, x as resolveSupervisorTarget } from "./workspaces-B3ahAHZc.mjs";
14
+ import { C as stopTunnel, E as withManagedRemoteWorktreeRemovalLock, O as withManagedTunnelRemovalLock, _ as emptyWorkspaceDir, ht as teardownOwnedIosSim, mt as teardownOwnedBrowser, o as collectWorkspaceOutputs, pt as teardownOwnedAvd, v as withIdleWorkspace, x as resolveSupervisorTarget } from "./workspaces-CY3KSdC0.mjs";
15
15
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
16
- import { C as DEPS_ERROR, E as readPodState, M as HEARTBEAT_INTERVAL_MS, O as runCaptured, T as podsAreStale, X as podInstallCommand, k as runPodInstall, lt as cacheUser } from "./toolchain-s5ZmG42Z.mjs";
17
- import { D as releaseWorkspaceLeases, t as agentDeviceDaemon } from "./activity-C8kBq9w0.mjs";
16
+ import { C as DEPS_ERROR, E as readPodState, M as HEARTBEAT_INTERVAL_MS, O as runCaptured, T as podsAreStale, X as podInstallCommand, k as runPodInstall, yt as cacheUser } from "./toolchain-DRQyCvlp.mjs";
17
+ import { D as releaseWorkspaceLeases, t as agentDeviceDaemon } from "./activity-BQpJpAjA.mjs";
18
18
  import { R as readHostMemoryPressure, z as readHostMemoryPressureAsync } from "./ios-BdZdNsAj.mjs";
19
19
  import { t as clearNamedPorts } from "./named-ports-CA0nB9Yw.mjs";
20
20
  import { t as resolveMaintenanceSettings } from "./settings-D9LtQaUw.mjs";
21
- import { i as stopHostedAndroid } from "./hosted-android-ByG-ICuh.mjs";
22
- import { a as stopHostedIos, n as removePhoneReverses } from "./phone-reverses-rvyxW1Fl.mjs";
23
- import { r as stopMacosApp } from "./stop-CpTy6bod.mjs";
21
+ import { i as stopHostedAndroid } from "./hosted-android-y6K3DKQT.mjs";
22
+ import { a as stopHostedIos, n as removePhoneReverses } from "./phone-reverses-B9WyCBKQ.mjs";
23
+ import { r as stopMacosApp } from "./stop-CcZISot5.mjs";
24
24
  import { n as verifyCollectorOwnership } from "./ownership-hC7xvvxF.mjs";
25
25
  import { o as pullRequestLookupAsync, r as endedPullRequest } from "./pull-request-BpMTNkMB.mjs";
26
26
  import { c as mergeStateAsync, d as forgetStatusMeasures, t as startWarmProgress } from "./warm-progress-q11Vdvhh.mjs";
27
27
  import { r as workspaceRecordingEnabled } from "./recordings-AKZfsW2W.mjs";
28
28
  import { i as installedNpmTreeProblems, n as hasInstalledDependencies, t as dependencyState } from "./dependency-state-mL5g4H6K.mjs";
29
- import { a as discoverXcodeProject } from "./react-native-build-DaPfzf_e.mjs";
29
+ import { a as discoverXcodeProject } from "./react-native-build-BTUcE926.mjs";
30
30
  import { claimRemoveCommand, clearFreeClaimSet, readClaimSet, releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
31
31
  import { createHash, randomUUID } from "node:crypto";
32
32
  import { existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stim",
3
- "version": "1.33.0",
3
+ "version": "1.35.0",
4
4
  "description": "Stim: fast, isolated React Native environments for coding agents",
5
5
  "keywords": [
6
6
  "agent",
@@ -49,15 +49,20 @@
49
49
  "types": "./dist/pull-requests.d.mts",
50
50
  "module-sync": "./dist/pull-requests.mjs",
51
51
  "default": "./dist/pull-requests.mjs"
52
+ },
53
+ "./build-artifact-cache": {
54
+ "types": "./dist/build-artifact-cache.d.mts",
55
+ "module-sync": "./dist/build-artifact-cache.mjs",
56
+ "default": "./dist/build-artifact-cache.mjs"
52
57
  }
53
58
  },
54
59
  "dependencies": {
55
60
  "@expo/fingerprint": "^0.21.5",
56
- "@stim-cli/agent-driver": "1.33.0",
57
- "@stim-cli/agent-driver-agent-device": "1.33.0",
58
- "@stim-cli/cache": "1.33.0",
59
- "@stim-cli/core": "1.33.0",
60
- "@stim-cli/metro": "1.33.0",
61
+ "@stim-cli/agent-driver": "1.35.0",
62
+ "@stim-cli/agent-driver-agent-device": "1.35.0",
63
+ "@stim-cli/cache": "1.35.0",
64
+ "@stim-cli/core": "1.35.0",
65
+ "@stim-cli/metro": "1.35.0",
61
66
  "@xmldom/xmldom": "0.9.12",
62
67
  "chalk": "^6.0.0",
63
68
  "commander": "^15.0.0",
@@ -66,7 +71,7 @@
66
71
  "ws": "^8.21.3"
67
72
  },
68
73
  "devDependencies": {
69
- "@stim-cli/expo-build-cache": "1.33.0",
74
+ "@stim-cli/expo-build-cache": "1.35.0",
70
75
  "@types/cross-spawn": "^6.0.6",
71
76
  "@types/which": "^3.0.4",
72
77
  "@types/ws": "^8.18.1",