react-native-mcp-kit 1.0.1 → 2.0.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 (164) hide show
  1. package/README.md +220 -720
  2. package/dist/babel/stripPlugin.d.ts.map +1 -1
  3. package/dist/babel/stripPlugin.js +40 -3
  4. package/dist/babel/stripPlugin.js.map +1 -1
  5. package/dist/bin/ios-hid +0 -0
  6. package/dist/client/contexts/McpContext/McpProvider.d.ts +1 -1
  7. package/dist/client/contexts/McpContext/McpProvider.d.ts.map +1 -1
  8. package/dist/client/contexts/McpContext/McpProvider.js +67 -4
  9. package/dist/client/contexts/McpContext/McpProvider.js.map +1 -1
  10. package/dist/client/contexts/McpContext/types.d.ts +11 -1
  11. package/dist/client/contexts/McpContext/types.d.ts.map +1 -1
  12. package/dist/client/core/McpClient.d.ts +7 -0
  13. package/dist/client/core/McpClient.d.ts.map +1 -1
  14. package/dist/client/core/McpClient.js +73 -2
  15. package/dist/client/core/McpClient.js.map +1 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -2
  19. package/dist/index.js.map +1 -1
  20. package/dist/modules/device/device.d.ts.map +1 -1
  21. package/dist/modules/device/device.js +16 -4
  22. package/dist/modules/device/device.js.map +1 -1
  23. package/dist/modules/fiberTree/fiberTree.d.ts.map +1 -1
  24. package/dist/modules/fiberTree/fiberTree.js +61 -15
  25. package/dist/modules/fiberTree/fiberTree.js.map +1 -1
  26. package/dist/modules/fiberTree/types.d.ts +9 -0
  27. package/dist/modules/fiberTree/types.d.ts.map +1 -1
  28. package/dist/modules/fiberTree/utils.d.ts +2 -1
  29. package/dist/modules/fiberTree/utils.d.ts.map +1 -1
  30. package/dist/modules/fiberTree/utils.js +57 -1
  31. package/dist/modules/fiberTree/utils.js.map +1 -1
  32. package/dist/modules/index.d.ts +0 -1
  33. package/dist/modules/index.d.ts.map +1 -1
  34. package/dist/modules/index.js +1 -3
  35. package/dist/modules/index.js.map +1 -1
  36. package/dist/modules/navigation/navigation.d.ts.map +1 -1
  37. package/dist/modules/navigation/navigation.js +32 -40
  38. package/dist/modules/navigation/navigation.js.map +1 -1
  39. package/dist/modules/navigation/types.d.ts +2 -1
  40. package/dist/modules/navigation/types.d.ts.map +1 -1
  41. package/dist/server/bridge.d.ts +38 -12
  42. package/dist/server/bridge.d.ts.map +1 -1
  43. package/dist/server/bridge.js +136 -56
  44. package/dist/server/bridge.js.map +1 -1
  45. package/dist/server/cli.js +10 -1
  46. package/dist/server/cli.js.map +1 -1
  47. package/dist/server/host/deviceResolver.d.ts +53 -0
  48. package/dist/server/host/deviceResolver.d.ts.map +1 -0
  49. package/dist/server/host/deviceResolver.js +555 -0
  50. package/dist/server/host/deviceResolver.js.map +1 -0
  51. package/dist/server/host/helpers.d.ts +33 -0
  52. package/dist/server/host/helpers.d.ts.map +1 -0
  53. package/dist/server/host/helpers.js +42 -0
  54. package/dist/server/host/helpers.js.map +1 -0
  55. package/dist/server/host/hostModule.d.ts +4 -0
  56. package/dist/server/host/hostModule.d.ts.map +1 -0
  57. package/dist/server/host/hostModule.js +26 -0
  58. package/dist/server/host/hostModule.js.map +1 -0
  59. package/dist/server/host/index.d.ts +4 -0
  60. package/dist/server/host/index.d.ts.map +1 -0
  61. package/dist/server/host/index.js +8 -0
  62. package/dist/server/host/index.js.map +1 -0
  63. package/dist/server/host/iosInput.d.ts +15 -0
  64. package/dist/server/host/iosInput.d.ts.map +1 -0
  65. package/dist/server/host/iosInput.js +93 -0
  66. package/dist/server/host/iosInput.js.map +1 -0
  67. package/dist/server/host/modules/screenshot.d.ts +4 -0
  68. package/dist/server/host/modules/screenshot.d.ts.map +1 -0
  69. package/dist/server/host/modules/screenshot.js +615 -0
  70. package/dist/server/host/modules/screenshot.js.map +1 -0
  71. package/dist/server/host/processRunner.d.ts +19 -0
  72. package/dist/server/host/processRunner.d.ts.map +1 -0
  73. package/dist/server/host/processRunner.js +58 -0
  74. package/dist/server/host/processRunner.js.map +1 -0
  75. package/dist/server/host/tools/capture.d.ts +6 -0
  76. package/dist/server/host/tools/capture.d.ts.map +1 -0
  77. package/dist/server/host/tools/capture.js +148 -0
  78. package/dist/server/host/tools/capture.js.map +1 -0
  79. package/dist/server/host/tools/devices.d.ts +4 -0
  80. package/dist/server/host/tools/devices.d.ts.map +1 -0
  81. package/dist/server/host/tools/devices.js +17 -0
  82. package/dist/server/host/tools/devices.js.map +1 -0
  83. package/dist/server/host/tools/input.d.ts +7 -0
  84. package/dist/server/host/tools/input.d.ts.map +1 -0
  85. package/dist/server/host/tools/input.js +286 -0
  86. package/dist/server/host/tools/input.js.map +1 -0
  87. package/dist/server/host/tools/lifecycle.d.ts +6 -0
  88. package/dist/server/host/tools/lifecycle.d.ts.map +1 -0
  89. package/dist/server/host/tools/lifecycle.js +271 -0
  90. package/dist/server/host/tools/lifecycle.js.map +1 -0
  91. package/dist/server/host/types.d.ts +17 -0
  92. package/dist/server/host/types.d.ts.map +1 -0
  93. package/dist/{modules/components → server/host}/types.js.map +1 -1
  94. package/dist/server/host/wda.d.ts +15 -0
  95. package/dist/server/host/wda.d.ts.map +1 -0
  96. package/dist/server/host/wda.js +100 -0
  97. package/dist/server/host/wda.js.map +1 -0
  98. package/dist/server/index.d.ts.map +1 -1
  99. package/dist/server/index.js +10 -17
  100. package/dist/server/index.js.map +1 -1
  101. package/dist/server/mcpServer.d.ts +5 -10
  102. package/dist/server/mcpServer.d.ts.map +1 -1
  103. package/dist/server/mcpServer.js +438 -153
  104. package/dist/server/mcpServer.js.map +1 -1
  105. package/dist/server/types.d.ts +2 -8
  106. package/dist/server/types.d.ts.map +1 -1
  107. package/dist/shared/protocol.d.ts +6 -0
  108. package/dist/shared/protocol.d.ts.map +1 -1
  109. package/package.json +6 -12
  110. package/dist/client/contexts/McpTreeContext/McpTracker.d.ts +0 -10
  111. package/dist/client/contexts/McpTreeContext/McpTracker.d.ts.map +0 -1
  112. package/dist/client/contexts/McpTreeContext/McpTracker.js +0 -101
  113. package/dist/client/contexts/McpTreeContext/McpTracker.js.map +0 -1
  114. package/dist/client/contexts/McpTreeContext/McpTreeContext.d.ts +0 -2
  115. package/dist/client/contexts/McpTreeContext/McpTreeContext.d.ts.map +0 -1
  116. package/dist/client/contexts/McpTreeContext/McpTreeContext.js +0 -6
  117. package/dist/client/contexts/McpTreeContext/McpTreeContext.js.map +0 -1
  118. package/dist/client/contexts/McpTreeContext/McpTreeRegistry.d.ts +0 -16
  119. package/dist/client/contexts/McpTreeContext/McpTreeRegistry.d.ts.map +0 -1
  120. package/dist/client/contexts/McpTreeContext/McpTreeRegistry.js +0 -96
  121. package/dist/client/contexts/McpTreeContext/McpTreeRegistry.js.map +0 -1
  122. package/dist/client/contexts/McpTreeContext/index.d.ts +0 -5
  123. package/dist/client/contexts/McpTreeContext/index.d.ts.map +0 -1
  124. package/dist/client/contexts/McpTreeContext/index.js +0 -10
  125. package/dist/client/contexts/McpTreeContext/index.js.map +0 -1
  126. package/dist/client/contexts/McpTreeContext/types.d.ts +0 -14
  127. package/dist/client/contexts/McpTreeContext/types.d.ts.map +0 -1
  128. package/dist/client/contexts/McpTreeContext/types.js.map +0 -1
  129. package/dist/modules/components/components.d.ts +0 -8
  130. package/dist/modules/components/components.d.ts.map +0 -1
  131. package/dist/modules/components/components.js +0 -315
  132. package/dist/modules/components/components.js.map +0 -1
  133. package/dist/modules/components/index.d.ts +0 -3
  134. package/dist/modules/components/index.d.ts.map +0 -1
  135. package/dist/modules/components/index.js +0 -6
  136. package/dist/modules/components/index.js.map +0 -1
  137. package/dist/modules/components/types.d.ts +0 -18
  138. package/dist/modules/components/types.d.ts.map +0 -1
  139. package/dist/modules/components/types.js +0 -3
  140. package/dist/modules/components/utils.d.ts +0 -18
  141. package/dist/modules/components/utils.d.ts.map +0 -1
  142. package/dist/modules/components/utils.js +0 -386
  143. package/dist/modules/components/utils.js.map +0 -1
  144. package/dist/modules/screenshot/index.d.ts +0 -3
  145. package/dist/modules/screenshot/index.d.ts.map +0 -1
  146. package/dist/modules/screenshot/index.js +0 -6
  147. package/dist/modules/screenshot/index.js.map +0 -1
  148. package/dist/modules/screenshot/screenshot.d.ts +0 -4
  149. package/dist/modules/screenshot/screenshot.d.ts.map +0 -1
  150. package/dist/modules/screenshot/screenshot.js +0 -89
  151. package/dist/modules/screenshot/screenshot.js.map +0 -1
  152. package/dist/modules/screenshot/types.d.ts +0 -5
  153. package/dist/modules/screenshot/types.d.ts.map +0 -1
  154. package/dist/modules/screenshot/types.js +0 -3
  155. package/dist/modules/screenshot/types.js.map +0 -1
  156. package/dist/modules/tree/index.d.ts +0 -2
  157. package/dist/modules/tree/index.d.ts.map +0 -1
  158. package/dist/modules/tree/index.js +0 -6
  159. package/dist/modules/tree/index.js.map +0 -1
  160. package/dist/modules/tree/tree.d.ts +0 -3
  161. package/dist/modules/tree/tree.d.ts.map +0 -1
  162. package/dist/modules/tree/tree.js +0 -274
  163. package/dist/modules/tree/tree.js.map +0 -1
  164. /package/dist/{client/contexts/McpTreeContext → server/host}/types.js +0 -0
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.restartAppTool = exports.terminateAppTool = exports.launchAppTool = void 0;
4
+ const deviceResolver_1 = require("../../../server/host/deviceResolver");
5
+ const helpers_1 = require("../../../server/host/helpers");
6
+ const processRunner_1 = require("../../../server/host/processRunner");
7
+ const LAUNCH_TIMEOUT_MS = 15_000;
8
+ const launchIos = async (udid, bundleId, runner) => {
9
+ try {
10
+ const proc = await runner('xcrun', ['simctl', 'launch', udid, bundleId], {
11
+ timeoutMs: LAUNCH_TIMEOUT_MS,
12
+ });
13
+ if (proc.timedOut) {
14
+ return { error: `iOS launch timed out after ${LAUNCH_TIMEOUT_MS}ms` };
15
+ }
16
+ if (proc.exitCode !== 0) {
17
+ return {
18
+ error: `xcrun simctl launch failed (exit ${proc.exitCode}): ${proc.stderr.toString('utf8').trim().slice(0, 500)}`,
19
+ };
20
+ }
21
+ return { ok: true };
22
+ }
23
+ catch (err) {
24
+ if (err instanceof processRunner_1.ProcessNotFoundError) {
25
+ return {
26
+ error: 'xcrun not found. iOS launch requires Xcode command line tools.',
27
+ };
28
+ }
29
+ return { error: `Failed to launch iOS app: ${err.message}` };
30
+ }
31
+ };
32
+ const PM_LIST_TIMEOUT_MS = 5_000;
33
+ // `adb shell pm list packages <name>` returns every package whose name CONTAINS
34
+ // <name>, so we still have to filter for an exact match in code. Returns true
35
+ // if the package is installed, false if it isn't, and null if pm itself failed
36
+ // (in which case the caller should fall through to the launch attempt and let
37
+ // monkey produce its own error).
38
+ const isAndroidPackageInstalled = async (serial, packageName, runner) => {
39
+ try {
40
+ const proc = await runner('adb', ['-s', serial, 'shell', 'pm', 'list', 'packages', packageName], { timeoutMs: PM_LIST_TIMEOUT_MS });
41
+ if (proc.timedOut || proc.exitCode !== 0) {
42
+ return null;
43
+ }
44
+ const lines = proc.stdout.toString('utf8').split('\n');
45
+ return lines.some((line) => {
46
+ return line.trim() === `package:${packageName}`;
47
+ });
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ };
53
+ const launchAndroid = async (serial, packageName, runner) => {
54
+ // Verify the package exists first — `adb shell monkey` produces a confusing
55
+ // exit code (252 with verbose-args echo on stderr) when the target package
56
+ // isn't installed, which makes the original failure hard to diagnose.
57
+ const installed = await isAndroidPackageInstalled(serial, packageName, runner);
58
+ if (installed === false) {
59
+ return {
60
+ error: `Package '${packageName}' is not installed on '${serial}'. Verify the bundleId — Android applicationId is usually different from the iOS bundle id (use \`adb -s ${serial} shell pm list packages\` to see what's installed).`,
61
+ };
62
+ }
63
+ try {
64
+ const proc = await runner('adb', [
65
+ '-s',
66
+ serial,
67
+ 'shell',
68
+ 'monkey',
69
+ '-p',
70
+ packageName,
71
+ '-c',
72
+ 'android.intent.category.LAUNCHER',
73
+ '1',
74
+ ], { timeoutMs: LAUNCH_TIMEOUT_MS });
75
+ if (proc.timedOut) {
76
+ return { error: `Android launch timed out after ${LAUNCH_TIMEOUT_MS}ms` };
77
+ }
78
+ if (proc.exitCode !== 0) {
79
+ return {
80
+ error: `adb shell monkey failed (exit ${proc.exitCode}) for package '${packageName}': ${proc.stderr.toString('utf8').trim().slice(0, 500)}`,
81
+ };
82
+ }
83
+ // monkey reports "No activities found to run, monkey aborted." to stdout on missing packages
84
+ const stdoutText = proc.stdout.toString('utf8');
85
+ if (stdoutText.includes('No activities found')) {
86
+ return {
87
+ error: `adb shell monkey: no launcher activity found for package '${packageName}'. The app is installed but has no LAUNCHER intent.`,
88
+ };
89
+ }
90
+ return { ok: true };
91
+ }
92
+ catch (err) {
93
+ if (err instanceof processRunner_1.ProcessNotFoundError) {
94
+ return {
95
+ error: 'adb not found. Android launch requires Android platform-tools on PATH.',
96
+ };
97
+ }
98
+ return { error: `Failed to launch Android app: ${err.message}` };
99
+ }
100
+ };
101
+ const terminateIos = async (udid, bundleId, runner) => {
102
+ try {
103
+ const proc = await runner('xcrun', ['simctl', 'terminate', udid, bundleId], {
104
+ timeoutMs: LAUNCH_TIMEOUT_MS,
105
+ });
106
+ if (proc.timedOut) {
107
+ return { error: `iOS terminate timed out after ${LAUNCH_TIMEOUT_MS}ms` };
108
+ }
109
+ if (proc.exitCode !== 0) {
110
+ return {
111
+ error: `xcrun simctl terminate failed (exit ${proc.exitCode}): ${proc.stderr.toString('utf8').trim().slice(0, 500)}`,
112
+ };
113
+ }
114
+ return { ok: true };
115
+ }
116
+ catch (err) {
117
+ if (err instanceof processRunner_1.ProcessNotFoundError) {
118
+ return {
119
+ error: 'xcrun not found. iOS terminate requires Xcode command line tools.',
120
+ };
121
+ }
122
+ return { error: `Failed to terminate iOS app: ${err.message}` };
123
+ }
124
+ };
125
+ const terminateAndroid = async (serial, packageName, runner) => {
126
+ try {
127
+ const proc = await runner('adb', ['-s', serial, 'shell', 'am', 'force-stop', packageName], {
128
+ timeoutMs: LAUNCH_TIMEOUT_MS,
129
+ });
130
+ if (proc.timedOut) {
131
+ return { error: `Android terminate timed out after ${LAUNCH_TIMEOUT_MS}ms` };
132
+ }
133
+ // am force-stop returns exit 0 even for non-existent packages (known quirk),
134
+ // but we still surface any unexpected non-zero exit as an error.
135
+ if (proc.exitCode !== 0) {
136
+ return {
137
+ error: `adb shell am force-stop failed (exit ${proc.exitCode}): ${proc.stderr.toString('utf8').trim().slice(0, 500)}`,
138
+ };
139
+ }
140
+ return { ok: true };
141
+ }
142
+ catch (err) {
143
+ if (err instanceof processRunner_1.ProcessNotFoundError) {
144
+ return {
145
+ error: 'adb not found. Android terminate requires Android platform-tools on PATH.',
146
+ };
147
+ }
148
+ return { error: `Failed to terminate Android app: ${err.message}` };
149
+ }
150
+ };
151
+ const resolveLaunchTarget = async (ctx, args, runner) => {
152
+ const resolved = await (0, deviceResolver_1.resolveDevice)(ctx, (0, helpers_1.parseResolveOptions)(args), runner);
153
+ if (!resolved.ok) {
154
+ return { error: resolved.error, ok: false };
155
+ }
156
+ const explicitAppId = (0, helpers_1.parseStringArg)(args.appId);
157
+ const bundleId = explicitAppId ?? resolved.device.bundleId;
158
+ if (!bundleId) {
159
+ return {
160
+ error: "appId required. Pass it explicitly (e.g. 'by.21vek.mobile') or target a clientId whose client registered its bundleId metadata.",
161
+ ok: false,
162
+ };
163
+ }
164
+ return { bundleId, device: resolved.device, ok: true };
165
+ };
166
+ const APPID_SCHEMA = {
167
+ description: 'iOS bundle ID or Android package name. Optional when targeting a connected client whose registration metadata includes bundleId.',
168
+ type: 'string',
169
+ };
170
+ const launchAppTool = (runner) => {
171
+ return {
172
+ description: "Launch an installed app on a booted iOS simulator (xcrun simctl launch) or Android emulator/device (adb shell monkey). Pass `appId` explicitly (iOS bundle ID or Android package name), or omit it to fall back to the target client's registered bundleId metadata. Target device resolution: explicit `udid`/`serial` > outer `clientId` > `platform` + auto-pick > bare scan. Real iOS devices are not supported.",
173
+ handler: async (args, ctx) => {
174
+ const target = await resolveLaunchTarget(ctx, args, runner);
175
+ if (!target.ok) {
176
+ return { error: target.error };
177
+ }
178
+ const result = target.device.platform === 'ios'
179
+ ? await launchIos(target.device.nativeId, target.bundleId, runner)
180
+ : await launchAndroid(target.device.nativeId, target.bundleId, runner);
181
+ if ('error' in result) {
182
+ return { error: result.error };
183
+ }
184
+ const success = {
185
+ bundleId: target.bundleId,
186
+ device: target.device,
187
+ launched: true,
188
+ };
189
+ return success;
190
+ },
191
+ inputSchema: {
192
+ appId: APPID_SCHEMA,
193
+ platform: helpers_1.PLATFORM_ARG_SCHEMA,
194
+ ...helpers_1.NATIVE_ID_SCHEMA,
195
+ },
196
+ timeout: LAUNCH_TIMEOUT_MS,
197
+ };
198
+ };
199
+ exports.launchAppTool = launchAppTool;
200
+ const terminateAppTool = (runner) => {
201
+ return {
202
+ description: "Terminate (force-stop) an installed app on a booted iOS simulator (xcrun simctl terminate) or Android emulator/device (adb shell am force-stop). Pass `appId` explicitly or omit it to fall back to the target client's registered bundleId metadata. Target device resolution: explicit `udid`/`serial` > outer `clientId` > `platform` + auto-pick > bare scan. Real iOS devices are not supported.",
203
+ handler: async (args, ctx) => {
204
+ const target = await resolveLaunchTarget(ctx, args, runner);
205
+ if (!target.ok) {
206
+ return { error: target.error };
207
+ }
208
+ const result = target.device.platform === 'ios'
209
+ ? await terminateIos(target.device.nativeId, target.bundleId, runner)
210
+ : await terminateAndroid(target.device.nativeId, target.bundleId, runner);
211
+ if ('error' in result) {
212
+ return { error: result.error };
213
+ }
214
+ const success = {
215
+ bundleId: target.bundleId,
216
+ device: target.device,
217
+ terminated: true,
218
+ };
219
+ return success;
220
+ },
221
+ inputSchema: {
222
+ appId: APPID_SCHEMA,
223
+ platform: helpers_1.PLATFORM_ARG_SCHEMA,
224
+ ...helpers_1.NATIVE_ID_SCHEMA,
225
+ },
226
+ timeout: LAUNCH_TIMEOUT_MS,
227
+ };
228
+ };
229
+ exports.terminateAppTool = terminateAppTool;
230
+ const RESTART_TEARDOWN_DELAY_MS = 200;
231
+ const restartAppTool = (runner) => {
232
+ return {
233
+ description: "Terminate then immediately relaunch an installed app on iOS simulator or Android device. Equivalent to host__terminate_app followed by host__launch_app, but in a single call. Pass `appId` explicitly or omit it to fall back to the target client's registered bundleId metadata. Target device resolution: explicit `udid`/`serial` > outer `clientId` > `platform` + auto-pick > bare scan. Real iOS devices are not supported.",
234
+ handler: async (args, ctx) => {
235
+ const target = await resolveLaunchTarget(ctx, args, runner);
236
+ if (!target.ok) {
237
+ return { error: target.error };
238
+ }
239
+ const terminated = target.device.platform === 'ios'
240
+ ? await terminateIos(target.device.nativeId, target.bundleId, runner)
241
+ : await terminateAndroid(target.device.nativeId, target.bundleId, runner);
242
+ if ('error' in terminated) {
243
+ return { error: terminated.error };
244
+ }
245
+ // Give the OS a moment to finish tearing down before re-launch.
246
+ await new Promise((r) => {
247
+ return setTimeout(r, RESTART_TEARDOWN_DELAY_MS);
248
+ });
249
+ const launched = target.device.platform === 'ios'
250
+ ? await launchIos(target.device.nativeId, target.bundleId, runner)
251
+ : await launchAndroid(target.device.nativeId, target.bundleId, runner);
252
+ if ('error' in launched) {
253
+ return { error: launched.error };
254
+ }
255
+ const success = {
256
+ bundleId: target.bundleId,
257
+ device: target.device,
258
+ restarted: true,
259
+ };
260
+ return success;
261
+ },
262
+ inputSchema: {
263
+ appId: APPID_SCHEMA,
264
+ platform: helpers_1.PLATFORM_ARG_SCHEMA,
265
+ ...helpers_1.NATIVE_ID_SCHEMA,
266
+ },
267
+ timeout: LAUNCH_TIMEOUT_MS * 2 + RESTART_TEARDOWN_DELAY_MS + 500,
268
+ };
269
+ };
270
+ exports.restartAppTool = restartAppTool;
271
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/server/host/tools/lifecycle.ts"],"names":[],"mappings":";;;AAAA,iEAAkF;AAClF,mDAM+B;AAC/B,+DAAuF;AAGvF,MAAM,iBAAiB,GAAG,MAAM,CAAC;AA4BjC,MAAM,SAAS,GAAG,KAAK,EACrB,IAAY,EACZ,QAAgB,EAChB,MAAqB,EACmB,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;YACvE,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,8BAA8B,iBAAiB,IAAI,EAAE,CAAC;QACxE,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE,oCAAoC,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aAClH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,oCAAoB,EAAE,CAAC;YACxC,OAAO;gBACL,KAAK,EAAE,gEAAgE;aACxE,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,6BAA8B,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IAC1E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,gFAAgF;AAChF,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAC9E,iCAAiC;AACjC,MAAM,yBAAyB,GAAG,KAAK,EACrC,MAAc,EACd,WAAmB,EACnB,MAAqB,EACI,EAAE;IAC3B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,KAAK,EACL,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,EAC9D,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAClC,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,WAAW,WAAW,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EACzB,MAAc,EACd,WAAmB,EACnB,MAAqB,EACmB,EAAE;IAC1C,4EAA4E;IAC5E,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,SAAS,GAAG,MAAM,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC/E,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE,YAAY,WAAW,0BAA0B,MAAM,4GAA4G,MAAM,qDAAqD;SACtO,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CACvB,KAAK,EACL;YACE,IAAI;YACJ,MAAM;YACN,OAAO;YACP,QAAQ;YACR,IAAI;YACJ,WAAW;YACX,IAAI;YACJ,kCAAkC;YAClC,GAAG;SACJ,EACD,EAAE,SAAS,EAAE,iBAAiB,EAAE,CACjC,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,kCAAkC,iBAAiB,IAAI,EAAE,CAAC;QAC5E,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE,iCAAiC,IAAI,CAAC,QAAQ,kBAAkB,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aAC5I,CAAC;QACJ,CAAC;QACD,6FAA6F;QAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC/C,OAAO;gBACL,KAAK,EAAE,6DAA6D,WAAW,qDAAqD;aACrI,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,oCAAoB,EAAE,CAAC;YACxC,OAAO;gBACL,KAAK,EAAE,wEAAwE;aAChF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,iCAAkC,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IAC9E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EACxB,IAAY,EACZ,QAAgB,EAChB,MAAqB,EACmB,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE;YAC1E,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,iCAAiC,iBAAiB,IAAI,EAAE,CAAC;QAC3E,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE,uCAAuC,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aACrH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,oCAAoB,EAAE,CAAC;YACxC,OAAO;gBACL,KAAK,EAAE,mEAAmE;aAC3E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,gCAAiC,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IAC7E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,KAAK,EAC5B,MAAc,EACd,WAAmB,EACnB,MAAqB,EACmB,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE;YACzF,SAAS,EAAE,iBAAiB;SAC7B,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,qCAAqC,iBAAiB,IAAI,EAAE,CAAC;QAC/E,CAAC;QACD,6EAA6E;QAC7E,iEAAiE;QACjE,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,KAAK,EAAE,wCAAwC,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aACtH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,oCAAoB,EAAE,CAAC;YACxC,OAAO;gBACL,KAAK,EAAE,2EAA2E;aACnF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,oCAAqC,GAAa,CAAC,OAAO,EAAE,EAAE,CAAC;IACjF,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,KAAK,EAC/B,GAAgB,EAChB,IAA6B,EAC7B,MAAqB,EACY,EAAE;IACnC,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAa,EAAC,GAAG,EAAE,IAAA,6BAAmB,EAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,aAAa,GAAG,IAAA,wBAAc,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,KAAK,EACH,iIAAiI;YACnI,EAAE,EAAE,KAAK;SACV,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG;IACnB,WAAW,EACT,kIAAkI;IACpI,IAAI,EAAE,QAAQ;CACN,CAAC;AAEJ,MAAM,aAAa,GAAG,CAAC,MAAqB,EAAmB,EAAE;IACtE,OAAO;QACL,WAAW,EACT,sZAAsZ;QACxZ,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;YACD,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK;gBAC9B,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAClE,CAAC,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3E,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;YACD,MAAM,OAAO,GAAkB;gBAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,IAAI;aACf,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,WAAW,EAAE;YACX,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,6BAAmB;YAC7B,GAAG,0BAAgB;SACpB;QACD,OAAO,EAAE,iBAAiB;KAC3B,CAAC;AACJ,CAAC,CAAC;AA9BW,QAAA,aAAa,iBA8BxB;AAEK,MAAM,gBAAgB,GAAG,CAAC,MAAqB,EAAmB,EAAE;IACzE,OAAO;QACL,WAAW,EACT,uYAAuY;QACzY,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;YACD,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK;gBAC9B,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACrE,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9E,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;gBACtB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;YACD,MAAM,OAAO,GAAqB;gBAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,UAAU,EAAE,IAAI;aACjB,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,WAAW,EAAE;YACX,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,6BAAmB;YAC7B,GAAG,0BAAgB;SACpB;QACD,OAAO,EAAE,iBAAiB;KAC3B,CAAC;AACJ,CAAC,CAAC;AA9BW,QAAA,gBAAgB,oBA8B3B;AAEF,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE/B,MAAM,cAAc,GAAG,CAAC,MAAqB,EAAmB,EAAE;IACvE,OAAO;QACL,WAAW,EACT,qaAAqa;QACva,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,CAAC;YACD,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK;gBAC9B,CAAC,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACrE,CAAC,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9E,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;gBAC1B,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC;YACD,gEAAgE;YAChE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACtB,OAAO,UAAU,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GACZ,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,KAAK;gBAC9B,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAClE,CAAC,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3E,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;gBACxB,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnC,CAAC;YACD,MAAM,OAAO,GAAmB;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,IAAI;aAChB,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,WAAW,EAAE;YACX,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,6BAAmB;YAC7B,GAAG,0BAAgB;SACpB;QACD,OAAO,EAAE,iBAAiB,GAAG,CAAC,GAAG,yBAAyB,GAAG,GAAG;KACjE,CAAC;AACJ,CAAC,CAAC;AAzCW,QAAA,cAAc,kBAyCzB"}
@@ -0,0 +1,17 @@
1
+ import { type Bridge } from '../../server/bridge';
2
+ export interface HostContext {
3
+ bridge: Bridge;
4
+ requestedClientId?: string;
5
+ }
6
+ export interface HostToolHandler {
7
+ description: string;
8
+ handler: (args: Record<string, unknown>, ctx: HostContext) => unknown | Promise<unknown>;
9
+ inputSchema?: Record<string, unknown>;
10
+ timeout?: number;
11
+ }
12
+ export interface HostModule {
13
+ name: string;
14
+ tools: Record<string, HostToolHandler>;
15
+ description?: string;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/host/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/components/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/server/host/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { type AppTargetError } from './helpers';
2
+ import { type ProcessRunner } from './processRunner';
3
+ export declare const tapIos: (udid: string, xPixels: number, yPixels: number, runner: ProcessRunner) => Promise<{
4
+ ok: true;
5
+ } | AppTargetError>;
6
+ export declare const swipeIos: (udid: string, x1Pixels: number, y1Pixels: number, x2Pixels: number, y2Pixels: number, durationMs: number, runner: ProcessRunner) => Promise<{
7
+ ok: true;
8
+ } | AppTargetError>;
9
+ export declare const typeTextIos: (udid: string, text: string, submit: boolean, runner: ProcessRunner) => Promise<{
10
+ ok: true;
11
+ } | AppTargetError>;
12
+ export declare const pressKeyIos: (udid: string, key: string, runner: ProcessRunner) => Promise<{
13
+ ok: true;
14
+ } | AppTargetError>;
15
+ //# sourceMappingURL=wda.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wda.d.ts","sourceRoot":"","sources":["../../../src/server/host/wda.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA8C3E,eAAO,MAAM,MAAM,SACX,MAAM,WACH,MAAM,WACN,MAAM,UACP,aAAa,KACpB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG,cAAc,CAGvC,CAAC;AAEF,eAAO,MAAM,QAAQ,SACb,MAAM,YACF,MAAM,YACN,MAAM,YACN,MAAM,YACN,MAAM,cACJ,MAAM,UACV,aAAa,KACpB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG,cAAc,CAevC,CAAC;AAEF,eAAO,MAAM,WAAW,SAChB,MAAM,QACN,MAAM,UACJ,OAAO,UACP,aAAa,KACpB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG,cAAc,CAGvC,CAAC;AAmBF,eAAO,MAAM,WAAW,SAChB,MAAM,OACP,MAAM,UACH,aAAa,KACpB,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG,cAAc,CAkBvC,CAAC"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ // iOS input injection via the bundled ios-hid Swift binary.
3
+ // ios-hid uses Apple private frameworks (SimulatorKit, CoreSimulator) to inject
4
+ // HID events directly into iOS Simulator — no WDA, no idb, no external deps.
5
+ // Coordinates are in POINTS (not pixels). Callers must convert.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.pressKeyIos = exports.typeTextIos = exports.swipeIos = exports.tapIos = void 0;
8
+ const node_path_1 = require("node:path");
9
+ const processRunner_1 = require("./processRunner");
10
+ const IOS_INPUT_TIMEOUT_MS = 5_000;
11
+ // Default pixelRatio for iOS simulators. Most modern iPhones are 3x.
12
+ // iPhone SE is 2x, iPads are 2x. When a connected client provides
13
+ // its pixelRatio via device module we could use that instead, but for
14
+ // now default to 3 which covers the majority of dev simulators.
15
+ const DEFAULT_IOS_PIXEL_RATIO = 3;
16
+ const getIosHidPath = () => {
17
+ // ios-hid binary lives in dist/bin/ relative to the package root.
18
+ // This file is at dist/server/host/wda.js after compilation,
19
+ // so package root is three levels up.
20
+ return (0, node_path_1.join)(__dirname, '..', '..', 'bin', 'ios-hid');
21
+ };
22
+ const runIosHid = async (runner, args, action) => {
23
+ const bin = getIosHidPath();
24
+ try {
25
+ const proc = await runner(bin, args, { timeoutMs: IOS_INPUT_TIMEOUT_MS });
26
+ if (proc.timedOut) {
27
+ return { error: `iOS ${action} timed out after ${IOS_INPUT_TIMEOUT_MS}ms` };
28
+ }
29
+ if (proc.exitCode !== 0) {
30
+ const stderr = proc.stderr.toString('utf8').trim();
31
+ return {
32
+ error: `iOS ${action} failed: ${stderr.slice(0, 500) || `exit code ${proc.exitCode}`}`,
33
+ };
34
+ }
35
+ return { ok: true };
36
+ }
37
+ catch (err) {
38
+ if (err instanceof processRunner_1.ProcessNotFoundError) {
39
+ return {
40
+ error: 'ios-hid binary not found. This usually means the package was installed on a non-macOS platform. iOS input injection requires macOS with Xcode.',
41
+ };
42
+ }
43
+ return { error: `iOS ${action} failed: ${err.message}` };
44
+ }
45
+ };
46
+ const tapIos = async (udid, xPixels, yPixels, runner) => {
47
+ const r = DEFAULT_IOS_PIXEL_RATIO;
48
+ return runIosHid(runner, ['tap', udid, String(xPixels / r), String(yPixels / r)], 'tap');
49
+ };
50
+ exports.tapIos = tapIos;
51
+ const swipeIos = async (udid, x1Pixels, y1Pixels, x2Pixels, y2Pixels, durationMs, runner) => {
52
+ const r = DEFAULT_IOS_PIXEL_RATIO;
53
+ return runIosHid(runner, [
54
+ 'swipe',
55
+ udid,
56
+ String(x1Pixels / r),
57
+ String(y1Pixels / r),
58
+ String(x2Pixels / r),
59
+ String(y2Pixels / r),
60
+ String(durationMs / 1000),
61
+ ], 'swipe');
62
+ };
63
+ exports.swipeIos = swipeIos;
64
+ const typeTextIos = async (udid, text, submit, runner) => {
65
+ const fullText = submit ? text + '\n' : text;
66
+ return runIosHid(runner, ['type', udid, fullText], 'type');
67
+ };
68
+ exports.typeTextIos = typeTextIos;
69
+ // Keys that don't exist on iOS
70
+ const IOS_UNSUPPORTED_KEYS = new Set(['back', 'menu', 'power', 'volume_down', 'volume_up']);
71
+ // Map our key names to ios-hid button names
72
+ const IOS_BUTTON_MAP = {
73
+ home: 'home',
74
+ };
75
+ // Map keyboard keys to Unicode values for ios-hid type command
76
+ const IOS_KEY_TEXT = {
77
+ backspace: '\u007F',
78
+ enter: '\n',
79
+ escape: '\u001B',
80
+ space: ' ',
81
+ tab: '\t',
82
+ };
83
+ const pressKeyIos = async (udid, key, runner) => {
84
+ if (IOS_UNSUPPORTED_KEYS.has(key)) {
85
+ return {
86
+ error: `Key '${key}' is not available on iOS Simulator. Supported: enter, tab, space, backspace, escape, home.`,
87
+ };
88
+ }
89
+ const button = IOS_BUTTON_MAP[key];
90
+ if (button) {
91
+ return runIosHid(runner, ['button', udid, button], 'button');
92
+ }
93
+ const keyText = IOS_KEY_TEXT[key];
94
+ if (keyText) {
95
+ return runIosHid(runner, ['type', udid, keyText], 'key');
96
+ }
97
+ return { error: `Unknown key '${key}' for iOS.` };
98
+ };
99
+ exports.pressKeyIos = pressKeyIos;
100
+ //# sourceMappingURL=wda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wda.js","sourceRoot":"","sources":["../../../src/server/host/wda.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,wBAAsB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBvE;AAED,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,wBAAsB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBvE;AAED,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC"}
@@ -6,25 +6,18 @@ const mcpServer_1 = require("./mcpServer");
6
6
  const DEFAULT_PORT = 8347;
7
7
  async function createServer(config) {
8
8
  const port = config?.port ?? DEFAULT_PORT;
9
+ const hostModules = config?.hostModules ?? [];
9
10
  const bridge = new bridge_1.Bridge(port);
10
- const mcpServer = new mcpServer_1.McpServerWrapper(bridge);
11
- bridge.onRegistration((modules) => {
12
- mcpServer.setModules(modules);
13
- });
14
- bridge.onStateUpdate((key, value) => {
15
- mcpServer.setState(key, value);
16
- });
17
- bridge.onStateRemove((key) => {
18
- mcpServer.removeState(key);
19
- });
20
- bridge.onToolRegister((module, tool) => {
21
- mcpServer.addDynamicTool(module, tool.name, tool.description);
22
- });
23
- bridge.onToolUnregister((module, toolName) => {
24
- mcpServer.removeDynamicTool(module, toolName);
25
- });
11
+ const mcpServer = new mcpServer_1.McpServerWrapper(bridge, hostModules);
26
12
  await bridge.start();
27
- process.stderr.write(`react-native-mcp-kit bridge listening on port ${port}\n`);
13
+ process.stderr.write(`react-native-mcp-kit bridge listening on port ${port}` +
14
+ (hostModules.length > 0
15
+ ? ` (host modules: ${hostModules
16
+ .map((m) => {
17
+ return m.name;
18
+ })
19
+ .join(', ')})\n`
20
+ : '\n'));
28
21
  await mcpServer.start();
29
22
  }
30
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;AAMA,oCAyBC;AA/BD,qCAAkC;AAClC,2CAA+C;AAG/C,MAAM,YAAY,GAAG,IAAI,CAAC;AAEnB,KAAK,UAAU,YAAY,CAAC,MAAqB;IACtD,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,YAAY,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,4BAAgB,CAAC,MAAM,CAAC,CAAC;IAE/C,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;QAChC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAClC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACrC,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;QAC3C,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,IAAI,IAAI,CAAC,CAAC;IAEhF,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;AAOA,oCAmBC;AA1BD,qCAAkC;AAElC,2CAA+C;AAG/C,MAAM,YAAY,GAAG,IAAI,CAAC;AAEnB,KAAK,UAAU,YAAY,CAAC,MAAqB;IACtD,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,YAAY,CAAC;IAC1C,MAAM,WAAW,GAAiB,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,4BAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE5D,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iDAAiD,IAAI,EAAE;QACrD,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACrB,CAAC,CAAC,mBAAmB,WAAW;iBAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,OAAO,CAAC,CAAC,IAAI,CAAC;YAChB,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,KAAK;YACpB,CAAC,CAAC,IAAI,CAAC,CACZ,CAAC;IAEF,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC"}
@@ -1,19 +1,14 @@
1
- import { type ModuleDescriptor } from '../shared/protocol';
2
1
  import { type Bridge } from './bridge';
2
+ import { type HostModule } from './host/types';
3
3
  export declare class McpServerWrapper {
4
4
  private readonly bridge;
5
- private dynamicTools;
5
+ private hostModules;
6
+ private hostToolMap;
6
7
  private mcp;
7
- private modules;
8
- private stateStore;
9
- constructor(bridge: Bridge);
10
- addDynamicTool(module: string, name: string, description: string): void;
11
- removeDynamicTool(module: string, name: string): void;
12
- setModules(modules: ModuleDescriptor[]): void;
13
- setState(key: string, value: unknown): void;
14
- removeState(key: string): void;
8
+ constructor(bridge: Bridge, hostModules?: HostModule[]);
15
9
  start(): Promise<void>;
16
10
  private registerTools;
11
+ private buildToolGroups;
17
12
  private formatResult;
18
13
  }
19
14
  //# sourceMappingURL=mcpServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcpServer.d.ts","sourceRoot":"","sources":["../../src/server/mcpServer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE5F,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAYvC,qBAAa,gBAAgB;IAMf,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,YAAY,CAA8D;IAClF,OAAO,CAAC,GAAG,CAAY;IACvB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,UAAU,CAA8B;gBAEnB,MAAM,EAAE,MAAM;IAS3C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAIvE,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAIrD,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAI7C,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI3C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,OAAO,CAAC,aAAa;IAuRrB,OAAO,CAAC,YAAY;CAerB"}
1
+ {"version":3,"file":"mcpServer.d.ts","sourceRoot":"","sources":["../../src/server/mcpServer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAAoB,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,KAAK,UAAU,EAAwB,MAAM,cAAc,CAAC;AAgIrE,qBAAa,gBAAgB;IAMzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,GAAG,CAAY;gBAGJ,MAAM,EAAE,MAAM,EAC/B,WAAW,GAAE,UAAU,EAAO;IAuB1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,OAAO,CAAC,aAAa;IA4gBrB,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,YAAY;CAerB"}