ios-webkit-mcp 0.18.3

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 (171) hide show
  1. package/CONTRIBUTING.md +61 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +16 -0
  4. package/README.md +187 -0
  5. package/build/src/bin/ios-webkit-mcp.d.ts +2 -0
  6. package/build/src/bin/ios-webkit-mcp.js +14 -0
  7. package/build/src/bin/ios-webkit-mcp.js.map +1 -0
  8. package/build/src/capability.d.ts +61 -0
  9. package/build/src/capability.js +146 -0
  10. package/build/src/capability.js.map +1 -0
  11. package/build/src/index.d.ts +1 -0
  12. package/build/src/index.js +2 -0
  13. package/build/src/index.js.map +1 -0
  14. package/build/src/page-session.d.ts +108 -0
  15. package/build/src/page-session.js +331 -0
  16. package/build/src/page-session.js.map +1 -0
  17. package/build/src/server.d.ts +11 -0
  18. package/build/src/server.js +144 -0
  19. package/build/src/server.js.map +1 -0
  20. package/build/src/tools/analyze_performance.d.ts +40 -0
  21. package/build/src/tools/analyze_performance.js +112 -0
  22. package/build/src/tools/analyze_performance.js.map +1 -0
  23. package/build/src/tools/breakpoints.d.ts +80 -0
  24. package/build/src/tools/breakpoints.js +167 -0
  25. package/build/src/tools/breakpoints.js.map +1 -0
  26. package/build/src/tools/clear_console.d.ts +11 -0
  27. package/build/src/tools/clear_console.js +32 -0
  28. package/build/src/tools/clear_console.js.map +1 -0
  29. package/build/src/tools/click.d.ts +20 -0
  30. package/build/src/tools/click.js +88 -0
  31. package/build/src/tools/click.js.map +1 -0
  32. package/build/src/tools/debug_element.d.ts +36 -0
  33. package/build/src/tools/debug_element.js +66 -0
  34. package/build/src/tools/debug_element.js.map +1 -0
  35. package/build/src/tools/debugger.d.ts +44 -0
  36. package/build/src/tools/debugger.js +117 -0
  37. package/build/src/tools/debugger.js.map +1 -0
  38. package/build/src/tools/delete_cookie.d.ts +18 -0
  39. package/build/src/tools/delete_cookie.js +33 -0
  40. package/build/src/tools/delete_cookie.js.map +1 -0
  41. package/build/src/tools/drag.d.ts +40 -0
  42. package/build/src/tools/drag.js +202 -0
  43. package/build/src/tools/drag.js.map +1 -0
  44. package/build/src/tools/evaluate_script.d.ts +24 -0
  45. package/build/src/tools/evaluate_script.js +172 -0
  46. package/build/src/tools/evaluate_script.js.map +1 -0
  47. package/build/src/tools/fill.d.ts +22 -0
  48. package/build/src/tools/fill.js +104 -0
  49. package/build/src/tools/fill.js.map +1 -0
  50. package/build/src/tools/fill_form.d.ts +34 -0
  51. package/build/src/tools/fill_form.js +110 -0
  52. package/build/src/tools/fill_form.js.map +1 -0
  53. package/build/src/tools/gc_heap.d.ts +16 -0
  54. package/build/src/tools/gc_heap.js +66 -0
  55. package/build/src/tools/gc_heap.js.map +1 -0
  56. package/build/src/tools/get_capability_snapshot.d.ts +17 -0
  57. package/build/src/tools/get_capability_snapshot.js +50 -0
  58. package/build/src/tools/get_capability_snapshot.js.map +1 -0
  59. package/build/src/tools/get_console_message.d.ts +18 -0
  60. package/build/src/tools/get_console_message.js +92 -0
  61. package/build/src/tools/get_console_message.js.map +1 -0
  62. package/build/src/tools/get_cookies.d.ts +20 -0
  63. package/build/src/tools/get_cookies.js +59 -0
  64. package/build/src/tools/get_cookies.js.map +1 -0
  65. package/build/src/tools/get_event_listeners.d.ts +29 -0
  66. package/build/src/tools/get_event_listeners.js +129 -0
  67. package/build/src/tools/get_event_listeners.js.map +1 -0
  68. package/build/src/tools/get_network_request.d.ts +22 -0
  69. package/build/src/tools/get_network_request.js +121 -0
  70. package/build/src/tools/get_network_request.js.map +1 -0
  71. package/build/src/tools/get_performance_metrics.d.ts +27 -0
  72. package/build/src/tools/get_performance_metrics.js +185 -0
  73. package/build/src/tools/get_performance_metrics.js.map +1 -0
  74. package/build/src/tools/get_resource_tree.d.ts +18 -0
  75. package/build/src/tools/get_resource_tree.js +82 -0
  76. package/build/src/tools/get_resource_tree.js.map +1 -0
  77. package/build/src/tools/handle_dialog.d.ts +39 -0
  78. package/build/src/tools/handle_dialog.js +182 -0
  79. package/build/src/tools/handle_dialog.js.map +1 -0
  80. package/build/src/tools/highlight_node.d.ts +41 -0
  81. package/build/src/tools/highlight_node.js +95 -0
  82. package/build/src/tools/highlight_node.js.map +1 -0
  83. package/build/src/tools/hover.d.ts +20 -0
  84. package/build/src/tools/hover.js +89 -0
  85. package/build/src/tools/hover.js.map +1 -0
  86. package/build/src/tools/intercept.d.ts +81 -0
  87. package/build/src/tools/intercept.js +161 -0
  88. package/build/src/tools/intercept.js.map +1 -0
  89. package/build/src/tools/list_console_messages.d.ts +20 -0
  90. package/build/src/tools/list_console_messages.js +105 -0
  91. package/build/src/tools/list_console_messages.js.map +1 -0
  92. package/build/src/tools/list_indexeddb.d.ts +16 -0
  93. package/build/src/tools/list_indexeddb.js +55 -0
  94. package/build/src/tools/list_indexeddb.js.map +1 -0
  95. package/build/src/tools/list_network_requests.d.ts +25 -0
  96. package/build/src/tools/list_network_requests.js +108 -0
  97. package/build/src/tools/list_network_requests.js.map +1 -0
  98. package/build/src/tools/list_pages.d.ts +17 -0
  99. package/build/src/tools/list_pages.js +113 -0
  100. package/build/src/tools/list_pages.js.map +1 -0
  101. package/build/src/tools/navigate_page.d.ts +18 -0
  102. package/build/src/tools/navigate_page.js +73 -0
  103. package/build/src/tools/navigate_page.js.map +1 -0
  104. package/build/src/tools/network_runtime.d.ts +51 -0
  105. package/build/src/tools/network_runtime.js +101 -0
  106. package/build/src/tools/network_runtime.js.map +1 -0
  107. package/build/src/tools/press_key.d.ts +32 -0
  108. package/build/src/tools/press_key.js +108 -0
  109. package/build/src/tools/press_key.js.map +1 -0
  110. package/build/src/tools/query_dom_node.d.ts +22 -0
  111. package/build/src/tools/query_dom_node.js +103 -0
  112. package/build/src/tools/query_dom_node.js.map +1 -0
  113. package/build/src/tools/record_cpu_profile.d.ts +38 -0
  114. package/build/src/tools/record_cpu_profile.js +174 -0
  115. package/build/src/tools/record_cpu_profile.js.map +1 -0
  116. package/build/src/tools/record_memory_tracking.d.ts +32 -0
  117. package/build/src/tools/record_memory_tracking.js +103 -0
  118. package/build/src/tools/record_memory_tracking.js.map +1 -0
  119. package/build/src/tools/record_timeline.d.ts +20 -0
  120. package/build/src/tools/record_timeline.js +110 -0
  121. package/build/src/tools/record_timeline.js.map +1 -0
  122. package/build/src/tools/reload_page.d.ts +18 -0
  123. package/build/src/tools/reload_page.js +59 -0
  124. package/build/src/tools/reload_page.js.map +1 -0
  125. package/build/src/tools/select_page.d.ts +18 -0
  126. package/build/src/tools/select_page.js +54 -0
  127. package/build/src/tools/select_page.js.map +1 -0
  128. package/build/src/tools/set_extra_http_headers.d.ts +16 -0
  129. package/build/src/tools/set_extra_http_headers.js +55 -0
  130. package/build/src/tools/set_extra_http_headers.js.map +1 -0
  131. package/build/src/tools/set_init_script.d.ts +16 -0
  132. package/build/src/tools/set_init_script.js +43 -0
  133. package/build/src/tools/set_init_script.js.map +1 -0
  134. package/build/src/tools/set_outer_html.d.ts +18 -0
  135. package/build/src/tools/set_outer_html.js +52 -0
  136. package/build/src/tools/set_outer_html.js.map +1 -0
  137. package/build/src/tools/set_user_agent.d.ts +40 -0
  138. package/build/src/tools/set_user_agent.js +83 -0
  139. package/build/src/tools/set_user_agent.js.map +1 -0
  140. package/build/src/tools/summarize_console_errors.d.ts +40 -0
  141. package/build/src/tools/summarize_console_errors.js +131 -0
  142. package/build/src/tools/summarize_console_errors.js.map +1 -0
  143. package/build/src/tools/take_memory_snapshot.d.ts +18 -0
  144. package/build/src/tools/take_memory_snapshot.js +88 -0
  145. package/build/src/tools/take_memory_snapshot.js.map +1 -0
  146. package/build/src/tools/take_node_screenshot.d.ts +29 -0
  147. package/build/src/tools/take_node_screenshot.js +57 -0
  148. package/build/src/tools/take_node_screenshot.js.map +1 -0
  149. package/build/src/tools/take_screenshot.d.ts +51 -0
  150. package/build/src/tools/take_screenshot.js +108 -0
  151. package/build/src/tools/take_screenshot.js.map +1 -0
  152. package/build/src/tools/take_snapshot.d.ts +22 -0
  153. package/build/src/tools/take_snapshot.js +142 -0
  154. package/build/src/tools/take_snapshot.js.map +1 -0
  155. package/build/src/tools/type_text.d.ts +34 -0
  156. package/build/src/tools/type_text.js +203 -0
  157. package/build/src/tools/type_text.js.map +1 -0
  158. package/build/src/tools/wait_for.d.ts +24 -0
  159. package/build/src/tools/wait_for.js +93 -0
  160. package/build/src/tools/wait_for.js.map +1 -0
  161. package/build/src/tools/wip_send.d.ts +22 -0
  162. package/build/src/tools/wip_send.js +81 -0
  163. package/build/src/tools/wip_send.js.map +1 -0
  164. package/build/src/wip-client/iwdp-http.d.ts +17 -0
  165. package/build/src/wip-client/iwdp-http.js +98 -0
  166. package/build/src/wip-client/iwdp-http.js.map +1 -0
  167. package/build/src/wip-client/ws-session.d.ts +41 -0
  168. package/build/src/wip-client/ws-session.js +290 -0
  169. package/build/src/wip-client/ws-session.js.map +1 -0
  170. package/docs/spec.md +689 -0
  171. package/package.json +77 -0
@@ -0,0 +1,146 @@
1
+ export class WipError extends Error {
2
+ code;
3
+ domain;
4
+ rawCode;
5
+ fallback;
6
+ constructor(code, message, opts) {
7
+ super(message);
8
+ this.name = 'WipError';
9
+ this.code = code;
10
+ this.domain = opts?.domain;
11
+ this.rawCode = opts?.rawCode;
12
+ this.fallback = opts?.fallback;
13
+ }
14
+ toStructured() {
15
+ return {
16
+ code: this.code,
17
+ message: this.message,
18
+ ...(this.domain !== undefined ? { domain: this.domain } : {}),
19
+ ...(this.rawCode !== undefined ? { rawCode: this.rawCode } : {}),
20
+ ...(this.fallback !== undefined ? { fallback: this.fallback } : {}),
21
+ };
22
+ }
23
+ }
24
+ /**
25
+ * Map a raw WIP error response (or thrown Error) to a WipError with code.
26
+ * `code === -32601` → METHOD_NOT_FOUND (or DOMAIN_UNAVAILABLE if message
27
+ * contains "domain was not found"). `-32602` → INVALID_PARAMS. Plain timeout
28
+ * messages from `WipSession.send` → TIMEOUT.
29
+ */
30
+ export function classifyWipError(err, method) {
31
+ const msg = err instanceof Error ? err.message : String(err);
32
+ // Match patterns from WipSession.handleInner reject + connect/send timeout
33
+ // strings.
34
+ if (/Timeout \(\d+ms\)/.test(msg)) {
35
+ return new WipError('TIMEOUT', msg, { domain: domainOf(method) });
36
+ }
37
+ // WipSession threw the legacy "<method> failed: <wip-error.message>" format.
38
+ // Check for known sentinel substrings in the WIP-side message.
39
+ const domainMatch = msg.match(/'([A-Z][A-Za-z0-9]+)' domain was not found/);
40
+ if (domainMatch) {
41
+ return new WipError('DOMAIN_UNAVAILABLE', msg, { domain: domainMatch[1], rawCode: -32601 });
42
+ }
43
+ if (/'[^']+' was not found/.test(msg)) {
44
+ return new WipError('METHOD_NOT_FOUND', msg, { domain: domainOf(method), rawCode: -32601 });
45
+ }
46
+ if (/Invalid params|expected/i.test(msg)) {
47
+ return new WipError('INVALID_PARAMS', msg, { domain: domainOf(method), rawCode: -32602 });
48
+ }
49
+ if (/WipSession not connected|closed by peer/.test(msg)) {
50
+ return new WipError('TRANSPORT_ERROR', msg, { domain: domainOf(method) });
51
+ }
52
+ return new WipError('INTERNAL', msg, { domain: domainOf(method) });
53
+ }
54
+ function domainOf(method) {
55
+ const idx = method.indexOf('.');
56
+ return idx > 0 ? method.slice(0, idx) : undefined;
57
+ }
58
+ /**
59
+ * Sentinels for Schema-fallback domain probing. **Important constraint**: any
60
+ * method that *hangs* (no response within `timeoutMs`) blocks every concurrent
61
+ * tool call on the same ws — Apple WIP serializes per-target message
62
+ * processing. So sentinels MUST be methods that always reply quickly (success
63
+ * or `-32601 NOT_FOUND`), never methods known to hang.
64
+ *
65
+ * CSS.* is intentionally NOT a sentinel: `CSS.enable` hangs on iOS 26.5 (real
66
+ * receipt 2026-05-17). Detection of CSS unavailability happens via:
67
+ * ① Schema.getDomains absence of "CSS" entry, OR
68
+ * ② tool-level timeout when a CSS-dependent tool eventually ships.
69
+ *
70
+ * Currently empty — all batch-13 Must tools live in domains we already have
71
+ * positive matrix coverage for.
72
+ */
73
+ const SENTINEL_PROBES = [];
74
+ export async function probeCapabilities(session) {
75
+ const startedAt = Date.now();
76
+ const sentinels = {};
77
+ const notes = [];
78
+ let supportedDomains;
79
+ let schemaProbeSucceeded = false;
80
+ // Step 1: Schema.getDomains.
81
+ try {
82
+ const result = await session.send('Schema.getDomains', undefined, 3_000);
83
+ if (Array.isArray(result?.domains)) {
84
+ supportedDomains = new Set(result.domains
85
+ .map(d => (typeof d?.domain === 'string' ? d.domain : ''))
86
+ .filter(Boolean));
87
+ schemaProbeSucceeded = true;
88
+ notes.push(`Schema.getDomains → ${supportedDomains.size} domains`);
89
+ }
90
+ else {
91
+ notes.push(`Schema.getDomains returned no domains[] array`);
92
+ }
93
+ }
94
+ catch (e) {
95
+ const err = classifyWipError(e, 'Schema.getDomains');
96
+ notes.push(`Schema.getDomains ${err.code}: ${err.message.slice(0, 80)}`);
97
+ }
98
+ // Step 2: Sentinel probes — currently CSS only.
99
+ await Promise.all(SENTINEL_PROBES.map(async ({ domain, method, params, timeoutMs }) => {
100
+ try {
101
+ await session.send(method, params, timeoutMs);
102
+ sentinels[domain] = 'ok';
103
+ }
104
+ catch (e) {
105
+ const err = classifyWipError(e, method);
106
+ if (err.code === 'TIMEOUT')
107
+ sentinels[domain] = 'timeout';
108
+ else if (err.code === 'DOMAIN_UNAVAILABLE' || err.code === 'METHOD_NOT_FOUND')
109
+ sentinels[domain] = 'not-found';
110
+ else if (err.code === 'INVALID_PARAMS')
111
+ sentinels[domain] = 'invalid-params';
112
+ else
113
+ sentinels[domain] = 'error';
114
+ }
115
+ }));
116
+ // Step 3: Cross-check Schema vs sentinels — capture "claimed but hung" cases.
117
+ for (const { domain } of SENTINEL_PROBES) {
118
+ const sentinel = sentinels[domain];
119
+ if (sentinel === 'timeout' && supportedDomains?.has(domain)) {
120
+ notes.push(`⚠ ${domain} domain reported by Schema but ${domain}.* hung — likely WebKit fork omits implementation. Treating as unavailable.`);
121
+ supportedDomains.delete(domain);
122
+ }
123
+ }
124
+ return {
125
+ probedAt: new Date(startedAt).toISOString(),
126
+ probeDurationMs: Date.now() - startedAt,
127
+ supportedDomains,
128
+ schemaProbeSucceeded,
129
+ sentinels,
130
+ notes,
131
+ };
132
+ }
133
+ /**
134
+ * Convenience: throw a structured WipError if the snapshot tells us the
135
+ * required domain is unavailable. No-op if `supportedDomains` is undefined
136
+ * (Schema probe failed → assume optimistic).
137
+ */
138
+ export function assertDomainAvailable(snap, domain) {
139
+ if (!snap || !snap.supportedDomains)
140
+ return; // optimistic when discovery failed
141
+ if (!snap.supportedDomains.has(domain)) {
142
+ throw new WipError('DOMAIN_UNAVAILABLE', `${domain} domain is not supported on this WebKit build. ` +
143
+ `Schema.getDomains did not list it (probedAt=${snap.probedAt}).`, { domain, fallback: undefined });
144
+ }
145
+ }
146
+ //# sourceMappingURL=capability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability.js","sourceRoot":"","sources":["../../src/capability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { createServer } from './server.js';
@@ -0,0 +1,2 @@
1
+ export { createServer } from './server.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,108 @@
1
+ import { WipSession } from './wip-client/ws-session.js';
2
+ import { type CapabilitySnapshot } from './capability.js';
3
+ export interface ConsoleEntry {
4
+ source: 'Console.messageAdded' | 'Runtime.exceptionThrown';
5
+ level: string;
6
+ text: string;
7
+ url?: string;
8
+ line?: number;
9
+ column?: number;
10
+ timestamp?: number;
11
+ args?: unknown[];
12
+ stackTrace?: unknown;
13
+ raw: unknown;
14
+ }
15
+ export interface NetworkEntry {
16
+ requestId: string;
17
+ url: string;
18
+ method?: string;
19
+ status?: number;
20
+ statusText?: string;
21
+ mimeType?: string;
22
+ type?: string;
23
+ initiatorType?: string;
24
+ startedAt?: number;
25
+ endedAt?: number;
26
+ encodedDataLength?: number;
27
+ errorText?: string;
28
+ state: 'pending' | 'response-received' | 'finished' | 'failed';
29
+ requestHeaders?: Record<string, string>;
30
+ responseHeaders?: Record<string, string>;
31
+ postData?: string;
32
+ }
33
+ /**
34
+ * batch-14 frozen contract for `Network.requestIntercepted` (cross-review v2.0.1):
35
+ * - 30s auto-continue if not consumed
36
+ * - 16 max concurrent pending; oldest auto-continued when overflow
37
+ * - explicit `abort=true` for block; default = continue
38
+ */
39
+ export interface InterceptedRequest {
40
+ requestId: string;
41
+ url: string;
42
+ method?: string;
43
+ headers?: Record<string, string>;
44
+ postData?: string;
45
+ stage?: string;
46
+ arrivedAt: number;
47
+ autoContinueTimer?: ReturnType<typeof setTimeout>;
48
+ }
49
+ export declare const INTERCEPT_AUTO_CONTINUE_MS = 30000;
50
+ export declare const INTERCEPT_MAX_PENDING = 16;
51
+ export interface AttachInfo {
52
+ deviceId: string;
53
+ deviceOSVersion?: string;
54
+ pageId: string;
55
+ pageTitle: string;
56
+ pageUrl: string;
57
+ webSocketDebuggerUrl: string;
58
+ targetId?: string;
59
+ attachedAt: number;
60
+ }
61
+ export declare class PageSession {
62
+ private static cached;
63
+ static get(opts?: {
64
+ proxyDeviceListUrl?: string;
65
+ bufferCap?: number;
66
+ pageId?: string;
67
+ }): Promise<PageSession>;
68
+ static reset(): void;
69
+ readonly session: WipSession;
70
+ readonly consoleBuffer: ConsoleEntry[];
71
+ readonly networkBuffer: NetworkEntry[];
72
+ readonly networkById: Map<string, NetworkEntry>;
73
+ readonly intercepted: Map<string, InterceptedRequest>;
74
+ attachInfo: AttachInfo | undefined;
75
+ enableErrors: Array<{
76
+ method: string;
77
+ error: string;
78
+ }>;
79
+ private alive;
80
+ private readonly cap;
81
+ private capabilityPromise;
82
+ private capabilitySnapshot;
83
+ private constructor();
84
+ isAlive(): boolean;
85
+ close(): void;
86
+ private init;
87
+ /**
88
+ * Returns the capability snapshot synchronously if the background probe has
89
+ * completed, else `undefined`. Tools that want to fail fast should call
90
+ * `await pageSession.capability()` instead.
91
+ */
92
+ capabilitySync(): CapabilitySnapshot | undefined;
93
+ /** Awaits capability probe completion. Resolves immediately if already done. */
94
+ capability(): Promise<CapabilitySnapshot>;
95
+ private push;
96
+ private recordConsoleMessageAdded;
97
+ private recordRuntimeException;
98
+ private upsertNetwork;
99
+ private recordNetworkRequestWillBeSent;
100
+ private recordNetworkResponseReceived;
101
+ private recordNetworkLoadingFinished;
102
+ private recordNetworkLoadingFailed;
103
+ private recordRequestIntercepted;
104
+ /** Drain an intercepted request's bookkeeping. Called when a tool consumes
105
+ * the request via continue/respond — clears auto-continue timer and removes
106
+ * from the pending map. Returns the entry if it existed. */
107
+ consumeIntercepted(requestId: string): InterceptedRequest | undefined;
108
+ }
@@ -0,0 +1,331 @@
1
+ /**
2
+ * Singleton-ish persistent WIP page session shared by stream-based tools
3
+ * (list_console_messages / list_network_requests / take_snapshot).
4
+ *
5
+ * Lifecycle:
6
+ * - Lazy: created on first PageSession.get() call.
7
+ * - Picks the first WKWebView page (filters out JSCore workers).
8
+ * - Enables Console + Network + Runtime + DOM domains (each `enable` is
9
+ * try-best-effort; failures are logged but don't abort).
10
+ * - Subscribes Console.messageAdded / Runtime.exceptionThrown /
11
+ * Network.requestWillBeSent / responseReceived / loadingFailed and
12
+ * fills rolling buffers (default cap 200 each).
13
+ * - On ws close / target destroyed, marks itself stale; next get() rebuilds.
14
+ *
15
+ * Each tool calls `await PageSession.get()` then queries buffers or calls
16
+ * the underlying `session.send(...)` for one-shot RPCs.
17
+ */
18
+ import { fetchProxyDevices, fetchDevicePages } from './wip-client/iwdp-http.js';
19
+ import { WipSession } from './wip-client/ws-session.js';
20
+ import { probeCapabilities } from './capability.js';
21
+ const DEFAULT_PROXY_BASE = 'http://127.0.0.1:9221';
22
+ const DEFAULT_BUFFER_CAP = 200;
23
+ export const INTERCEPT_AUTO_CONTINUE_MS = 30_000;
24
+ export const INTERCEPT_MAX_PENDING = 16;
25
+ export class PageSession {
26
+ static cached;
27
+ static async get(opts) {
28
+ if (PageSession.cached && PageSession.cached.alive) {
29
+ if (opts?.pageId && PageSession.cached.attachInfo?.pageId !== opts.pageId) {
30
+ PageSession.cached.close();
31
+ PageSession.cached = undefined;
32
+ }
33
+ else {
34
+ return PageSession.cached;
35
+ }
36
+ }
37
+ if (PageSession.cached) {
38
+ PageSession.cached.close();
39
+ }
40
+ const ps = new PageSession(opts?.bufferCap ?? DEFAULT_BUFFER_CAP);
41
+ await ps.init(opts?.proxyDeviceListUrl ?? DEFAULT_PROXY_BASE, opts?.pageId);
42
+ PageSession.cached = ps;
43
+ return ps;
44
+ }
45
+ static reset() {
46
+ if (PageSession.cached) {
47
+ PageSession.cached.close();
48
+ PageSession.cached = undefined;
49
+ }
50
+ }
51
+ session = new WipSession();
52
+ consoleBuffer = [];
53
+ networkBuffer = [];
54
+ networkById = new Map();
55
+ intercepted = new Map();
56
+ attachInfo;
57
+ enableErrors = [];
58
+ alive = false;
59
+ cap;
60
+ capabilityPromise;
61
+ capabilitySnapshot;
62
+ constructor(bufferCap) {
63
+ this.cap = bufferCap;
64
+ }
65
+ isAlive() {
66
+ return this.alive;
67
+ }
68
+ close() {
69
+ this.alive = false;
70
+ this.session.close();
71
+ }
72
+ async init(proxyBase, pageId) {
73
+ // 1. Pick the requested pageId, else first non-worker WKWebView page across devices.
74
+ const devices = await fetchProxyDevices(proxyBase);
75
+ if (devices.length === 0) {
76
+ throw new Error('No iOS devices found via ios_webkit_debug_proxy. Connect iPhone, enable Web Inspector, ensure proxy is running.');
77
+ }
78
+ let chosenDev;
79
+ let chosenPage;
80
+ for (const dev of devices) {
81
+ const pages = await fetchDevicePages(dev.url);
82
+ let page;
83
+ if (pageId) {
84
+ page = pages.find(p => p.id === pageId);
85
+ }
86
+ else {
87
+ page = pages.find(p => p.url && !p.title.startsWith('jsi_'));
88
+ }
89
+ if (page) {
90
+ chosenDev = dev;
91
+ chosenPage = page;
92
+ break;
93
+ }
94
+ }
95
+ if (!chosenDev || !chosenPage) {
96
+ throw new Error(pageId
97
+ ? `pageId ${JSON.stringify(pageId)} not found on any device. Run \`list_pages\` to enumerate.`
98
+ : 'No inspectable WKWebView page found. Open a WebView page in the target app first (see `list_pages`).');
99
+ }
100
+ // 2. Connect + wait for page target.
101
+ await this.session.connect(chosenPage.webSocketDebuggerUrl);
102
+ const target = await this.session.waitForPageTarget();
103
+ // 3. Wire event subscribers BEFORE enabling, so the first event isn't lost.
104
+ this.session.on('Console.messageAdded', params => this.recordConsoleMessageAdded(params));
105
+ this.session.on('Runtime.exceptionThrown', params => this.recordRuntimeException(params));
106
+ this.session.on('Network.requestWillBeSent', params => this.recordNetworkRequestWillBeSent(params));
107
+ this.session.on('Network.responseReceived', params => this.recordNetworkResponseReceived(params));
108
+ this.session.on('Network.loadingFinished', params => this.recordNetworkLoadingFinished(params));
109
+ this.session.on('Network.loadingFailed', params => this.recordNetworkLoadingFailed(params));
110
+ this.session.on('Network.requestIntercepted', params => this.recordRequestIntercepted(params));
111
+ // 4. Enable domains best-effort. WIP support varies — collect failures, don't abort.
112
+ for (const m of ['Console.enable', 'Network.enable', 'Runtime.enable', 'DOM.enable']) {
113
+ try {
114
+ await this.session.send(m, undefined, 5_000);
115
+ }
116
+ catch (e) {
117
+ this.enableErrors.push({ method: m, error: e instanceof Error ? e.message : String(e) });
118
+ }
119
+ }
120
+ this.attachInfo = {
121
+ deviceId: chosenDev.deviceId,
122
+ deviceOSVersion: chosenDev.deviceOSVersion,
123
+ pageId: chosenPage.id,
124
+ pageTitle: chosenPage.title,
125
+ pageUrl: chosenPage.url,
126
+ webSocketDebuggerUrl: chosenPage.webSocketDebuggerUrl,
127
+ targetId: target.targetId,
128
+ attachedAt: Date.now(),
129
+ };
130
+ this.alive = true;
131
+ // 5. Async fire-and-forget capability probe. Tools may consult `capability()`
132
+ // to fail-fast with DOMAIN_UNAVAILABLE before issuing doomed RPCs.
133
+ // NOTE: Sentinels that *hang* (e.g. CSS.* on iOS 26.5) are NOT included
134
+ // in probeCapabilities — Apple WIP serializes per-target responses, so a
135
+ // hanging probe blocks every concurrent tool call on the shared ws.
136
+ // Instead, we rely on Schema.getDomains where available + tool-level
137
+ // timeout fallback for unknown WebKit builds.
138
+ this.capabilityPromise = probeCapabilities(this.session)
139
+ .then(snap => {
140
+ this.capabilitySnapshot = snap;
141
+ return snap;
142
+ })
143
+ .catch(e => {
144
+ // Probe itself failed (rare). Synthesize an "unknown" snapshot so
145
+ // capability() resolves rather than hanging future awaiters.
146
+ const fallback = {
147
+ probedAt: new Date().toISOString(),
148
+ probeDurationMs: 0,
149
+ supportedDomains: undefined,
150
+ schemaProbeSucceeded: false,
151
+ sentinels: {},
152
+ notes: [`probe rejected: ${e instanceof Error ? e.message : String(e)}`],
153
+ };
154
+ this.capabilitySnapshot = fallback;
155
+ return fallback;
156
+ });
157
+ }
158
+ /**
159
+ * Returns the capability snapshot synchronously if the background probe has
160
+ * completed, else `undefined`. Tools that want to fail fast should call
161
+ * `await pageSession.capability()` instead.
162
+ */
163
+ capabilitySync() {
164
+ return this.capabilitySnapshot;
165
+ }
166
+ /** Awaits capability probe completion. Resolves immediately if already done. */
167
+ async capability() {
168
+ if (this.capabilitySnapshot)
169
+ return this.capabilitySnapshot;
170
+ if (this.capabilityPromise)
171
+ return this.capabilityPromise;
172
+ throw new Error('PageSession.capability() called before init() — should be unreachable');
173
+ }
174
+ push(buf, entry) {
175
+ buf.push(entry);
176
+ if (buf.length > this.cap) {
177
+ buf.splice(0, buf.length - this.cap);
178
+ }
179
+ }
180
+ recordConsoleMessageAdded(p) {
181
+ const params = p?.message;
182
+ if (!params || typeof params !== 'object')
183
+ return;
184
+ const msg = params;
185
+ this.push(this.consoleBuffer, {
186
+ source: 'Console.messageAdded',
187
+ level: String(msg.level ?? 'log'),
188
+ text: String(msg.text ?? ''),
189
+ url: typeof msg.url === 'string' ? msg.url : undefined,
190
+ line: typeof msg.line === 'number' ? msg.line : undefined,
191
+ column: typeof msg.column === 'number' ? msg.column : undefined,
192
+ timestamp: typeof msg.timestamp === 'number' ? msg.timestamp : undefined,
193
+ args: Array.isArray(msg.parameters) ? msg.parameters : undefined,
194
+ stackTrace: msg.stackTrace,
195
+ raw: msg,
196
+ });
197
+ }
198
+ recordRuntimeException(p) {
199
+ const params = p;
200
+ if (!params)
201
+ return;
202
+ const details = params.exceptionDetails;
203
+ this.push(this.consoleBuffer, {
204
+ source: 'Runtime.exceptionThrown',
205
+ level: 'error',
206
+ text: String(details?.text ?? details?.exception ?? 'Uncaught exception'),
207
+ url: typeof details?.url === 'string' ? details.url : undefined,
208
+ line: typeof details?.lineNumber === 'number' ? details.lineNumber : undefined,
209
+ column: typeof details?.columnNumber === 'number' ? details.columnNumber : undefined,
210
+ timestamp: typeof params.timestamp === 'number' ? params.timestamp : undefined,
211
+ stackTrace: details?.stackTrace,
212
+ raw: params,
213
+ });
214
+ }
215
+ upsertNetwork(requestId, mutator) {
216
+ let entry = this.networkById.get(requestId);
217
+ if (!entry) {
218
+ entry = { requestId, url: '', state: 'pending' };
219
+ this.networkById.set(requestId, entry);
220
+ this.push(this.networkBuffer, entry);
221
+ }
222
+ mutator(entry);
223
+ }
224
+ recordNetworkRequestWillBeSent(p) {
225
+ const params = p;
226
+ if (!params || typeof params.requestId !== 'string')
227
+ return;
228
+ const req = params.request;
229
+ this.upsertNetwork(params.requestId, e => {
230
+ e.url = typeof req?.url === 'string' ? req.url : e.url;
231
+ e.method = typeof req?.method === 'string' ? req.method : e.method;
232
+ e.type = typeof params.type === 'string' ? params.type : e.type;
233
+ const initiator = params.initiator;
234
+ e.initiatorType = typeof initiator?.type === 'string' ? initiator.type : e.initiatorType;
235
+ e.startedAt = typeof params.timestamp === 'number' ? params.timestamp : e.startedAt;
236
+ const headers = req?.headers;
237
+ if (headers && typeof headers === 'object') {
238
+ e.requestHeaders = headers;
239
+ }
240
+ const postData = req?.postData;
241
+ if (typeof postData === 'string')
242
+ e.postData = postData;
243
+ });
244
+ }
245
+ recordNetworkResponseReceived(p) {
246
+ const params = p;
247
+ if (!params || typeof params.requestId !== 'string')
248
+ return;
249
+ const res = params.response;
250
+ this.upsertNetwork(params.requestId, e => {
251
+ e.state = 'response-received';
252
+ e.status = typeof res?.status === 'number' ? res.status : e.status;
253
+ e.statusText = typeof res?.statusText === 'string' ? res.statusText : e.statusText;
254
+ e.mimeType = typeof res?.mimeType === 'string' ? res.mimeType : e.mimeType;
255
+ e.type = typeof params.type === 'string' ? params.type : e.type;
256
+ const headers = res?.headers;
257
+ if (headers && typeof headers === 'object') {
258
+ e.responseHeaders = headers;
259
+ }
260
+ });
261
+ }
262
+ recordNetworkLoadingFinished(p) {
263
+ const params = p;
264
+ if (!params || typeof params.requestId !== 'string')
265
+ return;
266
+ this.upsertNetwork(params.requestId, e => {
267
+ e.state = 'finished';
268
+ e.endedAt = typeof params.timestamp === 'number' ? params.timestamp : e.endedAt;
269
+ e.encodedDataLength = typeof params.encodedDataLength === 'number' ? params.encodedDataLength : e.encodedDataLength;
270
+ });
271
+ }
272
+ recordNetworkLoadingFailed(p) {
273
+ const params = p;
274
+ if (!params || typeof params.requestId !== 'string')
275
+ return;
276
+ this.upsertNetwork(params.requestId, e => {
277
+ e.state = 'failed';
278
+ e.errorText = typeof params.errorText === 'string' ? params.errorText : e.errorText;
279
+ e.endedAt = typeof params.timestamp === 'number' ? params.timestamp : e.endedAt;
280
+ });
281
+ }
282
+ recordRequestIntercepted(p) {
283
+ const params = p;
284
+ if (!params || typeof params.requestId !== 'string')
285
+ return;
286
+ const requestId = params.requestId;
287
+ const req = params.request;
288
+ const entry = {
289
+ requestId,
290
+ url: typeof req?.url === 'string' ? req.url : '',
291
+ method: typeof req?.method === 'string' ? req.method : undefined,
292
+ headers: req?.headers && typeof req.headers === 'object' ? req.headers : undefined,
293
+ postData: typeof req?.postData === 'string' ? req.postData : undefined,
294
+ stage: typeof params.stage === 'string' ? params.stage : undefined,
295
+ arrivedAt: Date.now(),
296
+ };
297
+ // Enforce 16-pending cap: oldest is auto-continued and dropped.
298
+ if (this.intercepted.size >= INTERCEPT_MAX_PENDING) {
299
+ const oldest = this.intercepted.entries().next().value;
300
+ if (oldest) {
301
+ const [oldestId, oldestEntry] = oldest;
302
+ if (oldestEntry.autoContinueTimer)
303
+ clearTimeout(oldestEntry.autoContinueTimer);
304
+ this.intercepted.delete(oldestId);
305
+ // Best-effort auto-continue.
306
+ this.session.send('Network.interceptContinue', { requestId: oldestId }, 5_000).catch(() => { });
307
+ }
308
+ }
309
+ // 30s auto-continue if not consumed by tool.
310
+ entry.autoContinueTimer = setTimeout(() => {
311
+ if (this.intercepted.has(requestId)) {
312
+ this.intercepted.delete(requestId);
313
+ this.session.send('Network.interceptContinue', { requestId }, 5_000).catch(() => { });
314
+ }
315
+ }, INTERCEPT_AUTO_CONTINUE_MS);
316
+ this.intercepted.set(requestId, entry);
317
+ }
318
+ /** Drain an intercepted request's bookkeeping. Called when a tool consumes
319
+ * the request via continue/respond — clears auto-continue timer and removes
320
+ * from the pending map. Returns the entry if it existed. */
321
+ consumeIntercepted(requestId) {
322
+ const entry = this.intercepted.get(requestId);
323
+ if (!entry)
324
+ return undefined;
325
+ if (entry.autoContinueTimer)
326
+ clearTimeout(entry.autoContinueTimer);
327
+ this.intercepted.delete(requestId);
328
+ return entry;
329
+ }
330
+ }
331
+ //# sourceMappingURL=page-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-session.js","sourceRoot":"","sources":["../../src/page-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Parse `WDM_DISABLE_TOOLS` env var (comma-separated tool name list) — runtime
4
+ * kill switch for individual tools, per spec batch-13 DoD §"回滚开关".
5
+ *
6
+ * WDM_DISABLE_TOOLS=set_init_script,record_timeline node …
7
+ *
8
+ * Exported for tests; underscore prefix signals "internal but reachable".
9
+ */
10
+ export declare function _parseDisabledTools(value?: string | undefined): Set<string>;
11
+ export declare function createServer(): McpServer;