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,144 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { listPagesTool } from './tools/list_pages.js';
3
+ import { evaluateScriptTool } from './tools/evaluate_script.js';
4
+ import { listConsoleMessagesTool } from './tools/list_console_messages.js';
5
+ import { listNetworkRequestsTool } from './tools/list_network_requests.js';
6
+ import { takeSnapshotTool } from './tools/take_snapshot.js';
7
+ import { navigatePageTool } from './tools/navigate_page.js';
8
+ import { takeScreenshotTool } from './tools/take_screenshot.js';
9
+ import { takeMemorySnapshotTool } from './tools/take_memory_snapshot.js';
10
+ import { clickTool } from './tools/click.js';
11
+ import { waitForTool } from './tools/wait_for.js';
12
+ import { fillTool } from './tools/fill.js';
13
+ import { typeTextTool } from './tools/type_text.js';
14
+ import { pressKeyTool } from './tools/press_key.js';
15
+ import { hoverTool } from './tools/hover.js';
16
+ import { dragTool } from './tools/drag.js';
17
+ import { getConsoleMessageTool } from './tools/get_console_message.js';
18
+ import { getNetworkRequestTool } from './tools/get_network_request.js';
19
+ import { fillFormTool } from './tools/fill_form.js';
20
+ import { handleDialogTool } from './tools/handle_dialog.js';
21
+ import { selectPageTool } from './tools/select_page.js';
22
+ import { wipSendTool } from './tools/wip_send.js';
23
+ import { reloadPageTool } from './tools/reload_page.js';
24
+ import { setExtraHttpHeadersTool } from './tools/set_extra_http_headers.js';
25
+ import { queryDomNodeTool } from './tools/query_dom_node.js';
26
+ import { getResourceTreeTool } from './tools/get_resource_tree.js';
27
+ import { getPerformanceMetricsTool } from './tools/get_performance_metrics.js';
28
+ import { takeNodeScreenshotTool } from './tools/take_node_screenshot.js';
29
+ import { getCookiesTool } from './tools/get_cookies.js';
30
+ import { deleteCookieTool } from './tools/delete_cookie.js';
31
+ import { gcHeapTool } from './tools/gc_heap.js';
32
+ import { clearConsoleTool } from './tools/clear_console.js';
33
+ import { setInitScriptTool } from './tools/set_init_script.js';
34
+ import { listIndexeddbTool } from './tools/list_indexeddb.js';
35
+ import { setOuterHtmlTool } from './tools/set_outer_html.js';
36
+ import { recordTimelineTool } from './tools/record_timeline.js';
37
+ import { pauseDebuggerTool, resumeDebuggerTool, setBreakpointByUrlTool } from './tools/debugger.js';
38
+ import { setPauseOnExceptionsTool, setEventBreakpointTool, setUrlBreakpointTool, setBlackboxUrlTool } from './tools/breakpoints.js';
39
+ import { getEventListenersTool } from './tools/get_event_listeners.js';
40
+ import { recordCpuProfileTool } from './tools/record_cpu_profile.js';
41
+ import { highlightNodeTool, hideHighlightTool } from './tools/highlight_node.js';
42
+ import { setResourceCachingDisabledTool, setRequestInterceptionTool } from './tools/network_runtime.js';
43
+ import { getCapabilitySnapshotTool } from './tools/get_capability_snapshot.js';
44
+ import { recordMemoryTrackingTool } from './tools/record_memory_tracking.js';
45
+ import { listInterceptedRequestsTool, interceptContinueTool, interceptRespondTool } from './tools/intercept.js';
46
+ import { analyzePerformanceTool } from './tools/analyze_performance.js';
47
+ import { debugElementTool } from './tools/debug_element.js';
48
+ import { summarizeConsoleErrorsTool } from './tools/summarize_console_errors.js';
49
+ import { setUserAgentTool } from './tools/set_user_agent.js';
50
+ const PKG = { name: 'ios-webkit-mcp', version: '0.18.3' };
51
+ /**
52
+ * Parse `WDM_DISABLE_TOOLS` env var (comma-separated tool name list) — runtime
53
+ * kill switch for individual tools, per spec batch-13 DoD §"回滚开关".
54
+ *
55
+ * WDM_DISABLE_TOOLS=set_init_script,record_timeline node …
56
+ *
57
+ * Exported for tests; underscore prefix signals "internal but reachable".
58
+ */
59
+ export function _parseDisabledTools(value = process.env['WDM_DISABLE_TOOLS']) {
60
+ if (!value)
61
+ return new Set();
62
+ return new Set(value
63
+ .split(',')
64
+ .map(s => s.trim())
65
+ .filter(Boolean));
66
+ }
67
+ export function createServer() {
68
+ const server = new McpServer(PKG);
69
+ const disabled = _parseDisabledTools();
70
+ const ALL_TOOLS = [
71
+ listPagesTool,
72
+ evaluateScriptTool,
73
+ listConsoleMessagesTool,
74
+ listNetworkRequestsTool,
75
+ takeSnapshotTool,
76
+ navigatePageTool,
77
+ takeScreenshotTool,
78
+ takeMemorySnapshotTool,
79
+ clickTool,
80
+ waitForTool,
81
+ fillTool,
82
+ typeTextTool,
83
+ pressKeyTool,
84
+ hoverTool,
85
+ dragTool,
86
+ getConsoleMessageTool,
87
+ getNetworkRequestTool,
88
+ fillFormTool,
89
+ handleDialogTool,
90
+ selectPageTool,
91
+ wipSendTool,
92
+ reloadPageTool,
93
+ setExtraHttpHeadersTool,
94
+ queryDomNodeTool,
95
+ getResourceTreeTool,
96
+ getPerformanceMetricsTool,
97
+ takeNodeScreenshotTool,
98
+ getCookiesTool,
99
+ deleteCookieTool,
100
+ gcHeapTool,
101
+ clearConsoleTool,
102
+ setInitScriptTool,
103
+ listIndexeddbTool,
104
+ setOuterHtmlTool,
105
+ recordTimelineTool,
106
+ pauseDebuggerTool,
107
+ resumeDebuggerTool,
108
+ setBreakpointByUrlTool,
109
+ // batch-13 Must (cross-review v2.0.1):
110
+ setPauseOnExceptionsTool,
111
+ setEventBreakpointTool,
112
+ setUrlBreakpointTool,
113
+ getEventListenersTool,
114
+ recordCpuProfileTool,
115
+ // batch-13 Should (cross-review v2.0.1):
116
+ highlightNodeTool,
117
+ hideHighlightTool,
118
+ setResourceCachingDisabledTool,
119
+ setRequestInterceptionTool,
120
+ // batch-14 (cross-review v2.0.1, soft-promoted):
121
+ getCapabilitySnapshotTool,
122
+ recordMemoryTrackingTool,
123
+ setBlackboxUrlTool,
124
+ // batch-14 intercept full state machine:
125
+ listInterceptedRequestsTool,
126
+ interceptContinueTool,
127
+ interceptRespondTool,
128
+ // batch-14 composite (cross-review v2.0.1 演进锚点):
129
+ analyzePerformanceTool,
130
+ debugElementTool,
131
+ summarizeConsoleErrorsTool,
132
+ // batch-14 page emulation:
133
+ setUserAgentTool,
134
+ ];
135
+ for (const tool of ALL_TOOLS) {
136
+ if (disabled.has(tool.name)) {
137
+ process.stderr.write(`[wdm] tool '${tool.name}' disabled via WDM_DISABLE_TOOLS\n`);
138
+ continue;
139
+ }
140
+ server.tool(tool.name, tool.description, tool.inputSchema, tool.handler);
141
+ }
142
+ return server;
143
+ }
144
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * `analyze_performance` (batch-14 composite tool, cross-review v2.0.1)
3
+ *
4
+ * Runs the "性能三件套" concurrently for a single duration window and emits
5
+ * a cross-correlated report:
6
+ *
7
+ * - `record_timeline` → wall-clock event types + hottest entries
8
+ * - `record_cpu_profile` → hot JS functions + heap delta
9
+ * - `record_memory_tracking` → category memory deltas
10
+ *
11
+ * Apple WIP per-target message processing is serialized, but the three
12
+ * tracking domains operate independently — `Timeline.start` / `CPUProfiler.startTracking`
13
+ * / `Memory.startTracking` can coexist on one ws session and their event
14
+ * streams are tagged by domain so the buffers don't collide.
15
+ *
16
+ * The composite output is one markdown document with three sections + a
17
+ * cross-correlation hint footer.
18
+ */
19
+ import { z } from 'zod';
20
+ export declare const analyzePerformanceTool: {
21
+ name: string;
22
+ description: string;
23
+ inputSchema: {
24
+ durationMs: z.ZodOptional<z.ZodNumber>;
25
+ timelineTopN: z.ZodOptional<z.ZodNumber>;
26
+ cpuTopN: z.ZodOptional<z.ZodNumber>;
27
+ interactionHint: z.ZodOptional<z.ZodString>;
28
+ };
29
+ handler: ({ durationMs, timelineTopN, cpuTopN, interactionHint, }: {
30
+ durationMs?: number;
31
+ timelineTopN?: number;
32
+ cpuTopN?: number;
33
+ interactionHint?: string;
34
+ }) => Promise<{
35
+ content: {
36
+ type: "text";
37
+ text: string;
38
+ }[];
39
+ }>;
40
+ };
@@ -0,0 +1,112 @@
1
+ /**
2
+ * `analyze_performance` (batch-14 composite tool, cross-review v2.0.1)
3
+ *
4
+ * Runs the "性能三件套" concurrently for a single duration window and emits
5
+ * a cross-correlated report:
6
+ *
7
+ * - `record_timeline` → wall-clock event types + hottest entries
8
+ * - `record_cpu_profile` → hot JS functions + heap delta
9
+ * - `record_memory_tracking` → category memory deltas
10
+ *
11
+ * Apple WIP per-target message processing is serialized, but the three
12
+ * tracking domains operate independently — `Timeline.start` / `CPUProfiler.startTracking`
13
+ * / `Memory.startTracking` can coexist on one ws session and their event
14
+ * streams are tagged by domain so the buffers don't collide.
15
+ *
16
+ * The composite output is one markdown document with three sections + a
17
+ * cross-correlation hint footer.
18
+ */
19
+ import { z } from 'zod';
20
+ import { recordTimelineTool } from './record_timeline.js';
21
+ import { recordCpuProfileTool } from './record_cpu_profile.js';
22
+ import { recordMemoryTrackingTool } from './record_memory_tracking.js';
23
+ export const analyzePerformanceTool = {
24
+ name: 'analyze_performance',
25
+ description: [
26
+ 'Run the performance 三件套 (Timeline + CPU profile + Memory tracking) concurrently for a single duration window and return a cross-correlated report.',
27
+ 'Composes `record_timeline` + `record_cpu_profile` + `record_memory_tracking`. The 3 domains run independently on the same ws session — their event streams are tagged by domain so buffers do not collide.',
28
+ 'Use when the AI needs a one-shot "what happened during this window" answer rather than 3 separate tool calls. For deeper one-axis dives, call the underlying tools directly.',
29
+ ].join(' '),
30
+ inputSchema: {
31
+ durationMs: z
32
+ .number()
33
+ .int()
34
+ .min(500)
35
+ .max(60_000)
36
+ .optional()
37
+ .describe('Recording window across all three sub-tools (default 3000).'),
38
+ timelineTopN: z.number().int().min(1).max(100).optional().describe('Top-N timeline events (default 10).'),
39
+ cpuTopN: z.number().int().min(1).max(100).optional().describe('Top-N CPU frames (default 10).'),
40
+ interactionHint: z
41
+ .string()
42
+ .optional()
43
+ .describe('Free-text hint shown in the report header — useful for AI memory ("during this window the user scrolled feed for 3s").'),
44
+ },
45
+ handler: async ({ durationMs = 3_000, timelineTopN = 10, cpuTopN = 10, interactionHint, }) => {
46
+ const t0 = Date.now();
47
+ const [tl, cpu, mem] = await Promise.all([
48
+ recordTimelineTool.handler({ durationMs, topN: timelineTopN }),
49
+ recordCpuProfileTool.handler({ durationMs, topN: cpuTopN }),
50
+ recordMemoryTrackingTool.handler({ durationMs }),
51
+ ]);
52
+ const elapsed = Date.now() - t0;
53
+ const tlText = tl.content[0]?.text ?? '(no timeline output)';
54
+ const cpuText = cpu.content[0]?.text ?? '(no cpu output)';
55
+ const memText = mem.content[0]?.text ?? '(no memory output)';
56
+ const lines = [
57
+ `# analyze_performance ✓ ${durationMs}ms (wall ${elapsed}ms)`,
58
+ '',
59
+ ];
60
+ if (interactionHint)
61
+ lines.push(`User interaction during window: ${interactionHint}`, '');
62
+ lines.push('## Timeline');
63
+ lines.push(stripTitle(tlText));
64
+ lines.push('');
65
+ lines.push('## CPU Profile');
66
+ lines.push(stripTitle(cpuText));
67
+ lines.push('');
68
+ lines.push('## Memory Tracking');
69
+ lines.push(stripTitle(memText));
70
+ lines.push('');
71
+ lines.push('---');
72
+ lines.push('## Cross-correlation hints');
73
+ lines.push(crossCorrelate(tl, cpu, mem));
74
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
75
+ },
76
+ };
77
+ function stripTitle(text) {
78
+ // Remove the leading `# tool_name ✓ ...` line so the composite has only one H1.
79
+ return text.replace(/^# [^\n]*\n+/, '');
80
+ }
81
+ function crossCorrelate(tl, cpu, mem) {
82
+ const hints = [];
83
+ // Try to extract a few signals.
84
+ const tlMatch = tl.content[0]?.text.match(/Total events: (\d+)/);
85
+ const cpuMatch = cpu.content[0]?.text.match(/Samples captured: (\d+)/);
86
+ const memMatch = mem.content[0]?.text.match(/Samples: (\d+)/);
87
+ const heapDelta = cpu.content[0]?.text.match(/JS heap delta: (-?[\d.]+) MB/);
88
+ const memJs = mem.content[0]?.text.match(/^\| javascript \| ([\d.]+) \| ([\d.]+) \| (-?[\d.]+) \| ([-\d.]+%) \|/m);
89
+ if (tlMatch)
90
+ hints.push(`- ${tlMatch[1]} timeline events captured`);
91
+ if (cpuMatch)
92
+ hints.push(`- ${cpuMatch[1]} CPU samples captured`);
93
+ if (memMatch)
94
+ hints.push(`- ${memMatch[1]} memory samples captured`);
95
+ if (heapDelta)
96
+ hints.push(`- JS heap delta (Runtime.evaluate snapshot): ${heapDelta[1]} MB`);
97
+ if (memJs)
98
+ hints.push(`- Memory.javascript bucket: ${memJs[1]} MB → ${memJs[2]} MB (Δ ${memJs[3]} MB / ${memJs[4]})`);
99
+ if (heapDelta && memJs) {
100
+ const a = Number(heapDelta[1]);
101
+ const b = Number(memJs[3]);
102
+ if (Number.isFinite(a) && Number.isFinite(b)) {
103
+ const skew = Math.abs(a - b);
104
+ hints.push(`- CPU profile heap delta vs Memory.javascript bucket: |Δ| = ${skew.toFixed(2)} MB${skew > 5 ? ' (notable divergence — investigate timing)' : ' (consistent)'}`);
105
+ }
106
+ }
107
+ if (hints.length === 0) {
108
+ hints.push('No quantitative signals captured — the page may have been idle. Re-run while interacting.');
109
+ }
110
+ return hints.join('\n');
111
+ }
112
+ //# sourceMappingURL=analyze_performance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze_performance.js","sourceRoot":"","sources":["../../../src/tools/analyze_performance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAIvE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE;QACX,oJAAoJ;QACpJ,4MAA4M;QAC5M,8KAA8K;KAC/K,CAAC,IAAI,CAAC,GAAG,CAAC;IAEX,WAAW,EAAE;QACX,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,GAAG,CAAC;aACR,GAAG,CAAC,MAAM,CAAC;aACX,QAAQ,EAAE;aACV,QAAQ,CAAC,6DAA6D,CAAC;QAC1E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QACzG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC/F,eAAe,EAAE,CAAC;aACf,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,wHAAwH,CAAC;KACtI;IAED,OAAO,EAAE,KAAK,EAAE,EACd,UAAU,GAAG,KAAK,EAClB,YAAY,GAAG,EAAE,EACjB,OAAO,GAAG,EAAE,EACZ,eAAe,GAC4E,EAAE,EAAE;QAC/F,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvC,kBAAkB,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAW,CAAwB;YAC9F,oBAAoB,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAW,CAAwB;YAC3F,wBAAwB,CAAC,OAAO,CAAC,EAAE,UAAU,EAAW,CAAwB;SACjF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QAEhC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,sBAAsB,CAAC;QAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,iBAAiB,CAAC;QAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,oBAAoB,CAAC;QAE7D,MAAM,KAAK,GAAa;YACtB,2BAA2B,UAAU,YAAY,OAAO,KAAK;YAC7D,EAAE;SACH,CAAC;QACF,IAAI,eAAe;YAAE,KAAK,CAAC,IAAI,CAAC,mCAAmC,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1F,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1E,CAAC;CACF,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,gFAAgF;IAChF,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,EAAc,EAAE,GAAe,EAAE,GAAe;IACtE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,gCAAgC;IAChC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAEnH,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;IACpE,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;IAClE,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;IACrE,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,gDAAgD,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7F,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,+BAA+B,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACtH,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,+DAA+D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC9K,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAC1G,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Advanced breakpoint controls for batch-13 (cross-review v2.0.1 Must).
3
+ *
4
+ * - `set_pause_on_exceptions` — `Debugger.setPauseOnExceptions`
5
+ * - `set_event_breakpoint` — `DOMDebugger.setEventBreakpoint`
6
+ * - `set_url_breakpoint` — `DOMDebugger.setURLBreakpoint`
7
+ *
8
+ * `Debugger.setBreakpointByUrl` (JS source-URL breakpoint, ≠ network URL
9
+ * breakpoint here) lives in `debugger.ts` since batch-12.
10
+ *
11
+ * Capability matrix v2 (2026-05-17 fresh-ws probe) confirmed all three ✅
12
+ * on iOS 26.5.0 WKWebView. Receipts: docs/spec.md §"WIP capability matrix v2".
13
+ */
14
+ import { z } from 'zod';
15
+ export declare const setPauseOnExceptionsTool: {
16
+ name: string;
17
+ description: string;
18
+ inputSchema: {
19
+ state: z.ZodEnum<["none", "uncaught", "all"]>;
20
+ };
21
+ handler: ({ state }: {
22
+ state: "none" | "uncaught" | "all";
23
+ }) => Promise<{
24
+ content: {
25
+ type: "text";
26
+ text: string;
27
+ }[];
28
+ }>;
29
+ };
30
+ export declare const setEventBreakpointTool: {
31
+ name: string;
32
+ description: string;
33
+ inputSchema: {
34
+ eventName: z.ZodString;
35
+ breakpointType: z.ZodOptional<z.ZodEnum<["listener", "timer", "animation-frame", "interval"]>>;
36
+ };
37
+ handler: ({ eventName, breakpointType }: {
38
+ eventName: string;
39
+ breakpointType?: "listener" | "timer" | "animation-frame" | "interval";
40
+ }) => Promise<{
41
+ content: {
42
+ type: "text";
43
+ text: string;
44
+ }[];
45
+ }>;
46
+ };
47
+ export declare const setUrlBreakpointTool: {
48
+ name: string;
49
+ description: string;
50
+ inputSchema: {
51
+ url: z.ZodString;
52
+ isRegex: z.ZodOptional<z.ZodBoolean>;
53
+ };
54
+ handler: ({ url, isRegex }: {
55
+ url: string;
56
+ isRegex?: boolean;
57
+ }) => Promise<{
58
+ content: {
59
+ type: "text";
60
+ text: string;
61
+ }[];
62
+ }>;
63
+ };
64
+ export declare const setBlackboxUrlTool: {
65
+ name: string;
66
+ description: string;
67
+ inputSchema: {
68
+ url: z.ZodString;
69
+ shouldBlackbox: z.ZodOptional<z.ZodBoolean>;
70
+ };
71
+ handler: ({ url, shouldBlackbox }: {
72
+ url: string;
73
+ shouldBlackbox?: boolean;
74
+ }) => Promise<{
75
+ content: {
76
+ type: "text";
77
+ text: string;
78
+ }[];
79
+ }>;
80
+ };
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Advanced breakpoint controls for batch-13 (cross-review v2.0.1 Must).
3
+ *
4
+ * - `set_pause_on_exceptions` — `Debugger.setPauseOnExceptions`
5
+ * - `set_event_breakpoint` — `DOMDebugger.setEventBreakpoint`
6
+ * - `set_url_breakpoint` — `DOMDebugger.setURLBreakpoint`
7
+ *
8
+ * `Debugger.setBreakpointByUrl` (JS source-URL breakpoint, ≠ network URL
9
+ * breakpoint here) lives in `debugger.ts` since batch-12.
10
+ *
11
+ * Capability matrix v2 (2026-05-17 fresh-ws probe) confirmed all three ✅
12
+ * on iOS 26.5.0 WKWebView. Receipts: docs/spec.md §"WIP capability matrix v2".
13
+ */
14
+ import { z } from 'zod';
15
+ import { PageSession } from '../page-session.js';
16
+ const ensureDebuggerEnabled = async (ps) => {
17
+ try {
18
+ await ps.session.send('Debugger.enable', undefined, 5_000);
19
+ }
20
+ catch { /* idempotent */ }
21
+ };
22
+ export const setPauseOnExceptionsTool = {
23
+ name: 'set_pause_on_exceptions',
24
+ description: [
25
+ 'Set pause-on-exceptions mode via WIP `Debugger.setPauseOnExceptions` (✅ probe 2026-05-17).',
26
+ 'Equivalent to Safari Web Inspector "Pause on Exceptions" toggle. Persists across resume_debugger calls until cleared.',
27
+ 'States: `none` (default; never pause), `uncaught` (pause only on uncaught), `all` (pause on every throw — noisy but useful for tracing).',
28
+ ].join(' '),
29
+ inputSchema: {
30
+ state: z
31
+ .enum(['none', 'uncaught', 'all'])
32
+ .describe('`none` clears the pause-on-exceptions mode; `uncaught` pauses only on uncaught throws; `all` pauses on every throw.'),
33
+ },
34
+ handler: async ({ state }) => {
35
+ let ps;
36
+ try {
37
+ ps = await PageSession.get();
38
+ }
39
+ catch (e) {
40
+ return errorResult(`Unable to attach: ${describe(e)}`);
41
+ }
42
+ await ensureDebuggerEnabled(ps);
43
+ try {
44
+ await ps.session.send('Debugger.setPauseOnExceptions', { state }, 5_000);
45
+ }
46
+ catch (e) {
47
+ return errorResult(`Debugger.setPauseOnExceptions failed: ${describe(e)}`);
48
+ }
49
+ return textResult(`# set_pause_on_exceptions ✓ \`${state}\`\n\n${describeMode(state)}`);
50
+ },
51
+ };
52
+ function describeMode(state) {
53
+ if (state === 'none')
54
+ return 'Cleared. Page no longer auto-pauses on exceptions.';
55
+ if (state === 'uncaught')
56
+ return 'Page will pause when an uncaught exception is thrown. Use `resume_debugger` to continue.';
57
+ return 'Page will pause on EVERY thrown exception (caught or not). Noisy but powerful for tracing throw sites. Use `resume_debugger` to continue.';
58
+ }
59
+ export const setEventBreakpointTool = {
60
+ name: 'set_event_breakpoint',
61
+ description: [
62
+ 'Break when a specified DOM/JS event fires, via WIP `DOMDebugger.setEventBreakpoint` (✅ probe 2026-05-17).',
63
+ 'breakpointType=`listener` covers DOM events (click, scroll, keydown…). breakpointType=`timer` covers setTimeout/setInterval/requestAnimationFrame. breakpointType=`animation-frame` for rAF specifically. breakpointType=`interval` for setInterval.',
64
+ 'Use this to catch the moment an event fires without knowing the handler\'s file:line. Pair with `pause_debugger` mental model: when the event triggers, the page stops at the listener entry.',
65
+ ].join(' '),
66
+ inputSchema: {
67
+ eventName: z.string().min(1).describe('Event name without prefix, e.g. `click`, `keydown`, `setTimeout`, `requestAnimationFrame`.'),
68
+ breakpointType: z
69
+ .enum(['listener', 'timer', 'animation-frame', 'interval'])
70
+ .optional()
71
+ .describe('Breakpoint category. Default `listener` (DOM events). Use `timer` for setTimeout, `animation-frame` for rAF, `interval` for setInterval.'),
72
+ },
73
+ handler: async ({ eventName, breakpointType = 'listener' }) => {
74
+ let ps;
75
+ try {
76
+ ps = await PageSession.get();
77
+ }
78
+ catch (e) {
79
+ return errorResult(`Unable to attach: ${describe(e)}`);
80
+ }
81
+ await ensureDebuggerEnabled(ps);
82
+ try {
83
+ await ps.session.send('DOMDebugger.setEventBreakpoint', { breakpointType, eventName }, 5_000);
84
+ }
85
+ catch (e) {
86
+ return errorResult(`DOMDebugger.setEventBreakpoint failed: ${describe(e)}`);
87
+ }
88
+ return textResult(`# set_event_breakpoint ✓\n\n` +
89
+ `Event: \`${eventName}\` (type=${breakpointType})\n\n` +
90
+ `Page will pause when this event fires. Trigger the action manually (or via \`click\` / \`type_text\` etc.) — execution will halt at the listener entry. Call \`resume_debugger\` to continue.\n\n` +
91
+ `⚠ Removal not yet exposed (batch-14). Set the same event again to re-enable; restart MCP server to clear all event breakpoints.`);
92
+ },
93
+ };
94
+ export const setUrlBreakpointTool = {
95
+ name: 'set_url_breakpoint',
96
+ description: [
97
+ 'Break when a network request URL matches a substring or regex, via WIP `DOMDebugger.setURLBreakpoint` (✅ probe 2026-05-17).',
98
+ 'Distinct from `set_breakpoint_by_url` (which is `Debugger.setBreakpointByUrl` — JS source-URL line breakpoint). This one fires when XHR / fetch / script-src etc. requests match.',
99
+ 'Use for "where in the code does this fetch get triggered" investigations.',
100
+ ].join(' '),
101
+ inputSchema: {
102
+ url: z.string().min(1).describe('URL substring (when isRegex=false) or regex pattern (when isRegex=true). Empty matches all requests.'),
103
+ isRegex: z
104
+ .boolean()
105
+ .optional()
106
+ .describe('Treat `url` as JS regex (default false → substring match).'),
107
+ },
108
+ handler: async ({ url, isRegex = false }) => {
109
+ let ps;
110
+ try {
111
+ ps = await PageSession.get();
112
+ }
113
+ catch (e) {
114
+ return errorResult(`Unable to attach: ${describe(e)}`);
115
+ }
116
+ await ensureDebuggerEnabled(ps);
117
+ try {
118
+ await ps.session.send('DOMDebugger.setURLBreakpoint', { url, isRegex }, 5_000);
119
+ }
120
+ catch (e) {
121
+ return errorResult(`DOMDebugger.setURLBreakpoint failed: ${describe(e)}`);
122
+ }
123
+ return textResult(`# set_url_breakpoint ✓\n\n` +
124
+ `URL: \`${url}\`${isRegex ? ' (regex)' : ' (substring)'}\n\n` +
125
+ `Page will pause when a request URL matches. Trigger network activity (navigation / XHR / fetch) — execution halts at the call site. Call \`resume_debugger\` to continue.\n\n` +
126
+ `⚠ Removal not yet exposed (batch-14). Restart MCP server to clear all URL breakpoints.`);
127
+ },
128
+ };
129
+ export const setBlackboxUrlTool = {
130
+ name: 'set_blackbox_url',
131
+ description: [
132
+ 'Mark a script URL as blackboxed (or un-blackbox it) via WIP `Debugger.setShouldBlackboxURL` (✅ probe 2026-05-17).',
133
+ 'Apple WIP uses per-URL booleans (NOT CDP-style `setBlackboxPatterns` — that one ❌ NOT_FOUND on iOS).',
134
+ 'When blackboxed, the debugger steps OVER all frames in matching URLs instead of stepping in. Use to skip framework / library code (jquery, react-dom, polyfills etc.) when stepping through your own code.',
135
+ ].join(' '),
136
+ inputSchema: {
137
+ url: z.string().min(1).describe('Script URL pattern (Apple WIP treats this as a substring/glob — exact semantics build-specific).'),
138
+ shouldBlackbox: z
139
+ .boolean()
140
+ .optional()
141
+ .describe('`true` (default) blackboxes; `false` removes blackbox.'),
142
+ },
143
+ handler: async ({ url, shouldBlackbox = true }) => {
144
+ let ps;
145
+ try {
146
+ ps = await PageSession.get();
147
+ }
148
+ catch (e) {
149
+ return errorResult(`Unable to attach: ${describe(e)}`);
150
+ }
151
+ await ensureDebuggerEnabled(ps);
152
+ try {
153
+ await ps.session.send('Debugger.setShouldBlackboxURL', { url, shouldBlackbox }, 5_000);
154
+ }
155
+ catch (e) {
156
+ return errorResult(`Debugger.setShouldBlackboxURL failed: ${describe(e)}`);
157
+ }
158
+ return textResult(`# set_blackbox_url ✓ \`${url}\` → ${shouldBlackbox ? 'blackboxed' : 'cleared'}\n\n` +
159
+ (shouldBlackbox
160
+ ? `Debugger will step OVER frames whose script URL matches \`${url}\`. Useful for hiding framework/library noise.`
161
+ : `Blackbox cleared for \`${url}\`. Debugger will once again step into matching scripts.`));
162
+ },
163
+ };
164
+ function textResult(text) { return { content: [{ type: 'text', text }] }; }
165
+ function errorResult(text) { return { content: [{ type: 'text', text }], isError: true }; }
166
+ function describe(e) { return e instanceof Error ? e.message : String(e); }
167
+ //# sourceMappingURL=breakpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakpoints.js","sourceRoot":"","sources":["../../../src/tools/breakpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const clearConsoleTool: {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: {};
5
+ handler: () => Promise<{
6
+ content: {
7
+ type: "text";
8
+ text: string;
9
+ }[];
10
+ }>;
11
+ };
@@ -0,0 +1,32 @@
1
+ import { PageSession } from '../page-session.js';
2
+ export const clearConsoleTool = {
3
+ name: 'clear_console',
4
+ description: [
5
+ 'Clear the page console + the local PageSession buffer via WIP `Console.clearMessages` (probe-confirmed 2026-05-16).',
6
+ 'Both sides are reset: the WebKit-side console (so re-attaching wouldn\'t replay these) AND the in-process rolling buffer fed by `Console.messageAdded`.',
7
+ 'Useful before an interaction probe so subsequent `list_console_messages` only returns new entries.',
8
+ ].join(' '),
9
+ inputSchema: {},
10
+ handler: async () => {
11
+ let ps;
12
+ try {
13
+ ps = await PageSession.get();
14
+ }
15
+ catch (e) {
16
+ return errorResult(`Unable to attach: ${describe(e)}`);
17
+ }
18
+ const before = ps.consoleBuffer.length;
19
+ try {
20
+ await ps.session.send('Console.clearMessages', undefined, 5_000);
21
+ }
22
+ catch (e) {
23
+ return errorResult(`Console.clearMessages failed: ${describe(e)}`);
24
+ }
25
+ ps.consoleBuffer.length = 0;
26
+ return textResult(`# clear_console ✓\n\nCleared WebKit console + local buffer (was ${before} entries, now 0).`);
27
+ },
28
+ };
29
+ function textResult(text) { return { content: [{ type: 'text', text }] }; }
30
+ function errorResult(text) { return { content: [{ type: 'text', text }], isError: true }; }
31
+ function describe(e) { return e instanceof Error ? e.message : String(e); }
32
+ //# sourceMappingURL=clear_console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear_console.js","sourceRoot":"","sources":["../../../src/tools/clear_console.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE;QACX,qHAAqH;QACrH,yJAAyJ;QACzJ,oGAAoG;KACrG,CAAC,IAAI,CAAC,GAAG,CAAC;IAEX,WAAW,EAAE,EAAE;IAEf,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,IAAI,EAAe,CAAC;QACpB,IAAI,CAAC;YAAC,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,WAAW,CAAC,qBAAqB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAC3G,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC;QACvC,IAAI,CAAC;YAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QACzE,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,WAAW,CAAC,iCAAiC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QACjF,EAAE,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,OAAO,UAAU,CAAC,mEAAmE,MAAM,mBAAmB,CAAC,CAAC;IAClH,CAAC;CACF,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5F,SAAS,WAAW,CAAC,IAAY,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5G,SAAS,QAAQ,CAAC,CAAU,IAAI,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export declare const clickTool: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: {
6
+ selector: z.ZodString;
7
+ nth: z.ZodOptional<z.ZodNumber>;
8
+ waitAfterMs: z.ZodOptional<z.ZodNumber>;
9
+ };
10
+ handler: ({ selector, nth, waitAfterMs, }: {
11
+ selector: string;
12
+ nth?: number;
13
+ waitAfterMs?: number;
14
+ }) => Promise<{
15
+ content: {
16
+ type: "text";
17
+ text: string;
18
+ }[];
19
+ }>;
20
+ };