stim 1.35.0 → 1.36.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 (146) hide show
  1. package/dist/{acquire-artifact-0E_iw7Rf.mjs → acquire-artifact-DGTHCd0Q.mjs} +19 -3
  2. package/dist/{act-CyxFP8Vj.mjs → act-CvN9xyV6.mjs} +18 -18
  3. package/dist/{activity-BQpJpAjA.mjs → activity-BpdDvA8Q.mjs} +4 -4
  4. package/dist/{agent-device-usage-output-BoOC3ZF9.mjs → agent-device-usage-output-pbhaW7_k.mjs} +4 -4
  5. package/dist/{android-B2DSKg-A.mjs → android-5wkcMFDG.mjs} +1 -1
  6. package/dist/{android-CjcJE7uA.mjs → android-B0qTdwnt.mjs} +5 -5
  7. package/dist/{android-Iq0M2t2d.mjs → android-SJx1V3R3.mjs} +5 -5
  8. package/dist/{android-cas-Dhcjkys1.mjs → android-cas-BS9_55U5.mjs} +4 -4
  9. package/dist/{android-YRb1UzSy.mjs → android-e9WP10cE.mjs} +47 -39
  10. package/dist/{android-image-DFk26aY6.mjs → android-image-BZ57YL6R.mjs} +2 -2
  11. package/dist/{android-project-DhO6el8N.d.mts → android-project-v_1nej_x.d.mts} +3 -1
  12. package/dist/api.d.mts +20 -6
  13. package/dist/api.mjs +31 -26
  14. package/dist/{apk-signed-tail-CPpA-3vu.mjs → apk-signed-tail-eZyXIrnc.mjs} +2 -2
  15. package/dist/{artifact-BG4h_WTC.mjs → artifact-C3srrGVU.mjs} +36 -14
  16. package/dist/{artifact-2NIRz6SC.mjs → artifact-ubNdxo_K.mjs} +43 -14
  17. package/dist/{auto-placement-CBdWa87P.mjs → auto-placement-CKFpFCuq.mjs} +7 -7
  18. package/dist/{browser-web-CNlRugJv.mjs → browser-web-B63vLrj6.mjs} +11 -11
  19. package/dist/{build-CNE3Wo5-.mjs → build-B_Dx9SKJ.mjs} +72 -24
  20. package/dist/{build-cache-_fkewiwH.mjs → build-cache-BW8T4oD2.mjs} +4 -4
  21. package/dist/{build-plan-BSgR9yKo.mjs → build-plan-CeIooJqn.mjs} +6 -6
  22. package/dist/{cache-manifest-8JX9S1QJ.mjs → cache-manifest-CxWkZmUr.mjs} +1 -1
  23. package/dist/cache-manifest.mjs +1 -1
  24. package/dist/{cli-DK24VzHi.mjs → cli-COdXswmc.mjs} +19 -18
  25. package/dist/cli.mjs +1 -1
  26. package/dist/{client-Dy0eJJtz.mjs → client-KSWIeQLA.mjs} +4 -4
  27. package/dist/collector-run.mjs +4 -4
  28. package/dist/{command-output-CGxrQ3Bd.mjs → command-output-T3cDctRE.mjs} +1 -1
  29. package/dist/{config-BW0fAtoK.mjs → config-BA3TgoIP.mjs} +59 -10
  30. package/dist/{dependencies-IVl2Ga2D.mjs → dependencies-LH-7k1Vr.mjs} +35 -35
  31. package/dist/{dependency-state-mL5g4H6K.mjs → dependency-state-Blfp3AkG.mjs} +1 -1
  32. package/dist/{dev-client-DDApoVvd.mjs → dev-client-MO_DjTZr.mjs} +2 -2
  33. package/dist/{device-p_cp8IzW.mjs → device-BZWt_aPJ.mjs} +11 -11
  34. package/dist/{device-mOFYiHiw.mjs → device-DNTWFFB1.mjs} +12 -12
  35. package/dist/{device-android-C-biM49_.mjs → device-android-BB9Lugr8.mjs} +8 -8
  36. package/dist/{device-capacity-C0PiTyRb.mjs → device-capacity-CpAVcKgq.mjs} +15 -15
  37. package/dist/device-host-worker.mjs +13 -13
  38. package/dist/{device-pool-nsMvt2X2.mjs → device-pool-BJToGG-q.mjs} +3 -3
  39. package/dist/{device-provision-BYYJuRKZ.mjs → device-provision-CxQDCtrc.mjs} +9 -9
  40. package/dist/{doctor-BBAb8NLe.mjs → doctor-C-46SkBe.mjs} +1 -1
  41. package/dist/{doctor-RosbBfTV.mjs → doctor-CYZ45LnX.mjs} +20 -20
  42. package/dist/{doctor-BptE4PaK.mjs → doctor-DV639Iw_.mjs} +15 -15
  43. package/dist/doctor-fingerprint.mjs +1 -1
  44. package/dist/{doctor-watchman-CKOnCINh.mjs → doctor-watchman-TZxYt_98.mjs} +4 -4
  45. package/dist/{eas-build-BxJdzQnF.mjs → eas-build-Xf5Jd6LR.mjs} +2 -2
  46. package/dist/{eas-fallback-DU2WDF8r.mjs → eas-fallback-DNYPNinw.mjs} +4 -4
  47. package/dist/{eas-session-ledger-DCUfh6m7.mjs → eas-session-ledger-CXZ4aix0.mjs} +5 -5
  48. package/dist/{error-diagnostics-D6wlK-yX.mjs → error-diagnostics-CvB5bpPU.mjs} +8 -8
  49. package/dist/{gc-CvMEytXz.mjs → gc-8Qm_K1iy.mjs} +2 -2
  50. package/dist/{gc-BUkonUfz.mjs → gc-DiUhrVFo.mjs} +17 -17
  51. package/dist/{guide-BWozWG7D.mjs → guide-CuvHRP53.mjs} +113 -56
  52. package/dist/{hosted-android-y6K3DKQT.mjs → hosted-android-D__HGVIO.mjs} +3 -3
  53. package/dist/{hosted-client-Bb89P6an.mjs → hosted-client-DMOOu8vD.mjs} +6 -6
  54. package/dist/{hosted-logs-DYPsnWMF.mjs → hosted-logs-CClIktQM.mjs} +6 -6
  55. package/dist/{hosted-logs-sync-DfUJ2GpF.mjs → hosted-logs-sync-B7XCeqVm.mjs} +5 -5
  56. package/dist/{hosted-macos-DsEzYVY_.mjs → hosted-macos-D4sDJIbB.mjs} +5 -5
  57. package/dist/{hosted-native-C9xQYYFb.mjs → hosted-native-BiiUG_Q6.mjs} +7 -7
  58. package/dist/{ios-BCKxjpRp.mjs → ios-BZuhvLGr.mjs} +8 -8
  59. package/dist/{ios-BdZdNsAj.mjs → ios-BhfpRfNf.mjs} +4 -4
  60. package/dist/{ios-FhMkDfNC.mjs → ios-BhpUWyN7.mjs} +39 -30
  61. package/dist/{ios-device-DMOnaH5n.mjs → ios-device-vhYL1N--.mjs} +1 -1
  62. package/dist/{ios-project-PXBDoaii.mjs → ios-project-Cz0S1Sz-.mjs} +7 -7
  63. package/dist/{ios-signing-CCFNjjWU.mjs → ios-signing-BcH88ecn.mjs} +1 -1
  64. package/dist/{ios-state-CWsBysyN.mjs → ios-state-Avwz2cbZ.mjs} +1 -1
  65. package/dist/{js-swap-07ikLRJJ.mjs → js-swap-Desu2iII.mjs} +4 -4
  66. package/dist/{launch-CTq5gBim.mjs → launch-6ckG9UrC.mjs} +19 -19
  67. package/dist/{lightened-DikgC3-S.mjs → lightened-B6TnpHMX.mjs} +4 -4
  68. package/dist/{logs-DwI3Rkpf.mjs → logs-B-DMy1K0.mjs} +7 -7
  69. package/dist/{logs-YDMfEohb.mjs → logs-CO0CJRiC.mjs} +5 -5
  70. package/dist/{macos-BoNM-l6f.mjs → macos-B1aCXhem.mjs} +19 -19
  71. package/dist/{macos-C_e9f5-5.mjs → macos-CduEmWAK.mjs} +1 -1
  72. package/dist/macos-run.mjs +1 -1
  73. package/dist/maintenance-run.mjs +5 -5
  74. package/dist/{metro-B5PVz0Wv.mjs → metro-DM3yJL1M.mjs} +2 -2
  75. package/dist/{metro-request-2LmFpC1z.mjs → metro-request-O8Q-JvBg.mjs} +1 -1
  76. package/dist/{named-ports-CA0nB9Yw.mjs → named-ports-BvB_CO9B.mjs} +2 -2
  77. package/dist/{native-android-Mv4YTrVN.mjs → native-android-28NOG2-y.mjs} +17 -17
  78. package/dist/{native-gradle-artifact-inputs-C_TU6wPq.mjs → native-gradle-artifact-inputs-DxVEtS6_.mjs} +3 -3
  79. package/dist/{native-runtime-oDqT4UES.mjs → native-runtime-C3_NkUlW.mjs} +6 -6
  80. package/dist/{native-xcode-inputs-DsozghTX.mjs → native-xcode-inputs-BWFTw5cJ.mjs} +2 -2
  81. package/dist/{native-xcode-ios-UXnH9NRY.mjs → native-xcode-ios-B4Qoc7-U.mjs} +16 -16
  82. package/dist/offload-worker.d.mts +1 -1
  83. package/dist/offload-worker.mjs +19 -19
  84. package/dist/{ownership-hC7xvvxF.mjs → ownership-C3y8wLSl.mjs} +2 -2
  85. package/dist/{phone-reverses-B9WyCBKQ.mjs → phone-reverses-BhSxbqom.mjs} +4 -4
  86. package/dist/{placement-log-D0DZLcJk.mjs → placement-log-B8RCSzOm.mjs} +1 -1
  87. package/dist/{plan-placement-DqmLrWoX.mjs → plan-placement-BI4r55aP.mjs} +6 -6
  88. package/dist/{ports-C1_1Qgdy.mjs → ports-DhOSyWm9.mjs} +3 -3
  89. package/dist/{prebuild-BptrXmh_.mjs → prebuild-Di2IhUue.mjs} +9 -9
  90. package/dist/{project-Dqqj3IkW.mjs → project-Clk1JAWL.mjs} +15 -15
  91. package/dist/{react-native-android-Bsm_o4A8.mjs → react-native-android-bdHBMrnf.mjs} +23 -23
  92. package/dist/{react-native-build-BTUcE926.mjs → react-native-build-CJega_NM.mjs} +7 -7
  93. package/dist/{react-native-doctor-CfsCTKZt.mjs → react-native-doctor-CY7BGITE.mjs} +5 -5
  94. package/dist/{react-native-ios-_cK2pjZn.mjs → react-native-ios-Bo5EDVel.mjs} +14 -14
  95. package/dist/recorded-build-BuGL_fnm.mjs +58 -0
  96. package/dist/{recordings-AKZfsW2W.mjs → recordings-6i2-x8LU.mjs} +1 -1
  97. package/dist/{reload-DsTMtMDU.mjs → reload-A_axEbeS.mjs} +14 -14
  98. package/dist/{reload-CXgce4Yo.mjs → reload-BvDuvygc.mjs} +1 -1
  99. package/dist/remote-PD6CM0xp.mjs +158 -0
  100. package/dist/{remote-BsmYHUxH.mjs → remote-WK_swZEw.mjs} +8 -8
  101. package/dist/{result-DK6nTO-M.mjs → result-BkDpN5Mz.mjs} +23 -17
  102. package/dist/{run-N-BbRxnC.mjs → run-CTFi4Nq2.mjs} +1 -1
  103. package/dist/{server-bare-BTlICuaX.mjs → server-bare-W0aPsRZE.mjs} +1 -1
  104. package/dist/{server-command-Cu2w-UjB.mjs → server-command-S00-ddjK.mjs} +4 -4
  105. package/dist/server-expo-BWJDa7Qb.mjs +2 -0
  106. package/dist/{server-expo-CjQwxvIi.mjs → server-expo-cc-cmfsl.mjs} +2 -2
  107. package/dist/{settings-B5IBDfTx.mjs → settings-Bap-qjnp.mjs} +1 -1
  108. package/dist/{settings-DcmVICCn.mjs → settings-C_Xu4RNZ.mjs} +2 -2
  109. package/dist/{settings-payload-BoiFMiFq.mjs → settings-payload-D5jjhmrw.mjs} +4 -4
  110. package/dist/{settings-write-B3LzEVwf.mjs → settings-write-C5huI-iS.mjs} +5 -5
  111. package/dist/settings.schema.json +1 -1
  112. package/dist/{simslim-DKdJx0LL.mjs → simslim-DlBvwgeF.mjs} +1 -1
  113. package/dist/{slot-launch-DsQmPdlg.mjs → slot-launch-qEQVTth7.mjs} +6 -6
  114. package/dist/{stage-Dqk0qvaI.mjs → stage-CxVI_MlP.mjs} +1 -1
  115. package/dist/{start-GkRBR1e3.mjs → start-CVzivp35.mjs} +1 -1
  116. package/dist/{start-DIFiT2P5.mjs → start-YpT_JpQQ.mjs} +10 -10
  117. package/dist/{state-DSOUqO-o.mjs → state-B4B5P4LU.mjs} +1 -1
  118. package/dist/{state-CtmYTRWm.mjs → state-B9VFI6r0.mjs} +2 -2
  119. package/dist/{stats-Dz08IopP.mjs → stats-COoePEri.mjs} +4 -4
  120. package/dist/{status-DhKv_e8a.mjs → status-CIg0k7Qb.mjs} +21 -21
  121. package/dist/{status-Dost__Vn.mjs → status-CIvU5-TF.mjs} +1 -1
  122. package/dist/{status-DTFhDnd1.mjs → status-CQWmNl1f.mjs} +1 -1
  123. package/dist/{status-watch-UecLnPQD.mjs → status-watch--rfZynD_.mjs} +4 -4
  124. package/dist/status-worker.mjs +1 -1
  125. package/dist/{stim-desktop-_WTria-r.mjs → stim-desktop-D0P_bzmd.mjs} +1 -1
  126. package/dist/{stop-CcZISot5.mjs → stop-BEBBruvD.mjs} +4 -4
  127. package/dist/{stop-QFOqgICJ.mjs → stop-BiI4_VFG.mjs} +2 -2
  128. package/dist/{stop-vRe6TQk5.mjs → stop-C3d5qG7C.mjs} +15 -15
  129. package/dist/supervisor-run.mjs +12 -12
  130. package/dist/{support-DW575Dnx.mjs → support-BJbXovoO.mjs} +73 -34
  131. package/dist/{support-CNqJDBrH.mjs → support-Vckdzrmk.mjs} +5 -5
  132. package/dist/{swiftpm-artifact-inputs-DQTJTczX.mjs → swiftpm-artifact-inputs-DbuF-Yrr.mjs} +1 -1
  133. package/dist/{swiftpm-macos-BKczZ0k9.mjs → swiftpm-macos-Bu8xeBfM.mjs} +8 -8
  134. package/dist/{toolchain-BDlugtoh.mjs → toolchain-CIRdNl-c.mjs} +1 -1
  135. package/dist/{toolchain-DRQyCvlp.mjs → toolchain-DCnWAxQL.mjs} +71 -7
  136. package/dist/{warm-progress-q11Vdvhh.mjs → warm-progress-DwsGBpph.mjs} +3 -3
  137. package/dist/{web-TDWjHUT3.mjs → web-D2En0Wa5.mjs} +8 -8
  138. package/dist/web-Dpj70t4p.mjs +2 -0
  139. package/dist/web-run.mjs +4 -4
  140. package/dist/{workspace-state-BdZ-QgmB.mjs → workspace-state-BhwAJBgA.mjs} +2 -2
  141. package/dist/{workspaces-CY3KSdC0.mjs → workspaces-Dh5N70qW.mjs} +11 -11
  142. package/dist/{worktree-D6myrQ2H.mjs → worktree-DLm4s2Ib.mjs} +1 -1
  143. package/dist/{worktree-fKKe8j5M.mjs → worktree-Yw3EW77B.mjs} +24 -24
  144. package/package.json +7 -7
  145. package/dist/server-expo-DbSypdNl.mjs +0 -2
  146. package/dist/web-D1m1LKEz.mjs +0 -2
@@ -1,24 +1,24 @@
1
1
  import { D as ownership_claim_exports, T as process_identity_exports, _ as declareSpawnsOn, d as throwIfCancelled, f as WorkspaceProcessCleanupError, t as getExecutor, w as withDrainingCancellation, x as stopDeclaringSpawnsOn } from "./exec-CGuDzt40.mjs";
2
- import { E as workspaceDir, u as workspaceLastUsed } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { d as quotedPath$1, h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-CGxrQ3Bd.mjs";
4
- import { C as removeProject, M as acquireAvdClaim, at as isOnMountedVolume, d as getConfigDir, ht as projectDeviceSlots, it as isAbsentPath, k as withConfigLockAsync$1, nt as directorySizeAsync, ot as listMountedVolumes, rt as formatBytes, st as measuredDirectorySizeAsync, v as loadConfig$1 } from "./config-BW0fAtoK.mjs";
2
+ import { E as workspaceDir, u as workspaceLastUsed } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { d as quotedPath$1, h as shortUdid, o as formatLongDuration, u as plural } from "./command-output-T3cDctRE.mjs";
4
+ import { A as withConfigLockAsync$1, C as removeProject, N as acquireAvdClaim, at as isAbsentPath, ct as measuredDirectorySizeAsync, d as getConfigDir, gt as projectDeviceSlots, it as formatBytes, ot as isOnMountedVolume, rt as directorySizeAsync, st as listMountedVolumes, v as loadConfig$1 } from "./config-BA3TgoIP.mjs";
5
5
  import { t as runOperationFile } from "./operation-exec-DKlBcKAL.mjs";
6
- import { $t as TRASH_MANIFEST, Ft as matchWorktreeEntry, Wt as resolveSourceCheckoutAsync, Zt as TRASH_CLAIMS, en as deleteTrashEntry, jt as listWorktreesAsync } from "./settings-B5IBDfTx.mjs";
7
- import { i as findProjectRoot$1, v as detectIsExpo } from "./project-Dqqj3IkW.mjs";
8
- import { B as listOrphanedAvdDirectories, Et as readCreatedDevices$1, R as listAvdsAsync, Tt as forgetCreatedDeviceAsync, U as ownedAvdDirectory, bt as parkedMaxSetting, h as avdNameAbsent, mt as POOL_SETTING_REMEDY } from "./android-Iq0M2t2d.mjs";
9
- import { Ar as sizeCaches, At as deleteParkedAvds, Bt as unverifiedDeviceCommand, Cr as scopedMemoryReport, Dt as collectDeviceLeases, Et as DEVICE_LIST_TIMEOUT_MS, Ft as deviceSweepIsScoped, Gt as withRemoteSessionGcLocks, Ht as collectEasSessionSweep, It as eraseParkedDevices, Lt as findOrphanedDevices, Mt as deleteProjectDevices, Or as discoverCaches, Ot as collectParkedAvds, Pt as describeUnverifiableDevices, Rt as findStaleDeviceRecords, Sr as reclaimMemory, St as includesGradleVersions, Tr as phase, Tt as collectInventory, Ut as deleteEasSessions, Vt as withAndroidAvdSizes, Wn as runProcessOperation, Wt as describeError, _r as memoryCacheKind, _t as collectGradleVersions, br as memorySweepIsScoped, bt as gradleVersionLines, ct as includesParkedDevices, dt as isWorkspacesScope, fr as parseArchiveSelector, ft as planCacheEmptying, gt as trimCaches, hr as collectMemoryReport, ht as selectsBeyondCaches, it as openGcLog, jt as deleteParkedSims, kt as collectParkedSims, lt as includesRecordings, mt as selectCaches, nn as withEasProjectLock, nt as gcOptionsOf, ot as emptyCaches, pt as previewScopedEmptying, st as includesArchives, ut as includesWorkspaceOutputs, vr as memoryLines, wt as getMachineCacheReport, xr as memoryWorkPending, xt as gradleVersionsPending, yr as memoryScope, yt as deleteGradleVersions, zt as findStaleProjectDevices } from "./device-capacity-C0PiTyRb.mjs";
10
- import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-DCUfh6m7.mjs";
11
- import { At as mapLimited, Dt as createGcResults, Et as GC_OUTPUT, I as idleDeviceLines, M as collectIdleDevices, Mt as sizeConcurrency, N as collectIdleDevicesAsync, R as parseIdleDuration, a as collectOrphanedWorkspaces, b as workspaceInUseAsync, c as isInsideWorkspaces, f as rootPresence, g as ARTIFACT_DIRS, i as clearWorkspaceOutputs, jt as readConcurrency, kt as eachLimited, n as REBUILD_COST, o as collectWorkspaceOutputs, p as sizeText, r as WORKSPACE_OUTPUT_DIRS, s as deleteOrphanedWorkspaces, t as LIGHTEN_AFTER_MS, u as listWorkspaceDirs, v as withIdleWorkspace, wt as listBuildSlots, z as shutDownIdleDevices } from "./workspaces-CY3KSdC0.mjs";
6
+ import { $t as TRASH_MANIFEST, Ft as matchWorktreeEntry, Wt as resolveSourceCheckoutAsync, Zt as TRASH_CLAIMS, en as deleteTrashEntry, jt as listWorktreesAsync } from "./settings-Bap-qjnp.mjs";
7
+ import { i as findProjectRoot$1, v as detectIsExpo } from "./project-Clk1JAWL.mjs";
8
+ import { B as listOrphanedAvdDirectories, Et as readCreatedDevices$1, R as listAvdsAsync, Tt as forgetCreatedDeviceAsync, U as ownedAvdDirectory, bt as parkedMaxSetting, h as avdNameAbsent, mt as POOL_SETTING_REMEDY } from "./android-SJx1V3R3.mjs";
9
+ import { Ar as sizeCaches, At as deleteParkedAvds, Bt as unverifiedDeviceCommand, Cr as scopedMemoryReport, Dt as collectDeviceLeases, Et as DEVICE_LIST_TIMEOUT_MS, Ft as deviceSweepIsScoped, Gt as withRemoteSessionGcLocks, Ht as collectEasSessionSweep, It as eraseParkedDevices, Lt as findOrphanedDevices, Mt as deleteProjectDevices, Or as discoverCaches, Ot as collectParkedAvds, Pt as describeUnverifiableDevices, Rt as findStaleDeviceRecords, Sr as reclaimMemory, St as includesGradleVersions, Tr as phase, Tt as collectInventory, Ut as deleteEasSessions, Vt as withAndroidAvdSizes, Wn as runProcessOperation, Wt as describeError, _r as memoryCacheKind, _t as collectGradleVersions, br as memorySweepIsScoped, bt as gradleVersionLines, ct as includesParkedDevices, dt as isWorkspacesScope, fr as parseArchiveSelector, ft as planCacheEmptying, gt as trimCaches, hr as collectMemoryReport, ht as selectsBeyondCaches, it as openGcLog, jt as deleteParkedSims, kt as collectParkedSims, lt as includesRecordings, mt as selectCaches, nn as withEasProjectLock, nt as gcOptionsOf, ot as emptyCaches, pt as previewScopedEmptying, st as includesArchives, ut as includesWorkspaceOutputs, vr as memoryLines, wt as getMachineCacheReport, xr as memoryWorkPending, xt as gradleVersionsPending, yr as memoryScope, yt as deleteGradleVersions, zt as findStaleProjectDevices } from "./device-capacity-CpAVcKgq.mjs";
10
+ import { n as easMachineStateRoot$1, o as removeEasSessionClaimAsync, r as readEasSessionLedger$1 } from "./eas-session-ledger-CXZ4aix0.mjs";
11
+ import { At as mapLimited, Dt as createGcResults, Et as GC_OUTPUT, I as idleDeviceLines, M as collectIdleDevices, Mt as sizeConcurrency, N as collectIdleDevicesAsync, R as parseIdleDuration, a as collectOrphanedWorkspaces, b as workspaceInUseAsync, c as isInsideWorkspaces, f as rootPresence, g as ARTIFACT_DIRS, i as clearWorkspaceOutputs, jt as readConcurrency, kt as eachLimited, n as REBUILD_COST, o as collectWorkspaceOutputs, p as sizeText, r as WORKSPACE_OUTPUT_DIRS, s as deleteOrphanedWorkspaces, t as LIGHTEN_AFTER_MS, u as listWorkspaceDirs, v as withIdleWorkspace, wt as listBuildSlots, z as shutDownIdleDevices } from "./workspaces-Dh5N70qW.mjs";
12
12
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
13
- import { N as listBuildLocks, k as removeExpiredLease } from "./activity-BQpJpAjA.mjs";
14
- import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-BdZdNsAj.mjs";
13
+ import { N as listBuildLocks, k as removeExpiredLease } from "./activity-BpdDvA8Q.mjs";
14
+ import { d as listAllIosSims, f as listAllIosSimsAsync } from "./ios-BhfpRfNf.mjs";
15
15
  import { t as resolveMaintenanceSettings } from "./settings-D9LtQaUw.mjs";
16
- import { r as readCollectors } from "./ownership-hC7xvvxF.mjs";
17
- import { A as deleteSelectedArchives, O as classifyProjectEntries, j as sweepArchiveStaging, k as reclaimProject } from "./worktree-fKKe8j5M.mjs";
18
- import { p as writeCacheFile } from "./warm-progress-q11Vdvhh.mjs";
19
- import { a as restoreProblem, o as workspaceKeys } from "./lightened-DikgC3-S.mjs";
20
- import { C as candidateRootsAsync, D as worktreeRemovalReason, E as worktreePullRequestNote, S as maintenancePinned, T as removeWorktrees, _ as finishedWorkspaces, a as previewMaintenance, b as cachedDeviceActivity, c as deleteTempLeftovers, d as appRoots, f as artifactWorktrees, g as stopIdleWorkspace, h as planIdleStop, l as tempLeftoverLines, m as collectArtifactsAsync, o as triggeringRoot, p as clearArtifact, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, w as collectWorktreeSweep, x as cachedDeviceActivityAsync, y as ownedDeviceUsage } from "./act-CyxFP8Vj.mjs";
21
- import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-BoOC3ZF9.mjs";
16
+ import { r as readCollectors } from "./ownership-C3y8wLSl.mjs";
17
+ import { A as deleteSelectedArchives, O as classifyProjectEntries, j as sweepArchiveStaging, k as reclaimProject } from "./worktree-Yw3EW77B.mjs";
18
+ import { p as writeCacheFile } from "./warm-progress-DwsGBpph.mjs";
19
+ import { a as restoreProblem, o as workspaceKeys } from "./lightened-B6TnpHMX.mjs";
20
+ import { C as candidateRootsAsync, D as worktreeRemovalReason, E as worktreePullRequestNote, S as maintenancePinned, T as removeWorktrees, _ as finishedWorkspaces, a as previewMaintenance, b as cachedDeviceActivity, c as deleteTempLeftovers, d as appRoots, f as artifactWorktrees, g as stopIdleWorkspace, h as planIdleStop, l as tempLeftoverLines, m as collectArtifactsAsync, o as triggeringRoot, p as clearArtifact, s as collectTempLeftovers, t as deleteIdleWorkspaceDevices, u as tempLeftoverSection, w as collectWorktreeSweep, x as cachedDeviceActivityAsync, y as ownedDeviceUsage } from "./act-CvN9xyV6.mjs";
21
+ import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-pbhaW7_k.mjs";
22
22
  import { claimRemoveCommand, isClaimRefusal, isClaimUnavailable, readClaimSet, releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
23
23
  import { existsSync, lstatSync, readFileSync, readdirSync, statSync } from "node:fs";
24
24
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
@@ -1,8 +1,8 @@
1
- import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-B5IBDfTx.mjs";
2
- import { i as findProjectRoot$1 } from "./project-Dqqj3IkW.mjs";
3
- import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-DCUfh6m7.mjs";
4
- import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-CKOnCINh.mjs";
5
- import "./status-watch-UecLnPQD.mjs";
1
+ import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-Bap-qjnp.mjs";
2
+ import { i as findProjectRoot$1 } from "./project-Clk1JAWL.mjs";
3
+ import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-CXZ4aix0.mjs";
4
+ import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-TZxYt_98.mjs";
5
+ import "./status-watch--rfZynD_.mjs";
6
6
  import { SETTINGS, SETTINGS_SCHEMA_URL, TUTORIAL_VERSION } from "@stim-cli/core/state";
7
7
  import chalk from "chalk";
8
8
  //#region src/guide/agent.ts
@@ -148,7 +148,7 @@ server.* or hosting.* for the user, or approve requests. Read stim guide setting
148
148
  Desktop access tickets and person-owned approval.
149
149
  Read stim guide settings to select a remote machine. Keep a requested named
150
150
  placement when recovering STIM_OFFLOAD_REFUSED: report its reason and remedy.
151
- When the user mentions slow builds, a busy machine or wanting updates away from the desk, tell them about Stim Desktop > Settings > Remote Machines > Add or Phones > Pair a Phone; see stim guide settings.
151
+ When the user mentions slow builds, a busy machine or wanting updates away from the desk, tell them about Stim Desktop > Settings > Remote Machines > Add (or stim remote add <machine> in their terminal) or Phones > Pair a Phone; see stim guide settings.
152
152
 
153
153
  Read stim guide lifecycle concurrency when a build waits on another workspace
154
154
  or a build call times out. A native build can outlive a shell timeout; if the
@@ -612,7 +612,12 @@ it never starts an EAS build. iOS simulatorApp selects the simulator viewer.
612
612
  remote selects the launch host using the CLI's existing placement and approval
613
613
  rules; remoteBuild independently selects where compilation runs. macOS requires
614
614
  a named hosting Mac; auto, eas and proxy are not supported there.
615
- All methods accept signal. run builds, installs and launches.
615
+ All methods accept signal. run builds, installs and launches. iOS and Android run
616
+ also accept recordedBuild: true, which installs and launches the app the last
617
+ build with the same scheme and configuration (or variant) recorded in this
618
+ workspace, without fingerprinting, building or replacing its JS, and refuses with
619
+ STIM_NO_RECORDED_BUILD when there is none. @stim-cli/ci uses it; the CLI and the
620
+ private Desktop transport do not.
616
621
  Web requires a running server, just like stim web.
617
622
 
618
623
  build produces an artifact without acquiring a device, starting a runtime, or
@@ -627,18 +632,20 @@ including when Desktop is not installed on the build machine. Opening it only
627
632
  navigates; it does not install or launch the built app.
628
633
 
629
634
  Build options:
630
- ios: scheme, configuration, arch (arm64, x86_64, all), buildCache, remoteBuild
631
- android: variant, abi (arm64-v8a, armeabi-v7a, x86, x86_64, all), buildCache, remoteBuild
635
+ ios: scheme, configuration, arch (arm64, x86_64, all), buildCache, remoteBuild, easProfile
636
+ android: variant, abi (arm64-v8a, armeabi-v7a, x86, x86_64, all), buildCache, remoteBuild, easProfile
632
637
  macos: remoteBuild
633
638
  An iOS build targets the simulator. A Debug build defaults to the host
634
639
  architecture (Android only while optimizations.android.targetAbiOnly is on, the
635
640
  default); Release defaults to all. macOS builds the configured Debug SwiftPM app.
636
641
  Build results retain an owned appPath (iOS), apkPath (Android) or bundle (macOS)
637
- inside this workspace until worktree removal. Later builds keep earlier copies.
642
+ inside this workspace until worktree removal. Later builds keep earlier copies. An iOS or
643
+ Android build also records its app in workspace state for recordedBuild runs; the
644
+ last build per scheme and configuration or variant wins. easProfile downloads a
645
+ completed EAS development build instead of compiling; it never starts an EAS build.
638
646
  A build leaves a running app's last build record and build log untouched; it
639
647
  writes its own build-artifact-<platform>.ndjson. No distribution archive or web build
640
- pipeline is inferred. Use @stim-cli/ci's buildCI to export a portable artifact and
641
- diagnostics for your CI provider.
648
+ pipeline is inferred. Use @stim-cli/ci's buildCI to record the build and, with exportPath, export a portable artifact for your CI provider.
642
649
 
643
650
  Unresolved native Metro cleanup keeps error.details.cause.retainedClaimRoots and
644
651
  STIM_CLAIM_UNAVAILABLE even after cancellation. Web cancellation stops pending
@@ -1270,7 +1277,7 @@ leased until <time>" for each one.`,
1270
1277
  local: machine that approved this one but whose key no
1271
1278
  person confirmed, so nothing pinned it; fingerprint is the
1272
1279
  key's fingerprint to compare with the one stim-server setup
1273
- printed there, and only stim doctor --fix in a terminal asks.
1280
+ printed there, and only stim remote add or doctor --fix in a terminal asks.
1274
1281
  A local: entry has no dnsName. "outdated" means its
1275
1282
  stim-server speaks protocol 1; the finding names the
1276
1283
  stim-server service update command to run there.
@@ -1285,7 +1292,7 @@ leased until <time>" for each one.`,
1285
1292
  fits the pin; match is "exact", or "major" for the newest
1286
1293
  install of the pinned major not older than the pin), else null
1287
1294
  remoteMachines one { machine, state, diagnosis?, dnsName?, fingerprint?, deviceId?,
1288
- requestedAt?, expiresAt?, offloadable?, reasons?, problems?, capacity?, host? } per
1295
+ requestedAt?, tailnet?, expiresAt?, offloadable?, reasons?, problems?, capacity?, host? } per
1289
1296
  remote.machines entry, for its build approval; state is "approved", "pending", "not-asked",
1290
1297
  "revoked" (revoked or denied), "lapsed" (the request lapsed
1291
1298
  before approval), "key-changed", "key-unconfirmed" (as in
@@ -1297,6 +1304,10 @@ leased until <time>" for each one.`,
1297
1304
  (deviceHosts carries it too); the codes are
1298
1305
  tailscale-stopped, tailscale-logged-out, tailscale-unavailable
1299
1306
  (this machine's Tailscale), peer-not-found, peer-ambiguous,
1307
+ peer-wrong-tailnet (no peer is named so, and this Mac is
1308
+ signed in to another tailnet than the one it was on when it
1309
+ asked the machine for access; both are named; tailnet is
1310
+ { name, suffix?, id? }),
1300
1311
  peer-offline (with last seen), peer-no-answer (the connection
1301
1312
  got no reply and tailscale ping fails), route-missing (nothing accepts
1302
1313
  connections on the serve port), route-tls, route-http-error
@@ -3842,6 +3853,11 @@ WHAT WRITES WHAT
3842
3853
  the run that pointed you at it. A build from the API's
3843
3854
  build() writes build-artifact-<platform>.ndjson
3844
3855
  instead, so it never replaces a run's transcript.
3856
+ A failed build also leaves a copy of its transcript next
3857
+ to the log, named <log>.failed (build-ios.ndjson.failed);
3858
+ the failure's log line points at it, and the next
3859
+ failed build of that log replaces it. \`logs\` does not
3860
+ read it.
3845
3861
 
3846
3862
  Only a dev server Stim hosted is captured. If you started the bundler
3847
3863
  yourself, the metro and client sources stay empty -- which is not a sign of a
@@ -3904,7 +3920,7 @@ Branch on the code, never on the message.`,
3904
3920
  on the host to enable handoff and native logs (hello features hosted-ios-data
3905
3921
  for iOS and hosted-android-data for Android).
3906
3922
  A name outside remote.machines is STIM_BAD_ARG. Missing or pending hosting
3907
- approval keeps the doctor --fix and stim-server setup remedies.`
3923
+ approval keeps the stim remote add and stim-server setup remedies.`
3908
3924
  },
3909
3925
  STIM_EAS_BUILD_MISSING: {
3910
3926
  summary: "no completed EAS development build matches; build only with session authorization",
@@ -4021,7 +4037,11 @@ Branch on the code, never on the message.`,
4021
4037
  summary: "xcodebuild or gradle failed; the Android missing-SDK and APK refusals",
4022
4038
  body: () => `STIM_BUILD_FAILED
4023
4039
  xcodebuild or gradle failed. The EXTRACTED diagnostics are printed (capped),
4024
- not the transcript. Read the log path on the next line for the rest.
4040
+ not the transcript. Read the log path on the next line for the rest: it names
4041
+ a copy of the failed transcript (<log>.failed) that the next build in the
4042
+ workspace does not overwrite. When xcodebuild names failed script phases,
4043
+ the first diagnostics are the phase names and the last error lines the
4044
+ script printed, ahead of the compiler diagnostics.
4025
4045
  Three Android refusals share this code without gradle itself failing:
4026
4046
  - NO ANDROID SDK, before gradle starts: nothing exists at the SDK path
4027
4047
  Stim resolves (ANDROID_HOME, else ANDROID_SDK_ROOT, else the default
@@ -4282,9 +4302,9 @@ fingerprint reads, such as .env.local. Make the named input agree on both Macs,
4282
4302
  for example by committing the lockfile pod install rewrote there; pairing does
4283
4303
  not change it.
4284
4304
 
4285
- Run stim doctor --fix to ask for build access if not paired. Check
4286
- stim settings get remote.machines. A person on the worker approves this machine
4287
- by running the stim-server setup command doctor --fix printed, with its ticket
4305
+ Run stim remote add <machine> to ask for build access if not approved. Check
4306
+ stim remote list. A person on the worker approves this machine
4307
+ by running the stim-server setup command stim remote add printed, with its ticket
4288
4308
  and expiry (guide settings). Agents never run setup or approve requests.
4289
4309
  Rerun with --remote-build auto or remote for placement with local fallback, or
4290
4310
  --remote-build local to keep the build here.
@@ -5166,6 +5186,16 @@ captured" (in metro.ndjson, bare RN)
5166
5186
  Stim's processes. For a legacy record, stop the server with the tool that
5167
5187
  started it before retrying. Never reconstruct ownership from a process
5168
5188
  name, port, or wall-clock timestamp.`
5189
+ },
5190
+ STIM_NO_RECORDED_BUILD: {
5191
+ summary: "a recordedBuild run found no recorded build for its selectors",
5192
+ body: () => `STIM_NO_RECORDED_BUILD
5193
+ The API run option \`recordedBuild: true\` (used by \`stim-ci run\`) installs the
5194
+ app the last build with the same iOS scheme and configuration, or Android
5195
+ variant, recorded in this workspace's state. None is recorded, or its app was
5196
+ removed. Nothing was started. Build first with the same selectors and the same
5197
+ Stim home (\`stim-ci build\`, or the API build), then run again. \`stim guide ci\`
5198
+ has the flow. \`stim ios\` and \`stim android\` never use it.`
5169
5199
  },
5170
5200
  STIM_BAD_ARG: {
5171
5201
  summary: "an argument, setting, directory, flavor, or device name refused before anything starts",
@@ -6177,23 +6207,37 @@ prerequisites. \`reload\` refuses because the app has no Metro runtime. Re-run
6177
6207
  \`stim android\` after an edit and use \`stim stop\` for scoped cleanup.`
6178
6208
  },
6179
6209
  ci: {
6180
- summary: "Run an app and tests through @stim-cli/ci with diagnostics and scoped cleanup",
6210
+ summary: "Build an app once, then install it and run tests through @stim-cli/ci with scoped cleanup",
6181
6211
  body: () => `CONTINUOUS INTEGRATION
6182
6212
 
6183
6213
  Install app dependencies and platform tools first. Use a dedicated checkout:
6184
6214
  cleanup stops that workspace, including resources created before a build fails.
6185
6215
 
6216
+ npx --yes --package @stim-cli/ci stim-ci build --platform ios --project ./app
6186
6217
  npx --yes --package @stim-cli/ci stim-ci run --platform ios --project ./app --timeout 1800 -- pnpm test:e2e
6187
6218
 
6188
6219
  Or install npm install --global @stim-cli/ci and use stim-ci directly.
6189
6220
  Platforms: ios, android, macos, web. Everything after -- is argv, not a shell.
6190
- --artifacts selects the result directory (a fresh temporary directory by default).
6221
+ build is the only step that compiles (or restores from the cache, or with
6222
+ --eas-profile downloads an EAS development build). It records the app for this
6223
+ checkout, platform and selectors (iOS scheme and configuration, Android variant)
6224
+ in workspace state under the Stim home; the last build for those selectors wins.
6225
+ run never builds, fingerprints or replaces JS: it installs and launches that
6226
+ recorded app as built and trusts it, then runs the test. A Debug app still gets
6227
+ Metro from run. With no recorded build for the selectors, run refuses with
6228
+ STIM_NO_RECORDED_BUILD and names the stim-ci build command. Build and run must
6229
+ share the Stim home (--home or STIM_HOME). macOS and web run unchanged: macOS
6230
+ run builds the app itself.
6231
+ build exports nothing unless --export <path> is given (an APK, or a tar.gz).
6232
+ --artifacts selects a directory for result, test and diagnostic files; without
6233
+ it none are written, no logs are copied and the action uploads nothing.
6191
6234
  An explicit artifacts directory must be empty; use a new directory per run.
6192
6235
  Stdout is one JSON result; progress and test output go to stderr.
6193
6236
 
6194
6237
  Tests receive STIM_CI_PLATFORM, STIM_CI_DEVICE_ID, STIM_CI_APP_ID,
6195
- STIM_CI_METRO_PORT, STIM_CI_ARTIFACTS_DIR and STIM_CI_RUN_RESULT. The last is
6196
- run.json with the exact public API result. Use that target and check app
6238
+ STIM_CI_METRO_PORT, STIM_CI_ARTIFACTS_DIR and STIM_CI_RUN_RESULT. The last two
6239
+ are empty without --artifacts; otherwise STIM_CI_RUN_RESULT is run.json with the
6240
+ exact public API result, whose facts carry the stable cache appPath. Use that target and check app
6197
6241
  readiness; launched can still be bundling or unverified.
6198
6242
 
6199
6243
  result.json preserves the test exit code even if diagnostics or cleanup fail.
@@ -6213,7 +6257,7 @@ CI=true alone does not change defaults, ownership or coordination. Persist only
6213
6257
  cache artifacts, not state, claims or device ledgers. Independent homes must
6214
6258
  not share a writable filesystem cache because its claims live in the home.
6215
6259
 
6216
- The programmatic runner is import { runCI } from '@stim-cli/ci'. See its package
6260
+ The programmatic API is import { buildCI, runCI } from '@stim-cli/ci'. See its package
6217
6261
  README for result types, cancellation, cache policy, and coordination findings.`
6218
6262
  },
6219
6263
  "hosted-android": {
@@ -6222,9 +6266,8 @@ README for result types, cancellation, cache policy, and coordination findings.`
6222
6266
 
6223
6267
  If Stim is not installed globally, replace stim with npx stim.
6224
6268
 
6225
- stim settings set remote.machines '["janics-mac-mini"]'
6226
- stim doctor --fix
6227
- stim doctor
6269
+ stim remote add janics-mac-mini
6270
+ stim remote list
6228
6271
  stim android --remote janics-mac-mini --device-profile pixel_7
6229
6272
  stim status --json
6230
6273
  stim reload android
@@ -6384,10 +6427,9 @@ and show records already copied here.`
6384
6427
 
6385
6428
  If Stim is not installed globally, replace stim with npx stim.
6386
6429
 
6387
- stim settings set remote.machines '["janics-mac-mini"]'
6388
- stim doctor --fix
6389
- # A person there runs the stim-server setup command doctor printed.
6390
- stim doctor
6430
+ stim remote add janics-mac-mini
6431
+ # A person there runs the stim-server setup command it printed.
6432
+ stim remote list
6391
6433
  stim ios --remote janics-mac-mini --device-type "iPhone 17 Pro" --runtime "iOS 27.0"
6392
6434
  stim status --json
6393
6435
  stim reload ios
@@ -10055,6 +10097,8 @@ THE ONE CASE GC WILL NOT REAP
10055
10097
  global, so \`worktree remove\` reclaims them along with everything else in
10056
10098
  the global workspace directory. Each build starts its transcript file over, so the log
10057
10099
  holds one run and a workspace you keep building in does not accumulate them.
10100
+ A failed build also leaves a copy of its transcript (<log>.failed) that the
10101
+ next failed build replaces; \`gc\` does not trim it, \`worktree remove\` does.
10058
10102
 
10059
10103
  Simulators are large and live in the CoreSimulator device set, not in your
10060
10104
  project. If the disk is filling up, Stim's own devices are usually not the
@@ -10998,11 +11042,12 @@ A remote machine approves this one when a person there runs
10998
11042
  \`stim-server setup\` with this machine's setup ticket (32 random bytes, 43
10999
11043
  base64url characters) in STIM_SETUP_TICKET. Stim Desktop's Add wizard makes the
11000
11044
  ticket and sets STIM_ACCESS_TICKET for one \`doctor --fix\` run; without it,
11001
- \`doctor --fix\` makes one and prints the setup command to run on the worker.
11045
+ \`stim remote add <machine>\` or \`doctor --fix\` makes one and prints the setup
11046
+ command to run on the worker.
11002
11047
  Agents never set STIM_ACCESS_TICKET, never run \`stim-server setup\`, never edit
11003
11048
  \`remote.*\`, \`server.*\` or \`hosting.*\` for the user, and never approve requests.
11004
11049
  Until setup approves, the worker answers unknown-secret and the entry stays
11005
- pending; every doctor run tries again. The first connection after approval pins
11050
+ pending; every \`stim remote list\` or doctor run tries again. The first connection after approval pins
11006
11051
  the worker's stim-server key in build-machines.json or device-host-machines.json,
11007
11052
  and every later connection must prove that key; the tailnet node and address
11008
11053
  never decide who the worker is. With --fix, a pending entry is replaced when
@@ -11018,8 +11063,8 @@ agents do not run them. \`stim guide facts doctor\` lists the codes.
11018
11063
  REMOTE MACHINES AND PHONE APP
11019
11064
  When the user mentions slow builds, a busy machine, a full disk or device limit, or
11020
11065
  wanting updates away from the desk, tell them about Stim Desktop > Settings >
11021
- Remote Machines > Add (another machine on the tailnet that builds for this one,
11022
- or a Mac that also hosts simulators) or Phones > Pair a Phone (the Stim phone
11066
+ Remote Machines > Add, or \`stim remote add <machine>\` in their terminal (another
11067
+ machine on the tailnet that builds for this one, or a Mac that also hosts simulators) or Phones > Pair a Phone (the Stim phone
11023
11068
  app). Stim Desktop also suggests these itself, at most once a day and never
11024
11069
  during a build. Agents only tell the user: they never run \`stim-server setup\`,
11025
11070
  never edit \`remote.*\`, \`server.*\` or \`hosting.*\` for the user, and never
@@ -11028,10 +11073,20 @@ approve requests.
11028
11073
  REMOTE MACHINES ARE MACHINE-LEVEL
11029
11074
  \`remote.machines\` names the remote machines this machine may build on and host owned
11030
11075
  simulator sessions on, by MagicDNS name with an optional serve port (default
11031
- 7443). Name each node and port once:
11076
+ 7443). Name each node and port once. From any directory:
11077
+
11078
+ stim remote add janics-mac-mini
11079
+ stim remote list
11080
+ stim remote remove janics-mac-mini
11032
11081
 
11033
- stim settings set remote.machines '["janics-mac-mini"]'
11034
- stim doctor --fix
11082
+ \`stim remote add\` appends the machine to the machine-scope list, keeping the
11083
+ entries already there, asks it for build and device-host approval and prints
11084
+ the setup command for it. \`stim remote list\` contacts every listed machine
11085
+ and reports both approvals; it asks nothing new. \`stim remote remove\` drops the
11086
+ entry and forgets this machine's credentials for it; the remote machine keeps
11087
+ its approval until a person there runs the \`stim-server devices revoke\`
11088
+ command it prints. Each takes --json. \`stim settings set remote.machines\`
11089
+ replaces the whole list.
11035
11090
 
11036
11091
  The order of \`remote.machines\` is the priority order for every workload: the
11037
11092
  build, simulator, emulator and macOS app each go to the first listed machine that
@@ -11059,16 +11114,15 @@ addresses are refused, and the running server applies a change within seconds.
11059
11114
  An interface name follows the interface onto whatever private network it
11060
11115
  joins, so name the address on a machine that moves between networks, and an
11061
11116
  interface only on a worker that stays put. Then the person runs the setup
11062
- command \`stim doctor --fix\` prints here:
11117
+ command \`stim remote add\` prints here:
11063
11118
 
11064
11119
  stim settings set server.lanAddresses '["10.0.0.92"]' # on the worker
11065
- stim settings set remote.machines '["local:10.0.0.92"]' # on this machine
11066
- stim doctor --fix
11120
+ stim remote add local:10.0.0.92 # on this machine
11067
11121
 
11068
11122
  Every connection runs Stim's Noise handshake, so plain WebSocket carries it
11069
11123
  without TLS, and the address never identifies anyone. Nothing on a local network
11070
11124
  vouches for the worker's key, so \`stim-server setup\` prints the worker's server
11071
- key fingerprint and \`stim doctor --fix\`, run by a person in a terminal, shows
11125
+ key fingerprint and \`stim remote list\`, run by a person in a terminal, shows
11072
11126
  the fingerprint the worker answered with and pins the key only after they
11073
11127
  confirm it matches. Until then the entry reports key-unconfirmed and is not
11074
11128
  used. Agents never answer that question. The printed setup command carries the
@@ -11135,8 +11189,8 @@ machine idle: wait for existing work to finish or stop the relevant sessions bef
11135
11189
  benchmarking. Agents change these settings only when the user asks them to.
11136
11190
 
11137
11191
  DEVICE HOSTING
11138
- Only \`doctor --fix\` asks for device-host access: it makes a setup ticket and
11139
- prints the command. A person approves by running \`stim-server setup\` on the
11192
+ Only \`stim remote add\` and \`doctor --fix\` ask for device-host access: they
11193
+ make a setup ticket and print the command. A person approves by running \`stim-server setup\` on the
11140
11194
  worker with that ticket: one ticket, one expiry, one record per capability for
11141
11195
  the key that holds the ticket, with a per-grant Y/n question (Enter approves) in a
11142
11196
  terminal or \`--yes\` otherwise. Agents never run \`stim-server setup\` or
@@ -11166,9 +11220,11 @@ Stim sends tokens only to the pinned node's own tailnet address,
11166
11220
  with its MagicDNS name for TLS and Host routing. A changed node refuses
11167
11221
  access, and uncertain replies or unreadable credentials preserve the pin.
11168
11222
  An invalid remote.machines setting reports an error and preserves every saved credential.
11169
- \`doctor --fix\` forgets entries removed from remote.machines; remove a
11170
- replaced machine, run it, then re-add the name to request a new approval.
11171
- A definite revoked or lapsed request can be requested again with --fix.
11223
+ \`stim remote remove\` forgets the credentials of the machine it removes, and
11224
+ \`doctor --fix\` forgets those of entries removed from remote.machines otherwise.
11225
+ For a replaced machine, run \`stim remote remove <machine>\`, then
11226
+ \`stim remote add <machine>\` to request a new approval. A definite revoked or
11227
+ lapsed request can be requested again with \`stim remote add\` or --fix.
11172
11228
  An in-progress approval inspection reports busy rather than replacing its
11173
11229
  pending token. \`stim macos --remote <placement>\` or \`macos.remote\` runs a macOS
11174
11230
  app on an approved remote Mac (stim guide macos), and \`ios.remote\` and
@@ -11197,10 +11253,11 @@ The same \`remote.machines\` list names the machines that may build for this one
11197
11253
  "remote": { "machines": ["janics-mac-mini"] }
11198
11254
  }
11199
11255
 
11200
- \`doctor --fix\`, run in any app directory, makes a setup ticket for each named
11201
- machine and prints the \`stim-server setup\` command a person runs on that
11202
- machine to approve this one, under the approval rule above. The next doctor run
11203
- pins the worker's stim-server key in $STIM_HOME/build-machines.json. A build grant is full access
11256
+ \`stim remote add <machine>\`, run in any directory, makes a setup ticket for
11257
+ that machine and prints the \`stim-server setup\` command a person runs on that
11258
+ machine to approve this one, under the approval rule above; \`doctor --fix\`,
11259
+ run in an app directory, does the same for every named machine. The next
11260
+ \`stim remote list\` or doctor run pins the worker's stim-server key in $STIM_HOME/build-machines.json. A build grant is full access
11204
11261
  to the account stim-server runs as: project code runs there unsandboxed, so it
11205
11262
  can grant itself read and control. Revoking it does not undo what that code
11206
11263
  already did. Grant it only to machines you trust.
@@ -11280,8 +11337,8 @@ files the native fingerprint hashes or the Expo config reads, such as .env.local
11280
11337
  and other Expo .env files, secrets included. Nothing under node_modules and no
11281
11338
  build output the fingerprint ignores is sent. A fingerprint-mismatch refusal
11282
11339
  names the sources that differ and the files pod install or prebuild rewrote there.
11283
- Run stim doctor --fix to ask for build access if not paired. A person on the
11284
- worker approves it by running the stim-server setup command doctor printed, with
11340
+ Run stim remote add <machine> to ask for build access if not approved. A person
11341
+ on the worker approves it by running the stim-server setup command it printed, with
11285
11342
  its ticket and expiry. Check stim settings get remote.machines,
11286
11343
  or rerun with --remote-build auto or --remote-build local. Ctrl-C cancels
11287
11344
  the remote build without a local xcodebuild, Gradle or SwiftPM compile.
@@ -12350,9 +12407,9 @@ ON ANOTHER MAC
12350
12407
 
12351
12408
  stim macos --remote <machine> or macos.remote builds the Debug app on this Mac and runs it on an
12352
12409
  approved remote Mac over the tailnet, without SSH. The Mac must be listed
12353
- in remote.machines and approved: stim doctor --fix makes a setup ticket, a
12354
- person on that Mac runs stim-server setup with that ticket and expiry (guide
12355
- settings), and stim doctor then pins that Mac's stim-server key. Stim goes ahead
12410
+ in remote.machines and approved: stim remote add <machine> adds it and makes a
12411
+ setup ticket, a person on that Mac runs stim-server setup with that ticket and
12412
+ expiry (guide settings), and stim remote list then pins that Mac's stim-server key. Stim goes ahead
12356
12413
  only with the stim-server that proves it holds that key.
12357
12414
  A refusal or an unreachable host fails the command; with a named Mac it never launches here
12358
12415
  instead.
@@ -1,7 +1,7 @@
1
1
  import { d as throwIfCancelled } from "./exec-CGuDzt40.mjs";
2
- import { l as call, u as connectHost } from "./hosted-client-Bb89P6an.mjs";
3
- import { a as requestHostedMetro } from "./metro-request-2LmFpC1z.mjs";
4
- import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-C9xQYYFb.mjs";
2
+ import { l as call, u as connectHost } from "./hosted-client-DMOOu8vD.mjs";
3
+ import { a as requestHostedMetro } from "./metro-request-O8Q-JvBg.mjs";
4
+ import { a as stopHostedNative, i as prepareHostedNative, r as placeHostedNative } from "./hosted-native-BiiUG_Q6.mjs";
5
5
  //#region src/device-host/hosted-android.ts
6
6
  async function prepareHostedAndroid(machine, selectors, recorded, mode) {
7
7
  return await prepareHostedNative(machine, selectors, recorded, "android", false, mode);
@@ -1,7 +1,7 @@
1
1
  import { d as throwIfCancelled, l as cancellableSleep } from "./exec-CGuDzt40.mjs";
2
- import { K as resolveEndpoint, P as diagnoseConnectFailure } from "./config-BW0fAtoK.mjs";
3
- import { t as BuildConnection } from "./client-Dy0eJJtz.mjs";
4
- import { tt as configuredMachines } from "./support-DW575Dnx.mjs";
2
+ import { F as diagnoseConnectFailure, q as resolveEndpoint } from "./config-BA3TgoIP.mjs";
3
+ import { t as BuildConnection } from "./client-KSWIeQLA.mjs";
4
+ import { nt as configuredMachines } from "./support-BJbXovoO.mjs";
5
5
  import { createHash } from "node:crypto";
6
6
  import { lstatSync, readFileSync, readdirSync, readlinkSync } from "node:fs";
7
7
  import { join } from "node:path";
@@ -28,7 +28,7 @@ function credentialRefusal(message, remedy = "Run stim doctor.") {
28
28
  function hostingCredential(machine) {
29
29
  const configured = configuredMachines();
30
30
  if (configured === null) throw credentialRefusal("remote.machines is invalid. Run stim guide settings and correct it.", "Run stim guide settings and correct remote.machines.");
31
- if (!configured.includes(machine)) throw Object.assign(/* @__PURE__ */ new Error(`${machine} is not in remote.machines. Add it with stim settings set remote.machines, then run stim doctor --fix to ask it for hosting access.`), { code: "STIM_BAD_ARG" });
31
+ if (!configured.includes(machine)) throw Object.assign(/* @__PURE__ */ new Error(`${machine} is not in remote.machines. Run stim remote add ${machine} to add it and ask it for hosting access.`), { code: "STIM_BAD_ARG" });
32
32
  let credentials;
33
33
  try {
34
34
  credentials = readDeviceHostMachines();
@@ -36,9 +36,9 @@ function hostingCredential(machine) {
36
36
  throw credentialRefusal("The hosting credentials are unreadable. Run stim doctor.");
37
37
  }
38
38
  const credential = credentials.find((each) => each.machine === machine);
39
- if (!credential) throw credentialRefusal(`This machine has not asked ${machine} for hosting access. Run stim doctor --fix.`, "Run stim doctor --fix.");
39
+ if (!credential) throw credentialRefusal(`This machine has not asked ${machine} for hosting access. Run stim remote add ${machine}.`, `Run stim remote add ${machine}.`);
40
40
  if (credential.state !== "approved") {
41
- const remedy = `A person on ${machine} runs the stim-server setup command stim doctor --fix printed; then run stim doctor.`;
41
+ const remedy = `A person on ${machine} runs the stim-server setup command stim remote add ${machine} printed; then run stim remote list.`;
42
42
  throw credentialRefusal(`${machine} has not confirmed hosting access for this machine. ${remedy}`, remedy);
43
43
  }
44
44
  return credential;
@@ -1,11 +1,11 @@
1
1
  import { t as getExecutor } from "./exec-CGuDzt40.mjs";
2
- import { E as workspaceDir, k as workspaceLogsDir$1 } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
4
- import { U as parseMachine$1, _t as validateDeviceSlot, ut as deviceSlotFileKey } from "./config-BW0fAtoK.mjs";
5
- import { n as macosDir } from "./state-DSOUqO-o.mjs";
6
- import { n as androidLogGroups, r as isAndroidCrashText } from "./android-B2DSKg-A.mjs";
2
+ import { E as workspaceDir, k as workspaceLogsDir$1 } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { l as phaseLine } from "./command-output-T3cDctRE.mjs";
4
+ import { W as parseMachine$1, dt as deviceSlotFileKey, vt as validateDeviceSlot } from "./config-BA3TgoIP.mjs";
5
+ import { n as macosDir } from "./state-B4B5P4LU.mjs";
6
+ import { n as androidLogGroups, r as isAndroidCrashText } from "./android-5wkcMFDG.mjs";
7
7
  import { c as readNdjsonGenerations$1, i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
8
- import { l as call } from "./hosted-client-Bb89P6an.mjs";
8
+ import { l as call } from "./hosted-client-DMOOu8vD.mjs";
9
9
  import { mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
10
10
  import { dirname, join } from "node:path";
11
11
  import { LOG_ROTATE_BYTES, ambientWrite, withDirLockAsync } from "@stim-cli/core";
@@ -1,8 +1,8 @@
1
- import { l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
2
- import { n as pullHostedNativeLogs, r as readHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-DYPsnWMF.mjs";
3
- import { u as connectHost } from "./hosted-client-Bb89P6an.mjs";
4
- import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-CWsBysyN.mjs";
5
- import "./hosted-macos-DsEzYVY_.mjs";
1
+ import { l as phaseLine } from "./command-output-T3cDctRE.mjs";
2
+ import { n as pullHostedNativeLogs, r as readHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-CClIktQM.mjs";
3
+ import { u as connectHost } from "./hosted-client-DMOOu8vD.mjs";
4
+ import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-Avwz2cbZ.mjs";
5
+ import "./hosted-macos-D4sDJIbB.mjs";
6
6
  import { watch } from "node:fs";
7
7
  import { dirname, relative, resolve, sep } from "node:path";
8
8
  import { ambientWrite, configDir } from "@stim-cli/core";
@@ -1,9 +1,9 @@
1
1
  import { l as cancellableSleep } from "./exec-CGuDzt40.mjs";
2
- import { l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
3
- import { a as agentAccess, i as closeAgentConnection, o as removeAgentAccess, t as pullHostedMacosLogs } from "./hosted-logs-DYPsnWMF.mjs";
4
- import { n as macosDir } from "./state-DSOUqO-o.mjs";
5
- import { _t as runCancellationSignal } from "./toolchain-DRQyCvlp.mjs";
6
- import { _ as sha256, a as RESERVE_TIMEOUT_MS, b as upload, c as bundleManifest, d as heldNoLonger, g as settle, i as PREPARE_TIMEOUT_MS, l as call, n as INSTALL_TIMEOUT_MS, o as SESSION_TIMEOUT_MS, p as hostedSession, s as attach, u as connectHost, v as stoppedSession, y as unknownSession } from "./hosted-client-Bb89P6an.mjs";
2
+ import { l as phaseLine } from "./command-output-T3cDctRE.mjs";
3
+ import { a as agentAccess, i as closeAgentConnection, o as removeAgentAccess, t as pullHostedMacosLogs } from "./hosted-logs-CClIktQM.mjs";
4
+ import { n as macosDir } from "./state-B4B5P4LU.mjs";
5
+ import { _t as runCancellationSignal } from "./toolchain-DCnWAxQL.mjs";
6
+ import { _ as sha256, a as RESERVE_TIMEOUT_MS, b as upload, c as bundleManifest, d as heldNoLonger, g as settle, i as PREPARE_TIMEOUT_MS, l as call, n as INSTALL_TIMEOUT_MS, o as SESSION_TIMEOUT_MS, p as hostedSession, s as attach, u as connectHost, v as stoppedSession, y as unknownSession } from "./hosted-client-DMOOu8vD.mjs";
7
7
  import { randomUUID } from "node:crypto";
8
8
  import { join } from "node:path";
9
9
  import { ambientContext, ambientWrite } from "@stim-cli/core";
@@ -1,11 +1,11 @@
1
1
  import { l as cancellableSleep, w as withDrainingCancellation } from "./exec-CGuDzt40.mjs";
2
- import { E as workspaceDir, l as withWorkspaceStateLockAsync, r as readWorkspaceState$1 } from "./workspace-state-BdZ-QgmB.mjs";
3
- import { l as phaseLine } from "./command-output-CGxrQ3Bd.mjs";
4
- import { a as agentAccess, i as closeAgentConnection, n as pullHostedNativeLogs, o as removeAgentAccess } from "./hosted-logs-DYPsnWMF.mjs";
5
- import { _t as runCancellationSignal } from "./toolchain-DRQyCvlp.mjs";
6
- import { _ as sha256, a as RESERVE_TIMEOUT_MS, b as upload, c as bundleManifest, d as heldNoLonger, g as settle, h as requireHostedAppMode, i as PREPARE_TIMEOUT_MS, l as call, n as INSTALL_TIMEOUT_MS, o as SESSION_TIMEOUT_MS, p as hostedSession, r as OFFER_TIMEOUT_MS, s as attach, t as IMAGE_INSTALL_TIMEOUT_MS, u as connectHost, v as stoppedSession, y as unknownSession } from "./hosted-client-Bb89P6an.mjs";
7
- import { a as requestHostedMetro, n as closeHostedMetro, o as requireHostedMetro, r as hostedAgentPort } from "./metro-request-2LmFpC1z.mjs";
8
- import { s as writeHostedNative } from "./ios-state-CWsBysyN.mjs";
2
+ import { E as workspaceDir, l as withWorkspaceStateLockAsync, r as readWorkspaceState$1 } from "./workspace-state-BhwAJBgA.mjs";
3
+ import { l as phaseLine } from "./command-output-T3cDctRE.mjs";
4
+ import { a as agentAccess, i as closeAgentConnection, n as pullHostedNativeLogs, o as removeAgentAccess } from "./hosted-logs-CClIktQM.mjs";
5
+ import { _t as runCancellationSignal } from "./toolchain-DCnWAxQL.mjs";
6
+ import { _ as sha256, a as RESERVE_TIMEOUT_MS, b as upload, c as bundleManifest, d as heldNoLonger, g as settle, h as requireHostedAppMode, i as PREPARE_TIMEOUT_MS, l as call, n as INSTALL_TIMEOUT_MS, o as SESSION_TIMEOUT_MS, p as hostedSession, r as OFFER_TIMEOUT_MS, s as attach, t as IMAGE_INSTALL_TIMEOUT_MS, u as connectHost, v as stoppedSession, y as unknownSession } from "./hosted-client-DMOOu8vD.mjs";
7
+ import { a as requestHostedMetro, n as closeHostedMetro, o as requireHostedMetro, r as hostedAgentPort } from "./metro-request-O8Q-JvBg.mjs";
8
+ import { s as writeHostedNative } from "./ios-state-Avwz2cbZ.mjs";
9
9
  import { randomUUID } from "node:crypto";
10
10
  import { readFileSync } from "node:fs";
11
11
  import { join } from "node:path";
@@ -1,9 +1,9 @@
1
- import { h as shortUdid, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-CGxrQ3Bd.mjs";
2
- import { Q as pickDevClientScheme, et as schemesFromInfoPlist } from "./toolchain-DRQyCvlp.mjs";
3
- import { f as podAction, h as resolveDeviceType, i as deviceLabel, m as resolveConfiguration, n as buildLogFile, s as iosConfigurationSetting, t as appNameFromPath, u as isReleaseConfiguration, v as resolveRuntime } from "./support-DW575Dnx.mjs";
4
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-oDqT4UES.mjs";
5
- import { t as devClientScheme } from "./dev-client-DDApoVvd.mjs";
6
- import { c as writeLastBuild, i as iosFacts, n as cacheDescription, o as lastBuildRecord } from "./ios-project-PXBDoaii.mjs";
7
- import { d as replaceCollector, u as collectorEntry } from "./dependencies-IVl2Ga2D.mjs";
8
- import { n as registerIos, r as runIosOperation, t as iosCommand } from "./ios-FhMkDfNC.mjs";
1
+ import { h as shortUdid, i as formatDuration, l as phaseLine, m as shortHash } from "./command-output-T3cDctRE.mjs";
2
+ import { Q as pickDevClientScheme, et as schemesFromInfoPlist } from "./toolchain-DCnWAxQL.mjs";
3
+ import { f as podAction, h as resolveDeviceType, i as deviceLabel, m as resolveConfiguration, n as buildLogFile, s as iosConfigurationSetting, t as appNameFromPath, u as isReleaseConfiguration, v as resolveRuntime } from "./support-BJbXovoO.mjs";
4
+ import { n as ensureWorkspaceStorageSafely } from "./native-runtime-C3_NkUlW.mjs";
5
+ import { t as devClientScheme } from "./dev-client-MO_DjTZr.mjs";
6
+ import { c as writeLastBuild, i as iosFacts, n as cacheDescription, o as lastBuildRecord } from "./ios-project-Cz0S1Sz-.mjs";
7
+ import { d as replaceCollector, u as collectorEntry } from "./dependencies-LH-7k1Vr.mjs";
8
+ import { n as registerIos, r as runIosOperation, t as iosCommand } from "./ios-BhpUWyN7.mjs";
9
9
  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,10 +1,10 @@
1
1
  import { f as WorkspaceProcessCleanupError, l as cancellableSleep, n as isTimeoutError, t as getExecutor } from "./exec-CGuDzt40.mjs";
2
2
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
3
- import { rt as formatBytes, v as loadConfig$1 } from "./config-BW0fAtoK.mjs";
3
+ import { it as formatBytes, v as loadConfig$1 } from "./config-BA3TgoIP.mjs";
4
4
  import { n as runOperationFileQuiet, t as runOperationFile } from "./operation-exec-DKlBcKAL.mjs";
5
- import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-_WTria-r.mjs";
6
- import { Ot as recordCreatedDeviceAsync, Tt as forgetCreatedDeviceAsync, pt as isStimOwnedSim } from "./android-Iq0M2t2d.mjs";
7
- import { n as signedTailFor } from "./apk-signed-tail-CPpA-3vu.mjs";
5
+ import { i as stimDesktopInstalledAsync, n as settingDefault, t as STIM_DESKTOP_OPEN_OPTIONS } from "./stim-desktop-D0P_bzmd.mjs";
6
+ import { Ot as recordCreatedDeviceAsync, Tt as forgetCreatedDeviceAsync, pt as isStimOwnedSim } from "./android-SJx1V3R3.mjs";
7
+ import { n as signedTailFor } from "./apk-signed-tail-eZyXIrnc.mjs";
8
8
  import { createHash } from "node:crypto";
9
9
  import { closeSync, existsSync, lstatSync, mkdtempSync, openSync, readSync, readdirSync, rmSync, writeFileSync } from "node:fs";
10
10
  import { tmpdir, totalmem } from "node:os";