stim 1.21.0 → 1.22.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 (184) hide show
  1. package/README.md +60 -7
  2. package/dist/{acquire-artifact-CD4lbiWE.mjs → acquire-artifact-Co2k4f7O.mjs} +21 -3
  3. package/dist/{act-DHAw2A2S.mjs → act-DsuqEkiM.mjs} +298 -164
  4. package/dist/{activity-BzVfHSrY.mjs → activity-CMLmzp7o.mjs} +33 -12
  5. package/dist/{agent-device-usage-output-zh1vhbLp.mjs → agent-device-usage-output-DUFaTMdd.mjs} +7 -7
  6. package/dist/{android-BLgbNqox.mjs → android-ByRMUoiJ.mjs} +66 -52
  7. package/dist/{android-DUYkNF4u.mjs → android-C7sVmyI9.mjs} +160 -59
  8. package/dist/{android-CV_GCELZ.mjs → android-DGkNqa_c.mjs} +5 -5
  9. package/dist/{android-BEJ8Jpl7.mjs → android-DR5lZ2Az.mjs} +2 -2
  10. package/dist/android-cas-compiler.mjs +1 -1
  11. package/dist/{android-cas-Ct5b1xCK.mjs → android-cas-ngferVq2.mjs} +3 -3
  12. package/dist/{client-B7QVOlCr.d.mts → android-project-DVWyCbWU.d.mts} +145 -7
  13. package/dist/api.d.mts +132 -118
  14. package/dist/api.mjs +239 -42
  15. package/dist/{artifact-B8T3S5gi.mjs → artifact-8EY8SAPw.mjs} +40 -35
  16. package/dist/{artifact-DAuZ-FNU.mjs → artifact-DJPy518Y.mjs} +69 -40
  17. package/dist/artifact-platform-CXcmX_j3.mjs +27 -0
  18. package/dist/{browser-web-QQzVjz3O.mjs → browser-web-Bcv99PBM.mjs} +187 -59
  19. package/dist/{budget-Bs6SxxzO.mjs → budget-Cvwn54qV.mjs} +830 -699
  20. package/dist/{build-CoPzQRNw.mjs → build-CabC3G23.mjs} +34 -27
  21. package/dist/{build-cache-DmyR9Zzc.mjs → build-cache-Dv7RN200.mjs} +4 -4
  22. package/dist/{build-plan-CaFskB7_.mjs → build-plan-DUC8Ka9y.mjs} +74 -14
  23. package/dist/{cache-manifest-DkkqguoK.mjs → cache-manifest-DSeQjt-Q.mjs} +1 -1
  24. package/dist/cache-manifest.mjs +1 -1
  25. package/dist/{ccache-BJRZ9pG3.mjs → ccache-Btwc36-I.mjs} +6 -6
  26. package/dist/{cdp-CWmIUMbw.mjs → cdp-3fwICjzi.mjs} +1 -1
  27. package/dist/{chrome-B6tfCta1.mjs → chrome-Bbw689-6.mjs} +1 -1
  28. package/dist/{cli-0DYf8QhQ.mjs → cli-CHZa9Lvk.mjs} +20 -20
  29. package/dist/cli.mjs +1 -1
  30. package/dist/{client-UXD70ZbM.mjs → client-OyRoEuSr.mjs} +218 -47
  31. package/dist/collector-run.d.mts +1 -1
  32. package/dist/collector-run.mjs +6 -6
  33. package/dist/{command-output-B1UrjZHL.mjs → command-output-gwpm28fu.mjs} +1 -1
  34. package/dist/{config-CYcBF478.mjs → config-DlrsduwG.mjs} +17 -11
  35. package/dist/{created-devices-CqeBlrEn.mjs → created-devices-x9rN6bhs.mjs} +13 -3
  36. package/dist/{dependency-state-BbKQW83h.mjs → dependency-state-1I9KZT1Y.mjs} +2 -2
  37. package/dist/{detached-entry-DFRyG1_o.mjs → detached-entry-BwNEtIrP.mjs} +1 -1
  38. package/dist/{dev-client-UOeESKm6.mjs → dev-client-BSDR5h3F.mjs} +2 -2
  39. package/dist/{device-ExJq8Ei7.mjs → device-B-L3Fbxy.mjs} +71 -14
  40. package/dist/{device-DCxH7_By.mjs → device-DklWZLqb.mjs} +16 -16
  41. package/dist/{device-capacity-CMlqEcvw.mjs → device-capacity-DK5_EwRS.mjs} +9 -10
  42. package/dist/device-host-worker.mjs +25 -32
  43. package/dist/{device-ios-DRUeKaFV.mjs → device-ios-DoB6KFCO.mjs} +39 -16
  44. package/dist/{device-lease-run-C8raGFoP.mjs → device-lease-run-xJPQ_QQG.mjs} +5 -5
  45. package/dist/{device-pool-DMRpVX9a.mjs → device-pool-BMkdsefq.mjs} +3 -3
  46. package/dist/{doctor-DTvaDOda.mjs → doctor-Bo7BXLux.mjs} +24 -37
  47. package/dist/{doctor-Dhqebm0q.mjs → doctor-D5_EzwfA.mjs} +19 -16
  48. package/dist/doctor-fingerprint-DZLoYFVb.mjs +16 -0
  49. package/dist/doctor-fingerprint.mjs +1 -1
  50. package/dist/{doctor-BLHCYxzi.mjs → doctor-thjWAV0z.mjs} +1 -1
  51. package/dist/{doctor-watchman-Cv1F10Kj.mjs → doctor-watchman-N2wDotwQ.mjs} +5 -5
  52. package/dist/{eas-build-BomfRnFT.mjs → eas-build-CwknaQYj.mjs} +4 -4
  53. package/dist/{eas-fallback-DJwZpy0c.mjs → eas-fallback-CSgAulr5.mjs} +27 -18
  54. package/dist/{eas-session-ledger-op6A54yi.mjs → eas-session-ledger-DlY_serQ.mjs} +8 -7
  55. package/dist/{error-diagnostics-Bf0rZvG9.mjs → error-diagnostics-DBWO2rxE.mjs} +10 -10
  56. package/dist/{exec-_UbtCQcG.mjs → exec-DEoAhcze.mjs} +155 -47
  57. package/dist/{exec-H20xSg2T.d.mts → exec-DnYc4HGH.d.mts} +17 -4
  58. package/dist/{gc-_-dCXdyL.mjs → gc-CXxN-4SE.mjs} +587 -313
  59. package/dist/gc-DnNDQyaP.mjs +3 -0
  60. package/dist/{guide-Yqwt2bd6.mjs → guide-Br0LEfKy.mjs} +239 -43
  61. package/dist/{hosted-android-Bw-honsd.mjs → hosted-android-B-9f-jkd.mjs} +6 -6
  62. package/dist/{hosted-client-DB_gBPfY.mjs → hosted-client-DZAPrcro.mjs} +4 -4
  63. package/dist/{hosted-ios-CUvOf4Vr.mjs → hosted-ios-CsCS21hn.mjs} +1 -1
  64. package/dist/{hosted-logs-DL_P5AdN.mjs → hosted-logs-FIRx9X2f.mjs} +5 -5
  65. package/dist/{hosted-macos-QI141yKk.mjs → hosted-macos-_awYSpfv.mjs} +21 -12
  66. package/dist/{hosted-native-Ksyjgzq-.mjs → hosted-native-BdzE668-.mjs} +27 -14
  67. package/dist/{idle-BVeRGroT.d.mts → idle-C4cZ757K.d.mts} +3 -3
  68. package/dist/{idle-shutdown-DaKmZi0z.mjs → idle-shutdown-DDg3SdvY.mjs} +7 -7
  69. package/dist/ios-CDvlmUs7.d.mts +24 -0
  70. package/dist/{ios-CQ68hG9s.mjs → ios-Ds1clbIt.mjs} +8 -8
  71. package/dist/{ios-device-CwFMehUS.mjs → ios-device--h_-8ENa.mjs} +3 -3
  72. package/dist/{ios-device-CXGP1bsD.mjs → ios-device-BXZ0c7Kb.mjs} +1 -1
  73. package/dist/{ios-CpByZy12.mjs → ios-hcBpnEGk.mjs} +81 -34
  74. package/dist/{ios-ubFsBzwq.mjs → ios-pm4nL6By.mjs} +59 -50
  75. package/dist/{ios-project-WuwwBdvW.mjs → ios-project-CZhKODF3.mjs} +5 -5
  76. package/dist/{ios-signing-DTTIChGs.mjs → ios-signing-BtAffm0A.mjs} +2 -2
  77. package/dist/{ios-state-DvFX-K_l.mjs → ios-state-Dtw5K2aI.mjs} +1 -1
  78. package/dist/{ios-qNJt4dFm.mjs → ios-xtlRHaeB.mjs} +1 -1
  79. package/dist/{js-swap-Cc1dttps.mjs → js-swap-Bwhh4S7V.mjs} +7 -29
  80. package/dist/{launch-Zq2mOSDy.mjs → launch-BjxemNpK.mjs} +40 -39
  81. package/dist/{launch-CD1yVc7U.mjs → launch-CCzXlc8r.mjs} +16 -16
  82. package/dist/{logs-BS00Anxf.mjs → logs-BfwwadsZ.mjs} +151 -24
  83. package/dist/{logs-CMm05HxN.mjs → logs-jTS_lHSo.mjs} +10 -17
  84. package/dist/{macos-B65--pPd.mjs → macos-DVlSSyUg.mjs} +1 -1
  85. package/dist/{macos-C-0qJ6zq.mjs → macos-NfV2D7dO.mjs} +143 -46
  86. package/dist/macos-run.mjs +1 -1
  87. package/dist/maintenance-run.mjs +8 -8
  88. package/dist/{metro-DEXpIhHC.mjs → metro-DiXtA3Ty.mjs} +59 -37
  89. package/dist/{metro-gateway-BMJNlj3E.mjs → metro-gateway-CKZqKqx7.mjs} +120 -22
  90. package/dist/{named-ports-BWTzt6mu.mjs → named-ports-DkEzOfzO.mjs} +40 -33
  91. package/dist/{native-android-JACyjTZs.mjs → native-android-CqgnOgsT.mjs} +43 -242
  92. package/dist/native-gradle-artifact-inputs-DHFnmrVf.mjs +270 -0
  93. package/dist/{native-gradle-inputs-Bep9JcSF.mjs → native-gradle-inputs-Dnh84Zbd.mjs} +3 -129
  94. package/dist/{native-run-DY_RLx3C.mjs → native-run-NwUuxbkg.mjs} +4 -5
  95. package/dist/{native-runtime-Dg1Q7tfF.mjs → native-runtime-B7KIafpM.mjs} +8 -7
  96. package/dist/native-source-Y0yLhFyQ.mjs +133 -0
  97. package/dist/{native-xcode-inputs-CB2iQeWq.mjs → native-xcode-inputs-D_VOfFL7.mjs} +2 -3
  98. package/dist/{native-xcode-ios-CXX39F7o.mjs → native-xcode-ios-BYDOHWLN.mjs} +27 -32
  99. package/dist/offload-worker.d.mts +65 -2
  100. package/dist/offload-worker.mjs +305 -73
  101. package/dist/operation-exec-BW0em61G.mjs +171 -0
  102. package/dist/{ownership-DEmM5vhh.mjs → ownership-C5fo5Edb.mjs} +3 -3
  103. package/dist/{page-CPaHeYqj.mjs → page-DBL2PiUU.mjs} +8 -4
  104. package/dist/{placement-log-BqGbTa61.mjs → placement-log-BnGgJRRZ.mjs} +1 -1
  105. package/dist/{plan-placement-Bwj-IjY1.mjs → plan-placement-DIsMtN-d.mjs} +12 -8
  106. package/dist/{ports-D-MmCTdv.mjs → ports-Cy1RkmuQ.mjs} +3 -3
  107. package/dist/{prebuild-uD_ipCxF.mjs → prebuild-D4JoEAEs.mjs} +49 -14
  108. package/dist/{project-BZNjmW_8.mjs → project-wM_XFTvE.mjs} +16 -16
  109. package/dist/{pull-request-Lfetn8Kr.mjs → pull-request-W1IuLXDt.mjs} +102 -20
  110. package/dist/{pull-request-zjCSAryH.d.mts → pull-request-eODyIqZF.d.mts} +6 -2
  111. package/dist/pull-requests.d.mts +2 -2
  112. package/dist/pull-requests.mjs +2 -2
  113. package/dist/{react-native-android-DuzH0cn3.mjs → react-native-android-6OZ7MSM7.mjs} +71 -48
  114. package/dist/{react-native-build-rhk4smwQ.mjs → react-native-build-Dvd8hC21.mjs} +8 -8
  115. package/dist/{react-native-doctor-CQpuIMso.mjs → react-native-doctor-DsoSF1Y9.mjs} +7 -7
  116. package/dist/{react-native-ios-Bhq1rJeV.mjs → react-native-ios-4u1Rn-GR.mjs} +40 -26
  117. package/dist/{recordings-DYteQSu4.mjs → recordings-CQmfzAh7.mjs} +1 -1
  118. package/dist/registration-BcRgF6Ox.mjs +51 -0
  119. package/dist/{reload-CmTRFJaX.mjs → reload-BzkYabB-.mjs} +16 -15
  120. package/dist/{reload-DzjSl5P_.mjs → reload-D7AVlb8N.mjs} +1 -1
  121. package/dist/{remote-ByYkXdGD.mjs → remote-DjGDmlTZ.mjs} +18 -15
  122. package/dist/{result-DNiS-tTP.mjs → result-D2Ykz_iD.mjs} +24 -23
  123. package/dist/{run-D23HmJMs.mjs → run-DidHghD1.mjs} +3 -2
  124. package/dist/{selection-CSl9i5qU.mjs → selection-DSMbWEX2.mjs} +6 -5
  125. package/dist/{server-bare-CxTrvDg8.mjs → server-bare-CafzuyFB.mjs} +2 -2
  126. package/dist/{server-command-CtzloH3v.mjs → server-command-C6QjeupS.mjs} +5 -5
  127. package/dist/{server-expo-DT_F_uVI.mjs → server-expo-CrjB29pq.mjs} +7 -5
  128. package/dist/server-expo-D58c9L0M.mjs +2 -0
  129. package/dist/{settings-CsJDEXgK.mjs → settings-C7O8A6ZI.mjs} +223 -243
  130. package/dist/{settings-T1gtc3bf.mjs → settings-DpR-1Wnn.mjs} +1 -1
  131. package/dist/{settings-write-HyVZ8eQ8.mjs → settings-write-CzD60rOD.mjs} +7 -6
  132. package/dist/settings.schema.json +13 -0
  133. package/dist/{simslim-Cgk17SXV.mjs → simslim-BNckWpXi.mjs} +2 -2
  134. package/dist/{slot-launch-DF8VfT64.mjs → slot-launch-CbfmNgM6.mjs} +6 -6
  135. package/dist/{stage-BIS0ydsV.mjs → stage-Bps5oius.mjs} +21 -4
  136. package/dist/{start-RChynRDp.mjs → start-Br-oxqMD.mjs} +1 -1
  137. package/dist/{start-7lpH7hmN.mjs → start-EojN4WFz.mjs} +622 -393
  138. package/dist/{state-C4ZtUisW.mjs → state--smjFSTL.mjs} +22 -7
  139. package/dist/{state-XMziexv2.mjs → state-08I3hw3_.mjs} +2 -2
  140. package/dist/{stats-53T7OTb9.mjs → stats-D3GerlFW.mjs} +5 -5
  141. package/dist/{stats-report-BFfMpWWF.mjs → stats-report-BzaPrRm6.mjs} +1 -1
  142. package/dist/{status-DqEUSSxs.mjs → status-BRROykC8.mjs} +2 -2
  143. package/dist/{status-CSi6tlRq.mjs → status-EvrK72L2.mjs} +1 -1
  144. package/dist/{status-BL7jVyAB.mjs → status-WBDajew2.mjs} +43 -29
  145. package/dist/{status-watch-GDCfqpTE.mjs → status-watch-Bg_u-pwR.mjs} +48 -16
  146. package/dist/status-worker.mjs +1 -1
  147. package/dist/{stim-desktop-C12we7lz.mjs → stim-desktop-D5OGpYZM.mjs} +2 -2
  148. package/dist/{stop-Bk_1qiV6.mjs → stop-DTZ9uTw3.mjs} +2 -2
  149. package/dist/{stop-D7h6jAXQ.mjs → stop-Dky10AEJ.mjs} +31 -22
  150. package/dist/{stop-CPzlM1L-.mjs → stop-Mv6W9FAk.mjs} +15 -16
  151. package/dist/supervisor-run.d.mts +3 -3
  152. package/dist/supervisor-run.mjs +28 -36
  153. package/dist/{support-Dlu37g6H.mjs → support-CNioewsd.mjs} +10 -10
  154. package/dist/{support-67vraa1Q.mjs → support-yUiOjnVY.mjs} +8 -8
  155. package/dist/swiftpm-artifact-inputs-DFcGsXDP.mjs +153 -0
  156. package/dist/swiftpm-macos-BIak-Rxv.mjs +532 -0
  157. package/dist/toolchain-BY8X8HXx.mjs +2 -0
  158. package/dist/{toolchain-Hp9sCpK4.mjs → toolchain-DpJMHq0n.mjs} +9 -6
  159. package/dist/{trigger-BAahxUPq.mjs → trigger-Cbyc41d_.mjs} +3 -3
  160. package/dist/trigger-yb_nFzPF.mjs +2 -0
  161. package/dist/{warm-progress-BHX5r0Ei.mjs → warm-progress-CA3TgT3-.mjs} +29 -16
  162. package/dist/web-CZ07gd77.mjs +2 -0
  163. package/dist/{web-CJmIj6AI.mjs → web-DKx6yoFA.mjs} +11 -10
  164. package/dist/web-run.mjs +11 -9
  165. package/dist/windows-report.mjs +1 -1
  166. package/dist/{workspace-state-Cjuigeeu.mjs → workspace-state-U08dEzhG.mjs} +3 -3
  167. package/dist/{workspaces-BccMFmGQ.mjs → workspaces-CpANmBlq.mjs} +594 -266
  168. package/dist/{worktree-DQ6Zi2Mv.mjs → worktree-CHecZ4Oq.mjs} +850 -551
  169. package/dist/worktree-ZqZVjD9K.mjs +2 -0
  170. package/dist/{xcode-Zlx3qjEs.mjs → xcode-BXn9-xYx.mjs} +5 -5
  171. package/package.json +7 -7
  172. package/shim/android-audio/Main.java +24 -0
  173. package/shim/android-audio/README.md +17 -0
  174. package/shim/android-audio.jar +0 -0
  175. package/dist/gc-C-WwL0yi.mjs +0 -3
  176. package/dist/git-C3iTsJaZ.mjs +0 -73
  177. package/dist/server-expo-C-90EhcG.mjs +0 -2
  178. package/dist/settings-DkdmlelE.d.mts +0 -15
  179. package/dist/swiftpm-macos-p8WZbxKU.mjs +0 -130
  180. package/dist/toolchain-DhKwp9iI.mjs +0 -2
  181. package/dist/trigger-Bf3uDcpv.mjs +0 -2
  182. package/dist/web-DknQETPs.mjs +0 -2
  183. package/dist/workspace-process-lock-1_1OoVW5.mjs +0 -57
  184. package/dist/worktree-CK2MpJW5.mjs +0 -2
@@ -0,0 +1,2 @@
1
+ import { _ as worktreeCommand, a as matchWorktreeEntry, c as reclaimKeys, d as removalBlockers, f as removalPath, g as warmedWorkspace, h as warmWorktreeTarget, i as excludeWatchmanCookies, l as registerRemove, m as removeWorktreeTarget, n as dependencyInstallCommand, o as nestedWorktrees, p as removalRemedy, r as excludePodChurn, s as porcelainPath, t as customIosDirs, u as registerWarm } from "./worktree-CHecZ4Oq.mjs";
2
+ export { customIosDirs, worktreeCommand as default, dependencyInstallCommand, excludePodChurn, excludeWatchmanCookies, matchWorktreeEntry, nestedWorktrees, porcelainPath, reclaimKeys, registerRemove, registerWarm, removalBlockers, removalPath, removalRemedy, removeWorktreeTarget, warmWorktreeTarget, warmedWorkspace };
@@ -1,11 +1,11 @@
1
- import { c as stopDeclaringSpawnsOn, f as ownership_claim_exports, i as declareSpawnsOn, s as spawnDeclared, t as getExecutor } from "./exec-_UbtCQcG.mjs";
1
+ import { c as declareSpawnsOn, d as spawnDeclared, f as stopDeclaringSpawnsOn, t as getExecutor, x as ownership_claim_exports } from "./exec-DEoAhcze.mjs";
2
2
  import { u as workspaceDerivedData } from "./paths-DQtTgsBf.mjs";
3
3
  import { t as createLineReader } from "./process-output-Fpl8PYi8.mjs";
4
- import { a as formatElapsed, l as phaseLine } from "./command-output-B1UrjZHL.mjs";
5
- import { qt as killOnAbort } from "./settings-CsJDEXgK.mjs";
6
- import { d as runCancellationSignal, h as shareCompilationCache } from "./native-run-DY_RLx3C.mjs";
4
+ import { a as formatElapsed, l as phaseLine } from "./command-output-gwpm28fu.mjs";
5
+ import { a as killOnAbort } from "./operation-exec-BW0em61G.mjs";
6
+ import { d as runCancellationSignal, h as shareCompilationCache } from "./native-run-NwUuxbkg.mjs";
7
7
  import { p as resolveOptimizations } from "./errors-ccaPc4ox.mjs";
8
- import { t as cleanLine } from "./server-expo-DT_F_uVI.mjs";
8
+ import { t as cleanLine } from "./server-expo-CrjB29pq.mjs";
9
9
  import { createHash } from "node:crypto";
10
10
  import { existsSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
11
11
  import { basename, isAbsolute, join, relative, resolve, sep } from "node:path";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stim",
3
- "version": "1.21.0",
3
+ "version": "1.22.0",
4
4
  "description": "Stim: fast, isolated React Native environments for coding agents",
5
5
  "keywords": [
6
6
  "agent",
@@ -53,11 +53,11 @@
53
53
  },
54
54
  "dependencies": {
55
55
  "@expo/fingerprint": "^0.20.10",
56
- "@stim-cli/agent-driver": "^1.21.0",
57
- "@stim-cli/agent-driver-agent-device": "^1.21.0",
58
- "@stim-cli/cache": "^1.21.0",
59
- "@stim-cli/core": "^1.21.0",
60
- "@stim-cli/metro": "^1.21.0",
56
+ "@stim-cli/agent-driver": "^1.22.0",
57
+ "@stim-cli/agent-driver-agent-device": "^1.22.0",
58
+ "@stim-cli/cache": "^1.22.0",
59
+ "@stim-cli/core": "^1.22.0",
60
+ "@stim-cli/metro": "^1.22.0",
61
61
  "@xmldom/xmldom": "0.9.12",
62
62
  "chalk": "^6.0.0",
63
63
  "commander": "^15.0.0",
@@ -66,7 +66,7 @@
66
66
  "ws": "^8.21.3"
67
67
  },
68
68
  "devDependencies": {
69
- "@stim-cli/expo-build-cache": "1.21.0",
69
+ "@stim-cli/expo-build-cache": "1.22.0",
70
70
  "@types/cross-spawn": "^6.0.6",
71
71
  "@types/which": "^3.0.4",
72
72
  "@types/ws": "^8.18.1",
@@ -0,0 +1,24 @@
1
+ package dev.stim.audio;
2
+
3
+ import android.content.Context;
4
+ import android.media.AudioManager;
5
+ import android.os.Looper;
6
+
7
+ public final class Main {
8
+ public static void main(String[] args) throws Exception {
9
+ if (args.length != 1) throw new IllegalArgumentException("Expected one media volume index");
10
+ Looper.prepareMainLooper();
11
+ Class<?> activityThread = Class.forName("android.app.ActivityThread");
12
+ Object thread = activityThread.getDeclaredMethod("systemMain").invoke(null);
13
+ Context system = (Context) activityThread.getDeclaredMethod("getSystemContext").invoke(thread);
14
+ // AudioService's AppOps check requires the shell UID's actual package.
15
+ Context shell = system.createPackageContext("com.android.shell", 0);
16
+ AudioManager audio = (AudioManager) shell.getSystemService(Context.AUDIO_SERVICE);
17
+ int volume = Integer.parseInt(args[0]);
18
+ if (volume < 0 || volume > audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC)) {
19
+ throw new IllegalArgumentException("Media volume out of range");
20
+ }
21
+ audio.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
22
+ System.out.println(audio.getStreamVolume(AudioManager.STREAM_MUSIC));
23
+ }
24
+ }
@@ -0,0 +1,17 @@
1
+ # Android media control
2
+
3
+ `Main.java` calls Android's media-volume API with the shell package identity.
4
+ The CLI and Desktop bundle the same small helper; users do not need a host JDK.
5
+ Desktop stores its copy as base64 so its Sources tree remains ASCII-only.
6
+
7
+ To rebuild both checked-in artifacts, use JDK 17 or later, Android SDK Platform
8
+ 34 and Build Tools 35.0.1, then run from the repository root:
9
+
10
+ ```sh
11
+ ANDROID_HOME=/path/to/android-sdk node scripts/build-android-audio.mjs
12
+ ```
13
+
14
+ The build pins the Android inputs and jar timestamps. Runtime callers transfer
15
+ an invocation-specific file only to their verified emulator and remove it after
16
+ use. They confirm the requested media volume independently; ringtone and alarm
17
+ streams are unchanged.
Binary file
@@ -1,3 +0,0 @@
1
- import { Ct as describeParkedSims, Dt as findOrphanedDevices, Ot as findStaleDeviceRecords, it as selectCaches, kt as findStaleProjectDevices, wt as describeUnverifiableDevices, xt as deleteParkedSims } from "./budget-Bs6SxxzO.mjs";
2
- import { a as formatGcReport, i as runGc, n as gcCommand, r as readGcReport, t as collectGcReport } from "./gc-_-dCXdyL.mjs";
3
- export { collectGcReport, gcCommand as default, deleteParkedSims, describeParkedSims, describeUnverifiableDevices, findOrphanedDevices, findStaleDeviceRecords, findStaleProjectDevices, formatGcReport, readGcReport, runGc, selectCaches };
@@ -1,73 +0,0 @@
1
- import { t as getExecutor } from "./exec-_UbtCQcG.mjs";
2
- //#region src/workspace/git.ts
3
- const GIT_TIMEOUT_MS = 1e4;
4
- const GIT_CONCURRENCY = 6;
5
- function gitCall(cwd, args, { write, signal: _signal, timeoutMs = GIT_TIMEOUT_MS, ...opts }) {
6
- return {
7
- args: [
8
- ...write ? [] : ["--no-optional-locks"],
9
- "-C",
10
- cwd,
11
- ...args
12
- ],
13
- opts: {
14
- ...opts,
15
- timeoutMs
16
- }
17
- };
18
- }
19
- /** Runs git in `cwd`, bounded by `timeoutMs` (10 s by default); throws like `runFile`. */
20
- function git(cwd, args, opts = {}) {
21
- const call = gitCall(cwd, args, opts);
22
- return getExecutor().runFile("git", call.args, call.opts);
23
- }
24
- /** `git`, returning null instead of throwing. */
25
- function gitQuiet(cwd, args, opts = {}) {
26
- const call = gitCall(cwd, args, opts);
27
- return getExecutor().runFileQuiet("git", call.args, call.opts);
28
- }
29
- const queue = [];
30
- let running = 0;
31
- /** `git` without blocking the event loop, at most six at a time; the budget starts when the call leaves the queue. */
32
- async function gitAsync(cwd, args, opts = {}) {
33
- const signal = opts.signal ?? getExecutor().reportSignal?.();
34
- signal?.throwIfAborted();
35
- if (running < GIT_CONCURRENCY) running++;
36
- else await new Promise((resolve, reject) => {
37
- const proceed = () => {
38
- signal?.removeEventListener("abort", cancel);
39
- resolve();
40
- };
41
- const cancel = () => {
42
- const index = queue.indexOf(proceed);
43
- if (index !== -1) queue.splice(index, 1);
44
- reject(signal?.reason);
45
- };
46
- queue.push(proceed);
47
- signal?.addEventListener("abort", cancel, { once: true });
48
- if (signal?.aborted) cancel();
49
- });
50
- try {
51
- signal?.throwIfAborted();
52
- const call = gitCall(cwd, args, opts);
53
- return await getExecutor().runFileAsync("git", call.args, {
54
- ...call.opts,
55
- signal
56
- });
57
- } finally {
58
- const next = queue.shift();
59
- if (next) next();
60
- else running--;
61
- signal?.throwIfAborted();
62
- }
63
- }
64
- /** `gitAsync`, returning null instead of throwing. */
65
- async function gitQuietAsync(cwd, args, opts = {}) {
66
- try {
67
- return await gitAsync(cwd, args, opts);
68
- } catch {
69
- return null;
70
- }
71
- }
72
- //#endregion
73
- export { gitQuietAsync as i, gitAsync as n, gitQuiet as r, git as t };
@@ -1,2 +0,0 @@
1
- import { p as startExpoServer } from "./server-expo-DT_F_uVI.mjs";
2
- export { startExpoServer };
@@ -1,15 +0,0 @@
1
- import "./exec-H20xSg2T.mjs";
2
- import { StimContext } from "@stim-cli/core";
3
- import { SettingScope, SettingsObject, WebViewport } from "@stim-cli/core/state";
4
- import { ProcessRecord } from "@stim-cli/core/process-identity";
5
- import "@stim-cli/cache";
6
- //#region src/supervisor/state.d.ts
7
- declare const MODE_BARE = "bare-inproc";
8
- declare const MODE_EXPO = "expo-child";
9
- type WorkspaceLaunchPlatform = "ios" | "android";
10
- declare function clearWorkspaceSupervisor(root: string, expected?: ProcessRecord | null): boolean;
11
- declare function clearExpoMetroTunnel(root: string): void;
12
- declare function writePidFile(root: string, pid: number): string;
13
- declare function readPidFile(root: string): number | null;
14
- //#endregion
15
- export { clearExpoMetroTunnel as a, writePidFile as c, WorkspaceLaunchPlatform as i, MODE_BARE as n, clearWorkspaceSupervisor as o, MODE_EXPO as r, readPidFile as s, SettingsObject as t };
@@ -1,130 +0,0 @@
1
- import { s as spawnDeclared, t as getExecutor } from "./exec-_UbtCQcG.mjs";
2
- import { It as repoRootAsync } from "./settings-CsJDEXgK.mjs";
3
- import { c as macosToolchainAsync } from "./toolchain-Hp9sCpK4.mjs";
4
- import { i as validateInfoPlist, n as setBundleName, r as stageBundle, t as resolveBundleExtras } from "./stage-BIS0ydsV.mjs";
5
- import { t as logLines } from "./run-D23HmJMs.mjs";
6
- import { existsSync, realpathSync } from "node:fs";
7
- import { join, relative, resolve } from "node:path";
8
- //#region src/integrations/swiftpm-macos.ts
9
- function swiftpmMacosProject(root) {
10
- return { async prepare(context, settings) {
11
- const macos = settings.macos;
12
- if (!macos?.product || !macos.infoPlist) throw Object.assign(/* @__PURE__ */ new Error("Set macos.product and macos.infoPlist explicitly in .stim.json. See stim guide macos."), { code: "STIM_BAD_ARG" });
13
- const { product, infoPlist } = macos;
14
- const { bundleId } = await validateInfoPlist(context, root, product, infoPlist);
15
- const repository = realpathSync(await repoRootAsync(root, {
16
- env: context.env,
17
- signal: context.signal
18
- }) ?? root);
19
- const extras = resolveBundleExtras(root, repository, macos.resources, macos.assetCatalog);
20
- return {
21
- product,
22
- arguments: macos.arguments ?? [],
23
- bundleId,
24
- async compile({ scratch, writer, note }) {
25
- await tool(context, root, [
26
- "build",
27
- "-c",
28
- "debug",
29
- "--product",
30
- product,
31
- "--scratch-path",
32
- scratch,
33
- "--jobs",
34
- "2"
35
- ], writer, note);
36
- return tool(context, root, [
37
- "build",
38
- "-c",
39
- "debug",
40
- "--scratch-path",
41
- scratch,
42
- "--show-bin-path"
43
- ], writer, () => {}, true);
44
- },
45
- stage: (bin, bundle, id, displayName) => stageBundle(context, root, product, infoPlist, bin, bundle, id, extras, displayName),
46
- async validateFetched(bundle, id, displayName) {
47
- const executable = join(bundle, "Contents", "MacOS", product);
48
- const plist = JSON.parse(await getExecutor().runFileAsync("plutil", [
49
- "-convert",
50
- "json",
51
- "-o",
52
- "-",
53
- join(bundle, "Contents", "Info.plist")
54
- ], {
55
- timeoutMs: 1e4,
56
- declareFor: context
57
- }));
58
- if (plist.CFBundleIdentifier !== id || plist.CFBundleExecutable !== product || !existsSync(executable)) throw new Error("The fetched macOS bundle does not match the requested identity and executable.");
59
- for (const destination of [...Object.keys(extras.resources), ...extras.assetCatalog ? ["Assets.car"] : []]) if (!existsSync(join(bundle, "Contents", "Resources", destination))) throw new Error(`The fetched macOS bundle lacks declared resource ${destination}.`);
60
- if (displayName !== void 0) {
61
- await setBundleName(context, join(bundle, "Contents", "Info.plist"), displayName);
62
- await getExecutor().runFileAsync("codesign", [
63
- "--force",
64
- "--sign",
65
- "-",
66
- bundle
67
- ], {
68
- timeoutMs: "unbounded",
69
- declareFor: context
70
- });
71
- }
72
- await getExecutor().runFileAsync("codesign", [
73
- "--verify",
74
- "--strict",
75
- bundle
76
- ], {
77
- timeoutMs: "unbounded",
78
- declareFor: context
79
- });
80
- },
81
- offload: {
82
- target: async () => ({
83
- platform: "macos",
84
- local: await macosToolchainAsync()
85
- }),
86
- request: (id) => ({
87
- platform: "macos",
88
- product,
89
- infoPlist: relative(root, resolve(root, infoPlist)),
90
- bundleId: id,
91
- resources: Object.fromEntries(Object.entries(extras.resources).map(([destination, source]) => [destination, relative(repository, source)])),
92
- assetCatalog: extras.assetCatalog ? relative(repository, extras.assetCatalog) : null
93
- })
94
- }
95
- };
96
- } };
97
- }
98
- async function tool(context, root, args, writer, note, capture = false) {
99
- const child = spawnDeclared(context, () => getExecutor().spawn("swift", args, {
100
- cwd: root,
101
- detached: true,
102
- stdio: [
103
- "ignore",
104
- "pipe",
105
- "pipe"
106
- ]
107
- }));
108
- let stdout = "";
109
- child.stdout?.on("data", (chunk) => {
110
- if (capture) stdout += chunk.toString("utf8");
111
- });
112
- const write = (msg) => {
113
- writer.write({
114
- src: "build",
115
- platform: "macos",
116
- level: "debug",
117
- msg
118
- });
119
- note(msg);
120
- };
121
- if (child.stdout) logLines(child.stdout, write);
122
- if (child.stderr) logLines(child.stderr, write);
123
- await new Promise((done, reject) => {
124
- child.once("error", reject);
125
- child.once("close", (code) => code === 0 ? done() : reject(/* @__PURE__ */ new Error(`swift ${args[0]} failed (${code}). See stim logs --source build.`)));
126
- });
127
- return stdout.trim();
128
- }
129
- //#endregion
130
- export { swiftpmMacosProject };
@@ -1,2 +0,0 @@
1
- import { c as macosToolchainAsync, s as macosToolchain } from "./toolchain-Hp9sCpK4.mjs";
2
- export { macosToolchain, macosToolchainAsync };
@@ -1,2 +0,0 @@
1
- import { t as triggerMaintenance } from "./trigger-BAahxUPq.mjs";
2
- export { triggerMaintenance };
@@ -1,2 +0,0 @@
1
- import { n as webCommand, t as runWeb } from "./web-CJmIj6AI.mjs";
2
- export { webCommand as default, runWeb };
@@ -1,57 +0,0 @@
1
- import { c as stopDeclaringSpawnsOn, f as ownership_claim_exports, i as declareSpawnsOn } from "./exec-_UbtCQcG.mjs";
2
- import { join } from "node:path";
3
- import { setTimeout } from "node:timers/promises";
4
- //#region src/engine/workspace-process-lock.ts
5
- const DEFAULT_WAIT_MS = 6e4;
6
- const POLL_MS = 25;
7
- function workspaceProcessLockError(err) {
8
- const code = err?.code;
9
- if (code === "STIM_LOCK_REFUSED") return "refused";
10
- if (code === "STIM_LOCK_TIMEOUT") return "timeout";
11
- return null;
12
- }
13
- function workspaceProcessLockPath(root, name, external) {
14
- return external ? join(root, `${name}.lock`) : join(root, ".stim", `${name}.lock`);
15
- }
16
- async function withWorkspaceProcessLock(root, name, fn, { now = Date.now, signal, sleep = (ms) => setTimeout(ms, void 0, { signal }), waitMs = DEFAULT_WAIT_MS, ownerPurpose, details = {}, onHeld, rejectOwnerPurposes = [], external = false, declareSpawnsFor } = {}) {
17
- const path = workspaceProcessLockPath(root, name, external);
18
- const deadline = now() + waitMs;
19
- for (;;) {
20
- signal?.throwIfAborted();
21
- const attempt = (0, ownership_claim_exports.tryAcquireClaim)({
22
- root: path,
23
- mode: "exclusive",
24
- label: `${name} lock`,
25
- details: ownerPurpose ? {
26
- ...details,
27
- purpose: ownerPurpose
28
- } : details
29
- });
30
- if (attempt.pending) (0, ownership_claim_exports.releaseClaim)(attempt.pending);
31
- if (attempt.acquired) {
32
- if (declareSpawnsFor) declareSpawnsOn(declareSpawnsFor, attempt.acquired);
33
- try {
34
- return await fn(attempt.acquired);
35
- } finally {
36
- if (declareSpawnsFor) stopDeclaringSpawnsOn(declareSpawnsFor, attempt.acquired);
37
- (0, ownership_claim_exports.releaseClaim)(attempt.acquired);
38
- }
39
- }
40
- const holder = attempt.held ?? attempt.waitingFor?.[0];
41
- const purpose = holder?.details.purpose;
42
- if (typeof purpose === "string" && rejectOwnerPurposes.includes(purpose)) {
43
- const error = /* @__PURE__ */ new Error(`The ${name} lock at ${path} is held for ${purpose}.`);
44
- error.code = "STIM_LOCK_REFUSED";
45
- throw error;
46
- }
47
- if (holder && onHeld) await onHeld(holder);
48
- if (now() >= deadline) {
49
- const error = /* @__PURE__ */ new Error(`Timed out waiting for the ${name} lock at ${path}.`);
50
- error.code = "STIM_LOCK_TIMEOUT";
51
- throw error;
52
- }
53
- await sleep(POLL_MS);
54
- }
55
- }
56
- //#endregion
57
- export { workspaceProcessLockError as n, workspaceProcessLockPath as r, withWorkspaceProcessLock as t };
@@ -1,2 +0,0 @@
1
- import { a as matchWorktreeEntry, c as reclaimKeys, d as removalBlockers, f as removalPath, g as worktreeCommand, h as warmedWorkspace, i as excludeWatchmanCookies, l as registerRemove, m as removeWorktreeTarget, n as dependencyInstallCommand, o as nestedWorktrees, p as removalRemedy, r as excludePodChurn, s as porcelainPath, t as customIosDirs, u as registerWarm } from "./worktree-DQ6Zi2Mv.mjs";
2
- export { customIosDirs, worktreeCommand as default, dependencyInstallCommand, excludePodChurn, excludeWatchmanCookies, matchWorktreeEntry, nestedWorktrees, porcelainPath, reclaimKeys, registerRemove, registerWarm, removalBlockers, removalPath, removalRemedy, removeWorktreeTarget, warmedWorkspace };