stim 1.34.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 (152) hide show
  1. package/dist/{acquire-artifact-B0SWoVNt.mjs → acquire-artifact-DGTHCd0Q.mjs} +19 -3
  2. package/dist/{act-7f7wIvCQ.mjs → act-CvN9xyV6.mjs} +18 -19
  3. package/dist/{activity-DkS-Ir6V.mjs → activity-BpdDvA8Q.mjs} +4 -4
  4. package/dist/{agent-device-usage-output-BVdgKbfz.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-BU4uBX8I.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-D7qjT2fq.mjs → android-e9WP10cE.mjs} +47 -41
  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-DmRtKFXW.mjs → artifact-C3srrGVU.mjs} +36 -14
  16. package/dist/{artifact-CNnTZs3R.mjs → artifact-ubNdxo_K.mjs} +52 -19
  17. package/dist/{auto-placement-DA65VQH7.mjs → auto-placement-CKFpFCuq.mjs} +7 -8
  18. package/dist/{browser-web-Dn_hgKZC.mjs → browser-web-B63vLrj6.mjs} +11 -11
  19. package/dist/{build-D7SuVoRX.mjs → build-B_Dx9SKJ.mjs} +72 -25
  20. package/dist/{build-cache-Cqj4FGnX.mjs → build-cache-BW8T4oD2.mjs} +10 -5
  21. package/dist/{build-plan-Ct1FiA3E.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-DjdvQG5U.mjs → cli-COdXswmc.mjs} +19 -18
  25. package/dist/cli.mjs +1 -1
  26. package/dist/{client-kU37gURU.mjs → client-KSWIeQLA.mjs} +9 -8
  27. package/dist/collector-run.mjs +4 -4
  28. package/dist/{command-output-DjExb_tZ.mjs → command-output-T3cDctRE.mjs} +1 -1
  29. package/dist/{config-BW0fAtoK.mjs → config-BA3TgoIP.mjs} +59 -10
  30. package/dist/{dependencies-CZ7c8XX_.mjs → dependencies-LH-7k1Vr.mjs} +35 -38
  31. package/dist/{dependency-state-mL5g4H6K.mjs → dependency-state-Blfp3AkG.mjs} +1 -1
  32. package/dist/{dev-client-D3wOllNd.mjs → dev-client-MO_DjTZr.mjs} +2 -2
  33. package/dist/{device-DH5yf6TU.mjs → device-BZWt_aPJ.mjs} +11 -11
  34. package/dist/{device-CWPFAqs0.mjs → device-DNTWFFB1.mjs} +12 -12
  35. package/dist/{device-android-ChfF5I9A.mjs → device-android-BB9Lugr8.mjs} +8 -8
  36. package/dist/{ccache-ChBMXlBq.mjs → device-capacity-CpAVcKgq.mjs} +1006 -23
  37. package/dist/device-host-worker.mjs +13 -14
  38. package/dist/{device-pool-EZziQ0uS.mjs → device-pool-BJToGG-q.mjs} +3 -3
  39. package/dist/{device-provision-CfpEy-Vm.mjs → device-provision-CxQDCtrc.mjs} +9 -9
  40. package/dist/{doctor-CGBsS_68.mjs → doctor-C-46SkBe.mjs} +1 -1
  41. package/dist/{doctor-dwRboaXx.mjs → doctor-CYZ45LnX.mjs} +20 -21
  42. package/dist/{doctor-B5uEZiKp.mjs → doctor-DV639Iw_.mjs} +15 -16
  43. package/dist/doctor-fingerprint.mjs +1 -1
  44. package/dist/{doctor-watchman-r7M9UPi0.mjs → doctor-watchman-TZxYt_98.mjs} +4 -4
  45. package/dist/{eas-build-BpHIt_M3.mjs → eas-build-Xf5Jd6LR.mjs} +2 -2
  46. package/dist/{eas-fallback-CNPcjq3K.mjs → eas-fallback-DNYPNinw.mjs} +4 -4
  47. package/dist/{eas-session-ledger-CXwagcQ7.mjs → eas-session-ledger-CXZ4aix0.mjs} +5 -5
  48. package/dist/{error-diagnostics-Ym2mjmJ0.mjs → error-diagnostics-CvB5bpPU.mjs} +8 -8
  49. package/dist/{gc-B464w_a5.mjs → gc-8Qm_K1iy.mjs} +2 -2
  50. package/dist/{gc-C7YxKNci.mjs → gc-DiUhrVFo.mjs} +17 -17
  51. package/dist/{guide-BFW-cB7R.mjs → guide-CuvHRP53.mjs} +130 -65
  52. package/dist/{hosted-android-B7yfqXEy.mjs → hosted-android-D__HGVIO.mjs} +3 -3
  53. package/dist/{hosted-client-CQuzZwAu.mjs → hosted-client-DMOOu8vD.mjs} +6 -6
  54. package/dist/{hosted-logs-DfYCqrrR.mjs → hosted-logs-CClIktQM.mjs} +6 -6
  55. package/dist/{hosted-logs-sync-Dlpa2mQF.mjs → hosted-logs-sync-B7XCeqVm.mjs} +5 -5
  56. package/dist/{hosted-macos-JKefapEm.mjs → hosted-macos-D4sDJIbB.mjs} +5 -5
  57. package/dist/{hosted-native-B7OFt5gB.mjs → hosted-native-BiiUG_Q6.mjs} +7 -7
  58. package/dist/{ios-sUPbWqEh.mjs → ios-BZuhvLGr.mjs} +8 -8
  59. package/dist/{ios-BdZdNsAj.mjs → ios-BhfpRfNf.mjs} +4 -4
  60. package/dist/{ios-DSBs9c6d.mjs → ios-BhpUWyN7.mjs} +39 -32
  61. package/dist/{ios-device-Drplrgzo.mjs → ios-device-vhYL1N--.mjs} +1 -1
  62. package/dist/{ios-project-DoTQYghg.mjs → ios-project-Cz0S1Sz-.mjs} +7 -7
  63. package/dist/{ios-signing-R34vbrNU.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-DrokhOfo.mjs → js-swap-Desu2iII.mjs} +4 -4
  66. package/dist/{launch-Cy-MWEZc.mjs → launch-6ckG9UrC.mjs} +19 -19
  67. package/dist/{lightened-ALwQcQtV.mjs → lightened-B6TnpHMX.mjs} +4 -4
  68. package/dist/{logs-DuED-01Z.mjs → logs-B-DMy1K0.mjs} +7 -7
  69. package/dist/{logs-DWT7jGpF.mjs → logs-CO0CJRiC.mjs} +5 -5
  70. package/dist/{macos-CtBtA_hW.mjs → macos-B1aCXhem.mjs} +19 -19
  71. package/dist/{macos-kWGcfLzx.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-tISP2EVp.mjs → native-android-28NOG2-y.mjs} +17 -17
  78. package/dist/{native-gradle-artifact-inputs-DVoeZkrw.mjs → native-gradle-artifact-inputs-DxVEtS6_.mjs} +3 -3
  79. package/dist/{native-runtime-CNgxeOCG.mjs → native-runtime-C3_NkUlW.mjs} +6 -6
  80. package/dist/{native-xcode-inputs-DGzkhpu4.mjs → native-xcode-inputs-BWFTw5cJ.mjs} +2 -2
  81. package/dist/{native-xcode-ios-B9nsfId2.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-Bo0EzJ-P.mjs → phone-reverses-BhSxbqom.mjs} +4 -4
  86. package/dist/{placement-log-BsGvKLtU.mjs → placement-log-B8RCSzOm.mjs} +1 -1
  87. package/dist/{plan-placement-Am0IjuxB.mjs → plan-placement-BI4r55aP.mjs} +6 -6
  88. package/dist/{ports-CNzg1LYD.mjs → ports-DhOSyWm9.mjs} +3 -3
  89. package/dist/{prebuild-BfJII57G.mjs → prebuild-Di2IhUue.mjs} +9 -9
  90. package/dist/{project-DU3jjnBE.mjs → project-Clk1JAWL.mjs} +15 -15
  91. package/dist/{react-native-android-3dZiJv-4.mjs → react-native-android-bdHBMrnf.mjs} +23 -23
  92. package/dist/{react-native-build-CuvNPt-q.mjs → react-native-build-CJega_NM.mjs} +7 -7
  93. package/dist/{react-native-doctor-a35BwMUO.mjs → react-native-doctor-CY7BGITE.mjs} +5 -5
  94. package/dist/{react-native-ios-CqnReM1t.mjs → react-native-ios-Bo5EDVel.mjs} +25 -20
  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-CC3sNo10.mjs → reload-A_axEbeS.mjs} +14 -14
  98. package/dist/{reload-YPnvXGlB.mjs → reload-BvDuvygc.mjs} +1 -1
  99. package/dist/remote-PD6CM0xp.mjs +158 -0
  100. package/dist/{remote-BfaIHnhM.mjs → remote-WK_swZEw.mjs} +8 -8
  101. package/dist/{result-H-AxY7Ud.mjs → result-BkDpN5Mz.mjs} +23 -18
  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-Bn_gOObU.mjs → server-command-S00-ddjK.mjs} +4 -4
  105. package/dist/server-expo-BWJDa7Qb.mjs +2 -0
  106. package/dist/{server-expo-CUJ2fuv1.mjs → server-expo-cc-cmfsl.mjs} +2 -2
  107. package/dist/{settings-B5IBDfTx.mjs → settings-Bap-qjnp.mjs} +1 -1
  108. package/dist/{settings-DoWHJopy.mjs → settings-C_Xu4RNZ.mjs} +2 -2
  109. package/dist/{settings-payload-Bxw3hid5.mjs → settings-payload-D5jjhmrw.mjs} +4 -4
  110. package/dist/{settings-write-C6d7EC54.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-kq0-7w9C.mjs → slot-launch-qEQVTth7.mjs} +6 -6
  114. package/dist/{stage-CBfMTUK3.mjs → stage-CxVI_MlP.mjs} +1 -1
  115. package/dist/{start-Diu8q6_U.mjs → start-CVzivp35.mjs} +1 -1
  116. package/dist/{start-WTMumMHi.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-D4cW247z.mjs → stats-COoePEri.mjs} +4 -4
  120. package/dist/{status-CEwxo-PS.mjs → status-CIg0k7Qb.mjs} +21 -22
  121. package/dist/{status-B-oeWS0Z.mjs → status-CIvU5-TF.mjs} +1 -1
  122. package/dist/{status-DTFhDnd1.mjs → status-CQWmNl1f.mjs} +1 -1
  123. package/dist/{status-watch-D63R5nSI.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-HL2RvhrE.mjs → stop-BEBBruvD.mjs} +4 -4
  127. package/dist/{stop-Dm9ON6Os.mjs → stop-BiI4_VFG.mjs} +2 -2
  128. package/dist/{stop-vX4w3_8V.mjs → stop-C3d5qG7C.mjs} +15 -15
  129. package/dist/supervisor-run.mjs +12 -13
  130. package/dist/support-BJbXovoO.mjs +2089 -0
  131. package/dist/{support-BNe1_Hg7.mjs → support-Vckdzrmk.mjs} +5 -5
  132. package/dist/{swiftpm-artifact-inputs-uq5oV7xR.mjs → swiftpm-artifact-inputs-DbuF-Yrr.mjs} +1 -1
  133. package/dist/{swiftpm-macos-ClF203_2.mjs → swiftpm-macos-Bu8xeBfM.mjs} +8 -8
  134. package/dist/{toolchain-CECahBDa.mjs → toolchain-CIRdNl-c.mjs} +1 -1
  135. package/dist/{toolchain-CYonNjd_.mjs → toolchain-DCnWAxQL.mjs} +71 -7
  136. package/dist/{warm-progress-q11Vdvhh.mjs → warm-progress-DwsGBpph.mjs} +3 -3
  137. package/dist/{web-BdaMBr2O.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-B9v5V7Es.mjs → workspaces-Dh5N70qW.mjs} +11 -11
  142. package/dist/{worktree-C4MBOMz7.mjs → worktree-DLm4s2Ib.mjs} +1 -1
  143. package/dist/{worktree-C3N86KpI.mjs → worktree-Yw3EW77B.mjs} +24 -24
  144. package/package.json +7 -7
  145. package/dist/device-capacity-CHC3dKWg.mjs +0 -867
  146. package/dist/device-ios-B3-Ah--R.mjs +0 -716
  147. package/dist/device-lease-run-i3FNX4OE.mjs +0 -282
  148. package/dist/idle-shutdown-DPD8oV36.mjs +0 -142
  149. package/dist/selection-CH-MUVGD.mjs +0 -791
  150. package/dist/server-expo-B59N16uT.mjs +0 -2
  151. package/dist/support-ivsfDj0v.mjs +0 -287
  152. package/dist/web-CIpHpGp8.mjs +0 -2
@@ -1,8 +1,8 @@
1
- import { t as ANDROID_AVD_CONFIG_HELP } from "./settings-B5IBDfTx.mjs";
2
- import { i as findProjectRoot$1 } from "./project-DU3jjnBE.mjs";
3
- import { h as RECENT_LAUNCH_MS } from "./eas-session-ledger-CXwagcQ7.mjs";
4
- import { o as guideStatus, t as WATCHMAN_NESTED_WORKTREES } from "./doctor-watchman-r7M9UPi0.mjs";
5
- import "./status-watch-D63R5nSI.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
@@ -6471,7 +6513,7 @@ refuses. The host boots headless and ignores this Mac's iosSimulatorApp setting.
6471
6513
  --slot, --device-type and --runtime select the hosted simulator; --scheme,
6472
6514
  --configuration and --eas-profile select the app as usual. The build targets
6473
6515
  the offered simulator architecture, not this machine's. --remote-build remains
6474
- independent and selects a compatible build worker for a Debug cache miss.
6516
+ independent and selects a compatible build worker for a cache miss.
6475
6517
 
6476
6518
  The host's own owned devices count toward concurrency.maxDevices and its per-platform cap
6477
6519
  (concurrency.maxIosDevices, concurrency.maxAndroidDevices; hosted macOS apps use concurrency.maxMacosApps).
@@ -8757,7 +8799,12 @@ THE POOL: WHICH DEVICE AN ID-LESS \`--device\` PICKS
8757
8799
  its own hermesc when Hermes is enabled) into a copy of the artifact,
8758
8800
  refreshes an expo-updates manifest as described above, re-signs it and
8759
8801
  installs that; any swap failure falls back to a full build
8760
- rather than ever installing stale JS. Device logs are still collected, so
8802
+ rather than ever installing stale JS. A simulator Release build can run on
8803
+ a remote machine (stim guide settings, remote.build), which bundles the JS
8804
+ of the checkout it synced, its gitignored .env.production files included,
8805
+ in the remote machine's environment: an EXPO_PUBLIC_ variable set only in
8806
+ this shell is not applied there. A machine without Xcode cannot swap, so a
8807
+ cached Release app is built again on the remote machine instead. Device logs are still collected, so
8761
8808
  \`logs --errors\` answers "does it repro in release/Hermes bytecode".
8762
8809
  A run with no \`--device\` installs on the simulator only. \`ios --device\`
8763
8810
  builds the \`iphoneos\` slice for a cabled iPhone and keys its cache
@@ -10050,6 +10097,8 @@ THE ONE CASE GC WILL NOT REAP
10050
10097
  global, so \`worktree remove\` reclaims them along with everything else in
10051
10098
  the global workspace directory. Each build starts its transcript file over, so the log
10052
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.
10053
10102
 
10054
10103
  Simulators are large and live in the CoreSimulator device set, not in your
10055
10104
  project. If the disk is filling up, Stim's own devices are usually not the
@@ -10993,11 +11042,12 @@ A remote machine approves this one when a person there runs
10993
11042
  \`stim-server setup\` with this machine's setup ticket (32 random bytes, 43
10994
11043
  base64url characters) in STIM_SETUP_TICKET. Stim Desktop's Add wizard makes the
10995
11044
  ticket and sets STIM_ACCESS_TICKET for one \`doctor --fix\` run; without it,
10996
- \`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.
10997
11047
  Agents never set STIM_ACCESS_TICKET, never run \`stim-server setup\`, never edit
10998
11048
  \`remote.*\`, \`server.*\` or \`hosting.*\` for the user, and never approve requests.
10999
11049
  Until setup approves, the worker answers unknown-secret and the entry stays
11000
- 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
11001
11051
  the worker's stim-server key in build-machines.json or device-host-machines.json,
11002
11052
  and every later connection must prove that key; the tailnet node and address
11003
11053
  never decide who the worker is. With --fix, a pending entry is replaced when
@@ -11013,8 +11063,8 @@ agents do not run them. \`stim guide facts doctor\` lists the codes.
11013
11063
  REMOTE MACHINES AND PHONE APP
11014
11064
  When the user mentions slow builds, a busy machine, a full disk or device limit, or
11015
11065
  wanting updates away from the desk, tell them about Stim Desktop > Settings >
11016
- Remote Machines > Add (another machine on the tailnet that builds for this one,
11017
- 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
11018
11068
  app). Stim Desktop also suggests these itself, at most once a day and never
11019
11069
  during a build. Agents only tell the user: they never run \`stim-server setup\`,
11020
11070
  never edit \`remote.*\`, \`server.*\` or \`hosting.*\` for the user, and never
@@ -11023,10 +11073,20 @@ approve requests.
11023
11073
  REMOTE MACHINES ARE MACHINE-LEVEL
11024
11074
  \`remote.machines\` names the remote machines this machine may build on and host owned
11025
11075
  simulator sessions on, by MagicDNS name with an optional serve port (default
11026
- 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
11027
11081
 
11028
- stim settings set remote.machines '["janics-mac-mini"]'
11029
- 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.
11030
11090
 
11031
11091
  The order of \`remote.machines\` is the priority order for every workload: the
11032
11092
  build, simulator, emulator and macOS app each go to the first listed machine that
@@ -11054,16 +11114,15 @@ addresses are refused, and the running server applies a change within seconds.
11054
11114
  An interface name follows the interface onto whatever private network it
11055
11115
  joins, so name the address on a machine that moves between networks, and an
11056
11116
  interface only on a worker that stays put. Then the person runs the setup
11057
- command \`stim doctor --fix\` prints here:
11117
+ command \`stim remote add\` prints here:
11058
11118
 
11059
11119
  stim settings set server.lanAddresses '["10.0.0.92"]' # on the worker
11060
- stim settings set remote.machines '["local:10.0.0.92"]' # on this machine
11061
- stim doctor --fix
11120
+ stim remote add local:10.0.0.92 # on this machine
11062
11121
 
11063
11122
  Every connection runs Stim's Noise handshake, so plain WebSocket carries it
11064
11123
  without TLS, and the address never identifies anyone. Nothing on a local network
11065
11124
  vouches for the worker's key, so \`stim-server setup\` prints the worker's server
11066
- 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
11067
11126
  the fingerprint the worker answered with and pins the key only after they
11068
11127
  confirm it matches. Until then the entry reports key-unconfirmed and is not
11069
11128
  used. Agents never answer that question. The printed setup command carries the
@@ -11130,8 +11189,8 @@ machine idle: wait for existing work to finish or stop the relevant sessions bef
11130
11189
  benchmarking. Agents change these settings only when the user asks them to.
11131
11190
 
11132
11191
  DEVICE HOSTING
11133
- Only \`doctor --fix\` asks for device-host access: it makes a setup ticket and
11134
- 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
11135
11194
  worker with that ticket: one ticket, one expiry, one record per capability for
11136
11195
  the key that holds the ticket, with a per-grant Y/n question (Enter approves) in a
11137
11196
  terminal or \`--yes\` otherwise. Agents never run \`stim-server setup\` or
@@ -11161,9 +11220,11 @@ Stim sends tokens only to the pinned node's own tailnet address,
11161
11220
  with its MagicDNS name for TLS and Host routing. A changed node refuses
11162
11221
  access, and uncertain replies or unreadable credentials preserve the pin.
11163
11222
  An invalid remote.machines setting reports an error and preserves every saved credential.
11164
- \`doctor --fix\` forgets entries removed from remote.machines; remove a
11165
- replaced machine, run it, then re-add the name to request a new approval.
11166
- 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.
11167
11228
  An in-progress approval inspection reports busy rather than replacing its
11168
11229
  pending token. \`stim macos --remote <placement>\` or \`macos.remote\` runs a macOS
11169
11230
  app on an approved remote Mac (stim guide macos), and \`ios.remote\` and
@@ -11192,10 +11253,11 @@ The same \`remote.machines\` list names the machines that may build for this one
11192
11253
  "remote": { "machines": ["janics-mac-mini"] }
11193
11254
  }
11194
11255
 
11195
- \`doctor --fix\`, run in any app directory, makes a setup ticket for each named
11196
- machine and prints the \`stim-server setup\` command a person runs on that
11197
- machine to approve this one, under the approval rule above. The next doctor run
11198
- 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
11199
11261
  to the account stim-server runs as: project code runs there unsandboxed, so it
11200
11262
  can grant itself read and control. Revoking it does not undo what that code
11201
11263
  already did. Grant it only to machines you trust.
@@ -11254,12 +11316,15 @@ that has it (--scope limits it to one).
11254
11316
 
11255
11317
  A name never prompts for pairing, tries another remote machine or falls back here.
11256
11318
  remote-only refuses instead of building here for a build that cannot leave this
11257
- machine (device, Release, an unknown simulator runtime, the build cache off), and
11258
- when no pairing or approval exists.
11319
+ machine (device, Android release, an unknown simulator runtime, the build cache
11320
+ off), and when no pairing or approval exists.
11259
11321
  Any refusal or failure is STIM_OFFLOAD_REFUSED with the remote machine and reason.
11260
- Device, Release/non-Debug, --remote, Android CAS compiler builds, builds with
11261
- the build cache off, and an unknown simulator runtime cannot build there and
11262
- refuse on a cache miss. Invalid values, unlisted names and unpaired names refuse
11322
+ Device, Android release variant, --remote, Android CAS compiler builds, builds
11323
+ with the build cache off, and an unknown simulator runtime cannot build there
11324
+ and refuse on a cache miss, with a remedy to rerun with --remote-build local or
11325
+ auto. An iOS simulator Release or other non-Debug build can: the remote machine
11326
+ bundles the JS of the synced checkout into the app.
11327
+ Invalid values, unlisted names and unpaired names refuse
11263
11328
  at setup before consulting the cache; they create no build record or failed-run
11264
11329
  stats. A listed paired name with a cache hit compiles nothing, contacts no worker
11265
11330
  and records buildMachine with builtOn absent. Build failures retain the selected
@@ -11272,8 +11337,8 @@ files the native fingerprint hashes or the Expo config reads, such as .env.local
11272
11337
  and other Expo .env files, secrets included. Nothing under node_modules and no
11273
11338
  build output the fingerprint ignores is sent. A fingerprint-mismatch refusal
11274
11339
  names the sources that differ and the files pod install or prebuild rewrote there.
11275
- Run stim doctor --fix to ask for build access if not paired. A person on the
11276
- 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
11277
11342
  its ticket and expiry. Check stim settings get remote.machines,
11278
11343
  or rerun with --remote-build auto or --remote-build local. Ctrl-C cancels
11279
11344
  the remote build without a local xcodebuild, Gradle or SwiftPM compile.
@@ -11334,10 +11399,10 @@ machine counts as saturated: each machine applies its own value, and a remote
11334
11399
  machine past it is skipped like a full one. \`stim status\` shows this machine's
11335
11400
  load per core against it, as \`capacity.load\` in JSON.
11336
11401
 
11337
- Device, Release and
11402
+ Device builds, Android release variants,
11338
11403
  \`--remote eas|proxy\` builds, Android builds with the Apple Clang CAS compiler cache,
11339
11404
  and iOS/Android runs with the build cache off, always build here. Hosted iOS
11340
- Debug builds can use a separate --remote-build, targeting the hosting Mac's
11405
+ builds can use a separate --remote-build, targeting the hosting Mac's
11341
11406
  architecture and runtime.
11342
11407
  macOS uses matching Xcode and macOS SDK (not when --remote-build and --remote name the
11343
11408
  same Mac; see stim guide macos), with a per-client SwiftPM dependency
@@ -12342,9 +12407,9 @@ ON ANOTHER MAC
12342
12407
 
12343
12408
  stim macos --remote <machine> or macos.remote builds the Debug app on this Mac and runs it on an
12344
12409
  approved remote Mac over the tailnet, without SSH. The Mac must be listed
12345
- in remote.machines and approved: stim doctor --fix makes a setup ticket, a
12346
- person on that Mac runs stim-server setup with that ticket and expiry (guide
12347
- 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
12348
12413
  only with the stim-server that proves it holds that key.
12349
12414
  A refusal or an unreachable host fails the command; with a named Mac it never launches here
12350
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-CQuzZwAu.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-B7OFt5gB.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-kU37gURU.mjs";
4
- import { g as configuredMachines } from "./selection-CH-MUVGD.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-DjExb_tZ.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-CQuzZwAu.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-DjExb_tZ.mjs";
2
- import { n as pullHostedNativeLogs, r as readHostedNativeLogs, t as pullHostedMacosLogs } from "./hosted-logs-DfYCqrrR.mjs";
3
- import { u as connectHost } from "./hosted-client-CQuzZwAu.mjs";
4
- import { n as readHostedIos, t as readHostedAndroid } from "./ios-state-CWsBysyN.mjs";
5
- import "./hosted-macos-JKefapEm.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-DjExb_tZ.mjs";
3
- import { a as agentAccess, i as closeAgentConnection, o as removeAgentAccess, t as pullHostedMacosLogs } from "./hosted-logs-DfYCqrrR.mjs";
4
- import { n as macosDir } from "./state-DSOUqO-o.mjs";
5
- import { _t as runCancellationSignal } from "./toolchain-CYonNjd_.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-CQuzZwAu.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-DjExb_tZ.mjs";
4
- import { a as agentAccess, i as closeAgentConnection, n as pullHostedNativeLogs, o as removeAgentAccess } from "./hosted-logs-DfYCqrrR.mjs";
5
- import { _t as runCancellationSignal } from "./toolchain-CYonNjd_.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-CQuzZwAu.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-DjExb_tZ.mjs";
2
- import { Q as pickDevClientScheme, et as schemesFromInfoPlist } from "./toolchain-CYonNjd_.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-ivsfDj0v.mjs";
4
- import { n as ensureWorkspaceStorageSafely } from "./native-runtime-CNgxeOCG.mjs";
5
- import { t as devClientScheme } from "./dev-client-D3wOllNd.mjs";
6
- import { c as writeLastBuild, i as iosFacts, n as cacheDescription, o as lastBuildRecord } from "./ios-project-DoTQYghg.mjs";
7
- import { d as replaceCollector, u as collectorEntry } from "./dependencies-CZ7c8XX_.mjs";
8
- import { n as registerIos, r as runIosOperation, t as iosCommand } from "./ios-DSBs9c6d.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";