@blitzdev/iphone-mcp 0.1.7

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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +219 -0
  3. package/dist/child-env.d.ts +1 -0
  4. package/dist/child-env.js +61 -0
  5. package/dist/child-env.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +318 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/device-client.d.ts +2 -0
  10. package/dist/device-client.js +15 -0
  11. package/dist/device-client.js.map +1 -0
  12. package/dist/execution-context.d.ts +33 -0
  13. package/dist/execution-context.js +66 -0
  14. package/dist/execution-context.js.map +1 -0
  15. package/dist/idb/ax-scan-client.d.ts +27 -0
  16. package/dist/idb/ax-scan-client.js +244 -0
  17. package/dist/idb/ax-scan-client.js.map +1 -0
  18. package/dist/idb/idb-client.d.ts +34 -0
  19. package/dist/idb/idb-client.js +288 -0
  20. package/dist/idb/idb-client.js.map +1 -0
  21. package/dist/index.d.ts +1 -0
  22. package/dist/index.js +15 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/logger.d.ts +3 -0
  25. package/dist/logger.js +6 -0
  26. package/dist/logger.js.map +1 -0
  27. package/dist/mcp-server.d.ts +2 -0
  28. package/dist/mcp-server.js +649 -0
  29. package/dist/mcp-server.js.map +1 -0
  30. package/dist/types.d.ts +75 -0
  31. package/dist/types.js +7 -0
  32. package/dist/types.js.map +1 -0
  33. package/dist/ui-filters.d.ts +11 -0
  34. package/dist/ui-filters.js +100 -0
  35. package/dist/ui-filters.js.map +1 -0
  36. package/dist/viewer/server.d.ts +5 -0
  37. package/dist/viewer/server.js +233 -0
  38. package/dist/viewer/server.js.map +1 -0
  39. package/dist/wda/device-discovery.d.ts +12 -0
  40. package/dist/wda/device-discovery.js +91 -0
  41. package/dist/wda/device-discovery.js.map +1 -0
  42. package/dist/wda/wda-client.d.ts +38 -0
  43. package/dist/wda/wda-client.js +314 -0
  44. package/dist/wda/wda-client.js.map +1 -0
  45. package/dist/wda/wda-manager.d.ts +29 -0
  46. package/dist/wda/wda-manager.js +263 -0
  47. package/dist/wda/wda-manager.js.map +1 -0
  48. package/dist/wda/wda-scan.d.ts +3 -0
  49. package/dist/wda/wda-scan.js +41 -0
  50. package/dist/wda/wda-scan.js.map +1 -0
  51. package/package.json +40 -0
  52. package/src/idb/ax-scan/Makefile +30 -0
  53. package/src/idb/ax-scan/ax-scan.m +168 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-client.js","sourceRoot":"","sources":["../src/device-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAqB,MAAM,YAAY,CAAA;AAEpE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,QAAQ;IAC3D,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAE7B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACxD,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type PhysicalDevice } from './wda/device-discovery.js';
2
+ interface SimulatorInfo {
3
+ udid: string;
4
+ name: string;
5
+ state: string;
6
+ }
7
+ interface ExecutionContextSimulator {
8
+ target: 'simulator';
9
+ udid: string;
10
+ name: string;
11
+ }
12
+ interface ExecutionContextDevice {
13
+ target: 'device';
14
+ udid: string;
15
+ name: string;
16
+ model: string;
17
+ connectionType: string;
18
+ viewerUrl: string;
19
+ }
20
+ interface ExecutionContextAmbiguous {
21
+ target: 'ambiguous';
22
+ simulators: SimulatorInfo[];
23
+ physicalDevices: PhysicalDevice[];
24
+ }
25
+ interface ExecutionContextNone {
26
+ target: 'none';
27
+ message: string;
28
+ }
29
+ export type ExecutionContext = ExecutionContextSimulator | ExecutionContextDevice | ExecutionContextAmbiguous | ExecutionContextNone;
30
+ export declare function detectExecutionContext(viewerPort: number): Promise<ExecutionContext>;
31
+ export declare function setExecutionContext(ctx: ExecutionContext): void;
32
+ export declare function getCachedContext(): ExecutionContext | null;
33
+ export {};
@@ -0,0 +1,66 @@
1
+ import { execFile } from 'child_process';
2
+ import { promisify } from 'util';
3
+ import { log } from './logger.js';
4
+ import { listPhysicalDevices } from './wda/device-discovery.js';
5
+ const execFileAsync = promisify(execFile);
6
+ let cachedContext = null;
7
+ async function listBootedSimulators() {
8
+ try {
9
+ const { stdout } = await execFileAsync('xcrun', ['simctl', 'list', 'devices', 'booted', '-j'], { timeout: 10000 });
10
+ const data = JSON.parse(stdout);
11
+ const simulators = [];
12
+ for (const runtime of Object.values(data.devices)) {
13
+ for (const device of runtime) {
14
+ if (device.state === 'Booted') {
15
+ simulators.push({ udid: device.udid, name: device.name, state: device.state });
16
+ }
17
+ }
18
+ }
19
+ return simulators;
20
+ }
21
+ catch {
22
+ return [];
23
+ }
24
+ }
25
+ export async function detectExecutionContext(viewerPort) {
26
+ const simulators = await listBootedSimulators();
27
+ const physicalDevices = await listPhysicalDevices();
28
+ log('ExecutionContext', 'log', `Found ${simulators.length} simulator(s), ${physicalDevices.length} physical device(s)`);
29
+ if (simulators.length === 0 && physicalDevices.length === 0) {
30
+ return {
31
+ target: 'none',
32
+ message: 'No iPhone or simulator found. Boot a simulator or connect an iPhone.',
33
+ };
34
+ }
35
+ if (simulators.length === 1 && physicalDevices.length === 0) {
36
+ cachedContext = {
37
+ target: 'simulator',
38
+ udid: simulators[0].udid,
39
+ name: simulators[0].name,
40
+ };
41
+ return cachedContext;
42
+ }
43
+ if (physicalDevices.length === 1 && simulators.length === 0) {
44
+ cachedContext = {
45
+ target: 'device',
46
+ udid: physicalDevices[0].udid,
47
+ name: physicalDevices[0].name,
48
+ model: physicalDevices[0].model,
49
+ connectionType: physicalDevices[0].connectionType,
50
+ viewerUrl: `http://localhost:${viewerPort}?udid=${encodeURIComponent(physicalDevices[0].udid)}`,
51
+ };
52
+ return cachedContext;
53
+ }
54
+ return {
55
+ target: 'ambiguous',
56
+ simulators,
57
+ physicalDevices,
58
+ };
59
+ }
60
+ export function setExecutionContext(ctx) {
61
+ cachedContext = ctx;
62
+ }
63
+ export function getCachedContext() {
64
+ return cachedContext;
65
+ }
66
+ //# sourceMappingURL=execution-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../src/execution-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ScanRegion, ScanCommand } from '../types.js';
2
+ export declare function regionToCommand(region: ScanRegion, screenWidth: number, screenHeight: number, gridStep: number): ScanCommand;
3
+ export declare class AXScanClient {
4
+ private static instances;
5
+ private udid;
6
+ private proc;
7
+ private ready;
8
+ private readyPromise;
9
+ private buffer;
10
+ private pendingResolve;
11
+ private pendingReject;
12
+ private screenWidth;
13
+ private screenHeight;
14
+ private axScanAvailable;
15
+ private constructor();
16
+ static getInstance(udid: string): AXScanClient;
17
+ private ensureStarted;
18
+ private sendCommand;
19
+ getScreenSize(): Promise<{
20
+ width: number;
21
+ height: number;
22
+ }>;
23
+ scan(region: ScanRegion, gridStep?: number): Promise<unknown[]>;
24
+ private fallbackScan;
25
+ shutdown(): Promise<void>;
26
+ static shutdownAll(): Promise<void>;
27
+ }
@@ -0,0 +1,244 @@
1
+ import { spawn, exec } from 'child_process';
2
+ import { existsSync } from 'fs';
3
+ import path from 'path';
4
+ import os from 'os';
5
+ import { promisify } from 'util';
6
+ import { log } from '../logger.js';
7
+ const execAsync = promisify(exec);
8
+ function resolveAxScanPath() {
9
+ const mcpPath = path.join(os.homedir(), '.blitz-iphone-mcp', 'bin', 'ax-scan');
10
+ if (existsSync(mcpPath))
11
+ return mcpPath;
12
+ const blitzPath = path.join(os.homedir(), '.blitz', 'bin', 'ax-scan');
13
+ if (existsSync(blitzPath))
14
+ return blitzPath;
15
+ return null;
16
+ }
17
+ const DEFAULT_SCREEN_SIZE = { width: 393, height: 852 };
18
+ async function resolveDeviceScreenSize(udid) {
19
+ try {
20
+ const { stdout } = await execAsync('xcrun simctl list devices -j');
21
+ const data = JSON.parse(stdout);
22
+ for (const runtime of Object.values(data.devices)) {
23
+ for (const device of runtime) {
24
+ if (device.udid === udid) {
25
+ const name = device.name;
26
+ // Common device screen sizes (points)
27
+ const deviceSizes = {
28
+ 'iPhone 17 Pro': { width: 402, height: 874 },
29
+ 'iPhone 17 Pro Max': { width: 440, height: 956 },
30
+ 'iPhone 16 Pro': { width: 402, height: 874 },
31
+ 'iPhone 16 Pro Max': { width: 440, height: 956 },
32
+ 'iPhone 16': { width: 393, height: 852 },
33
+ 'iPhone 16 Plus': { width: 430, height: 932 },
34
+ 'iPhone 15 Pro': { width: 393, height: 852 },
35
+ 'iPhone 15 Pro Max': { width: 430, height: 932 },
36
+ 'iPhone 15': { width: 393, height: 852 },
37
+ 'iPhone 15 Plus': { width: 430, height: 932 },
38
+ 'iPhone 14 Pro': { width: 393, height: 852 },
39
+ 'iPhone 14 Pro Max': { width: 430, height: 932 },
40
+ 'iPhone 14': { width: 390, height: 844 },
41
+ 'iPhone SE (3rd generation)': { width: 375, height: 667 },
42
+ 'iPad Pro (12.9-inch)': { width: 1024, height: 1366 },
43
+ 'iPad Pro (11-inch)': { width: 834, height: 1194 },
44
+ 'iPad Air': { width: 820, height: 1180 },
45
+ };
46
+ if (deviceSizes[name])
47
+ return deviceSizes[name];
48
+ for (const key of Object.keys(deviceSizes)) {
49
+ if (name.includes(key) || key.includes(name))
50
+ return deviceSizes[key];
51
+ }
52
+ log('AXScan', 'warn', `Unknown device model "${name}", using default screen size`);
53
+ return DEFAULT_SCREEN_SIZE;
54
+ }
55
+ }
56
+ }
57
+ }
58
+ catch (e) {
59
+ log('AXScan', 'warn', `Failed to resolve device screen size for ${udid}: ${e}`);
60
+ }
61
+ return DEFAULT_SCREEN_SIZE;
62
+ }
63
+ export function regionToCommand(region, screenWidth, screenHeight, gridStep) {
64
+ const midX = Math.round(screenWidth / 2);
65
+ const midY = Math.round(screenHeight / 2);
66
+ const pad = Math.round(gridStep / 2);
67
+ switch (region) {
68
+ case 'full':
69
+ return { grid_step: gridStep, x_start: pad, y_start: pad, x_end: screenWidth, y_end: screenHeight };
70
+ case 'top-half':
71
+ return { grid_step: gridStep, x_start: pad, y_start: pad, x_end: screenWidth, y_end: midY };
72
+ case 'bottom-half':
73
+ return { grid_step: gridStep, x_start: pad, y_start: midY, x_end: screenWidth, y_end: screenHeight };
74
+ case 'top-left':
75
+ return { grid_step: gridStep, x_start: pad, y_start: pad, x_end: midX, y_end: midY };
76
+ case 'top-right':
77
+ return { grid_step: gridStep, x_start: midX, y_start: pad, x_end: screenWidth, y_end: midY };
78
+ case 'bottom-left':
79
+ return { grid_step: gridStep, x_start: pad, y_start: midY, x_end: midX, y_end: screenHeight };
80
+ case 'bottom-right':
81
+ return { grid_step: gridStep, x_start: midX, y_start: midY, x_end: screenWidth, y_end: screenHeight };
82
+ }
83
+ }
84
+ export class AXScanClient {
85
+ static instances = new Map();
86
+ udid;
87
+ proc = null;
88
+ ready = false;
89
+ readyPromise = null;
90
+ buffer = '';
91
+ pendingResolve = null;
92
+ pendingReject = null;
93
+ screenWidth = 0;
94
+ screenHeight = 0;
95
+ axScanAvailable;
96
+ constructor(udid) {
97
+ this.udid = udid;
98
+ this.axScanAvailable = resolveAxScanPath() !== null;
99
+ }
100
+ static getInstance(udid) {
101
+ if (!AXScanClient.instances.has(udid)) {
102
+ AXScanClient.instances.set(udid, new AXScanClient(udid));
103
+ }
104
+ return AXScanClient.instances.get(udid);
105
+ }
106
+ async ensureStarted() {
107
+ if (this.ready)
108
+ return;
109
+ if (this.readyPromise)
110
+ return this.readyPromise;
111
+ // Resolve screen size
112
+ if (this.screenWidth === 0) {
113
+ const screenSize = await resolveDeviceScreenSize(this.udid);
114
+ this.screenWidth = screenSize.width;
115
+ this.screenHeight = screenSize.height;
116
+ }
117
+ if (!this.axScanAvailable) {
118
+ // No ax-scan binary — we'll use idb fallback in scan()
119
+ this.ready = true;
120
+ return;
121
+ }
122
+ const axScanPath = resolveAxScanPath();
123
+ this.readyPromise = new Promise((resolve, reject) => {
124
+ log('AXScan', 'log', `Starting ax-scan daemon for ${this.udid} (screen: ${this.screenWidth}x${this.screenHeight})`);
125
+ this.proc = spawn(axScanPath, ['--udid', this.udid], {
126
+ stdio: ['pipe', 'pipe', 'pipe'],
127
+ });
128
+ this.proc.stderr?.on('data', (data) => {
129
+ const text = data.toString().trim();
130
+ if (text)
131
+ log('AXScan', 'log', `[${this.udid}] ${text}`);
132
+ });
133
+ this.proc.on('error', (err) => {
134
+ log('AXScan', 'error', `[${this.udid}] Process error: ${err}`);
135
+ this.ready = false;
136
+ this.proc = null;
137
+ this.readyPromise = null;
138
+ this.axScanAvailable = false;
139
+ if (this.pendingReject) {
140
+ this.pendingReject(err);
141
+ this.pendingResolve = null;
142
+ this.pendingReject = null;
143
+ }
144
+ });
145
+ this.proc.on('exit', (code) => {
146
+ log('AXScan', 'log', `[${this.udid}] Daemon exited with code ${code}`);
147
+ this.ready = false;
148
+ this.proc = null;
149
+ this.readyPromise = null;
150
+ });
151
+ this.proc.stdout?.on('data', (data) => {
152
+ this.buffer += data.toString();
153
+ if (!this.ready) {
154
+ const readyIdx = this.buffer.indexOf('READY\n');
155
+ if (readyIdx !== -1) {
156
+ this.buffer = this.buffer.slice(readyIdx + 6);
157
+ this.ready = true;
158
+ log('AXScan', 'log', `[${this.udid}] Daemon ready`);
159
+ resolve();
160
+ return;
161
+ }
162
+ }
163
+ const sentinelIdx = this.buffer.indexOf('\n---\n');
164
+ if (sentinelIdx !== -1 && this.pendingResolve) {
165
+ const response = this.buffer.slice(0, sentinelIdx);
166
+ this.buffer = this.buffer.slice(sentinelIdx + 5);
167
+ const res = this.pendingResolve;
168
+ this.pendingResolve = null;
169
+ this.pendingReject = null;
170
+ res(response);
171
+ }
172
+ });
173
+ setTimeout(() => {
174
+ if (!this.ready) {
175
+ reject(new Error('ax-scan daemon startup timed out'));
176
+ this.shutdown();
177
+ }
178
+ }, 10000);
179
+ });
180
+ return this.readyPromise;
181
+ }
182
+ sendCommand(cmd) {
183
+ return new Promise((resolve, reject) => {
184
+ if (!this.proc?.stdin) {
185
+ reject(new Error('Daemon not running'));
186
+ return;
187
+ }
188
+ this.pendingResolve = resolve;
189
+ this.pendingReject = reject;
190
+ this.proc.stdin.write(JSON.stringify(cmd) + '\n');
191
+ setTimeout(() => {
192
+ if (this.pendingReject) {
193
+ this.pendingReject(new Error('Scan timed out'));
194
+ this.pendingResolve = null;
195
+ this.pendingReject = null;
196
+ }
197
+ }, 15000);
198
+ });
199
+ }
200
+ async getScreenSize() {
201
+ await this.ensureStarted();
202
+ return { width: this.screenWidth, height: this.screenHeight };
203
+ }
204
+ async scan(region, gridStep = 25) {
205
+ await this.ensureStarted();
206
+ if (!this.axScanAvailable || !this.proc) {
207
+ return this.fallbackScan();
208
+ }
209
+ const cmd = regionToCommand(region, this.screenWidth, this.screenHeight, gridStep);
210
+ const raw = await this.sendCommand(cmd);
211
+ try {
212
+ const parsed = JSON.parse(raw);
213
+ if (parsed.error)
214
+ throw new Error(parsed.error);
215
+ return Array.isArray(parsed) ? parsed : [parsed];
216
+ }
217
+ catch (e) {
218
+ throw new Error(`Failed to parse ax-scan response: ${e.message}`);
219
+ }
220
+ }
221
+ async fallbackScan() {
222
+ log('AXScan', 'log', `[${this.udid}] Using idb describe-all fallback`);
223
+ const { getIDBClient } = await import('./idb-client.js');
224
+ const client = getIDBClient(this.udid);
225
+ const result = await client.describeAll(false);
226
+ return Array.isArray(result) ? result : [result];
227
+ }
228
+ async shutdown() {
229
+ if (this.proc) {
230
+ this.proc.stdin?.end();
231
+ this.proc.kill('SIGTERM');
232
+ this.proc = null;
233
+ }
234
+ this.ready = false;
235
+ this.readyPromise = null;
236
+ this.buffer = '';
237
+ AXScanClient.instances.delete(this.udid);
238
+ }
239
+ static async shutdownAll() {
240
+ const instances = Array.from(AXScanClient.instances.values());
241
+ await Promise.all(instances.map(i => i.shutdown()));
242
+ }
243
+ }
244
+ //# sourceMappingURL=ax-scan-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ax-scan-client.js","sourceRoot":"","sources":["../../src/idb/ax-scan-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export declare function resolveBootedUdid(): Promise<string>;
2
+ export declare class IDBClient {
3
+ private static instances;
4
+ private udid;
5
+ private shellProcess;
6
+ private isShuttingDown;
7
+ private companionKillAttempts;
8
+ private static readonly MAX_COMPANION_KILL_ATTEMPTS;
9
+ private constructor();
10
+ private resolvedUdid;
11
+ private getResolvedUdid;
12
+ static getInstance(udid?: string): IDBClient;
13
+ private startShell;
14
+ private runInShell;
15
+ private runDirect;
16
+ shutdown(): Promise<void>;
17
+ tap(x: number, y: number, duration?: number): Promise<void>;
18
+ swipe(fromX: number, fromY: number, toX: number, toY: number, duration?: number, delta?: number): Promise<void>;
19
+ pressButton(button: 'HOME' | 'LOCK' | 'SIDE_BUTTON' | 'APPLE_PAY' | 'SIRI', duration?: number): Promise<void>;
20
+ inputText(text: string): Promise<void>;
21
+ pressKey(key: number | string, duration?: number): Promise<void>;
22
+ pressKeySequence(keySequence: (number | string)[]): Promise<void>;
23
+ describeAll(nested?: boolean): Promise<unknown>;
24
+ describePoint(x: number, y: number, nested?: boolean): Promise<unknown>;
25
+ screenshot(): Promise<Buffer>;
26
+ listApps(): Promise<{
27
+ bundleId: string;
28
+ name: string;
29
+ type: 'System' | 'User';
30
+ }[]>;
31
+ launch(bundleId: string): Promise<void>;
32
+ }
33
+ export declare function getIDBClient(udid?: string): IDBClient;
34
+ export declare function shutdownAllIDBClients(): Promise<void>;