react-native-mcp-kit 2.1.0 → 2.2.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 (92) hide show
  1. package/README.md +20 -11
  2. package/dist/bin/ios-hid +0 -0
  3. package/dist/client/contexts/McpContext/McpProvider.d.ts.map +1 -1
  4. package/dist/client/contexts/McpContext/McpProvider.js +6 -3
  5. package/dist/client/contexts/McpContext/McpProvider.js.map +1 -1
  6. package/dist/modules/alert/alert.d.ts.map +1 -1
  7. package/dist/modules/alert/alert.js +6 -5
  8. package/dist/modules/alert/alert.js.map +1 -1
  9. package/dist/modules/console/console.d.ts.map +1 -1
  10. package/dist/modules/console/console.js +18 -13
  11. package/dist/modules/console/console.js.map +1 -1
  12. package/dist/modules/device/device.d.ts.map +1 -1
  13. package/dist/modules/device/device.js +23 -27
  14. package/dist/modules/device/device.js.map +1 -1
  15. package/dist/modules/errors/errors.d.ts.map +1 -1
  16. package/dist/modules/errors/errors.js +92 -11
  17. package/dist/modules/errors/errors.js.map +1 -1
  18. package/dist/modules/errors/types.d.ts +8 -0
  19. package/dist/modules/errors/types.d.ts.map +1 -1
  20. package/dist/modules/fiberTree/fiberTree.d.ts +4 -0
  21. package/dist/modules/fiberTree/fiberTree.d.ts.map +1 -1
  22. package/dist/modules/fiberTree/fiberTree.js +353 -114
  23. package/dist/modules/fiberTree/fiberTree.js.map +1 -1
  24. package/dist/modules/fiberTree/index.d.ts +1 -0
  25. package/dist/modules/fiberTree/index.d.ts.map +1 -1
  26. package/dist/modules/fiberTree/index.js +14 -1
  27. package/dist/modules/fiberTree/index.js.map +1 -1
  28. package/dist/modules/fiberTree/types.d.ts +40 -0
  29. package/dist/modules/fiberTree/types.d.ts.map +1 -1
  30. package/dist/modules/fiberTree/utils.d.ts +13 -0
  31. package/dist/modules/fiberTree/utils.d.ts.map +1 -1
  32. package/dist/modules/fiberTree/utils.js +195 -23
  33. package/dist/modules/fiberTree/utils.js.map +1 -1
  34. package/dist/modules/i18next/i18next.d.ts.map +1 -1
  35. package/dist/modules/i18next/i18next.js +30 -16
  36. package/dist/modules/i18next/i18next.js.map +1 -1
  37. package/dist/modules/index.d.ts +1 -0
  38. package/dist/modules/index.d.ts.map +1 -1
  39. package/dist/modules/index.js +3 -1
  40. package/dist/modules/index.js.map +1 -1
  41. package/dist/modules/logBox/index.d.ts +2 -0
  42. package/dist/modules/logBox/index.d.ts.map +1 -0
  43. package/dist/modules/logBox/index.js +6 -0
  44. package/dist/modules/logBox/index.js.map +1 -0
  45. package/dist/modules/logBox/logBox.d.ts +3 -0
  46. package/dist/modules/logBox/logBox.d.ts.map +1 -0
  47. package/dist/modules/logBox/logBox.js +234 -0
  48. package/dist/modules/logBox/logBox.js.map +1 -0
  49. package/dist/modules/navigation/navigation.d.ts.map +1 -1
  50. package/dist/modules/navigation/navigation.js +130 -42
  51. package/dist/modules/navigation/navigation.js.map +1 -1
  52. package/dist/modules/network/network.d.ts.map +1 -1
  53. package/dist/modules/network/network.js +262 -67
  54. package/dist/modules/network/network.js.map +1 -1
  55. package/dist/modules/network/types.d.ts +35 -3
  56. package/dist/modules/network/types.d.ts.map +1 -1
  57. package/dist/modules/reactQuery/reactQuery.d.ts.map +1 -1
  58. package/dist/modules/reactQuery/reactQuery.js +25 -15
  59. package/dist/modules/reactQuery/reactQuery.js.map +1 -1
  60. package/dist/modules/storage/storage.d.ts.map +1 -1
  61. package/dist/modules/storage/storage.js +23 -16
  62. package/dist/modules/storage/storage.js.map +1 -1
  63. package/dist/server/host/hostModule.d.ts.map +1 -1
  64. package/dist/server/host/hostModule.js +19 -1
  65. package/dist/server/host/hostModule.js.map +1 -1
  66. package/dist/server/host/tools/capture.d.ts.map +1 -1
  67. package/dist/server/host/tools/capture.js +111 -28
  68. package/dist/server/host/tools/capture.js.map +1 -1
  69. package/dist/server/host/tools/devices.js +1 -1
  70. package/dist/server/host/tools/devices.js.map +1 -1
  71. package/dist/server/host/tools/input.d.ts +3 -0
  72. package/dist/server/host/tools/input.d.ts.map +1 -1
  73. package/dist/server/host/tools/input.js +197 -5
  74. package/dist/server/host/tools/input.js.map +1 -1
  75. package/dist/server/host/tools/lifecycle.d.ts.map +1 -1
  76. package/dist/server/host/tools/lifecycle.js +5 -4
  77. package/dist/server/host/tools/lifecycle.js.map +1 -1
  78. package/dist/server/host/tools/symbolicate.d.ts +3 -0
  79. package/dist/server/host/tools/symbolicate.d.ts.map +1 -0
  80. package/dist/server/host/tools/symbolicate.js +199 -0
  81. package/dist/server/host/tools/symbolicate.js.map +1 -0
  82. package/dist/server/host/tools/tapFiber.d.ts +3 -0
  83. package/dist/server/host/tools/tapFiber.d.ts.map +1 -0
  84. package/dist/server/host/tools/tapFiber.js +89 -0
  85. package/dist/server/host/tools/tapFiber.js.map +1 -0
  86. package/dist/server/host/types.d.ts +14 -0
  87. package/dist/server/host/types.d.ts.map +1 -1
  88. package/dist/server/mcpServer.d.ts +6 -0
  89. package/dist/server/mcpServer.d.ts.map +1 -1
  90. package/dist/server/mcpServer.js +440 -93
  91. package/dist/server/mcpServer.js.map +1 -1
  92. package/package.json +1 -1
@@ -28,11 +28,15 @@ const reactQueryModule = (queryClient) => {
28
28
  }
29
29
  };
30
30
  return {
31
- description: 'React Query cache: inspect queries, get cached data, invalidate, refetch, reset, remove.',
31
+ description: `React Query cache inspection + mutation.
32
+
33
+ Query keys are passed as JSON strings to preserve array structure — e.g.
34
+ '["users","list"]' or '"users"'. Omit \`key\` on invalidate / refetch /
35
+ remove / reset to target every cached query at once.`,
32
36
  name: 'query',
33
37
  tools: {
34
38
  get_data: {
35
- description: 'Get the cached data for a specific query by key',
39
+ description: 'Cached data for one query by exact key.',
36
40
  handler: (args) => {
37
41
  const key = parseKey(args.key);
38
42
  const queries = getAllQueries();
@@ -54,13 +58,14 @@ const reactQueryModule = (queryClient) => {
54
58
  },
55
59
  inputSchema: {
56
60
  key: {
57
- description: 'Query key as JSON string (e.g. \'["users"]\' or \'"users"\')',
61
+ description: 'Query key (JSON string).',
62
+ examples: ['["users"]', '["users","list"]', '"users"'],
58
63
  type: 'string',
59
64
  },
60
65
  },
61
66
  },
62
67
  get_queries: {
63
- description: 'List all cached queries with their status, fetch status, and timestamps. Does not include data — use get_data for that.',
68
+ description: 'List cached queries (status/fetchStatus/timestamps, no data).',
64
69
  handler: (args) => {
65
70
  let queries = getAllQueries();
66
71
  if (args.status) {
@@ -77,15 +82,16 @@ const reactQueryModule = (queryClient) => {
77
82
  return queries.map(serializeQuery);
78
83
  },
79
84
  inputSchema: {
80
- key: { description: 'Filter by key substring', type: 'string' },
85
+ key: { description: 'Substring filter on the serialized key.', type: 'string' },
81
86
  status: {
82
- description: 'Filter by status (pending, error, success)',
87
+ description: 'Filter by status.',
88
+ examples: ['pending', 'error', 'success'],
83
89
  type: 'string',
84
90
  },
85
91
  },
86
92
  },
87
93
  get_stats: {
88
- description: 'Get query cache statistics',
94
+ description: 'Cache counts total, by status, by fetchStatus.',
89
95
  handler: () => {
90
96
  const queries = getAllQueries();
91
97
  const byStatus = {};
@@ -98,7 +104,7 @@ const reactQueryModule = (queryClient) => {
98
104
  },
99
105
  },
100
106
  invalidate: {
101
- description: 'Invalidate queries, marking them as stale. They will refetch on next use. Pass key to target specific queries, or omit to invalidate all.',
107
+ description: 'Mark queries stale (will refetch on next use). Omit key for all.',
102
108
  handler: async (args) => {
103
109
  const filters = args.key ? { queryKey: parseKey(args.key) } : undefined;
104
110
  await queryClient.invalidateQueries(filters);
@@ -106,13 +112,14 @@ const reactQueryModule = (queryClient) => {
106
112
  },
107
113
  inputSchema: {
108
114
  key: {
109
- description: 'Query key to invalidate as JSON string (omit to invalidate all)',
115
+ description: 'Query key (JSON string). Omit to invalidate all.',
116
+ examples: ['["users"]'],
110
117
  type: 'string',
111
118
  },
112
119
  },
113
120
  },
114
121
  refetch: {
115
- description: 'Refetch queries immediately. Pass key to target specific queries, or omit to refetch all.',
122
+ description: 'Refetch queries immediately. Omit key for all.',
116
123
  handler: async (args) => {
117
124
  const filters = args.key ? { queryKey: parseKey(args.key) } : undefined;
118
125
  await queryClient.refetchQueries(filters);
@@ -120,13 +127,14 @@ const reactQueryModule = (queryClient) => {
120
127
  },
121
128
  inputSchema: {
122
129
  key: {
123
- description: 'Query key to refetch as JSON string (omit to refetch all)',
130
+ description: 'Query key (JSON string). Omit to refetch all.',
131
+ examples: ['["users"]'],
124
132
  type: 'string',
125
133
  },
126
134
  },
127
135
  },
128
136
  remove: {
129
- description: 'Remove queries from cache entirely. Pass key to target specific queries, or omit to clear all.',
137
+ description: 'Remove queries from cache entirely. Omit key for all.',
130
138
  handler: (args) => {
131
139
  const filters = args.key ? { queryKey: parseKey(args.key) } : undefined;
132
140
  queryClient.removeQueries(filters);
@@ -134,13 +142,14 @@ const reactQueryModule = (queryClient) => {
134
142
  },
135
143
  inputSchema: {
136
144
  key: {
137
- description: 'Query key to remove as JSON string (omit to remove all)',
145
+ description: 'Query key (JSON string). Omit to remove all.',
146
+ examples: ['["users"]'],
138
147
  type: 'string',
139
148
  },
140
149
  },
141
150
  },
142
151
  reset: {
143
- description: 'Reset queries to initial state (clears data and error). Pass key to target specific queries.',
152
+ description: 'Reset queries to initial state (clears data + error). Omit key for all.',
144
153
  handler: async (args) => {
145
154
  const filters = args.key ? { queryKey: parseKey(args.key) } : undefined;
146
155
  await queryClient.resetQueries(filters);
@@ -148,7 +157,8 @@ const reactQueryModule = (queryClient) => {
148
157
  },
149
158
  inputSchema: {
150
159
  key: {
151
- description: 'Query key to reset as JSON string (omit to reset all)',
160
+ description: 'Query key (JSON string). Omit to reset all.',
161
+ examples: ['["users"]'],
152
162
  type: 'string',
153
163
  },
154
164
  },
@@ -1 +1 @@
1
- {"version":3,"file":"reactQuery.js","sourceRoot":"","sources":["../../../src/modules/reactQuery/reactQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reactQuery.js","sourceRoot":"","sources":["../../../src/modules/reactQuery/reactQuery.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/modules/storage/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,SAAS,CAAC;AAWjE,eAAO,MAAM,aAAa,gBAAiB,YAAY,EAAE,KAAG,SAsG3D,CAAC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/modules/storage/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,SAAS,CAAC;AAWjE,eAAO,MAAM,aAAa,gBAAiB,YAAY,EAAE,KAAG,SA4G3D,CAAC"}
@@ -20,11 +20,18 @@ const storageModule = (...storages) => {
20
20
  })?.adapter ?? null);
21
21
  };
22
22
  return {
23
- description: 'Key-value storage inspection: get/set/delete items, list keys. Supports multiple named storages.',
23
+ description: `Multi-storage key-value inspection.
24
+
25
+ Each registered storage has a name and an adapter (MMKV / AsyncStorage /
26
+ custom). Only \`get\` is required on the adapter; \`set\` / \`delete\` /
27
+ \`getAllKeys\` are optional — the corresponding tools return an
28
+ "unsupported" error when absent. Values are JSON-parsed on read when
29
+ possible. The \`storage\` argument picks a named store; omit to target
30
+ the first-registered one.`,
24
31
  name: 'storage',
25
32
  tools: {
26
33
  delete_item: {
27
- description: 'Delete a key from storage',
34
+ description: 'Delete a key.',
28
35
  handler: async (args) => {
29
36
  const storage = getStorage(args.storage);
30
37
  if (!storage)
@@ -35,12 +42,12 @@ const storageModule = (...storages) => {
35
42
  return { key: args.key, success: true };
36
43
  },
37
44
  inputSchema: {
38
- key: { description: 'Key to delete', type: 'string' },
39
- storage: { description: 'Storage name (optional, defaults to first)', type: 'string' },
45
+ key: { description: 'Key to delete.', type: 'string' },
46
+ storage: { description: 'Storage name (default: first).', type: 'string' },
40
47
  },
41
48
  },
42
49
  get_all: {
43
- description: 'Get all key-value pairs from storage. Values are parsed as JSON if possible.',
50
+ description: 'All key-value pairs; values JSON-parsed when possible.',
44
51
  handler: async (args) => {
45
52
  const storage = getStorage(args.storage);
46
53
  if (!storage)
@@ -55,11 +62,11 @@ const storageModule = (...storages) => {
55
62
  return entries;
56
63
  },
57
64
  inputSchema: {
58
- storage: { description: 'Storage name (optional, defaults to first)', type: 'string' },
65
+ storage: { description: 'Storage name (default: first).', type: 'string' },
59
66
  },
60
67
  },
61
68
  get_item: {
62
- description: 'Get a value from storage by key. Parsed as JSON if possible.',
69
+ description: 'Value for one key; JSON-parsed when possible.',
63
70
  handler: async (args) => {
64
71
  const storage = getStorage(args.storage);
65
72
  if (!storage)
@@ -68,12 +75,12 @@ const storageModule = (...storages) => {
68
75
  return { key: args.key, value: tryParseJson(value) };
69
76
  },
70
77
  inputSchema: {
71
- key: { description: 'Key to read', type: 'string' },
72
- storage: { description: 'Storage name (optional, defaults to first)', type: 'string' },
78
+ key: { description: 'Key to read.', type: 'string' },
79
+ storage: { description: 'Storage name (default: first).', type: 'string' },
73
80
  },
74
81
  },
75
82
  list_keys: {
76
- description: 'List all keys in storage',
83
+ description: 'All keys in a storage.',
77
84
  handler: async (args) => {
78
85
  const storage = getStorage(args.storage);
79
86
  if (!storage)
@@ -83,11 +90,11 @@ const storageModule = (...storages) => {
83
90
  return { keys: await storage.getAllKeys() };
84
91
  },
85
92
  inputSchema: {
86
- storage: { description: 'Storage name (optional, defaults to first)', type: 'string' },
93
+ storage: { description: 'Storage name (default: first).', type: 'string' },
87
94
  },
88
95
  },
89
96
  list_storages: {
90
- description: 'List all registered storage instances',
97
+ description: 'Registered storages with key counts.',
91
98
  handler: async () => {
92
99
  const result = [];
93
100
  for (const s of storages) {
@@ -100,7 +107,7 @@ const storageModule = (...storages) => {
100
107
  },
101
108
  },
102
109
  set_item: {
103
- description: 'Set a value in storage. Objects/arrays are serialized as JSON.',
110
+ description: 'Write a value. Objects/arrays are stringified as JSON.',
104
111
  handler: async (args) => {
105
112
  const storage = getStorage(args.storage);
106
113
  if (!storage)
@@ -112,9 +119,9 @@ const storageModule = (...storages) => {
112
119
  return { key: args.key, success: true };
113
120
  },
114
121
  inputSchema: {
115
- key: { description: 'Key to set', type: 'string' },
116
- storage: { description: 'Storage name (optional, defaults to first)', type: 'string' },
117
- value: { description: 'Value to store (string or JSON)', type: 'string' },
122
+ key: { description: 'Key to set.', type: 'string' },
123
+ storage: { description: 'Storage name (default: first).', type: 'string' },
124
+ value: { description: 'Value (string or JSON-serializable).', type: 'string' },
118
125
  },
119
126
  },
120
127
  },
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/modules/storage/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/modules/storage/storage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hostModule.d.ts","sourceRoot":"","sources":["../../../src/server/host/hostModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKrD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,eAAO,MAAM,UAAU,WAAY,aAAa,KAAG,UAiBlD,CAAC"}
1
+ {"version":3,"file":"hostModule.d.ts","sourceRoot":"","sources":["../../../src/server/host/hostModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAerD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,eAAO,MAAM,UAAU,WAAY,aAAa,KAAG,UAgClD,CAAC"}
@@ -5,20 +5,38 @@ const capture_1 = require("./tools/capture");
5
5
  const devices_1 = require("./tools/devices");
6
6
  const input_1 = require("./tools/input");
7
7
  const lifecycle_1 = require("./tools/lifecycle");
8
+ const symbolicate_1 = require("./tools/symbolicate");
9
+ const tapFiber_1 = require("./tools/tapFiber");
8
10
  const hostModule = (runner) => {
9
11
  return {
10
- description: 'OS-level operations that run on the MCP server host via xcrun simctl / adb. Works when the React Native app is hung, disconnected, or not installed.',
12
+ description: `OS-level device control executed on the MCP server host. Works even when the React Native app is hung, disconnected, or not yet installed.
13
+
14
+ BACKENDS
15
+ iOS input (tap / swipe / type_text / press_key) goes through the bundled
16
+ ios-hid binary — HID injection into iOS Simulator via SimulatorKit. No
17
+ WebDriverAgent, no idb, no Appium server.
18
+ Android input / screenshots go through adb (input / screencap / monkey
19
+ / am force-stop).
20
+
21
+ COORDINATES
22
+ All (x, y) / (x1, y1, x2, y2) are in PHYSICAL pixels, top-left origin.
23
+ They match fiber_tree bounds.centerX/centerY — feed them directly.`,
11
24
  name: 'host',
12
25
  tools: {
26
+ drag: (0, input_1.dragTool)(runner),
13
27
  launch_app: (0, lifecycle_1.launchAppTool)(runner),
14
28
  list_devices: (0, devices_1.listDevicesTool)(runner),
29
+ long_press: (0, input_1.longPressTool)(runner),
15
30
  press_key: (0, input_1.pressKeyTool)(runner),
16
31
  restart_app: (0, lifecycle_1.restartAppTool)(runner),
17
32
  screenshot: (0, capture_1.screenshotTool)(runner),
18
33
  swipe: (0, input_1.swipeTool)(runner),
34
+ symbolicate: (0, symbolicate_1.symbolicateTool)(),
19
35
  tap: (0, input_1.tapTool)(runner),
36
+ tap_fiber: (0, tapFiber_1.tapFiberTool)(),
20
37
  terminate_app: (0, lifecycle_1.terminateAppTool)(runner),
21
38
  type_text: (0, input_1.typeTextTool)(runner),
39
+ type_text_batch: (0, input_1.typeTextBatchTool)(runner),
22
40
  },
23
41
  };
24
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"hostModule.js","sourceRoot":"","sources":["../../../src/server/host/hostModule.ts"],"names":[],"mappings":";;;AACA,6CAAiD;AACjD,6CAAkD;AAClD,yCAA+E;AAC/E,iDAAoF;AAG7E,MAAM,UAAU,GAAG,CAAC,MAAqB,EAAc,EAAE;IAC9D,OAAO;QACL,WAAW,EACT,sJAAsJ;QACxJ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE;YACL,UAAU,EAAE,IAAA,yBAAa,EAAC,MAAM,CAAC;YACjC,YAAY,EAAE,IAAA,yBAAe,EAAC,MAAM,CAAC;YACrC,SAAS,EAAE,IAAA,oBAAY,EAAC,MAAM,CAAC;YAC/B,WAAW,EAAE,IAAA,0BAAc,EAAC,MAAM,CAAC;YACnC,UAAU,EAAE,IAAA,wBAAc,EAAC,MAAM,CAAC;YAClC,KAAK,EAAE,IAAA,iBAAS,EAAC,MAAM,CAAC;YACxB,GAAG,EAAE,IAAA,eAAO,EAAC,MAAM,CAAC;YACpB,aAAa,EAAE,IAAA,4BAAgB,EAAC,MAAM,CAAC;YACvC,SAAS,EAAE,IAAA,oBAAY,EAAC,MAAM,CAAC;SAChC;KACF,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,UAAU,cAiBrB"}
1
+ {"version":3,"file":"hostModule.js","sourceRoot":"","sources":["../../../src/server/host/hostModule.ts"],"names":[],"mappings":";;;AACA,6CAAiD;AACjD,6CAAkD;AAClD,yCAQuB;AACvB,iDAAoF;AACpF,qDAAsD;AACtD,+CAAgD;AAGzC,MAAM,UAAU,GAAG,CAAC,MAAqB,EAAc,EAAE;IAC9D,OAAO;QACL,WAAW,EAAE;;;;;;;;;;;qEAWoD;QACjE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE;YACL,IAAI,EAAE,IAAA,gBAAQ,EAAC,MAAM,CAAC;YACtB,UAAU,EAAE,IAAA,yBAAa,EAAC,MAAM,CAAC;YACjC,YAAY,EAAE,IAAA,yBAAe,EAAC,MAAM,CAAC;YACrC,UAAU,EAAE,IAAA,qBAAa,EAAC,MAAM,CAAC;YACjC,SAAS,EAAE,IAAA,oBAAY,EAAC,MAAM,CAAC;YAC/B,WAAW,EAAE,IAAA,0BAAc,EAAC,MAAM,CAAC;YACnC,UAAU,EAAE,IAAA,wBAAc,EAAC,MAAM,CAAC;YAClC,KAAK,EAAE,IAAA,iBAAS,EAAC,MAAM,CAAC;YACxB,WAAW,EAAE,IAAA,6BAAe,GAAE;YAC9B,GAAG,EAAE,IAAA,eAAO,EAAC,MAAM,CAAC;YACpB,SAAS,EAAE,IAAA,uBAAY,GAAE;YACzB,aAAa,EAAE,IAAA,4BAAgB,EAAC,MAAM,CAAC;YACvC,SAAS,EAAE,IAAA,oBAAY,EAAC,MAAM,CAAC;YAC/B,eAAe,EAAE,IAAA,yBAAiB,EAAC,MAAM,CAAC;SAC3C;KACF,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,UAAU,cAgCrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../../src/server/host/tools/capture.ts"],"names":[],"mappings":"AASA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,QAAA,MAAM,qBAAqB,QAAS,CAAC;AAqIrC,eAAO,MAAM,cAAc,WAAY,aAAa,KAAG,eAwBtD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../../../src/server/host/tools/capture.ts"],"names":[],"mappings":"AASA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,QAAA,MAAM,qBAAqB,QAAS,CAAC;AA0PrC,eAAO,MAAM,cAAc,WAAY,aAAa,KAAG,eAyCtD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -14,7 +14,7 @@ const helpers_1 = require("../../../server/host/helpers");
14
14
  const processRunner_1 = require("../../../server/host/processRunner");
15
15
  const SCREENSHOT_TIMEOUT_MS = 15_000;
16
16
  exports.SCREENSHOT_TIMEOUT_MS = SCREENSHOT_TIMEOUT_MS;
17
- const SCREENSHOT_DEFAULT_WIDTH = 370;
17
+ const SCREENSHOT_DEFAULT_WIDTH = 280;
18
18
  const SCREENSHOT_MIN_WIDTH = 64;
19
19
  const SCREENSHOT_MAX_WIDTH = 1568;
20
20
  const WEBP_QUALITY = 80;
@@ -24,18 +24,97 @@ const clampWidth = (value) => {
24
24
  }
25
25
  return Math.max(SCREENSHOT_MIN_WIDTH, Math.min(SCREENSHOT_MAX_WIDTH, Math.floor(value)));
26
26
  };
27
- const resizeScreenshot = async (input, targetWidth) => {
28
- return (0, sharp_1.default)(input)
27
+ const parseRegion = (raw) => {
28
+ if (raw === undefined || raw === null)
29
+ return null;
30
+ if (typeof raw !== 'object' || Array.isArray(raw)) {
31
+ return { error: 'region must be an object { x, y, width, height }.' };
32
+ }
33
+ const r = raw;
34
+ const x = Number(r.x);
35
+ const y = Number(r.y);
36
+ const width = Number(r.width);
37
+ const height = Number(r.height);
38
+ if (!Number.isFinite(x) ||
39
+ !Number.isFinite(y) ||
40
+ !Number.isFinite(width) ||
41
+ !Number.isFinite(height)) {
42
+ return { error: 'region.x / y / width / height must all be finite numbers.' };
43
+ }
44
+ if (width <= 0 || height <= 0) {
45
+ return { error: 'region.width and region.height must be positive.' };
46
+ }
47
+ return {
48
+ height: Math.floor(height),
49
+ width: Math.floor(width),
50
+ x: Math.max(0, Math.floor(x)),
51
+ y: Math.max(0, Math.floor(y)),
52
+ };
53
+ };
54
+ const resizeScreenshot = async (input, targetWidth, region) => {
55
+ const pipeline = (0, sharp_1.default)(input);
56
+ const meta = await pipeline.metadata();
57
+ const origW = meta.width ?? 0;
58
+ const origH = meta.height ?? 0;
59
+ let appliedRegion;
60
+ let stage = pipeline;
61
+ if (region && origW > 0 && origH > 0) {
62
+ // Clip region to the actual image bounds so agents can pass fiber
63
+ // bounds without guarding the edges.
64
+ const left = Math.min(region.x, origW - 1);
65
+ const top = Math.min(region.y, origH - 1);
66
+ const w = Math.min(region.width, origW - left);
67
+ const h = Math.min(region.height, origH - top);
68
+ if (w > 0 && h > 0) {
69
+ stage = pipeline.extract({ height: h, left, top, width: w });
70
+ appliedRegion = { height: h, width: w, x: left, y: top };
71
+ }
72
+ }
73
+ const { data, info } = await stage
29
74
  .resize({ width: targetWidth, withoutEnlargement: true })
30
75
  .webp({ quality: WEBP_QUALITY })
31
- .toBuffer();
76
+ .toBuffer({ resolveWithObject: true });
77
+ return {
78
+ buffer: data,
79
+ height: info.height,
80
+ originalHeight: origH || undefined,
81
+ originalWidth: origW || undefined,
82
+ region: appliedRegion,
83
+ width: info.width,
84
+ };
32
85
  };
33
86
  const hashBuffer = (buf) => {
34
87
  return (0, node_crypto_1.createHash)('sha256').update(buf).digest('hex');
35
88
  };
36
89
  // Per-device cache for screenshot diff
37
90
  const lastScreenshotHash = new Map();
38
- const captureIos = async (udid, runner, width) => {
91
+ const buildResponse = (resized) => {
92
+ // `scale` = image-to-source ratio. When a region was cropped it's the
93
+ // image/region ratio; otherwise it's image/full-screen. Agents use it for
94
+ // pixel-back-to-device math.
95
+ const sourceWidth = resized.region?.width ?? resized.originalWidth;
96
+ const meta = {
97
+ bytes: resized.buffer.length,
98
+ height: resized.height,
99
+ originalHeight: resized.originalHeight,
100
+ originalWidth: resized.originalWidth,
101
+ region: resized.region,
102
+ scale: sourceWidth ? Number((resized.width / sourceWidth).toFixed(3)) : undefined,
103
+ width: resized.width,
104
+ };
105
+ return [
106
+ {
107
+ data: resized.buffer.toString('base64'),
108
+ mimeType: 'image/webp',
109
+ type: 'image',
110
+ },
111
+ {
112
+ text: JSON.stringify(meta),
113
+ type: 'text',
114
+ },
115
+ ];
116
+ };
117
+ const captureIos = async (udid, runner, width, region) => {
39
118
  const tmpPath = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `rnmcp-ios-${(0, node_crypto_1.randomUUID)()}.png`);
40
119
  try {
41
120
  const proc = await runner('xcrun', ['simctl', 'io', udid, 'screenshot', tmpPath], {
@@ -50,19 +129,13 @@ const captureIos = async (udid, runner, width) => {
50
129
  };
51
130
  }
52
131
  const raw = await (0, promises_1.readFile)(tmpPath);
53
- const resized = await resizeScreenshot(raw, width);
54
- const hash = hashBuffer(resized);
132
+ const resized = await resizeScreenshot(raw, width, region);
133
+ const hash = hashBuffer(resized.buffer);
55
134
  if (lastScreenshotHash.get(udid) === hash) {
56
135
  return { message: 'Screenshot unchanged since last capture.', unchanged: true };
57
136
  }
58
137
  lastScreenshotHash.set(udid, hash);
59
- return [
60
- {
61
- data: resized.toString('base64'),
62
- mimeType: 'image/webp',
63
- type: 'image',
64
- },
65
- ];
138
+ return buildResponse(resized);
66
139
  }
67
140
  catch (err) {
68
141
  if (err instanceof processRunner_1.ProcessNotFoundError) {
@@ -78,7 +151,7 @@ const captureIos = async (udid, runner, width) => {
78
151
  });
79
152
  }
80
153
  };
81
- const captureAndroid = async (serial, runner, width) => {
154
+ const captureAndroid = async (serial, runner, width, region) => {
82
155
  try {
83
156
  const proc = await runner('adb', ['-s', serial, 'exec-out', 'screencap', '-p'], {
84
157
  timeoutMs: SCREENSHOT_TIMEOUT_MS,
@@ -94,19 +167,13 @@ const captureAndroid = async (serial, runner, width) => {
94
167
  if (proc.stdout.length === 0) {
95
168
  return { error: 'adb screencap returned empty output' };
96
169
  }
97
- const resized = await resizeScreenshot(proc.stdout, width);
98
- const hash = hashBuffer(resized);
170
+ const resized = await resizeScreenshot(proc.stdout, width, region);
171
+ const hash = hashBuffer(resized.buffer);
99
172
  if (lastScreenshotHash.get(serial) === hash) {
100
173
  return { message: 'Screenshot unchanged since last capture.', unchanged: true };
101
174
  }
102
175
  lastScreenshotHash.set(serial, hash);
103
- return [
104
- {
105
- data: resized.toString('base64'),
106
- mimeType: 'image/webp',
107
- type: 'image',
108
- },
109
- ];
176
+ return buildResponse(resized);
110
177
  }
111
178
  catch (err) {
112
179
  if (err instanceof processRunner_1.ProcessNotFoundError) {
@@ -121,22 +188,38 @@ const captureAndroid = async (serial, runner, width) => {
121
188
  };
122
189
  const screenshotTool = (runner) => {
123
190
  return {
124
- description: `Capture a WebP screenshot from an iOS simulator or Android device, resized to save vision tokens. Default width ${SCREENSHOT_DEFAULT_WIDTH}px (pass \`width\` to override, max ${SCREENSHOT_MAX_WIDTH}). Returns "unchanged: true" if the screen hasn't changed since the last capture (saves tokens on redundant checks). For tap targeting prefer fiber_tree__find_all bounds — screenshots are only needed for visual verification or when targeting non-React surfaces.`,
191
+ description: `WebP screenshot, resized to save vision tokens. Response is [image, metadata] where metadata is JSON with { width, height, originalWidth, originalHeight, scale, bytes, region? }.
192
+
193
+ TOKEN BUDGETING
194
+ • Vision tokens are driven by image area. Default width ${SCREENSHOT_DEFAULT_WIDTH} gives a readable full-screen view at ~300 tokens. Bump only to read small text.
195
+ • Pass \`region: { x, y, width, height }\` (physical device pixels) to crop to a single element — typical tap-target shrinks to ~20-60 vision tokens. Grab the rect from fiber_tree__query bounds.
196
+ • { unchanged: true } is returned when the resized bytes are identical to the previous capture — cheap polling.
197
+
198
+ Use fiber_tree bounds for tap targeting; screenshots are for visual verification of what the UI looks like right now.`,
125
199
  handler: async (args, ctx) => {
126
200
  const resolved = await (0, deviceResolver_1.resolveDevice)(ctx, (0, helpers_1.parseResolveOptions)(args), runner);
127
201
  if (!resolved.ok) {
128
202
  return { error: resolved.error };
129
203
  }
130
204
  const width = clampWidth(args.width);
205
+ const region = parseRegion(args.region);
206
+ if (region && 'error' in region) {
207
+ return { error: region.error };
208
+ }
131
209
  if (resolved.device.platform === 'ios') {
132
- return captureIos(resolved.device.nativeId, runner, width);
210
+ return captureIos(resolved.device.nativeId, runner, width, region);
133
211
  }
134
- return captureAndroid(resolved.device.nativeId, runner, width);
212
+ return captureAndroid(resolved.device.nativeId, runner, width, region);
135
213
  },
136
214
  inputSchema: {
137
215
  platform: helpers_1.PLATFORM_ARG_SCHEMA,
216
+ region: {
217
+ description: 'Crop rectangle in original device pixels (top-left origin). Out-of-bounds values are clipped. Typical use: pass fiber_tree bounds ({ x, y, width, height }) to snapshot just one component. Omitted = full screen.',
218
+ examples: [{ height: 128, width: 900, x: 60, y: 200 }],
219
+ type: 'object',
220
+ },
138
221
  width: {
139
- description: `Output width in pixels. Aspect ratio preserved, height auto-computed. Default ${SCREENSHOT_DEFAULT_WIDTH}. Capped to ${SCREENSHOT_MIN_WIDTH}..${SCREENSHOT_MAX_WIDTH}. Use higher values when you need to read small text; default is enough for visual verification.`,
222
+ description: `Output width in image pixels (aspect ratio preserved, applied AFTER cropping). Default ${SCREENSHOT_DEFAULT_WIDTH}, clamped ${SCREENSHOT_MIN_WIDTH}..${SCREENSHOT_MAX_WIDTH}. Bump up only if you need to read small text.`,
140
223
  type: 'number',
141
224
  },
142
225
  ...helpers_1.NATIVE_ID_SCHEMA,
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../../src/server/host/tools/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../../src/server/host/tools/capture.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ const deviceResolver_1 = require("../../../server/host/deviceResolver");
5
5
  const capture_1 = require("./capture");
6
6
  const listDevicesTool = (runner) => {
7
7
  return {
8
- description: 'List all iOS simulators (booted or not) and Android devices (online or offline) visible via xcrun simctl / adb. Each device is annotated with connected=true and a clientId when it matches a currently-connected React Native client. Connected devices appear first in each platform group.',
8
+ description: 'Enumerate visible iOS simulators + Android devices. Connected clients are annotated with their clientId; connected devices are listed first in each platform group.',
9
9
  handler: async (_args, ctx) => {
10
10
  return (0, deviceResolver_1.enrichDevicesWithClientStatus)(ctx.bridge, runner);
11
11
  },
@@ -1 +1 @@
1
- {"version":3,"file":"devices.js","sourceRoot":"","sources":["../../../../src/server/host/tools/devices.ts"],"names":[],"mappings":";;;AAAA,iEAA6E;AAI7E,uCAAkD;AAE3C,MAAM,eAAe,GAAG,CAAC,MAAqB,EAAmB,EAAE;IACxE,OAAO;QACL,WAAW,EACT,+RAA+R;QACjS,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,OAAO,IAAA,8CAA6B,EAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QACD,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,+BAAqB;KAC/B,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B"}
1
+ {"version":3,"file":"devices.js","sourceRoot":"","sources":["../../../../src/server/host/tools/devices.ts"],"names":[],"mappings":";;;AAAA,iEAA6E;AAI7E,uCAAkD;AAE3C,MAAM,eAAe,GAAG,CAAC,MAAqB,EAAmB,EAAE;IACxE,OAAO;QACL,WAAW,EACT,qKAAqK;QACvK,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,OAAO,IAAA,8CAA6B,EAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QACD,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,+BAAqB;KAC/B,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,eAAe,mBAU1B"}
@@ -3,5 +3,8 @@ import { type HostToolHandler } from '../../../server/host/types';
3
3
  export declare const tapTool: (runner: ProcessRunner) => HostToolHandler;
4
4
  export declare const swipeTool: (runner: ProcessRunner) => HostToolHandler;
5
5
  export declare const typeTextTool: (runner: ProcessRunner) => HostToolHandler;
6
+ export declare const longPressTool: (runner: ProcessRunner) => HostToolHandler;
7
+ export declare const dragTool: (runner: ProcessRunner) => HostToolHandler;
8
+ export declare const typeTextBatchTool: (runner: ProcessRunner) => HostToolHandler;
6
9
  export declare const pressKeyTool: (runner: ProcessRunner) => HostToolHandler;
7
10
  //# sourceMappingURL=input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../src/server/host/tools/input.ts"],"names":[],"mappings":"AAUA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAwJ3D,eAAO,MAAM,OAAO,WAAY,aAAa,KAAG,eAoC/C,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,aAAa,KAAG,eA2EjD,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,aAAa,KAAG,eA2CpD,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,aAAa,KAAG,eAgCpD,CAAC"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../src/server/host/tools/input.ts"],"names":[],"mappings":"AAUA,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA6J3D,eAAO,MAAM,OAAO,WAAY,aAAa,KAAG,eAoC/C,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,aAAa,KAAG,eA2EjD,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,aAAa,KAAG,eA2CpD,CAAC;AASF,eAAO,MAAM,aAAa,WAAY,aAAa,KAAG,eAmDrD,CAAC;AAEF,eAAO,MAAM,QAAQ,WAAY,aAAa,KAAG,eA0EhD,CAAC;AASF,eAAO,MAAM,iBAAiB,WAAY,aAAa,KAAG,eA2FzD,CAAC;AAEF,eAAO,MAAM,YAAY,WAAY,aAAa,KAAG,eAgCpD,CAAC"}