stim 1.17.2 → 1.18.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 (150) hide show
  1. package/README.md +50 -1
  2. package/dist/{activity-IRvJY_ru.mjs → activity-BxnkDZDi.mjs} +4 -4
  3. package/dist/{agent-device-usage-output-BK41vnzN.mjs → agent-device-usage-output-CZ66YA4T.mjs} +8 -8
  4. package/dist/android-BKA16DTf.mjs +4 -0
  5. package/dist/{android-B9yaNKwa.mjs → android-BvwuMUJ9.mjs} +192 -98
  6. package/dist/{android-DE4v59Mb.mjs → android-CBwCNicO.mjs} +2 -2
  7. package/dist/{android-B_YNZy61.mjs → android-DC3ZLuw0.mjs} +9 -9
  8. package/dist/{android-cas-ZFpjJBL_.mjs → android-cas-BBFyr9CA.mjs} +5 -5
  9. package/dist/android-cas-compiler.mjs +2 -2
  10. package/dist/api-D0VtFhqk.mjs +152 -0
  11. package/dist/api-run.d.mts +1 -0
  12. package/dist/api-run.mjs +145 -0
  13. package/dist/api.d.mts +212 -0
  14. package/dist/api.mjs +2 -0
  15. package/dist/{app-install-VPkI5WEg.mjs → app-install-D-PUENug.mjs} +3 -3
  16. package/dist/{attempt-Bk2ouQVL.mjs → attempt-DW-mQqM7.mjs} +14 -4
  17. package/dist/{budget-DfcgFdQB.mjs → budget-DIhL2BKx.mjs} +1578 -58
  18. package/dist/build-facts-DcLv2HSd.d.mts +111 -0
  19. package/dist/{cache-manifest-DnUHBJaU.mjs → cache-manifest-BI7ozfmH.mjs} +3 -3
  20. package/dist/cache-manifest.mjs +1 -1
  21. package/dist/{chrome-BrcVWQyD.mjs → chrome-DJnmnS5q.mjs} +1 -1
  22. package/dist/cli-DNJMwADx.mjs +68 -0
  23. package/dist/cli.mjs +1 -1
  24. package/dist/{client-SvBdgObD.mjs → client-DzhapoMB.mjs} +139 -32
  25. package/dist/collector-run.mjs +9 -9
  26. package/dist/{command-output-CDAIFD-8.mjs → command-output-CBtzyIgF.mjs} +2 -2
  27. package/dist/{config-D0DbpZtM.mjs → config-CgYMahz7.mjs} +5 -5
  28. package/dist/{created-devices-CpvzBL25.mjs → created-devices-DKbeWsiK.mjs} +2 -2
  29. package/dist/{dependency-state-CLcBHH2M.mjs → dependency-state-xKoOypBm.mjs} +2 -2
  30. package/dist/{detached-entry-CiTEgMR1.mjs → detached-entry-BLfcgc4O.mjs} +1 -1
  31. package/dist/{dev-client-B-XC4uRH.mjs → dev-client-CLnIH02x.mjs} +2 -2
  32. package/dist/{device-C8IOoJPv.mjs → device-D7oCHGWi.mjs} +8 -8
  33. package/dist/{device-capacity-ZC4XSZ4R.mjs → device-capacity-EUOOYr8T.mjs} +13 -13
  34. package/dist/device-host-worker.mjs +19 -19
  35. package/dist/{device-ios-C2Um-XUR.mjs → device-ios-6MewKKnc.mjs} +13 -13
  36. package/dist/{device-lease-DpoS36_u.mjs → device-lease-Co-EwifR.mjs} +9 -9
  37. package/dist/{device-lease-run-B8YltIH_.mjs → device-lease-run-w1xhCqIW.mjs} +4 -4
  38. package/dist/{device-pool-3o7s5lo4.mjs → device-pool-F5WvRPtD.mjs} +3 -3
  39. package/dist/{device-remote-hFSkpfQu.mjs → device-remote-tHbd1fKy.mjs} +15 -15
  40. package/dist/{doctor-CFv1fCrF.mjs → doctor-B9ckYUoU.mjs} +33 -30
  41. package/dist/{error-diagnostics-C-NMnhrk.mjs → error-diagnostics-BRXOqDzG.mjs} +11 -11
  42. package/dist/{exec-CaErVv7t.mjs → exec-DWhCZDGm.mjs} +65 -2
  43. package/dist/{gc-DEmkg3Xh.mjs → gc-Dh6mXOKC.mjs} +23 -469
  44. package/dist/{gradle-dJpre3Yn.mjs → gradle-C6GKnunQ.mjs} +6 -6
  45. package/dist/{guide-status-Du-ZQ3FD.mjs → guide-status-Bhf9SJXc.mjs} +3 -3
  46. package/dist/{guide-CSmhMTf8.mjs → guide-tm6igAaa.mjs} +290 -53
  47. package/dist/{hosted-android-E1Heoqnv.mjs → hosted-android-Bv285t_t.mjs} +3 -3
  48. package/dist/{hosted-client-Bp4knSwu.mjs → hosted-client-C-rMtppF.mjs} +2 -2
  49. package/dist/{hosted-ios-BnbeYOUD.mjs → hosted-ios-D5mNmtj4.mjs} +1 -1
  50. package/dist/{hosted-logs-OcgIBvCT.mjs → hosted-logs-DN8Iz4mJ.mjs} +9 -9
  51. package/dist/{hosted-macos-DcxKjtfH.mjs → hosted-macos-B-wEjlwG.mjs} +5 -5
  52. package/dist/{hosted-native-1Ebbig4w.mjs → hosted-native-DeeOG8xZ.mjs} +6 -6
  53. package/dist/{idle-shutdown-IGyNV8Cr.mjs → idle-shutdown-jjtxAn5C.mjs} +7 -8
  54. package/dist/{ios-DSfnPfse.mjs → ios-B3SbOWdw.mjs} +19 -7
  55. package/dist/{ios-Cr1h5gnO.mjs → ios-Bvbf0SGY.mjs} +1 -1
  56. package/dist/{ios-BJ4XUSe1.mjs → ios-CPdkoKaa.mjs} +181 -95
  57. package/dist/ios-DNpdygiv.mjs +7 -0
  58. package/dist/{ios-device-Ee7sDXfp.mjs → ios-device-Bn7jWDB1.mjs} +1 -1
  59. package/dist/{ios-device-pAN4t54-.mjs → ios-device-vOaByMhw.mjs} +3 -3
  60. package/dist/{ios-state-8L3lgum6.mjs → ios-state-B2pES6Vs.mjs} +1 -1
  61. package/dist/{launch-verify-lTnWZikR.mjs → launch-verify-hskNcWkZ.mjs} +5 -5
  62. package/dist/{logs-BAaS7gS2.mjs → logs-1Ylc1Ri6.mjs} +13 -13
  63. package/dist/macos-Ck7OBMNY.mjs +2 -0
  64. package/dist/{macos-BIRQS90f.mjs → macos-DF6C7wUU.mjs} +118 -34
  65. package/dist/macos-run.mjs +1 -1
  66. package/dist/maintenance-run.mjs +349 -47
  67. package/dist/{metro-g8NqiJp-.mjs → metro-Dh8T4Ytd.mjs} +5 -5
  68. package/dist/{metro-gateway-C-ijGI2F.mjs → metro-gateway-CEUw9RMH.mjs} +4 -4
  69. package/dist/{metro-store-CDDZHtPl.mjs → metro-store-BAHFcJm6.mjs} +16 -2
  70. package/dist/{named-ports-C8m8EQs2.mjs → named-ports-BFIz1Shz.mjs} +61 -6
  71. package/dist/{native-run-D1Q56rAD.mjs → native-run-B06FkmZx.mjs} +4 -4
  72. package/dist/{native-runtime-BEK171xQ.mjs → native-runtime-D_603JiC.mjs} +6 -6
  73. package/dist/{ndjson-PclOIwVY.mjs → ndjson-LGZAMsqa.mjs} +8 -4
  74. package/dist/offload-worker.d.mts +3 -17
  75. package/dist/offload-worker.mjs +10 -11
  76. package/dist/{ownership-DyRQru0q.mjs → ownership-D6Se7gg_.mjs} +3 -3
  77. package/dist/{page-QF_Ke10s.mjs → page-Bv9s2KwY.mjs} +1 -1
  78. package/dist/placement-log-BcPhRwR4.mjs +84 -0
  79. package/dist/{build-plan-BDsSi09V.mjs → plan-placement-CtxkCO54.mjs} +122 -48
  80. package/dist/{ports-4nYqxPWC.mjs → ports-BLTtfBq-.mjs} +3 -3
  81. package/dist/{prebuild-D7RUMkwN.mjs → prebuild-juCyreaR.mjs} +5 -5
  82. package/dist/preview-D5V07Nrl.mjs +987 -0
  83. package/dist/{rolldown-runtime-BsOwBuO_.mjs → process-identity-Biv3arCO.mjs} +11 -1
  84. package/dist/{project-D47Rh0ly.mjs → project-C3ChRLZy.mjs} +4 -68
  85. package/dist/projects-DD7dBTCj.mjs +92 -0
  86. package/dist/{pull-request-pxnDCQzn.mjs → pull-request-u4vp7zmK.mjs} +1 -1
  87. package/dist/pull-requests.mjs +1 -1
  88. package/dist/{recordings-BNgsD1Tr.mjs → recordings-BAWltsVt.mjs} +1 -1
  89. package/dist/{reload-DcRxj3qG.mjs → reload-DvyWzVjJ.mjs} +15 -15
  90. package/dist/{remote-cache-Ci4DQYYj.mjs → remote-cache-BGg7aGIZ.mjs} +5 -5
  91. package/dist/{run-CkE9y0nc.mjs → run-vhtDgpHO.mjs} +5 -5
  92. package/dist/{server-bare-BkrSxSsZ.mjs → server-bare-B9E7S1aR.mjs} +4 -5
  93. package/dist/server-expo-Db9HBUoa.mjs +2 -0
  94. package/dist/{server-expo-CHTyXD0G.mjs → server-expo-DoBHhuzK.mjs} +5 -6
  95. package/dist/{settings-SR9OmW9h.mjs → settings-Byp2AQ_E.mjs} +6 -5
  96. package/dist/{settings-Cfd-0r2d.mjs → settings-CQyMElEP.mjs} +24 -763
  97. package/dist/{settings-BBpMcDbD.mjs → settings-Djl-mpjX.mjs} +1 -1
  98. package/dist/settings.schema.json +126 -3
  99. package/dist/{simslim-BWNrc3M3.mjs → simslim-EHBQ2R4G.mjs} +7 -7
  100. package/dist/{slot-launch-DmjBmpQV.mjs → slot-launch-C1nqh4mu.mjs} +6 -6
  101. package/dist/{spawn-claims-D0XfSe8u.mjs → spawn-claims-Kqiifsk2.mjs} +1 -1
  102. package/dist/{spawn-entry-jw19m8Nl.mjs → spawn-entry-Dcb7sDUz.mjs} +1 -0
  103. package/dist/{stage-CzaiwFsI.mjs → stage-g_WqWeaE.mjs} +14 -3
  104. package/dist/{start-DUz3mYdb.mjs → start-D-IeOyoK.mjs} +19 -19
  105. package/dist/{start-AlfCPRVU.mjs → start-NTc1Ifqs.mjs} +1 -1
  106. package/dist/{state-PeQiJuIu.mjs → state-BG-aAk4k.mjs} +4 -4
  107. package/dist/{state-B4PQFXMW.d.mts → state-lKh8shBp.d.mts} +2 -3
  108. package/dist/{state-DyaNTgfR.mjs → state-xnqpx3AD.mjs} +2 -2
  109. package/dist/{stats-Bq4fJOdB.mjs → stats-DY6ekz8F.mjs} +5 -5
  110. package/dist/{status-DlKvVJBE.mjs → status-BEeL6IKz.mjs} +6 -4
  111. package/dist/{status-BA2pehwf.mjs → status-DCjZeE-K.mjs} +33 -34
  112. package/dist/{status-CzS4bPO9.mjs → status-Dcr0Qexd.mjs} +5 -5
  113. package/dist/{stim-desktop-Cnz8CPnl.mjs → stim-desktop-Behws_fi.mjs} +1 -1
  114. package/dist/{stim-installations-QMEI32v1.mjs → stim-installations-aR_WsNOA.mjs} +1 -1
  115. package/dist/{stop-BIiM49EY.mjs → stop-BGhKMOuH.mjs} +5 -5
  116. package/dist/{stop-DQIasgKp.mjs → stop-BTjs3xbc.mjs} +17 -18
  117. package/dist/{stop-zF1y04f2.mjs → stop-DIJtD2GL.mjs} +2 -2
  118. package/dist/supervisor-run.d.mts +24 -22
  119. package/dist/supervisor-run.mjs +21 -22
  120. package/dist/{support-CsJNVfOc.mjs → support-BaayeYCf.mjs} +7 -7
  121. package/dist/{support-WvD__tSV.mjs → support-Bwvbrq5-.mjs} +5 -5
  122. package/dist/{toolchain-DNyR3NPq.mjs → toolchain-Bnyd_K3A.mjs} +471 -22
  123. package/dist/{trigger-Bemu8ytw.mjs → trigger-CJMhwXe8.mjs} +5 -5
  124. package/dist/trigger-DWAq9hkw.mjs +2 -0
  125. package/dist/{warm-progress-DF4JRvYI.mjs → warm-progress-CjB-MP6H.mjs} +7 -7
  126. package/dist/web-B6_bFDn7.mjs +2 -0
  127. package/dist/{web-Dl0KSRHf.mjs → web-DTU0uiWj.mjs} +22 -22
  128. package/dist/web-run.mjs +10 -10
  129. package/dist/{workspace-state-DqcCbpE7.mjs → workspace-state-C59dqG-Z.mjs} +3 -3
  130. package/dist/{ownership-BMLqyBgJ.mjs → workspaces-xXItD8Dj.mjs} +577 -23
  131. package/dist/{worktree-j3IcFAI5.mjs → worktree-BJfnU6r5.mjs} +1 -1
  132. package/dist/{worktree-Be_7NLKy.mjs → worktree-BSYlofkq.mjs} +234 -35
  133. package/dist/worktree-CsKYexJM.mjs +753 -0
  134. package/package.json +10 -5
  135. package/dist/build-progress-D0WkjCPd.mjs +0 -1036
  136. package/dist/build-slots-41v_d2x9.mjs +0 -142
  137. package/dist/cli-CYXb29oE.mjs +0 -51
  138. package/dist/deps-iKw0eD4P.mjs +0 -438
  139. package/dist/errors-B6W7FkxQ.mjs +0 -15
  140. package/dist/idle-BXG__1BA.mjs +0 -176
  141. package/dist/in-use-CvGOUn-x.mjs +0 -130
  142. package/dist/preview-B-g9d7kV.mjs +0 -318
  143. package/dist/process-identity-BmRm1qV0.mjs +0 -12
  144. package/dist/server-expo-CeakhI8P.mjs +0 -2
  145. package/dist/state-BKa8wNN5.mjs +0 -148
  146. package/dist/stop-cause-rhmGfwvt.mjs +0 -97
  147. package/dist/trigger-CXts6qt1.mjs +0 -2
  148. package/dist/watchman-APYjXSQa.mjs +0 -48
  149. package/dist/workspace-process-lock-2mNzOlaB.mjs +0 -58
  150. package/dist/workspaces-Bcib97-6.mjs +0 -306
@@ -1,55 +1,54 @@
1
- import { t as getExecutor } from "./exec-CaErVv7t.mjs";
2
- import { E as upsertProject, L as deviceSlotFileKey, R as deviceSlotKey, V as parseDeviceSlotOption, W as validateDeviceSlot, p as getProject, u as getConcurrencyLimits, v as recordIosSchemeApprovals, z as deviceSlotPlatforms } from "./config-D0DbpZtM.mjs";
3
- import { n as ownership_claim_exports } from "./process-identity-BmRm1qV0.mjs";
4
- import { _ as stepTimer, c as launchErrorReport, g as stepClock, h as shortUdid, i as formatDuration, l as phaseLine, m as shortHash, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-CDAIFD-8.mjs";
5
- import { B as settingsLayers, C as metroWarmupUrlSetting, G as detectProviders, H as unknownSettingKeys, J as artifactCachePolicy, L as settingOriginScope, M as remoteIosSetting, N as resolveCacheProviderConfig, P as resolveSettings, R as settingShapeErrors, T as parseIosRemote, Tt as removeTemporaryEntry, V as tunnelModeSetting, X as optimizationBuildProfile, Z as resolveOptimizations, _ as iosSigningIdentitySha1SettingError, f as iosLanHostSetting, g as iosSigningIdentitySha1Setting, gt as repoRoot, h as iosSigningIdentitySettingError, i as SETTING_SHAPE_REMEDY, it as gitCommonDir, k as publicUrlSetting, m as iosSigningIdentitySetting, p as iosLanHostSettingError, u as cacheProviderSettingError, wt as makeTemporaryDirectory, x as metroPortSetting } from "./settings-Cfd-0r2d.mjs";
6
- import { n as appProjectProblem, r as detectIsExpo, s as findProjectRoot$1, t as NO_PROJECT_REFUSAL } from "./project-D47Rh0ly.mjs";
7
- import { l as resolveProjectMetro, o as pidExists, u as signalProcessTree } from "./metro-g8NqiJp-.mjs";
8
- import { c as writeWorkspaceState, g as workspaceAgentDeviceDir, i as recordWorkspaceUse, r as readWorkspaceState$1, v as workspaceDir, x as workspaceLogsDir$1 } from "./workspace-state-DqcCbpE7.mjs";
9
- import { t as budgetGate } from "./budget-DfcgFdQB.mjs";
10
- import { A as providerDownloadPath, D as fingerprintProject, E as fingerprintDiffRecord, L as untrackedMissLine, M as refingerprintAfterMutation, N as resolveBuild, O as inputsChangedDuringBuild, P as storeBuild, R as untrackedNativeFiles, S as configInputsChanged, T as filesystemBuildCapability, _ as waitForBuild, b as buildCacheKey, g as releaseBuildLock, j as providerUploadOutcome, k as prepareProviderDownloadDir, m as acquireBuildLock, v as waitForSharedBuild, x as changedDuringBuildLine } from "./device-lease-DpoS36_u.mjs";
11
- import { r as releaseBuildSlot, t as acquireBuildSlot } from "./build-slots-41v_d2x9.mjs";
12
- import { m as writeWorkspaceLaunch, n as MODE_EXPO, t as MODE_BARE } from "./state-BKa8wNN5.mjs";
13
- import { ft as parkedMaxSetting, ot as POOL_SETTING_REMEDY } from "./android-B_YNZy61.mjs";
14
- import { p as listIosRuntimes, r as clearIosAppData, u as listAllIosSims } from "./ios-DSfnPfse.mjs";
15
- import { a as workspaceLinks, i as workspaceLinkLine } from "./stim-desktop-Cnz8CPnl.mjs";
16
- import { _ as statsProjectKey$1, c as recordFinishedBuild, d as createRunRecorder, f as readRunEstimates, g as recordRunStats, l as startBuildProgress, m as recordCapacityRefusal, n as NO_BUILD_PROGRESS, u as tapBuildLog } from "./build-progress-D0WkjCPd.mjs";
17
- import { r as createNdjsonWriter } from "./ndjson-PclOIwVY.mjs";
18
- import { S as bundlerPin, _ as readBundleId, c as COMPILATION_CACHE_NOT_RUN, d as buildIos, g as readBundleExecutable, h as discoverXcodeProject, p as compilationCacheActivityLine, r as iosToolchain, v as resolveScheme } from "./toolchain-DNyR3NPq.mjs";
19
- import { a as offloadBuild, c as placementLoad, d as OffloadRefusal, f as namedBuildMachine, h as resolveBuildPlacement, i as closeOffload, l as remotePhaseText, n as buildPlacementCandidates, p as parseBuildMachineOption, r as chooseBuildMachine, s as offloadPlacement, u as simulatorRuntime } from "./client-SvBdgObD.mjs";
20
- import { r as hostedMetroSettings } from "./metro-gateway-C-ijGI2F.mjs";
21
- import { n as verifyCollectorOwnership } from "./ownership-DyRQru0q.mjs";
22
- import { r as checkDeviceCapacity } from "./device-capacity-ZC4XSZ4R.mjs";
23
- import { D as schemesFromInfoPlist, S as restartedAppNote, T as pickDevClientScheme, _ as installIosApp, a as IOS_DEV_MENU_OFF_DEFAULTS_PLIST, d as devClientUrl, l as clearOtherUserApps, r as DEFAULT_METRO_PORT, v as iosAppProcess, x as launchIosApp } from "./app-install-VPkI5WEg.mjs";
24
- import { n as devClientTakesDevMenuParams, t as devClientScheme } from "./dev-client-B-XC4uRH.mjs";
25
- import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
26
- import { a as runPodInstall, n as podsAreStale, r as readPodState } from "./deps-iKw0eD4P.mjs";
27
- import { i as staleNativeDirRefusal, n as recordPrebuild, r as runPrebuild, t as planPrebuild } from "./prebuild-D7RUMkwN.mjs";
28
- import { c as readMetroRecords, f as verifyLaunch, i as RELEASE_VERIFY_WAIT_MS, l as unattributedLaunchLines, n as LAUNCH_FATAL, o as isBundleProof, p as verifyReleaseLaunch, r as LAUNCH_UNVERIFIED, s as readCollectorRecords, t as LAUNCH_BUNDLING, u as unverifiedLaunchLines } from "./launch-verify-lTnWZikR.mjs";
29
- import { a as acquireRunLease, c as lostRefusal, d as runLease, f as waitFlagConflict, o as leaseExpiryText, s as lostLine, t as DEBUG_VERIFY_STEP_MS, u as releaseLeaseOnSignal } from "./device-lease-run-B8YltIH_.mjs";
30
- import { n as clearIosAdoptionPending } from "./device-ios-C2Um-XUR.mjs";
31
- import { _ as resolveSimulatorAppFlag, a as deviceModelRefusal, c as iosProviderRunOptions, d as podAction, f as printDiagnostics, g as resolveRuntime, h as resolveIosWait, i as deviceLabel, l as isReleaseConfiguration, m as resolveDeviceType, n as buildLogFile, o as deviceShortName, p as resolveConfiguration, r as createIosDeviceWaitRun, s as iosConfigurationSetting, t as appNameFromPath, u as ownedSimFailure, v as simulatorBuildArch, y as xcodeFailureReport } from "./support-CsJNVfOc.mjs";
32
- import { i as writeDevicePlacement, n as readHostedIos, o as writeHostedIos } from "./ios-state-8L3lgum6.mjs";
33
- import { a as refusePlan, b as devicePlacementLine, c as skippedMissReason, f as swapJsBundle, h as ensureOwnedDevice, i as printPlan, m as ensureBooted, n as planFlagRefusal, o as explainBuildMiss, p as didSetUpDevice, r as planPayload, s as fingerprintErrorMissReason, t as planCachedBuild, v as warmMetro, y as automaticDevicePlacement } from "./build-plan-BDsSi09V.mjs";
34
- import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-DmjBmpQV.mjs";
35
- import { a as easAuthNote, c as loadProjectProvider, f as resolveEasCliBin, i as checkEasAuth, m as uploadRemote, n as UPLOAD_TIMEOUT_MS, o as exitAfterFlush, p as resolveRemote, r as cacheLevel, s as isEasAuthFailureText, t as RESOLVE_TIMEOUT_MS } from "./remote-cache-Ci4DQYYj.mjs";
36
- import { O as readRemoteSimulatorArch, a as ensureMetroReachable, k as gateMetroOrigin, l as remoteIosDeps, n as binOnPath, o as ensureRemoteBootOwned, r as bundleEntryPoint, u as resolveRemoteContext, w as ownedSessionName } from "./device-remote-hFSkpfQu.mjs";
37
- import { d as runCancellationSignal, f as withNativeBuildRun, r as cancelledFailure, u as runCancellation } from "./native-run-D1Q56rAD.mjs";
38
- import { a as isEasBuildFailure, i as easDeviceBuildRemedy, o as planEasDevelopmentBuild, s as resolveEasDevelopmentBuild } from "./simslim-BWNrc3M3.mjs";
39
- import { c as startDevServer, h as detectBundleId } from "./start-DUz3mYdb.mjs";
40
- import { a as sleep, i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-BEK171xQ.mjs";
41
- import { t as selectFromPool } from "./device-pool-3o7s5lo4.mjs";
42
- import { a as printNativeCrashReport, n as IOS_CRASH_REPORT_RETRY, o as simulatorConsolePaths, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-C-NMnhrk.mjs";
43
- import { a as iosPoolCandidates, c as isWirelessIosDevice, f as resolveIosPhysicalDevice, i as iosDeviceProcess, l as listIosDevices, n as installIosDeviceApp, o as iosPoolNoCandidatesRefusal, p as verifyIosDeviceReleaseLaunch, r as iosDeviceBounds, t as awaitIosDeviceLaunch, u as localNetworkPending } from "./ios-device-pAN4t54-.mjs";
44
- import { n as prepareHostedIos, t as placeHostedIos } from "./hosted-ios-BnbeYOUD.mjs";
45
- import { X509Certificate } from "node:crypto";
1
+ import { n as ownership_claim_exports } from "./process-identity-Biv3arCO.mjs";
2
+ import { t as getExecutor } from "./exec-DWhCZDGm.mjs";
3
+ import { t as spawnEntry } from "./spawn-entry-Dcb7sDUz.mjs";
4
+ import { _ as stepTimer, c as launchErrorReport, g as stepClock, i as formatDuration, l as phaseLine, m as shortHash, n as appReadinessMessage, v as launchErrorPreview } from "./command-output-CBtzyIgF.mjs";
5
+ import { E as upsertProject, L as deviceSlotFileKey, R as deviceSlotKey, V as parseDeviceSlotOption, W as validateDeviceSlot, p as getProject, u as getConcurrencyLimits, v as recordIosSchemeApprovals, z as deviceSlotPlatforms } from "./config-CgYMahz7.mjs";
6
+ import { D as makeTemporaryDirectory, O as removeTemporaryEntry, s as gitCommonDir, y as repoRoot } from "./worktree-CsKYexJM.mjs";
7
+ import { i as detectIsExpo, n as appProjectProblem, s as findProjectRoot$1, t as NO_PROJECT_REFUSAL } from "./project-C3ChRLZy.mjs";
8
+ import { l as resolveProjectMetro, o as pidExists, u as signalProcessTree } from "./metro-Dh8T4Ytd.mjs";
9
+ import { c as writeWorkspaceState, g as workspaceAgentDeviceDir, i as recordWorkspaceUse, r as readWorkspaceState$1, v as workspaceDir, x as workspaceLogsDir$1 } from "./workspace-state-C59dqG-Z.mjs";
10
+ import { F as recordFinishedBuild, Ft as MODE_BARE, I as startBuildProgress, It as MODE_EXPO, Jt as writeWorkspaceLaunch, L as tapBuildLog, O as NO_BUILD_PROGRESS, R as createRunRecorder, U as recordRunStats, V as recordCapacityRefusal, W as statsProjectKey$1, t as budgetGate, z as readRunEstimates } from "./budget-DIhL2BKx.mjs";
11
+ import { N as releaseBuildSlot, j as acquireBuildSlot } from "./workspaces-xXItD8Dj.mjs";
12
+ import { A as providerDownloadPath, D as fingerprintProject, E as fingerprintDiffRecord, L as untrackedMissLine, M as refingerprintAfterMutation, N as resolveBuild, O as inputsChangedDuringBuild, P as storeBuild, R as untrackedNativeFiles, S as configInputsChanged, T as filesystemBuildCapability, _ as waitForBuild, b as buildCacheKey, g as releaseBuildLock, j as providerUploadOutcome, k as prepareProviderDownloadDir, m as acquireBuildLock, v as waitForSharedBuild, x as changedDuringBuildLine } from "./device-lease-Co-EwifR.mjs";
13
+ import { ft as parkedMaxSetting, ot as POOL_SETTING_REMEDY } from "./android-DC3ZLuw0.mjs";
14
+ import { d as listAllIosSims, i as createIosSimSnapshot, m as listIosRuntimes, r as clearIosAppData } from "./ios-B3SbOWdw.mjs";
15
+ import { a as workspaceLinks, i as workspaceLinkLine } from "./stim-desktop-Behws_fi.mjs";
16
+ import { A as publicUrlSetting, C as metroWarmupUrlSetting, F as resolveSettings, H as tunnelModeSetting, K as detectProviders, N as remoteIosSetting, P as resolveCacheProviderConfig, Q as resolveOptimizations, R as settingOriginScope, T as parseIosRemote, U as unknownSettingKeys, V as settingsLayers, Y as artifactCachePolicy, Z as optimizationBuildProfile, _ as iosSigningIdentitySha1SettingError, f as iosLanHostSetting, g as iosSigningIdentitySha1Setting, h as iosSigningIdentitySettingError, i as SETTING_SHAPE_REMEDY, m as iosSigningIdentitySetting, p as iosLanHostSettingError, u as cacheProviderSettingError, x as metroPortSetting, z as settingShapeErrors } from "./settings-CQyMElEP.mjs";
17
+ import { r as createNdjsonWriter } from "./ndjson-LGZAMsqa.mjs";
18
+ import { _ as resolveBuildPlacement, a as offloadBuild, c as placementLoad, d as setRemoteLogSink, f as OffloadRefusal, h as parseBuildMachineOption, i as closeOffload, l as remotePhaseText, m as namedBuildMachine, n as buildPlacementCandidates, r as chooseBuildMachine, s as offloadPlacement, u as simulatorRuntime } from "./client-DzhapoMB.mjs";
19
+ import { r as checkDeviceCapacity } from "./device-capacity-EUOOYr8T.mjs";
20
+ import { C as readBundleId, O as bundlerPin, S as readBundleExecutable, _ as buildIos, l as podsAreStale, m as COMPILATION_CACHE_NOT_RUN, p as runPodInstall, r as iosToolchain, u as readPodState, w as resolveScheme, x as discoverXcodeProject, y as compilationCacheActivityLine } from "./toolchain-Bnyd_K3A.mjs";
21
+ import { r as hostedMetroSettings } from "./metro-gateway-CEUw9RMH.mjs";
22
+ import { i as writeDevicePlacement, n as readHostedIos, o as writeHostedIos } from "./ios-state-B2pES6Vs.mjs";
23
+ import { a as printPlan, b as automaticDevicePlacement, c as fingerprintErrorMissReason, g as ensureOwnedDevice, h as ensureBooted, i as planPayload, l as skippedMissReason, m as didSetUpDevice, n as planCachedBuild, o as refusePlan, p as swapJsBundle, r as planFlagRefusal, s as explainBuildMiss, t as planHostedDevice, x as devicePlacementLine, y as warmMetro } from "./plan-placement-CtxkCO54.mjs";
24
+ import { n as devicePlacementRecord, t as buildPlacementRecord } from "./placement-log-BcPhRwR4.mjs";
25
+ import { S as restartedAppNote, _ as installIosApp, a as IOS_DEV_MENU_OFF_DEFAULTS_PLIST, d as devClientUrl, l as clearOtherUserApps, r as DEFAULT_METRO_PORT, v as iosAppProcess, x as launchIosApp } from "./app-install-D-PUENug.mjs";
26
+ import { n as nativeRunCommand, r as siblingPlatformSlots, t as launchSlotScope } from "./slot-launch-C1nqh4mu.mjs";
27
+ import { c as readMetroRecords, f as verifyLaunch, i as RELEASE_VERIFY_WAIT_MS, l as unattributedLaunchLines, n as LAUNCH_FATAL, o as isBundleProof, p as verifyReleaseLaunch, r as LAUNCH_UNVERIFIED, s as readCollectorRecords, t as LAUNCH_BUNDLING, u as unverifiedLaunchLines } from "./launch-verify-hskNcWkZ.mjs";
28
+ import { a as easAuthNote, c as loadProjectProvider, f as resolveEasCliBin, i as checkEasAuth, m as uploadRemote, n as UPLOAD_TIMEOUT_MS, o as exitAfterFlush, p as resolveRemote, r as cacheLevel, s as isEasAuthFailureText, t as RESOLVE_TIMEOUT_MS } from "./remote-cache-BGg7aGIZ.mjs";
29
+ import { n as devClientTakesDevMenuParams, t as devClientScheme } from "./dev-client-CLnIH02x.mjs";
30
+ import { O as readRemoteSimulatorArch, a as ensureMetroReachable, k as gateMetroOrigin, l as remoteIosDeps, n as binOnPath, o as ensureRemoteBootOwned, r as bundleEntryPoint, u as resolveRemoteContext, w as ownedSessionName } from "./device-remote-tHbd1fKy.mjs";
31
+ import { d as runCancellationSignal, f as withNativeBuildRun, r as cancelledFailure, u as runCancellation } from "./native-run-B06FkmZx.mjs";
32
+ import { a as isEasBuildFailure, i as easDeviceBuildRemedy, o as planEasDevelopmentBuild, s as resolveEasDevelopmentBuild } from "./simslim-EHBQ2R4G.mjs";
33
+ import { c as startDevServer, h as detectBundleId } from "./start-D-IeOyoK.mjs";
34
+ import { a as acquireRunLease, c as lostRefusal, d as runLease, f as waitFlagConflict, o as leaseExpiryText, s as lostLine, t as DEBUG_VERIFY_STEP_MS, u as releaseLeaseOnSignal } from "./device-lease-run-w1xhCqIW.mjs";
35
+ import { n as verifyCollectorOwnership } from "./ownership-D6Se7gg_.mjs";
36
+ import { a as sleep, i as launchOutcomeRecord, n as ensureWorkspaceStorageSafely, r as isPhysicalDeviceRequest, t as ensureDevServer } from "./native-runtime-D_603JiC.mjs";
37
+ import { n as clearIosAdoptionPending } from "./device-ios-6MewKKnc.mjs";
38
+ import { t as selectFromPool } from "./device-pool-F5WvRPtD.mjs";
39
+ import { i as staleNativeDirRefusal, n as recordPrebuild, r as runPrebuild, t as planPrebuild } from "./prebuild-juCyreaR.mjs";
40
+ import { a as printNativeCrashReport, n as IOS_CRASH_REPORT_RETRY, o as simulatorConsolePaths, r as captureNativeCrashes, t as errorDiagnostics } from "./error-diagnostics-BRXOqDzG.mjs";
41
+ import { _ as resolveSimulatorAppFlag, a as deviceModelRefusal, c as iosProviderRunOptions, d as podAction, f as printDiagnostics, g as resolveRuntime, h as resolveIosWait, i as deviceLabel, l as isReleaseConfiguration, m as resolveDeviceType, n as buildLogFile, o as deviceShortName, p as resolveConfiguration, r as createIosDeviceWaitRun, t as appNameFromPath, u as ownedSimFailure, v as simulatorBuildArch, y as xcodeFailureReport } from "./support-BaayeYCf.mjs";
42
+ import { n as prepareHostedIos, t as placeHostedIos } from "./hosted-ios-D5mNmtj4.mjs";
43
+ import { a as iosPoolCandidates, c as isWirelessIosDevice, f as resolveIosPhysicalDevice, i as iosDeviceProcess, l as listIosDevices, n as installIosDeviceApp, o as iosPoolNoCandidatesRefusal, p as verifyIosDeviceReleaseLaunch, r as iosDeviceBounds, t as awaitIosDeviceLaunch, u as localNetworkPending } from "./ios-device-vOaByMhw.mjs";
46
44
  import { existsSync, mkdirSync, mkdtempSync, openSync, rmSync, writeFileSync } from "node:fs";
47
45
  import { basename, join } from "node:path";
48
- import { hostSimulatorArch, workspaceId } from "@stim-cli/core";
49
- import { InvalidArgumentError } from "commander";
50
46
  import { buildDiagnostics, hostedIosStatus, machineCapacity, parseMachine } from "@stim-cli/core/state";
51
47
  import { networkInterfaces, tmpdir } from "node:os";
52
48
  import chalk from "chalk";
49
+ import { InvalidArgumentError } from "commander";
50
+ import { hostSimulatorArch, workspaceId } from "@stim-cli/core";
51
+ import { X509Certificate } from "node:crypto";
53
52
  import { createWarnOnce, loadCacheProvider, resolveTieredBuild, storeTieredBuild } from "@stim-cli/cache";
54
53
  //#region src/engine/ios-lan.ts
55
54
  const IP_TXT = "ip.txt";
@@ -385,7 +384,18 @@ async function acquireIosArtifact({ root, logFile, udid, remoteDestination, host
385
384
  let hereReason = "no remote Mac is paired";
386
385
  let slotWaitMs;
387
386
  let builtOn;
388
- const fallBack = (reason, line = reason) => {
387
+ const fallBack = (reason, line = reason, info = {}) => {
388
+ logWriter().write(buildPlacementRecord({
389
+ platform: "ios",
390
+ buildMachine,
391
+ candidates: info.candidates,
392
+ event: "placement_fallback",
393
+ fallback: {
394
+ code: info.code ?? "fallback",
395
+ reason,
396
+ machine: info.machine
397
+ }
398
+ }));
389
399
  if (namedBuildMachine(buildMachine)) throw new OffloadRefusal(buildMachine, reason);
390
400
  offloadFallback = reason;
391
401
  buildFailure = {
@@ -795,12 +805,21 @@ async function acquireIosArtifact({ root, logFile, udid, remoteDestination, host
795
805
  });
796
806
  if (!placement.offload) {
797
807
  hereReason = placement.reason;
808
+ logWriter().write(buildPlacementRecord({
809
+ platform: "ios",
810
+ buildMachine,
811
+ stays: {
812
+ code: placement.code,
813
+ reason: placement.reason
814
+ }
815
+ }));
798
816
  if (mode !== "off") phase("build", `placement: here (${placement.reason})`);
799
817
  return null;
800
818
  }
801
819
  return {
802
820
  mode,
803
821
  here,
822
+ code: placement.code,
804
823
  reason: placement.reason,
805
824
  runtime,
806
825
  machines
@@ -808,12 +827,13 @@ async function acquireIosArtifact({ root, logFile, udid, remoteDestination, host
808
827
  }
809
828
  /** Asks the paired machines once the post-mutation key is known; null builds here. */
810
829
  async function chooseMachine(candidate) {
830
+ let asked = [];
811
831
  const choice = await chooseBuildMachine({
812
832
  projectRoot: root,
813
833
  target: {
814
834
  platform: "ios",
815
835
  local: {
816
- ...iosToolchain(),
836
+ ...iosToolchain(root),
817
837
  ...hostedDestination ? { arch: hostedDestination.architecture === "x86_64" ? "x64" : "arm64" } : {}
818
838
  },
819
839
  runtime: candidate.runtime,
@@ -823,15 +843,28 @@ async function acquireIosArtifact({ root, logFile, udid, remoteDestination, host
823
843
  here: candidate.here,
824
844
  note: (line) => note(chalk.dim(phaseLine("build", `offload: ${line}`))),
825
845
  machines: candidate.machines,
826
- selected: buildMachine
846
+ selected: buildMachine,
847
+ onCandidates: (each) => asked = each
827
848
  });
828
849
  if (typeof choice === "string") {
829
850
  const only = candidate.machines.length === 1 ? candidate.machines[0].machine : null;
830
851
  if (only && choice.startsWith(`${only}: `)) fallbackMachine = only;
831
- fallBack(choice);
852
+ fallBack(choice, choice, {
853
+ code: "no-remote-mac-took-it",
854
+ candidates: asked
855
+ });
832
856
  return null;
833
857
  }
834
858
  openOffload.choice = choice;
859
+ logWriter().write(buildPlacementRecord({
860
+ platform: "ios",
861
+ buildMachine,
862
+ candidates: asked,
863
+ chose: {
864
+ machine: choice.machine,
865
+ reason: `${candidate.reason}${placementLoad(choice)}`
866
+ }
867
+ }));
835
868
  phase("build", `placement: ${choice.machine} (${candidate.reason}${placementLoad(choice)})`);
836
869
  return choice;
837
870
  }
@@ -907,7 +940,10 @@ async function acquireIosArtifact({ root, logFile, udid, remoteDestination, host
907
940
  if (!outcome.ok || !prepared) {
908
941
  const why = reason ?? "the stored app is not installable";
909
942
  fallbackMachine = choice.machine;
910
- fallBack(`${choice.machine}: ${why}`, `offload failed: ${why}`);
943
+ fallBack(`${choice.machine}: ${why}`, `offload failed: ${why}`, {
944
+ code: "offload-failed",
945
+ machine: choice.machine
946
+ });
911
947
  logWriter().write({
912
948
  src: "build",
913
949
  level: "warn",
@@ -1312,7 +1348,7 @@ function selectIosTarget({ root, slot, opts, settings, physical, release, metroC
1312
1348
  async function selectIosPlacement(args) {
1313
1349
  const selection = selectIosTarget(args);
1314
1350
  if ("failure" in selection || selection.machine !== "auto") return selection;
1315
- const { root, slot, d, opts, deviceType, runtime, noWait, phase, release, metroCheck } = args;
1351
+ const { root, slot, d, opts, deviceType, runtime, noWait, phase, log, release, metroCheck } = args;
1316
1352
  const viewer = resolveSimulatorAppFlag(opts.simulatorApp, args.physical, null);
1317
1353
  if ("refusal" in viewer) return { failure: viewer.refusal };
1318
1354
  const refusal = args.validateSelectors();
@@ -1327,6 +1363,11 @@ async function selectIosPlacement(args) {
1327
1363
  noWait
1328
1364
  });
1329
1365
  phase("placement:", devicePlacementLine(placed.placement, placed.skipped));
1366
+ log?.(devicePlacementRecord({
1367
+ platform: "ios",
1368
+ fromFlag: opts.remote !== void 0,
1369
+ placed
1370
+ }));
1330
1371
  if (placed.target && !release && !metroCheck) return { failure: {
1331
1372
  code: "STIM_BAD_ARG",
1332
1373
  message: "Hosted Debug runs require the local Metro supervisor; --no-metro-check cannot be used.",
@@ -1376,7 +1417,7 @@ function hostedIosBuildTarget(target) {
1376
1417
  architecture: target.choice.architecture
1377
1418
  } } : {};
1378
1419
  }
1379
- async function iosPlacementBudget(d, root, note, hosted, automatic) {
1420
+ async function iosPlacementBudget(d, root, note, hosted, automatic, simSnapshot) {
1380
1421
  if (automatic) return {
1381
1422
  ...automatic,
1382
1423
  refusal: hosted ? null : automatic.refusal
@@ -1386,7 +1427,8 @@ async function iosPlacementBudget(d, root, note, hosted, automatic) {
1386
1427
  refusal: null
1387
1428
  } : d.budgetGate({
1388
1429
  root,
1389
- note
1430
+ note,
1431
+ simSnapshot
1390
1432
  });
1391
1433
  }
1392
1434
  function hostedIosMetroNote(hosted, settings, note, simulatorApp) {
@@ -2932,10 +2974,9 @@ async function planIos(opts, d, schemeRefusal) {
2932
2974
  refusal: eas.missing
2933
2975
  }), json);
2934
2976
  }
2935
- const remoteBackend = remoteIosSetting(settings);
2936
- if (remoteBackend) return refuse({
2977
+ if (iosRemote?.kind === "backend") return refuse({
2937
2978
  code: "STIM_BAD_ARG",
2938
- message: `ios.remote routes this workspace's runs to a ${remoteBackend.kind === "backend" ? remoteBackend.backend : remoteBackend.machine} device, whose architecture --plan cannot read without a session.`,
2979
+ message: `ios.remote is ${iosRemote.backend}, whose simulator architecture --plan cannot read without a session.`,
2939
2980
  remedy: "Run `stim ios` to build for the remote device, or unset ios.remote to plan the owned simulator."
2940
2981
  });
2941
2982
  const refusal = schemeRefusal(root, opts.scheme, isExpo);
@@ -2958,12 +2999,31 @@ async function planIos(opts, d, schemeRefusal) {
2958
2999
  message: `Could not fingerprint ${root}: @expo/fingerprint produced no hash for it.`,
2959
3000
  remedy: "Check the project native inputs and the @expo/fingerprint error above, then retry."
2960
3001
  });
2961
- const arch = simulatorBuildArch({
3002
+ const keyArch = (remoteArch) => simulatorBuildArch({
2962
3003
  physical: false,
2963
- remoteArch: null,
3004
+ remoteArch,
2964
3005
  hostArch: d.hostSimulatorArch(),
2965
3006
  configuration
2966
3007
  });
3008
+ let arch = keyArch(null);
3009
+ let placement;
3010
+ if (iosRemote?.kind === "machine") {
3011
+ const planned = await planHostedDevice({
3012
+ root,
3013
+ slot,
3014
+ platform: "ios",
3015
+ machine: iosRemote.machine,
3016
+ selectors: hostedIosSelectors(resolveDeviceType(opts.deviceType, settings), resolveRuntime(opts.runtime, settings)),
3017
+ sameKey: (choice) => keyArch("runtime" in choice ? choice.architecture : null) === arch
3018
+ });
3019
+ if (planned.kind === "unknown") return refuse({
3020
+ code: "STIM_BAD_ARG",
3021
+ message: `ios.remote is ${iosRemote.machine}, and its simulator architecture is unknown here: ${planned.reason}.`,
3022
+ remedy: "Run `stim ios` to build for the remote device, or unset ios.remote to plan the owned simulator."
3023
+ });
3024
+ placement = planned.placement;
3025
+ if (planned.kind === "hosted" && "runtime" in planned.choice) arch = keyArch(planned.choice.architecture);
3026
+ }
2967
3027
  const cacheKey = buildCacheKey("ios", fingerprint.hash, {
2968
3028
  scheme: opts.scheme,
2969
3029
  ...configuration ? { configuration } : {},
@@ -2988,7 +3048,10 @@ async function planIos(opts, d, schemeRefusal) {
2988
3048
  planPrebuild: d.planPrebuild,
2989
3049
  note
2990
3050
  });
2991
- printPlan(plan, json);
3051
+ printPlan(placement ? {
3052
+ ...plan,
3053
+ placement
3054
+ } : plan, json);
2992
3055
  }
2993
3056
  //#endregion
2994
3057
  //#region src/commands/ios.ts
@@ -3014,34 +3077,36 @@ function registerIos(program, deps = {}) {
3014
3077
  await planIos(opts, d, (root, scheme, isExpo) => explicitSchemeRefusal(root, scheme, isExpo, d));
3015
3078
  return;
3016
3079
  }
3017
- const root = (deps.findProjectRoot ?? DEFAULT_DEPS.findProjectRoot)(process.cwd());
3018
- const run = (progress) => runIos({
3080
+ const completion = await runIosOperation((deps.findProjectRoot ?? DEFAULT_DEPS.findProjectRoot)(process.cwd()), {
3019
3081
  ...opts,
3020
3082
  waitConflict: waitFlagConflict(process.argv)
3021
- }, deps, progress);
3022
- const completion = root ? await withNativeBuildRun(root, {
3023
- command: "ios",
3024
- platform: "ios",
3025
- slot: opts.slot ?? "default"
3026
- }, async (claim) => {
3027
- recordWorkspaceUse(root);
3028
- const progress = startBuildProgress({
3029
- root,
3030
- platform: "ios",
3031
- slot: opts.slot ?? "default",
3032
- claim,
3033
- note: (line) => writeNote(chalk.dim(line))
3034
- });
3035
- try {
3036
- return await run(progress);
3037
- } finally {
3038
- progress.clear();
3039
- }
3040
- }, { write: (line) => writeNote(chalk.dim(phaseLine("lock", line))) }) : await run();
3083
+ }, deps);
3041
3084
  if (!completion) process.exit(runCancellation() ? 130 : 1);
3042
3085
  else if (completion.uploadsAbandoned) exitAfterFlush(0);
3043
3086
  });
3044
3087
  }
3088
+ function runIosOperation(root, opts = {}, deps = {}, onFailure = () => {}) {
3089
+ const run = (progress) => runIos(root, opts, deps, progress, onFailure);
3090
+ return root ? withNativeBuildRun(root, {
3091
+ command: "ios",
3092
+ platform: "ios",
3093
+ slot: opts.slot ?? "default"
3094
+ }, async (claim) => {
3095
+ recordWorkspaceUse(root);
3096
+ const progress = startBuildProgress({
3097
+ root,
3098
+ platform: "ios",
3099
+ slot: opts.slot ?? "default",
3100
+ claim,
3101
+ note: (line) => writeNote(chalk.dim(line))
3102
+ });
3103
+ try {
3104
+ return await run(progress);
3105
+ } finally {
3106
+ progress.clear();
3107
+ }
3108
+ }, { write: (line) => writeNote(chalk.dim(phaseLine("lock", line))) }) : run();
3109
+ }
3045
3110
  function unlessCancelled(result) {
3046
3111
  if (!result.ok || !runCancellation()) return result;
3047
3112
  return {
@@ -3137,7 +3202,7 @@ function iosSlotDeps(d, slot) {
3137
3202
  }
3138
3203
  return d;
3139
3204
  }
3140
- async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3205
+ async function runIos(projectRoot, opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS, onFailure) {
3141
3206
  const slot = validateDeviceSlot(opts.slot);
3142
3207
  let d = iosSlotDeps({
3143
3208
  ...DEFAULT_DEPS,
@@ -3160,12 +3225,15 @@ async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3160
3225
  message,
3161
3226
  remedy
3162
3227
  }));
3163
- process.exitCode = 1;
3228
+ onFailure({
3229
+ code: "STIM_NO_PROJECT",
3230
+ message,
3231
+ remedy
3232
+ });
3164
3233
  return null;
3165
3234
  };
3166
- const foundRoot = d.findProjectRoot(process.cwd());
3167
- if (!foundRoot) return refuseProject(NO_PROJECT_REFUSAL);
3168
- const root = foundRoot;
3235
+ if (!projectRoot) return refuseProject(NO_PROJECT_REFUSAL);
3236
+ const root = projectRoot;
3169
3237
  const projectProblem = appProjectProblem(root);
3170
3238
  if (projectProblem) return refuseProject(projectProblem);
3171
3239
  try {
@@ -3180,7 +3248,11 @@ async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3180
3248
  message,
3181
3249
  remedy: "Check that STIM_HOME is writable and has free space."
3182
3250
  }));
3183
- process.exitCode = 1;
3251
+ onFailure({
3252
+ code,
3253
+ message,
3254
+ remedy: "Check that STIM_HOME is writable and has free space."
3255
+ });
3184
3256
  return null;
3185
3257
  }
3186
3258
  const logsDir = workspaceLogsDir$1(root);
@@ -3193,6 +3265,7 @@ async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3193
3265
  slot
3194
3266
  }
3195
3267
  }), progress);
3268
+ setRemoteLogSink((record) => logWriter().write(record));
3196
3269
  let leaseHandle = null;
3197
3270
  let stopLeaseSignals = null;
3198
3271
  const releaseLease = () => {
@@ -3262,7 +3335,16 @@ async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3262
3335
  ...reclaimed.length ? { reclaimed } : {}
3263
3336
  }));
3264
3337
  writer?.close?.();
3265
- process.exitCode = 1;
3338
+ onFailure({
3339
+ code,
3340
+ message,
3341
+ remedy,
3342
+ lines,
3343
+ logPath,
3344
+ build,
3345
+ lease,
3346
+ setup
3347
+ });
3266
3348
  return null;
3267
3349
  };
3268
3350
  const settingsRepoRoot = d.repoRoot(root);
@@ -3375,7 +3457,8 @@ async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3375
3457
  }),
3376
3458
  noWait: deviceSlotWaitMs === 0,
3377
3459
  note,
3378
- phase
3460
+ phase,
3461
+ log: (entry) => logWriter().write(entry)
3379
3462
  });
3380
3463
  if ("failure" in remoteSelection) return fail(remoteSelection.failure);
3381
3464
  devicePlacement = remoteSelection.devicePlacement;
@@ -3404,7 +3487,8 @@ async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3404
3487
  if ("failure" in connected) return fail(connected.failure);
3405
3488
  const hostedTarget = connected.target;
3406
3489
  try {
3407
- const budget = await iosPlacementBudget(d, root, note, Boolean(hostedTarget), remoteSelection.budget);
3490
+ const simSnapshot = createIosSimSnapshot();
3491
+ const budget = await iosPlacementBudget(d, root, note, Boolean(hostedTarget), remoteSelection.budget, simSnapshot);
3408
3492
  reclaimed = budget.reclaimed;
3409
3493
  if (budget.refusal) return fail(budget.refusal);
3410
3494
  const backendConnection = await connectIosBackend(root, remoteBackend, opts.deviceType, d);
@@ -3489,7 +3573,8 @@ async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3489
3573
  const capacity = d.checkDeviceCapacity({
3490
3574
  platform: "ios",
3491
3575
  project: proj,
3492
- max: limits.maxDevices
3576
+ max: limits.maxDevices,
3577
+ sims: () => simSnapshot.read().filter((sim) => sim.available)
3493
3578
  });
3494
3579
  if (capacity) {
3495
3580
  if (capacity.code === "STIM_AT_CAPACITY") d.recordCapacityRefusal({
@@ -3533,7 +3618,8 @@ async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3533
3618
  simulatorApp
3534
3619
  },
3535
3620
  note,
3536
- out: note
3621
+ out: note,
3622
+ simSnapshot
3537
3623
  });
3538
3624
  } catch (e) {
3539
3625
  return fail(ownedSimFailure(e));
@@ -3864,4 +3950,4 @@ async function runIos(opts = {}, overrides = {}, progress = NO_BUILD_PROGRESS) {
3864
3950
  }
3865
3951
  }
3866
3952
  //#endregion
3867
- export { appNameFromPath, buildLogFile, cacheDescription, collectorEntry, iosCommand as default, devClientScheme, deviceLabel, ensureWorkspaceStorageSafely, formatDuration, iosConfigurationSetting, iosFacts, isReleaseConfiguration, lastBuildRecord, phaseLine, pickDevClientScheme, podAction, registerIos, replaceCollector, resolveConfiguration, resolveDeviceType, resolveRuntime, schemesFromInfoPlist, shortHash, shortUdid, writeLastBuild };
3953
+ export { replaceCollector as a, lastBuildRecord as c, collectorEntry as i, writeLastBuild as l, registerIos as n, cacheDescription as o, runIosOperation as r, iosFacts as s, iosCommand as t };
@@ -0,0 +1,7 @@
1
+ import { h as shortUdid, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-CBtzyIgF.mjs";
2
+ import { D as schemesFromInfoPlist, T as pickDevClientScheme } from "./app-install-D-PUENug.mjs";
3
+ import { t as devClientScheme } from "./dev-client-CLnIH02x.mjs";
4
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-D_603JiC.mjs";
5
+ import { a as replaceCollector, c as lastBuildRecord, i as collectorEntry, l as writeLastBuild, n as registerIos, o as cacheDescription, r as runIosOperation, s as iosFacts, t as iosCommand } from "./ios-CPdkoKaa.mjs";
6
+ import { d as podAction, g as resolveRuntime, i as deviceLabel, l as isReleaseConfiguration, m as resolveDeviceType, n as buildLogFile, p as resolveConfiguration, s as iosConfigurationSetting, t as appNameFromPath } from "./support-BaayeYCf.mjs";
7
+ export { appNameFromPath, buildLogFile, cacheDescription, collectorEntry, iosCommand as default, devClientScheme, deviceLabel, ensureWorkspaceStorageSafely, formatDuration, iosConfigurationSetting, iosFacts, isReleaseConfiguration, lastBuildRecord, phaseLine, pickDevClientScheme, podAction, registerIos, replaceCollector, resolveConfiguration, resolveDeviceType, resolveRuntime, runIosOperation, schemesFromInfoPlist, shortHash, shortUdid, writeLastBuild };
@@ -1,4 +1,4 @@
1
- import { t as getExecutor } from "./exec-CaErVv7t.mjs";
1
+ import { t as getExecutor } from "./exec-DWhCZDGm.mjs";
2
2
  //#region src/collector/ios-device.ts
3
3
  const CONSOLE_ENV = { OS_ACTIVITY_DT_MODE: "enable" };
4
4
  const DEV_MENU_LAUNCH_ARGS = [
@@ -1,6 +1,6 @@
1
- import { t as getExecutor } from "./exec-CaErVv7t.mjs";
2
- import { n as TOOL_ERROR_PREFIX } from "./ios-device-Ee7sDXfp.mjs";
3
- import { i as INSTALL_ERROR } from "./app-install-VPkI5WEg.mjs";
1
+ import { t as getExecutor } from "./exec-DWhCZDGm.mjs";
2
+ import { i as INSTALL_ERROR } from "./app-install-D-PUENug.mjs";
3
+ import { n as TOOL_ERROR_PREFIX } from "./ios-device-Bn7jWDB1.mjs";
4
4
  import { mkdtempSync, readFileSync, rmSync } from "node:fs";
5
5
  import { join } from "node:path";
6
6
  import { tmpdir } from "node:os";
@@ -1,4 +1,4 @@
1
- import { a as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-DqcCbpE7.mjs";
1
+ import { a as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-C59dqG-Z.mjs";
2
2
  import { HOSTED_METRO_REQUESTS_KEY, hostedMetroRequests, hostedNativeRecords, isJsonObject, parseHostedNativePlacement, unreadableHostedNative } from "@stim-cli/core/state";
3
3
  //#region src/device-host/ios-state.ts
4
4
  function readHostedNative(root, platform, slot) {
@@ -1,8 +1,8 @@
1
- import { t as getExecutor } from "./exec-CaErVv7t.mjs";
2
- import { s as isAppLaunchError } from "./command-output-CDAIFD-8.mjs";
3
- import { o as readNdjsonGenerations } from "./ndjson-PclOIwVY.mjs";
4
- import { t as DEV_MENU_LAUNCH_ARGS } from "./ios-device-Ee7sDXfp.mjs";
5
- import { f as deviceShellArg, n as ANDROID_DISABLE_AUTO_LAUNCH_EXTRA, s as androidAppProcess } from "./app-install-VPkI5WEg.mjs";
1
+ import { t as getExecutor } from "./exec-DWhCZDGm.mjs";
2
+ import { s as isAppLaunchError } from "./command-output-CBtzyIgF.mjs";
3
+ import { o as readNdjsonGenerations } from "./ndjson-LGZAMsqa.mjs";
4
+ import { f as deviceShellArg, n as ANDROID_DISABLE_AUTO_LAUNCH_EXTRA, s as androidAppProcess } from "./app-install-D-PUENug.mjs";
5
+ import { t as DEV_MENU_LAUNCH_ARGS } from "./ios-device-Bn7jWDB1.mjs";
6
6
  import { join } from "node:path";
7
7
  //#region src/engine/app-readiness.ts
8
8
  const APP_READINESS_TIMEOUT_MS = 3e4;
@@ -1,15 +1,15 @@
1
- import { H as projectDeviceSlots, V as parseDeviceSlotOption, _ as loadConfig$1, g as isPathPrefix } from "./config-D0DbpZtM.mjs";
2
- import { t as process_identity_exports } from "./process-identity-BmRm1qV0.mjs";
3
- import { f as refuseNoProject, l as phaseLine, v as launchErrorPreview } from "./command-output-CDAIFD-8.mjs";
4
- import { o as findCommandWorkspace } from "./project-D47Rh0ly.mjs";
5
- import { r as readWorkspaceState$1, x as workspaceLogsDir$1 } from "./workspace-state-DqcCbpE7.mjs";
6
- import { n as agentDeviceLiveness, u as readAgentDeviceRecords } from "./activity-IRvJY_ru.mjs";
7
- import { n as SOURCES, t as LEVELS } from "./ndjson-PclOIwVY.mjs";
8
- import { o as connectHost } from "./hosted-client-Bp4knSwu.mjs";
9
- import { n as pullHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-OcgIBvCT.mjs";
10
- import "./hosted-macos-DcxKjtfH.mjs";
11
- import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-8L3lgum6.mjs";
12
- import { i as captureWorkspaceCrashes, t as errorDiagnostics } from "./error-diagnostics-C-NMnhrk.mjs";
1
+ import { t as process_identity_exports } from "./process-identity-Biv3arCO.mjs";
2
+ import { f as refuseNoProject, l as phaseLine, v as launchErrorPreview } from "./command-output-CBtzyIgF.mjs";
3
+ import { H as projectDeviceSlots, V as parseDeviceSlotOption, _ as loadConfig$1, g as isPathPrefix } from "./config-CgYMahz7.mjs";
4
+ import { o as findCommandWorkspace } from "./project-C3ChRLZy.mjs";
5
+ import { r as readWorkspaceState$1, x as workspaceLogsDir$1 } from "./workspace-state-C59dqG-Z.mjs";
6
+ import { n as agentDeviceLiveness, u as readAgentDeviceRecords } from "./activity-BxnkDZDi.mjs";
7
+ import { n as SOURCES, t as LEVELS } from "./ndjson-LGZAMsqa.mjs";
8
+ import { o as connectHost } from "./hosted-client-C-rMtppF.mjs";
9
+ import { n as pullHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-DN8Iz4mJ.mjs";
10
+ import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-B2pES6Vs.mjs";
11
+ import { i as captureWorkspaceCrashes, t as errorDiagnostics } from "./error-diagnostics-BRXOqDzG.mjs";
12
+ import "./hosted-macos-B-wEjlwG.mjs";
13
13
  import { t as watchStdoutReader } from "./stdout-reader-C8yjre1x.mjs";
14
14
  import { realpathSync } from "node:fs";
15
15
  import { dirname, join, relative, resolve, sep } from "node:path";
@@ -251,7 +251,7 @@ const LEVEL_COLOURS = {
251
251
  fatal: chalk.bgRed
252
252
  };
253
253
  function logsCommand(program) {
254
- program.command("logs").description("Query this workspace's merged NDJSON log timeline (bundler, client, device, build, agent actions, maintenance). Prints and exits; an existing timeline with nothing matching is a successful, empty result. Use --follow to stream.").option("--slot <name>", "Only this device slot's records, plus the shared Metro and app client records once it has launched", parseDeviceSlotOption).option("--source <s...>", "Only these sources: metro, client, device, build, agent, maintenance, or all").option("--level <l>", `Minimum level: ${LEVELS.join(", ")}`).option("--since <d>", "Only records newer than this, e.g. 30s, 5m, 2h").option("--grep <re>", "Only records whose message matches this regular expression").option("--tail <n>", "Only the last n matching records").option("--errors", "Errors and fatals since the last marker, from metro, client and build, plus confirmed native app-crash reports and stim web browser errors. Add --source maintenance for maintenance failures, or --source device or --source all for general device errors.").option("--follow", "Keep streaming new records until interrupted").option("--json", "Emit the raw records, one per line (valid NDJSON; zero matches is zero bytes, exit 0)").action(async (opts) => {
254
+ program.command("logs").description("Query this workspace's merged NDJSON log timeline (bundler, client, device, build, agent actions, maintenance). Prints and exits; an existing timeline with nothing matching is a successful, empty result. Use --follow to stream.").option("--slot <name>", "Only this device slot's records, plus the shared Metro and app client records once it has launched", parseDeviceSlotOption).option("--source <s...>", "Only these sources: metro, client, device, build, agent, maintenance, placement, or all").option("--level <l>", `Minimum level: ${LEVELS.join(", ")}`).option("--since <d>", "Only records newer than this, e.g. 30s, 5m, 2h").option("--grep <re>", "Only records whose message matches this regular expression").option("--tail <n>", "Only the last n matching records").option("--errors", "Errors and fatals since the last marker, from metro, client and build, plus confirmed native app-crash reports and stim web browser errors. Add --source maintenance for maintenance failures, or --source device or --source all for general device errors.").option("--follow", "Keep streaming new records until interrupted").option("--json", "Emit the raw records, one per line (valid NDJSON; zero matches is zero bytes, exit 0)").action(async (opts) => {
255
255
  const root = findCommandWorkspace(process.cwd());
256
256
  if (!root) {
257
257
  refuseNoProject({ json: false });
@@ -0,0 +1,2 @@
1
+ import { n as runMacos, t as macosCommand } from "./macos-DF6C7wUU.mjs";
2
+ export { macosCommand as default, runMacos };