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.
- package/dist/{android--GorydsK.mjs → android-B9yaNKwa.mjs} +15 -15
- package/dist/{budget-DM984mnd.mjs → budget-DfcgFdQB.mjs} +33 -12
- package/dist/{build-plan-CmQCoyT-.mjs → build-plan-BDsSi09V.mjs} +14 -14
- package/dist/{idle-B2m-Ovod.mjs → build-progress-D0WkjCPd.mjs} +56 -183
- package/dist/{cli-Daxug5-K.mjs → cli-CYXb29oE.mjs} +13 -13
- package/dist/cli.mjs +1 -1
- package/dist/{machines-C2XiNwh9.mjs → client-SvBdgObD.mjs} +348 -309
- package/dist/{deps-DNWaQs4V.mjs → deps-iKw0eD4P.mjs} +1 -1
- package/dist/{device-capacity-D0GWHnTM.mjs → device-capacity-ZC4XSZ4R.mjs} +2 -2
- package/dist/device-host-worker.mjs +3 -3
- package/dist/{device-ios-Bc7vbGwl.mjs → device-ios-C2Um-XUR.mjs} +1 -1
- package/dist/{doctor-Cnk9d7Hm.mjs → doctor-CFv1fCrF.mjs} +14 -13
- package/dist/{gc-DxCL2A46.mjs → gc-DEmkg3Xh.mjs} +9 -8
- package/dist/{gradle-D7-L2Th3.mjs → gradle-dJpre3Yn.mjs} +1 -1
- package/dist/{guide-DjrTQGik.mjs → guide-CSmhMTf8.mjs} +156 -127
- package/dist/{hosted-android-DwLS4Mse.mjs → hosted-android-E1Heoqnv.mjs} +3 -3
- package/dist/{hosted-client-wk1W_CNW.mjs → hosted-client-Bp4knSwu.mjs} +4 -4
- package/dist/{hosted-ios-aMo7Cljf.mjs → hosted-ios-BnbeYOUD.mjs} +1 -1
- package/dist/{hosted-logs-DqYmWtXc.mjs → hosted-logs-OcgIBvCT.mjs} +2 -2
- package/dist/{hosted-macos-dlHXEeF5.mjs → hosted-macos-DcxKjtfH.mjs} +2 -2
- package/dist/{hosted-native-C9xJ9rpA.mjs → hosted-native-1Ebbig4w.mjs} +3 -3
- package/dist/idle-BXG__1BA.mjs +176 -0
- package/dist/{idle-shutdown-_3oOV1V_.mjs → idle-shutdown-IGyNV8Cr.mjs} +1 -1
- package/dist/{ios-DE6duQoz.mjs → ios-BJ4XUSe1.mjs} +18 -18
- package/dist/{logs-DUoKlDoS.mjs → logs-BAaS7gS2.mjs} +3 -3
- package/dist/{macos-32po3kUq.mjs → macos-BIRQS90f.mjs} +66 -25
- package/dist/maintenance-run.mjs +2 -2
- package/dist/{metro-gateway-DmslUM30.mjs → metro-gateway-C-ijGI2F.mjs} +1 -1
- package/dist/{native-runtime-DhJI3IVQ.mjs → native-runtime-BEK171xQ.mjs} +1 -1
- package/dist/offload-worker.mjs +5 -5
- package/dist/{preview-CxPRIEht.mjs → preview-B-g9d7kV.mjs} +1 -1
- package/dist/{reload-qZei6iWn.mjs → reload-DcRxj3qG.mjs} +2 -2
- package/dist/settings.schema.json +86 -68
- package/dist/{start-BopZcr4n.mjs → start-AlfCPRVU.mjs} +1 -1
- package/dist/{start-uee1wWjY.mjs → start-DUz3mYdb.mjs} +1 -1
- package/dist/{status-dXX2JX1C.mjs → status-BA2pehwf.mjs} +9 -9
- package/dist/{stop-Cr1d8DSE.mjs → stop-BIiM49EY.mjs} +1 -1
- package/dist/{stop-BjizrQwv.mjs → stop-DQIasgKp.mjs} +3 -3
- package/dist/{stop-BCwvvs7F.mjs → stop-zF1y04f2.mjs} +1 -1
- package/dist/supervisor-run.mjs +4 -4
- package/dist/{support-BJPgYCu-.mjs → support-CsJNVfOc.mjs} +4 -4
- package/dist/{support-F9-sr0Oi.mjs → support-WvD__tSV.mjs} +2 -2
- package/dist/{toolchain-CNIBTIOv.mjs → toolchain-DNyR3NPq.mjs} +10 -6
- package/dist/{web-exQtGkoc.mjs → web-Dl0KSRHf.mjs} +2 -2
- package/dist/{worktree-ZpZR3S1k.mjs → worktree-Be_7NLKy.mjs} +6 -6
- package/dist/{worktree-Dc98cE6_.mjs → worktree-j3IcFAI5.mjs} +1 -1
- 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
|
|
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
|
|
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 >
|
|
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
|
|
665
|
-
|
|
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
|
|
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?,
|
|
914
|
-
per
|
|
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
|
-
|
|
920
|
-
|
|
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
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1407
|
-
"ready" phase is "ready" and nothing is
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 "
|
|
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
|
|
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
|
|
3311
|
+
summary: "the selected remote Mac cannot build this app",
|
|
3299
3312
|
body: () => `STIM_OFFLOAD_REFUSED
|
|
3300
3313
|
|
|
3301
|
-
A named --build
|
|
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
|
|
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
|
|
3318
|
-
--build
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 >
|
|
4970
|
-
when it names a machine, then lowest load, most free memory and
|
|
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
|
|
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
|
|
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
|
|
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
|
|
6311
|
-
android --build
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
\`
|
|
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
|
|
8392
|
+
Approved doctor entries under remoteMachines and deviceHosts include host
|
|
8377
8393
|
{ name, screenRecording, accessibility } when the worker reports it.
|
|
8378
8394
|
|
|
8379
|
-
|
|
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
|
-
|
|
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 \`
|
|
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
|
-
|
|
8389
|
-
\`
|
|
8390
|
-
by MagicDNS name with an optional serve port (default
|
|
8391
|
-
|
|
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
|
|
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
|
|
8408
|
-
simulators, emulators and apps approved Macs run there, below
|
|
8409
|
-
|
|
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
|
|
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
|
-
|
|
8426
|
-
\`doctor --fix\` forgets entries removed from
|
|
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
|
|
8432
|
-
place sessions on these
|
|
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
|
|
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
|
-
|
|
8452
|
-
\`
|
|
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
|
-
"
|
|
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
|
-
|
|
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
|
-
\`
|
|
8476
|
-
\`ios\`, \`android\` and \`macos\`. \`--build
|
|
8477
|
-
overrides
|
|
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
|
|
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
|
|
8485
|
-
approved; ignores
|
|
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
|
|
8488
|
-
Any refusal or failure is STIM_OFFLOAD_REFUSED with the
|
|
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
|
|
8502
|
-
or rerun with --build
|
|
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
|
|
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
|
|
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 \`
|
|
8515
|
-
|
|
8516
|
-
while every slot here is busy, any
|
|
8517
|
-
the load is high,
|
|
8518
|
-
Mac's. A
|
|
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
|
|
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
|
-
\`
|
|
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
|
|
8549
|
+
counts as saturated, both here and on a remote Mac.
|
|
8529
8550
|
|
|
8530
|
-
|
|
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
|
|
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
|
|
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
|
-
\`
|
|
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
|
-
\`
|
|
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
|
-
\`
|
|
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
|
|
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
|
|
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
|
|
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
|
|
9183
|
-
machine setting
|
|
9184
|
-
requires the matching configured and paired
|
|
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
|
|
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
|
|
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
|
|
9366
|
-
in
|
|
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
|
|
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
|
|
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
|
|
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: () => `
|
|
10003
|
+
body: () => `REMOTE MAC (OPTIONAL)
|
|
9975
10004
|
|
|
9976
10005
|
${paths}
|
|
9977
10006
|
|
|
9978
|
-
Proceed only when the user names an approved
|
|
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
|
|
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}".`
|