stim 1.31.0 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/{acquire-artifact-P84h3ssa.mjs → acquire-artifact-CI9fIokp.mjs} +1 -1
  2. package/dist/{act-lcOIEy32.mjs → act-BfChMxcU.mjs} +62 -13
  3. package/dist/{activity-Dw4N_RFe.mjs → activity-yjH7Q3zn.mjs} +1 -1
  4. package/dist/{agent-device-usage-output-Boie2yB-.mjs → agent-device-usage-output-DO412bsG.mjs} +3 -3
  5. package/dist/{android-DhiWSOFU.mjs → android-BNm5A40S.mjs} +29 -29
  6. package/dist/{android-aIuJZoDu.mjs → android-D56S_GX3.mjs} +5 -5
  7. package/dist/api.mjs +21 -21
  8. package/dist/{artifact-ta3xA0c4.mjs → artifact-C8Nvp07y.mjs} +10 -10
  9. package/dist/{artifact-Cr34-Yyy.mjs → artifact-k1x9Jrn0.mjs} +10 -10
  10. package/dist/{auto-placement-DtTRG0rk.mjs → auto-placement--nfdQ9rp.mjs} +5 -5
  11. package/dist/{browser-web-DuULNZrS.mjs → browser-web-6RDAeH0z.mjs} +5 -5
  12. package/dist/{build-BpFFbdXD.mjs → build-VXX_dtl5.mjs} +15 -15
  13. package/dist/{build-plan-DH1rT11x.mjs → build-plan-BK34X2iY.mjs} +4 -4
  14. package/dist/{ccache-DVDO2ocE.mjs → ccache-BrwGIxmV.mjs} +7 -7
  15. package/dist/{cli-C0jjwTuM.mjs → cli-Jc7obreB.mjs} +17 -17
  16. package/dist/cli.mjs +1 -1
  17. package/dist/{client-DhJOvSvh.mjs → client-lDmA-5jx.mjs} +3 -3
  18. package/dist/{command-output-VrXd6qPX.mjs → command-output-CfPW1bKP.mjs} +1 -1
  19. package/dist/{dependencies-DIU-5rnG.mjs → dependencies-DkZ8681S.mjs} +28 -28
  20. package/dist/{dev-client-DeAg0fso.mjs → dev-client-eDZy6RoX.mjs} +2 -2
  21. package/dist/{device-DuNLOlR6.mjs → device-CTozKhU0.mjs} +6 -6
  22. package/dist/{device-C2WsPgFt.mjs → device-CeIikWac.mjs} +8 -8
  23. package/dist/{device-android-BjhH0Ru3.mjs → device-android-zgD9We85.mjs} +3 -3
  24. package/dist/{device-capacity-Du5wBTNJ.mjs → device-capacity-Bki6B-7h.mjs} +3 -3
  25. package/dist/device-host-worker.mjs +7 -7
  26. package/dist/{device-ios-CUYUhSYO.mjs → device-ios-TE5ejeXx.mjs} +3 -3
  27. package/dist/{device-lease-run-CHXQEn-7.mjs → device-lease-run-DeNGjJZM.mjs} +3 -3
  28. package/dist/{device-pool-kUHO7MHO.mjs → device-pool-mjyUYaau.mjs} +2 -2
  29. package/dist/{device-provision-e7bKS7lx.mjs → device-provision-j_B7G0e6.mjs} +6 -6
  30. package/dist/{doctor-hva3sd9f.mjs → doctor-BlrcoQ7B.mjs} +10 -10
  31. package/dist/{doctor-B6kIVgU9.mjs → doctor-CNZuvTSe.mjs} +1 -1
  32. package/dist/{doctor-BGcsAgAV.mjs → doctor-sSLtn-j1.mjs} +11 -11
  33. package/dist/{doctor-watchman-DJY550yz.mjs → doctor-watchman-CCuboyj1.mjs} +2 -2
  34. package/dist/{eas-build-CBFgseh1.mjs → eas-build-CaG-Sfs9.mjs} +2 -2
  35. package/dist/{eas-fallback-DFXdz4d6.mjs → eas-fallback-BpX1lpco.mjs} +2 -2
  36. package/dist/{eas-session-ledger-aFBLTZr2.mjs → eas-session-ledger-B-nTfdfk.mjs} +1 -1
  37. package/dist/{error-diagnostics-CCsq_3uG.mjs → error-diagnostics-q56Im4D8.mjs} +3 -3
  38. package/dist/{gc-DASUa3Z_.mjs → gc-By2Kc-Ek.mjs} +2 -2
  39. package/dist/{gc-B0K4d_PL.mjs → gc-Dv6nb9nf.mjs} +10 -10
  40. package/dist/{guide-Civo5-zV.mjs → guide-CwpsGWTJ.mjs} +71 -22
  41. package/dist/{hosted-android-CH1Sm4wo.mjs → hosted-android-c5nPJA6S.mjs} +3 -3
  42. package/dist/{hosted-client-5ur3YpxY.mjs → hosted-client-Hs-fD4L3.mjs} +2 -2
  43. package/dist/{hosted-logs-BYg4yeti.mjs → hosted-logs-BteXG8rm.mjs} +12 -6
  44. package/dist/{hosted-logs-sync-BPe8xnMu.mjs → hosted-logs-sync-B8bjLEMs.mjs} +4 -4
  45. package/dist/{hosted-macos-BagT0Gn3.mjs → hosted-macos-B4byscei.mjs} +4 -4
  46. package/dist/{hosted-native-kaR4nUHk.mjs → hosted-native-Bh9IJ_t5.mjs} +5 -5
  47. package/dist/{idle-shutdown-BWHQ7mQG.mjs → idle-shutdown-BaeCo4ps.mjs} +3 -3
  48. package/dist/{ios-BKR-Dq46.mjs → ios-D1XKSITX.mjs} +8 -8
  49. package/dist/{ios-DUL68MI5.mjs → ios-D3oK9-O4.mjs} +22 -22
  50. package/dist/{ios-device-Dz8gFZ0K.mjs → ios-device-D7Gi3e1I.mjs} +1 -1
  51. package/dist/{ios-project-Br1tVYWX.mjs → ios-project-DDQlX_jX.mjs} +5 -5
  52. package/dist/{js-swap-BfG8XpyS.mjs → js-swap-C8N5DXHl.mjs} +3 -3
  53. package/dist/{launch-CrGndh8T.mjs → launch-DxpvL6il.mjs} +12 -12
  54. package/dist/{lightened-DZ9Ip0T3.mjs → lightened-Df6II_XI.mjs} +2 -2
  55. package/dist/{logs-DpIKWT3A.mjs → logs-CuWJWF88.mjs} +5 -5
  56. package/dist/{logs-C-hfMsxK.mjs → logs-zv3ge7c6.mjs} +3 -3
  57. package/dist/{macos-DZ9ZSolN.mjs → macos-C6U-4Iip.mjs} +14 -14
  58. package/dist/{macos-DNmKwfDy.mjs → macos-CbRZheLw.mjs} +1 -1
  59. package/dist/maintenance-run.mjs +3 -3
  60. package/dist/{metro-request-RDhyx85c.mjs → metro-request-DODHNXCN.mjs} +7 -1
  61. package/dist/{native-android-DExhFqR6.mjs → native-android-9dVFqvTT.mjs} +10 -10
  62. package/dist/{native-gradle-artifact-inputs-Bcmbdc23.mjs → native-gradle-artifact-inputs-BlY97pt8.mjs} +1 -1
  63. package/dist/{native-runtime-D4qgnjK_.mjs → native-runtime-DQfxW5Au.mjs} +3 -3
  64. package/dist/{native-xcode-inputs-EWma1lXh.mjs → native-xcode-inputs-tDuUvSU8.mjs} +1 -1
  65. package/dist/{native-xcode-ios-Y6rzmWTc.mjs → native-xcode-ios-CG-PD-7g.mjs} +11 -11
  66. package/dist/offload-worker.mjs +13 -13
  67. package/dist/{phone-reverses-Drj5QQCh.mjs → phone-reverses-CnNwdz9A.mjs} +1 -1
  68. package/dist/{placement-log-CFT8SnlS.mjs → placement-log-CRL0IY-k.mjs} +1 -1
  69. package/dist/{plan-placement-DhKCH_wF.mjs → plan-placement-2imvnlWP.mjs} +4 -4
  70. package/dist/{ports-BNtJ5DCj.mjs → ports-CKktj5lV.mjs} +1 -1
  71. package/dist/{prebuild-D0hvmO4j.mjs → prebuild-CyNrUWgV.mjs} +5 -5
  72. package/dist/{project-DCLkDM8C.mjs → project-Crtcbfl0.mjs} +11 -11
  73. package/dist/{react-native-android-Dp7vctEA.mjs → react-native-android-Cabe2YER.mjs} +17 -17
  74. package/dist/{react-native-build-vK2lFYfN.mjs → react-native-build-DhWBUV_H.mjs} +4 -4
  75. package/dist/{react-native-doctor-BtWzwZHU.mjs → react-native-doctor-D-twmBon.mjs} +4 -4
  76. package/dist/{react-native-ios-DW1Ax3Yv.mjs → react-native-ios-u_ley41B.mjs} +12 -12
  77. package/dist/{reload-B-d7-CsI.mjs → reload-D2TpUlns.mjs} +6 -6
  78. package/dist/{reload-BS_ntVV_.mjs → reload-f9hvEHE9.mjs} +1 -1
  79. package/dist/{remote-DScVlaMz.mjs → remote-BsBAjlD2.mjs} +6 -6
  80. package/dist/{result-Epkl6gyG.mjs → result-EOsWV6sp.mjs} +10 -10
  81. package/dist/{selection-C95m--1_.mjs → selection-C4ZQz_ER.mjs} +1 -1
  82. package/dist/{server-command-B1gDRJB2.mjs → server-command-BMyKtnjH.mjs} +2 -2
  83. package/dist/{server-expo-CP4dURQp.mjs → server-expo-BLxcN2x2.mjs} +1 -1
  84. package/dist/server-expo-DwR3eD-a.mjs +2 -0
  85. package/dist/{settings-CjTRNCi3.mjs → settings-jeS0WmUF.mjs} +2 -2
  86. package/dist/{settings-payload-zf5EnCTg.mjs → settings-payload-CrX933Xi.mjs} +1 -1
  87. package/dist/{settings-write-Fe0K6BeC.mjs → settings-write-DMcT23Kl.mjs} +2 -2
  88. package/dist/settings.schema.json +2 -2
  89. package/dist/{slot-launch-B4MHzVX2.mjs → slot-launch-CSpQcFZw.mjs} +2 -2
  90. package/dist/{stage-DDrnM0CY.mjs → stage-Cf9uSM1a.mjs} +1 -1
  91. package/dist/{start-LSwIFlBv.mjs → start-CLN_r9EG.mjs} +5 -5
  92. package/dist/{start-BXl5tkv8.mjs → start-CquYgzVf.mjs} +1 -1
  93. package/dist/{stats-EgpYD536.mjs → stats-BVEZuSlg.mjs} +3 -3
  94. package/dist/{status-DBMD7ZQT.mjs → status-Bhdy07v0.mjs} +1 -1
  95. package/dist/{status-BLDvhatv.mjs → status-D0ruTmPl.mjs} +12 -12
  96. package/dist/{status-watch-BwG4lJ1q.mjs → status-watch-DSu_hhg6.mjs} +1 -1
  97. package/dist/status-worker.mjs +1 -1
  98. package/dist/{stop-BfNhzvXO.mjs → stop-B616ZyTv.mjs} +2 -2
  99. package/dist/{stop-4SAV_RR8.mjs → stop-RZqER_Ww.mjs} +2 -2
  100. package/dist/{stop-WyrZQuX6.mjs → stop-W4DK8qZq.mjs} +9 -9
  101. package/dist/supervisor-run.mjs +131 -39
  102. package/dist/{support-Cs24xRQa.mjs → support-NxnD8QXd.mjs} +6 -6
  103. package/dist/{support-Cffz6_Ft.mjs → support-S_5nkkzs.mjs} +3 -3
  104. package/dist/{swiftpm-macos-D0CzQtpp.mjs → swiftpm-macos-Gtq9bNQb.mjs} +2 -2
  105. package/dist/{toolchain-BEra9AIX.mjs → toolchain-B2bN8jEo.mjs} +1 -1
  106. package/dist/{toolchain-CGdgD4x4.mjs → toolchain-Bnm8vUCV.mjs} +2 -2
  107. package/dist/{web-BE89ONcc.mjs → web-BdWG8b5_.mjs} +3 -3
  108. package/dist/web-DwuluWJt.mjs +2 -0
  109. package/dist/web-run.mjs +1 -1
  110. package/dist/{workspaces-BNEyJ1B_.mjs → workspaces-C59v9bpD.mjs} +6 -5
  111. package/dist/{worktree-BTrii9e_.mjs → worktree-CinoSsGy.mjs} +10 -10
  112. package/dist/{worktree-DB3Ypdj6.mjs → worktree-K9F50fD_.mjs} +1 -1
  113. package/package.json +7 -7
  114. package/dist/server-expo-D3k9mvP8.mjs +0 -2
  115. package/dist/web-DQPxvFVD.mjs +0 -2
@@ -1,7 +1,7 @@
1
1
  import { C as reportSignal, b as operationState } from "./exec-aULwtNly.mjs";
2
2
  import { M as withDirLock$1 } from "./workspace-state-3bF4TB8P.mjs";
3
3
  import { Q as diagnoseTailscale, Z as diagnoseOutcome, at as parseMachine$1, d as getConfigDir, dt as tailscaleStatusAsync, et as endpoint$1, ft as diagnoseLocalUnreachable, gt as readHostPermissions, ht as unconfirmedKeyFinding, it as outdatedServer, mt as notOnTailnetDiagnosis, ot as reachMachine, pt as diagnosisFinding, st as realIo, tt as findPeer$1, ut as setupRemedy, v as loadConfig$1 } from "./config-D5qNWJEP.mjs";
4
- import { s as cocoapodsInstall } from "./toolchain-CGdgD4x4.mjs";
4
+ import { s as cocoapodsInstall } from "./toolchain-Bnm8vUCV.mjs";
5
5
  import { releaseClaim, tryAcquireClaim } from "@stim-cli/core/ownership-claim";
6
6
  import { mkdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
7
7
  import { hostname } from "node:os";
@@ -1,9 +1,9 @@
1
1
  import { t as getExecutor } from "./exec-aULwtNly.mjs";
2
2
  import { n as METRO_COMMAND_PORT } from "./settings-C6UTYW2K.mjs";
3
- import { T as MODE_COMMAND } from "./project-DCLkDM8C.mjs";
3
+ import { T as MODE_COMMAND } from "./project-Crtcbfl0.mjs";
4
4
  import { f as signalProcessTree } from "./metro-mKHEMO-a.mjs";
5
5
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
6
- import { g as projectNodeLine, p as recordFromLine, v as withProjectNode, y as superviseChildServer } from "./server-expo-CP4dURQp.mjs";
6
+ import { g as projectNodeLine, p as recordFromLine, v as withProjectNode, y as superviseChildServer } from "./server-expo-BLxcN2x2.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-aULwtNly.mjs";
2
2
  import { n as stripAnsi, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
3
3
  import { X as resolveProjectSettings } from "./settings-C6UTYW2K.mjs";
4
- import { C as resolvePackageJson } from "./project-DCLkDM8C.mjs";
4
+ import { C as resolvePackageJson } from "./project-Crtcbfl0.mjs";
5
5
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.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";
@@ -0,0 +1,2 @@
1
+ import { m as startExpoServer } from "./server-expo-BLxcN2x2.mjs";
2
+ export { startExpoServer };
@@ -1,5 +1,5 @@
1
- import { c as readSettingsPayload, l as settingEntry, o as layerFile, s as readSettingsContext, t as SettingsRefusal } from "./settings-payload-zf5EnCTg.mjs";
2
- import { i as unsetReplacedSetting, n as readScope, r as requireSetting, t as mutateSetting } from "./settings-write-Fe0K6BeC.mjs";
1
+ import { c as readSettingsPayload, l as settingEntry, o as layerFile, s as readSettingsContext, t as SettingsRefusal } from "./settings-payload-CrX933Xi.mjs";
2
+ import { i as unsetReplacedSetting, n as readScope, r as requireSetting, t as mutateSetting } from "./settings-write-DMcT23Kl.mjs";
3
3
  import { REPLACED_SETTINGS, SETTING_SCOPES } from "@stim-cli/core/state";
4
4
  import chalk from "chalk";
5
5
  //#region src/commands/settings.ts
@@ -1,7 +1,7 @@
1
1
  import { f as getConfigPath$1, g as getRepoSettings, h as getProjectSettings, v as loadConfig$1 } from "./config-D5qNWJEP.mjs";
2
2
  import { a as killOnAbort, i as gitPath } from "./operation-exec-Dp4FuIGR.mjs";
3
3
  import { K as removedMachineSettings, V as readCommittedSettings, st as unknownSettingKeys } from "./settings-C6UTYW2K.mjs";
4
- import { r as findCommandWorkspaceAsync } from "./project-DCLkDM8C.mjs";
4
+ import { r as findCommandWorkspaceAsync } from "./project-Crtcbfl0.mjs";
5
5
  import { i as stimDesktopInstalledAsync, n as settingDefault, r as stimDesktopInstalled } from "./stim-desktop-1XxET4S8.mjs";
6
6
  import { join } from "node:path";
7
7
  import { SETTINGS, SETTING_SCOPES, coerceSettingText, isJsonObject, replacementAdvice, settingDefinition, settingValueError } from "@stim-cli/core/state";
@@ -1,9 +1,9 @@
1
1
  import { u as withWorkspaceProcessLock } from "./exec-aULwtNly.mjs";
2
2
  import { f as getConfigPath$1, j as writeConfigSettingAsync, k as withConfigLockAsync$1 } from "./config-D5qNWJEP.mjs";
3
- import { t as NO_PROJECT_REFUSAL } from "./project-DCLkDM8C.mjs";
3
+ import { t as NO_PROJECT_REFUSAL } from "./project-Crtcbfl0.mjs";
4
4
  import { i as stimDesktopInstalledAsync } from "./stim-desktop-1XxET4S8.mjs";
5
5
  import { n as recordingLayers, t as deleteTurnedOffRecordings } from "./recordings-BWnIlhZH.mjs";
6
- import { d as unknownEntries, l as settingEntry, o as layerFile, r as committedDirectory, s as readSettingsContext, t as SettingsRefusal, u as settingExample } from "./settings-payload-zf5EnCTg.mjs";
6
+ import { d as unknownEntries, l as settingEntry, o as layerFile, r as committedDirectory, s as readSettingsContext, t as SettingsRefusal, u as settingExample } from "./settings-payload-CrX933Xi.mjs";
7
7
  import { existsSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
8
8
  import { join } from "node:path";
9
9
  import { configDir } from "@stim-cli/core";
@@ -1001,7 +1001,7 @@
1001
1001
  "type": "object",
1002
1002
  "properties": {
1003
1003
  "idleStopHours": {
1004
- "description": "Hours with no native run, Metro bundle or HMR request, agent-device command, Stim command or live view before automatic maintenance and gc --delete stop a workspace's dev server and shut down its owned simulators and emulators, as stim stop does; device and app log lines do not count; 0 never",
1004
+ "description": "Hours with no native run, Metro bundle or HMR request, agent-device command, Stim command or live view of a local device before automatic maintenance and gc --delete stop a workspace's dev server and shut down its owned or hosted simulators and emulators, as stim stop does, and stim-server stops a hosted session whose client has been gone that long; device and app log lines do not count; 0 never",
1005
1005
  "type": "number",
1006
1006
  "minimum": 0,
1007
1007
  "default": 6,
@@ -2041,7 +2041,7 @@
2041
2041
  }
2042
2042
  },
2043
2043
  "idleStopHours": {
2044
- "description": "Hours with no native run, Metro bundle or HMR request, agent-device command, Stim command or live view before automatic maintenance and gc --delete stop a workspace's dev server and shut down its owned simulators and emulators, as stim stop does; device and app log lines do not count; 0 never",
2044
+ "description": "Hours with no native run, Metro bundle or HMR request, agent-device command, Stim command or live view of a local device before automatic maintenance and gc --delete stop a workspace's dev server and shut down its owned or hosted simulators and emulators, as stim stop does, and stim-server stops a hosted session whose client has been gone that long; device and app log lines do not count; 0 never",
2045
2045
  "type": "number",
2046
2046
  "minimum": 0,
2047
2047
  "default": 6,
@@ -1,8 +1,8 @@
1
1
  import { r as readWorkspaceState$1 } from "./workspace-state-3bF4TB8P.mjs";
2
2
  import { K as projectDeviceSlots, W as parseDeviceSlotKey, m as getProject } from "./config-D5qNWJEP.mjs";
3
3
  import { A as getAvdNameForSerialAsync, P as listAdbDevicesAsync } from "./android-DsEj2CCs.mjs";
4
- import { on as deviceShellArg } from "./ccache-DVDO2ocE.mjs";
5
- import { y as fileLeaseIo } from "./activity-Dw4N_RFe.mjs";
4
+ import { on as deviceShellArg } from "./ccache-BrwGIxmV.mjs";
5
+ import { y as fileLeaseIo } from "./activity-yjH7Q3zn.mjs";
6
6
  import { f as listAllIosSimsAsync } from "./ios-CdAV4-1E.mjs";
7
7
  import { hostedNativeRecords } from "@stim-cli/core/state";
8
8
  //#region src/engine/slot-launch.ts
@@ -1,5 +1,5 @@
1
1
  import { c as throwIfCancelled, t as getExecutor, x as withDrainingCancellation } from "./exec-aULwtNly.mjs";
2
- import { st as runCancellationSignal } from "./toolchain-CGdgD4x4.mjs";
2
+ import { st as runCancellationSignal } from "./toolchain-Bnm8vUCV.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,15 +1,15 @@
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-aULwtNly.mjs";
2
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-3bF4TB8P.mjs";
3
3
  import { D as upsertProject, S as releaseMetroPort, k as withConfigLockAsync$1, m as getProject } from "./config-D5qNWJEP.mjs";
4
- import { _ as stepTimer, l as phaseLine } from "./command-output-VrXd6qPX.mjs";
4
+ import { _ as stepTimer, l as phaseLine } from "./command-output-CfPW1bKP.mjs";
5
5
  import { A as metroCommandSetting, B as publicUrlSetting, G as remoteIosSetting, I as ngrokUrlSetting, J as resolveCacheProviderConfig, M as metroIdleStopMinutesSetting, N as metroPortSetting, P as metroTunnelSettingError, U as remoteAndroidSetting, Y as resolveIosProjectDir, Z as resolveProjectSettingsAsync, _ as inertSettingWarning, a as SETTING_SHAPE_REMEDY, dt as detectProviders, ft as planMetroReach, h as deviceIdleShutdownMinutesSetting, j as metroCommandSettingError, m as defaultAndroidLayout, ot as tunnelModeSetting, p as cacheProviderSettingError, q as resolveAndroidLayout, rt as settingShapeErrors, st as unknownSettingKeys, ut as PUBLIC_METRO_ENV } from "./settings-C6UTYW2K.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-DCLkDM8C.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-Crtcbfl0.mjs";
7
7
  import { a as workspaceLinkLine, o as workspaceLinks } from "./stim-desktop-1XxET4S8.mjs";
8
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-mKHEMO-a.mjs";
9
9
  import { a as levelRank } from "./ndjson-CrjIsGzw.mjs";
10
- import { En as runProcessOperation, In as readProjectConfig, Vn as remoteCliInvocation, b as stopOwnedMetroForReset, c as budgetGate, wn as exitAfterFlush } from "./ccache-DVDO2ocE.mjs";
11
- import { C as stopTunnel, D as withManagedTunnelLock, S as startTunnelSequence, T as withManagedRemoteWorktreeLock, w as terminateChild, x as resolveSupervisorTarget } from "./workspaces-BNEyJ1B_.mjs";
12
- import { i as restoreLightenedDependencies } from "./lightened-DZ9Ip0T3.mjs";
10
+ import { En as runProcessOperation, In as readProjectConfig, Vn as remoteCliInvocation, b as stopOwnedMetroForReset, c as budgetGate, wn as exitAfterFlush } from "./ccache-BrwGIxmV.mjs";
11
+ import { C as stopTunnel, D as withManagedTunnelLock, S as startTunnelSequence, T as withManagedRemoteWorktreeLock, w as terminateChild, x as resolveSupervisorTarget } from "./workspaces-C59v9bpD.mjs";
12
+ import { i as restoreLightenedDependencies } from "./lightened-Df6II_XI.mjs";
13
13
  import { t as spawnEntry } from "./spawn-entry-jw19m8Nl.mjs";
14
14
  import { n as windowsLauncherArgs } from "./detached-entry-BPlSaCwC.mjs";
15
15
  import { appendFileSync, closeSync, mkdirSync, openSync, readFileSync } from "node:fs";
@@ -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-LSwIFlBv.mjs";
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-CLN_r9EG.mjs";
2
2
  export { startCommand as default, failureEvidence, liveSupervisor, parseWait, readLogTail, registerStart, resolveWorkspaceMetroPort, startDevServer, startFacts, supervisorEntry, supervisorSignalable, tailLines, wantsExpoOwnTunnel };
@@ -1,7 +1,7 @@
1
1
  import { F as formatBytes } from "./config-D5qNWJEP.mjs";
2
- import { o as formatLongDuration } from "./command-output-VrXd6qPX.mjs";
3
- import { i as findProjectRoot$1 } from "./project-DCLkDM8C.mjs";
4
- import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-Boie2yB-.mjs";
2
+ import { o as formatLongDuration } from "./command-output-CfPW1bKP.mjs";
3
+ import { i as findProjectRoot$1 } from "./project-Crtcbfl0.mjs";
4
+ import { i as getSwiftpmCacheUsage, n as swiftpmCacheLines, r as getAgentDeviceUsage, t as agentDeviceLines } from "./agent-device-usage-output-DO412bsG.mjs";
5
5
  import { t as readProjectStats } from "./stats-report-B86Cv7Uc.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-BLDvhatv.mjs";
1
+ import { n as runStatusWatch, r as statusCommand, t as readVolumes } from "./status-D0ruTmPl.mjs";
2
2
  export { statusCommand as default, readVolumes, runStatusWatch };
@@ -1,29 +1,29 @@
1
1
  import { S as process_identity_exports, t as getExecutor } from "./exec-aULwtNly.mjs";
2
2
  import { O as workspaceLogErrorIndex, k as workspaceLogsDir$1, r as readWorkspaceState$1 } from "./workspace-state-3bF4TB8P.mjs";
3
3
  import { F as formatBytes, H as deviceSlotKey, K as projectDeviceSlots, W as parseDeviceSlotKey, d as getConfigDir, p as getPlatformDeviceLimits, u as getConcurrencyLimits, v as loadConfig$1, z as volumeRootFor } from "./config-D5qNWJEP.mjs";
4
- import { a as formatElapsed, i as formatDuration, r as clockTime, u as plural } from "./command-output-VrXd6qPX.mjs";
4
+ import { a as formatElapsed, i as formatDuration, r as clockTime, u as plural } from "./command-output-CfPW1bKP.mjs";
5
5
  import { s as gitAsync } from "./operation-exec-Dp4FuIGR.mjs";
6
6
  import { Bt as repoRoot, Ct as gitCommonDirOnDisk, Ot as linkedWorktreesOnDisk, Q as resolveSettings, lt as workspaceHiddenSetting, xt as gitCommonDir } from "./settings-C6UTYW2K.mjs";
7
- import { I as readWorkspaceLaunches, M as readMetroTunnel, P as readRemoteSession, S as readAppJson, a as findServerWorkspace, l as projectShortcut, u as detectPlatforms, v as detectIsExpo, y as detectTutorial } from "./project-DCLkDM8C.mjs";
7
+ import { I as readWorkspaceLaunches, M as readMetroTunnel, P as readRemoteSession, S as readAppJson, a as findServerWorkspace, l as projectShortcut, u as detectPlatforms, v as detectIsExpo, y as detectTutorial } from "./project-Crtcbfl0.mjs";
8
8
  import { H as ownedAvdDeviceProfile, K as ownedAvdSerialResolver, N as listAdbDevices, P as listAdbDevicesAsync, bt as parkedMaxSetting, mt as POOL_SETTING_REMEDY, xt as readParked } from "./android-DsEj2CCs.mjs";
9
9
  import { c as pidExists, d as resolveProjectMetro, h as isMetroRunning, i as listeningPids, l as processCwd, o as listeningPidsByPort, u as processCwds } from "./metro-mKHEMO-a.mjs";
10
10
  import { o as parseNdjsonLine } from "./ndjson-CrjIsGzw.mjs";
11
- import { E as metroLastStop, S as describeMetroLastStop, cn as hasMetroReverse, cr as attributeMachineUsage, lr as readFootprints, p as machineNumber } from "./ccache-DVDO2ocE.mjs";
11
+ import { E as metroLastStop, S as describeMetroLastStop, cn as hasMetroReverse, cr as attributeMachineUsage, lr as readFootprints, p as machineNumber } from "./ccache-BrwGIxmV.mjs";
12
12
  import { a as readWebPage, o as readWebRecord, u as webFacts } from "./state-CM_HvvkS.mjs";
13
- import { A as poolLine, C as diskLine, D as loadLine, E as gitSummaryText, F as tightVolumes, I as unprovisionedWorktrees, L as withWebFacts, M as remoteDeviceState, N as slotUsageLines, O as metroReverseTargets, P as statusActivity, S as deviceLeaseStates, _ as addReverseMissingIssue, b as capacityLoad, g as activityLabel, j as remoteDeviceLine, k as parseDfFree, r as readEasSessionLedger$1, v as applyMachineMemory, w as environmentState, x as deviceLeaseLines, y as capacity } from "./eas-session-ledger-aFBLTZr2.mjs";
14
- import { Ct as buildSlotUsage, G as buildStatusLine, J as parseActiveBuild, K as bundlingActivity, U as activeBuildState, V as ACTIVE_BUILD_KEY, W as buildReport, at as readStats$1, lt as statsProjectKey$1, x as resolveSupervisorTarget } from "./workspaces-BNEyJ1B_.mjs";
15
- import { a as createDeviceProcessTables, b as leaseIsExpired, h as tailLines, m as readWebActivity, r as createActivityReader, w as parseWorkspaceLeases, x as listLeaseFiles } from "./activity-Dw4N_RFe.mjs";
13
+ import { A as poolLine, C as diskLine, D as loadLine, E as gitSummaryText, F as tightVolumes, I as unprovisionedWorktrees, L as withWebFacts, M as remoteDeviceState, N as slotUsageLines, O as metroReverseTargets, P as statusActivity, S as deviceLeaseStates, _ as addReverseMissingIssue, b as capacityLoad, g as activityLabel, j as remoteDeviceLine, k as parseDfFree, r as readEasSessionLedger$1, v as applyMachineMemory, w as environmentState, x as deviceLeaseLines, y as capacity } from "./eas-session-ledger-B-nTfdfk.mjs";
14
+ import { Ct as buildSlotUsage, G as buildStatusLine, J as parseActiveBuild, K as bundlingActivity, U as activeBuildState, V as ACTIVE_BUILD_KEY, W as buildReport, at as readStats$1, lt as statsProjectKey$1, x as resolveSupervisorTarget } from "./workspaces-C59v9bpD.mjs";
15
+ import { a as createDeviceProcessTables, b as leaseIsExpired, h as tailLines, m as readWebActivity, r as createActivityReader, w as parseWorkspaceLeases, x as listLeaseFiles } from "./activity-yjH7Q3zn.mjs";
16
16
  import { b as parseSimctlList, f as listAllIosSimsAsync } from "./ios-CdAV4-1E.mjs";
17
- import { p as probeHostedSession } from "./hosted-client-5ur3YpxY.mjs";
18
- import "./hosted-macos-BagT0Gn3.mjs";
19
- import { i as readSupervisorState } from "./stop-WyrZQuX6.mjs";
17
+ import { p as probeHostedSession } from "./hosted-client-Hs-fD4L3.mjs";
18
+ import "./hosted-macos-B4byscei.mjs";
19
+ import { i as readSupervisorState } from "./stop-W4DK8qZq.mjs";
20
20
  import { l as applyStatusMeasures, n as workspacePhase, s as mergeState, u as createStatusMeasurer } from "./warm-progress-_aTMvkIH.mjs";
21
21
  import { r as workspaceRecordingEnabled } from "./recordings-BWnIlhZH.mjs";
22
22
  import { n as maintenanceLines, r as maintenanceStatus } from "./status-GQ-JqvRi.mjs";
23
- import { c as deviceSlotUsages } from "./device-capacity-Du5wBTNJ.mjs";
24
- import { d as readIosDevices, s as isReachable } from "./ios-device-Dz8gFZ0K.mjs";
23
+ import { c as deviceSlotUsages } from "./device-capacity-Bki6B-7h.mjs";
24
+ import { d as readIosDevices, s as isReachable } from "./ios-device-D7Gi3e1I.mjs";
25
25
  import { t as triggerMaintenance } from "./trigger-CfnOfpDd.mjs";
26
- import { a as createRefreshScheduler, c as watchStatusSources, n as WATCH_LIGHT_INTERVAL_MS, o as watchChangeKey, r as WATCH_MACHINE_INTERVAL_MS, s as watchPayload, t as WATCH_FALLBACK_MS } from "./status-watch-BwG4lJ1q.mjs";
26
+ import { a as createRefreshScheduler, c as watchStatusSources, n as WATCH_LIGHT_INTERVAL_MS, o as watchChangeKey, r as WATCH_MACHINE_INTERVAL_MS, s as watchPayload, t as WATCH_FALLBACK_MS } from "./status-watch-DSu_hhg6.mjs";
27
27
  import { t as watchStdoutReader } from "./stdout-reader-C8yjre1x.mjs";
28
28
  import { createHash, randomUUID } from "node:crypto";
29
29
  import { mkdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -1,7 +1,7 @@
1
1
  import { t as getExecutor } from "./exec-aULwtNly.mjs";
2
2
  import { d as androidToolPath } from "./android-DsEj2CCs.mjs";
3
3
  import { c as pidExists } from "./metro-mKHEMO-a.mjs";
4
- import { n as easMachineStateRoot } from "./eas-session-ledger-aFBLTZr2.mjs";
4
+ import { n as easMachineStateRoot } from "./eas-session-ledger-B-nTfdfk.mjs";
5
5
  import { b as parseSimctlList } from "./ios-CdAV4-1E.mjs";
6
6
  import { existsSync, readdirSync, statSync, watch } from "node:fs";
7
7
  import { basename, dirname, join } from "node:path";
@@ -1,4 +1,4 @@
1
- import { n as runStatusWatch } from "./status-BLDvhatv.mjs";
1
+ import { n as runStatusWatch } from "./status-D0ruTmPl.mjs";
2
2
  import { parentPort, workerData } from "node:worker_threads";
3
3
  //#region src/status-worker.ts
4
4
  const STOP_EXIT_MS = 500;
@@ -1,8 +1,8 @@
1
1
  import { D as ownership_claim_exports, S as process_identity_exports, u as withWorkspaceProcessLock } from "./exec-aULwtNly.mjs";
2
2
  import { E as workspaceDir, d as writeWorkspaceState, l as withWorkspaceStateLockAsync } from "./workspace-state-3bF4TB8P.mjs";
3
3
  import { a as macosRuntimeClaim, o as requiredMacosRecord } from "./state-CiflgxTP.mjs";
4
- import { A as runningBundleInstancesAsync, j as runningInstancesInAsync, k as hostedBundleDirs } from "./workspaces-BNEyJ1B_.mjs";
5
- import { n as stopHostedMacos } from "./hosted-macos-BagT0Gn3.mjs";
4
+ import { A as runningBundleInstancesAsync, j as runningInstancesInAsync, k as hostedBundleDirs } from "./workspaces-C59v9bpD.mjs";
5
+ import { n as stopHostedMacos } from "./hosted-macos-B4byscei.mjs";
6
6
  import { readMacosRecord } from "@stim-cli/core/state";
7
7
  //#region src/macos/stop.ts
8
8
  const APP_EXIT_MS = 5e3;
@@ -1,3 +1,3 @@
1
- import { x as resolveSupervisorTarget } from "./workspaces-BNEyJ1B_.mjs";
2
- import { a as resolveCollectorTargets, c as stopWorkspaceNow, i as readSupervisorState, n as clearSupervisorState, o as runStop, r as readCollectorState, s as stopCommand, t as clearCollectorState } from "./stop-WyrZQuX6.mjs";
1
+ import { x as resolveSupervisorTarget } from "./workspaces-C59v9bpD.mjs";
2
+ import { a as resolveCollectorTargets, c as stopWorkspaceNow, i as readSupervisorState, n as clearSupervisorState, o as runStop, r as readCollectorState, s as stopCommand, t as clearCollectorState } from "./stop-W4DK8qZq.mjs";
3
3
  export { clearCollectorState, clearSupervisorState, stopCommand as default, readCollectorState, readSupervisorState, resolveCollectorTargets, resolveSupervisorTarget, runStop, stopWorkspaceNow };
@@ -1,18 +1,18 @@
1
1
  import { D as ownership_claim_exports, E as debugLog, S as process_identity_exports, l as WorkspaceProcessCleanupError, u as withWorkspaceProcessLock } from "./exec-aULwtNly.mjs";
2
2
  import { E as workspaceDir, c as withWorkspaceStateLock, d as writeWorkspaceState, l as withWorkspaceStateLockAsync, n as clearWorkspaceStateKeys, r as readWorkspaceState$1, s as updateWorkspaceStateAsync } from "./workspace-state-3bF4TB8P.mjs";
3
3
  import { D as upsertProject, G as parseDeviceSlotOption, J as validateDeviceSlot, K as projectDeviceSlots, U as deviceSlotPlatforms, W as parseDeviceSlotKey, k as withConfigLockAsync$1, m as getProject, o as clearSupervisor } from "./config-D5qNWJEP.mjs";
4
- import { f as refuseNoProject, l as phaseLine, p as releasedLeaseFact, u as plural } from "./command-output-VrXd6qPX.mjs";
5
- import { A as clearWorkspaceLaunches, M as readMetroTunnel, O as clearManagedMetroTunnel, P as readRemoteSession, T as MODE_COMMAND, j as clearWorkspaceSupervisor, k as clearRemoteSession, n as findCommandWorkspace } from "./project-DCLkDM8C.mjs";
4
+ import { f as refuseNoProject, l as phaseLine, p as releasedLeaseFact, u as plural } from "./command-output-CfPW1bKP.mjs";
5
+ import { A as clearWorkspaceLaunches, M as readMetroTunnel, O as clearManagedMetroTunnel, P as readRemoteSession, T as MODE_COMMAND, j as clearWorkspaceSupervisor, k as clearRemoteSession, n as findCommandWorkspace } from "./project-Crtcbfl0.mjs";
6
6
  import { t as macosAppPresent } from "./state-CiflgxTP.mjs";
7
7
  import { nt as removeOwnedEmulatorMetroReverses } from "./android-DsEj2CCs.mjs";
8
8
  import { a as listeningPidsAsync, c as pidExists, d as resolveProjectMetro, h as isMetroRunning, p as signalProcessTreeAsync, r as killMetroTreeAsync, u as processCwds } from "./metro-mKHEMO-a.mjs";
9
- import { D as requestDevServerStop, Ln as resolveEasCliBin, Ot as endRecordedSession, T as logVanishedSupervisor, k as withdrawDevServerStopRequest } from "./ccache-DVDO2ocE.mjs";
10
- import { C as stopTunnel, ht as teardownOwnedIosSim, mt as teardownOwnedBrowser, pt as teardownOwnedAvd, x as resolveSupervisorTarget } from "./workspaces-BNEyJ1B_.mjs";
11
- import { Q as NATIVE_RUN_WAIT_MS, Z as NATIVE_RUN_LOCK, at as requestNativeRunCancel, et as clearNativeRunCancel, it as nativeRunWaitNotice, nt as describeNativeRunHolder, rt as nativeRunHolder, tt as decideStopAction } from "./toolchain-CGdgD4x4.mjs";
12
- import { O as releaseWorkspaceLeasesAsync, y as fileLeaseIo } from "./activity-Dw4N_RFe.mjs";
13
- import { i as stopHostedAndroid } from "./hosted-android-CH1Sm4wo.mjs";
14
- import { a as stopHostedIos, n as removePhoneReverses } from "./phone-reverses-Drj5QQCh.mjs";
15
- import { r as stopMacosApp } from "./stop-BfNhzvXO.mjs";
9
+ import { D as requestDevServerStop, Ln as resolveEasCliBin, Ot as endRecordedSession, T as logVanishedSupervisor, k as withdrawDevServerStopRequest } from "./ccache-BrwGIxmV.mjs";
10
+ import { C as stopTunnel, ht as teardownOwnedIosSim, mt as teardownOwnedBrowser, pt as teardownOwnedAvd, x as resolveSupervisorTarget } from "./workspaces-C59v9bpD.mjs";
11
+ import { Q as NATIVE_RUN_WAIT_MS, Z as NATIVE_RUN_LOCK, at as requestNativeRunCancel, et as clearNativeRunCancel, it as nativeRunWaitNotice, nt as describeNativeRunHolder, rt as nativeRunHolder, tt as decideStopAction } from "./toolchain-Bnm8vUCV.mjs";
12
+ import { O as releaseWorkspaceLeasesAsync, y as fileLeaseIo } from "./activity-yjH7Q3zn.mjs";
13
+ import { i as stopHostedAndroid } from "./hosted-android-c5nPJA6S.mjs";
14
+ import { a as stopHostedIos, n as removePhoneReverses } from "./phone-reverses-CnNwdz9A.mjs";
15
+ import { r as stopMacosApp } from "./stop-B616ZyTv.mjs";
16
16
  import { n as verifyCollectorOwnership } from "./ownership-CCfiBfOP.mjs";
17
17
  import { hostedAndroidDeviceName, hostedAndroidRecords, hostedIosRecords, hostedNativeRecords, isJsonObject, parseHostedNativePlacement } from "@stim-cli/core/state";
18
18
  import chalk from "chalk";
@@ -1,26 +1,26 @@
1
1
  import { S as process_identity_exports, u as withWorkspaceProcessLock } from "./exec-aULwtNly.mjs";
2
2
  import { c as withWorkspaceStateLock, d as writeWorkspaceState, j as workspaceStateFile$1, k as workspaceLogsDir$1, n as clearWorkspaceStateKeys, o as updateWorkspaceState, r as readWorkspaceState$1 } from "./workspace-state-3bF4TB8P.mjs";
3
- import { E as setSupervisor, K as projectDeviceSlots, W as parseDeviceSlotKey, m as getProject, o as clearSupervisor } from "./config-D5qNWJEP.mjs";
3
+ import { E as setSupervisor, K as projectDeviceSlots, W as parseDeviceSlotKey, at as parseMachine$1, m as getProject, o as clearSupervisor } from "./config-D5qNWJEP.mjs";
4
4
  import { $ as runnableMetroCommand, X as resolveProjectSettings } from "./settings-C6UTYW2K.mjs";
5
- import { D as clearExpoMetroTunnel, E as MODE_EXPO, N as readPidFile, R as writePidFile, T as MODE_COMMAND, d as nativeProjectIntegration, j as clearWorkspaceSupervisor, v as detectIsExpo, w as MODE_BARE } from "./project-DCLkDM8C.mjs";
5
+ import { D as clearExpoMetroTunnel, E as MODE_EXPO, N as readPidFile, R as writePidFile, T as MODE_COMMAND, d as nativeProjectIntegration, j as clearWorkspaceSupervisor, v as detectIsExpo, w as MODE_BARE } from "./project-Crtcbfl0.mjs";
6
6
  import { K as ownedAvdSerialResolver } from "./android-DsEj2CCs.mjs";
7
7
  import { i as createNdjsonWriter } from "./ndjson-CrjIsGzw.mjs";
8
- import { C as devServerStopLevel, O as vanishedSupervisorMessage, w as devServerStopRecord, x as describeDevServerStop } from "./ccache-DVDO2ocE.mjs";
9
- import { d as parseWatchRoots, l as parseSubscriberNames, m as runWatchman, u as parseTriggerCount } from "./eas-session-ledger-aFBLTZr2.mjs";
10
- import { B as workspaceBuildInProgress, v as withIdleWorkspace } from "./workspaces-BNEyJ1B_.mjs";
11
- import { S as parseLease, _ as workspaceDeviceLastUseAt, b as leaseIsExpired, r as createActivityReader, v as deviceLeasePath, w as parseWorkspaceLeases } from "./activity-Dw4N_RFe.mjs";
8
+ import { C as devServerStopLevel, O as vanishedSupervisorMessage, w as devServerStopRecord, x as describeDevServerStop } from "./ccache-BrwGIxmV.mjs";
9
+ import { d as parseWatchRoots, l as parseSubscriberNames, m as runWatchman, u as parseTriggerCount } from "./eas-session-ledger-B-nTfdfk.mjs";
10
+ import { B as workspaceBuildInProgress, v as withIdleWorkspace } from "./workspaces-C59v9bpD.mjs";
11
+ import { S as parseLease, _ as workspaceDeviceLastUseAt, b as leaseIsExpired, r as createActivityReader, v as deviceLeasePath, w as parseWorkspaceLeases } from "./activity-yjH7Q3zn.mjs";
12
12
  import { t as describeError } from "./errors-DHm_U5gv.mjs";
13
- import { d as hostConnector, p as probeHostedSession } from "./hosted-client-5ur3YpxY.mjs";
14
- import { o as watchWorkspaceState, t as clearHostedMetro } from "./metro-request-RDhyx85c.mjs";
13
+ import { d as hostConnector, p as probeHostedSession } from "./hosted-client-Hs-fD4L3.mjs";
14
+ import { s as watchWorkspaceState, t as clearHostedMetro } from "./metro-request-DODHNXCN.mjs";
15
15
  import { t as relaunchWithLogFile } from "./detached-entry-BPlSaCwC.mjs";
16
- import { n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-BWHQ7mQG.mjs";
16
+ import { n as dueIdleDevices, r as shutDownIdleDevices } from "./idle-shutdown-BaeCo4ps.mjs";
17
17
  import { t as triggerMaintenance } from "./trigger-CfnOfpDd.mjs";
18
18
  import { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
19
19
  import { dirname, isAbsolute, join, resolve, sep } from "node:path";
20
20
  import { LOG_ROTATE_BYTES } from "@stim-cli/core";
21
21
  import { DEV_SERVER_STOP_REQUEST_KEY, HOSTED_METRO_LINKS_KEY, HOSTED_METRO_REQUESTS_KEY, IDLE_STOP_KEY, hostedAndroidPlacements, hostedIosPlacements, hostedMetroLinks, hostedMetroRequests, hostedNativeRecords, parseHostedNativePlacement, readDevServerStopRequest } from "@stim-cli/core/state";
22
22
  import { fileURLToPath } from "node:url";
23
- import { connect } from "node:net";
23
+ import { connect, createServer } from "node:net";
24
24
  //#region src/supervisor/metro-links.ts
25
25
  const IDLE_LINKS = 4;
26
26
  const FRAME_BYTES = 32768;
@@ -33,6 +33,35 @@ const RETRY_MS = [
33
33
  ];
34
34
  const METRO_RESET = 4410;
35
35
  /**
36
+ * Carries one TCP stream over a link connection as binary frames, with backpressure both ways. A clean end on either
37
+ * side closes the other cleanly, and a reset resets it. `ended` runs once when `socket` closes.
38
+ */
39
+ function pipeLink(connection, socket, ended) {
40
+ socket.on("error", () => socket.destroy());
41
+ socket.once("close", (hadError) => {
42
+ ended();
43
+ connection.flushed().then(() => connection.close(hadError ? METRO_RESET : 1e3));
44
+ });
45
+ connection.onDropped((code) => code === 1e3 ? socket.end() : socket.resetAndDestroy());
46
+ let paused = false;
47
+ connection.onBinary((frame) => {
48
+ if (socket.write(frame) || paused) return;
49
+ paused = true;
50
+ connection.pause();
51
+ socket.once("drain", () => {
52
+ paused = false;
53
+ connection.resume();
54
+ });
55
+ });
56
+ socket.on("data", (chunk) => {
57
+ socket.pause();
58
+ (async () => {
59
+ for (let offset = 0; offset < chunk.length; offset += FRAME_BYTES) await connection.sendBinary(chunk.subarray(offset, offset + FRAME_BYTES));
60
+ if (!socket.destroyed) socket.resume();
61
+ })();
62
+ });
63
+ }
64
+ /**
36
65
  * Keeps `IDLE_LINKS` authenticated connections open to `machine`, each offered to `session`'s Metro bridge there. The
37
66
  * host pairs one with each connection the hosted device makes; this side then pipes it to loopback `metroPort` and
38
67
  * opens a replacement. `onReady` runs when the host holds a link after holding none, and `onLost` when no linked
@@ -86,29 +115,9 @@ function openMetroLinks({ machine, session, metroPort, onReady, onLost, onError
86
115
  port: metroPort
87
116
  });
88
117
  streams.add(metro);
89
- metro.on("error", () => metro.destroy());
90
- metro.once("close", (hadError) => {
118
+ pipeLink(connection, metro, () => {
91
119
  streams.delete(metro);
92
120
  ended();
93
- connection.flushed().then(() => connection.close(hadError ? METRO_RESET : 1e3));
94
- });
95
- connection.onDropped((code) => code === 1e3 ? metro.end() : metro.resetAndDestroy());
96
- let paused = false;
97
- connection.onBinary((frame) => {
98
- if (metro.write(frame) || paused) return;
99
- paused = true;
100
- connection.pause();
101
- metro.once("drain", () => {
102
- paused = false;
103
- connection.resume();
104
- });
105
- });
106
- metro.on("data", (chunk) => {
107
- metro.pause();
108
- (async () => {
109
- for (let offset = 0; offset < chunk.length; offset += FRAME_BYTES) await connection.sendBinary(chunk.subarray(offset, offset + FRAME_BYTES));
110
- if (!metro.destroyed) metro.resume();
111
- })();
112
121
  });
113
122
  };
114
123
  const link = async () => {
@@ -179,6 +188,70 @@ function openMetroLinks({ machine, session, metroPort, onReady, onLost, onError
179
188
  return { close: stop };
180
189
  }
181
190
  //#endregion
191
+ //#region src/supervisor/agent-relay.ts
192
+ const MAX_CONNECTIONS = 8;
193
+ function refuse(socket, message) {
194
+ const body = `${message}\n`;
195
+ socket.resume();
196
+ socket.end(`HTTP/1.1 502 Bad Gateway\r\ncontent-type: text/plain\r\nconnection: close\r\ncontent-length: ${Buffer.byteLength(body)}\r\n\r\n${body}`);
197
+ }
198
+ /**
199
+ * Listens on a loopback port and carries each connection to `session`'s agent route on `machine` over its own
200
+ * authenticated `device-host.agent.link` connection, so the host knows the request comes from this machine's key.
201
+ * The host still requires the session's agent token in each request. A connection the host does not link is answered
202
+ * with 502 and the reason. It holds at most 8 connections at a time, and listens on `port` when that is free, so a
203
+ * remote config written for an earlier relay of the session still reaches it.
204
+ */
205
+ function openAgentRelay({ machine, session, port: preferred }) {
206
+ const connect = hostConnector(machine);
207
+ const live = /* @__PURE__ */ new Set();
208
+ const sockets = /* @__PURE__ */ new Set();
209
+ let closed = false;
210
+ const relay = async (socket) => {
211
+ sockets.add(socket);
212
+ socket.once("close", () => sockets.delete(socket));
213
+ socket.on("error", () => socket.destroy());
214
+ let connection;
215
+ try {
216
+ connection = await connect();
217
+ if (closed || socket.destroyed) return void connection.close();
218
+ if (!connection.supports("hosted-agent-link")) throw new Error(`${machine} runs a stim-server that cannot carry agent control over the local network. Update stim-server there, then retry.`);
219
+ const reply = await connection.request("device-host.agent.link", { session });
220
+ if ("error" in reply) throw new Error(`${machine} refused the agent link: ${reply.error.message}`);
221
+ if (closed || socket.destroyed) return void connection.close();
222
+ const linked = connection;
223
+ live.add(linked);
224
+ pipeLink(linked, socket, () => live.delete(linked));
225
+ socket.resume();
226
+ } catch (error) {
227
+ connection?.close();
228
+ if (!socket.destroyed) refuse(socket, error instanceof Error ? error.message : String(error));
229
+ }
230
+ };
231
+ const server = createServer({ pauseOnConnect: true }, (socket) => void relay(socket));
232
+ server.maxConnections = MAX_CONNECTIONS;
233
+ server.on("error", () => {});
234
+ const listen = (port) => new Promise((resolve, reject) => {
235
+ server.once("error", reject);
236
+ server.listen(port, "127.0.0.1", () => {
237
+ server.off("error", reject);
238
+ resolve(server.address().port);
239
+ });
240
+ });
241
+ const port = preferred ? listen(preferred).catch(() => listen(0)) : listen(0);
242
+ port.catch(() => {});
243
+ return {
244
+ port,
245
+ close: () => {
246
+ closed = true;
247
+ server.close();
248
+ for (const connection of live) connection.close();
249
+ for (const socket of sockets) socket.destroy();
250
+ live.clear();
251
+ }
252
+ };
253
+ }
254
+ //#endregion
182
255
  //#region src/supervisor/hosted-metro.ts
183
256
  function reconcileHostedMetro(requests, active) {
184
257
  const same = (session) => JSON.stringify(requests[session]) === JSON.stringify(active[session]);
@@ -270,31 +343,50 @@ function watchHostedMetro(root, metroPort, processToken) {
270
343
  for (const session of actions.open) {
271
344
  const request = requests[session];
272
345
  active[session] = request;
273
- pools.set(session, openMetroLinks({
346
+ const relay = parseMachine$1(request.machine)?.transport === "local" ? openAgentRelay({
347
+ machine: request.machine,
348
+ session,
349
+ port: hostedMetroLinks(state)[session]?.agentPort
350
+ }) : null;
351
+ let agentPort;
352
+ const listening = relay ? relay.port.then((port) => void (agentPort = port)).catch(() => {}) : Promise.resolve();
353
+ let ready = false;
354
+ const pool = openMetroLinks({
274
355
  machine: request.machine,
275
356
  session,
276
357
  metroPort,
277
- onReady: () => {
278
- if (active[session] === request) publish(session, {
358
+ onReady: async () => {
359
+ ready = true;
360
+ await listening;
361
+ if (active[session] === request && ready) publish(session, {
279
362
  id: request.id,
280
363
  processToken,
281
- ready: true
364
+ ready: true,
365
+ ...agentPort ? { agentPort } : {}
282
366
  });
283
367
  },
284
368
  onLost: () => {
369
+ ready = false;
285
370
  if (active[session] === request) publish(session, {
286
371
  id: request.id,
287
- processToken
372
+ processToken,
373
+ ...agentPort ? { agentPort } : {}
288
374
  });
289
375
  },
290
376
  onError: (message) => {
377
+ ready = false;
291
378
  if (active[session] === request) publish(session, {
292
379
  id: request.id,
293
380
  processToken,
294
- error: message
381
+ error: message,
382
+ ...agentPort ? { agentPort } : {}
295
383
  });
296
384
  }
297
- }));
385
+ });
386
+ pools.set(session, { close: () => {
387
+ pool.close();
388
+ relay?.close();
389
+ } });
298
390
  }
299
391
  if (!probing && Date.now() >= probingAt) {
300
392
  clearTimeout(probeTimer);
@@ -802,7 +894,7 @@ async function runSupervisor({ root, port, tunnel = false, resetCache = false, i
802
894
  try {
803
895
  let start;
804
896
  if (command) {
805
- const startServer = startCommand ?? (await import("./server-command-B1gDRJB2.mjs")).startCommandServer;
897
+ const startServer = startCommand ?? (await import("./server-command-BMyKtnjH.mjs")).startCommandServer;
806
898
  start = (opts) => startServer({
807
899
  ...opts,
808
900
  command
@@ -1,13 +1,13 @@
1
1
  import { k as workspaceLogsDir } from "./workspace-state-3bF4TB8P.mjs";
2
- import { h as shortUdid, l as phaseLine } from "./command-output-VrXd6qPX.mjs";
2
+ import { h as shortUdid, l as phaseLine } from "./command-output-CfPW1bKP.mjs";
3
3
  import { _ as inertSettingWarning, a as SETTING_SHAPE_REMEDY, b as iosProjectDirSetting, p as cacheProviderSettingError, rt as settingShapeErrors, st as unknownSettingKeys, x as iosProjectDirSettingError } from "./settings-C6UTYW2K.mjs";
4
- import { J as describeDiagnostic } from "./toolchain-CGdgD4x4.mjs";
4
+ import { J as describeDiagnostic } from "./toolchain-Bnm8vUCV.mjs";
5
5
  import { P as parseIosSimulatorApp } from "./ios-CdAV4-1E.mjs";
6
6
  import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
7
- import { d as resolveBuildPlacement } from "./selection-C95m--1_.mjs";
8
- import { l as parseDeviceWait } from "./device-lease-run-CHXQEn-7.mjs";
9
- import { g as unknownIosRuntimeRefusal, h as unknownIosDeviceTypeRefusal, t as DEFAULT_DEVICE_SLOT_WAIT_MS, u as layerNote } from "./device-capacity-Du5wBTNJ.mjs";
10
- import { t as IosDeviceMismatchError } from "./device-ios-CUYUhSYO.mjs";
7
+ import { d as resolveBuildPlacement } from "./selection-C4ZQz_ER.mjs";
8
+ import { l as parseDeviceWait } from "./device-lease-run-DeNGjJZM.mjs";
9
+ import { g as unknownIosRuntimeRefusal, h as unknownIosDeviceTypeRefusal, t as DEFAULT_DEVICE_SLOT_WAIT_MS, u as layerNote } from "./device-capacity-Bki6B-7h.mjs";
10
+ import { t as IosDeviceMismatchError } from "./device-ios-TE5ejeXx.mjs";
11
11
  import { basename, join } from "node:path";
12
12
  import chalk from "chalk";
13
13
  function buildLogFile(root) {
@@ -1,9 +1,9 @@
1
1
  import { t as getExecutor } from "./exec-aULwtNly.mjs";
2
2
  import { a as killOnAbort } from "./operation-exec-Dp4FuIGR.mjs";
3
3
  import { D as extractEmulatorFailure, E as emulatorProbeSession, O as findBuildTool, Q as pickDefaultSystemImage, T as emulatorFailureRemedy, c as androidPoolNoCandidatesRefusal, et as profileNeedsFoldFeature, j as hostSystemImageArch, l as androidSystemImageAbi, o as androidHome, s as androidPoolCandidates, w as emulatorDiskSpaceRemedy } from "./android-DsEj2CCs.mjs";
4
- import { yn as pickDevClientScheme } from "./ccache-DVDO2ocE.mjs";
5
- import { m as unknownAndroidSystemImageRefusal, p as unknownAndroidDeviceProfileRefusal, u as layerNote } from "./device-capacity-Du5wBTNJ.mjs";
6
- import { t as devClientScheme } from "./dev-client-DeAg0fso.mjs";
4
+ import { yn as pickDevClientScheme } from "./ccache-BrwGIxmV.mjs";
5
+ import { m as unknownAndroidSystemImageRefusal, p as unknownAndroidDeviceProfileRefusal, u as layerNote } from "./device-capacity-Bki6B-7h.mjs";
6
+ import { t as devClientScheme } from "./dev-client-eDZy6RoX.mjs";
7
7
  import { existsSync, readFileSync, readdirSync } from "node:fs";
8
8
  import { relative } from "node:path";
9
9
  //#region src/commands/android/support.ts
@@ -2,11 +2,11 @@ import { T as trackReportResource, _ as spawnDeclared, t as getExecutor } from "
2
2
  import { y as sharedBuildCache } from "./workspace-state-3bF4TB8P.mjs";
3
3
  import { J as resolveCacheProviderConfig, Vt as repoRootAsync, it as settingValueAt, z as projectSettingsContextAsync } from "./settings-C6UTYW2K.mjs";
4
4
  import { r as register } from "./cache-manifest-CfiEny4T.mjs";
5
- import { h as macosToolchainAsync, st as runCancellationSignal } from "./toolchain-CGdgD4x4.mjs";
5
+ import { h as macosToolchainAsync, st as runCancellationSignal } from "./toolchain-Bnm8vUCV.mjs";
6
6
  import "./build-cache-BsKim4V7.mjs";
7
7
  import { l as artifactCachePolicy, p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
8
8
  import { r as nativeFileDigest } from "./native-source-D1AzWiuP.mjs";
9
- import { a as validateInfoPlist, i as stageBundle, n as resolveBundleExtras, r as setBundleName, t as reidentifyBundle } from "./stage-DDrnM0CY.mjs";
9
+ import { a as validateInfoPlist, i as stageBundle, n as resolveBundleExtras, r as setBundleName, t as reidentifyBundle } from "./stage-Cf9uSM1a.mjs";
10
10
  import { t as validateMacosArtifactPlatform } from "./artifact-platform-BO2Uvk_A.mjs";
11
11
  import { t as logLines } from "./run-2CHAJ9Oj.mjs";
12
12
  import { n as swiftpmArtifactInputs, r as swiftpmArtifactSnapshot, t as readSwiftpmArtifactToolchain } from "./swiftpm-artifact-inputs-yp8D5LE4.mjs";
@@ -1,2 +1,2 @@
1
- import { h as macosToolchainAsync, m as macosToolchain } from "./toolchain-CGdgD4x4.mjs";
1
+ import { h as macosToolchainAsync, m as macosToolchain } from "./toolchain-Bnm8vUCV.mjs";
2
2
  export { macosToolchain, macosToolchainAsync };
@@ -1,12 +1,12 @@
1
1
  import { D as ownership_claim_exports, _ as spawnDeclared, b as operationState, g as signalDeclaredSpawns, h as refuseDeclaredSpawns, m as declareSpawnsOn, p as allowDeclaredSpawns, t as getExecutor, u as withWorkspaceProcessLock, v as stopDeclaringSpawnsOn, y as isTermination } from "./exec-aULwtNly.mjs";
2
2
  import { E as workspaceDir, T as workspaceDerivedData, l as withWorkspaceStateLockAsync, o as updateWorkspaceState, r as readWorkspaceState$1, t as clearWorkspaceStateKey } from "./workspace-state-3bF4TB8P.mjs";
3
3
  import { n as stripAnsi, r as waitForChild, t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { a as formatElapsed, l as phaseLine } from "./command-output-VrXd6qPX.mjs";
4
+ import { a as formatElapsed, l as phaseLine } from "./command-output-CfPW1bKP.mjs";
5
5
  import { a as killOnAbort } from "./operation-exec-Dp4FuIGR.mjs";
6
6
  import { o as androidHome } from "./android-DsEj2CCs.mjs";
7
7
  import { t as canonicalPath } from "./paths-BsJMoPP2.mjs";
8
8
  import { p as resolveOptimizations } from "./errors-DHm_U5gv.mjs";
9
- import { t as cleanLine } from "./server-expo-CP4dURQp.mjs";
9
+ import { t as cleanLine } from "./server-expo-BLxcN2x2.mjs";
10
10
  import { createRequire } from "node:module";
11
11
  import { createHash } from "node:crypto";
12
12
  import { existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";