stim 1.25.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{acquire-artifact-zA4S7RHE.mjs → acquire-artifact-DVsvSwf7.mjs} +1 -1
- package/dist/{act-BbHS3oV8.mjs → act-C-BqJEpu.mjs} +157 -35
- package/dist/{activity-BpjwrQXU.mjs → activity-Lnb_EoRY.mjs} +4 -5
- package/dist/{agent-device-usage-output-Bnkerfod.mjs → agent-device-usage-output-DbXy5tg8.mjs} +4 -4
- package/dist/{android-saBeB4lr.mjs → android-B5P81yI-.mjs} +1 -1
- package/dist/{android-CNZgRC-4.mjs → android-CSbLRD53.mjs} +5 -5
- package/dist/{android-BGwuK3Mc.mjs → android-CiNQw3kq.mjs} +73 -49
- package/dist/{android-Cjcj8MCw.mjs → android-DTAcRwBC.mjs} +81 -34
- package/dist/{android-cas-BVqh2Zep.mjs → android-cas-BTVhZ0Qs.mjs} +4 -4
- package/dist/{android-project-CTYaETc0.d.mts → android-project-DUGMbq28.d.mts} +55 -1
- package/dist/api.d.mts +8 -5
- package/dist/api.mjs +27 -27
- package/dist/apk-signed-tail-B46U9hXc.mjs +142 -0
- package/dist/{artifact-Co8zixVx.mjs → artifact-BxREhAaV.mjs} +23 -18
- package/dist/{artifact-DN8JNwqS.mjs → artifact-CsAP6AGK.mjs} +35 -20
- package/dist/{attempt-DW-mQqM7.mjs → attempt-ClyJlZPT.mjs} +4 -2
- package/dist/{browser-web-CCgZsHmI.mjs → browser-web-rYPyqhTf.mjs} +11 -12
- package/dist/{budget-HyShrIpL.mjs → budget-k2mZGvvk.mjs} +196 -33
- package/dist/{build-CAiw8Ezm.mjs → build-DPhApsjV.mjs} +26 -23
- package/dist/{build-cache-CKCzxzxA.mjs → build-cache-DrXNCy3T.mjs} +103 -21
- package/dist/{build-plan-zCuHGlA8.mjs → build-plan-DrMMdayj.mjs} +5 -5
- package/dist/{cache-manifest-BPXRONJz.mjs → cache-manifest-BEZ9Bpl1.mjs} +1 -1
- package/dist/cache-manifest.mjs +1 -1
- package/dist/{ccache-h1FKhZeg.mjs → ccache-Bx5TbxwG.mjs} +6 -6
- package/dist/{cli-C4w607Pz.mjs → cli-BBKFGOFl.mjs} +19 -19
- package/dist/cli.mjs +1 -1
- package/dist/{client-BQsmyp_-.mjs → client-D9CaRks-.mjs} +36 -61
- package/dist/collector-run.mjs +4 -4
- package/dist/{command-output-BBvS1H6v.mjs → command-output-BF5AR2dL.mjs} +1 -1
- package/dist/{config-BZhXY15H.mjs → config-BktkY_zC.mjs} +321 -15
- package/dist/{launch-DscF1QfM.mjs → dependencies-Dw6wfQdv.mjs} +258 -255
- package/dist/{dependency-state-BwNCYG5Q.mjs → dependency-state-DFB41vfr.mjs} +1 -1
- package/dist/{dev-client-CHoXXZeg.mjs → dev-client-DXR_tPVY.mjs} +2 -2
- package/dist/{device-B9FqTBYW.mjs → device-BK-zwyd_.mjs} +13 -13
- package/dist/{device-F5-4z9ef.mjs → device-BcYeHSFu.mjs} +14 -14
- package/dist/{device-capacity-ZYaRALv5.mjs → device-capacity-DCSvUF0l.mjs} +10 -17
- package/dist/device-host-worker.mjs +11 -13
- package/dist/{device-ios-DkHBrmvH.mjs → device-ios-BLGfXQeK.mjs} +49 -17
- package/dist/{device-lease-run-ogEeJ62K.mjs → device-lease-run-BmvIl7bI.mjs} +4 -4
- package/dist/{device-pool-BIg8MU8l.mjs → device-pool-Dluix4H3.mjs} +3 -3
- package/dist/{doctor-k3P3PizH.mjs → doctor-Bhg1ii70.mjs} +14 -14
- package/dist/{doctor-A_Nr_fDe.mjs → doctor-Cp-BhzTS.mjs} +1 -1
- package/dist/{doctor-Bm8TVpGn.mjs → doctor-OnwP94ne.mjs} +72 -23
- package/dist/{doctor-fingerprint-zlujA1Gs.mjs → doctor-fingerprint-D3a04Mhu.mjs} +8 -2
- package/dist/doctor-fingerprint.mjs +1 -1
- package/dist/{doctor-watchman-BovI1y3-.mjs → doctor-watchman-BStK05nt.mjs} +4 -4
- package/dist/{eas-build-CyDKNTBP.mjs → eas-build-Dsj93iM9.mjs} +2 -2
- package/dist/{eas-fallback-gaZi-dJL.mjs → eas-fallback-FwkeqqGi.mjs} +10 -10
- package/dist/{eas-session-ledger-BMCA1gdO.mjs → eas-session-ledger-B5vygTiD.mjs} +5 -5
- package/dist/{error-diagnostics-B1Mj_-7h.mjs → error-diagnostics-BOOm9Db7.mjs} +8 -8
- package/dist/{gc-eaz403W6.mjs → gc-C_79zvz4.mjs} +2 -2
- package/dist/{gc-B9jcnmIk.mjs → gc-ldgr-hXU.mjs} +74 -43
- package/dist/{guide-DR0K0xW9.mjs → guide-D7K0X6KG.mjs} +272 -52
- package/dist/{hosted-android-Bvb2-ZxD.mjs → hosted-android-Bk54ej6n.mjs} +3 -3
- package/dist/{hosted-client-rsRqysJc.mjs → hosted-client-fHO8yqzc.mjs} +5 -5
- package/dist/{hosted-ios-RtVcJH3u.mjs → hosted-ios-D55QhYaD.mjs} +1 -1
- package/dist/{hosted-logs-CWKGYWNX.mjs → hosted-logs-BfbmDM4M.mjs} +17 -11
- package/dist/hosted-logs-sync-B0pvmOk-.mjs +195 -0
- package/dist/{hosted-macos-d0pv9Tth.mjs → hosted-macos-CPl0OZ9h.mjs} +5 -5
- package/dist/{hosted-native-BxTizGU2.mjs → hosted-native-CpDB3-PO.mjs} +6 -7
- package/dist/{idle-shutdown-BIyfl0Zj.mjs → idle-shutdown-FfxL1KdG.mjs} +22 -9
- package/dist/{ios-Dvt97HgQ.mjs → ios-B7-lToDu.mjs} +8 -8
- package/dist/{ios-BQzvJlzw.mjs → ios-WxpDJ5T1.mjs} +72 -5
- package/dist/{ios-device-CKSvk0bu.mjs → ios-device-CsyryvpT.mjs} +1 -1
- package/dist/{ios-BRVM8b0P.mjs → ios-ftxdQbJS.mjs} +74 -46
- package/dist/{ios-project-DCUDo06I.mjs → ios-project-Ty5pHl9O.mjs} +6 -6
- package/dist/{ios-state-CT9nV5SP.mjs → ios-state-Cw7-WQf2.mjs} +1 -1
- package/dist/{js-swap-Z9HbC4cj.mjs → js-swap-BMhXYVDS.mjs} +4 -4
- package/dist/{launch-D0lPvFFu.mjs → launch-DOp8RjDz.mjs} +31 -26
- package/dist/{logs-BsIRre8x.mjs → logs-dQDki6Tt.mjs} +9 -173
- package/dist/{logs-Crs9y34Z.mjs → logs-s1dRIG1E.mjs} +85 -36
- package/dist/{macos-CcUlJPMu.mjs → macos-B0VEV3Gf.mjs} +1 -1
- package/dist/{macos-D477nfzH.mjs → macos-DBBPNnIA.mjs} +18 -19
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +28 -11
- package/dist/{metro-1pJgCX4U.mjs → metro-CjC10t6E.mjs} +2 -2
- package/dist/{metro-gateway-Bp9gJQAN.mjs → metro-gateway-B6_PgD0L.mjs} +2 -3
- package/dist/{named-ports-BVbn8SvC.mjs → named-ports-BG0j1X4g.mjs} +2 -2
- package/dist/{native-android-BvMizJn1.mjs → native-android-CL2NGiik.mjs} +17 -17
- package/dist/{native-gradle-artifact-inputs-BJscK4vN.mjs → native-gradle-artifact-inputs-btSUulme.mjs} +3 -3
- package/dist/{native-run-D5OJsGwA.mjs → native-run-BfIDFKLH.mjs} +2 -3
- package/dist/{native-runtime-B9w_Qyz3.mjs → native-runtime-Dq3RBcON.mjs} +6 -7
- package/dist/{native-xcode-inputs-Cv4l-obn.mjs → native-xcode-inputs-BW7H8JGu.mjs} +2 -2
- package/dist/{native-xcode-ios-DGrg90hE.mjs → native-xcode-ios-CBXJAxfC.mjs} +15 -16
- package/dist/offload-worker.d.mts +3 -1
- package/dist/offload-worker.mjs +31 -21
- package/dist/{ownership-jxxz-19m.mjs → ownership-BjYvMNX_.mjs} +2 -2
- package/dist/{phone-reverses-CYb7RRAx.mjs → phone-reverses-lmj6kcPm.mjs} +3 -3
- package/dist/{placement-log-DjOXJRIH.mjs → placement-log-DIFPQAXp.mjs} +1 -1
- package/dist/{plan-placement-BqKgKHCi.mjs → plan-placement-IiiSQhtz.mjs} +3 -3
- package/dist/{ports-DtS1Amb0.mjs → ports-C2_w1Z0Z.mjs} +3 -3
- package/dist/prebuild-gmouvmJZ.mjs +1247 -0
- package/dist/{project-BiC68mIp.mjs → project-BUu6Is4k.mjs} +15 -16
- package/dist/{react-native-android-DRYqoJc4.mjs → react-native-android-Cgg99REN.mjs} +47 -33
- package/dist/{react-native-build-CwZB-agu.mjs → react-native-build-oNwqF5Wb.mjs} +7 -7
- package/dist/{react-native-doctor-BCrytK7h.mjs → react-native-doctor-BhA3KUte.mjs} +49 -8
- package/dist/{react-native-ios-Cr1buNFo.mjs → react-native-ios-B-nf4rjN.mjs} +37 -23
- package/dist/{recordings-BaoQ0t-J.mjs → recordings-BldzVKq0.mjs} +1 -1
- package/dist/{reload-Beftw2X3.mjs → reload-C9OduiNc.mjs} +1 -1
- package/dist/{reload-FbSgMF8x.mjs → reload-CCR7KC_l.mjs} +14 -14
- package/dist/{remote-BuZj6AyU.mjs → remote-C8S7FlPF.mjs} +7 -7
- package/dist/{result-CR2vk2cj.mjs → result-7F5hEwQJ.mjs} +16 -16
- package/dist/{run-BtzE09Dl.mjs → run-BqB0v3pt.mjs} +1 -1
- package/dist/{selection-D5cxEl3t.mjs → selection-BNPBZ6T5.mjs} +155 -42
- package/dist/{server-bare-CH9X0RLn.mjs → server-bare-A75rDIdD.mjs} +1 -1
- package/dist/{server-command-CaBbDNU2.mjs → server-command-CssKFOD7.mjs} +4 -4
- package/dist/{server-expo-Ck8EIidM.mjs → server-expo-eQfOdydb.mjs} +2 -2
- package/dist/server-expo-wvcj5tiZ.mjs +2 -0
- package/dist/{settings-B5tCoq9N.mjs → settings-CosW5X-S.mjs} +1 -1
- package/dist/{settings-DzH9mGQZ.mjs → settings-OaGQF-ri.mjs} +1 -1
- package/dist/{settings-write-n0zwfohx.mjs → settings-write-QjYfSrjF.mjs} +5 -5
- package/dist/settings.schema.json +33 -6
- package/dist/{simslim-BjxszUAb.mjs → simslim-Bax1qcxu.mjs} +3 -2
- package/dist/{slot-launch-QeuJMlnJ.mjs → slot-launch-CYCEhfBY.mjs} +6 -6
- package/dist/{stage-D8xlRU2D.mjs → stage-jKQ7CP_B.mjs} +1 -1
- package/dist/{start-C1JLjkNw.mjs → start-C_wefNKB.mjs} +1 -1
- package/dist/{start-YMpNwLhh.mjs → start-_BdJ32cZ.mjs} +9 -10
- package/dist/{state-DMRNP7-4.mjs → state-C1i2nMOP.mjs} +2 -3
- package/dist/{state-DPaM3u5K.mjs → state-C4OdpOTF.mjs} +1 -2
- package/dist/{stats-CP7STzZw.mjs → stats-tEpEEH-u.mjs} +4 -4
- package/dist/{status-cNw6i0_t.mjs → status-B9M7x4CZ.mjs} +1 -1
- package/dist/{status-Fect2w9R.mjs → status-CRXz-Gtj.mjs} +1 -1
- package/dist/{status-CRLiJ-O_.mjs → status-DQrqodLj.mjs} +22 -23
- package/dist/{status-watch-Bc2J4TZn.mjs → status-watch-B5wDIH_o.mjs} +4 -4
- package/dist/status-worker.mjs +1 -1
- package/dist/{stim-desktop-DS0mzR8U.mjs → stim-desktop-6Dqp-gjX.mjs} +1 -1
- package/dist/{stop-Br7LKxBE.mjs → stop-CmdNhGlC.mjs} +2 -2
- package/dist/{stop-Db9Kh-UA.mjs → stop-DRqQVqDJ.mjs} +21 -19
- package/dist/{stop-COP6PQqw.mjs → stop-ySNQHXMG.mjs} +4 -5
- package/dist/supervisor-run.d.mts +1 -0
- package/dist/supervisor-run.mjs +14 -15
- package/dist/{support-Cxj9CmII.mjs → support-BGSCBoib.mjs} +4 -4
- package/dist/{support-qKcbgmI5.mjs → support-CVOCp0Ft.mjs} +9 -9
- package/dist/{swiftpm-artifact-inputs-iY9fsmOc.mjs → swiftpm-artifact-inputs-CfUzt_0Z.mjs} +1 -1
- package/dist/{swiftpm-macos-Bp_sn9P4.mjs → swiftpm-macos-x6HPpl_2.mjs} +9 -9
- package/dist/toolchain-DoavrvIA.mjs +2 -0
- package/dist/toolchain-J4J8MrAr.mjs +2107 -0
- package/dist/trigger-DzJu208Q.mjs +2 -0
- package/dist/{trigger-CBMe2YLH.mjs → trigger-KVaWWNyn.mjs} +1 -1
- package/dist/{warm-progress-BV3ZPmcY.mjs → warm-progress-DvhTX_eu.mjs} +3 -4
- package/dist/web-BFLueSh-.mjs +2 -0
- package/dist/{web-B4Yjyt1G.mjs → web-Bihbf7-u.mjs} +8 -9
- package/dist/web-run.mjs +4 -4
- package/dist/{workspace-state-CPSp3mav.mjs → workspace-state-pUg3_RRA.mjs} +45 -7
- package/dist/{workspaces-C9w4aeXF.mjs → workspaces-g2lhdBXF.mjs} +17 -17
- package/dist/{worktree-CclFIe1Z.mjs → worktree-BKuklFh_.mjs} +34 -31
- package/dist/{worktree-Ct9Gk3KL.mjs → worktree-Bm4cb-nU.mjs} +1 -1
- package/package.json +8 -8
- package/dist/created-devices-D2Aca-xu.mjs +0 -52
- package/dist/paths-DQtTgsBf.mjs +0 -42
- package/dist/prebuild-JUaqOLpc.mjs +0 -501
- package/dist/server-expo-C16Zf2k7.mjs +0 -2
- package/dist/toolchain-DB1aeqxO.mjs +0 -2
- package/dist/toolchain-VzLJzZ7O.mjs +0 -908
- package/dist/trigger-BLsHgAGR.mjs +0 -2
- package/dist/web-DS4UDWvf.mjs +0 -2
- package/dist/xcode-CiIIDnuD.mjs +0 -910
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { C as reportSignal, b as operationState } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { $ as
|
|
2
|
+
import { M as withDirLock$1 } from "./workspace-state-pUg3_RRA.mjs";
|
|
3
|
+
import { $ as findPeer$1, Q as endpoint, X as diagnoseTailscale, Y as diagnoseOutcome, _ as loadConfig$1, ct as tailscaleStatusAsync, d as getConfigDir, dt as readHostPermissions, it as realIo, lt as diagnosisFinding, nt as parseMachine$1, rt as reachMachine, st as setupRemedy, tt as outdatedServer, ut as notOnTailnetDiagnosis } from "./config-BktkY_zC.mjs";
|
|
4
|
+
import { o as cocoapodsInstall } from "./toolchain-J4J8MrAr.mjs";
|
|
4
5
|
import { releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
|
|
5
6
|
import { mkdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
6
7
|
import { hostname } from "node:os";
|
|
@@ -126,7 +127,17 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
|
|
|
126
127
|
machines: []
|
|
127
128
|
};
|
|
128
129
|
const status = await io.status();
|
|
129
|
-
if (!isJsonObject(status))
|
|
130
|
+
if (!isJsonObject(status)) {
|
|
131
|
+
const diagnosis = await diagnoseTailscale(io);
|
|
132
|
+
return {
|
|
133
|
+
findings: [note$1("Remote machines are unreachable", `remote.machines names remote machines. ${diagnosis.message}`, diagnosis.remedy)],
|
|
134
|
+
machines: entries.map((machine) => ({
|
|
135
|
+
machine,
|
|
136
|
+
state: "tailscale-off",
|
|
137
|
+
diagnosis
|
|
138
|
+
}))
|
|
139
|
+
};
|
|
140
|
+
}
|
|
130
141
|
const self = isJsonObject(status.Self) ? status.Self : {};
|
|
131
142
|
const deviceName = (typeof self.HostName === "string" && self.HostName ? self.HostName : hostname()).replace(/[\p{Cc}\p{Cf}]/gu, "").trim().slice(0, 64) || "Mac";
|
|
132
143
|
const inspected = {
|
|
@@ -146,20 +157,24 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
|
|
|
146
157
|
}
|
|
147
158
|
const current = await io.status();
|
|
148
159
|
if (!isJsonObject(current)) {
|
|
160
|
+
const diagnosis = await diagnoseTailscale(io);
|
|
149
161
|
inspected.machines.push({
|
|
150
162
|
machine,
|
|
151
|
-
state: "tailscale-off"
|
|
163
|
+
state: "tailscale-off",
|
|
164
|
+
diagnosis
|
|
152
165
|
});
|
|
153
|
-
inspected.findings.push(
|
|
166
|
+
inspected.findings.push(diagnosisFinding("device-host-machine", machine, diagnosis));
|
|
154
167
|
continue;
|
|
155
168
|
}
|
|
156
169
|
const peer = findPeer$1(current, parsed.name);
|
|
157
170
|
if (peer === "missing" || peer === "ambiguous") {
|
|
171
|
+
const diagnosis = notOnTailnetDiagnosis(machine, peer === "ambiguous");
|
|
158
172
|
inspected.machines.push({
|
|
159
173
|
machine,
|
|
160
|
-
state: "not-on-tailnet"
|
|
174
|
+
state: "not-on-tailnet",
|
|
175
|
+
diagnosis
|
|
161
176
|
});
|
|
162
|
-
inspected.findings.push(
|
|
177
|
+
inspected.findings.push(diagnosisFinding("device-host-machine", machine, diagnosis));
|
|
163
178
|
continue;
|
|
164
179
|
}
|
|
165
180
|
const nodeRoute = `${peer.nodeId}:${parsed.port}`;
|
|
@@ -251,16 +266,40 @@ async function inspectDeviceHostMachines({ fix, version = "<version>", tickets =
|
|
|
251
266
|
const outdated = outdatedServer(machine, version, outcome.command);
|
|
252
267
|
inspected.machines.push({
|
|
253
268
|
...known,
|
|
254
|
-
state: "outdated"
|
|
269
|
+
state: "outdated",
|
|
270
|
+
diagnosis: {
|
|
271
|
+
layer: "compat",
|
|
272
|
+
code: "server-outdated",
|
|
273
|
+
title: "Server is outdated",
|
|
274
|
+
message: outdated.detail,
|
|
275
|
+
remedy: outdated.fix
|
|
276
|
+
}
|
|
255
277
|
});
|
|
256
278
|
inspected.findings.push(note$1(outdated.title, outdated.detail, outdated.fix));
|
|
257
279
|
continue;
|
|
258
280
|
}
|
|
281
|
+
if (outcome.state === "unreachable") {
|
|
282
|
+
const diagnosis = await diagnoseOutcome(io, {
|
|
283
|
+
entry: machine,
|
|
284
|
+
peer,
|
|
285
|
+
port: parsed.port,
|
|
286
|
+
target: endpoint(peer, parsed.port),
|
|
287
|
+
reason: outcome.reason,
|
|
288
|
+
transport: outcome.transport
|
|
289
|
+
});
|
|
290
|
+
inspected.machines.push({
|
|
291
|
+
...known,
|
|
292
|
+
state: "unreachable",
|
|
293
|
+
diagnosis
|
|
294
|
+
});
|
|
295
|
+
inspected.findings.push(diagnosisFinding("device-host-machine", machine, diagnosis));
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
259
298
|
inspected.machines.push({
|
|
260
299
|
...known,
|
|
261
300
|
state: outcome.state
|
|
262
301
|
});
|
|
263
|
-
inspected.findings.push(outcome.state === "key-changed" ? note$1(`Remote machine ${machine} answered with a different server key`, "Stim refuses to connect to a stim-server that does not prove it holds the key pinned at approval.", `If that machine or its Stim home was replaced, remove ${machine} from remote.machines, run \`stim doctor --fix\`, then add it back and run \`stim doctor --fix\` again.`) : outcome.state === "lapsed" ? note$1(`Hosting request to ${machine} lapsed`, `${machine} did not approve this machine before its setup ticket expired at ${outcome.credential.expiresAt}.`, "Run `stim doctor --fix` to make a new ticket.") :
|
|
302
|
+
inspected.findings.push(outcome.state === "key-changed" ? note$1(`Remote machine ${machine} answered with a different server key`, "Stim refuses to connect to a stim-server that does not prove it holds the key pinned at approval.", `If that machine or its Stim home was replaced, remove ${machine} from remote.machines, run \`stim doctor --fix\`, then add it back and run \`stim doctor --fix\` again.`) : outcome.state === "lapsed" ? note$1(`Hosting request to ${machine} lapsed`, `${machine} did not approve this machine before its setup ticket expired at ${outcome.credential.expiresAt}.`, "Run `stim doctor --fix` to make a new ticket.") : note$1(`Remote machine ${machine} no longer accepts this machine for device hosting`, `${outcome.reason} The pinned key is preserved.`, "Run `stim doctor --fix` to ask again."));
|
|
264
303
|
}
|
|
265
304
|
return inspected;
|
|
266
305
|
} finally {
|
|
@@ -317,7 +356,7 @@ const PROBLEM_TITLES = {
|
|
|
317
356
|
xcode: "has another Xcode",
|
|
318
357
|
"macos-sdk": "has another macOS SDK",
|
|
319
358
|
"simulator-sdk": "has another simulator SDK",
|
|
320
|
-
cocoapods: "has another
|
|
359
|
+
cocoapods: "has no CocoaPods, or another version",
|
|
321
360
|
bundler: "has no Bundler",
|
|
322
361
|
runtime: "has no simulator for this project's iOS runtime",
|
|
323
362
|
jdk: "runs another JDK major version",
|
|
@@ -329,7 +368,17 @@ const PROBLEM_TITLES = {
|
|
|
329
368
|
busy: "is too busy to take builds",
|
|
330
369
|
platform: "cannot build this platform"
|
|
331
370
|
};
|
|
332
|
-
|
|
371
|
+
const NOTE_TITLES = {
|
|
372
|
+
ndk: "downloads this project's NDK on its first Android build",
|
|
373
|
+
"build-tools": "downloads this project's Android build-tools on its first Android build",
|
|
374
|
+
"compile-sdk": "downloads this project's Android compile platform on its first Android build"
|
|
375
|
+
};
|
|
376
|
+
function commandFix(problem, entry) {
|
|
377
|
+
return problem.commands?.length && problem.lead ? [`On ${entry}, ${problem.lead}:`, ...problem.commands].join("\n") : null;
|
|
378
|
+
}
|
|
379
|
+
function problemFix(problem, entry) {
|
|
380
|
+
const { code } = problem;
|
|
381
|
+
if (problem.followsFrom) return `Fix the ${problem.followsFrom} problem on ${entry} first; this follows from it.`;
|
|
333
382
|
switch (code) {
|
|
334
383
|
case "unreachable": return `Check that stim-server runs on ${entry} and that its tailscale serve route answers, then run \`stim doctor\` again. To keep it running there, run \`stim-server service install --serve\` on ${entry}.`;
|
|
335
384
|
case "checkout": return "Offload syncs the files git lists; run Stim from a git checkout of the app.";
|
|
@@ -337,29 +386,51 @@ function problemFix(code, entry) {
|
|
|
337
386
|
case "arch": return "Use a remote machine with the same CPU architecture as this machine.";
|
|
338
387
|
case "xcode":
|
|
339
388
|
case "simulator-sdk":
|
|
340
|
-
case "macos-sdk": return `Install and select the same Xcode on ${entry} and this Mac (\`xcode-select -p\` on each).`;
|
|
341
|
-
case "cocoapods": return `Install the same CocoaPods version on ${entry}, on the PATH its stim-server
|
|
389
|
+
case "macos-sdk": return commandFix(problem, entry) ?? `Install and select the same Xcode on ${entry} and this Mac (\`xcode-select -p\` on each).`;
|
|
390
|
+
case "cocoapods": return commandFix(problem, entry) ?? `Install the same CocoaPods version on ${entry}, on the PATH its stim-server sets. A build sent there with --remote-build ${entry} still runs; a version that differs rewrites the COCOAPODS line of a committed Podfile.lock.`;
|
|
342
391
|
case "bundler": return `Install Bundler (\`gem install bundler\`) on ${entry}, on the PATH its stim-server's login shell sets.`;
|
|
343
|
-
case "runtime": return `Install that iOS simulator runtime on ${entry} with at least one iPhone simulator, or set ios.runtime here to one ${entry} has.`;
|
|
344
|
-
case "jdk": return `Start stim-server on ${entry} with JAVA_HOME at a JDK of the same major version as this machine's.`;
|
|
392
|
+
case "runtime": return commandFix(problem, entry) ?? `Install that iOS simulator runtime on ${entry} with at least one iPhone simulator, or set ios.runtime here to one ${entry} has.`;
|
|
393
|
+
case "jdk": return commandFix(problem, entry) ?? `Start stim-server on ${entry} with JAVA_HOME at a JDK of the same major version as this machine's.`;
|
|
345
394
|
case "android-sdk":
|
|
346
395
|
case "ndk":
|
|
347
396
|
case "build-tools":
|
|
348
|
-
case "compile-sdk": return `Install the missing package with sdkmanager in the Android SDK stim-server on ${entry} uses (its ANDROID_HOME, else ~/Library/Android/sdk on macOS or ~/Android/Sdk on Linux).`;
|
|
397
|
+
case "compile-sdk": return commandFix(problem, entry) ?? `Install the missing package with sdkmanager in the Android SDK stim-server on ${entry} uses (its ANDROID_HOME, else ~/Library/Android/sdk on macOS or ~/Android/Sdk on Linux).`;
|
|
349
398
|
case "disk": return `Free space on ${entry}'s worker root (server.workerRoot there).`;
|
|
350
399
|
case "platform": return `iOS and macOS builds need a Mac; ${entry} can take Android builds only.`;
|
|
351
400
|
case "busy": return `Builds stay on this machine until ${entry} has capacity. On ${entry}, server.maxLoadPerCore sets the load it accepts and concurrency.maxBuilds how many of its own builds it runs; it takes one offloaded build at a time.`;
|
|
352
401
|
}
|
|
353
402
|
}
|
|
354
403
|
const TRANSIENT = /* @__PURE__ */ new Set(["unreachable", "busy"]);
|
|
355
|
-
|
|
356
|
-
|
|
404
|
+
const UNPREDICTABLE = /* @__PURE__ */ new Set([
|
|
405
|
+
"unreachable",
|
|
406
|
+
"busy",
|
|
407
|
+
"disk",
|
|
408
|
+
"checkout",
|
|
409
|
+
"cocoapods"
|
|
410
|
+
]);
|
|
411
|
+
/** Why a build on the machine named for it cannot work, from the toolchain differences found before this machine changes the checkout. */
|
|
412
|
+
function predictedRefusal(entry, problems) {
|
|
413
|
+
const known = problems.filter((problem) => !UNPREDICTABLE.has(problem.code));
|
|
414
|
+
if (known.length === 0) return null;
|
|
415
|
+
return {
|
|
416
|
+
reason: known.map((problem) => problem.reason).join("; "),
|
|
417
|
+
remedy: known.map((problem) => problemFix(problem, entry)).join("\n")
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
function offloadFindings(entry, problems, notes) {
|
|
421
|
+
return [...problems.map((problem) => ({
|
|
357
422
|
code: `build-machine-${problem.code}`,
|
|
358
423
|
level: TRANSIENT.has(problem.code) ? "note" : "cost",
|
|
359
424
|
title: `Remote machine ${entry} ${PROBLEM_TITLES[problem.code]}`,
|
|
360
|
-
detail: `Builds fall back to this machine: ${problem.reason}
|
|
361
|
-
fix: problemFix(problem
|
|
362
|
-
}))
|
|
425
|
+
detail: `Builds fall back to this machine: ${problem.reason}.${problem.code === "cocoapods" ? ` A build sent there with --remote-build ${entry} still runs.` : ""}`,
|
|
426
|
+
fix: problemFix(problem, entry)
|
|
427
|
+
})), ...notes.map((each) => ({
|
|
428
|
+
code: `build-machine-${each.code}`,
|
|
429
|
+
level: "note",
|
|
430
|
+
title: `Remote machine ${entry} ${NOTE_TITLES[each.code] ?? "needs a first-build download"}`,
|
|
431
|
+
detail: `The build goes there anyway: ${each.reason}.`,
|
|
432
|
+
fix: commandFix(each, entry)
|
|
433
|
+
}))];
|
|
363
434
|
}
|
|
364
435
|
async function inspectMachine(entry, status, deviceName, fix, version, tickets, io, check, operation) {
|
|
365
436
|
const parsed = parseMachine$1(entry);
|
|
@@ -372,13 +443,14 @@ async function inspectMachine(entry, status, deviceName, fix, version, tickets,
|
|
|
372
443
|
};
|
|
373
444
|
const peer = findPeer$1(status, parsed.name);
|
|
374
445
|
if (peer === "missing" || peer === "ambiguous") {
|
|
375
|
-
const
|
|
446
|
+
const diagnosis = notOnTailnetDiagnosis(entry, peer === "ambiguous");
|
|
376
447
|
return {
|
|
377
448
|
report: {
|
|
378
449
|
machine: entry,
|
|
379
|
-
state: "not-on-tailnet"
|
|
450
|
+
state: "not-on-tailnet",
|
|
451
|
+
diagnosis
|
|
380
452
|
},
|
|
381
|
-
finding:
|
|
453
|
+
finding: diagnosisFinding("build-machine", entry, diagnosis)
|
|
382
454
|
};
|
|
383
455
|
}
|
|
384
456
|
const credential = readBuildMachines().find((each) => each.machine === entry);
|
|
@@ -459,21 +531,40 @@ async function inspectMachine(entry, status, deviceName, fix, version, tickets,
|
|
|
459
531
|
};
|
|
460
532
|
case "outdated": {
|
|
461
533
|
const outdated = outdatedServer(entry, version, outcome.command);
|
|
534
|
+
const diagnosis = {
|
|
535
|
+
layer: "compat",
|
|
536
|
+
code: "server-outdated",
|
|
537
|
+
title: "Server is outdated",
|
|
538
|
+
message: outdated.detail,
|
|
539
|
+
remedy: outdated.fix
|
|
540
|
+
};
|
|
462
541
|
return {
|
|
463
542
|
report: {
|
|
464
543
|
...paired,
|
|
465
|
-
state: "outdated"
|
|
544
|
+
state: "outdated",
|
|
545
|
+
diagnosis
|
|
466
546
|
},
|
|
467
547
|
finding: note(outdated.title, outdated.detail, outdated.fix)
|
|
468
548
|
};
|
|
469
549
|
}
|
|
470
|
-
case "unreachable":
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
550
|
+
case "unreachable": {
|
|
551
|
+
const diagnosis = await diagnoseOutcome(io, {
|
|
552
|
+
entry,
|
|
553
|
+
peer,
|
|
554
|
+
port: parsed.port,
|
|
555
|
+
target: endpoint(peer, parsed.port),
|
|
556
|
+
reason: outcome.reason,
|
|
557
|
+
transport: outcome.transport
|
|
558
|
+
});
|
|
559
|
+
return {
|
|
560
|
+
report: {
|
|
561
|
+
...paired,
|
|
562
|
+
state: "unreachable",
|
|
563
|
+
diagnosis
|
|
564
|
+
},
|
|
565
|
+
finding: diagnosisFinding("build-machine", entry, diagnosis)
|
|
566
|
+
};
|
|
567
|
+
}
|
|
477
568
|
}
|
|
478
569
|
const permissions = readHostPermissions(outcome.result.host);
|
|
479
570
|
const host = permissions ? { host: permissions } : {};
|
|
@@ -485,7 +576,7 @@ async function inspectMachine(entry, status, deviceName, fix, version, tickets,
|
|
|
485
576
|
},
|
|
486
577
|
finding: null
|
|
487
578
|
};
|
|
488
|
-
const { capacity, problems } = await check(outcome.credential);
|
|
579
|
+
const { capacity, problems, notes = [] } = await check(outcome.credential);
|
|
489
580
|
return {
|
|
490
581
|
report: {
|
|
491
582
|
...paired,
|
|
@@ -494,10 +585,11 @@ async function inspectMachine(entry, status, deviceName, fix, version, tickets,
|
|
|
494
585
|
offloadable: problems.length === 0,
|
|
495
586
|
reasons: problems.map((problem) => problem.reason),
|
|
496
587
|
problems,
|
|
588
|
+
...notes.length ? { notes } : {},
|
|
497
589
|
...capacity ? { capacity } : {}
|
|
498
590
|
},
|
|
499
591
|
finding: null,
|
|
500
|
-
extra: offloadFindings(entry, problems)
|
|
592
|
+
extra: offloadFindings(entry, problems, notes)
|
|
501
593
|
};
|
|
502
594
|
}
|
|
503
595
|
/**
|
|
@@ -519,13 +611,17 @@ async function inspectBuildMachines({ fix, check = null, version = "<version>",
|
|
|
519
611
|
machines: []
|
|
520
612
|
};
|
|
521
613
|
const status = await io.status();
|
|
522
|
-
if (!isJsonObject(status))
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
614
|
+
if (!isJsonObject(status)) {
|
|
615
|
+
const diagnosis = await diagnoseTailscale(io);
|
|
616
|
+
return {
|
|
617
|
+
findings: [note("Remote machines are unreachable", `remote.machines names remote machines. ${diagnosis.message}`, diagnosis.remedy)],
|
|
618
|
+
machines: entries.map((machine) => ({
|
|
619
|
+
machine,
|
|
620
|
+
state: "tailscale-off",
|
|
621
|
+
diagnosis
|
|
622
|
+
}))
|
|
623
|
+
};
|
|
624
|
+
}
|
|
529
625
|
const self = isJsonObject(status.Self) ? status.Self : {};
|
|
530
626
|
const deviceName = (typeof self.HostName === "string" && self.HostName ? self.HostName : hostname()).replace(/[\p{Cc}\p{Cf}]/gu, "").trim().slice(0, 64) || "Mac";
|
|
531
627
|
const inspection = {
|
|
@@ -547,6 +643,23 @@ const FINGERPRINT_MISMATCH_REMEDY = "The build Mac fingerprints the synced check
|
|
|
547
643
|
function fingerprintMismatchRemedy(reason) {
|
|
548
644
|
return reason.startsWith("fingerprint-mismatch: the checkout there ") ? FINGERPRINT_MISMATCH_REMEDY : void 0;
|
|
549
645
|
}
|
|
646
|
+
const PODS_FAILED_PREFIX = "pod install failed: ";
|
|
647
|
+
/** The reason a failed worker job is reported with: a `pods-failed` code reads as a failed pod install. */
|
|
648
|
+
function workerFailureReason(code, message) {
|
|
649
|
+
return code === "pods-failed" ? `${PODS_FAILED_PREFIX}${String(message ?? "")}` : `${String(code ?? "failed")}: ${String(message ?? "")}`;
|
|
650
|
+
}
|
|
651
|
+
/** The remedy for a worker whose `pod install` failed, naming the install when it has no CocoaPods; undefined for any other reason. */
|
|
652
|
+
function podsFailedRemedy(machine, reason, localCocoapods) {
|
|
653
|
+
if (!reason.startsWith(PODS_FAILED_PREFIX)) return void 0;
|
|
654
|
+
const retry = "run the same command again, or rerun with --remote-build auto or --remote-build local";
|
|
655
|
+
if (!reason.includes("CocoaPods is not installed: no `pod` executable on PATH.")) return `Fix the pod install error on ${machine} (run pod install in its checkout under server.workerRoot there to see all of it), then ${retry}.`;
|
|
656
|
+
const { lead, commands } = cocoapodsInstall(localCocoapods);
|
|
657
|
+
return [
|
|
658
|
+
`On ${machine}, ${lead}:`,
|
|
659
|
+
...commands,
|
|
660
|
+
`Then ${retry}.`
|
|
661
|
+
].join("\n");
|
|
662
|
+
}
|
|
550
663
|
var OffloadRefusal = class extends Error {
|
|
551
664
|
code = "STIM_OFFLOAD_REFUSED";
|
|
552
665
|
remedy;
|
|
@@ -623,4 +736,4 @@ function resolveBuildPlacement(flag) {
|
|
|
623
736
|
}
|
|
624
737
|
}
|
|
625
738
|
//#endregion
|
|
626
|
-
export { parseBuildMachineOption as a,
|
|
739
|
+
export { parseBuildMachineOption as a, resolveBuildMachine as c, inspectBuildMachines as d, pairedMachines as f, inspectDeviceHostMachines as g, hostingMachines as h, namedBuildMachine as i, resolveBuildPlacement as l, configuredMachines as m, buildPlacementSettings as n, podsFailedRemedy as o, predictedRefusal as p, fingerprintMismatchRemedy as r, requireLocalBuild as s, OffloadRefusal as t, workerFailureReason as u };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { O as __commonJSMin, k as __require, t as getExecutor } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import { J as resolveProjectSettings } from "./settings-
|
|
2
|
+
import { J as resolveProjectSettings } from "./settings-CosW5X-S.mjs";
|
|
3
3
|
import { c as registerMetroStore, f as resolveMetroSharedCache, n as supervisorError, r as appendCacheStore, s as metroStoreRoot } from "./errors-DHm_U5gv.mjs";
|
|
4
4
|
import { createRequire } from "node:module";
|
|
5
5
|
import { isAbsolute, join, relative, sep } from "node:path";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as getExecutor } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import { n as METRO_COMMAND_PORT } from "./settings-
|
|
3
|
-
import { T as MODE_COMMAND } from "./project-
|
|
4
|
-
import { f as signalProcessTree } from "./metro-
|
|
2
|
+
import { n as METRO_COMMAND_PORT } from "./settings-CosW5X-S.mjs";
|
|
3
|
+
import { T as MODE_COMMAND } from "./project-BUu6Is4k.mjs";
|
|
4
|
+
import { f as signalProcessTree } from "./metro-CjC10t6E.mjs";
|
|
5
5
|
import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
|
|
6
|
-
import { g as projectNodeLine, p as recordFromLine, v as withProjectNode, y as superviseChildServer } from "./server-expo-
|
|
6
|
+
import { g as projectNodeLine, p as recordFromLine, v as withProjectNode, y as superviseChildServer } from "./server-expo-eQfOdydb.mjs";
|
|
7
7
|
import { join } from "node:path";
|
|
8
8
|
import { LOG_ROTATE_BYTES } from "@stim-cli/core";
|
|
9
9
|
//#region src/supervisor/server-command.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { o as cancellableSleep, t as getExecutor } from "./exec-VFRpu1iA.mjs";
|
|
2
2
|
import { n as stripAnsi, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
3
|
-
import { J as resolveProjectSettings } from "./settings-
|
|
4
|
-
import { C as resolvePackageJson } from "./project-
|
|
3
|
+
import { J as resolveProjectSettings } from "./settings-CosW5X-S.mjs";
|
|
4
|
+
import { C as resolvePackageJson } from "./project-BUu6Is4k.mjs";
|
|
5
5
|
import { r as createNdjsonWriter } from "./ndjson-CgE_o3Dl.mjs";
|
|
6
6
|
import { a as expoMetroStoreEnv, c as registerMetroStore, f as resolveMetroSharedCache, i as expoMetroConfigPath, n as supervisorError, o as metroStoreConfirmedRoot, s as metroStoreRoot } from "./errors-DHm_U5gv.mjs";
|
|
7
7
|
import { accessSync, constants, existsSync, readFileSync } from "node:fs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as throwIfCancelled, l as WorkspaceProcessCleanupError, n as isTimeoutError, t as getExecutor } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import { _ as loadConfig$1, d as getConfigDir, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-
|
|
2
|
+
import { _ as loadConfig$1, d as getConfigDir, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-BktkY_zC.mjs";
|
|
3
3
|
import { c as gitQuiet, l as gitQuietAsync, n as runOperationFileQuiet, o as git, r as childEnvironment, s as gitAsync, t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
|
|
4
4
|
import { accessSync, chmodSync, constants, lstatSync, mkdirSync, mkdtempSync, readdirSync, realpathSync, rmSync, statSync } from "node:fs";
|
|
5
5
|
import { tmpdir } from "node:os";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as layerFile, c as settingEntry, i as SettingsRefusal, n as readScope, o as readSettingsContext, r as requireSetting, s as readSettingsPayload, t as mutateSetting } from "./settings-write-
|
|
1
|
+
import { a as layerFile, c as settingEntry, i as SettingsRefusal, n as readScope, o as readSettingsContext, r as requireSetting, s as readSettingsPayload, t as mutateSetting } from "./settings-write-QjYfSrjF.mjs";
|
|
2
2
|
import { SETTING_SCOPES } from "@stim-cli/core/state";
|
|
3
3
|
import chalk from "chalk";
|
|
4
4
|
//#region src/commands/settings.ts
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { u as withWorkspaceProcessLock } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import { A as writeConfigSettingAsync, O as withConfigLockAsync$1, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-
|
|
2
|
+
import { A as writeConfigSettingAsync, O as withConfigLockAsync$1, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-BktkY_zC.mjs";
|
|
3
3
|
import { a as killOnAbort, i as gitPath } from "./operation-exec-CUZifp6Z.mjs";
|
|
4
|
-
import { B as readCommittedSettings, at as unknownSettingKeys } from "./settings-
|
|
5
|
-
import { r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-
|
|
6
|
-
import { i as stimDesktopInstalledAsync, n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-
|
|
7
|
-
import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-
|
|
4
|
+
import { B as readCommittedSettings, at as unknownSettingKeys } from "./settings-CosW5X-S.mjs";
|
|
5
|
+
import { r as findCommandWorkspaceAsync, t as NO_PROJECT_REFUSAL } from "./project-BUu6Is4k.mjs";
|
|
6
|
+
import { i as stimDesktopInstalledAsync, n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-6Dqp-gjX.mjs";
|
|
7
|
+
import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-BldzVKq0.mjs";
|
|
8
8
|
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
9
9
|
import { join } from "node:path";
|
|
10
10
|
import { configDir } from "@stim-cli/core";
|
|
@@ -717,7 +717,7 @@
|
|
|
717
717
|
"type": "object",
|
|
718
718
|
"properties": {
|
|
719
719
|
"idleShutdownMinutes": {
|
|
720
|
-
"description": "Minutes an owned simulator or emulator stays idle before the workspace supervisor shuts it down; 0 never",
|
|
720
|
+
"description": "Minutes an owned simulator or emulator stays idle before the workspace supervisor, or automatic maintenance when no supervisor runs, shuts it down; 0 never",
|
|
721
721
|
"type": "integer",
|
|
722
722
|
"minimum": 0,
|
|
723
723
|
"default": 30,
|
|
@@ -1419,7 +1419,7 @@
|
|
|
1419
1419
|
"type": "object",
|
|
1420
1420
|
"properties": {
|
|
1421
1421
|
"idleShutdownMinutes": {
|
|
1422
|
-
"description": "Minutes an owned simulator or emulator stays idle before the workspace supervisor shuts it down; 0 never",
|
|
1422
|
+
"description": "Minutes an owned simulator or emulator stays idle before the workspace supervisor, or automatic maintenance when no supervisor runs, shuts it down; 0 never",
|
|
1423
1423
|
"type": "integer",
|
|
1424
1424
|
"minimum": 0,
|
|
1425
1425
|
"default": 30,
|
|
@@ -1817,7 +1817,7 @@
|
|
|
1817
1817
|
}
|
|
1818
1818
|
},
|
|
1819
1819
|
"logMaxMb": {
|
|
1820
|
-
"description": "Machine maintenance log rotation size in MiB",
|
|
1820
|
+
"description": "Machine maintenance and gc log rotation size in MiB",
|
|
1821
1821
|
"type": "number",
|
|
1822
1822
|
"exclusiveMinimum": 0,
|
|
1823
1823
|
"default": 1,
|
|
@@ -1831,7 +1831,7 @@
|
|
|
1831
1831
|
}
|
|
1832
1832
|
},
|
|
1833
1833
|
"logRetentionDays": {
|
|
1834
|
-
"description": "Retention of the rotated machine maintenance
|
|
1834
|
+
"description": "Retention of the rotated machine maintenance and gc logs in days",
|
|
1835
1835
|
"type": "integer",
|
|
1836
1836
|
"minimum": 1,
|
|
1837
1837
|
"default": 30,
|
|
@@ -1931,6 +1931,20 @@
|
|
|
1931
1931
|
"env": "STIM_MAINTENANCE_WORKTREE_CHECK_MINUTES"
|
|
1932
1932
|
}
|
|
1933
1933
|
},
|
|
1934
|
+
"idleCheckMinutes": {
|
|
1935
|
+
"description": "Interval in minutes of the check that shuts down owned simulators and emulators idle for devices.idleShutdownMinutes, also with no dev server running",
|
|
1936
|
+
"type": "integer",
|
|
1937
|
+
"minimum": 1,
|
|
1938
|
+
"default": 5,
|
|
1939
|
+
"x-stim": {
|
|
1940
|
+
"key": "maintenance.idleCheckMinutes",
|
|
1941
|
+
"kind": "number",
|
|
1942
|
+
"scopes": [
|
|
1943
|
+
"machine"
|
|
1944
|
+
],
|
|
1945
|
+
"env": "STIM_MAINTENANCE_IDLE_CHECK_MINUTES"
|
|
1946
|
+
}
|
|
1947
|
+
},
|
|
1934
1948
|
"sweepHours": {
|
|
1935
1949
|
"description": "Age sweep interval in hours; 0 turns the age sweep off",
|
|
1936
1950
|
"type": "integer",
|
|
@@ -1946,9 +1960,9 @@
|
|
|
1946
1960
|
}
|
|
1947
1961
|
},
|
|
1948
1962
|
"olderThanDays": {
|
|
1949
|
-
"description": "
|
|
1963
|
+
"description": "Days unused before the age sweep removes it: workspace build outputs, shared cache entries, parked simulators and emulators, and, with maintenance.removeIdleWorktrees, clean pushed linked worktrees; 0 turns those age removals off",
|
|
1950
1964
|
"type": "integer",
|
|
1951
|
-
"minimum":
|
|
1965
|
+
"minimum": 0,
|
|
1952
1966
|
"default": 7,
|
|
1953
1967
|
"x-stim": {
|
|
1954
1968
|
"key": "maintenance.olderThanDays",
|
|
@@ -2056,6 +2070,19 @@
|
|
|
2056
2070
|
"env": "STIM_MAINTENANCE_REMOVE_FINISHED_WORKTREES"
|
|
2057
2071
|
}
|
|
2058
2072
|
},
|
|
2073
|
+
"removeIdleWorktrees": {
|
|
2074
|
+
"description": "In the age sweep, also remove clean, pushed linked worktrees whose branch is not merged once no Stim command has used them for maintenance.olderThanDays, with their git-ignored files; needs maintenance.removeFinishedWorktrees",
|
|
2075
|
+
"type": "boolean",
|
|
2076
|
+
"default": false,
|
|
2077
|
+
"x-stim": {
|
|
2078
|
+
"key": "maintenance.removeIdleWorktrees",
|
|
2079
|
+
"kind": "boolean",
|
|
2080
|
+
"scopes": [
|
|
2081
|
+
"machine"
|
|
2082
|
+
],
|
|
2083
|
+
"env": "STIM_MAINTENANCE_REMOVE_IDLE_WORKTREES"
|
|
2084
|
+
}
|
|
2085
|
+
},
|
|
2059
2086
|
"workspaceOutputsMaxGb": {
|
|
2060
2087
|
"description": "Workspace build-output cap in GiB; 0 means no cap",
|
|
2061
2088
|
"type": "number",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { D as ownership_claim_exports, S as process_identity_exports, b as operationState, t as getExecutor, y as isTermination } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import { d as getConfigDir } from "./config-
|
|
2
|
+
import { d as getConfigDir } from "./config-BktkY_zC.mjs";
|
|
3
3
|
import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
//#region src/engine/simslim.ts
|
|
@@ -13,7 +13,8 @@ async function reconcileSimSlim(options) {
|
|
|
13
13
|
options.out?.("SimSlim: ios.simslim is on but the `simslim` command is not installed; continuing without it. Run `brew install mobai-app/tap/simslim`.");
|
|
14
14
|
return {
|
|
15
15
|
managed: Boolean(options.previouslyManaged),
|
|
16
|
-
profile: null
|
|
16
|
+
profile: null,
|
|
17
|
+
notInstalled: true
|
|
17
18
|
};
|
|
18
19
|
}
|
|
19
20
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { O as getAvdNameForSerialAsync, j as listAdbDevicesAsync } from "./android-
|
|
4
|
-
import {
|
|
5
|
-
import { y as fileLeaseIo } from "./activity-
|
|
6
|
-
import { f as listAllIosSimsAsync } from "./ios-
|
|
1
|
+
import { r as readWorkspaceState$1 } from "./workspace-state-pUg3_RRA.mjs";
|
|
2
|
+
import { G as projectDeviceSlots, U as parseDeviceSlotKey, p as getProject } from "./config-BktkY_zC.mjs";
|
|
3
|
+
import { O as getAvdNameForSerialAsync, j as listAdbDevicesAsync } from "./android-DTAcRwBC.mjs";
|
|
4
|
+
import { Cn as deviceShellArg } from "./budget-k2mZGvvk.mjs";
|
|
5
|
+
import { y as fileLeaseIo } from "./activity-Lnb_EoRY.mjs";
|
|
6
|
+
import { f as listAllIosSimsAsync } from "./ios-WxpDJ5T1.mjs";
|
|
7
7
|
import { hostedNativeRecords } from "@stim-cli/core/state";
|
|
8
8
|
//#region src/engine/slot-launch.ts
|
|
9
9
|
function launchSlotScope(root, slot = "default") {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as throwIfCancelled, t as getExecutor, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import { d as runCancellationSignal } from "./native-run-
|
|
2
|
+
import { d as runCancellationSignal } from "./native-run-BfIDFKLH.mjs";
|
|
3
3
|
import { existsSync, lstatSync, promises, readdirSync, realpathSync, statSync } from "node:fs";
|
|
4
4
|
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
5
5
|
import { validMacosResourceDestination } from "@stim-cli/core";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as registerStart, c as startDevServer, d as supervisorSignalable, f as tailLines, i as readLogTail, l as startFacts, n as liveSupervisor, o as resolveWorkspaceMetroPort, p as wantsExpoOwnTunnel, r as parseWait, s as startCommand, t as failureEvidence, u as supervisorEntry } from "./start-
|
|
1
|
+
import { a as registerStart, c as startDevServer, d as supervisorSignalable, f as tailLines, i as readLogTail, l as startFacts, n as liveSupervisor, o as resolveWorkspaceMetroPort, p as wantsExpoOwnTunnel, r as parseWait, s as startCommand, t as failureEvidence, u as supervisorEntry } from "./start-_BdJ32cZ.mjs";
|
|
2
2
|
export { startCommand as default, failureEvidence, liveSupervisor, parseWait, readLogTail, registerStart, resolveWorkspaceMetroPort, startDevServer, startFacts, supervisorEntry, supervisorSignalable, tailLines, wantsExpoOwnTunnel };
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { D as ownership_claim_exports, S as process_identity_exports, a as waitForGroupExit, c as throwIfCancelled, d as workspaceProcessLockError, l as WorkspaceProcessCleanupError, o as cancellableSleep, r as groupExitBudgetMs, t as getExecutor, u as withWorkspaceProcessLock, x as withDrainingCancellation } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { E as upsertProject, O as withConfigLockAsync$1, p as getProject, x as releaseMetroPort } from "./config-
|
|
4
|
-
import { _ as stepTimer, l as phaseLine } from "./command-output-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { a as
|
|
9
|
-
import { _ as PORT_INSPECTION_REMEDY, a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, f as signalProcessTree, g as reserveMetroPort, h as isMetroRunning, m as createPortProbe, u as processCwds, v as PortInspectionError } from "./metro-1pJgCX4U.mjs";
|
|
2
|
+
import { S as supervisorLogFile, _ as ensureWorkspaceStorage, i as recordWorkspaceUse, k as workspaceLogsDir$1, l as withWorkspaceStateLockAsync, n as clearWorkspaceStateKeys, r as readWorkspaceState$1, s as updateWorkspaceStateAsync, w as workspaceAgentDeviceDir } from "./workspace-state-pUg3_RRA.mjs";
|
|
3
|
+
import { E as upsertProject, O as withConfigLockAsync$1, p as getProject, x as releaseMetroPort } from "./config-BktkY_zC.mjs";
|
|
4
|
+
import { _ as stepTimer, l as phaseLine } from "./command-output-BF5AR2dL.mjs";
|
|
5
|
+
import { A as metroCommandSettingError, F as ngrokUrlSetting, G as resolveAndroidLayout, H as remoteAndroidSetting, K as resolveCacheProviderConfig, M as metroPortSetting, N as metroTunnelSettingError, W as remoteIosSetting, Y as resolveProjectSettingsAsync, a as SETTING_SHAPE_REMEDY, at as unknownSettingKeys, ct as PUBLIC_METRO_ENV, h as deviceIdleShutdownMinutesSetting, it as tunnelModeSetting, j as metroIdleStopMinutesSetting, k as metroCommandSetting, lt as detectProviders, m as defaultAndroidLayout, p as cacheProviderSettingError, q as resolveIosProjectDir, tt as settingShapeErrors, ut as planMetroReach, z as publicUrlSetting } from "./settings-CosW5X-S.mjs";
|
|
6
|
+
import { E as MODE_EXPO, M as readMetroTunnel, O as clearManagedMetroTunnel, S as readAppJson, T as MODE_COMMAND, c as projectProblem, i as findProjectRoot$1, t as NO_PROJECT_REFUSAL, v as detectIsExpo, w as MODE_BARE, x as readAppConfigText } from "./project-BUu6Is4k.mjs";
|
|
7
|
+
import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-6Dqp-gjX.mjs";
|
|
8
|
+
import { _ as PORT_INSPECTION_REMEDY, a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, f as signalProcessTree, g as reserveMetroPort, h as isMetroRunning, m as createPortProbe, u as processCwds, v as PortInspectionError } from "./metro-CjC10t6E.mjs";
|
|
10
9
|
import { i as levelRank } from "./ndjson-CgE_o3Dl.mjs";
|
|
11
|
-
import {
|
|
12
|
-
import { S as withManagedTunnelLock, _ as startTunnelSequence, b as withManagedRemoteWorktreeLock, g as resolveSupervisorTarget, v as stopTunnel, y as terminateChild } from "./workspaces-
|
|
10
|
+
import { $n as readProjectConfig, Un as runProcessOperation, Vn as exitAfterFlush, ir as remoteCliInvocation, p as stopOwnedMetroForReset, t as budgetGate } from "./budget-k2mZGvvk.mjs";
|
|
11
|
+
import { S as withManagedTunnelLock, _ as startTunnelSequence, b as withManagedRemoteWorktreeLock, g as resolveSupervisorTarget, v as stopTunnel, y as terminateChild } from "./workspaces-g2lhdBXF.mjs";
|
|
13
12
|
import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
|
|
14
13
|
import { n as windowsLauncherArgs } from "./detached-entry-KmieOKgN.mjs";
|
|
15
14
|
import { appendFileSync, closeSync, mkdirSync, openSync, readFileSync } from "node:fs";
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { D as ownership_claim_exports, S as process_identity_exports, l as WorkspaceProcessCleanupError, t as getExecutor } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { E as workspaceDir, d as writeWorkspaceState, k as workspaceLogsDir$1, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-pUg3_RRA.mjs";
|
|
3
3
|
import { t as runOperationFile } from "./operation-exec-CUZifp6Z.mjs";
|
|
4
|
-
import {
|
|
5
|
-
import { c as pidExists } from "./metro-1pJgCX4U.mjs";
|
|
4
|
+
import { c as pidExists } from "./metro-CjC10t6E.mjs";
|
|
6
5
|
import { readFileSync, readlinkSync, rmSync } from "node:fs";
|
|
7
6
|
import { hostname } from "node:os";
|
|
8
7
|
import { join } from "node:path";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { S as process_identity_exports } from "./exec-VFRpu1iA.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-CPSp3mav.mjs";
|
|
2
|
+
import { E as workspaceDir, k as workspaceLogsDir$1, o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-pUg3_RRA.mjs";
|
|
4
3
|
import { existsSync } from "node:fs";
|
|
5
4
|
import { join } from "node:path";
|
|
6
5
|
import { readMacosRecord } from "@stim-cli/core/state";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { P as formatBytes } from "./config-
|
|
2
|
-
import { o as formatLongDuration } from "./command-output-
|
|
3
|
-
import { i as findProjectRoot$1 } from "./project-
|
|
4
|
-
import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-
|
|
1
|
+
import { P as formatBytes } from "./config-BktkY_zC.mjs";
|
|
2
|
+
import { o as formatLongDuration } from "./command-output-BF5AR2dL.mjs";
|
|
3
|
+
import { i as findProjectRoot$1 } from "./project-BUu6Is4k.mjs";
|
|
4
|
+
import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-DbXy5tg8.mjs";
|
|
5
5
|
import { t as readProjectStats } from "./stats-report-n2U5plhk.mjs";
|
|
6
6
|
import { archivedUsage, readArchives } from "@stim-cli/core/state";
|
|
7
7
|
import chalk from "chalk";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as runStatusWatch, r as statusCommand, t as readVolumes } from "./status-
|
|
1
|
+
import { n as runStatusWatch, r as statusCommand, t as readVolumes } from "./status-DQrqodLj.mjs";
|
|
2
2
|
export { statusCommand as default, readVolumes, runStatusWatch };
|