stim 1.18.0 → 1.20.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 +21 -4
- package/dist/{activity-BxnkDZDi.mjs → activity-BrGh9EAI.mjs} +3 -3
- package/dist/{agent-device-usage-output-CZ66YA4T.mjs → agent-device-usage-output-DVyv_hWj.mjs} +7 -7
- package/dist/android-0vv-OruW.mjs +6 -0
- package/dist/android-Brx6EKvJ.mjs +1258 -0
- package/dist/{android-DC3ZLuw0.mjs → android-BsYNR81W.mjs} +103 -45
- package/dist/{android-CBwCNicO.mjs → android-CK3fpEyZ.mjs} +2 -2
- package/dist/{android-cas-BBFyr9CA.mjs → android-cas-DCAuXryb.mjs} +9 -5
- package/dist/android-cas-compiler.mjs +1 -1
- package/dist/api-run.mjs +159 -8
- package/dist/{api-D0VtFhqk.mjs → api-zuX3ynYN.mjs} +9 -7
- package/dist/api.d.mts +104 -4
- package/dist/api.mjs +1 -1
- package/dist/{app-install-D-PUENug.mjs → app-install-0LgaQRT7.mjs} +39 -18
- package/dist/artifact-CnC0mfov.mjs +807 -0
- package/dist/artifact-DClXJNWx.mjs +772 -0
- package/dist/artifact-lifecycle-DzPpBYvK.mjs +30 -0
- package/dist/{web-DTU0uiWj.mjs → browser-web-CzBmhmgs.mjs} +136 -174
- package/dist/{budget-DIhL2BKx.mjs → budget-BONq9vXY.mjs} +3096 -3244
- package/dist/build-BixRI6sB.mjs +462 -0
- package/dist/build-plan-CP0tckNU.mjs +553 -0
- package/dist/{cache-manifest-BI7ozfmH.mjs → cache-manifest-qA3dT2x2.mjs} +1 -1
- package/dist/cache-manifest.mjs +1 -1
- package/dist/ccache-CjHQ5F8g.mjs +142 -0
- package/dist/{chrome-DJnmnS5q.mjs → chrome-Dp2lMLBe.mjs} +1 -1
- package/dist/{cli-DNJMwADx.mjs → cli-B2R8wH1F.mjs} +20 -20
- package/dist/cli.mjs +1 -1
- package/dist/{client-DzhapoMB.mjs → client-BLy1Pw2V.mjs} +172 -165
- package/dist/collector-run.d.mts +10 -0
- package/dist/collector-run.mjs +7 -7
- package/dist/{command-output-CBtzyIgF.mjs → command-output-BjPN99ZB.mjs} +2 -2
- package/dist/{config-CgYMahz7.mjs → config-D0LhTY3S.mjs} +13 -13
- package/dist/{created-devices-DKbeWsiK.mjs → created-devices-HU_DAb_Q.mjs} +7 -6
- package/dist/{dependency-state-xKoOypBm.mjs → dependency-state-B2m8eqsS.mjs} +2 -2
- package/dist/{detached-entry-BLfcgc4O.mjs → detached-entry-BXq4fIl-.mjs} +1 -1
- package/dist/{dev-client-CLnIH02x.mjs → dev-client-ClATaJoH.mjs} +2 -2
- package/dist/{device-D7oCHGWi.mjs → device-B7lsC0K1.mjs} +8 -8
- package/dist/device-DVCwAFlX.mjs +727 -0
- package/dist/{device-capacity-EUOOYr8T.mjs → device-capacity-Ca_ke1LE.mjs} +25 -15
- package/dist/device-host-worker.mjs +38 -18
- package/dist/{device-ios-6MewKKnc.mjs → device-ios-CRUqPxKw.mjs} +12 -11
- package/dist/{device-lease-Co-EwifR.mjs → device-lease-DHOBXGgS.mjs} +135 -22
- package/dist/{device-lease-run-w1xhCqIW.mjs → device-lease-run-CvDeHTkG.mjs} +4 -4
- package/dist/{device-pool-F5WvRPtD.mjs → device-pool-L2-5GxMy.mjs} +3 -3
- package/dist/{device-remote-tHbd1fKy.mjs → device-remote-Bmg42063.mjs} +17 -69
- package/dist/doctor-C2MSuMMg.mjs +515 -0
- package/dist/{doctor-B9ckYUoU.mjs → doctor-DPAqhVCK.mjs} +334 -721
- package/dist/doctor-watchman-CB4NnVZm.mjs +260 -0
- package/dist/{simslim-EHBQ2R4G.mjs → eas-build-Dw_ec2Km.mjs} +6 -152
- package/dist/{stim-installations-aR_WsNOA.mjs → eas-session-ledger-DZlC-Fq3.mjs} +57 -4
- package/dist/{error-diagnostics-BRXOqDzG.mjs → error-diagnostics-Du7I_GuY.mjs} +17 -12
- package/dist/errors-DzkMYh8Q.mjs +205 -0
- package/dist/{exec-DWhCZDGm.mjs → exec-B81Qodjn.mjs} +69 -15
- package/dist/{gc-Dh6mXOKC.mjs → gc-PWp34zGb.mjs} +23 -22
- package/dist/{gradle-C6GKnunQ.mjs → gradle-C2OEKCCI.mjs} +50 -125
- package/dist/{guide-tm6igAaa.mjs → guide-Dai9lphv.mjs} +862 -538
- package/dist/{hosted-android-Bv285t_t.mjs → hosted-android-DQ-Agsd8.mjs} +5 -5
- package/dist/{hosted-client-C-rMtppF.mjs → hosted-client-Io01s5By.mjs} +9 -3
- package/dist/{hosted-ios-D5mNmtj4.mjs → hosted-ios-DIxFnYp-.mjs} +3 -3
- package/dist/{hosted-logs-DN8Iz4mJ.mjs → hosted-logs-DP-ABU_M.mjs} +8 -8
- package/dist/{hosted-macos-B-wEjlwG.mjs → hosted-macos-Aziw9T_9.mjs} +7 -6
- package/dist/{hosted-native-DeeOG8xZ.mjs → hosted-native-BdAQi21M.mjs} +23 -16
- package/dist/{idle-shutdown-jjtxAn5C.mjs → idle-shutdown-DdMqoSUB.mjs} +7 -7
- package/dist/ios-BZ9dg2Fr.mjs +9 -0
- package/dist/{ios-B3SbOWdw.mjs → ios-CXLIUxXJ.mjs} +180 -24
- package/dist/ios-CZuv6gRv.mjs +1112 -0
- package/dist/{ios-Bvbf0SGY.mjs → ios-VGvNdsv2.mjs} +1 -1
- package/dist/{ios-device-Bn7jWDB1.mjs → ios-device-B1B14xND.mjs} +1 -1
- package/dist/{ios-device-vOaByMhw.mjs → ios-device-BreZOpM0.mjs} +3 -3
- package/dist/ios-project-B9drt_aY.mjs +197 -0
- package/dist/{ios-state-B2pES6Vs.mjs → ios-state-CjrL2qv-.mjs} +1 -1
- package/dist/js-swap-C8icNYIY.mjs +432 -0
- package/dist/launch-DxH0THLP.mjs +745 -0
- package/dist/launch-YrbqaIFj.mjs +1530 -0
- package/dist/{launch-verify-hskNcWkZ.mjs → launch-verify-BzRdbuO1.mjs} +26 -7
- package/dist/{logs-1Ylc1Ri6.mjs → logs-DHaRNfg7.mjs} +11 -11
- package/dist/macos-C0iljhsN.mjs +2 -0
- package/dist/{macos-DF6C7wUU.mjs → macos-V_3Ui7g4.mjs} +125 -155
- package/dist/macos-run.mjs +1 -1
- package/dist/maintenance-run.mjs +13 -10
- package/dist/{metro-Dh8T4Ytd.mjs → metro-D_j9sN-B.mjs} +209 -43
- package/dist/{metro-gateway-CEUw9RMH.mjs → metro-gateway-BBJldOdi.mjs} +2 -2
- package/dist/miss-reason-BPAzZS0r.mjs +238 -0
- package/dist/{named-ports-BFIz1Shz.mjs → named-ports-C2lvoPsb.mjs} +12 -5
- package/dist/native-android-lHzaew7r.mjs +226 -0
- package/dist/native-gradle-inputs-BQnIdAlL.mjs +356 -0
- package/dist/{native-runtime-D_603JiC.mjs → native-runtime-BRmWL7ru.mjs} +9 -8
- package/dist/native-xcode-inputs-eutS19jU.mjs +307 -0
- package/dist/native-xcode-ios-DP3cHLwu.mjs +434 -0
- package/dist/{ndjson-LGZAMsqa.mjs → ndjson-GOnbyvso.mjs} +6 -6
- package/dist/offload-worker.d.mts +12 -6
- package/dist/offload-worker.mjs +409 -73
- package/dist/{ownership-D6Se7gg_.mjs → ownership-DXzMMSx6.mjs} +2 -2
- package/dist/{placement-log-BcPhRwR4.mjs → placement-log-reFbjqEr.mjs} +7 -3
- package/dist/plan-BDk2AeY_.mjs +260 -0
- package/dist/plan-placement-D_YYlE6N.mjs +73 -0
- package/dist/{ports-BLTtfBq-.mjs → ports-jzvAJXXL.mjs} +3 -3
- package/dist/{prebuild-juCyreaR.mjs → prebuild-Bw44QxVh.mjs} +4 -4
- package/dist/{preview-D5V07Nrl.mjs → preview-BaBJ72Al.mjs} +51 -34
- package/dist/project-B8_duAzW.mjs +1067 -0
- package/dist/project-plan-BPwbLwQu.mjs +10 -0
- package/dist/{pull-request-u4vp7zmK.mjs → pull-request-vOhLNmIb.mjs} +1 -1
- package/dist/pull-requests.mjs +1 -1
- package/dist/react-native-android-chm1DMlA.mjs +921 -0
- package/dist/react-native-build-oAw6gQeW.mjs +239 -0
- package/dist/react-native-doctor-DYXoh-6I.mjs +78 -0
- package/dist/react-native-ios-SCTK_CT5.mjs +595 -0
- package/dist/{recordings-BAWltsVt.mjs → recordings-Bk-VivUV.mjs} +1 -1
- package/dist/{reload-DvyWzVjJ.mjs → reload-D34GkY78.mjs} +17 -14
- package/dist/remote-BU9UyhCJ.mjs +192 -0
- package/dist/{remote-cache-BGg7aGIZ.mjs → remote-cache-Bsts6f6Y.mjs} +5 -5
- package/dist/result-BDoRk1k3.mjs +186 -0
- package/dist/{run-vhtDgpHO.mjs → run-qvff78hv.mjs} +3 -3
- package/dist/{server-bare-B9E7S1aR.mjs → server-bare-dWjAarki.mjs} +6 -6
- package/dist/server-command-7XIKlWtO.mjs +69 -0
- package/dist/{server-expo-DoBHhuzK.mjs → server-expo-CsYu2aKL.mjs} +107 -82
- package/dist/server-expo-DV43vep4.mjs +2 -0
- package/dist/settings-Bbztm4oV.mjs +1503 -0
- package/dist/{settings-Byp2AQ_E.mjs → settings-CT3E71-i.mjs} +6 -7
- package/dist/{state-lKh8shBp.d.mts → settings-vk3mJGSm.d.mts} +4 -2
- package/dist/settings.schema.json +156 -6
- package/dist/simslim-ChMfe8rg.mjs +149 -0
- package/dist/{slot-launch-C1nqh4mu.mjs → slot-launch-B9hn96wd.mjs} +6 -6
- package/dist/{stage-g_WqWeaE.mjs → stage-BNKKdDNc.mjs} +6 -3
- package/dist/start-CbQCSnXQ.mjs +2 -0
- package/dist/{start-D-IeOyoK.mjs → start-CdvcTaXr.mjs} +113 -77
- package/dist/{state-xnqpx3AD.mjs → state-Boo0IMJq.mjs} +4 -2
- package/dist/{state-BG-aAk4k.mjs → state-DI84A-uu.mjs} +29 -10
- package/dist/{stats-DY6ekz8F.mjs → stats-BIIDrjA8.mjs} +6 -6
- package/dist/{status-BEeL6IKz.mjs → status-BDGHwkCs.mjs} +3 -1
- package/dist/{status-DCjZeE-K.mjs → status-DARMkc9q.mjs} +80 -294
- package/dist/status-watch-DvmI3SmN.mjs +296 -0
- package/dist/{stim-desktop-Behws_fi.mjs → stim-desktop-8GQX2OV8.mjs} +1 -1
- package/dist/{stop-DIJtD2GL.mjs → stop-CCZS-C9m.mjs} +2 -2
- package/dist/stop-WQPQHLuy.mjs +72 -0
- package/dist/{stop-BTjs3xbc.mjs → stop-iNemHsJC.mjs} +81 -33
- package/dist/supervisor-run.d.mts +7 -2
- package/dist/supervisor-run.mjs +32 -20
- package/dist/{support-Bwvbrq5-.mjs → support-CnE_SIjt.mjs} +17 -7
- package/dist/{support-BaayeYCf.mjs → support-DCco5fut.mjs} +61 -8
- package/dist/swiftpm-macos-afeNUExW.mjs +119 -0
- package/dist/{native-run-B06FkmZx.mjs → tailnet-CoJUb2tB.mjs} +113 -6
- package/dist/toolchain-BIupIro1.mjs +2 -0
- package/dist/{toolchain-Bnyd_K3A.mjs → toolchain-DqyDXs30.mjs} +225 -315
- package/dist/{trigger-CJMhwXe8.mjs → trigger-C0MWBi8O.mjs} +3 -3
- package/dist/trigger-SHLOWJ4O.mjs +2 -0
- package/dist/{warm-progress-CjB-MP6H.mjs → warm-progress-C3ASD6z5.mjs} +134 -37
- package/dist/{status-Dcr0Qexd.mjs → watchman-CQl51YZu.mjs} +75 -7
- package/dist/web-B3eldHFH.mjs +123 -0
- package/dist/web-BLXpOe6b.mjs +2 -0
- package/dist/web-run.mjs +10 -10
- package/dist/{workspace-state-C59dqG-Z.mjs → workspace-state-CSIFuuDa.mjs} +33 -33
- package/dist/{workspaces-xXItD8Dj.mjs → workspaces-D2xSHBDY.mjs} +1297 -1211
- package/dist/{worktree-BSYlofkq.mjs → worktree-BxDqaTev.mjs} +102 -63
- package/dist/worktree-q7_OZNY0.mjs +2 -0
- package/package.json +8 -6
- package/shim/bundle-response.cjs +2 -1
- package/shim/bundle-response.d.cts +1 -1
- package/shim/expo-metro-config.cjs +1 -1
- package/shim/native-android.gradle +101 -0
- package/dist/android-BKA16DTf.mjs +0 -4
- package/dist/android-BvwuMUJ9.mjs +0 -3572
- package/dist/guide-status-Bhf9SJXc.mjs +0 -125
- package/dist/ios-CPdkoKaa.mjs +0 -3953
- package/dist/ios-DNpdygiv.mjs +0 -7
- package/dist/macos-Ck7OBMNY.mjs +0 -2
- package/dist/metro-store-BAHFcJm6.mjs +0 -106
- package/dist/plan-placement-CtxkCO54.mjs +0 -1859
- package/dist/project-C3ChRLZy.mjs +0 -212
- package/dist/projects-DD7dBTCj.mjs +0 -92
- package/dist/server-expo-Db9HBUoa.mjs +0 -2
- package/dist/settings-CQyMElEP.mjs +0 -701
- package/dist/start-NTc1Ifqs.mjs +0 -2
- package/dist/stop-BGhKMOuH.mjs +0 -48
- package/dist/trigger-DWAq9hkw.mjs +0 -2
- package/dist/web-B6_bFDn7.mjs +0 -2
- package/dist/worktree-BJfnU6r5.mjs +0 -2
- package/dist/worktree-CsKYexJM.mjs +0 -753
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { D as withConfigLock$1, O as writeConfigSetting, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-
|
|
5
|
-
import {
|
|
6
|
-
import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-BAWltsVt.mjs";
|
|
1
|
+
import { D as withConfigLock$1, O as writeConfigSetting, _ as loadConfig$1, f as getConfigPath$1, h as getRepoSettings, m as getProjectSettings } from "./config-D0LhTY3S.mjs";
|
|
2
|
+
import { Et as repoRoot, R as readCommittedSettings, mt as gitCommonDir, nt as unknownSettingKeys } from "./settings-Bbztm4oV.mjs";
|
|
3
|
+
import { n as findCommandWorkspace, t as NO_PROJECT_REFUSAL } from "./project-B8_duAzW.mjs";
|
|
4
|
+
import { n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-8GQX2OV8.mjs";
|
|
5
|
+
import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-Bk-VivUV.mjs";
|
|
7
6
|
import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
8
7
|
import { join } from "node:path";
|
|
9
8
|
import { SETTINGS, SETTING_SCOPES, coerceSettingText, isJsonObject, isSensitiveReference, settingDefinition, settingValueError } from "@stim-cli/core/state";
|
|
@@ -349,7 +348,7 @@ function registerSettings(program, io = CONSOLE, env = process.env) {
|
|
|
349
348
|
const setting = requireSetting(key);
|
|
350
349
|
const scope = readScope(opts.scope, setting);
|
|
351
350
|
const value = parseSettingValue(setting, raw);
|
|
352
|
-
if (setting.sensitive && scope === "committed" && !isSensitiveReference(value)) throw new Refusal("STIM_BAD_ARG", `${key} is sensitive, so a committed .stim.json takes only an env: or file: reference, never the secret.`, `Set the secret with --scope workspace or --scope repo, or commit a reference such as env:MY_KEYSTORE_PASSWORD.`);
|
|
351
|
+
if (setting.sensitive && scope === "committed" && !isSensitiveReference(value)) throw new Refusal("STIM_BAD_ARG", `${key} is sensitive, so a committed .stim.json takes only an env: or file: reference, never the secret.`, `Set the secret with --scope workspace or --scope repo, which store it in ${getConfigPath$1()}, readable only by you, or commit a reference such as env:MY_KEYSTORE_PASSWORD.`);
|
|
353
352
|
const context = readContext(env, io.note);
|
|
354
353
|
const file = requireLayer(context, scope, setting);
|
|
355
354
|
const recording = setting.key === "recording.enabled" ? recordingLayers() : null;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import "
|
|
1
|
+
import "./ndjson-Du3j0AQ9.mjs";
|
|
2
|
+
import { SettingsObject, WebViewport } from "@stim-cli/core/state";
|
|
3
|
+
import "@stim-cli/cache";
|
|
2
4
|
import { ProcessRecord } from "@stim-cli/core/process-identity";
|
|
3
5
|
//#region src/supervisor/state.d.ts
|
|
4
6
|
declare const MODE_BARE = "bare-inproc";
|
|
@@ -8,4 +10,4 @@ declare function clearExpoMetroTunnel(root: string): void;
|
|
|
8
10
|
declare function writePidFile(root: string, pid: number): string;
|
|
9
11
|
declare function readPidFile(root: string): number | null;
|
|
10
12
|
//#endregion
|
|
11
|
-
export {
|
|
13
|
+
export { clearWorkspaceSupervisor as a, clearExpoMetroTunnel as i, MODE_BARE as n, readPidFile as o, MODE_EXPO as r, writePidFile as s, SettingsObject as t };
|
|
@@ -274,8 +274,20 @@
|
|
|
274
274
|
]
|
|
275
275
|
}
|
|
276
276
|
},
|
|
277
|
+
"scheme": {
|
|
278
|
+
"description": "Shared Xcode scheme to build when the workspace has several",
|
|
279
|
+
"type": "string",
|
|
280
|
+
"x-stim": {
|
|
281
|
+
"key": "ios.scheme",
|
|
282
|
+
"kind": "string",
|
|
283
|
+
"scopes": [
|
|
284
|
+
"workspace",
|
|
285
|
+
"committed"
|
|
286
|
+
]
|
|
287
|
+
}
|
|
288
|
+
},
|
|
277
289
|
"remote": {
|
|
278
|
-
"description": "Default iOS remote target: eas, proxy, or an approved Mac in remote.machines; auto places on an approved Mac when this Mac is full or busy",
|
|
290
|
+
"description": "Default iOS remote target: eas, proxy, or an approved Mac in remote.machines; auto places on an approved Mac when this Mac is full or busy; local runs here, overriding a lower layer",
|
|
279
291
|
"type": "string",
|
|
280
292
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9.-]*(?::(?!0+$)(?:[0-5]?[0-9]{1,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$",
|
|
281
293
|
"x-stim": {
|
|
@@ -289,6 +301,20 @@
|
|
|
289
301
|
]
|
|
290
302
|
}
|
|
291
303
|
},
|
|
304
|
+
"projectPath": {
|
|
305
|
+
"description": "Directory under the app that holds a bare React Native app's Xcode project and Podfile",
|
|
306
|
+
"type": "string",
|
|
307
|
+
"default": "ios",
|
|
308
|
+
"x-stim": {
|
|
309
|
+
"key": "ios.projectPath",
|
|
310
|
+
"kind": "path",
|
|
311
|
+
"scopes": [
|
|
312
|
+
"workspace",
|
|
313
|
+
"committed"
|
|
314
|
+
],
|
|
315
|
+
"relative": true
|
|
316
|
+
}
|
|
317
|
+
},
|
|
292
318
|
"simslimProfile": {
|
|
293
319
|
"description": "SimSlim JSON profile under the app",
|
|
294
320
|
"type": "string",
|
|
@@ -367,6 +393,7 @@
|
|
|
367
393
|
"deviceProfile": {
|
|
368
394
|
"description": "avdmanager hardware profile id for new owned AVDs",
|
|
369
395
|
"type": "string",
|
|
396
|
+
"pattern": "^[A-Za-z0-9 ._()-]*$",
|
|
370
397
|
"default": "pixel_6",
|
|
371
398
|
"x-stim": {
|
|
372
399
|
"key": "android.deviceProfile",
|
|
@@ -422,6 +449,34 @@
|
|
|
422
449
|
]
|
|
423
450
|
}
|
|
424
451
|
},
|
|
452
|
+
"gradleRoot": {
|
|
453
|
+
"description": "Directory relative to the app holding gradlew and settings.gradle; may be outside the app but not the repository",
|
|
454
|
+
"type": "string",
|
|
455
|
+
"default": "android",
|
|
456
|
+
"x-stim": {
|
|
457
|
+
"key": "android.gradleRoot",
|
|
458
|
+
"kind": "path",
|
|
459
|
+
"scopes": [
|
|
460
|
+
"workspace",
|
|
461
|
+
"committed"
|
|
462
|
+
],
|
|
463
|
+
"relative": true
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
"module": {
|
|
467
|
+
"description": "The app's Gradle project path, such as :app",
|
|
468
|
+
"type": "string",
|
|
469
|
+
"pattern": "^(:(?!\\.\\.?(?::|$))[A-Za-z0-9._-]+)+$",
|
|
470
|
+
"default": ":app",
|
|
471
|
+
"x-stim": {
|
|
472
|
+
"key": "android.module",
|
|
473
|
+
"kind": "string",
|
|
474
|
+
"scopes": [
|
|
475
|
+
"workspace",
|
|
476
|
+
"committed"
|
|
477
|
+
]
|
|
478
|
+
}
|
|
479
|
+
},
|
|
425
480
|
"variant": {
|
|
426
481
|
"description": "Gradle build variant",
|
|
427
482
|
"type": "string",
|
|
@@ -435,6 +490,19 @@
|
|
|
435
490
|
]
|
|
436
491
|
}
|
|
437
492
|
},
|
|
493
|
+
"offloadInputs": {
|
|
494
|
+
"description": "Native Gradle source sufficiency, exact ignored inputs and generated output directories for build workers",
|
|
495
|
+
"type": "object",
|
|
496
|
+
"x-stim": {
|
|
497
|
+
"key": "android.offloadInputs",
|
|
498
|
+
"kind": "object",
|
|
499
|
+
"scopes": [
|
|
500
|
+
"workspace",
|
|
501
|
+
"repo",
|
|
502
|
+
"committed"
|
|
503
|
+
]
|
|
504
|
+
}
|
|
505
|
+
},
|
|
438
506
|
"keystore": {
|
|
439
507
|
"description": "Keystore a re-packed release APK is signed with",
|
|
440
508
|
"type": "string",
|
|
@@ -464,7 +532,7 @@
|
|
|
464
532
|
}
|
|
465
533
|
},
|
|
466
534
|
"remote": {
|
|
467
|
-
"description": "Default Android remote target: eas, proxy, or an approved Mac in remote.machines; auto places on an approved Mac when this Mac is full or busy",
|
|
535
|
+
"description": "Default Android remote target: eas, proxy, or an approved Mac in remote.machines; auto places on an approved Mac when this Mac is full or busy; local runs here, overriding a lower layer",
|
|
468
536
|
"type": "string",
|
|
469
537
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9.-]*(?::(?!0+$)(?:[0-5]?[0-9]{1,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$",
|
|
470
538
|
"x-stim": {
|
|
@@ -506,6 +574,21 @@
|
|
|
506
574
|
]
|
|
507
575
|
}
|
|
508
576
|
},
|
|
577
|
+
"command": {
|
|
578
|
+
"description": "Command that starts this project's dev server, as an argv array run from the app directory; {port} is replaced with the reserved Metro port",
|
|
579
|
+
"type": "array",
|
|
580
|
+
"items": {
|
|
581
|
+
"type": "string"
|
|
582
|
+
},
|
|
583
|
+
"x-stim": {
|
|
584
|
+
"key": "metro.command",
|
|
585
|
+
"kind": "strings",
|
|
586
|
+
"scopes": [
|
|
587
|
+
"workspace",
|
|
588
|
+
"committed"
|
|
589
|
+
]
|
|
590
|
+
}
|
|
591
|
+
},
|
|
509
592
|
"ngrokUrl": {
|
|
510
593
|
"description": "Stable ngrok URL for the managed tunnel",
|
|
511
594
|
"type": "string",
|
|
@@ -874,6 +957,27 @@
|
|
|
874
957
|
},
|
|
875
958
|
"additionalProperties": false
|
|
876
959
|
},
|
|
960
|
+
"remote": {
|
|
961
|
+
"type": "object",
|
|
962
|
+
"properties": {
|
|
963
|
+
"easFallback": {
|
|
964
|
+
"description": "When ios.remote or android.remote is auto, this Mac is at its concurrency.maxDevices cap and no Mac in remote.machines takes the run, run the simulator or emulator on a billed EAS Simulator instead of waiting or refusing, when eas-cli can",
|
|
965
|
+
"type": "boolean",
|
|
966
|
+
"default": false,
|
|
967
|
+
"x-stim": {
|
|
968
|
+
"key": "remote.easFallback",
|
|
969
|
+
"kind": "boolean",
|
|
970
|
+
"scopes": [
|
|
971
|
+
"machine",
|
|
972
|
+
"workspace",
|
|
973
|
+
"repo",
|
|
974
|
+
"committed"
|
|
975
|
+
]
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
},
|
|
979
|
+
"additionalProperties": false
|
|
980
|
+
},
|
|
877
981
|
"$schema": {
|
|
878
982
|
"type": "string"
|
|
879
983
|
}
|
|
@@ -1139,7 +1243,7 @@
|
|
|
1139
1243
|
}
|
|
1140
1244
|
},
|
|
1141
1245
|
"remote": {
|
|
1142
|
-
"description": "Default iOS remote target: eas, proxy, or an approved Mac in remote.machines; auto places on an approved Mac when this Mac is full or busy",
|
|
1246
|
+
"description": "Default iOS remote target: eas, proxy, or an approved Mac in remote.machines; auto places on an approved Mac when this Mac is full or busy; local runs here, overriding a lower layer",
|
|
1143
1247
|
"type": "string",
|
|
1144
1248
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9.-]*(?::(?!0+$)(?:[0-5]?[0-9]{1,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$",
|
|
1145
1249
|
"x-stim": {
|
|
@@ -1176,6 +1280,7 @@
|
|
|
1176
1280
|
"deviceProfile": {
|
|
1177
1281
|
"description": "avdmanager hardware profile id for new owned AVDs",
|
|
1178
1282
|
"type": "string",
|
|
1283
|
+
"pattern": "^[A-Za-z0-9 ._()-]*$",
|
|
1179
1284
|
"default": "pixel_6",
|
|
1180
1285
|
"x-stim": {
|
|
1181
1286
|
"key": "android.deviceProfile",
|
|
@@ -1189,7 +1294,7 @@
|
|
|
1189
1294
|
}
|
|
1190
1295
|
},
|
|
1191
1296
|
"remote": {
|
|
1192
|
-
"description": "Default Android remote target: eas, proxy, or an approved Mac in remote.machines; auto places on an approved Mac when this Mac is full or busy",
|
|
1297
|
+
"description": "Default Android remote target: eas, proxy, or an approved Mac in remote.machines; auto places on an approved Mac when this Mac is full or busy; local runs here, overriding a lower layer",
|
|
1193
1298
|
"type": "string",
|
|
1194
1299
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9.-]*(?::(?!0+$)(?:[0-5]?[0-9]{1,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$",
|
|
1195
1300
|
"x-stim": {
|
|
@@ -2051,8 +2156,53 @@
|
|
|
2051
2156
|
]
|
|
2052
2157
|
}
|
|
2053
2158
|
},
|
|
2159
|
+
"buildPoolDisabled": {
|
|
2160
|
+
"description": "Members excluded from this requester's automatic build placement: local or exact remote.machines entries. Explicit placement and running builds are unaffected; at least one local or configured, approved remote member must stay enabled",
|
|
2161
|
+
"type": "array",
|
|
2162
|
+
"items": {
|
|
2163
|
+
"type": "string"
|
|
2164
|
+
},
|
|
2165
|
+
"default": [],
|
|
2166
|
+
"x-stim": {
|
|
2167
|
+
"key": "remote.buildPoolDisabled",
|
|
2168
|
+
"kind": "strings",
|
|
2169
|
+
"scopes": [
|
|
2170
|
+
"machine"
|
|
2171
|
+
]
|
|
2172
|
+
}
|
|
2173
|
+
},
|
|
2174
|
+
"devicePoolDisabled": {
|
|
2175
|
+
"description": "Members excluded from this requester's automatic simulator and emulator placement: local or exact remote.machines entries. Explicit placement and existing sessions are unaffected; at least one local or configured, approved remote member must stay enabled",
|
|
2176
|
+
"type": "array",
|
|
2177
|
+
"items": {
|
|
2178
|
+
"type": "string"
|
|
2179
|
+
},
|
|
2180
|
+
"default": [],
|
|
2181
|
+
"x-stim": {
|
|
2182
|
+
"key": "remote.devicePoolDisabled",
|
|
2183
|
+
"kind": "strings",
|
|
2184
|
+
"scopes": [
|
|
2185
|
+
"machine"
|
|
2186
|
+
]
|
|
2187
|
+
}
|
|
2188
|
+
},
|
|
2189
|
+
"easFallback": {
|
|
2190
|
+
"description": "When ios.remote or android.remote is auto, this Mac is at its concurrency.maxDevices cap and no Mac in remote.machines takes the run, run the simulator or emulator on a billed EAS Simulator instead of waiting or refusing, when eas-cli can",
|
|
2191
|
+
"type": "boolean",
|
|
2192
|
+
"default": false,
|
|
2193
|
+
"x-stim": {
|
|
2194
|
+
"key": "remote.easFallback",
|
|
2195
|
+
"kind": "boolean",
|
|
2196
|
+
"scopes": [
|
|
2197
|
+
"machine",
|
|
2198
|
+
"workspace",
|
|
2199
|
+
"repo",
|
|
2200
|
+
"committed"
|
|
2201
|
+
]
|
|
2202
|
+
}
|
|
2203
|
+
},
|
|
2054
2204
|
"build": {
|
|
2055
|
-
"description": "Build placement: auto follows remote.buildMode
|
|
2205
|
+
"description": "Build placement: auto follows remote.buildMode within enabled automatic pool members; local always builds here; a name in remote.machines requires that remote Mac without fallback. The ios, android and macos --remote-build flag overrides this setting and its environment override",
|
|
2056
2206
|
"type": "string",
|
|
2057
2207
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9.-]*(?::(?!0+$)(?:[0-5]?[0-9]{1,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$",
|
|
2058
2208
|
"default": "auto",
|
|
@@ -2066,7 +2216,7 @@
|
|
|
2066
2216
|
}
|
|
2067
2217
|
},
|
|
2068
2218
|
"buildMode": {
|
|
2069
|
-
"description": "When remote.build is auto, where iOS simulator Debug, Android emulator debug and macOS SwiftPM Debug builds run: auto builds here while this Mac has a free concurrency.maxBuilds slot and its load is under server.maxLoadPerCore, and otherwise builds on a less loaded Mac in remote.machines; force builds on
|
|
2219
|
+
"description": "When remote.build is auto, where iOS simulator Debug, Android emulator debug and macOS SwiftPM Debug builds run: auto builds here while this Mac has a free concurrency.maxBuilds slot and its load is under server.maxLoadPerCore, and otherwise builds on a less loaded Mac in remote.machines; force builds on an enabled remote Mac whenever one can take the build; off builds here when local is enabled in remote.buildPoolDisabled",
|
|
2070
2220
|
"type": "string",
|
|
2071
2221
|
"enum": [
|
|
2072
2222
|
"auto",
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { n as ownership_claim_exports, t as process_identity_exports } from "./process-identity-Biv3arCO.mjs";
|
|
2
|
+
import { t as getExecutor } from "./exec-B81Qodjn.mjs";
|
|
3
|
+
import { d as getConfigDir } from "./config-D0LhTY3S.mjs";
|
|
4
|
+
import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
//#region src/engine/simslim.ts
|
|
7
|
+
async function reconcileSimSlim({ udid, profile, previouslyManaged = false, out = () => {}, spawn, timeoutMs = 72e4, cleanupMs = 1e4 }) {
|
|
8
|
+
if (!profile && !previouslyManaged) return {
|
|
9
|
+
managed: false,
|
|
10
|
+
profile: null
|
|
11
|
+
};
|
|
12
|
+
const action = profile ? "on" : "off";
|
|
13
|
+
const args = profile ? [
|
|
14
|
+
"on",
|
|
15
|
+
udid,
|
|
16
|
+
"--profile",
|
|
17
|
+
profile
|
|
18
|
+
] : ["off", udid];
|
|
19
|
+
const lines = [];
|
|
20
|
+
const onLine = (raw) => {
|
|
21
|
+
const line = stripAnsi(raw).trim();
|
|
22
|
+
if (!line) return;
|
|
23
|
+
lines.push(line);
|
|
24
|
+
if (lines.length > 20) lines.shift();
|
|
25
|
+
out(`SimSlim: ${line}`);
|
|
26
|
+
};
|
|
27
|
+
const stdout = createLineReader(onLine);
|
|
28
|
+
const stderr = createLineReader(onLine);
|
|
29
|
+
const root = join(getConfigDir(), "simslim-locks", `${encodeURIComponent(udid.toLowerCase())}.lock`);
|
|
30
|
+
const label = `SimSlim for ${udid}`;
|
|
31
|
+
const attempt = (0, ownership_claim_exports.tryAcquireClaim)({
|
|
32
|
+
root,
|
|
33
|
+
mode: "exclusive",
|
|
34
|
+
label
|
|
35
|
+
});
|
|
36
|
+
if (attempt.pending) (0, ownership_claim_exports.releaseClaim)(attempt.pending);
|
|
37
|
+
const claim = attempt.acquired;
|
|
38
|
+
if (!claim) throw new ownership_claim_exports.ClaimRefusedError({
|
|
39
|
+
root,
|
|
40
|
+
claimPath: attempt.held?.path ?? root,
|
|
41
|
+
label,
|
|
42
|
+
reason: "another SimSlim operation is still using this simulator"
|
|
43
|
+
});
|
|
44
|
+
let child;
|
|
45
|
+
let result;
|
|
46
|
+
let identity;
|
|
47
|
+
let cancellation;
|
|
48
|
+
const stopGroup = () => {
|
|
49
|
+
if (child?.pid !== void 0 && identity && (0, process_identity_exports.inspectProcessIdentity)(identity) === "same") try {
|
|
50
|
+
process.kill(-child.pid, "SIGKILL");
|
|
51
|
+
} catch {}
|
|
52
|
+
};
|
|
53
|
+
const cancel = (signal) => {
|
|
54
|
+
cancellation ??= signal;
|
|
55
|
+
stopGroup();
|
|
56
|
+
};
|
|
57
|
+
const onInterrupt = () => cancel("SIGINT");
|
|
58
|
+
const onTerminate = () => cancel("SIGTERM");
|
|
59
|
+
const groupAlive = () => child?.pid !== void 0 && (0, ownership_claim_exports.processGroupAlive)(child.pid);
|
|
60
|
+
const settled = () => result !== void 0 && !groupAlive();
|
|
61
|
+
const waitUntil = async (deadline, cancellable = false) => {
|
|
62
|
+
while (!settled() && Date.now() < deadline) {
|
|
63
|
+
if (cancellable && cancellation) break;
|
|
64
|
+
await new Promise((resolve) => setTimeout(resolve, Math.min(50, deadline - Date.now())));
|
|
65
|
+
}
|
|
66
|
+
return settled();
|
|
67
|
+
};
|
|
68
|
+
process.on("SIGINT", onInterrupt);
|
|
69
|
+
process.on("SIGTERM", onTerminate);
|
|
70
|
+
process.on("exit", stopGroup);
|
|
71
|
+
try {
|
|
72
|
+
(0, ownership_claim_exports.markClaimChildPending)(claim);
|
|
73
|
+
try {
|
|
74
|
+
child = (spawn ?? ((cmd, childArgs, opts) => getExecutor().spawn(cmd, childArgs, opts)))("simslim", args, {
|
|
75
|
+
stdio: [
|
|
76
|
+
"ignore",
|
|
77
|
+
"pipe",
|
|
78
|
+
"pipe"
|
|
79
|
+
],
|
|
80
|
+
detached: true
|
|
81
|
+
});
|
|
82
|
+
} catch (error) {
|
|
83
|
+
throw simslimLaunchError(error);
|
|
84
|
+
}
|
|
85
|
+
child.stdout?.on("data", (chunk) => stdout.push(chunk));
|
|
86
|
+
child.stderr?.on("data", (chunk) => stderr.push(chunk));
|
|
87
|
+
waitForChild(child).then((value) => {
|
|
88
|
+
result = value;
|
|
89
|
+
});
|
|
90
|
+
if (child.pid !== void 0) {
|
|
91
|
+
const captured = (0, process_identity_exports.captureProcessIdentity)(child.pid);
|
|
92
|
+
if (captured.ok) {
|
|
93
|
+
identity = {
|
|
94
|
+
pid: child.pid,
|
|
95
|
+
processToken: captured.token
|
|
96
|
+
};
|
|
97
|
+
try {
|
|
98
|
+
(0, ownership_claim_exports.setClaimChild)(claim, identity);
|
|
99
|
+
} catch {}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const completed = await waitUntil(Date.now() + timeoutMs, true);
|
|
103
|
+
if (cancellation || !completed) {
|
|
104
|
+
stopGroup();
|
|
105
|
+
const stopped = await waitUntil(Date.now() + cleanupMs);
|
|
106
|
+
const detail = lines.length ? ` ${lines.join(" | ")}` : "";
|
|
107
|
+
const recovery = stopped ? "Its process group has stopped. Retry stim ios to reconcile the retained simulator settings." : `Its process group could not be confirmed stopped. The claim remains at ${claim.path}. Inspect the SimSlim process group ${child.pid ?? "unknown"} before retrying. Only when nothing is using it, remove the claim: ${(0, ownership_claim_exports.claimRemoveCommand)(claim.path)}`;
|
|
108
|
+
const message = `SimSlim ${action} ${cancellation ? `interrupted by ${cancellation}` : `exceeded ${Math.round(timeoutMs / 1e3)}s`}. ${recovery}${detail}`;
|
|
109
|
+
if (cancellation) out(message);
|
|
110
|
+
throw Object.assign(new Error(message), { code: cancellation ? "EINTR" : "ETIMEDOUT" });
|
|
111
|
+
}
|
|
112
|
+
} finally {
|
|
113
|
+
if (!child || settled()) (0, ownership_claim_exports.releaseClaim)(claim);
|
|
114
|
+
else {
|
|
115
|
+
child.stdout?.destroy?.();
|
|
116
|
+
child.stderr?.destroy?.();
|
|
117
|
+
child.unref();
|
|
118
|
+
}
|
|
119
|
+
process.off("SIGINT", onInterrupt);
|
|
120
|
+
process.off("SIGTERM", onTerminate);
|
|
121
|
+
process.off("exit", stopGroup);
|
|
122
|
+
if (cancellation) process.exit(cancellation === "SIGINT" ? 130 : 143);
|
|
123
|
+
}
|
|
124
|
+
stdout.flush();
|
|
125
|
+
stderr.flush();
|
|
126
|
+
if (result?.error) throw simslimLaunchError(result.error);
|
|
127
|
+
if (result?.code !== 0) {
|
|
128
|
+
const detail = lines.length ? ` ${lines.join(" | ")}` : "";
|
|
129
|
+
throw new Error(`SimSlim ${action} failed with exit code ${result?.code ?? "unknown"}.${detail}`);
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
managed: Boolean(profile),
|
|
133
|
+
profile: profile ?? null
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
function simslimLaunchError(error) {
|
|
137
|
+
const cause = error;
|
|
138
|
+
if (cause?.code === "ENOENT") return new Error("SimSlim is configured but the `simslim` command is not installed. Run `brew install mobai-app/tap/simslim`.", { cause });
|
|
139
|
+
return new Error(`Could not start SimSlim: ${String(cause?.message || cause)}`, { cause });
|
|
140
|
+
}
|
|
141
|
+
function simslimIsOnPath() {
|
|
142
|
+
try {
|
|
143
|
+
return Boolean(getExecutor().findExecutable("simslim"));
|
|
144
|
+
} catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//#endregion
|
|
149
|
+
export { simslimIsOnPath as n, reconcileSimSlim as t };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { B as parseDeviceSlotKey, H as projectDeviceSlots, p as getProject } from "./config-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { E as getAvdNameForSerial, O as listAdbDevices } from "./android-
|
|
5
|
-
import { d as listAllIosSims } from "./ios-
|
|
6
|
-
import { f as deviceShellArg } from "./app-install-
|
|
1
|
+
import { B as parseDeviceSlotKey, H as projectDeviceSlots, p as getProject } from "./config-D0LhTY3S.mjs";
|
|
2
|
+
import { n as fileLeaseIo } from "./device-lease-DHOBXGgS.mjs";
|
|
3
|
+
import { r as readWorkspaceState$1 } from "./workspace-state-CSIFuuDa.mjs";
|
|
4
|
+
import { E as getAvdNameForSerial, O as listAdbDevices } from "./android-BsYNR81W.mjs";
|
|
5
|
+
import { d as listAllIosSims } from "./ios-CXLIUxXJ.mjs";
|
|
6
|
+
import { f as deviceShellArg } from "./app-install-0LgaQRT7.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,15 +1,18 @@
|
|
|
1
|
-
import { t as getExecutor } from "./exec-
|
|
2
|
-
import { cpSync, existsSync, mkdirSync, readdirSync, realpathSync, rmSync, statSync } from "node:fs";
|
|
1
|
+
import { t as getExecutor } from "./exec-B81Qodjn.mjs";
|
|
2
|
+
import { cpSync, existsSync, lstatSync, mkdirSync, readdirSync, realpathSync, rmSync, statSync } from "node:fs";
|
|
3
3
|
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
4
4
|
import { validMacosResourceDestination } from "@stim-cli/core";
|
|
5
5
|
//#region src/macos/stage.ts
|
|
6
6
|
function validateInfoPlist(root, product, infoPlist) {
|
|
7
|
+
const source = resolve(root, infoPlist);
|
|
8
|
+
const inside = relative(realpathSync(root), realpathSync(source));
|
|
9
|
+
if (!lstatSync(source).isFile() || inside === ".." || inside.startsWith(`..${sep}`) || isAbsolute(inside)) throw new Error("macos.infoPlist must be a regular file inside the project, not a symbolic link. See stim guide macos.");
|
|
7
10
|
const plist = JSON.parse(getExecutor().runFile("plutil", [
|
|
8
11
|
"-convert",
|
|
9
12
|
"json",
|
|
10
13
|
"-o",
|
|
11
14
|
"-",
|
|
12
|
-
|
|
15
|
+
source
|
|
13
16
|
]));
|
|
14
17
|
if (typeof plist.CFBundleIdentifier !== "string" || plist.CFBundleExecutable !== product) throw new Error("macos.infoPlist must name a CFBundleIdentifier and the selected product as CFBundleExecutable.");
|
|
15
18
|
if (plist.CFBundleURLTypes || plist.SUFeedURL) throw new Error("Use a development Info.plist without shared URL schemes or an update feed.");
|
|
@@ -0,0 +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-CdvcTaXr.mjs";
|
|
2
|
+
export { startCommand as default, failureEvidence, liveSupervisor, parseWait, readLogTail, registerStart, resolveWorkspaceMetroPort, startDevServer, startFacts, supervisorEntry, supervisorSignalable, tailLines, wantsExpoOwnTunnel };
|