stim 1.17.0 → 1.17.2

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 (47) hide show
  1. package/dist/{android--GorydsK.mjs → android-B9yaNKwa.mjs} +15 -15
  2. package/dist/{budget-DM984mnd.mjs → budget-DfcgFdQB.mjs} +33 -12
  3. package/dist/{build-plan-CmQCoyT-.mjs → build-plan-BDsSi09V.mjs} +14 -14
  4. package/dist/{idle-B2m-Ovod.mjs → build-progress-D0WkjCPd.mjs} +56 -183
  5. package/dist/{cli-Daxug5-K.mjs → cli-CYXb29oE.mjs} +13 -13
  6. package/dist/cli.mjs +1 -1
  7. package/dist/{machines-C2XiNwh9.mjs → client-SvBdgObD.mjs} +348 -309
  8. package/dist/{deps-DNWaQs4V.mjs → deps-iKw0eD4P.mjs} +1 -1
  9. package/dist/{device-capacity-D0GWHnTM.mjs → device-capacity-ZC4XSZ4R.mjs} +2 -2
  10. package/dist/device-host-worker.mjs +3 -3
  11. package/dist/{device-ios-Bc7vbGwl.mjs → device-ios-C2Um-XUR.mjs} +1 -1
  12. package/dist/{doctor-Cnk9d7Hm.mjs → doctor-CFv1fCrF.mjs} +14 -13
  13. package/dist/{gc-DxCL2A46.mjs → gc-DEmkg3Xh.mjs} +9 -8
  14. package/dist/{gradle-D7-L2Th3.mjs → gradle-dJpre3Yn.mjs} +1 -1
  15. package/dist/{guide-DjrTQGik.mjs → guide-CSmhMTf8.mjs} +156 -127
  16. package/dist/{hosted-android-DwLS4Mse.mjs → hosted-android-E1Heoqnv.mjs} +3 -3
  17. package/dist/{hosted-client-wk1W_CNW.mjs → hosted-client-Bp4knSwu.mjs} +4 -4
  18. package/dist/{hosted-ios-aMo7Cljf.mjs → hosted-ios-BnbeYOUD.mjs} +1 -1
  19. package/dist/{hosted-logs-DqYmWtXc.mjs → hosted-logs-OcgIBvCT.mjs} +2 -2
  20. package/dist/{hosted-macos-dlHXEeF5.mjs → hosted-macos-DcxKjtfH.mjs} +2 -2
  21. package/dist/{hosted-native-C9xJ9rpA.mjs → hosted-native-1Ebbig4w.mjs} +3 -3
  22. package/dist/idle-BXG__1BA.mjs +176 -0
  23. package/dist/{idle-shutdown-_3oOV1V_.mjs → idle-shutdown-IGyNV8Cr.mjs} +1 -1
  24. package/dist/{ios-DE6duQoz.mjs → ios-BJ4XUSe1.mjs} +18 -18
  25. package/dist/{logs-DUoKlDoS.mjs → logs-BAaS7gS2.mjs} +3 -3
  26. package/dist/{macos-32po3kUq.mjs → macos-BIRQS90f.mjs} +66 -25
  27. package/dist/maintenance-run.mjs +2 -2
  28. package/dist/{metro-gateway-DmslUM30.mjs → metro-gateway-C-ijGI2F.mjs} +1 -1
  29. package/dist/{native-runtime-DhJI3IVQ.mjs → native-runtime-BEK171xQ.mjs} +1 -1
  30. package/dist/offload-worker.mjs +5 -5
  31. package/dist/{preview-CxPRIEht.mjs → preview-B-g9d7kV.mjs} +1 -1
  32. package/dist/{reload-qZei6iWn.mjs → reload-DcRxj3qG.mjs} +2 -2
  33. package/dist/settings.schema.json +86 -68
  34. package/dist/{start-BopZcr4n.mjs → start-AlfCPRVU.mjs} +1 -1
  35. package/dist/{start-uee1wWjY.mjs → start-DUz3mYdb.mjs} +1 -1
  36. package/dist/{status-dXX2JX1C.mjs → status-BA2pehwf.mjs} +9 -9
  37. package/dist/{stop-Cr1d8DSE.mjs → stop-BIiM49EY.mjs} +1 -1
  38. package/dist/{stop-BjizrQwv.mjs → stop-DQIasgKp.mjs} +3 -3
  39. package/dist/{stop-BCwvvs7F.mjs → stop-zF1y04f2.mjs} +1 -1
  40. package/dist/supervisor-run.mjs +4 -4
  41. package/dist/{support-BJPgYCu-.mjs → support-CsJNVfOc.mjs} +4 -4
  42. package/dist/{support-F9-sr0Oi.mjs → support-WvD__tSV.mjs} +2 -2
  43. package/dist/{toolchain-CNIBTIOv.mjs → toolchain-DNyR3NPq.mjs} +10 -6
  44. package/dist/{web-exQtGkoc.mjs → web-Dl0KSRHf.mjs} +2 -2
  45. package/dist/{worktree-ZpZR3S1k.mjs → worktree-Be_7NLKy.mjs} +6 -6
  46. package/dist/{worktree-Dc98cE6_.mjs → worktree-j3IcFAI5.mjs} +1 -1
  47. package/package.json +5 -5
@@ -136,12 +136,12 @@ To learn whether the next build is a cache hit and how long it should take,
136
136
  without building, run stim ios --plan (or stim android --plan); see stim guide
137
137
  lifecycle builds.
138
138
 
139
- Agents never set STIM_ACCESS_TICKET, run stim-server setup, edit offload.*
140
- or hosting.* for the user, or approve requests. Read stim guide settings for
139
+ Agents never set STIM_ACCESS_TICKET, run stim-server setup, edit remote.*,
140
+ server.* or hosting.* for the user, or approve requests. Read stim guide settings for
141
141
  Desktop access tickets and person-owned approval.
142
- Read stim guide settings to select a build machine. Keep a requested named
142
+ Read stim guide settings to select a remote Mac. Keep a requested named
143
143
  placement when recovering STIM_OFFLOAD_REFUSED: report its reason and remedy.
144
- When the user mentions slow builds, a busy Mac or wanting updates away from the desk, tell them about Stim Desktop > Settings > Build machines > Add or Phones > Pair a Phone; see stim guide settings.
144
+ When the user mentions slow builds, a busy Mac or wanting updates away from the desk, tell them about Stim Desktop > Settings > Remote Macs > Add or Phones > Pair a Phone; see stim guide settings.
145
145
 
146
146
  Read stim guide lifecycle concurrency when a build waits on another workspace
147
147
  or a build call times out. A native build can outlive a shell timeout; if the
@@ -661,8 +661,8 @@ leased until <time>" for each one.`,
661
661
  looked up", which is a different fact from "nothing was found"
662
662
  buildMachine selected auto, local or machine name, including cache hits
663
663
  builtOn here or machine name when a build ran; absent otherwise
664
- offloadedTo only on an app a build machine compiled: its
665
- offload.machines entry (see \`guide settings\`). cacheHit is
664
+ offloadedTo only on an app a remote Mac compiled: its
665
+ remote.machines entry (see \`guide settings\`). cacheHit is
666
666
  false for it. The Android payload carries it too
667
667
  offloadFallback only on an app compiled here after the run considered
668
668
  offloading it: why it built here -- one reason per
@@ -811,7 +811,7 @@ leased until <time>" for each one.`,
811
811
  sets its own CMake compiler launcher, or a Gradle run whose
812
812
  native work was all up to date. None of the three is an
813
813
  error, and this field is separate from cacheHit. On an
814
- offloaded APK it is the build machine's ccache
814
+ offloaded APK it is the remote Mac's ccache
815
815
  logs the workspace log directory
816
816
  agentDevice { stateDir }: absolute workspace agent-device state path
817
817
  durationMs wall time for the whole run
@@ -910,23 +910,27 @@ leased until <time>" for each one.`,
910
910
  null when off; plan lists what the next start, ios or
911
911
  android would reclaim, in the \`reclaimed\` shape without
912
912
  freedMb, and is empty while under budget
913
- deviceHosts one { machine, state, dnsName?, deviceId?, requestedAt?, host? }
914
- per hosting.machines entry. state is "approved", "pending",
915
- "not-asked", "revoked", "node-changed", "not-on-tailnet",
913
+ deviceHosts one { machine, state, dnsName?, deviceId?, requestedAt?, expiresAt?,
914
+ host? } per remote.machines entry. state is "approved",
915
+ "pending", "not-asked", "revoked", "lapsed", "node-changed", "not-on-tailnet",
916
916
  "tailscale-off", "unreachable", "invalid",
917
917
  "credentials-unavailable" or "busy". Tokens stay private.
918
918
  Only --fix asks for access or forgets removed names.
919
- An approved hosting machine does not imply build approval
920
- or change ios/android placement; see \`guide settings\`.
919
+ A remote Mac approved for device hosting does not imply
920
+ build approval; see \`guide settings\`.
921
921
  host is { name, screenRecording, accessibility }, present
922
922
  only for approved machines whose worker reports it.
923
- buildMachines one { machine, state, dnsName?, deviceId?, requestedAt?,
924
- offloadable?, reasons?, problems?, capacity?, host? } per
925
- offload.machines entry; state is "approved", "pending", "not-asked",
926
- "revoked" (revoked, or the request lapsed), "node-changed",
923
+ expiresAt is when a pending request lapses; "lapsed" is
924
+ a pending request whose expiry passed. --fix asks again.
925
+ remoteMachines one { machine, state, dnsName?, deviceId?, requestedAt?,
926
+ expiresAt?, offloadable?, reasons?, problems?, capacity?, host? } per
927
+ remote.machines entry, for its build approval; state is "approved", "pending", "not-asked",
928
+ "revoked" (revoked or denied), "lapsed" (the request lapsed
929
+ before approval), "node-changed",
927
930
  "not-on-tailnet", "tailscale-off", "unreachable" or
928
931
  "invalid". host has the same shape and presence rule as in
929
- deviceHosts. An approved machine also carries offloadable,
932
+ deviceHosts, as do expiresAt (a pending request's lapse
933
+ time) and "lapsed" (--fix asks again). An approved machine also carries offloadable,
930
934
  true when it would take this app's builds now (iOS
931
935
  simulator unless --platform android, Android emulator when
932
936
  --platform android or the app has android/ or uses Expo,
@@ -945,7 +949,7 @@ leased until <time>" for each one.`,
945
949
  optional fields
946
950
  findings the diagnostic findings; a lower resolved Stim is a
947
951
  costs-time finding with a PATH or installation remedy
948
- offload-candidate is a note after 3+ successful local cold builds in 7 days average over 3 min, with no offload.machines and an online tailnet Mac; open Stim Desktop Settings > Build machines > Add
952
+ offload-candidate is a note after 3+ successful local cold builds in 7 days average over 3 min, with no remote.machines and an online tailnet Mac; open Stim Desktop Settings > Remote Macs > Add
949
953
 
950
954
  ON FAILURE
951
955
  \`start\`, \`ios\`, \`android\` and \`web\` all print the error contract instead,
@@ -1374,8 +1378,8 @@ RULES
1374
1378
  "ready" its last warm succeeded and nothing has run there
1375
1379
  since: no start, ios, android, web or reload, for
1376
1380
  at most 2 hours
1377
- "live" live is true: Metro, a device, Chrome or a remote
1378
- session of it runs
1381
+ "live" the workspace is active (live is true): Metro, a
1382
+ device, Chrome or a remote session of it runs
1379
1383
  "idle" none of these
1380
1384
  phaseSince when the warm started ("warming") or finished ("ready"); null
1381
1385
  for "live" and "idle"
@@ -1403,8 +1407,8 @@ RULES
1403
1407
  The first kind that applies wins:
1404
1408
 
1405
1409
  kind "building" a build runs; platform names it
1406
- "warming" phase is "warming" and nothing is live
1407
- "ready" phase is "ready" and nothing is live
1410
+ "warming" phase is "warming" and nothing is active
1411
+ "ready" phase is "ready" and nothing is active
1408
1412
  "build-failed" the newest run of either platform failed;
1409
1413
  platform names it
1410
1414
  "running" live is true or a remote session runs
@@ -1658,8 +1662,8 @@ RULES
1658
1662
  finished request, status "ok" or "failed", durationMs from the
1659
1663
  request to the end of the response
1660
1664
 
1661
- Each entry of environments also carries build: null, or the ios or android
1662
- run that holds this workspace's native-run.lock:
1665
+ Each entry of environments also carries build: null, or the ios, android or
1666
+ macos run that holds this workspace's native-run.lock:
1663
1667
 
1664
1668
  build { platform, slot, state, phase, startedAt, phaseStartedAt,
1665
1669
  outcome, outcomeKnown, cacheLookupOutcome?, expectedMs, expectedPhaseMs,
@@ -1684,6 +1688,11 @@ RULES
1684
1688
  finishes during the build adds no device time. An
1685
1689
  --eas-profile run has no cache lookup, so its outcome
1686
1690
  stays the project's most recent one until install.
1691
+ A stim macos run enters only prepare, compile (SwiftPM,
1692
+ with detail), install (staging the bundle, or fetching
1693
+ it from a build machine) and launch. It has no cache
1694
+ lookup: outcome is null, plannedPhases is null, and
1695
+ builds.macos holds its finished runs and their phases.
1687
1696
  startedAt when the run started; phaseStartedAt when its phase did
1688
1697
  outcome "cold" after the local/provider lookups resolve a miss;
1689
1698
  "hit" after a cached artifact is ready to reuse, including
@@ -1733,20 +1742,24 @@ RULES
1733
1742
  reads: { step, unit, done, total, line, updatedAt }
1734
1743
  step the tool's step: configure, compile, link, resources,
1735
1744
  script, dex, package or sign; null before one is known
1736
- unit "targets" for xcodebuild, "tasks" for Gradle
1745
+ unit "targets" for xcodebuild, "tasks" for Gradle, "steps" for
1746
+ SwiftPM (stim macos)
1737
1747
  done xcodebuild: targets it finished (a target counts once
1738
1748
  xcodebuild touches or signs its product, so an
1739
1749
  incremental build can end below total); Gradle: tasks
1740
- it reported so far
1750
+ it reported so far; SwiftPM: the done of its latest
1751
+ [done / total] line
1741
1752
  total xcodebuild: targets in its dependency graph; Gradle: null,
1742
- since its plain output gives no total
1753
+ since its plain output gives no total; SwiftPM: the
1754
+ total of its latest [done / total] line, which can grow
1755
+ as SwiftPM plans more of the build
1743
1756
  line the latest compile, link or task line, paths shortened
1744
1757
  to file names, at most 160 characters
1745
1758
  updatedAt when the build last wrote it; the run writes it at most
1746
1759
  every 2 seconds
1747
1760
  placement where the build runs: "local", or while it is offloaded
1748
1761
  { host, phase, startedAt, phaseStartedAt }. host is the
1749
- offload.machines entry; phase is the step there: sync,
1762
+ remote.machines entry; phase is the step there: sync,
1750
1763
  deps, prebuild, pods, build (xcodebuild or Gradle) or fetch;
1751
1764
  startedAt is when the offload started and phaseStartedAt
1752
1765
  when that step did. Meanwhile phase above follows it as
@@ -1800,7 +1813,7 @@ RULES
1800
1813
  lookup, and create no lastBuild record or failed-run stats.
1801
1814
  buildMachine selected auto, local or configured machine entry; always on new build records
1802
1815
  builtOn here or machine name; absent when no build ran (cache/refusal)
1803
- offloadedTo only on a run a build machine compiled: its name
1816
+ offloadedTo only on a run a remote Mac compiled: its name
1804
1817
  offloadFallback
1805
1818
  only on a run that considered offloading and built here: one
1806
1819
  reason per machine when none took the build, or why the
@@ -1833,7 +1846,7 @@ RULES
1833
1846
  last 10 runs, newest first. Its newest entry that is not "interrupted" is
1834
1847
  the run lastBuilds reports, once a run has recorded builds.
1835
1848
 
1836
- builds { ios?, android? }, each a list of lastBuilds entries
1849
+ builds { ios?, android?, macos? }, each a list of lastBuilds entries
1837
1850
  with { result, slot, configuration, cacheKey, phases }
1838
1851
  result "succeeded", "failed", "cancelled" (Stim stopped the run
1839
1852
  after an interrupt or \`stim stop\`) or "interrupted": its
@@ -1875,7 +1888,7 @@ RULES
1875
1888
  under CoreSimulator/Devices, or the AVD's .avd folder
1876
1889
 
1877
1890
  \`status --watch\` runs one du at a time off its refresh path, and measures
1878
- a folder at most every 5 minutes while its environment is live and every
1891
+ a folder at most every 5 minutes while its environment is active and every
1879
1892
  hour otherwise. It caches each size under $STIM_HOME/disk-usage, which
1880
1893
  one-shot status only reads, so the fields appear once a watcher, such as
1881
1894
  stim-server or Stim Desktop, has measured.
@@ -1995,7 +2008,7 @@ RULES
1995
2008
  started it until that build exits, then as shared. Processes with no owner
1996
2009
  are left out. machine comes from one host ps, the one status reads for
1997
2010
  device activity, and one run of the footprint helper. It is null when no
1998
- simulator is booted, no workspace is live and no build runs: status then
2011
+ simulator is booted, no workspace is active and no build runs: status then
1999
2012
  runs neither. \`status --watch --json\` rereads both every 15 seconds while
2000
2013
  machine is not null, with no other subprocess.`
2001
2014
  },
@@ -2062,7 +2075,7 @@ RULES
2062
2075
  A bucket carries runs, failed, hits, misses, coldRuns, coldRunMs, hitRuns,
2063
2076
  hitRunMs, timeSavedMs, firstRunAt and lastRunAt, plus lastColdBuildMs and
2064
2077
  lastPodsMs once the project has compiled or installed pods, and
2065
- offloadedRuns, offloadedRunMs and lastOffloadHost once a build machine
2078
+ offloadedRuns, offloadedRunMs and lastOffloadHost once a remote Mac
2066
2079
  compiled one. An offloaded run is a miss but not a cold run, so the cold
2067
2080
  average, time saved and build estimates stay local. Milliseconds are
2068
2081
  integers.
@@ -2181,10 +2194,10 @@ BUILD PLACEMENT (\`offload\`)
2181
2194
  decision, reason, machine?, buildMs?, slotWaitMs?, deviceSlotWaitMs?, localEstimateMs?, failed? }.
2182
2195
  slotWaitMs and deviceSlotWaitMs are whole milliseconds waiting for build
2183
2196
  and owned-device slots respectively, present only when positive.
2184
- decision is "here", "offloaded", or "fell-back" (it tried a build machine
2197
+ decision is "here", "offloaded", or "fell-back" (it tried a remote Mac
2185
2198
  and built here). reason is why: the run's \`placement:\` reason, such as
2186
2199
  "load 0.6/core, 1 of 3 build slots busy here" (auto keeps the build here
2187
- while this Mac has room) or "offload.mode is off" (which prints no line),
2200
+ while this Mac has room) or "remote.buildMode is off" (which prints no line),
2188
2201
  or for a fallback the cause, prefixed by the machine it concerns, such as
2189
2202
  "mini: no less loaded (load 1.2/core there, 0.6/core here)". buildMs is the compile here, or the offloaded build's
2190
2203
  total (offer, sync, build and fetch); localEstimateMs is this project's
@@ -2996,7 +3009,7 @@ Branch on the code, never on the message.`,
2996
3009
  logs prints a note on stderr and shows copied records. Update an older stim-server
2997
3010
  on the host to enable handoff and native logs (hello features hosted-ios-data
2998
3011
  for iOS and hosted-android-data for Android).
2999
- A name outside hosting.machines is STIM_BAD_ARG. Missing or pending hosting
3012
+ A name outside remote.machines is STIM_BAD_ARG. Missing or pending hosting
3000
3013
  approval keeps the doctor --fix and stim-server devices grant remedies.`
3001
3014
  },
3002
3015
  STIM_EAS_BUILD_MISSING: {
@@ -3295,10 +3308,10 @@ Branch on the code, never on the message.`,
3295
3308
  works. See stim guide macos.`
3296
3309
  },
3297
3310
  STIM_OFFLOAD_REFUSED: {
3298
- summary: "the selected build machine cannot build this app",
3311
+ summary: "the selected remote Mac cannot build this app",
3299
3312
  body: () => `STIM_OFFLOAD_REFUSED
3300
3313
 
3301
- A named --build-machine selection is strict. The message names the machine
3314
+ A named --remote-build selection is strict. The message names the machine
3302
3315
  and why it cannot take or finish the build: not configured or paired, approval
3303
3316
  pending or denied, unreachable or changed pinned identity, incompatible
3304
3317
  toolchain/runtime/CPU, low disk, busy, sync/build failure, artifact failure,
@@ -3310,12 +3323,12 @@ a build record or failed-run stats. A listed paired name with a cache hit needs
3310
3323
  no build and does not contact the selected machine.
3311
3324
 
3312
3325
  Run stim doctor --fix to ask for build access if not paired. Check
3313
- stim settings get offload.machines. A person on the worker finds the id with
3326
+ stim settings get remote.machines. A person on the worker finds the id with
3314
3327
  stim-server devices and approves this Mac with stim-server devices grant <id> --build,
3315
3328
  or runs stim-server setup on the worker with its node, ticket and expiry
3316
3329
  (guide settings). Agents never run setup or approve requests.
3317
- Rerun with --build-machine auto for normal placement and local fallback, or
3318
- --build-machine local to keep the build here.
3330
+ Rerun with --remote-build auto for normal placement and local fallback, or
3331
+ --remote-build local to keep the build here.
3319
3332
  `
3320
3333
  },
3321
3334
  STIM_WORKTREE_SERVICE: {
@@ -4766,7 +4779,7 @@ STOP DURING A BUILD
4766
4779
 
4767
4780
  CAPACITY
4768
4781
  A booted iOS sim is roughly 1-2 GB of RAM, an Android emulator 2-3 GB. On a
4769
- 16 GB machine plan for 2-3 live environments. Nothing enforces this;
4782
+ 16 GB machine plan for 2-3 active environments. Nothing enforces this;
4770
4783
  \`stim status\` is how you check -- it reports every workspace on the
4771
4784
  machine, not just this one.
4772
4785
 
@@ -4799,7 +4812,7 @@ WAITING FOR A CHANGE
4799
4812
 
4800
4813
  If Stim is not installed globally, replace stim with npx stim.
4801
4814
 
4802
- stim settings set hosting.machines '["janics-mac-mini"]'
4815
+ stim settings set remote.machines '["janics-mac-mini"]'
4803
4816
  stim doctor --fix
4804
4817
  stim doctor
4805
4818
  stim android --remote janics-mac-mini --device-profile pixel_7
@@ -4821,7 +4834,7 @@ Unreadable android.host blocks only its slot; restore its recorded machine and
4821
4834
  session from the host before stopping that slot.
4822
4835
 
4823
4836
  --system-image and --device-profile select installed choices on the host.
4824
- The build targets the offered ABI and --build-machine independently selects a
4837
+ The build targets the offered ABI and --remote-build independently selects a
4825
4838
  compatible build worker. Stim builds before reserving, records the session as
4826
4839
  soon as it exists, then delivers one App.apk. The emulator boots headless;
4827
4840
  androidEmulatorApp is ignored with a note.
@@ -4941,7 +4954,7 @@ and show records already copied here.`
4941
4954
 
4942
4955
  If Stim is not installed globally, replace stim with npx stim.
4943
4956
 
4944
- stim settings set hosting.machines '["janics-mac-mini"]'
4957
+ stim settings set remote.machines '["janics-mac-mini"]'
4945
4958
  stim doctor --fix
4946
4959
  # A person there approves: stim-server devices grant <id> --device-host
4947
4960
  # Or runs stim-server setup on the worker with its client node, ticket and expiry.
@@ -4952,22 +4965,22 @@ If Stim is not installed globally, replace stim with npx stim.
4952
4965
  stim stop
4953
4966
 
4954
4967
  The same setup serves macos --remote. Approval is separate from build, read
4955
- and phone control. Set ios.remote to the machine name for a workspace default;
4968
+ and phone control. Set ios.remote to the machine name for a default (machine scope for the whole Mac);
4956
4969
  no flag or setting runs here. eas and proxy keep their remote backend meanings.
4957
4970
  --remote auto (or ios.remote = auto / android.remote = auto) stays here when
4958
4971
  there is a free concurrency.maxDevices slot (0 means unlimited), no device
4959
4972
  waiter ahead, normal host memory pressure, no budget shortfall,
4960
- and 5-minute load per core below offload.maxLoadPerCore. Without hosting.machines,
4973
+ and 5-minute load per core below server.maxLoadPerCore. Without remote.machines,
4961
4974
  auto is local. An unknown local device count also stays local; boot admission
4962
4975
  still decides. The default without a flag or setting stays local.
4963
4976
 
4964
- Otherwise Stim asks every approved hosting.machines host in parallel, with a
4977
+ Otherwise Stim asks every approved remote.machines host in parallel, with a
4965
4978
  3-second probe timeout and this run's model/runtime or image/profile selectors.
4966
4979
  A compatible choice, no declined reason, normal memory pressure and available
4967
4980
  capacity are required. With a free local slot, a host must report a lower load;
4968
4981
  with a full cap or a queue ahead, an admitted host with unknown load is allowed.
4969
- Hosts rank by the build preference (flag > STIM_OFFLOAD_MACHINE > offload.machine)
4970
- when it names a machine, then lowest load, most free memory and hosting.machines order. Automatic build
4982
+ Hosts rank by the build preference (flag > STIM_REMOTE_BUILD > remote.build)
4983
+ when it names a machine, then lowest load, most free memory and remote.machines order. Automatic build
4971
4984
  offload resolves later, after the device architecture is known.
4972
4985
 
4973
4986
  When no host admits, auto runs here and may wait in the existing FIFO device
@@ -4990,7 +5003,7 @@ here or elsewhere. --device cannot use a hosting Mac, and --simulator-app
4990
5003
  refuses. The host boots headless and ignores this Mac's iosSimulatorApp setting.
4991
5004
  --slot, --device-type and --runtime select the hosted simulator; --scheme,
4992
5005
  --configuration and --eas-profile select the app as usual. The build targets
4993
- the offered simulator architecture, not this Mac's. --build-machine remains
5006
+ the offered simulator architecture, not this Mac's. --remote-build remains
4994
5007
  independent and selects a compatible build worker for a Debug cache miss.
4995
5008
 
4996
5009
  The host's own owned devices count toward concurrency.maxDevices.
@@ -6195,7 +6208,7 @@ OPT-IN CONCURRENCY LIMITS (UNLIMITED BY DEFAULT)
6195
6208
  and the command to remove that exact claim.
6196
6209
  See \`guide errors STIM_AT_CAPACITY\`.
6197
6210
 
6198
- \`stim doctor\` prints one note echoing the caps and the current live count,
6211
+ \`stim doctor\` prints one note echoing the caps and the current active count,
6199
6212
  but ONLY when a cap is set. \`stim gc\` reports stale build slots the way it
6200
6213
  reports stale build locks, and \`gc --delete\` clears them. Set the caps
6201
6214
  with \`stim settings set concurrency.maxBuilds 2\`, by editing
@@ -6211,7 +6224,7 @@ OPT-IN CONCURRENCY LIMITS (UNLIMITED BY DEFAULT)
6211
6224
  $STIM_HOME. Default 20. Below it, Stim reclaims.
6212
6225
  budget.hardFloorDiskGb default 5. Still below it after reclaiming,
6213
6226
  the run refuses with STIM_LOW_DISK.
6214
- budget.maxCommittedMemoryGb the rough memory of live environments, the
6227
+ budget.maxCommittedMemoryGb the rough memory of active environments, the
6215
6228
  figure \`stim status\` prints (a booted
6216
6229
  simulator 1.5 GB, an emulator 2.5 GB, a dev
6217
6230
  server 0.7 GB). Default 60% of physical memory.
@@ -6307,8 +6320,8 @@ OPT-IN CONCURRENCY LIMITS (UNLIMITED BY DEFAULT)
6307
6320
  summary: "every flag per command, Android variants and flavors, the per-run simulator model, runtime and system image",
6308
6321
  body: () => `THE OPTION SURFACE, IN FULL
6309
6322
  start --json --wait <seconds> --remote --reset-cache
6310
- ios --build-machine <auto|local|name> --slot <name> --json --plan --no-metro-check --no-build-cache --scheme <name> --configuration <name> --device-type <name> --runtime <version> --simulator-app <xcode|siniulator|stim-desktop> --device [udid] --wait <seconds> --no-wait --remote <eas|proxy|auto|machine>
6311
- android --build-machine <auto|local|name> --slot <name> --json --plan --no-metro-check --no-build-cache --variant <name> --system-image <id> --device-profile <id> --device [serial] --wait <seconds> --no-wait --remote <proxy|eas>
6323
+ ios --remote-build <auto|local|name> --slot <name> --json --plan --no-metro-check --no-build-cache --scheme <name> --configuration <name> --device-type <name> --runtime <version> --simulator-app <xcode|siniulator|stim-desktop> --device [udid] --wait <seconds> --no-wait --remote <eas|proxy|auto|machine>
6324
+ android --remote-build <auto|local|name> --slot <name> --json --plan --no-metro-check --no-build-cache --variant <name> --system-image <id> --device-profile <id> --device [serial] --wait <seconds> --no-wait --remote <proxy|eas>
6312
6325
  ios/android --wait bounds owned-device slot waits (default 600s), or physical
6313
6326
  leases with --device (default 60s). Remote targets do not join this local
6314
6327
  slot queue. --no-wait refuses a full/queued owned
@@ -7186,7 +7199,10 @@ to stats.json.corrupt-<unix ms> and starts a new one.`,
7186
7199
  stim gc --delete --cache archived-logs delete logs, keep records
7187
7200
  stim gc --delete --cache archived-recordings delete recordings, keep records
7188
7201
  stim gc --delete --cache archived-agent delete agent actions, keep records
7189
- Per-kind selectors also accept --older-than, measured from removedAt.
7202
+ stim gc --delete --cache archived-logs:<id> one kind of one archive, keep its record
7203
+ (archived-recordings:<id> and archived-agent:<id> likewise; they ignore --older-than;
7204
+ an unknown id refuses with STIM_BAD_ARG)
7205
+ Per-kind selectors without an id also accept --older-than, measured from removedAt.
7190
7206
  Normal gc, --cache all, --worktrees and unscoped --older-than exclude archives.
7191
7207
  Archive scopes report abandoned staging directories and delete only those
7192
7208
  with no live or unresolved claim. An unresolved claim names its removal command.
@@ -7638,7 +7654,7 @@ THE ONE CASE GC WILL NOT REAP
7638
7654
  check and the stop fails and must be run again, so gc re-checks the build
7639
7655
  locks and the daemon's status right before each stop. Nothing is stopped while an Android build lock, or a build slot no
7640
7656
  iOS build holds, is live or unresolved. stim-server stops the daemons of
7641
- offloaded builds (offload.gradleDaemonIdleMinutes, \`guide settings\`), so
7657
+ offloaded builds (server.gradleDaemonIdleMinutes, \`guide settings\`), so
7642
7658
  while it runs gc keeps those. A daemon whose home, distribution or status cannot be read is
7643
7659
  kept. Gradle stops an idle daemon itself after 3 hours and Kotlin after 2
7644
7660
  hours by default.
@@ -7900,7 +7916,7 @@ KEYS STIM READS
7900
7916
  a JS-bundle swap on cache hits. The \`--configuration\`
7901
7917
  flag overrides this per invocation. Unset means Debug.
7902
7918
  ios.remote "proxy", "eas", or a named approved Mac from
7903
- hosting.machines, with the same meaning as --remote.
7919
+ remote.machines, with the same meaning as --remote.
7904
7920
  "auto" places on an approved Mac when this Mac is full or
7905
7921
  busy. Unset runs here. See lifecycle hosted-ios.
7906
7922
  ios.simslimProfile a SimSlim JSON profile under the app directory,
@@ -8043,7 +8059,7 @@ ${ANDROID_AVD_CONFIG_HELP.map((line) => ` ${line}`).joi
8043
8059
  bare string is used as the literal password. Unset
8044
8060
  means the debug keystore's fixed "android".
8045
8061
  android.remote "proxy", "eas", or a named approved Mac in
8046
- hosting.machines; "auto" places on an approved Mac when
8062
+ remote.machines; "auto" places on an approved Mac when
8047
8063
  this Mac is full or busy. Unset runs here.
8048
8064
  See lifecycle hosted-android.
8049
8065
  metro.tunnel selects how a remote device reaches this workspace's
@@ -8368,31 +8384,37 @@ wants a pool says so with the variable.
8368
8384
  DESKTOP ACCESS TICKETS
8369
8385
  Stim Desktop's Add wizard sets STIM_ACCESS_TICKET for one \`doctor --fix\`
8370
8386
  run. Agents never set it, never run \`stim-server setup\`, never edit
8371
- \`offload.*\` or \`hosting.*\` for the user, and never approve requests.
8387
+ \`remote.*\`, \`server.*\` or \`hosting.*\` for the user, and never approve requests.
8372
8388
  Stim sends the ticket (43 base64url characters) only in build and device-host access
8373
8389
  requests and stores only its SHA-256 ticketHash. With --fix, a still-pending
8374
8390
  request is replaced when its ticketHash is missing or differs from the current
8375
8391
  ticket; matching hashes and approved credentials are preserved.
8376
- Approved doctor entries under buildMachines and deviceHosts include host
8392
+ Approved doctor entries under remoteMachines and deviceHosts include host
8377
8393
  { name, screenRecording, accessibility } when the worker reports it.
8378
8394
 
8379
- BUILD MACHINES AND PHONE APP
8395
+ REMOTE MACS AND PHONE APP
8380
8396
  When the user mentions slow builds, a busy Mac, a full disk or device limit, or
8381
8397
  wanting updates away from the desk, tell them about Stim Desktop > Settings >
8382
- Build machines > Add (a Mac on the tailnet that builds or hosts simulators for
8398
+ Remote Macs > Add (a Mac on the tailnet that builds or hosts simulators for
8383
8399
  this one) or Phones > Pair a Phone (the Stim phone app). Stim Desktop also
8384
8400
  suggests these itself, at most once a day and never during a build. Agents only
8385
- tell the user: they never run \`stim-server setup\`, never edit \`offload.*\` or
8386
- \`hosting.*\` for the user, and never approve requests.
8401
+ tell the user: they never run \`stim-server setup\`, never edit \`remote.*\`,
8402
+ \`server.*\` or \`hosting.*\` for the user, and never approve requests.
8387
8403
 
8388
- HOSTING MACHINES ARE MACHINE-LEVEL
8389
- \`hosting.machines\` names Macs that may host owned simulator sessions,
8390
- by MagicDNS name with an optional serve port (default 7443). Name each node
8391
- and port once. This is separate from build offloading:
8404
+ REMOTE MACS ARE MACHINE-LEVEL
8405
+ \`remote.machines\` names the remote Macs this Mac may build on and host owned
8406
+ simulator sessions on, by MagicDNS name with an optional serve port (default
8407
+ 7443). Name each node and port once:
8392
8408
 
8393
- stim settings set hosting.machines '["janics-mac-mini"]'
8409
+ stim settings set remote.machines '["janics-mac-mini"]'
8394
8410
  stim doctor --fix
8395
8411
 
8412
+ A remote Mac is used for a capability only after it grants that approval. Build
8413
+ and device-host approvals are separate: a Mac in the list that never granted
8414
+ one is not an error, it is not used for that capability, and doctor reports
8415
+ it plainly.
8416
+
8417
+ DEVICE HOSTING
8396
8418
  Only \`doctor --fix\` asks for device-host access. A person on that Mac
8397
8419
  approves the printed id with \`stim-server devices grant <id> --device-host\`.
8398
8420
  A person can also run \`stim-server setup\` on the worker: one node, one ticket,
@@ -8404,16 +8426,17 @@ unless every chosen capability already has a matching approval. Desktop reuse
8404
8426
  requires an existing tailnet route. Ctrl-C or SIGTERM completes the journal,
8405
8427
  releases the setup claim and exits 1; a typed N also exits 1. Hosting grants
8406
8428
  include no read, control or build capability.
8407
- On the hosting Mac, Stim Desktop > Settings > Phones > Hosted here lists the
8408
- simulators, emulators and apps approved Macs run there, below Device hosting
8409
- approvals. Stop asks for confirmation, ends the session and deletes or parks
8429
+ On a remote Mac that hosts, Stim Desktop > Settings > Remote Macs > Running here lists the
8430
+ simulators, emulators and apps approved Macs run there, below Macs using this
8431
+ Mac. Stop asks for confirmation, ends the session and deletes or parks
8410
8432
  its device on that Mac. Parked sessions remain listed without Stop. The list
8411
8433
  refreshes every five seconds and stays hidden when the local server does not
8412
8434
  support it.
8413
8435
  $STIM_HOME/device-host-machines.json stores a private token and pinned tailnet
8414
8436
  node. Doctor never prints the token; it reports each machine under deviceHosts
8415
8437
  in JSON. Desktop uses placement set by config or agents, such as
8416
- stim settings set ios.remote auto --scope workspace (or android.remote),
8438
+ stim settings set ios.remote auto --scope machine (or android.remote; workspace,
8439
+ repo and committed scopes override the machine default),
8417
8440
  or per run stim ios --remote auto / stim ios --remote <machine>.
8418
8441
  New Desktop runs pass no --remote flag; recorded hosted sessions keep their
8419
8442
  machine until stim stop. Only devices outside this Mac show "on <machine>"
@@ -8422,19 +8445,19 @@ as hover text.
8422
8445
  Stim sends tokens only to the pinned node's own tailnet address,
8423
8446
  with its MagicDNS name for TLS and Host routing. A changed node refuses
8424
8447
  access, and uncertain replies or unreadable credentials preserve the pin.
8425
- Invalid hosting settings report an error and preserve every saved credential.
8426
- \`doctor --fix\` forgets entries removed from hosting.machines; remove a
8448
+ An invalid remote.machines setting reports an error and preserves every saved credential.
8449
+ \`doctor --fix\` forgets entries removed from remote.machines; remove a
8427
8450
  replaced machine, run it, then re-add the name to request a new approval.
8428
8451
  A definite revoked or lapsed request can be requested again with --fix.
8429
8452
  An in-progress approval inspection reports busy rather than replacing its
8430
8453
  pending token. \`stim macos --remote <machine>\` runs a macOS app on an
8431
- approved machine (stim guide macos); \`ios\` and \`android\` do not yet
8432
- place sessions on these machines. To view or control a hosted macOS app, a person
8454
+ approved remote Mac (stim guide macos); \`ios\` and \`android\` do not yet
8455
+ place sessions on these Macs. To view or control a hosted macOS app, a person
8433
8456
  on that Mac approves Screen & System Audio Recording and Device Control and Data
8434
8457
  Access (Accessibility on macOS 26 and earlier) for Stim Host, the app
8435
8458
  \`stim-server service install\` runs the server under.
8436
8459
 
8437
- On a hosting Mac, \`hosting.agentDriver\` names the tool it starts so a
8460
+ On a remote Mac that hosts, \`hosting.agentDriver\` names the tool it starts so a
8438
8461
  client's coding agent can drive the macOS apps, iOS simulators and Android emulators it hosts for that client.
8439
8462
  The default, \`none\`, starts nothing. For macOS, \`agent-device\` starts its
8440
8463
  shared daemon only when that agent-device can lease a single app (its
@@ -8448,13 +8471,11 @@ uses one daemon per emulator, pinned by its serial policy, with agent-device
8448
8471
  hosted-ios. \`doctor\` on that Mac notes an installed hosted app that runs while
8449
8472
  the setting is \`none\`.
8450
8473
 
8451
- BUILD MACHINES ARE MACHINE-LEVEL
8452
- \`offload.machines\` lists the Macs on the tailnet that may build for this one,
8453
- by MagicDNS name, each optionally with the port of its \`tailscale serve\`
8454
- route (default 7443):
8474
+ REMOTE BUILDS
8475
+ The same \`remote.machines\` list names the Macs that may build for this one:
8455
8476
 
8456
8477
  {
8457
- "offload": { "machines": ["janics-mac-mini"] }
8478
+ "remote": { "machines": ["janics-mac-mini"] }
8458
8479
  }
8459
8480
 
8460
8481
  \`doctor --fix\`, run in any app directory, asks each named Mac for build access and pins its tailnet
@@ -8465,27 +8486,27 @@ ticket and expiry, under the approval rule above. Build never includes read
8465
8486
  or control.
8466
8487
  Stim connects to a named Mac only while its name still belongs to the pinned
8467
8488
  node and never sends the token to another node. \`doctor\` reports each
8468
- machine's pairing state and, for an approved machine, asks it for one build
8489
+ remote Mac's build pairing state and, for an approved one, asks it for one build
8469
8490
  offer and lists every reason it would not take this app's iOS build: no
8470
8491
  answer, another Stim build, CPU, Xcode, simulator SDK or CocoaPods, no
8471
8492
  Bundler for an app whose Gemfile.lock pins CocoaPods, no iPhone simulator on
8472
8493
  the runtime \`stim ios\` builds for here, low disk, or busy. With Package.swift
8473
8494
  and no platform selection on a Mac, it also checks the macOS Xcode and SDK.
8474
8495
 
8475
- \`offload.machine\` (machine scope, default auto) selects placement for
8476
- \`ios\`, \`android\` and \`macos\`. \`--build-machine <auto|local|name>\`
8477
- overrides STIM_OFFLOAD_MACHINE, which overrides the setting. A blank environment
8496
+ \`remote.build\` (machine scope, default auto) selects placement for
8497
+ \`ios\`, \`android\` and \`macos\`. \`--remote-build <auto|local|name>\`
8498
+ overrides STIM_REMOTE_BUILD, which overrides the setting. A blank environment
8478
8499
  value is unset. Trimmed auto/local are case-insensitive. Machine names match
8479
8500
  configured names case-insensitively, with port 7443 when omitted; reports use
8480
8501
  the configured entry.
8481
8502
 
8482
- auto follows offload.mode and keeps its local fallback behavior
8503
+ auto follows remote.buildMode and keeps its local fallback behavior
8483
8504
  local builds only on this Mac for this invocation
8484
- name requires a matching entry in offload.machines, already paired and
8485
- approved; ignores offload.mode and this Mac's load/slot gating
8505
+ name requires a matching entry in remote.machines, already paired and
8506
+ approved for builds; ignores remote.buildMode and this Mac's load/slot gating
8486
8507
 
8487
- A name never prompts for pairing, tries another machine or falls back here.
8488
- Any refusal or failure is STIM_OFFLOAD_REFUSED with the machine and reason.
8508
+ A name never prompts for pairing, tries another remote Mac or falls back here.
8509
+ Any refusal or failure is STIM_OFFLOAD_REFUSED with the remote Mac and reason.
8489
8510
  Device, Release/non-Debug, --remote, Android CAS compiler builds, builds with
8490
8511
  the build cache off, and an unknown simulator runtime cannot build there and
8491
8512
  refuse on a cache miss. Invalid values, unlisted names and unpaired names refuse
@@ -8498,39 +8519,39 @@ starts no local xcodebuild, Gradle or SwiftPM compile.
8498
8519
  Run stim doctor --fix to ask for build access if not paired. A person on the
8499
8520
  worker finds the id with stim-server devices and approves it with
8500
8521
  stim-server devices grant <id> --build, or runs stim-server setup there with
8501
- the client node, ticket and expiry. Check stim settings get offload.machines,
8502
- or rerun with --build-machine auto or --build-machine local. Ctrl-C cancels
8522
+ the client node, ticket and expiry. Check stim settings get remote.machines,
8523
+ or rerun with --remote-build auto or --remote-build local. Ctrl-C cancels
8503
8524
  the remote build without a local xcodebuild, Gradle or SwiftPM compile.
8504
8525
 
8505
8526
  Copyable agent prompt:
8506
- Run stim ios --build-machine janics-mac-mini. If it refuses, report the
8527
+ Run stim ios --remote-build janics-mac-mini. If it refuses, report the
8507
8528
  STIM_OFFLOAD_REFUSED reason and remedy; do not retry with another placement.
8508
8529
 
8509
- With offload.machine auto, \`offload.mode\` decides where an iOS simulator Debug build or an Android
8530
+ With remote.build auto, \`remote.buildMode\` decides where an iOS simulator Debug build or an Android
8510
8531
  emulator debug build or a stim macos SwiftPM Debug build compiles:
8511
8532
 
8512
8533
  auto (default) here while this Mac has capacity: a free
8513
8534
  \`concurrency.maxBuilds\` slot (always, with no build limit) and a
8514
- load per core under \`offload.maxLoadPerCore\`. Otherwise on a
8515
- build machine that accepts the build and is expected to be faster:
8516
- while every slot here is busy, any machine that accepts; while only
8517
- the load is high, a machine whose load per core is lower than this
8518
- Mac's. A machine too old to report its load counts only while every
8535
+ load per core under \`server.maxLoadPerCore\`. Otherwise on a
8536
+ remote Mac that accepts the build and is expected to be faster:
8537
+ while every slot here is busy, any remote Mac that accepts; while only
8538
+ the load is high, one whose load per core is lower than this
8539
+ Mac's. A Mac too old to report its load counts only while every
8519
8540
  slot here is busy.
8520
- force on a build machine whenever one accepts it
8541
+ force on a remote Mac whenever one accepts it
8521
8542
  off always here
8522
8543
 
8523
8544
  Load per core is the 5-minute load average divided by the CPU count; a Mac's
8524
8545
  native builds are its Stim runs in prebuild, pods or compile on that Mac, not
8525
8546
  the ones it offloaded.
8526
- \`offload.maxLoadPerCore\` (default 2) is also the busy threshold for
8547
+ \`server.maxLoadPerCore\` (default 2) is also the busy threshold for
8527
8548
  automatic iOS and Android device placement. It is the load per core at which a Mac
8528
- counts as saturated, both here and on a build machine.
8549
+ counts as saturated, both here and on a remote Mac.
8529
8550
 
8530
- STIM_OFFLOAD_MODE overrides it for one command. Device, Release and
8551
+ STIM_REMOTE_BUILD_MODE overrides it for one command. Device, Release and
8531
8552
  \`--remote eas|proxy\` builds, Android builds with the Apple Clang CAS compiler cache,
8532
8553
  and iOS/Android runs with the build cache off, always build here. Hosted iOS
8533
- Debug builds can use a separate --build-machine, targeting the hosting Mac's
8554
+ Debug builds can use a separate --remote-build, targeting the hosting Mac's
8534
8555
  architecture and runtime.
8535
8556
  macOS uses matching Xcode and macOS SDK, with a per-client SwiftPM dependency
8536
8557
  cache on the worker. It skips JavaScript dependencies, prebuild and pods; see
@@ -8577,34 +8598,35 @@ An offloaded app lands only in this Mac's build cache, not in a remote cache
8577
8598
  provider. A project whose xcodebuild changes its own fingerprinted inputs
8578
8599
  fails the offload fingerprint check: auto builds here; a named placement refuses.
8579
8600
 
8580
- On the build machine, stim-server keeps each client's checkouts, dependencies,
8601
+ On a remote Mac that builds for others, stim-server keeps each client's checkouts, dependencies,
8581
8602
  DerivedData, compilation cache, ccache and Gradle home under
8582
- \`offload.workerRoot\` (absolute; default $STIM_HOME/build-worker), one area
8603
+ \`server.workerRoot\` (absolute; default $STIM_HOME/build-worker), one area
8583
8604
  and Stim home per client and repository, and one Gradle home per client. It
8584
8605
  runs one offloaded build at a time. It declines a build while that volume has
8585
8606
  less than 10 GB free, while its own native builds and the offloaded one fill
8586
8607
  its \`concurrency.maxBuilds\`, or while its load per core is at or above its
8587
- \`offload.maxLoadPerCore\`, and reports the reason in its offer. It boots and
8608
+ \`server.maxLoadPerCore\`, and reports the reason in its offer. It boots and
8588
8609
  installs nothing. While an offloaded build runs there, it holds one of that
8589
8610
  Mac's \`concurrency.maxBuilds\` slots, so a local Stim build there waits for it
8590
8611
  and counts it as busy; the slot is freed when the build ends, is cancelled or
8591
8612
  its process is gone. Android builds there run on the JDK in stim-server's
8592
8613
  JAVA_HOME (else the macOS default JDK) with the SDK in its ANDROID_HOME (else
8593
8614
  ~/Library/Android/sdk). The client's Gradle daemon stays warm there for
8594
- \`offload.gradleDaemonIdleMinutes\` (default 30; 0 stops it when each build
8615
+ \`server.gradleDaemonIdleMinutes\` (default 30; 0 stops it when each build
8595
8616
  ends; a new value applies from the next daemon) and never holds a build
8596
8617
  slot. While none of the client's builds runs, stim-server stops it sooner
8597
8618
  when a build is cancelled, the client is revoked, or the machine has less
8598
8619
  than 2 GB of memory available, and deleting the client's directory under the
8599
8620
  worker root stops it too.
8600
- \`stim-server service install [--serve]\` on the build machine keeps stim-server
8621
+ \`stim-server service install [--serve]\` on the remote Mac keeps stim-server
8601
8622
  running as a login LaunchAgent; \`--path-prepend <dir>\` and \`--env KEY=VALUE\`
8602
8623
  pin a PATH entry or variable such as a private CocoaPods that stim-server's
8603
8624
  login-shell environment would otherwise replace.
8604
8625
  \`stim-server service update --release <version>\` there moves the service to
8605
8626
  that exact stim-server release from the public npm registry once npm verifies
8606
8627
  its integrity and registry signatures; \`--from <dir>\` installs the packed
8607
- packages of a checkout instead. It waits for offloaded builds and hosted
8628
+ packages of a checkout instead, with the same signature check on each npm
8629
+ dependency but none for Stim's own packages. It waits for offloaded builds and hosted
8608
8630
  sessions to finish, restarts the job, and switches back when the new server
8609
8631
  exits or does not answer within 90 seconds; \`stim-server service rollback\` returns
8610
8632
  to the previous server. A client Mac approved for builds or device hosting
@@ -9120,7 +9142,7 @@ var macos_default = {
9120
9142
 
9121
9143
  If Stim is not installed globally, replace stim with npx stim.
9122
9144
 
9123
- ios --remote <machine> shares hosting.machines and its separate device-host
9145
+ ios --remote <machine> shares remote.machines and its separate device-host
9124
9146
  approval. Read guide lifecycle hosted-ios for simulator placement and Metro.
9125
9147
 
9126
9148
  Run from the directory containing Package.swift. This prototype builds one
@@ -9172,6 +9194,13 @@ Stim Desktop honors. An app that activates itself at launch still takes focus.
9172
9194
  Hosted launches (macos --remote) do not set it.
9173
9195
  macOS artifacts are not cached. This prototype has no --plan, --slot, or reload command.
9174
9196
  A failed build records its error and compiler output without launching an app.
9197
+ While it runs, stim status --json reports it as environments[].build with
9198
+ platform "macos": phase prepare, compile, install, then launch, and during
9199
+ compile detail.unit "steps" with SwiftPM's [done / total] counts (fetching and
9200
+ planning are detail.step "configure"). It has no cache lookup, so outcome and
9201
+ plannedPhases are null; finished runs and their phase times are in
9202
+ environments[].builds.macos. An offloaded build reports the worker's steps the
9203
+ same way.
9175
9204
  Runtime stdout and stderr become client records; build output becomes build
9176
9205
  records, all with platform "macos". Unexpected app exits are error records.
9177
9206
  Stim runs the app with NSUnbufferedIO=YES, so Swift print output arrives per
@@ -9179,16 +9208,16 @@ line instead of when the app exits.
9179
9208
 
9180
9209
  BUILD OFFLOAD
9181
9210
 
9182
- --build-machine <auto|local|name> overrides STIM_OFFLOAD_MACHINE and the
9183
- machine setting offload.machine (default auto). local builds here; a name
9184
- requires the matching configured and paired build machine, ignoring offload.mode
9211
+ --remote-build <auto|local|name> overrides STIM_REMOTE_BUILD and the
9212
+ machine setting remote.build (default auto). local builds here; a name
9213
+ requires the matching configured and paired remote Mac, ignoring remote.buildMode
9185
9214
  and this Mac's capacity. Any failure is STIM_OFFLOAD_REFUSED without a local xcodebuild, Gradle or
9186
9215
  SwiftPM compile or another machine. Invalid, unlisted or unpaired selections
9187
9216
  refuse before stopping the app or changing its build record. See stim guide errors STIM_OFFLOAD_REFUSED.
9188
9217
 
9189
- With offload.machine auto, offload.mode places these SwiftPM Debug builds:
9218
+ With remote.build auto, remote.buildMode places these SwiftPM Debug builds:
9190
9219
  auto builds here while this Mac has capacity, force uses an approved build
9191
- machine when one accepts, and off always builds here. Configure offload.machines
9220
+ machine when one accepts, and off always builds here. Configure remote.machines
9192
9221
  and approve build access as described in stim guide settings. The worker needs
9193
9222
  matching Stim, CPU architecture, Xcode and macOS SDK, plus network access to
9194
9223
  fetch package dependencies the first time. It keeps SwiftPM dependencies in a
@@ -9362,15 +9391,15 @@ used.
9362
9391
  ON ANOTHER MAC
9363
9392
 
9364
9393
  stim macos --remote <machine> builds the Debug app on this Mac and runs it on an
9365
- approved hosting Mac over the tailnet, without SSH. The machine must be listed
9366
- in hosting.machines and approved: stim doctor --fix asks it, a person on that
9394
+ approved remote Mac over the tailnet, without SSH. The machine must be listed
9395
+ in remote.machines and approved: stim doctor --fix asks it, a person on that
9367
9396
  Mac runs stim-server devices grant <id> --device-host or stim-server setup
9368
9397
  with that client node, ticket and expiry (guide settings), and stim doctor then
9369
9398
  records the approval. Stim connects only to the machine's pinned tailnet node.
9370
9399
  A refusal or an unreachable host fails the command; it never launches here
9371
9400
  instead.
9372
9401
 
9373
- The --remote value is a hosting Mac name from hosting.machines. macOS refuses
9402
+ The --remote value is a remote Mac name from remote.machines. macOS refuses
9374
9403
  eas and proxy because it has neither backend. It also refuses auto until
9375
9404
  automatic placement ships. These reserved names are case-insensitive and
9376
9405
  trimmed; they refuse with STIM_BAD_ARG before state access or a connection.
@@ -9765,7 +9794,7 @@ const TUTORIAL_STEPS = [
9765
9794
  optional: true,
9766
9795
  prompt: TUTORIAL_PROMPTS.machine,
9767
9796
  section: "machine",
9768
- manual: ["cd \"{tour}\"", "stim ios --build-machine \"{machine}\" --no-build-cache"]
9797
+ manual: ["cd \"{tour}\"", "stim ios --remote-build \"{machine}\" --no-build-cache"]
9769
9798
  },
9770
9799
  {
9771
9800
  id: "finish",
@@ -9963,7 +9992,7 @@ the app. The intentional button errors may still be in the error log; check
9963
9992
  whether the edit introduced a new error.
9964
9993
 
9965
9994
  PAUSE: end the turn. Point at the purple title in the device view or simulator
9966
- and the title color log line. Phone viewing and an approved build machine are
9995
+ and the title color log line. Phone viewing and an approved remote Mac are
9967
9996
  optional user steps; skip them if unwanted. Never pair, approve, or grant
9968
9997
  anything. If the user names an approved machine, the next prompt is
9969
9998
  "${TUTORIAL_PROMPTS.machine}". Otherwise give
@@ -9971,11 +10000,11 @@ anything. If the user names an approved machine, the next prompt is
9971
10000
  },
9972
10001
  machine: {
9973
10002
  summary: "Optionally build using a machine the user names and has approved",
9974
- body: () => `BUILD MACHINE (OPTIONAL)
10003
+ body: () => `REMOTE MAC (OPTIONAL)
9975
10004
 
9976
10005
  ${paths}
9977
10006
 
9978
- Proceed only when the user names an approved build machine. Substitute that
10007
+ Proceed only when the user names an approved remote Mac. Substitute that
9979
10008
  name for {machine}. Never approve, pair, or grant anything. If none is named,
9980
10009
  ask for the name or let the user skip this step.
9981
10010
 
@@ -9983,7 +10012,7 @@ ${commands("machine")}
9983
10012
 
9984
10013
  This step bypasses the artifact cache so the build can use the named machine.
9985
10014
  A named machine refuses without a local fallback. If it refuses, report the
9986
- refusal and offer --build-machine auto or local; do not retry silently.
10015
+ refusal and offer --remote-build auto or local; do not retry silently.
9987
10016
 
9988
10017
  PAUSE: end the turn. Point at the build's machine in Desktop or its report in
9989
10018
  stim status --json. Give the next prompt: "${TUTORIAL_PROMPTS.finish}".`