rnxsim 0.0.0 → 0.1.312

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 (228) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +512 -0
  3. package/detox/colors.ts +54 -0
  4. package/detox/config-loader.ts +135 -0
  5. package/detox/element-types.ts +39 -0
  6. package/detox/expectations.ts +537 -0
  7. package/detox/gestures.ts +480 -0
  8. package/detox/index.ts +2118 -0
  9. package/detox/jest-preset.cjs +51 -0
  10. package/detox/jest-setup-after-env.cjs +18 -0
  11. package/detox/matchers.ts +30 -0
  12. package/detox/motion-change.cjs +109 -0
  13. package/detox/motion-change.d.cts +35 -0
  14. package/detox/navigation.ts +43 -0
  15. package/detox/screenshots/animated-color-test-rest-norngh.png +0 -0
  16. package/detox/screenshots/color-test-after-drag-norngh.png +0 -0
  17. package/detox/screenshots/color-test-rest-norngh.png +0 -0
  18. package/detox/screenshots/theme-blue-toggle.png +0 -0
  19. package/detox/screenshots/theme-blue.png +0 -0
  20. package/detox/screenshots/theme-red-toggle.png +0 -0
  21. package/detox/screenshots/theme-red.png +0 -0
  22. package/dist-cli/bin.js +15 -0
  23. package/dist-cli/chunks/agent-NXVDDCFG.js +48 -0
  24. package/dist-cli/chunks/agent-wrapper-DXJCFKL3.js +17 -0
  25. package/dist-cli/chunks/app-fonts-W5AJZQJF.js +4 -0
  26. package/dist-cli/chunks/assert-3LOJEUDT.js +49 -0
  27. package/dist-cli/chunks/auth-MFTYYPNX.js +12 -0
  28. package/dist-cli/chunks/beta-GT3NN67B.js +4 -0
  29. package/dist-cli/chunks/camera-6EAK7CUL.js +22 -0
  30. package/dist-cli/chunks/chunk-274UD5FD.js +4 -0
  31. package/dist-cli/chunks/chunk-2SA2VTGP.js +5 -0
  32. package/dist-cli/chunks/chunk-33FKQH54.js +5 -0
  33. package/dist-cli/chunks/chunk-37I5AIS7.js +3 -0
  34. package/dist-cli/chunks/chunk-3D57IBPC.js +4 -0
  35. package/dist-cli/chunks/chunk-4BXCZHAU.js +4 -0
  36. package/dist-cli/chunks/chunk-5OX7ANRA.js +5 -0
  37. package/dist-cli/chunks/chunk-66NF2KNG.js +9 -0
  38. package/dist-cli/chunks/chunk-6UKJB2VC.js +125 -0
  39. package/dist-cli/chunks/chunk-7INBNA3U.js +26 -0
  40. package/dist-cli/chunks/chunk-7VWOSTD5.js +5 -0
  41. package/dist-cli/chunks/chunk-AY47WKS5.js +23 -0
  42. package/dist-cli/chunks/chunk-B7KMNHX7.js +4 -0
  43. package/dist-cli/chunks/chunk-BKNOLP3J.js +4 -0
  44. package/dist-cli/chunks/chunk-BRIZOR4K.js +28 -0
  45. package/dist-cli/chunks/chunk-DM6KUAOZ.js +4 -0
  46. package/dist-cli/chunks/chunk-EUAVBTKU.js +4 -0
  47. package/dist-cli/chunks/chunk-FTC4M26Q.js +4 -0
  48. package/dist-cli/chunks/chunk-FWYYCUAZ.js +4 -0
  49. package/dist-cli/chunks/chunk-G74YIEVS.js +7 -0
  50. package/dist-cli/chunks/chunk-GZDHEONW.js +507 -0
  51. package/dist-cli/chunks/chunk-HG7ORJMT.js +5 -0
  52. package/dist-cli/chunks/chunk-HMDOLCKG.js +15 -0
  53. package/dist-cli/chunks/chunk-JG6S4RSH.js +4 -0
  54. package/dist-cli/chunks/chunk-KR5BGMBZ.js +4 -0
  55. package/dist-cli/chunks/chunk-KZW5WBGU.js +983 -0
  56. package/dist-cli/chunks/chunk-L24Z3CRS.js +30 -0
  57. package/dist-cli/chunks/chunk-LDQ7HVCW.js +4 -0
  58. package/dist-cli/chunks/chunk-MENV7VLD.js +4 -0
  59. package/dist-cli/chunks/chunk-MNGQ42QE.js +568 -0
  60. package/dist-cli/chunks/chunk-N6A3SXMR.js +4 -0
  61. package/dist-cli/chunks/chunk-NLEMQ4PY.js +6 -0
  62. package/dist-cli/chunks/chunk-NPVGMH2N.js +101 -0
  63. package/dist-cli/chunks/chunk-OR3XTXEB.js +107 -0
  64. package/dist-cli/chunks/chunk-PEPUGJVI.js +4 -0
  65. package/dist-cli/chunks/chunk-Q3RGLERJ.js +142 -0
  66. package/dist-cli/chunks/chunk-SI3BUTQR.js +4 -0
  67. package/dist-cli/chunks/chunk-T4FT6CM7.js +4 -0
  68. package/dist-cli/chunks/chunk-TBMVBI26.js +7 -0
  69. package/dist-cli/chunks/chunk-TCWQJILS.js +5 -0
  70. package/dist-cli/chunks/chunk-TGQNQ6XT.js +766 -0
  71. package/dist-cli/chunks/chunk-TYE3WBSR.js +5 -0
  72. package/dist-cli/chunks/chunk-U4PN6JOT.js +6 -0
  73. package/dist-cli/chunks/chunk-VUFRB347.js +4 -0
  74. package/dist-cli/chunks/chunk-VZBLFMYC.js +10 -0
  75. package/dist-cli/chunks/chunk-WBT32R6N.js +25 -0
  76. package/dist-cli/chunks/chunk-XRGEEPJ5.js +38 -0
  77. package/dist-cli/chunks/chunk-Y2FSZSO7.js +71 -0
  78. package/dist-cli/chunks/chunk-YRV7HR3P.js +74 -0
  79. package/dist-cli/chunks/chunk-YZRFF4YA.js +14 -0
  80. package/dist-cli/chunks/chunk-ZMZTHU7V.js +4 -0
  81. package/dist-cli/chunks/cleanup-H3GWQB63.js +25 -0
  82. package/dist-cli/chunks/cli-version-3QPAJ3LC.js +4 -0
  83. package/dist-cli/chunks/compat-5WG2XJV7.js +20 -0
  84. package/dist-cli/chunks/config-ANMBVVLL.js +13 -0
  85. package/dist-cli/chunks/control-NSGNQFJG.js +4 -0
  86. package/dist-cli/chunks/daemon-JHF4BJ3U.js +4 -0
  87. package/dist-cli/chunks/debug-CHV2O2KF.js +200 -0
  88. package/dist-cli/chunks/desktop-FIPIK4CH.js +31 -0
  89. package/dist-cli/chunks/detox-CVUJP7K6.js +52 -0
  90. package/dist-cli/chunks/device-6WCUM4W6.js +18 -0
  91. package/dist-cli/chunks/diagnose-I6EMWEII.js +43 -0
  92. package/dist-cli/chunks/disk-cleanup-P27CYFTN.js +4 -0
  93. package/dist-cli/chunks/drivers-HQ6AKZT6.js +4 -0
  94. package/dist-cli/chunks/film-UOQFFYNF.js +74 -0
  95. package/dist-cli/chunks/flow-N27MRRNL.js +4 -0
  96. package/dist-cli/chunks/help-SF6FEGEE.js +4 -0
  97. package/dist-cli/chunks/hidden-runtime-alias-NJYFSJKZ.js +4 -0
  98. package/dist-cli/chunks/home-paths-XOV44JEF.js +4 -0
  99. package/dist-cli/chunks/inspect-CWFRFQTY.js +4 -0
  100. package/dist-cli/chunks/install-desktop-KLQDNXZQ.js +4 -0
  101. package/dist-cli/chunks/login-BPFQENCX.js +28 -0
  102. package/dist-cli/chunks/logout-5A45ZGY7.js +4 -0
  103. package/dist-cli/chunks/maestro-E4CSDMLM.js +104 -0
  104. package/dist-cli/chunks/maestro-generate-CKMOJQX2.js +36 -0
  105. package/dist-cli/chunks/mode-SZYNMIQF.js +26 -0
  106. package/dist-cli/chunks/optional-demo-registry-FRH4SFVG.js +4 -0
  107. package/dist-cli/chunks/perf-VXU2XJAX.js +48 -0
  108. package/dist-cli/chunks/permissions-IRIAOVND.js +13 -0
  109. package/dist-cli/chunks/record-RY7FPLLH.js +72 -0
  110. package/dist-cli/chunks/report-issue-KNWXOE53.js +29 -0
  111. package/dist-cli/chunks/runtime-AR3GJTGK.js +4 -0
  112. package/dist-cli/chunks/screenshot-command-QLALR6GY.js +159 -0
  113. package/dist-cli/chunks/screenshot-layers-OQFMFVRL.js +20 -0
  114. package/dist-cli/chunks/screenshots-capture-6TSRJFGB.js +42 -0
  115. package/dist-cli/chunks/serve-F54J2NQO.js +44 -0
  116. package/dist-cli/chunks/setup-7V6UKX4U.js +32 -0
  117. package/dist-cli/chunks/skills-QQBOSETH.js +50 -0
  118. package/dist-cli/chunks/storage-TAPMKK5O.js +37 -0
  119. package/dist-cli/chunks/store-7NX3S43H.js +4 -0
  120. package/dist-cli/chunks/telemetry-E7BUK6RA.js +4 -0
  121. package/dist-cli/chunks/timeline-IAM564NA.js +24 -0
  122. package/dist-cli/chunks/upgrade-CD55QXIX.js +7 -0
  123. package/dist-cli/chunks/upload-GZ6LIMYM.js +4 -0
  124. package/dist-cli/chunks/version-3DYJ5AS3.js +6 -0
  125. package/dist-cli/chunks/web-6NW6YLPI.js +4 -0
  126. package/dist-cli/chunks/what-happened-CZZDOOVG.js +25 -0
  127. package/dist-lib/agent-daemon-client.cjs +468 -0
  128. package/dist-lib/agent-events.cjs +48 -0
  129. package/dist-lib/agent-identity.cjs +53 -0
  130. package/dist-lib/agent-sessions.cjs +725 -0
  131. package/dist-lib/attached-projects.cjs +526 -0
  132. package/dist-lib/auth/shared-session.cjs +195 -0
  133. package/dist-lib/backend-origin.cjs +70 -0
  134. package/dist-lib/beta.cjs +41 -0
  135. package/dist-lib/beta.mjs +13 -0
  136. package/dist-lib/bridge-constants.cjs +161 -0
  137. package/dist-lib/cli-constants.cjs +32 -0
  138. package/dist-lib/config.cjs +96 -0
  139. package/dist-lib/detox/index.cjs +2863 -0
  140. package/dist-lib/detox/jest-preset.cjs +51 -0
  141. package/dist-lib/dev-bundle-resolution.cjs +223 -0
  142. package/dist-lib/home-paths.cjs +421 -0
  143. package/dist-lib/host/bridge-host.cjs +5600 -0
  144. package/dist-lib/host/fetch-proxy-handler.cjs +373 -0
  145. package/dist-lib/host/fetch-proxy-overrides.cjs +63 -0
  146. package/dist-lib/host/fetch-proxy-overrides.mjs +37 -0
  147. package/dist-lib/host/websocket-proxy.cjs +214 -0
  148. package/dist-lib/index.cjs +513 -0
  149. package/dist-lib/jump-to-source-babel.cjs +93 -0
  150. package/dist-lib/menu.cjs +620 -0
  151. package/dist-lib/menu.mjs +581 -0
  152. package/dist-lib/metro.cjs +297 -0
  153. package/dist-lib/profiles.cjs +246 -0
  154. package/dist-lib/public-brand.cjs +39 -0
  155. package/dist-lib/render-mode.cjs +54 -0
  156. package/dist-lib/scripts/dev-server-scanner.cjs +1034 -0
  157. package/dist-lib/sdk.cjs +2333 -0
  158. package/dist-lib/sdk.mjs +2240 -0
  159. package/dist-lib/skills.cjs +23911 -0
  160. package/dist-lib/vite.cjs +358 -0
  161. package/package.json +189 -18
  162. package/scripts/dev-server-scanner.ts +941 -0
  163. package/scripts/optional-demo-registry.ts +113 -0
  164. package/scripts/postinstall.cjs +3 -0
  165. package/scripts/preuninstall.cjs +118 -0
  166. package/skills/contrast/SKILL.md +171 -0
  167. package/skills/rnx-debug/SKILL.md +425 -0
  168. package/skills/rnx-perf/SKILL.md +295 -0
  169. package/skills/rnx-setup/SKILL.md +160 -0
  170. package/skills/rnx-test/SKILL.md +292 -0
  171. package/skills/rnx-visual/SKILL.md +122 -0
  172. package/src/agent-daemon-client.ts +410 -0
  173. package/src/agent-events.ts +71 -0
  174. package/src/agent-identity.ts +23 -0
  175. package/src/agent-prompt.ts +71 -0
  176. package/src/agent-sessions.ts +573 -0
  177. package/src/attached-projects.ts +539 -0
  178. package/src/auth/shared-session.ts +204 -0
  179. package/src/backend-origin.ts +49 -0
  180. package/src/beta.ts +19 -0
  181. package/src/bridge-constants.ts +171 -0
  182. package/src/browser-cache.ts +16 -0
  183. package/src/cli-constants.ts +1 -0
  184. package/src/cli-version.ts +32 -0
  185. package/src/codex-client.ts +215 -0
  186. package/src/config.ts +134 -0
  187. package/src/dev-bundle-resolution.ts +236 -0
  188. package/src/disk-cleanup.ts +466 -0
  189. package/src/home-paths.ts +552 -0
  190. package/src/host/agent-host.ts +666 -0
  191. package/src/host/bridge-host.ts +2626 -0
  192. package/src/host/fetch-proxy-handler.ts +397 -0
  193. package/src/host/fetch-proxy-overrides.ts +51 -0
  194. package/src/host/open-url.ts +89 -0
  195. package/src/host/websocket-proxy.ts +210 -0
  196. package/src/index.ts +12 -705
  197. package/src/jump-to-source-babel.ts +135 -0
  198. package/src/menu.ts +734 -0
  199. package/src/metro-plugin.ts +139 -0
  200. package/src/native-dev-bundle-url.ts +96 -0
  201. package/src/native-seam-manifest.ts +341 -0
  202. package/src/plist.ts +27 -0
  203. package/src/poll-until.ts +92 -0
  204. package/src/profiles.ts +179 -0
  205. package/src/public-brand.ts +9 -0
  206. package/src/render-mode.ts +27 -0
  207. package/src/runtime-assets.ts +228 -0
  208. package/src/runtime-delivery.ts +54 -0
  209. package/src/screenshots/compose.ts +422 -0
  210. package/src/screenshots/frame-compose.ts +454 -0
  211. package/src/screenshots/orchestrate.ts +256 -0
  212. package/src/screenshots/org-deck.ts +91 -0
  213. package/src/screenshots/registry.ts +58 -0
  214. package/src/screenshots/schema.ts +364 -0
  215. package/src/sdk.ts +7 -0
  216. package/src/settings-bundle.ts +418 -0
  217. package/src/skills/builtin/a11y-review.ts +132 -0
  218. package/src/skills/builtin/compat-check.ts +71 -0
  219. package/src/skills/builtin/maestro-test.ts +121 -0
  220. package/src/skills/builtin/perf-profile.ts +90 -0
  221. package/src/skills/builtin/screenshot-all.ts +52 -0
  222. package/src/skills/builtin/visual-diff.ts +100 -0
  223. package/src/skills/registry.ts +107 -0
  224. package/src/skills/types.ts +41 -0
  225. package/src/team-machine-prompt.ts +73 -0
  226. package/src/vite-plugin-one.ts +190 -0
  227. package/src/vite-plugin.ts +1750 -0
  228. package/src/worklets-babel.ts +134 -0
@@ -0,0 +1,190 @@
1
+ // sootsim plugin for One/Vite — serves the installed sootsim runtime at /__soot/
2
+ // from ~/.sootsim/runtimes/<version>. version-owned localhost origins remain
3
+ // bound to that directory across an active-runtime update.
4
+ //
5
+ // usage in vite.config.ts:
6
+ // import { sootsimPlugin } from 'sootsim/vite'
7
+ // export default { plugins: [one(), sootsimPlugin()] }
8
+
9
+ import fs from 'fs'
10
+ import path from 'path'
11
+ import { DEFAULT_SOOTSIM_BRIDGE_PORT } from './bridge-constants'
12
+ import { isDaemonLockfileFresh, readDaemonLockfile } from './home-paths'
13
+ import {
14
+ isRootRuntimeAssetPath,
15
+ resolveRuntimeFilePath,
16
+ resolveRuntimeRootForRequestHost,
17
+ serveRuntimeFile,
18
+ SOOTSIM_RUNTIME_MISSING_MESSAGE,
19
+ } from './runtime-assets'
20
+ import type { Plugin } from 'vite'
21
+
22
+ export interface SootSimPluginOptions {
23
+ // custom bundle URL (default: auto-detect from One's metro)
24
+ bundleUrl?: string
25
+ // path prefix (default: '/__soot')
26
+ prefix?: string
27
+ // disable sootsim
28
+ enabled?: boolean
29
+ }
30
+
31
+ export function sootsimPlugin(options: SootSimPluginOptions = {}): Plugin[] {
32
+ if (options.enabled === false) return []
33
+
34
+ const prefix = options.prefix || '/__soot'
35
+
36
+ return [
37
+ {
38
+ name: 'sootsim-one',
39
+
40
+ configureServer(server) {
41
+ const bundleUrl =
42
+ options.bundleUrl ||
43
+ '/node_modules/one/metro-entry.bundle?platform=ios&dev=true&minify=false'
44
+
45
+ // build the shell HTML, injecting the bundle URL (so main.tsx loads this
46
+ // app's bundle) AND window.__sootsimBridgePort. the bridge-port injection
47
+ // mirrors the dev-stack bridge-host: without it the engine's
48
+ // resolveBridgePort() falls back to a location-derived guess that mis-maps
49
+ // a non-Contrast app port (the mobile template's :4400 -> 9068) and the sim
50
+ // can't reach the bridge. resolved per-request from the daemon lockfile
51
+ // (the CLI's `open` writes/uses it before the shell loads) so the engine
52
+ // targets the SAME bridge the CLI does; default port otherwise.
53
+ const buildShellHtml = (runtimeRoot: string): string => {
54
+ const html = fs.readFileSync(path.join(runtimeRoot, 'index.html'), 'utf8')
55
+ const lock = readDaemonLockfile()
56
+ const bridgePort =
57
+ lock && isDaemonLockfileFresh(lock) && lock.bridgePort > 0
58
+ ? lock.bridgePort
59
+ : DEFAULT_SOOTSIM_BRIDGE_PORT
60
+ // inject the bridge port + a default bundle (only when the URL has none,
61
+ // so the CLI's resolved bundle wins), and PRESERVE the existing query.
62
+ // preserving the query is essential: `sootsim open` stamps the open URL
63
+ // with `inspectOpen=<token>` and matches the registered sim by that
64
+ // token (waitForSimMatch). the old code forced `?bundle=` only and
65
+ // stripped inspectOpen, so the sim registered but never matched and
66
+ // `open` timed out after 60s.
67
+ const inject =
68
+ `<script>(function(){var u=new URL(location.href);` +
69
+ `if(!u.searchParams.has('bundle'))u.searchParams.set('bundle',${JSON.stringify(bundleUrl)});` +
70
+ `window.__sootsimBridgePort=${bridgePort};` +
71
+ `history.replaceState(null,'','${prefix}/'+u.search)})()</script>`
72
+ return html.replace('</head>', inject + '</head>')
73
+ }
74
+
75
+ // mirror Set-Cookie into a readable header for sootsim's fetch wrapper
76
+ server.middlewares.use((req, res, next) => {
77
+ const origWriteHead = res.writeHead.bind(res)
78
+ res.writeHead = function (statusCode: number, ...args: unknown[]) {
79
+ const setCookie = res.getHeader('set-cookie')
80
+ if (setCookie) {
81
+ const value = Array.isArray(setCookie)
82
+ ? setCookie.join(', ')
83
+ : String(setCookie)
84
+ res.setHeader('x-sootsim-set-cookie', value)
85
+ res.setHeader('access-control-expose-headers', 'x-sootsim-set-cookie')
86
+ }
87
+ return (origWriteHead as (...args: unknown[]) => typeof res)(
88
+ statusCode,
89
+ ...args,
90
+ )
91
+ } as typeof res.writeHead
92
+ next()
93
+ })
94
+
95
+ // serve a minimal /__server-scan describing THIS vite dev server, so a
96
+ // sootsim shell loaded from <port>/__soot can resolve this app's native
97
+ // bundle. dev-bundle-resolution's resolvePortViaServerScan fetches
98
+ // `/__server-scan` RELATIVE to the shell origin; when the shell is loaded
99
+ // from this target origin, that hits here. without it the request SPA-
100
+ // falls-back to 404 and the bundle never resolves (sootsim open hangs).
101
+ // we describe only this server (the shell drives THIS app) — no localhost-
102
+ // wide scan, so the published plugin pulls in no shell-only scanner
103
+ // internals. shape matches DiscoveredServer enough for the resolver.
104
+ server.middlewares.use((req, res, next) => {
105
+ if ((req.url || '').split('?')[0] !== '/__server-scan') return next()
106
+ const scanPort = server.config.server.port || 8081
107
+ const absoluteBundleUrl = bundleUrl.startsWith('http')
108
+ ? bundleUrl
109
+ : `http://localhost:${scanPort}${bundleUrl}`
110
+ res.setHeader('content-type', 'application/json')
111
+ res.end(
112
+ JSON.stringify([
113
+ {
114
+ port: scanPort,
115
+ framework: 'one',
116
+ bundleUrl: absoluteBundleUrl,
117
+ lastSeen: Date.now(),
118
+ },
119
+ ]),
120
+ )
121
+ })
122
+
123
+ server.middlewares.use((req, res, next) => {
124
+ const url = req.url || ''
125
+ const pathname = url.split('?')[0]
126
+ const runtimeRoot = resolveRuntimeRootForRequestHost(req.headers.host)
127
+
128
+ if (!runtimeRoot) {
129
+ if (
130
+ pathname === prefix ||
131
+ pathname === prefix + '/' ||
132
+ pathname.startsWith(prefix + '/')
133
+ ) {
134
+ res.statusCode = 500
135
+ res.end(SOOTSIM_RUNTIME_MISSING_MESSAGE)
136
+ return
137
+ }
138
+ next()
139
+ return
140
+ }
141
+
142
+ // root-relative runtime assets emitted by the shell and engine vite
143
+ // builds. only intercept when the asset exists in the active runtime.
144
+ if (isRootRuntimeAssetPath(pathname)) {
145
+ const fullPath = resolveRuntimeFilePath(runtimeRoot, pathname)
146
+ if (fullPath) {
147
+ serveRuntimeFile(req, res, fullPath)
148
+ return
149
+ }
150
+ }
151
+
152
+ // serve the sootsim HTML shell — inject bundle URL + bridge port
153
+ if (pathname === prefix || pathname === prefix + '/') {
154
+ res.setHeader('content-type', 'text/html')
155
+ res.end(buildShellHtml(runtimeRoot))
156
+ return
157
+ }
158
+
159
+ // serve runtime files under /__soot/*.
160
+ if (pathname.startsWith(prefix + '/')) {
161
+ const fullPath = resolveRuntimeFilePath(
162
+ runtimeRoot,
163
+ pathname.slice(prefix.length),
164
+ )
165
+ if (fullPath) {
166
+ serveRuntimeFile(req, res, fullPath)
167
+ return
168
+ }
169
+
170
+ // extensionless in-shell routes should still load the shell.
171
+ const ext = path.extname(pathname)
172
+ if (!ext) {
173
+ res.setHeader('content-type', 'text/html')
174
+ res.end(buildShellHtml(runtimeRoot))
175
+ return
176
+ }
177
+ }
178
+
179
+ next()
180
+ })
181
+
182
+ const port = server.config.server.port || 8081
183
+ const sootsimUrl = `http://localhost:${port}${prefix}/`
184
+ console.log(`[rnx] serving at ${sootsimUrl}`)
185
+ },
186
+ },
187
+ ]
188
+ }
189
+
190
+ export default sootsimPlugin