react-native-mcp-kit 4.2.0 → 4.3.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 (239) hide show
  1. package/dist/babel/testIdPlugin/collectHooks.d.ts +13 -0
  2. package/dist/babel/testIdPlugin/collectHooks.d.ts.map +1 -0
  3. package/dist/babel/testIdPlugin/collectHooks.js +112 -0
  4. package/dist/babel/testIdPlugin/collectHooks.js.map +1 -0
  5. package/dist/babel/testIdPlugin/constants.d.ts +6 -0
  6. package/dist/babel/testIdPlugin/constants.d.ts.map +1 -0
  7. package/dist/babel/testIdPlugin/constants.js +49 -0
  8. package/dist/babel/testIdPlugin/constants.js.map +1 -0
  9. package/dist/babel/testIdPlugin/helpers.d.ts +7 -0
  10. package/dist/babel/testIdPlugin/helpers.d.ts.map +1 -0
  11. package/dist/babel/testIdPlugin/helpers.js +77 -0
  12. package/dist/babel/testIdPlugin/helpers.js.map +1 -0
  13. package/dist/babel/testIdPlugin/hocUnwrap.d.ts +4 -0
  14. package/dist/babel/testIdPlugin/hocUnwrap.d.ts.map +1 -0
  15. package/dist/babel/testIdPlugin/hocUnwrap.js +94 -0
  16. package/dist/babel/testIdPlugin/hocUnwrap.js.map +1 -0
  17. package/dist/babel/{testIdPlugin.d.ts → testIdPlugin/index.d.ts} +1 -1
  18. package/dist/babel/testIdPlugin/index.d.ts.map +1 -0
  19. package/dist/babel/testIdPlugin/index.js +205 -0
  20. package/dist/babel/testIdPlugin/index.js.map +1 -0
  21. package/dist/babel/testIdPlugin/inject.d.ts +7 -0
  22. package/dist/babel/testIdPlugin/inject.d.ts.map +1 -0
  23. package/dist/babel/testIdPlugin/inject.js +86 -0
  24. package/dist/babel/testIdPlugin/inject.js.map +1 -0
  25. package/dist/babel/testIdPlugin/types.d.ts +59 -0
  26. package/dist/babel/testIdPlugin/types.d.ts.map +1 -0
  27. package/dist/babel/testIdPlugin/types.js +3 -0
  28. package/dist/babel/testIdPlugin/types.js.map +1 -0
  29. package/dist/bin/ios-hid +0 -0
  30. package/dist/index.d.ts +1 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/modules/fiberTree/hooks/extract.d.ts +6 -0
  35. package/dist/modules/fiberTree/hooks/extract.d.ts.map +1 -0
  36. package/dist/modules/fiberTree/hooks/extract.js +187 -0
  37. package/dist/modules/fiberTree/hooks/extract.js.map +1 -0
  38. package/dist/modules/fiberTree/hooks/flatten.d.ts +4 -0
  39. package/dist/modules/fiberTree/hooks/flatten.d.ts.map +1 -0
  40. package/dist/modules/fiberTree/hooks/flatten.js +81 -0
  41. package/dist/modules/fiberTree/hooks/flatten.js.map +1 -0
  42. package/dist/modules/fiberTree/hooks/index.d.ts +5 -0
  43. package/dist/modules/fiberTree/hooks/index.d.ts.map +1 -0
  44. package/dist/modules/fiberTree/hooks/index.js +10 -0
  45. package/dist/modules/fiberTree/hooks/index.js.map +1 -0
  46. package/dist/modules/fiberTree/hooks/options.d.ts +9 -0
  47. package/dist/modules/fiberTree/hooks/options.d.ts.map +1 -0
  48. package/dist/modules/fiberTree/hooks/options.js +27 -0
  49. package/dist/modules/fiberTree/hooks/options.js.map +1 -0
  50. package/dist/modules/fiberTree/hooks/patterns.d.ts +2 -0
  51. package/dist/modules/fiberTree/hooks/patterns.d.ts.map +1 -0
  52. package/dist/modules/fiberTree/hooks/patterns.js +26 -0
  53. package/dist/modules/fiberTree/hooks/patterns.js.map +1 -0
  54. package/dist/modules/fiberTree/hooks/shape.d.ts +3 -0
  55. package/dist/modules/fiberTree/hooks/shape.d.ts.map +1 -0
  56. package/dist/modules/fiberTree/hooks/shape.js +66 -0
  57. package/dist/modules/fiberTree/hooks/shape.js.map +1 -0
  58. package/dist/modules/fiberTree/hooks/slotCount.d.ts +2 -0
  59. package/dist/modules/fiberTree/hooks/slotCount.d.ts.map +1 -0
  60. package/dist/modules/fiberTree/hooks/slotCount.js +93 -0
  61. package/dist/modules/fiberTree/hooks/slotCount.js.map +1 -0
  62. package/dist/modules/fiberTree/{hooks.d.ts → hooks/types.d.ts} +1 -34
  63. package/dist/modules/fiberTree/hooks/types.d.ts.map +1 -0
  64. package/dist/modules/fiberTree/hooks/types.js +3 -0
  65. package/dist/modules/fiberTree/hooks/types.js.map +1 -0
  66. package/dist/modules/fiberTree/hooks/value.d.ts +2 -0
  67. package/dist/modules/fiberTree/hooks/value.d.ts.map +1 -0
  68. package/dist/modules/fiberTree/hooks/value.js +89 -0
  69. package/dist/modules/fiberTree/hooks/value.js.map +1 -0
  70. package/dist/modules/fiberTree/utils/constants.d.ts +8 -0
  71. package/dist/modules/fiberTree/utils/constants.d.ts.map +1 -0
  72. package/dist/modules/fiberTree/utils/constants.js +15 -0
  73. package/dist/modules/fiberTree/utils/constants.js.map +1 -0
  74. package/dist/modules/fiberTree/utils/index.d.ts +9 -0
  75. package/dist/modules/fiberTree/utils/index.d.ts.map +1 -0
  76. package/dist/modules/fiberTree/utils/index.js +34 -0
  77. package/dist/modules/fiberTree/utils/index.js.map +1 -0
  78. package/dist/modules/fiberTree/utils/match.d.ts +4 -0
  79. package/dist/modules/fiberTree/utils/match.d.ts.map +1 -0
  80. package/dist/modules/fiberTree/utils/match.js +169 -0
  81. package/dist/modules/fiberTree/utils/match.js.map +1 -0
  82. package/dist/modules/fiberTree/utils/naming.d.ts +4 -0
  83. package/dist/modules/fiberTree/utils/naming.d.ts.map +1 -0
  84. package/dist/modules/fiberTree/utils/naming.js +52 -0
  85. package/dist/modules/fiberTree/utils/naming.js.map +1 -0
  86. package/dist/modules/fiberTree/utils/native.d.ts +5 -0
  87. package/dist/modules/fiberTree/utils/native.d.ts.map +1 -0
  88. package/dist/modules/fiberTree/utils/native.js +101 -0
  89. package/dist/modules/fiberTree/utils/native.js.map +1 -0
  90. package/dist/modules/fiberTree/utils/projection.d.ts +9 -0
  91. package/dist/modules/fiberTree/utils/projection.d.ts.map +1 -0
  92. package/dist/modules/fiberTree/utils/projection.js +75 -0
  93. package/dist/modules/fiberTree/utils/projection.js.map +1 -0
  94. package/dist/modules/fiberTree/utils/root.d.ts +4 -0
  95. package/dist/modules/fiberTree/utils/root.d.ts.map +1 -0
  96. package/dist/modules/fiberTree/utils/root.js +30 -0
  97. package/dist/modules/fiberTree/utils/root.js.map +1 -0
  98. package/dist/modules/fiberTree/utils/screen.d.ts +10 -0
  99. package/dist/modules/fiberTree/utils/screen.d.ts.map +1 -0
  100. package/dist/modules/fiberTree/utils/screen.js +39 -0
  101. package/dist/modules/fiberTree/utils/screen.js.map +1 -0
  102. package/dist/modules/fiberTree/utils/serialize.d.ts +4 -0
  103. package/dist/modules/fiberTree/utils/serialize.d.ts.map +1 -0
  104. package/dist/modules/fiberTree/utils/serialize.js +102 -0
  105. package/dist/modules/fiberTree/utils/serialize.js.map +1 -0
  106. package/dist/modules/fiberTree/utils/traverse.d.ts +12 -0
  107. package/dist/modules/fiberTree/utils/traverse.d.ts.map +1 -0
  108. package/dist/modules/fiberTree/utils/traverse.js +107 -0
  109. package/dist/modules/fiberTree/utils/traverse.js.map +1 -0
  110. package/dist/server/dispatch.d.ts +15 -0
  111. package/dist/server/dispatch.d.ts.map +1 -0
  112. package/dist/server/dispatch.js +121 -0
  113. package/dist/server/dispatch.js.map +1 -0
  114. package/dist/server/helpers.d.ts +129 -0
  115. package/dist/server/helpers.d.ts.map +1 -0
  116. package/dist/server/helpers.js +250 -0
  117. package/dist/server/helpers.js.map +1 -0
  118. package/dist/server/host/deviceResolver/byClient.d.ts +5 -0
  119. package/dist/server/host/deviceResolver/byClient.d.ts.map +1 -0
  120. package/dist/server/host/deviceResolver/byClient.js +171 -0
  121. package/dist/server/host/deviceResolver/byClient.js.map +1 -0
  122. package/dist/server/host/deviceResolver/byId.d.ts +5 -0
  123. package/dist/server/host/deviceResolver/byId.d.ts.map +1 -0
  124. package/dist/server/host/deviceResolver/byId.js +81 -0
  125. package/dist/server/host/deviceResolver/byId.js.map +1 -0
  126. package/dist/server/host/deviceResolver/enrich.d.ts +5 -0
  127. package/dist/server/host/deviceResolver/enrich.d.ts.map +1 -0
  128. package/dist/server/host/deviceResolver/enrich.js +123 -0
  129. package/dist/server/host/deviceResolver/enrich.js.map +1 -0
  130. package/dist/server/host/deviceResolver/index.d.ts +13 -0
  131. package/dist/server/host/deviceResolver/index.d.ts.map +1 -0
  132. package/dist/server/host/deviceResolver/index.js +65 -0
  133. package/dist/server/host/deviceResolver/index.js.map +1 -0
  134. package/dist/server/host/deviceResolver/list.d.ts +10 -0
  135. package/dist/server/host/deviceResolver/list.d.ts.map +1 -0
  136. package/dist/server/host/deviceResolver/list.js +119 -0
  137. package/dist/server/host/deviceResolver/list.js.map +1 -0
  138. package/dist/server/host/deviceResolver/scan.d.ts +4 -0
  139. package/dist/server/host/deviceResolver/scan.d.ts.map +1 -0
  140. package/dist/server/host/deviceResolver/scan.js +102 -0
  141. package/dist/server/host/deviceResolver/scan.js.map +1 -0
  142. package/dist/server/host/{deviceResolver.d.ts → deviceResolver/types.d.ts} +1 -16
  143. package/dist/server/host/deviceResolver/types.d.ts.map +1 -0
  144. package/dist/server/host/deviceResolver/types.js +3 -0
  145. package/dist/server/host/deviceResolver/types.js.map +1 -0
  146. package/dist/server/host/tools/input/android.d.ts +15 -0
  147. package/dist/server/host/tools/input/android.d.ts.map +1 -0
  148. package/dist/server/host/tools/input/android.js +88 -0
  149. package/dist/server/host/tools/input/android.js.map +1 -0
  150. package/dist/server/host/tools/input/constants.d.ts +14 -0
  151. package/dist/server/host/tools/input/constants.d.ts.map +1 -0
  152. package/dist/server/host/tools/input/constants.js +41 -0
  153. package/dist/server/host/tools/input/constants.js.map +1 -0
  154. package/dist/server/host/tools/input/drag.d.ts +4 -0
  155. package/dist/server/host/tools/input/drag.d.ts.map +1 -0
  156. package/dist/server/host/tools/input/drag.js +76 -0
  157. package/dist/server/host/tools/input/drag.js.map +1 -0
  158. package/dist/server/host/tools/input/index.d.ts +8 -0
  159. package/dist/server/host/tools/input/index.d.ts.map +1 -0
  160. package/dist/server/host/tools/input/index.js +18 -0
  161. package/dist/server/host/tools/input/index.js.map +1 -0
  162. package/dist/server/host/tools/input/longPress.d.ts +4 -0
  163. package/dist/server/host/tools/input/longPress.d.ts.map +1 -0
  164. package/dist/server/host/tools/input/longPress.js +49 -0
  165. package/dist/server/host/tools/input/longPress.js.map +1 -0
  166. package/dist/server/host/tools/input/pressKey.d.ts +4 -0
  167. package/dist/server/host/tools/input/pressKey.d.ts.map +1 -0
  168. package/dist/server/host/tools/input/pressKey.js +42 -0
  169. package/dist/server/host/tools/input/pressKey.js.map +1 -0
  170. package/dist/server/host/tools/input/swipe.d.ts +4 -0
  171. package/dist/server/host/tools/input/swipe.d.ts.map +1 -0
  172. package/dist/server/host/tools/input/swipe.js +71 -0
  173. package/dist/server/host/tools/input/swipe.js.map +1 -0
  174. package/dist/server/host/tools/input/tap.d.ts +4 -0
  175. package/dist/server/host/tools/input/tap.d.ts.map +1 -0
  176. package/dist/server/host/tools/input/tap.js +49 -0
  177. package/dist/server/host/tools/input/tap.js.map +1 -0
  178. package/dist/server/host/tools/input/typeText.d.ts +4 -0
  179. package/dist/server/host/tools/input/typeText.d.ts.map +1 -0
  180. package/dist/server/host/tools/input/typeText.js +52 -0
  181. package/dist/server/host/tools/input/typeText.js.map +1 -0
  182. package/dist/server/host/tools/input/typeTextBatch.d.ts +4 -0
  183. package/dist/server/host/tools/input/typeTextBatch.d.ts.map +1 -0
  184. package/dist/server/host/tools/input/typeTextBatch.js +106 -0
  185. package/dist/server/host/tools/input/typeTextBatch.js.map +1 -0
  186. package/dist/server/instructions.d.ts +2 -0
  187. package/dist/server/instructions.d.ts.map +1 -0
  188. package/dist/server/instructions.js +89 -0
  189. package/dist/server/instructions.js.map +1 -0
  190. package/dist/server/mcpServer.d.ts +0 -12
  191. package/dist/server/mcpServer.d.ts.map +1 -1
  192. package/dist/server/mcpServer.js +26 -877
  193. package/dist/server/mcpServer.js.map +1 -1
  194. package/dist/server/predicate.d.ts +31 -0
  195. package/dist/server/predicate.d.ts.map +1 -0
  196. package/dist/server/predicate.js +104 -0
  197. package/dist/server/predicate.js.map +1 -0
  198. package/dist/server/tools/assert.d.ts +4 -0
  199. package/dist/server/tools/assert.d.ts.map +1 -0
  200. package/dist/server/tools/assert.js +103 -0
  201. package/dist/server/tools/assert.js.map +1 -0
  202. package/dist/server/tools/call.d.ts +4 -0
  203. package/dist/server/tools/call.d.ts.map +1 -0
  204. package/dist/server/tools/call.js +48 -0
  205. package/dist/server/tools/call.js.map +1 -0
  206. package/dist/server/tools/connectionStatus.d.ts +4 -0
  207. package/dist/server/tools/connectionStatus.d.ts.map +1 -0
  208. package/dist/server/tools/connectionStatus.js +41 -0
  209. package/dist/server/tools/connectionStatus.js.map +1 -0
  210. package/dist/server/tools/describeTool.d.ts +4 -0
  211. package/dist/server/tools/describeTool.d.ts.map +1 -0
  212. package/dist/server/tools/describeTool.js +149 -0
  213. package/dist/server/tools/describeTool.js.map +1 -0
  214. package/dist/server/tools/listTools.d.ts +4 -0
  215. package/dist/server/tools/listTools.d.ts.map +1 -0
  216. package/dist/server/tools/listTools.js +116 -0
  217. package/dist/server/tools/listTools.js.map +1 -0
  218. package/dist/server/tools/waitUntil.d.ts +4 -0
  219. package/dist/server/tools/waitUntil.d.ts.map +1 -0
  220. package/dist/server/tools/waitUntil.js +169 -0
  221. package/dist/server/tools/waitUntil.js.map +1 -0
  222. package/package.json +2 -2
  223. package/dist/babel/testIdPlugin.d.ts.map +0 -1
  224. package/dist/babel/testIdPlugin.js +0 -585
  225. package/dist/babel/testIdPlugin.js.map +0 -1
  226. package/dist/modules/fiberTree/hooks.d.ts.map +0 -1
  227. package/dist/modules/fiberTree/hooks.js +0 -550
  228. package/dist/modules/fiberTree/hooks.js.map +0 -1
  229. package/dist/modules/fiberTree/utils.d.ts +0 -39
  230. package/dist/modules/fiberTree/utils.d.ts.map +0 -1
  231. package/dist/modules/fiberTree/utils.js +0 -641
  232. package/dist/modules/fiberTree/utils.js.map +0 -1
  233. package/dist/server/host/deviceResolver.d.ts.map +0 -1
  234. package/dist/server/host/deviceResolver.js +0 -621
  235. package/dist/server/host/deviceResolver.js.map +0 -1
  236. package/dist/server/host/tools/input.d.ts +0 -10
  237. package/dist/server/host/tools/input.d.ts.map +0 -1
  238. package/dist/server/host/tools/input.js +0 -503
  239. package/dist/server/host/tools/input.js.map +0 -1
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatResult = exports.buildToolGroups = exports.findToolInClient = exports.canonicalizeGroup = exports.canonicalize = exports.parseCallArgs = exports.buildBroadcastContent = exports.parseClientIds = exports.jsonError = void 0;
4
+ const protocol_1 = require("../shared/protocol");
5
+ const jsonError = (msg) => {
6
+ return {
7
+ content: [{ text: JSON.stringify({ error: msg }), type: 'text' }],
8
+ };
9
+ };
10
+ exports.jsonError = jsonError;
11
+ /**
12
+ * Normalises the `clientId` arg accepted by every public tool. A bare string
13
+ * keeps the single-client shape (image content passes through; auto-resolution
14
+ * still applies when undefined). An array — even with one entry — switches the
15
+ * caller into broadcast mode, where each client is dispatched in parallel and
16
+ * results are aggregated.
17
+ */
18
+ const parseClientIds = (raw) => {
19
+ if (raw === undefined || raw === null)
20
+ return { clientId: undefined, mode: 'single', ok: true };
21
+ if (typeof raw === 'string')
22
+ return { clientId: raw, mode: 'single', ok: true };
23
+ if (Array.isArray(raw)) {
24
+ if (raw.length === 0) {
25
+ return { error: 'clientId array must contain at least one entry.', ok: false };
26
+ }
27
+ const seen = new Set();
28
+ const ids = [];
29
+ for (const id of raw) {
30
+ if (typeof id !== 'string') {
31
+ return { error: 'clientId array must contain strings only.', ok: false };
32
+ }
33
+ if (!seen.has(id)) {
34
+ seen.add(id);
35
+ ids.push(id);
36
+ }
37
+ }
38
+ return { ids, mode: 'broadcast', ok: true };
39
+ }
40
+ return { error: 'clientId must be a string or an array of strings.', ok: false };
41
+ };
42
+ exports.parseClientIds = parseClientIds;
43
+ /**
44
+ * Detects an MCP image-content payload (the shape host__screenshot returns)
45
+ * without re-running formatResult. Used to pick the broadcast aggregation
46
+ * strategy — text-only results collapse into a single JSON envelope, image
47
+ * results keep per-client blocks so each image is anchored to its source.
48
+ */
49
+ const isImageResult = (result) => {
50
+ if (!Array.isArray(result) || result.length === 0)
51
+ return false;
52
+ const first = result[0];
53
+ return (typeof first === 'object' &&
54
+ first !== null &&
55
+ 'type' in first &&
56
+ first.type === 'image');
57
+ };
58
+ /**
59
+ * Build MCP content blocks from per-client dispatch results. When every result
60
+ * is text-only, the function returns a single JSON envelope so the agent can
61
+ * parse one blob; when any result carries image content (e.g. screenshots),
62
+ * results are emitted as per-client blocks prefixed with `## <clientId>`
63
+ * headers so each image stays paired with its source.
64
+ */
65
+ const buildBroadcastContent = (results, formatResult) => {
66
+ const hasImage = results.some(({ result }) => {
67
+ return result.ok && isImageResult(result.result);
68
+ });
69
+ if (!hasImage) {
70
+ return [
71
+ {
72
+ text: JSON.stringify({
73
+ results: results.map(({ clientId, result }) => {
74
+ if (result.ok)
75
+ return { clientId, ok: true, result: result.result };
76
+ return { clientId, error: result.error, ok: false };
77
+ }),
78
+ }, null, 2),
79
+ type: 'text',
80
+ },
81
+ ];
82
+ }
83
+ const blocks = [];
84
+ for (const { clientId, result } of results) {
85
+ blocks.push({ text: `## ${clientId}`, type: 'text' });
86
+ if (result.ok) {
87
+ blocks.push(...formatResult(result.result));
88
+ }
89
+ else {
90
+ blocks.push({
91
+ text: JSON.stringify({ error: result.error }, null, 2),
92
+ type: 'text',
93
+ });
94
+ }
95
+ }
96
+ return blocks;
97
+ };
98
+ exports.buildBroadcastContent = buildBroadcastContent;
99
+ /**
100
+ * Parse a `call`-style args argument that may arrive as a JSON string (older
101
+ * clients) or a plain object (new form). Returns { ok, args } or { ok: false,
102
+ * error } on malformed JSON.
103
+ */
104
+ const parseCallArgs = (raw) => {
105
+ if (raw === undefined || raw === null)
106
+ return { args: {}, ok: true };
107
+ if (typeof raw === 'string') {
108
+ if (raw.length === 0)
109
+ return { args: {}, ok: true };
110
+ try {
111
+ const parsed = JSON.parse(raw);
112
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
113
+ return { args: parsed, ok: true };
114
+ }
115
+ return { error: 'Parsed args must be an object.', ok: false };
116
+ }
117
+ catch {
118
+ return { error: 'Invalid JSON in args.', ok: false };
119
+ }
120
+ }
121
+ if (typeof raw === 'object' && !Array.isArray(raw)) {
122
+ return { args: raw, ok: true };
123
+ }
124
+ return { error: 'args must be an object or a JSON string.', ok: false };
125
+ };
126
+ exports.parseCallArgs = parseCallArgs;
127
+ /**
128
+ * Recursively serializes a value to JSON with sorted object keys, producing a
129
+ * stable canonical form that's safe to use as a dedup Map key. Arrays keep
130
+ * their original order — caller is responsible for normalizing them when
131
+ * order-independence is desired.
132
+ */
133
+ const canonicalize = (value) => {
134
+ return JSON.stringify(value, (_key, v) => {
135
+ if (v && typeof v === 'object' && !Array.isArray(v)) {
136
+ const sorted = {};
137
+ for (const k of Object.keys(v).sort()) {
138
+ sorted[k] = v[k];
139
+ }
140
+ return sorted;
141
+ }
142
+ return v;
143
+ });
144
+ };
145
+ exports.canonicalize = canonicalize;
146
+ /**
147
+ * Produces a canonical key for a ToolGroup that's independent of tool
148
+ * registration order. Two modules with the same name + tools (regardless of
149
+ * order) + descriptions + schemas produce the same key.
150
+ */
151
+ const canonicalizeGroup = (group) => {
152
+ const normalized = {
153
+ description: group.description,
154
+ module: group.module,
155
+ tools: [...group.tools].sort((a, b) => {
156
+ return a.name.localeCompare(b.name);
157
+ }),
158
+ };
159
+ return (0, exports.canonicalize)(normalized);
160
+ };
161
+ exports.canonicalizeGroup = canonicalizeGroup;
162
+ /**
163
+ * Looks up a full tool descriptor on a client by its full name
164
+ * (`module__method`). Checks both static modules and dynamic tools registered
165
+ * via useMcpTool. Returns null if the tool is not on this client.
166
+ */
167
+ const findToolInClient = (client, toolFullName) => {
168
+ for (const mod of client.modules) {
169
+ const prefix = `${mod.name}${protocol_1.MODULE_SEPARATOR}`;
170
+ if (toolFullName.startsWith(prefix)) {
171
+ const methodName = toolFullName.slice(prefix.length);
172
+ const toolDef = mod.tools.find((t) => {
173
+ return t.name === methodName;
174
+ });
175
+ if (toolDef) {
176
+ return {
177
+ description: toolDef.description,
178
+ inputSchema: toolDef.inputSchema,
179
+ name: toolFullName,
180
+ };
181
+ }
182
+ }
183
+ }
184
+ const dynamicEntry = client.dynamicTools.get(toolFullName);
185
+ if (dynamicEntry) {
186
+ return {
187
+ description: dynamicEntry.description,
188
+ inputSchema: dynamicEntry.inputSchema,
189
+ name: toolFullName,
190
+ };
191
+ }
192
+ return null;
193
+ };
194
+ exports.findToolInClient = findToolInClient;
195
+ /**
196
+ * Builds the per-client list of ToolGroup entries that `list_tools` deduplicates
197
+ * across clients. Static modules are passed through; dynamic tools are grouped
198
+ * under a synthetic `<module> (dynamic)` group per source module.
199
+ */
200
+ const buildToolGroups = (client) => {
201
+ const groups = client.modules.map((mod) => {
202
+ return {
203
+ description: mod.description,
204
+ module: mod.name,
205
+ tools: mod.tools.map((t) => {
206
+ return {
207
+ description: t.description,
208
+ inputSchema: t.inputSchema,
209
+ name: `${mod.name}${protocol_1.MODULE_SEPARATOR}${t.name}`,
210
+ };
211
+ }),
212
+ };
213
+ });
214
+ if (client.dynamicTools.size > 0) {
215
+ const dynamicByModule = new Map();
216
+ for (const [fullName, info] of client.dynamicTools) {
217
+ const existing = dynamicByModule.get(info.module) ?? [];
218
+ existing.push({
219
+ description: info.description,
220
+ inputSchema: info.inputSchema,
221
+ name: fullName,
222
+ });
223
+ dynamicByModule.set(info.module, existing);
224
+ }
225
+ for (const [module, dynTools] of dynamicByModule) {
226
+ groups.push({
227
+ description: 'Dynamically registered tools from useMcpTool hooks',
228
+ module: `${module} (dynamic)`,
229
+ tools: dynTools,
230
+ });
231
+ }
232
+ }
233
+ return groups;
234
+ };
235
+ exports.buildToolGroups = buildToolGroups;
236
+ /**
237
+ * Detects image-content payloads (from host__screenshot) and passes them
238
+ * through as MCP image blocks; everything else is JSON-serialized text.
239
+ */
240
+ const formatResult = (result) => {
241
+ if (Array.isArray(result) && result.length > 0) {
242
+ const first = result[0];
243
+ if (typeof first === 'object' && first !== null && 'type' in first && first.type === 'image') {
244
+ return result;
245
+ }
246
+ }
247
+ return [{ text: JSON.stringify(result, null, 2), type: 'text' }];
248
+ };
249
+ exports.formatResult = formatResult;
250
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/server/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type ClientEntry } from '../../../server/bridge';
2
+ import { type ProcessRunner } from '../../../server/host/processRunner';
3
+ import { type DeviceResolution } from './types';
4
+ export declare const resolveClientToDevice: (client: ClientEntry, runner: ProcessRunner) => Promise<DeviceResolution>;
5
+ //# sourceMappingURL=byClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byClient.d.ts","sourceRoot":"","sources":["../../../../src/server/host/deviceResolver/byClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAUjE,OAAO,EAEL,KAAK,gBAAgB,EAGtB,MAAM,SAAS,CAAC;AAwKjB,eAAO,MAAM,qBAAqB,WACxB,WAAW,UACX,aAAa,KACpB,OAAO,CAAC,gBAAgB,CAW1B,CAAC"}
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveClientToDevice = void 0;
4
+ const list_1 = require("./list");
5
+ const matchIosSimByClient = (sims, client) => {
6
+ const bootedIos = sims.filter((s) => {
7
+ return s.state === 'Booted';
8
+ });
9
+ if (bootedIos.length === 0) {
10
+ return null;
11
+ }
12
+ if (!client.label) {
13
+ return bootedIos.length === 1 ? bootedIos[0] : null;
14
+ }
15
+ const label = client.label;
16
+ const exact = bootedIos.filter((s) => {
17
+ return s.name === label;
18
+ });
19
+ if (exact.length === 1) {
20
+ return exact[0];
21
+ }
22
+ const substring = bootedIos.filter((s) => {
23
+ return s.name.includes(label);
24
+ });
25
+ if (substring.length === 1) {
26
+ return substring[0];
27
+ }
28
+ if (exact.length === 0 && substring.length === 0 && bootedIos.length === 1) {
29
+ return bootedIos[0];
30
+ }
31
+ return null;
32
+ };
33
+ const matchAndroidDeviceByClient = (devices) => {
34
+ const online = devices.filter((d) => {
35
+ return d.state === 'device';
36
+ });
37
+ return online.length === 1 ? online[0] : null;
38
+ };
39
+ const matchIosRealDeviceByClient = (devices, client) => {
40
+ const paired = devices.filter((d) => {
41
+ return d.pairingState === 'paired';
42
+ });
43
+ if (paired.length === 0)
44
+ return null;
45
+ if (!client.label) {
46
+ return paired.length === 1 ? paired[0] : null;
47
+ }
48
+ const label = client.label;
49
+ const substring = paired.filter((d) => {
50
+ return d.name.includes(label) || label.includes(d.name);
51
+ });
52
+ if (substring.length === 1)
53
+ return substring[0];
54
+ return paired.length === 1 ? paired[0] : null;
55
+ };
56
+ const resolveIosRealClient = async (client, runner) => {
57
+ try {
58
+ const devices = await (0, list_1.listIosRealDevices)(runner);
59
+ const matched = matchIosRealDeviceByClient(devices, client);
60
+ if (matched) {
61
+ return {
62
+ device: {
63
+ bundleId: client.bundleId,
64
+ displayName: matched.name,
65
+ kind: 'real-device',
66
+ nativeId: matched.coreDeviceIdentifier,
67
+ platform: 'ios',
68
+ },
69
+ ok: true,
70
+ };
71
+ }
72
+ const pairedList = devices
73
+ .filter((d) => {
74
+ return d.pairingState === 'paired';
75
+ })
76
+ .map((d) => {
77
+ return `${d.name} (${d.coreDeviceIdentifier})`;
78
+ })
79
+ .join(', ');
80
+ return {
81
+ error: `Cannot resolve iOS client '${client.id}' to a paired real device. Label hint: "${client.label ?? '(none)'}". Paired devices: ${pairedList || '(none)'}.`,
82
+ ok: false,
83
+ };
84
+ }
85
+ catch (err) {
86
+ return (0, list_1.toDeviceError)(err, 'Failed to list iOS real devices', list_1.XCRUN_MISSING_ERROR);
87
+ }
88
+ };
89
+ const resolveIosClient = async (client, runner) => {
90
+ if (client.isSimulator === false) {
91
+ return resolveIosRealClient(client, runner);
92
+ }
93
+ try {
94
+ const sims = await (0, list_1.listIosSimulators)(runner);
95
+ const matched = matchIosSimByClient(sims, client);
96
+ if (matched) {
97
+ return {
98
+ device: {
99
+ bundleId: client.bundleId,
100
+ displayName: matched.name,
101
+ kind: 'simulator',
102
+ nativeId: matched.udid,
103
+ platform: 'ios',
104
+ },
105
+ ok: true,
106
+ };
107
+ }
108
+ const bootedList = sims
109
+ .filter((s) => {
110
+ return s.state === 'Booted';
111
+ })
112
+ .map((s) => {
113
+ return `${s.name} (${s.udid})`;
114
+ })
115
+ .join(', ');
116
+ return {
117
+ error: `Cannot resolve iOS client '${client.id}' to a booted simulator. Label hint: "${client.label ?? '(none)'}". Booted sims: ${bootedList || '(none)'}.`,
118
+ ok: false,
119
+ };
120
+ }
121
+ catch (err) {
122
+ return (0, list_1.toDeviceError)(err, 'Failed to list iOS simulators', list_1.XCRUN_MISSING_ERROR);
123
+ }
124
+ };
125
+ const resolveAndroidClient = async (client, runner) => {
126
+ try {
127
+ const devices = await (0, list_1.listAndroidDevices)(runner);
128
+ const matched = matchAndroidDeviceByClient(devices);
129
+ if (matched) {
130
+ return {
131
+ device: {
132
+ bundleId: client.bundleId,
133
+ displayName: matched.serial,
134
+ kind: 'real-device',
135
+ nativeId: matched.serial,
136
+ platform: 'android',
137
+ },
138
+ ok: true,
139
+ };
140
+ }
141
+ const onlineList = devices
142
+ .filter((d) => {
143
+ return d.state === 'device';
144
+ })
145
+ .map((d) => {
146
+ return d.serial;
147
+ })
148
+ .join(', ');
149
+ return {
150
+ error: `Cannot resolve Android client '${client.id}' to an online device. Online devices: ${onlineList || '(none)'}.`,
151
+ ok: false,
152
+ };
153
+ }
154
+ catch (err) {
155
+ return (0, list_1.toDeviceError)(err, 'Failed to list Android devices', list_1.ADB_MISSING_ERROR);
156
+ }
157
+ };
158
+ const resolveClientToDevice = async (client, runner) => {
159
+ if (client.platform === 'ios') {
160
+ return resolveIosClient(client, runner);
161
+ }
162
+ if (client.platform === 'android') {
163
+ return resolveAndroidClient(client, runner);
164
+ }
165
+ return {
166
+ error: `Client '${client.id}' has unknown platform '${client.platform ?? '(none)'}'. Cannot resolve to a native device.`,
167
+ ok: false,
168
+ };
169
+ };
170
+ exports.resolveClientToDevice = resolveClientToDevice;
171
+ //# sourceMappingURL=byClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byClient.js","sourceRoot":"","sources":["../../../../src/server/host/deviceResolver/byClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type ProcessRunner } from '../../../server/host/processRunner';
2
+ import { type DeviceResolution } from './types';
3
+ export declare const resolveIosByUdid: (udid: string, runner: ProcessRunner) => Promise<DeviceResolution>;
4
+ export declare const resolveAndroidBySerial: (serial: string, runner: ProcessRunner) => Promise<DeviceResolution>;
5
+ //# sourceMappingURL=byId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byId.d.ts","sourceRoot":"","sources":["../../../../src/server/host/deviceResolver/byId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AASjE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,eAAO,MAAM,gBAAgB,SACrB,MAAM,UACJ,aAAa,KACpB,OAAO,CAAC,gBAAgB,CAoC1B,CAAC;AAEF,eAAO,MAAM,sBAAsB,WACzB,MAAM,UACN,aAAa,KACpB,OAAO,CAAC,gBAAgB,CAoC1B,CAAC"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveAndroidBySerial = exports.resolveIosByUdid = void 0;
4
+ const list_1 = require("./list");
5
+ const resolveIosByUdid = async (udid, runner) => {
6
+ try {
7
+ const sims = await (0, list_1.listIosSimulators)(runner);
8
+ const match = sims.find((s) => {
9
+ return s.udid === udid;
10
+ });
11
+ if (!match) {
12
+ const available = sims
13
+ .map((s) => {
14
+ return `${s.udid} (${s.name})`;
15
+ })
16
+ .join(', ') || '(none)';
17
+ return {
18
+ error: `iOS simulator with UDID '${udid}' not found. Available: ${available}`,
19
+ ok: false,
20
+ };
21
+ }
22
+ if (match.state !== 'Booted') {
23
+ return {
24
+ error: `iOS simulator '${match.name}' (${udid}) is in state '${match.state}', not Booted. Boot it first via xcrun simctl boot.`,
25
+ ok: false,
26
+ };
27
+ }
28
+ return {
29
+ device: {
30
+ displayName: match.name,
31
+ kind: 'simulator',
32
+ nativeId: match.udid,
33
+ platform: 'ios',
34
+ },
35
+ ok: true,
36
+ };
37
+ }
38
+ catch (err) {
39
+ return (0, list_1.toDeviceError)(err, 'Failed to list iOS simulators', list_1.XCRUN_MISSING_ERROR);
40
+ }
41
+ };
42
+ exports.resolveIosByUdid = resolveIosByUdid;
43
+ const resolveAndroidBySerial = async (serial, runner) => {
44
+ try {
45
+ const devices = await (0, list_1.listAndroidDevices)(runner);
46
+ const match = devices.find((d) => {
47
+ return d.serial === serial;
48
+ });
49
+ if (!match) {
50
+ const available = devices
51
+ .map((d) => {
52
+ return d.serial;
53
+ })
54
+ .join(', ') || '(none)';
55
+ return {
56
+ error: `Android device with serial '${serial}' not found. Available: ${available}`,
57
+ ok: false,
58
+ };
59
+ }
60
+ if (match.state !== 'device') {
61
+ return {
62
+ error: `Android device '${serial}' is in state '${match.state}', not 'device' (ready). Wait for boot to complete.`,
63
+ ok: false,
64
+ };
65
+ }
66
+ return {
67
+ device: {
68
+ displayName: match.serial,
69
+ kind: 'real-device',
70
+ nativeId: match.serial,
71
+ platform: 'android',
72
+ },
73
+ ok: true,
74
+ };
75
+ }
76
+ catch (err) {
77
+ return (0, list_1.toDeviceError)(err, 'Failed to list Android devices', list_1.ADB_MISSING_ERROR);
78
+ }
79
+ };
80
+ exports.resolveAndroidBySerial = resolveAndroidBySerial;
81
+ //# sourceMappingURL=byId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byId.js","sourceRoot":"","sources":["../../../../src/server/host/deviceResolver/byId.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { type Bridge } from '../../../server/bridge';
2
+ import { type ProcessRunner } from '../../../server/host/processRunner';
3
+ import { type EnrichedDeviceList } from './types';
4
+ export declare const enrichDevicesWithClientStatus: (bridge: Bridge, runner: ProcessRunner) => Promise<EnrichedDeviceList>;
5
+ //# sourceMappingURL=enrich.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enrich.d.ts","sourceRoot":"","sources":["../../../../src/server/host/deviceResolver/enrich.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGvF,OAAO,EAA8B,KAAK,kBAAkB,EAAuB,MAAM,SAAS,CAAC;AAEnG,eAAO,MAAM,6BAA6B,WAChC,MAAM,UACN,aAAa,KACpB,OAAO,CAAC,kBAAkB,CAuH5B,CAAC"}