execbro 0.0.1-reserve → 1.10.13

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 (475) hide show
  1. package/LICENSE +32 -0
  2. package/README.md +496 -0
  3. package/build/__tests__/helpers/fake-cdp-server.d.ts +56 -0
  4. package/build/__tests__/helpers/fake-cdp-server.d.ts.map +1 -0
  5. package/build/__tests__/helpers/fake-cdp-server.js +120 -0
  6. package/build/__tests__/helpers/fake-cdp-server.js.map +1 -0
  7. package/build/__tests__/helpers/tap-test-helpers.d.ts +36 -0
  8. package/build/__tests__/helpers/tap-test-helpers.d.ts.map +1 -0
  9. package/build/__tests__/helpers/tap-test-helpers.js +130 -0
  10. package/build/__tests__/helpers/tap-test-helpers.js.map +1 -0
  11. package/build/__tests__/integration/auto-reconnect.test.d.ts +2 -0
  12. package/build/__tests__/integration/auto-reconnect.test.d.ts.map +1 -0
  13. package/build/__tests__/integration/auto-reconnect.test.js +118 -0
  14. package/build/__tests__/integration/auto-reconnect.test.js.map +1 -0
  15. package/build/__tests__/integration/connection-health.test.d.ts +2 -0
  16. package/build/__tests__/integration/connection-health.test.d.ts.map +1 -0
  17. package/build/__tests__/integration/connection-health.test.js +157 -0
  18. package/build/__tests__/integration/connection-health.test.js.map +1 -0
  19. package/build/__tests__/integration/execute-in-app.test.d.ts +2 -0
  20. package/build/__tests__/integration/execute-in-app.test.d.ts.map +1 -0
  21. package/build/__tests__/integration/execute-in-app.test.js +124 -0
  22. package/build/__tests__/integration/execute-in-app.test.js.map +1 -0
  23. package/build/__tests__/integration/per-call-timeout.test.d.ts +2 -0
  24. package/build/__tests__/integration/per-call-timeout.test.d.ts.map +1 -0
  25. package/build/__tests__/integration/per-call-timeout.test.js +103 -0
  26. package/build/__tests__/integration/per-call-timeout.test.js.map +1 -0
  27. package/build/__tests__/integration/tap-strategies.test.d.ts +2 -0
  28. package/build/__tests__/integration/tap-strategies.test.d.ts.map +1 -0
  29. package/build/__tests__/integration/tap-strategies.test.js +330 -0
  30. package/build/__tests__/integration/tap-strategies.test.js.map +1 -0
  31. package/build/__tests__/integration/tools.test.d.ts +2 -0
  32. package/build/__tests__/integration/tools.test.d.ts.map +1 -0
  33. package/build/__tests__/integration/tools.test.js +227 -0
  34. package/build/__tests__/integration/tools.test.js.map +1 -0
  35. package/build/__tests__/setup.d.ts +2 -0
  36. package/build/__tests__/setup.d.ts.map +1 -0
  37. package/build/__tests__/setup.js +15 -0
  38. package/build/__tests__/setup.js.map +1 -0
  39. package/build/__tests__/unit/androidEmulatorAvds.test.d.ts +2 -0
  40. package/build/__tests__/unit/androidEmulatorAvds.test.d.ts.map +1 -0
  41. package/build/__tests__/unit/androidEmulatorAvds.test.js +98 -0
  42. package/build/__tests__/unit/androidEmulatorAvds.test.js.map +1 -0
  43. package/build/__tests__/unit/buildToken.test.d.ts +2 -0
  44. package/build/__tests__/unit/buildToken.test.d.ts.map +1 -0
  45. package/build/__tests__/unit/buildToken.test.js +22 -0
  46. package/build/__tests__/unit/buildToken.test.js.map +1 -0
  47. package/build/__tests__/unit/bundle.test.d.ts +2 -0
  48. package/build/__tests__/unit/bundle.test.d.ts.map +1 -0
  49. package/build/__tests__/unit/bundle.test.js +53 -0
  50. package/build/__tests__/unit/bundle.test.js.map +1 -0
  51. package/build/__tests__/unit/burst.test.d.ts +2 -0
  52. package/build/__tests__/unit/burst.test.d.ts.map +1 -0
  53. package/build/__tests__/unit/burst.test.js +54 -0
  54. package/build/__tests__/unit/burst.test.js.map +1 -0
  55. package/build/__tests__/unit/connection-health.test.d.ts +2 -0
  56. package/build/__tests__/unit/connection-health.test.d.ts.map +1 -0
  57. package/build/__tests__/unit/connection-health.test.js +38 -0
  58. package/build/__tests__/unit/connection-health.test.js.map +1 -0
  59. package/build/__tests__/unit/debugGlobals.test.d.ts +2 -0
  60. package/build/__tests__/unit/debugGlobals.test.d.ts.map +1 -0
  61. package/build/__tests__/unit/debugGlobals.test.js +14 -0
  62. package/build/__tests__/unit/debugGlobals.test.js.map +1 -0
  63. package/build/__tests__/unit/deviceDiscovery.test.d.ts +2 -0
  64. package/build/__tests__/unit/deviceDiscovery.test.d.ts.map +1 -0
  65. package/build/__tests__/unit/deviceDiscovery.test.js +119 -0
  66. package/build/__tests__/unit/deviceDiscovery.test.js.map +1 -0
  67. package/build/__tests__/unit/deviceResolver.test.d.ts +2 -0
  68. package/build/__tests__/unit/deviceResolver.test.d.ts.map +1 -0
  69. package/build/__tests__/unit/deviceResolver.test.js +261 -0
  70. package/build/__tests__/unit/deviceResolver.test.js.map +1 -0
  71. package/build/__tests__/unit/escapeNonAscii.test.d.ts +2 -0
  72. package/build/__tests__/unit/escapeNonAscii.test.d.ts.map +1 -0
  73. package/build/__tests__/unit/escapeNonAscii.test.js +76 -0
  74. package/build/__tests__/unit/escapeNonAscii.test.js.map +1 -0
  75. package/build/__tests__/unit/exec.test.d.ts +2 -0
  76. package/build/__tests__/unit/exec.test.d.ts.map +1 -0
  77. package/build/__tests__/unit/exec.test.js +54 -0
  78. package/build/__tests__/unit/exec.test.js.map +1 -0
  79. package/build/__tests__/unit/executor.test.d.ts +2 -0
  80. package/build/__tests__/unit/executor.test.d.ts.map +1 -0
  81. package/build/__tests__/unit/executor.test.js +220 -0
  82. package/build/__tests__/unit/executor.test.js.map +1 -0
  83. package/build/__tests__/unit/failureArtifact.test.d.ts +2 -0
  84. package/build/__tests__/unit/failureArtifact.test.d.ts.map +1 -0
  85. package/build/__tests__/unit/failureArtifact.test.js +207 -0
  86. package/build/__tests__/unit/failureArtifact.test.js.map +1 -0
  87. package/build/__tests__/unit/fastRefreshRecorder.test.d.ts +2 -0
  88. package/build/__tests__/unit/fastRefreshRecorder.test.d.ts.map +1 -0
  89. package/build/__tests__/unit/fastRefreshRecorder.test.js +68 -0
  90. package/build/__tests__/unit/fastRefreshRecorder.test.js.map +1 -0
  91. package/build/__tests__/unit/fastRefreshTools.test.d.ts +2 -0
  92. package/build/__tests__/unit/fastRefreshTools.test.d.ts.map +1 -0
  93. package/build/__tests__/unit/fastRefreshTools.test.js +112 -0
  94. package/build/__tests__/unit/fastRefreshTools.test.js.map +1 -0
  95. package/build/__tests__/unit/fiberMatch.test.d.ts +2 -0
  96. package/build/__tests__/unit/fiberMatch.test.d.ts.map +1 -0
  97. package/build/__tests__/unit/fiberMatch.test.js +114 -0
  98. package/build/__tests__/unit/fiberMatch.test.js.map +1 -0
  99. package/build/__tests__/unit/fingerprint.test.d.ts +2 -0
  100. package/build/__tests__/unit/fingerprint.test.d.ts.map +1 -0
  101. package/build/__tests__/unit/fingerprint.test.js +99 -0
  102. package/build/__tests__/unit/fingerprint.test.js.map +1 -0
  103. package/build/__tests__/unit/focusedInput.test.d.ts +2 -0
  104. package/build/__tests__/unit/focusedInput.test.d.ts.map +1 -0
  105. package/build/__tests__/unit/focusedInput.test.js +58 -0
  106. package/build/__tests__/unit/focusedInput.test.js.map +1 -0
  107. package/build/__tests__/unit/focusedInputTools.test.d.ts +2 -0
  108. package/build/__tests__/unit/focusedInputTools.test.d.ts.map +1 -0
  109. package/build/__tests__/unit/focusedInputTools.test.js +79 -0
  110. package/build/__tests__/unit/focusedInputTools.test.js.map +1 -0
  111. package/build/__tests__/unit/iconSemantics.test.d.ts +2 -0
  112. package/build/__tests__/unit/iconSemantics.test.d.ts.map +1 -0
  113. package/build/__tests__/unit/iconSemantics.test.js +80 -0
  114. package/build/__tests__/unit/iconSemantics.test.js.map +1 -0
  115. package/build/__tests__/unit/imageBuffer.test.d.ts +2 -0
  116. package/build/__tests__/unit/imageBuffer.test.d.ts.map +1 -0
  117. package/build/__tests__/unit/imageBuffer.test.js +128 -0
  118. package/build/__tests__/unit/imageBuffer.test.js.map +1 -0
  119. package/build/__tests__/unit/logs.test.d.ts +2 -0
  120. package/build/__tests__/unit/logs.test.d.ts.map +1 -0
  121. package/build/__tests__/unit/logs.test.js +90 -0
  122. package/build/__tests__/unit/logs.test.js.map +1 -0
  123. package/build/__tests__/unit/measureComponent.test.d.ts +2 -0
  124. package/build/__tests__/unit/measureComponent.test.d.ts.map +1 -0
  125. package/build/__tests__/unit/measureComponent.test.js +66 -0
  126. package/build/__tests__/unit/measureComponent.test.js.map +1 -0
  127. package/build/__tests__/unit/measureComponentTools.test.d.ts +2 -0
  128. package/build/__tests__/unit/measureComponentTools.test.d.ts.map +1 -0
  129. package/build/__tests__/unit/measureComponentTools.test.js +94 -0
  130. package/build/__tests__/unit/measureComponentTools.test.js.map +1 -0
  131. package/build/__tests__/unit/metro.test.d.ts +2 -0
  132. package/build/__tests__/unit/metro.test.d.ts.map +1 -0
  133. package/build/__tests__/unit/metro.test.js +61 -0
  134. package/build/__tests__/unit/metro.test.js.map +1 -0
  135. package/build/__tests__/unit/network.test.d.ts +2 -0
  136. package/build/__tests__/unit/network.test.d.ts.map +1 -0
  137. package/build/__tests__/unit/network.test.js +102 -0
  138. package/build/__tests__/unit/network.test.js.map +1 -0
  139. package/build/__tests__/unit/networkInterceptor.test.d.ts +2 -0
  140. package/build/__tests__/unit/networkInterceptor.test.d.ts.map +1 -0
  141. package/build/__tests__/unit/networkInterceptor.test.js +104 -0
  142. package/build/__tests__/unit/networkInterceptor.test.js.map +1 -0
  143. package/build/__tests__/unit/probe.test.d.ts +2 -0
  144. package/build/__tests__/unit/probe.test.d.ts.map +1 -0
  145. package/build/__tests__/unit/probe.test.js +62 -0
  146. package/build/__tests__/unit/probe.test.js.map +1 -0
  147. package/build/__tests__/unit/rnGlobalsBootstrap.test.d.ts +2 -0
  148. package/build/__tests__/unit/rnGlobalsBootstrap.test.d.ts.map +1 -0
  149. package/build/__tests__/unit/rnGlobalsBootstrap.test.js +29 -0
  150. package/build/__tests__/unit/rnGlobalsBootstrap.test.js.map +1 -0
  151. package/build/__tests__/unit/screenState.test.d.ts +2 -0
  152. package/build/__tests__/unit/screenState.test.d.ts.map +1 -0
  153. package/build/__tests__/unit/screenState.test.js +384 -0
  154. package/build/__tests__/unit/screenState.test.js.map +1 -0
  155. package/build/__tests__/unit/screenshot-diff.test.d.ts +2 -0
  156. package/build/__tests__/unit/screenshot-diff.test.d.ts.map +1 -0
  157. package/build/__tests__/unit/screenshot-diff.test.js +97 -0
  158. package/build/__tests__/unit/screenshot-diff.test.js.map +1 -0
  159. package/build/__tests__/unit/tap-evidence.test.d.ts +2 -0
  160. package/build/__tests__/unit/tap-evidence.test.d.ts.map +1 -0
  161. package/build/__tests__/unit/tap-evidence.test.js +89 -0
  162. package/build/__tests__/unit/tap-evidence.test.js.map +1 -0
  163. package/build/__tests__/unit/tap.test.d.ts +2 -0
  164. package/build/__tests__/unit/tap.test.d.ts.map +1 -0
  165. package/build/__tests__/unit/tap.test.js +767 -0
  166. package/build/__tests__/unit/tap.test.js.map +1 -0
  167. package/build/__tests__/unit/timeoutClamp.test.d.ts +2 -0
  168. package/build/__tests__/unit/timeoutClamp.test.d.ts.map +1 -0
  169. package/build/__tests__/unit/timeoutClamp.test.js +17 -0
  170. package/build/__tests__/unit/timeoutClamp.test.js.map +1 -0
  171. package/build/__tests__/unit/toolDescriptions.test.d.ts +2 -0
  172. package/build/__tests__/unit/toolDescriptions.test.d.ts.map +1 -0
  173. package/build/__tests__/unit/toolDescriptions.test.js +145 -0
  174. package/build/__tests__/unit/toolDescriptions.test.js.map +1 -0
  175. package/build/__tests__/unit/transportClassify.test.d.ts +2 -0
  176. package/build/__tests__/unit/transportClassify.test.d.ts.map +1 -0
  177. package/build/__tests__/unit/transportClassify.test.js +60 -0
  178. package/build/__tests__/unit/transportClassify.test.js.map +1 -0
  179. package/build/__tests__/unit/verifyAction.test.d.ts +2 -0
  180. package/build/__tests__/unit/verifyAction.test.d.ts.map +1 -0
  181. package/build/__tests__/unit/verifyAction.test.js +26 -0
  182. package/build/__tests__/unit/verifyAction.test.js.map +1 -0
  183. package/build/core/android.d.ts +299 -0
  184. package/build/core/android.d.ts.map +1 -0
  185. package/build/core/android.js +1582 -0
  186. package/build/core/android.js.map +1 -0
  187. package/build/core/appDetection.d.ts +20 -0
  188. package/build/core/appDetection.d.ts.map +1 -0
  189. package/build/core/appDetection.js +167 -0
  190. package/build/core/appDetection.js.map +1 -0
  191. package/build/core/bundle.d.ts +49 -0
  192. package/build/core/bundle.d.ts.map +1 -0
  193. package/build/core/bundle.js +356 -0
  194. package/build/core/bundle.js.map +1 -0
  195. package/build/core/componentSearch.d.ts +41 -0
  196. package/build/core/componentSearch.d.ts.map +1 -0
  197. package/build/core/componentSearch.js +588 -0
  198. package/build/core/componentSearch.js.map +1 -0
  199. package/build/core/componentTree.d.ts +13 -0
  200. package/build/core/componentTree.d.ts.map +1 -0
  201. package/build/core/componentTree.js +275 -0
  202. package/build/core/componentTree.js.map +1 -0
  203. package/build/core/config.d.ts +9 -0
  204. package/build/core/config.d.ts.map +1 -0
  205. package/build/core/config.js +28 -0
  206. package/build/core/config.js.map +1 -0
  207. package/build/core/connection.d.ts +102 -0
  208. package/build/core/connection.d.ts.map +1 -0
  209. package/build/core/connection.js +1710 -0
  210. package/build/core/connection.js.map +1 -0
  211. package/build/core/connectionState.d.ts +122 -0
  212. package/build/core/connectionState.d.ts.map +1 -0
  213. package/build/core/connectionState.js +313 -0
  214. package/build/core/connectionState.js.map +1 -0
  215. package/build/core/debugGlobals.d.ts +6 -0
  216. package/build/core/debugGlobals.d.ts.map +1 -0
  217. package/build/core/debugGlobals.js +370 -0
  218. package/build/core/debugGlobals.js.map +1 -0
  219. package/build/core/deviceDiscovery.d.ts +52 -0
  220. package/build/core/deviceDiscovery.d.ts.map +1 -0
  221. package/build/core/deviceDiscovery.js +74 -0
  222. package/build/core/deviceDiscovery.js.map +1 -0
  223. package/build/core/deviceResolver.d.ts +44 -0
  224. package/build/core/deviceResolver.d.ts.map +1 -0
  225. package/build/core/deviceResolver.js +225 -0
  226. package/build/core/deviceResolver.js.map +1 -0
  227. package/build/core/errorScreenParser.d.ts +30 -0
  228. package/build/core/errorScreenParser.d.ts.map +1 -0
  229. package/build/core/errorScreenParser.js +198 -0
  230. package/build/core/errorScreenParser.js.map +1 -0
  231. package/build/core/errors.d.ts +14 -0
  232. package/build/core/errors.d.ts.map +1 -0
  233. package/build/core/errors.js +17 -0
  234. package/build/core/errors.js.map +1 -0
  235. package/build/core/escapeNonAscii.d.ts +18 -0
  236. package/build/core/escapeNonAscii.d.ts.map +1 -0
  237. package/build/core/escapeNonAscii.js +352 -0
  238. package/build/core/escapeNonAscii.js.map +1 -0
  239. package/build/core/exec.d.ts +22 -0
  240. package/build/core/exec.d.ts.map +1 -0
  241. package/build/core/exec.js +54 -0
  242. package/build/core/exec.js.map +1 -0
  243. package/build/core/executor.d.ts +9 -0
  244. package/build/core/executor.d.ts.map +1 -0
  245. package/build/core/executor.js +12 -0
  246. package/build/core/executor.js.map +1 -0
  247. package/build/core/failureArtifact.d.ts +120 -0
  248. package/build/core/failureArtifact.d.ts.map +1 -0
  249. package/build/core/failureArtifact.js +113 -0
  250. package/build/core/failureArtifact.js.map +1 -0
  251. package/build/core/fastRefreshRecorder.d.ts +23 -0
  252. package/build/core/fastRefreshRecorder.d.ts.map +1 -0
  253. package/build/core/fastRefreshRecorder.js +83 -0
  254. package/build/core/fastRefreshRecorder.js.map +1 -0
  255. package/build/core/fastRefreshTools.d.ts +19 -0
  256. package/build/core/fastRefreshTools.d.ts.map +1 -0
  257. package/build/core/fastRefreshTools.js +71 -0
  258. package/build/core/fastRefreshTools.js.map +1 -0
  259. package/build/core/feedback.d.ts +18 -0
  260. package/build/core/feedback.d.ts.map +1 -0
  261. package/build/core/feedback.js +73 -0
  262. package/build/core/feedback.js.map +1 -0
  263. package/build/core/fiberMatch.d.ts +25 -0
  264. package/build/core/fiberMatch.d.ts.map +1 -0
  265. package/build/core/fiberMatch.js +35 -0
  266. package/build/core/fiberMatch.js.map +1 -0
  267. package/build/core/fingerprint.d.ts +4 -0
  268. package/build/core/fingerprint.d.ts.map +1 -0
  269. package/build/core/fingerprint.js +47 -0
  270. package/build/core/fingerprint.js.map +1 -0
  271. package/build/core/focusedInput.d.ts +27 -0
  272. package/build/core/focusedInput.d.ts.map +1 -0
  273. package/build/core/focusedInput.js +110 -0
  274. package/build/core/focusedInput.js.map +1 -0
  275. package/build/core/focusedInputTools.d.ts +21 -0
  276. package/build/core/focusedInputTools.d.ts.map +1 -0
  277. package/build/core/focusedInputTools.js +51 -0
  278. package/build/core/focusedInputTools.js.map +1 -0
  279. package/build/core/format.d.ts +8 -0
  280. package/build/core/format.d.ts.map +1 -0
  281. package/build/core/format.js +34 -0
  282. package/build/core/format.js.map +1 -0
  283. package/build/core/guides.d.ts +21 -0
  284. package/build/core/guides.d.ts.map +1 -0
  285. package/build/core/guides.js +397 -0
  286. package/build/core/guides.js.map +1 -0
  287. package/build/core/iconSemantics.d.ts +18 -0
  288. package/build/core/iconSemantics.d.ts.map +1 -0
  289. package/build/core/iconSemantics.js +114 -0
  290. package/build/core/iconSemantics.js.map +1 -0
  291. package/build/core/imageBuffer.d.ts +37 -0
  292. package/build/core/imageBuffer.d.ts.map +1 -0
  293. package/build/core/imageBuffer.js +58 -0
  294. package/build/core/imageBuffer.js.map +1 -0
  295. package/build/core/index.d.ts +37 -0
  296. package/build/core/index.d.ts.map +1 -0
  297. package/build/core/index.js +66 -0
  298. package/build/core/index.js.map +1 -0
  299. package/build/core/inspector.d.ts +55 -0
  300. package/build/core/inspector.d.ts.map +1 -0
  301. package/build/core/inspector.js +603 -0
  302. package/build/core/inspector.js.map +1 -0
  303. package/build/core/ios.d.ts +263 -0
  304. package/build/core/ios.d.ts.map +1 -0
  305. package/build/core/ios.js +1705 -0
  306. package/build/core/ios.js.map +1 -0
  307. package/build/core/jsExecute.d.ts +62 -0
  308. package/build/core/jsExecute.d.ts.map +1 -0
  309. package/build/core/jsExecute.js +696 -0
  310. package/build/core/jsExecute.js.map +1 -0
  311. package/build/core/license.d.ts +48 -0
  312. package/build/core/license.d.ts.map +1 -0
  313. package/build/core/license.js +267 -0
  314. package/build/core/license.js.map +1 -0
  315. package/build/core/logbox.d.ts +58 -0
  316. package/build/core/logbox.d.ts.map +1 -0
  317. package/build/core/logbox.js +330 -0
  318. package/build/core/logbox.js.map +1 -0
  319. package/build/core/logs.d.ts +44 -0
  320. package/build/core/logs.d.ts.map +1 -0
  321. package/build/core/logs.js +149 -0
  322. package/build/core/logs.js.map +1 -0
  323. package/build/core/measureComponent.d.ts +19 -0
  324. package/build/core/measureComponent.d.ts.map +1 -0
  325. package/build/core/measureComponent.js +94 -0
  326. package/build/core/measureComponent.js.map +1 -0
  327. package/build/core/measureComponentTools.d.ts +6 -0
  328. package/build/core/measureComponentTools.d.ts.map +1 -0
  329. package/build/core/measureComponentTools.js +43 -0
  330. package/build/core/measureComponentTools.js.map +1 -0
  331. package/build/core/metro.d.ts +31 -0
  332. package/build/core/metro.d.ts.map +1 -0
  333. package/build/core/metro.js +124 -0
  334. package/build/core/metro.js.map +1 -0
  335. package/build/core/nativeOnlyHints.d.ts +14 -0
  336. package/build/core/nativeOnlyHints.d.ts.map +1 -0
  337. package/build/core/nativeOnlyHints.js +58 -0
  338. package/build/core/nativeOnlyHints.js.map +1 -0
  339. package/build/core/network.d.ts +43 -0
  340. package/build/core/network.d.ts.map +1 -0
  341. package/build/core/network.js +217 -0
  342. package/build/core/network.js.map +1 -0
  343. package/build/core/networkInterceptor.d.ts +30 -0
  344. package/build/core/networkInterceptor.d.ts.map +1 -0
  345. package/build/core/networkInterceptor.js +211 -0
  346. package/build/core/networkInterceptor.js.map +1 -0
  347. package/build/core/ocr.d.ts +87 -0
  348. package/build/core/ocr.d.ts.map +1 -0
  349. package/build/core/ocr.js +335 -0
  350. package/build/core/ocr.js.map +1 -0
  351. package/build/core/paths.d.ts +2 -0
  352. package/build/core/paths.d.ts.map +1 -0
  353. package/build/core/paths.js +28 -0
  354. package/build/core/paths.js.map +1 -0
  355. package/build/core/posthog.d.ts +5 -0
  356. package/build/core/posthog.d.ts.map +1 -0
  357. package/build/core/posthog.js +52 -0
  358. package/build/core/posthog.js.map +1 -0
  359. package/build/core/pressables.d.ts +46 -0
  360. package/build/core/pressables.d.ts.map +1 -0
  361. package/build/core/pressables.js +1719 -0
  362. package/build/core/pressables.js.map +1 -0
  363. package/build/core/probe.d.ts +12 -0
  364. package/build/core/probe.d.ts.map +1 -0
  365. package/build/core/probe.js +56 -0
  366. package/build/core/probe.js.map +1 -0
  367. package/build/core/redux.d.ts +22 -0
  368. package/build/core/redux.d.ts.map +1 -0
  369. package/build/core/redux.js +116 -0
  370. package/build/core/redux.js.map +1 -0
  371. package/build/core/register.d.ts +8 -0
  372. package/build/core/register.d.ts.map +1 -0
  373. package/build/core/register.js +202 -0
  374. package/build/core/register.js.map +1 -0
  375. package/build/core/rnGlobalsBootstrap.d.ts +16 -0
  376. package/build/core/rnGlobalsBootstrap.d.ts.map +1 -0
  377. package/build/core/rnGlobalsBootstrap.js +116 -0
  378. package/build/core/rnGlobalsBootstrap.js.map +1 -0
  379. package/build/core/screenLayout.d.ts +53 -0
  380. package/build/core/screenLayout.d.ts.map +1 -0
  381. package/build/core/screenLayout.js +878 -0
  382. package/build/core/screenLayout.js.map +1 -0
  383. package/build/core/screenState.d.ts +166 -0
  384. package/build/core/screenState.d.ts.map +1 -0
  385. package/build/core/screenState.js +1352 -0
  386. package/build/core/screenState.js.map +1 -0
  387. package/build/core/sdkBridge.d.ts +67 -0
  388. package/build/core/sdkBridge.d.ts.map +1 -0
  389. package/build/core/sdkBridge.js +148 -0
  390. package/build/core/sdkBridge.js.map +1 -0
  391. package/build/core/state.d.ts +37 -0
  392. package/build/core/state.d.ts.map +1 -0
  393. package/build/core/state.js +124 -0
  394. package/build/core/state.js.map +1 -0
  395. package/build/core/telemetry.d.ts +50 -0
  396. package/build/core/telemetry.d.ts.map +1 -0
  397. package/build/core/telemetry.js +653 -0
  398. package/build/core/telemetry.js.map +1 -0
  399. package/build/core/toolHelpers.d.ts +24 -0
  400. package/build/core/toolHelpers.d.ts.map +1 -0
  401. package/build/core/toolHelpers.js +118 -0
  402. package/build/core/toolHelpers.js.map +1 -0
  403. package/build/core/types.d.ts +162 -0
  404. package/build/core/types.d.ts.map +1 -0
  405. package/build/core/types.js +2 -0
  406. package/build/core/types.js.map +1 -0
  407. package/build/index.d.ts +4 -0
  408. package/build/index.d.ts.map +1 -0
  409. package/build/index.js +132 -0
  410. package/build/index.js.map +1 -0
  411. package/build/pro/screenshot-diff.d.ts +10 -0
  412. package/build/pro/screenshot-diff.d.ts.map +1 -0
  413. package/build/pro/screenshot-diff.js +38 -0
  414. package/build/pro/screenshot-diff.js.map +1 -0
  415. package/build/pro/tap.d.ts +291 -0
  416. package/build/pro/tap.d.ts.map +1 -0
  417. package/build/pro/tap.js +1839 -0
  418. package/build/pro/tap.js.map +1 -0
  419. package/build/pro/verifyAction.d.ts +50 -0
  420. package/build/pro/verifyAction.d.ts.map +1 -0
  421. package/build/pro/verifyAction.js +285 -0
  422. package/build/pro/verifyAction.js.map +1 -0
  423. package/build/tools/_deviceArg.d.ts +45 -0
  424. package/build/tools/_deviceArg.d.ts.map +1 -0
  425. package/build/tools/_deviceArg.js +58 -0
  426. package/build/tools/_deviceArg.js.map +1 -0
  427. package/build/tools/accountTools.d.ts +46 -0
  428. package/build/tools/accountTools.d.ts.map +1 -0
  429. package/build/tools/accountTools.js +223 -0
  430. package/build/tools/accountTools.js.map +1 -0
  431. package/build/tools/bundleTools.d.ts +3 -0
  432. package/build/tools/bundleTools.d.ts.map +1 -0
  433. package/build/tools/bundleTools.js +375 -0
  434. package/build/tools/bundleTools.js.map +1 -0
  435. package/build/tools/componentTools.d.ts +3 -0
  436. package/build/tools/componentTools.d.ts.map +1 -0
  437. package/build/tools/componentTools.js +746 -0
  438. package/build/tools/componentTools.js.map +1 -0
  439. package/build/tools/connectionTools.d.ts +3 -0
  440. package/build/tools/connectionTools.d.ts.map +1 -0
  441. package/build/tools/connectionTools.js +625 -0
  442. package/build/tools/connectionTools.js.map +1 -0
  443. package/build/tools/deviceTools.d.ts +3 -0
  444. package/build/tools/deviceTools.d.ts.map +1 -0
  445. package/build/tools/deviceTools.js +423 -0
  446. package/build/tools/deviceTools.js.map +1 -0
  447. package/build/tools/executionTools.d.ts +3 -0
  448. package/build/tools/executionTools.d.ts.map +1 -0
  449. package/build/tools/executionTools.js +243 -0
  450. package/build/tools/executionTools.js.map +1 -0
  451. package/build/tools/interactionTools.d.ts +3 -0
  452. package/build/tools/interactionTools.d.ts.map +1 -0
  453. package/build/tools/interactionTools.js +539 -0
  454. package/build/tools/interactionTools.js.map +1 -0
  455. package/build/tools/logTools.d.ts +3 -0
  456. package/build/tools/logTools.d.ts.map +1 -0
  457. package/build/tools/logTools.js +371 -0
  458. package/build/tools/logTools.js.map +1 -0
  459. package/build/tools/metaTools.d.ts +7 -0
  460. package/build/tools/metaTools.d.ts.map +1 -0
  461. package/build/tools/metaTools.js +186 -0
  462. package/build/tools/metaTools.js.map +1 -0
  463. package/build/tools/networkTools.d.ts +3 -0
  464. package/build/tools/networkTools.d.ts.map +1 -0
  465. package/build/tools/networkTools.js +478 -0
  466. package/build/tools/networkTools.js.map +1 -0
  467. package/build/tools/reduxTools.d.ts +3 -0
  468. package/build/tools/reduxTools.d.ts.map +1 -0
  469. package/build/tools/reduxTools.js +83 -0
  470. package/build/tools/reduxTools.js.map +1 -0
  471. package/build/tools/screenshotTools.d.ts +3 -0
  472. package/build/tools/screenshotTools.d.ts.map +1 -0
  473. package/build/tools/screenshotTools.js +703 -0
  474. package/build/tools/screenshotTools.js.map +1 -0
  475. package/package.json +63 -2
@@ -0,0 +1,330 @@
1
+ import { executeInApp } from "./executor.js";
2
+ import { connectedApps } from "./state.js";
3
+ // ── JS Expression Fragments ──
4
+ // Composed into full expressions for detect and dismiss operations.
5
+ // Each runs inside the RN app via Runtime.evaluate.
6
+ const FIND_LOGBOX_DATA = `
7
+ var LogBoxData = global.__RN_LOGBOX_DATA__;
8
+ if (!LogBoxData || !LogBoxData.observe) {
9
+ if (!global.__DEV__) return JSON.stringify({ __error: 'dev_false' });
10
+ var getModules = global.__r && global.__r.getModules;
11
+ if (!getModules) return JSON.stringify({ __error: 'no_get_modules' });
12
+ var modules = getModules();
13
+ if (!modules || typeof modules.forEach !== 'function') return JSON.stringify({ __error: 'modules_not_iterable' });
14
+ modules.forEach(function(mod) {
15
+ if (LogBoxData) return;
16
+ if (mod && mod.isInitialized && mod.publicModule && mod.publicModule.exports) {
17
+ var e = mod.publicModule.exports;
18
+ if (e.clearErrors && e.observe && e.addLog && e.clearWarnings) {
19
+ LogBoxData = e;
20
+ }
21
+ }
22
+ });
23
+ if (!LogBoxData) return JSON.stringify({ __error: 'logbox_module_not_found' });
24
+ global.__RN_LOGBOX_DATA__ = LogBoxData;
25
+ }
26
+ `;
27
+ const READ_LOGBOX_STATE = `
28
+ var state = null;
29
+ try {
30
+ var sub = LogBoxData.observe(function(data) { state = data; });
31
+ if (sub && sub.unsubscribe) sub.unsubscribe();
32
+ } catch(e) {
33
+ global.__RN_LOGBOX_DATA__ = undefined;
34
+ return JSON.stringify(null);
35
+ }
36
+ if (!state || !state.logs) {
37
+ global.__RN_LOGBOX_DATA__ = undefined;
38
+ return JSON.stringify(null);
39
+ }
40
+ var summary = { error: 0, warning: 0, fatal: 0 };
41
+ var entries = [];
42
+ state.logs.forEach(function(log) {
43
+ if (summary[log.level] !== undefined) summary[log.level]++;
44
+ var msg = log.message && log.message.content ? log.message.content : '';
45
+ entries.push({ level: log.level, message: msg, count: log.count || 1 });
46
+ });
47
+ `;
48
+ const DETECT_EXPRESSION = `(function() {
49
+ ${FIND_LOGBOX_DATA}
50
+ ${READ_LOGBOX_STATE}
51
+ return JSON.stringify({
52
+ total: entries.length,
53
+ errors: summary.error,
54
+ warnings: summary.warning,
55
+ fatals: summary.fatal,
56
+ entries: entries
57
+ });
58
+ })()`;
59
+ const DISMISS_EXPRESSION = `(function() {
60
+ ${FIND_LOGBOX_DATA}
61
+ ${READ_LOGBOX_STATE}
62
+ LogBoxData.clearErrors();
63
+ LogBoxData.clearWarnings();
64
+ return JSON.stringify({
65
+ dismissed: entries,
66
+ totalDismissed: entries.length,
67
+ errors: summary.error,
68
+ warnings: summary.warning,
69
+ fatals: summary.fatal
70
+ });
71
+ })()`;
72
+ // ── Push & Ignore Expression Builders ──
73
+ function buildPushExpression(message, level, expanded, subtitle) {
74
+ const escapedMessage = message.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n");
75
+ const escapedSubtitle = subtitle ? subtitle.replace(/\\/g, "\\\\").replace(/'/g, "\\'") : "MCP Server";
76
+ return `(function() {
77
+ ${FIND_LOGBOX_DATA}
78
+ try {
79
+ var pushCategory = 'rn-ai-devtools-push-' + Date.now();
80
+ LogBoxData.addLog({
81
+ level: '${level}',
82
+ message: { content: '${escapedMessage}', substitutions: [] },
83
+ category: pushCategory,
84
+ componentStack: []
85
+ });${expanded ? `
86
+ setTimeout(function() {
87
+ try {
88
+ var state = null;
89
+ var sub = LogBoxData.observe(function(data) { state = data; });
90
+ if (sub && sub.unsubscribe) sub.unsubscribe();
91
+ if (state && state.logs) {
92
+ var lastIndex = 0;
93
+ var i = 0;
94
+ state.logs.forEach(function(log) {
95
+ if (log.stack && log.category === pushCategory) {
96
+ log.stack.length = 0;
97
+ log.stack.push({
98
+ methodName: 'ExecBro',
99
+ file: '${escapedSubtitle}',
100
+ lineNumber: 0,
101
+ column: 0
102
+ });
103
+ }
104
+ lastIndex = i;
105
+ i++;
106
+ });
107
+ LogBoxData.setSelectedLog(lastIndex);
108
+ }
109
+ } catch(e) {}
110
+ }, 100);` : ""}
111
+ return JSON.stringify({ success: true });
112
+ } catch(e) {
113
+ return JSON.stringify({ success: false, error: e.message });
114
+ }
115
+ })()`;
116
+ }
117
+ function buildIgnoreExpression(patterns) {
118
+ const patternsJson = JSON.stringify(patterns);
119
+ return `(function() {
120
+ ${FIND_LOGBOX_DATA}
121
+ try {
122
+ LogBoxData.addIgnorePatterns(${patternsJson});
123
+ var current = LogBoxData.getIgnorePatterns();
124
+ var result = [];
125
+ if (current && typeof current.forEach === 'function') {
126
+ current.forEach(function(p) { result.push(typeof p === 'string' ? p : String(p)); });
127
+ }
128
+ return JSON.stringify({ success: true, patterns: result });
129
+ } catch(e) {
130
+ return JSON.stringify({ success: false, error: e.message });
131
+ }
132
+ })()`;
133
+ }
134
+ // ── Error tracking ──
135
+ // Captures the most recent LogBox failure reason so the MCP tool handler can
136
+ // surface it in user-visible output. Set by any of the public functions below
137
+ // when detection fails with a known reason code.
138
+ let lastLogBoxError = null;
139
+ export function getLastLogBoxError() {
140
+ return lastLogBoxError;
141
+ }
142
+ function recordLogBoxError(reason) {
143
+ lastLogBoxError = reason;
144
+ if (reason) {
145
+ console.error(`[execbro] LogBox operation failed: ${reason}`);
146
+ }
147
+ }
148
+ // ── Public API ──
149
+ /**
150
+ * Read current LogBox state without modifying it.
151
+ * Returns null if LogBox is not available (production app, no CDP connection, etc.)
152
+ */
153
+ export async function detectLogBox(device) {
154
+ try {
155
+ const result = await executeInApp(DETECT_EXPRESSION, true, { timeoutMs: 5000, originatingToolName: "logbox" }, device);
156
+ if (!result.success || !result.result) {
157
+ recordLogBoxError("execute_failed");
158
+ return null;
159
+ }
160
+ const parsed = JSON.parse(result.result);
161
+ if (parsed && parsed.__error) {
162
+ recordLogBoxError(parsed.__error);
163
+ return null;
164
+ }
165
+ recordLogBoxError(null);
166
+ return parsed;
167
+ }
168
+ catch (e) {
169
+ recordLogBoxError("exception");
170
+ return null;
171
+ }
172
+ }
173
+ /**
174
+ * Clear all LogBox entries and return what was dismissed.
175
+ * Returns null if LogBox is not available.
176
+ */
177
+ export async function dismissLogBox(device) {
178
+ try {
179
+ const result = await executeInApp(DISMISS_EXPRESSION, true, { timeoutMs: 5000, originatingToolName: "logbox" }, device);
180
+ if (!result.success || !result.result) {
181
+ recordLogBoxError("execute_failed");
182
+ return null;
183
+ }
184
+ const parsed = JSON.parse(result.result);
185
+ if (parsed && parsed.__error) {
186
+ recordLogBoxError(parsed.__error);
187
+ return null;
188
+ }
189
+ recordLogBoxError(null);
190
+ return parsed;
191
+ }
192
+ catch {
193
+ recordLogBoxError("exception");
194
+ return null;
195
+ }
196
+ }
197
+ /**
198
+ * Push a message into LogBox via LogBoxData.addLog().
199
+ * Default level is "error" because only errors produce a visible bottom banner.
200
+ * Warnings are stored but not visually shown unless LogBox is already open.
201
+ */
202
+ export async function pushLogBox(message, level = "error", expanded = false, target = "logbox", subtitle, device) {
203
+ if (target === "metro") {
204
+ try {
205
+ const escapedMessage = message.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n");
206
+ const result = await executeInApp(`(function() { console.log('${escapedMessage}'); return JSON.stringify({ success: true }); })()`, true, { timeoutMs: 5000, originatingToolName: "logbox" }, device);
207
+ if (!result.success || !result.result)
208
+ return false;
209
+ const parsed = JSON.parse(result.result);
210
+ return parsed.success === true;
211
+ }
212
+ catch {
213
+ return false;
214
+ }
215
+ }
216
+ try {
217
+ const result = await executeInApp(buildPushExpression(message, level, expanded, subtitle), true, { timeoutMs: 5000, originatingToolName: "logbox" }, device);
218
+ if (!result.success || !result.result) {
219
+ recordLogBoxError("execute_failed");
220
+ return false;
221
+ }
222
+ const parsed = JSON.parse(result.result);
223
+ if (parsed && parsed.__error) {
224
+ recordLogBoxError(parsed.__error);
225
+ return false;
226
+ }
227
+ recordLogBoxError(null);
228
+ return parsed.success === true;
229
+ }
230
+ catch {
231
+ recordLogBoxError("exception");
232
+ return false;
233
+ }
234
+ }
235
+ /**
236
+ * Add ignore patterns to suppress future LogBox entries.
237
+ * Returns the full list of active patterns after adding, or null if unavailable.
238
+ */
239
+ export async function addLogBoxIgnorePatterns(patterns, device) {
240
+ try {
241
+ const result = await executeInApp(buildIgnoreExpression(patterns), true, { timeoutMs: 5000, originatingToolName: "logbox" }, device);
242
+ if (!result.success || !result.result) {
243
+ recordLogBoxError("execute_failed");
244
+ return null;
245
+ }
246
+ const parsed = JSON.parse(result.result);
247
+ if (parsed && parsed.__error) {
248
+ recordLogBoxError(parsed.__error);
249
+ return null;
250
+ }
251
+ if (parsed.success) {
252
+ recordLogBoxError(null);
253
+ return parsed.patterns;
254
+ }
255
+ recordLogBoxError("unknown");
256
+ return null;
257
+ }
258
+ catch {
259
+ recordLogBoxError("exception");
260
+ return null;
261
+ }
262
+ }
263
+ /**
264
+ * Build a warning string for appending to screenshot/OCR tool responses.
265
+ * Returns empty string if no LogBox entries detected.
266
+ */
267
+ export function formatLogBoxWarning(state) {
268
+ if (state.total === 0)
269
+ return "";
270
+ const parts = [];
271
+ if (state.errors > 0)
272
+ parts.push(`${state.errors} error${state.errors > 1 ? "s" : ""}`);
273
+ if (state.fatals > 0)
274
+ parts.push(`${state.fatals} fatal${state.fatals > 1 ? "s" : ""}`);
275
+ if (state.warnings > 0)
276
+ parts.push(`${state.warnings} warning${state.warnings > 1 ? "s" : ""}`);
277
+ return (`\n\nWarning: LogBox overlay detected (${parts.join(", ")}). Bottom UI may be obstructed.` +
278
+ `\nUse logbox with action "dismiss" to clear (dismissed content will be returned).`);
279
+ }
280
+ /**
281
+ * Format dismissed LogBox entries for the logbox tool response.
282
+ * Full messages in raw data, truncated in display.
283
+ */
284
+ export function formatDismissedEntries(result) {
285
+ if (result.totalDismissed === 0)
286
+ return "No LogBox entries to dismiss.";
287
+ const MAX_MSG_LENGTH = 150;
288
+ let output = `Dismissed ${result.totalDismissed} LogBox entr${result.totalDismissed === 1 ? "y" : "ies"}:\n`;
289
+ for (const entry of result.dismissed) {
290
+ const truncated = entry.message.length > MAX_MSG_LENGTH
291
+ ? entry.message.substring(0, MAX_MSG_LENGTH) + "..."
292
+ : entry.message;
293
+ const countStr = entry.count > 1 ? ` (x${entry.count})` : "";
294
+ output += `\n[${entry.level}] ${truncated}${countStr}`;
295
+ }
296
+ const parts = [];
297
+ if (result.errors > 0)
298
+ parts.push(`${result.errors} error${result.errors > 1 ? "s" : ""}`);
299
+ if (result.fatals > 0)
300
+ parts.push(`${result.fatals} fatal${result.fatals > 1 ? "s" : ""}`);
301
+ if (result.warnings > 0)
302
+ parts.push(`${result.warnings} warning${result.warnings > 1 ? "s" : ""}`);
303
+ output += `\n\nSummary: ${parts.join(", ")}`;
304
+ output += `\nBottom UI should now be unobstructed.`;
305
+ return output;
306
+ }
307
+ // ── Driver Missing Notification ──
308
+ // Throttle: don't spam the user with repeated notifications within 60 seconds
309
+ let lastDriverNotificationTime = 0;
310
+ const DRIVER_NOTIFICATION_COOLDOWN_MS = 60_000;
311
+ /**
312
+ * Push a full-screen LogBox notification when a UI driver is missing.
313
+ * Fire-and-forget — silently does nothing if no Metro connection exists.
314
+ * Throttled to avoid spamming the device on repeated tool calls.
315
+ */
316
+ export function notifyDriverMissing(platform) {
317
+ // Only notify if there's an active Metro/CDP connection to push to
318
+ if (connectedApps.size === 0)
319
+ return;
320
+ const now = Date.now();
321
+ if (now - lastDriverNotificationTime < DRIVER_NOTIFICATION_COOLDOWN_MS)
322
+ return;
323
+ lastDriverNotificationTime = now;
324
+ const message = platform === "ios"
325
+ ? "iOS UI Driver Not Installed\n\nAI tools (tap, swipe, text input, accessibility) require a UI driver to interact with the simulator.\n\nInstall AXe (recommended):\nbrew install cameroncooke/axe/axe\n\nThen restart your MCP server session."
326
+ : "ADB Not Installed\n\nAI tools (tap, swipe, text input, accessibility) require ADB to interact with the device.\n\nInstall Android Platform Tools:\nbrew install android-platform-tools\n\nThen add to PATH and restart your MCP server session.";
327
+ // Fire-and-forget — don't await, don't block the error response
328
+ pushLogBox(message, "error", true, "logbox", "Setup Required").catch(() => { });
329
+ }
330
+ //# sourceMappingURL=logbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logbox.js","sourceRoot":"","sources":["../../src/core/logbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { LogEntry, LogLevel } from "./types.js";
2
+ export declare class LogBuffer {
3
+ private logs;
4
+ private maxSize;
5
+ constructor(maxSize?: number);
6
+ add(entry: LogEntry): void;
7
+ get(count?: number, level?: string, startFromText?: string): LogEntry[];
8
+ search(text: string, maxResults?: number): LogEntry[];
9
+ clear(): number;
10
+ removeByText(text: string): number;
11
+ get size(): number;
12
+ getAll(): LogEntry[];
13
+ }
14
+ export declare function mapConsoleType(type: string): LogEntry["level"];
15
+ export interface FormatLogsOptions {
16
+ maxMessageLength?: number;
17
+ verbose?: boolean;
18
+ }
19
+ export declare function formatLogs(logs: LogEntry[], options?: FormatLogsOptions): string;
20
+ export declare function getLogs(logBuffer: LogBuffer, options?: {
21
+ maxLogs?: number;
22
+ level?: LogLevel;
23
+ startFromText?: string;
24
+ maxMessageLength?: number;
25
+ verbose?: boolean;
26
+ }): {
27
+ logs: LogEntry[];
28
+ count: number;
29
+ formatted: string;
30
+ };
31
+ export declare function searchLogs(logBuffer: LogBuffer, text: string, options?: {
32
+ maxResults?: number;
33
+ maxMessageLength?: number;
34
+ verbose?: boolean;
35
+ }): {
36
+ logs: LogEntry[];
37
+ count: number;
38
+ formatted: string;
39
+ };
40
+ export declare function getLogSummary(logBuffer: LogBuffer, options?: {
41
+ lastN?: number;
42
+ maxMessageLength?: number;
43
+ }): string;
44
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/core/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGhD,qBAAa,SAAS;IAClB,OAAO,CAAC,IAAI,CAAkB;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAa;IAIlC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAO1B,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IA4BvE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE;IAUrD,KAAK,IAAI,MAAM;IAMf,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAMlC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,MAAM,IAAI,QAAQ,EAAE;CAGvB;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAc9D;AAGD,MAAM,WAAW,iBAAiB;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAGD,wBAAgB,UAAU,CACtB,IAAI,EAAE,QAAQ,EAAE,EAChB,OAAO,GAAE,iBAAsB,GAChC,MAAM,CAqBR;AAGD,wBAAgB,OAAO,CACnB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE;IACL,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CAChB,GACP;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAQxD;AAGD,wBAAgB,UAAU,CACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IACL,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CAChB,GACP;IAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAQxD;AAGD,wBAAgB,aAAa,CACzB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE;IACL,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACxB,GACP,MAAM,CAoCR"}
@@ -0,0 +1,149 @@
1
+ // Circular buffer for storing logs
2
+ export class LogBuffer {
3
+ logs = [];
4
+ maxSize;
5
+ constructor(maxSize = 1000) {
6
+ this.maxSize = maxSize;
7
+ }
8
+ add(entry) {
9
+ this.logs.push(entry);
10
+ if (this.logs.length > this.maxSize) {
11
+ this.logs.shift();
12
+ }
13
+ }
14
+ get(count, level, startFromText) {
15
+ let filtered = this.logs;
16
+ // If startFromText is provided, find the LAST matching line and start from there
17
+ if (startFromText) {
18
+ let startIndex = -1;
19
+ for (let i = filtered.length - 1; i >= 0; i--) {
20
+ if (filtered[i].message.includes(startFromText)) {
21
+ startIndex = i;
22
+ break;
23
+ }
24
+ }
25
+ if (startIndex !== -1) {
26
+ filtered = filtered.slice(startIndex);
27
+ }
28
+ }
29
+ if (level && level !== "all") {
30
+ filtered = filtered.filter((log) => log.level === level);
31
+ }
32
+ if (count && count > 0) {
33
+ filtered = filtered.slice(0, count);
34
+ }
35
+ return filtered;
36
+ }
37
+ search(text, maxResults) {
38
+ const results = this.logs.filter((log) => log.message.toLowerCase().includes(text.toLowerCase()));
39
+ if (maxResults && maxResults > 0) {
40
+ return results.slice(0, maxResults);
41
+ }
42
+ return results;
43
+ }
44
+ clear() {
45
+ const count = this.logs.length;
46
+ this.logs = [];
47
+ return count;
48
+ }
49
+ removeByText(text) {
50
+ const before = this.logs.length;
51
+ this.logs = this.logs.filter(log => !log.message.includes(text));
52
+ return before - this.logs.length;
53
+ }
54
+ get size() {
55
+ return this.logs.length;
56
+ }
57
+ getAll() {
58
+ return [...this.logs];
59
+ }
60
+ }
61
+ // Map console type to log level
62
+ export function mapConsoleType(type) {
63
+ switch (type) {
64
+ case "error":
65
+ return "error";
66
+ case "warning":
67
+ case "warn":
68
+ return "warn";
69
+ case "info":
70
+ return "info";
71
+ case "debug":
72
+ return "debug";
73
+ default:
74
+ return "log";
75
+ }
76
+ }
77
+ // Format logs for text output
78
+ export function formatLogs(logs, options = {}) {
79
+ if (logs.length === 0) {
80
+ return "No logs captured yet. Make sure Metro is running and the app is connected.";
81
+ }
82
+ const { maxMessageLength = 500, verbose = false } = options;
83
+ return logs
84
+ .map((log) => {
85
+ const time = log.timestamp.toLocaleTimeString();
86
+ const levelTag = `[${log.level.toUpperCase()}]`;
87
+ let message = log.message;
88
+ // Apply truncation unless verbose or unlimited
89
+ if (!verbose && maxMessageLength > 0 && message.length > maxMessageLength) {
90
+ message = message.slice(0, maxMessageLength) + `... [truncated: ${log.message.length} chars]`;
91
+ }
92
+ return `${time} ${levelTag} ${message}`;
93
+ })
94
+ .join("\n");
95
+ }
96
+ // Get logs with formatting
97
+ export function getLogs(logBuffer, options = {}) {
98
+ const { maxLogs = 50, level = "all", startFromText, maxMessageLength, verbose } = options;
99
+ const logs = logBuffer.get(maxLogs, level, startFromText);
100
+ return {
101
+ logs,
102
+ count: logs.length,
103
+ formatted: formatLogs(logs, { maxMessageLength, verbose })
104
+ };
105
+ }
106
+ // Search logs with formatting
107
+ export function searchLogs(logBuffer, text, options = {}) {
108
+ const { maxResults = 50, maxMessageLength, verbose } = options;
109
+ const logs = logBuffer.search(text, maxResults);
110
+ return {
111
+ logs,
112
+ count: logs.length,
113
+ formatted: formatLogs(logs, { maxMessageLength, verbose })
114
+ };
115
+ }
116
+ // Get log summary (counts by level + last N messages)
117
+ export function getLogSummary(logBuffer, options = {}) {
118
+ const { lastN = 5, maxMessageLength = 100 } = options;
119
+ const allLogs = logBuffer.getAll();
120
+ if (allLogs.length === 0) {
121
+ return "No logs captured yet.";
122
+ }
123
+ // Count by level
124
+ const byLevel = {};
125
+ for (const log of allLogs) {
126
+ byLevel[log.level] = (byLevel[log.level] || 0) + 1;
127
+ }
128
+ const lines = [];
129
+ lines.push(`Total: ${allLogs.length} logs`);
130
+ lines.push("");
131
+ lines.push("By Level:");
132
+ for (const [level, count] of Object.entries(byLevel).sort((a, b) => b[1] - a[1])) {
133
+ lines.push(` ${level.toUpperCase()}: ${count}`);
134
+ }
135
+ // Last N messages
136
+ lines.push("");
137
+ lines.push(`Last ${lastN} messages:`);
138
+ const recentLogs = allLogs.slice(-lastN);
139
+ for (const log of recentLogs) {
140
+ const time = log.timestamp.toLocaleTimeString();
141
+ let message = log.message;
142
+ if (maxMessageLength > 0 && message.length > maxMessageLength) {
143
+ message = message.slice(0, maxMessageLength) + "...";
144
+ }
145
+ lines.push(` ${time} [${log.level.toUpperCase()}] ${message}`);
146
+ }
147
+ return lines.join("\n");
148
+ }
149
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/core/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export type MeasureOutcome = "measured" | "no_match" | "no_host_descendant" | "timeout" | "error";
2
+ export interface MeasureBounds {
3
+ x: number;
4
+ y: number;
5
+ width: number;
6
+ height: number;
7
+ name: string;
8
+ nativeTag?: number;
9
+ }
10
+ export type MeasureToolResult = ({
11
+ success: true;
12
+ outcome: "measured";
13
+ } & MeasureBounds) | {
14
+ success: false;
15
+ outcome: Exclude<MeasureOutcome, "measured">;
16
+ error: string;
17
+ };
18
+ export declare function buildMeasureComponentExpression(componentName: string, index: number): string;
19
+ //# sourceMappingURL=measureComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measureComponent.d.ts","sourceRoot":"","sources":["../../src/core/measureComponent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACpB,UAAU,GACV,UAAU,GACV,oBAAoB,GACpB,SAAS,GACT,OAAO,CAAC;AAEd,MAAM,WAAW,aAAa;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,iBAAiB,GACvB,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,UAAU,CAAA;CAAE,GAAG,aAAa,CAAC,GACxD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,wBAAgB,+BAA+B,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA4F5F"}
@@ -0,0 +1,94 @@
1
+ export function buildMeasureComponentExpression(componentName, index) {
2
+ const escapedName = componentName.replace(/'/g, "\\'");
3
+ const safeIndex = typeof index === "number" && Number.isFinite(index) ? index : 0;
4
+ return `new Promise((resolve) => {
5
+ try {
6
+ const hook = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
7
+ if (!hook) { resolve({ outcome: "error", error: "React DevTools hook not found." }); return; }
8
+ let root = null;
9
+ const ids = Array.from(hook.renderers ? hook.renderers.keys() : []);
10
+ for (const id of ids) {
11
+ const roots = hook.getFiberRoots ? Array.from(hook.getFiberRoots(id) || []) : [];
12
+ if (roots.length > 0) { root = roots[0]; break; }
13
+ }
14
+ if (!root) { resolve({ outcome: "error", error: "No fiber roots found." }); return; }
15
+
16
+ const targetName = '${escapedName}';
17
+ const targetIndex = ${safeIndex};
18
+
19
+ const getName = (t) => typeof t === "string" ? t : (t && (t.displayName || t.name)) || null;
20
+
21
+ // Collect all matching fibers (depth-first, parent before children).
22
+ const matches = [];
23
+ (function walk(f) {
24
+ if (!f) return;
25
+ if (getName(f.type) === targetName) matches.push(f);
26
+ if (f.child) walk(f.child);
27
+ if (f.sibling) walk(f.sibling);
28
+ })(root.current);
29
+
30
+ if (matches.length === 0 || targetIndex < 0 || targetIndex >= matches.length) {
31
+ resolve({ outcome: "no_match", error: "no component matched '" + targetName + "'" });
32
+ return;
33
+ }
34
+ const matched = matches[targetIndex];
35
+ const matchedName = getName(matched.type);
36
+
37
+ // Resolve a measurable host instance: matched fiber or nearest host descendant.
38
+ const getMeasurable = (f) => {
39
+ if (!f || !f.stateNode) return null;
40
+ const sn = f.stateNode;
41
+ if (typeof sn.measureInWindow === "function") {
42
+ return { instance: sn, nativeTag: sn._nativeTag };
43
+ }
44
+ if (sn.canonical && sn.canonical.publicInstance && typeof sn.canonical.publicInstance.measureInWindow === "function") {
45
+ const pub = sn.canonical.publicInstance;
46
+ return { instance: pub, nativeTag: pub.__nativeTag };
47
+ }
48
+ return null;
49
+ };
50
+
51
+ let target = getMeasurable(matched);
52
+ if (!target) {
53
+ // Descend to nearest host descendant with measureInWindow.
54
+ (function findHost(f) {
55
+ if (!f || target) return;
56
+ if (f !== matched) {
57
+ const m = getMeasurable(f);
58
+ if (m) { target = m; return; }
59
+ }
60
+ if (f.child) findHost(f.child);
61
+ if (f.sibling && f !== matched) findHost(f.sibling);
62
+ })(matched.child);
63
+ }
64
+
65
+ if (!target) {
66
+ resolve({ outcome: "no_host_descendant", error: "component '" + targetName + "' has no measurable stateNode at index " + targetIndex });
67
+ return;
68
+ }
69
+
70
+ let done = false;
71
+ target.instance.measureInWindow((x, y, width, height) => {
72
+ if (done) return;
73
+ done = true;
74
+ resolve({
75
+ outcome: "measured",
76
+ x: x,
77
+ y: y,
78
+ width: width,
79
+ height: height,
80
+ name: matchedName,
81
+ nativeTag: typeof target.nativeTag === "number" ? target.nativeTag : undefined,
82
+ });
83
+ });
84
+ setTimeout(() => {
85
+ if (done) return;
86
+ done = true;
87
+ resolve({ outcome: "timeout", error: "measureInWindow timed out (1500ms)" });
88
+ }, 1500);
89
+ } catch (e) {
90
+ resolve({ outcome: "error", error: (e && e.message) || String(e) });
91
+ }
92
+ })`;
93
+ }
94
+ //# sourceMappingURL=measureComponent.js.map