claude-chrome-parallel 3.0.3 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +398 -464
  3. package/assets/demo.svg +278 -173
  4. package/dist/cdp/client.d.ts +60 -2
  5. package/dist/cdp/client.d.ts.map +1 -1
  6. package/dist/cdp/client.js +344 -5
  7. package/dist/cdp/client.js.map +1 -1
  8. package/dist/cdp/connection-pool.d.ts.map +1 -1
  9. package/dist/cdp/connection-pool.js +20 -4
  10. package/dist/cdp/connection-pool.js.map +1 -1
  11. package/dist/chrome/launcher.d.ts +11 -0
  12. package/dist/chrome/launcher.d.ts.map +1 -1
  13. package/dist/chrome/launcher.js +124 -10
  14. package/dist/chrome/launcher.js.map +1 -1
  15. package/dist/chrome/pool.d.ts +54 -0
  16. package/dist/chrome/pool.d.ts.map +1 -0
  17. package/dist/chrome/pool.js +301 -0
  18. package/dist/chrome/pool.js.map +1 -0
  19. package/dist/chrome/profile-detector.d.ts +52 -0
  20. package/dist/chrome/profile-detector.d.ts.map +1 -0
  21. package/dist/chrome/profile-detector.js +246 -0
  22. package/dist/chrome/profile-detector.js.map +1 -0
  23. package/dist/cli/claude-session.js +15 -15
  24. package/dist/cli/index.js +162 -37
  25. package/dist/cli/index.js.map +1 -1
  26. package/dist/cli/update-check.d.ts +9 -0
  27. package/dist/cli/update-check.js +141 -0
  28. package/dist/cli/update-check.js.map +1 -0
  29. package/dist/config/global.d.ts +31 -0
  30. package/dist/config/global.d.ts.map +1 -1
  31. package/dist/config/global.js.map +1 -1
  32. package/dist/dashboard/activity-tracker.d.ts +60 -0
  33. package/dist/dashboard/activity-tracker.d.ts.map +1 -0
  34. package/dist/dashboard/activity-tracker.js +178 -0
  35. package/dist/dashboard/activity-tracker.js.map +1 -0
  36. package/dist/dashboard/ansi.d.ts +117 -0
  37. package/dist/dashboard/ansi.d.ts.map +1 -0
  38. package/dist/dashboard/ansi.js +199 -0
  39. package/dist/dashboard/ansi.js.map +1 -0
  40. package/dist/dashboard/index.d.ts +110 -0
  41. package/dist/dashboard/index.d.ts.map +1 -0
  42. package/dist/dashboard/index.js +412 -0
  43. package/dist/dashboard/index.js.map +1 -0
  44. package/dist/dashboard/keyboard-handler.d.ts +43 -0
  45. package/dist/dashboard/keyboard-handler.d.ts.map +1 -0
  46. package/dist/dashboard/keyboard-handler.js +215 -0
  47. package/dist/dashboard/keyboard-handler.js.map +1 -0
  48. package/dist/dashboard/operation-controller.d.ts +76 -0
  49. package/dist/dashboard/operation-controller.d.ts.map +1 -0
  50. package/dist/dashboard/operation-controller.js +167 -0
  51. package/dist/dashboard/operation-controller.js.map +1 -0
  52. package/dist/dashboard/renderer.d.ts +76 -0
  53. package/dist/dashboard/renderer.d.ts.map +1 -0
  54. package/dist/dashboard/renderer.js +193 -0
  55. package/dist/dashboard/renderer.js.map +1 -0
  56. package/dist/dashboard/types.d.ts +56 -0
  57. package/dist/dashboard/types.d.ts.map +1 -0
  58. package/dist/dashboard/types.js +12 -0
  59. package/dist/dashboard/types.js.map +1 -0
  60. package/dist/dashboard/views/main-view.d.ts +23 -0
  61. package/dist/dashboard/views/main-view.d.ts.map +1 -0
  62. package/dist/dashboard/views/main-view.js +143 -0
  63. package/dist/dashboard/views/main-view.js.map +1 -0
  64. package/dist/dashboard/views/sessions-view.d.ts +22 -0
  65. package/dist/dashboard/views/sessions-view.d.ts.map +1 -0
  66. package/dist/dashboard/views/sessions-view.js +104 -0
  67. package/dist/dashboard/views/sessions-view.js.map +1 -0
  68. package/dist/dashboard/views/tabs-view.d.ts +21 -0
  69. package/dist/dashboard/views/tabs-view.d.ts.map +1 -0
  70. package/dist/dashboard/views/tabs-view.js +92 -0
  71. package/dist/dashboard/views/tabs-view.js.map +1 -0
  72. package/dist/hints/hint-engine.d.ts +65 -0
  73. package/dist/hints/hint-engine.d.ts.map +1 -0
  74. package/dist/hints/hint-engine.js +156 -0
  75. package/dist/hints/hint-engine.js.map +1 -0
  76. package/dist/hints/index.d.ts +8 -0
  77. package/dist/hints/index.d.ts.map +1 -0
  78. package/dist/hints/index.js +11 -0
  79. package/dist/hints/index.js.map +1 -0
  80. package/dist/hints/pattern-learner.d.ts +76 -0
  81. package/dist/hints/pattern-learner.d.ts.map +1 -0
  82. package/dist/hints/pattern-learner.js +254 -0
  83. package/dist/hints/pattern-learner.js.map +1 -0
  84. package/dist/hints/rules/composite-suggestions.d.ts +6 -0
  85. package/dist/hints/rules/composite-suggestions.d.ts.map +1 -0
  86. package/dist/hints/rules/composite-suggestions.js +66 -0
  87. package/dist/hints/rules/composite-suggestions.js.map +1 -0
  88. package/dist/hints/rules/error-recovery.d.ts +7 -0
  89. package/dist/hints/rules/error-recovery.d.ts.map +1 -0
  90. package/dist/hints/rules/error-recovery.js +47 -0
  91. package/dist/hints/rules/error-recovery.js.map +1 -0
  92. package/dist/hints/rules/learned-rules.d.ts +13 -0
  93. package/dist/hints/rules/learned-rules.d.ts.map +1 -0
  94. package/dist/hints/rules/learned-rules.js +27 -0
  95. package/dist/hints/rules/learned-rules.js.map +1 -0
  96. package/dist/hints/rules/repetition-detection.d.ts +7 -0
  97. package/dist/hints/rules/repetition-detection.d.ts.map +1 -0
  98. package/dist/hints/rules/repetition-detection.js +82 -0
  99. package/dist/hints/rules/repetition-detection.js.map +1 -0
  100. package/dist/hints/rules/sequence-detection.d.ts +6 -0
  101. package/dist/hints/rules/sequence-detection.d.ts.map +1 -0
  102. package/dist/hints/rules/sequence-detection.js +61 -0
  103. package/dist/hints/rules/sequence-detection.js.map +1 -0
  104. package/dist/hints/rules/success-hints.d.ts +6 -0
  105. package/dist/hints/rules/success-hints.d.ts.map +1 -0
  106. package/dist/hints/rules/success-hints.js +62 -0
  107. package/dist/hints/rules/success-hints.js.map +1 -0
  108. package/dist/index.js +190 -55
  109. package/dist/index.js.map +1 -1
  110. package/dist/lightpanda/launcher.d.ts +58 -0
  111. package/dist/lightpanda/launcher.d.ts.map +1 -0
  112. package/dist/lightpanda/launcher.js +199 -0
  113. package/dist/lightpanda/launcher.js.map +1 -0
  114. package/dist/mcp-server.d.ts +38 -1
  115. package/dist/mcp-server.d.ts.map +1 -1
  116. package/dist/mcp-server.js +220 -6
  117. package/dist/mcp-server.js.map +1 -1
  118. package/dist/orchestration/state-manager.js +46 -46
  119. package/dist/orchestration/workflow-engine.d.ts +1 -0
  120. package/dist/orchestration/workflow-engine.d.ts.map +1 -1
  121. package/dist/orchestration/workflow-engine.js +112 -114
  122. package/dist/orchestration/workflow-engine.js.map +1 -1
  123. package/dist/resources/usage-guide.d.ts +13 -0
  124. package/dist/resources/usage-guide.d.ts.map +1 -0
  125. package/dist/resources/usage-guide.js +101 -0
  126. package/dist/resources/usage-guide.js.map +1 -0
  127. package/dist/router/browser-router.d.ts +51 -0
  128. package/dist/router/browser-router.d.ts.map +1 -0
  129. package/dist/router/browser-router.js +178 -0
  130. package/dist/router/browser-router.js.map +1 -0
  131. package/dist/router/cookie-sync.d.ts +48 -0
  132. package/dist/router/cookie-sync.d.ts.map +1 -0
  133. package/dist/router/cookie-sync.js +106 -0
  134. package/dist/router/cookie-sync.js.map +1 -0
  135. package/dist/router/index.d.ts +5 -0
  136. package/dist/router/index.d.ts.map +1 -0
  137. package/dist/router/index.js +10 -0
  138. package/dist/router/index.js.map +1 -0
  139. package/dist/router/tool-routing-registry.d.ts +21 -0
  140. package/dist/router/tool-routing-registry.d.ts.map +1 -0
  141. package/dist/router/tool-routing-registry.js +90 -0
  142. package/dist/router/tool-routing-registry.js.map +1 -0
  143. package/dist/session-manager.d.ts +41 -1
  144. package/dist/session-manager.d.ts.map +1 -1
  145. package/dist/session-manager.js +216 -21
  146. package/dist/session-manager.js.map +1 -1
  147. package/dist/tools/click-element.d.ts +8 -0
  148. package/dist/tools/click-element.d.ts.map +1 -0
  149. package/dist/tools/click-element.js +383 -0
  150. package/dist/tools/click-element.js.map +1 -0
  151. package/dist/tools/computer.d.ts.map +1 -1
  152. package/dist/tools/computer.js +198 -34
  153. package/dist/tools/computer.js.map +1 -1
  154. package/dist/tools/console-capture.d.ts +6 -0
  155. package/dist/tools/console-capture.d.ts.map +1 -0
  156. package/dist/tools/console-capture.js +320 -0
  157. package/dist/tools/console-capture.js.map +1 -0
  158. package/dist/tools/cookies.d.ts +6 -0
  159. package/dist/tools/cookies.d.ts.map +1 -0
  160. package/dist/tools/cookies.js +263 -0
  161. package/dist/tools/cookies.js.map +1 -0
  162. package/dist/tools/drag-drop.d.ts +6 -0
  163. package/dist/tools/drag-drop.d.ts.map +1 -0
  164. package/dist/tools/drag-drop.js +252 -0
  165. package/dist/tools/drag-drop.js.map +1 -0
  166. package/dist/tools/emulate-device.d.ts +6 -0
  167. package/dist/tools/emulate-device.d.ts.map +1 -0
  168. package/dist/tools/emulate-device.js +221 -0
  169. package/dist/tools/emulate-device.js.map +1 -0
  170. package/dist/tools/file-upload.d.ts +6 -0
  171. package/dist/tools/file-upload.d.ts.map +1 -0
  172. package/dist/tools/file-upload.js +208 -0
  173. package/dist/tools/file-upload.js.map +1 -0
  174. package/dist/tools/fill-form.d.ts +8 -0
  175. package/dist/tools/fill-form.d.ts.map +1 -0
  176. package/dist/tools/fill-form.js +342 -0
  177. package/dist/tools/fill-form.js.map +1 -0
  178. package/dist/tools/find.d.ts.map +1 -1
  179. package/dist/tools/find.js +153 -65
  180. package/dist/tools/find.js.map +1 -1
  181. package/dist/tools/form-input.js +52 -52
  182. package/dist/tools/form-input.js.map +1 -1
  183. package/dist/tools/geolocation.d.ts +6 -0
  184. package/dist/tools/geolocation.d.ts.map +1 -0
  185. package/dist/tools/geolocation.js +172 -0
  186. package/dist/tools/geolocation.js.map +1 -0
  187. package/dist/tools/http-auth.d.ts +6 -0
  188. package/dist/tools/http-auth.d.ts.map +1 -0
  189. package/dist/tools/http-auth.js +136 -0
  190. package/dist/tools/http-auth.js.map +1 -0
  191. package/dist/tools/index.d.ts.map +1 -1
  192. package/dist/tools/index.js +50 -0
  193. package/dist/tools/index.js.map +1 -1
  194. package/dist/tools/javascript.js +1 -1
  195. package/dist/tools/javascript.js.map +1 -1
  196. package/dist/tools/navigate.d.ts.map +1 -1
  197. package/dist/tools/navigate.js +5 -2
  198. package/dist/tools/navigate.js.map +1 -1
  199. package/dist/tools/network.js +4 -4
  200. package/dist/tools/network.js.map +1 -1
  201. package/dist/tools/orchestration.d.ts.map +1 -1
  202. package/dist/tools/orchestration.js +13 -8
  203. package/dist/tools/orchestration.js.map +1 -1
  204. package/dist/tools/page-content.d.ts +6 -0
  205. package/dist/tools/page-content.d.ts.map +1 -0
  206. package/dist/tools/page-content.js +120 -0
  207. package/dist/tools/page-content.js.map +1 -0
  208. package/dist/tools/page-pdf.d.ts +6 -0
  209. package/dist/tools/page-pdf.d.ts.map +1 -0
  210. package/dist/tools/page-pdf.js +245 -0
  211. package/dist/tools/page-pdf.js.map +1 -0
  212. package/dist/tools/page-reload.d.ts +6 -0
  213. package/dist/tools/page-reload.d.ts.map +1 -0
  214. package/dist/tools/page-reload.js +89 -0
  215. package/dist/tools/page-reload.js.map +1 -0
  216. package/dist/tools/performance-metrics.d.ts +6 -0
  217. package/dist/tools/performance-metrics.d.ts.map +1 -0
  218. package/dist/tools/performance-metrics.js +158 -0
  219. package/dist/tools/performance-metrics.js.map +1 -0
  220. package/dist/tools/read-page.d.ts.map +1 -1
  221. package/dist/tools/read-page.js +4 -2
  222. package/dist/tools/read-page.js.map +1 -1
  223. package/dist/tools/request-intercept.d.ts +6 -0
  224. package/dist/tools/request-intercept.d.ts.map +1 -0
  225. package/dist/tools/request-intercept.js +439 -0
  226. package/dist/tools/request-intercept.js.map +1 -0
  227. package/dist/tools/selector-query.d.ts +6 -0
  228. package/dist/tools/selector-query.d.ts.map +1 -0
  229. package/dist/tools/selector-query.js +206 -0
  230. package/dist/tools/selector-query.js.map +1 -0
  231. package/dist/tools/storage.d.ts +6 -0
  232. package/dist/tools/storage.d.ts.map +1 -0
  233. package/dist/tools/storage.js +264 -0
  234. package/dist/tools/storage.js.map +1 -0
  235. package/dist/tools/tabs-close.d.ts +6 -0
  236. package/dist/tools/tabs-close.d.ts.map +1 -0
  237. package/dist/tools/tabs-close.js +124 -0
  238. package/dist/tools/tabs-close.js.map +1 -0
  239. package/dist/tools/tabs-context.js +1 -1
  240. package/dist/tools/tabs-context.js.map +1 -1
  241. package/dist/tools/user-agent.d.ts +6 -0
  242. package/dist/tools/user-agent.d.ts.map +1 -0
  243. package/dist/tools/user-agent.js +128 -0
  244. package/dist/tools/user-agent.js.map +1 -0
  245. package/dist/tools/wait-and-click.d.ts +8 -0
  246. package/dist/tools/wait-and-click.d.ts.map +1 -0
  247. package/dist/tools/wait-and-click.js +290 -0
  248. package/dist/tools/wait-and-click.js.map +1 -0
  249. package/dist/tools/wait-for.d.ts +6 -0
  250. package/dist/tools/wait-for.d.ts.map +1 -0
  251. package/dist/tools/wait-for.js +248 -0
  252. package/dist/tools/wait-for.js.map +1 -0
  253. package/dist/tools/xpath-query.d.ts +6 -0
  254. package/dist/tools/xpath-query.d.ts.map +1 -0
  255. package/dist/tools/xpath-query.js +230 -0
  256. package/dist/tools/xpath-query.js.map +1 -0
  257. package/dist/types/browser-backend.d.ts +30 -0
  258. package/dist/types/browser-backend.d.ts.map +1 -0
  259. package/dist/types/browser-backend.js +9 -0
  260. package/dist/types/browser-backend.js.map +1 -0
  261. package/dist/types/profile.d.ts +76 -0
  262. package/dist/types/profile.d.ts.map +1 -0
  263. package/dist/types/profile.js +35 -0
  264. package/dist/types/profile.js.map +1 -0
  265. package/dist/types/session.d.ts +7 -3
  266. package/dist/types/session.d.ts.map +1 -1
  267. package/package.json +78 -75
  268. package/dist/master/index.d.ts +0 -18
  269. package/dist/master/index.d.ts.map +0 -1
  270. package/dist/master/index.js +0 -75
  271. package/dist/master/index.js.map +0 -1
  272. package/dist/master/ipc-server.d.ts +0 -21
  273. package/dist/master/ipc-server.d.ts.map +0 -1
  274. package/dist/master/ipc-server.js +0 -175
  275. package/dist/master/ipc-server.js.map +0 -1
  276. package/dist/master/request-handler.d.ts +0 -17
  277. package/dist/master/request-handler.d.ts.map +0 -1
  278. package/dist/master/request-handler.js +0 -134
  279. package/dist/master/request-handler.js.map +0 -1
  280. package/dist/master/session-registry.d.ts +0 -120
  281. package/dist/master/session-registry.d.ts.map +0 -1
  282. package/dist/master/session-registry.js +0 -247
  283. package/dist/master/session-registry.js.map +0 -1
  284. package/dist/shared/ipc-constants.d.ts +0 -16
  285. package/dist/shared/ipc-constants.d.ts.map +0 -1
  286. package/dist/shared/ipc-constants.js +0 -66
  287. package/dist/shared/ipc-constants.js.map +0 -1
  288. package/dist/shared/ipc-protocol.d.ts +0 -33
  289. package/dist/shared/ipc-protocol.d.ts.map +0 -1
  290. package/dist/shared/ipc-protocol.js +0 -20
  291. package/dist/shared/ipc-protocol.js.map +0 -1
  292. package/dist/worker/auto-master.d.ts +0 -24
  293. package/dist/worker/auto-master.d.ts.map +0 -1
  294. package/dist/worker/auto-master.js +0 -135
  295. package/dist/worker/auto-master.js.map +0 -1
  296. package/dist/worker/index.d.ts +0 -25
  297. package/dist/worker/index.d.ts.map +0 -1
  298. package/dist/worker/index.js +0 -93
  299. package/dist/worker/index.js.map +0 -1
  300. package/dist/worker/ipc-client.d.ts +0 -26
  301. package/dist/worker/ipc-client.d.ts.map +0 -1
  302. package/dist/worker/ipc-client.js +0 -211
  303. package/dist/worker/ipc-client.js.map +0 -1
  304. package/dist/worker/remote-session-manager.d.ts +0 -114
  305. package/dist/worker/remote-session-manager.d.ts.map +0 -1
  306. package/dist/worker/remote-session-manager.js +0 -151
  307. package/dist/worker/remote-session-manager.js.map +0 -1
  308. package/dist/worker/tools.d.ts +0 -7
  309. package/dist/worker/tools.d.ts.map +0 -1
  310. package/dist/worker/tools.js +0 -340
  311. package/dist/worker/tools.js.map +0 -1
  312. package/dist/worker/worker-mcp-server.d.ts +0 -70
  313. package/dist/worker/worker-mcp-server.d.ts.map +0 -1
  314. package/dist/worker/worker-mcp-server.js +0 -295
  315. package/dist/worker/worker-mcp-server.js.map +0 -1
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * Page Content Tool - Get HTML content from page
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerPageContentTool = registerPageContentTool;
7
+ const session_manager_1 = require("../session-manager");
8
+ const definition = {
9
+ name: 'page_content',
10
+ description: `Get HTML content from the current page.
11
+ Returns the full page HTML or content from a specific element using a CSS selector.
12
+ Useful for scraping and extracting page structure.`,
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ tabId: {
17
+ type: 'string',
18
+ description: 'Tab ID to get content from',
19
+ },
20
+ selector: {
21
+ type: 'string',
22
+ description: 'Optional CSS selector to get content from a specific element. If not provided, returns full page HTML.',
23
+ },
24
+ outerHTML: {
25
+ type: 'boolean',
26
+ description: 'If true, returns outerHTML (includes the element itself). If false, returns innerHTML. Default: true',
27
+ },
28
+ },
29
+ required: ['tabId'],
30
+ },
31
+ };
32
+ const handler = async (sessionId, args) => {
33
+ const tabId = args.tabId;
34
+ const selector = args.selector;
35
+ const outerHTML = args.outerHTML ?? true;
36
+ const sessionManager = (0, session_manager_1.getSessionManager)();
37
+ if (!tabId) {
38
+ return {
39
+ content: [{ type: 'text', text: 'Error: tabId is required' }],
40
+ isError: true,
41
+ };
42
+ }
43
+ try {
44
+ const page = await sessionManager.getPage(sessionId, tabId, undefined, 'page_content');
45
+ if (!page) {
46
+ return {
47
+ content: [{ type: 'text', text: `Error: Tab ${tabId} not found` }],
48
+ isError: true,
49
+ };
50
+ }
51
+ if (selector) {
52
+ // Get content from specific element
53
+ const element = await page.$(selector);
54
+ if (!element) {
55
+ return {
56
+ content: [
57
+ {
58
+ type: 'text',
59
+ text: JSON.stringify({
60
+ action: 'page_content',
61
+ selector,
62
+ content: null,
63
+ message: `No element found matching "${selector}"`,
64
+ }),
65
+ },
66
+ ],
67
+ };
68
+ }
69
+ const html = await page.evaluate((el, getOuter) => {
70
+ return getOuter ? el.outerHTML : el.innerHTML;
71
+ }, element, outerHTML);
72
+ return {
73
+ content: [
74
+ {
75
+ type: 'text',
76
+ text: JSON.stringify({
77
+ action: 'page_content',
78
+ selector,
79
+ outerHTML,
80
+ contentLength: html.length,
81
+ content: html,
82
+ }),
83
+ },
84
+ ],
85
+ };
86
+ }
87
+ else {
88
+ // Get full page content
89
+ const html = await page.content();
90
+ return {
91
+ content: [
92
+ {
93
+ type: 'text',
94
+ text: JSON.stringify({
95
+ action: 'page_content',
96
+ selector: null,
97
+ contentLength: html.length,
98
+ content: html,
99
+ }),
100
+ },
101
+ ],
102
+ };
103
+ }
104
+ }
105
+ catch (error) {
106
+ return {
107
+ content: [
108
+ {
109
+ type: 'text',
110
+ text: `Page content error: ${error instanceof Error ? error.message : String(error)}`,
111
+ },
112
+ ],
113
+ isError: true,
114
+ };
115
+ }
116
+ };
117
+ function registerPageContentTool(server) {
118
+ server.registerTool('page_content', handler, definition);
119
+ }
120
+ //# sourceMappingURL=page-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-content.js","sourceRoot":"","sources":["../../src/tools/page-content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Page PDF Tool - Generate PDF from current page
3
+ */
4
+ import { MCPServer } from '../mcp-server';
5
+ export declare function registerPagePdfTool(server: MCPServer): void;
6
+ //# sourceMappingURL=page-pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-pdf.d.ts","sourceRoot":"","sources":["../../src/tools/page-pdf.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAyN1C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE3D"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ /**
3
+ * Page PDF Tool - Generate PDF from current page
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerPagePdfTool = registerPagePdfTool;
40
+ const fs_1 = require("fs");
41
+ const path = __importStar(require("path"));
42
+ const session_manager_1 = require("../session-manager");
43
+ const definition = {
44
+ name: 'page_pdf',
45
+ description: `Generate a PDF from the current page.
46
+ If path is provided, saves to file. Otherwise returns base64-encoded PDF.
47
+ Supports various paper formats and options.`,
48
+ inputSchema: {
49
+ type: 'object',
50
+ properties: {
51
+ tabId: {
52
+ type: 'string',
53
+ description: 'Tab ID to generate PDF from',
54
+ },
55
+ path: {
56
+ type: 'string',
57
+ description: 'File path to save PDF (absolute or relative to home). If not provided, returns base64.',
58
+ },
59
+ format: {
60
+ type: 'string',
61
+ enum: ['A4', 'Letter', 'Legal', 'Tabloid', 'A3', 'A5'],
62
+ description: 'Paper format (default: A4)',
63
+ },
64
+ landscape: {
65
+ type: 'boolean',
66
+ description: 'Whether to print in landscape mode (default: false)',
67
+ },
68
+ printBackground: {
69
+ type: 'boolean',
70
+ description: 'Whether to print background graphics (default: true)',
71
+ },
72
+ scale: {
73
+ type: 'number',
74
+ description: 'Scale of the webpage rendering (0.1-2.0, default: 1)',
75
+ },
76
+ marginTop: {
77
+ type: 'string',
78
+ description: 'Top margin (e.g., "1cm", "0.5in")',
79
+ },
80
+ marginRight: {
81
+ type: 'string',
82
+ description: 'Right margin (e.g., "1cm", "0.5in")',
83
+ },
84
+ marginBottom: {
85
+ type: 'string',
86
+ description: 'Bottom margin (e.g., "1cm", "0.5in")',
87
+ },
88
+ marginLeft: {
89
+ type: 'string',
90
+ description: 'Left margin (e.g., "1cm", "0.5in")',
91
+ },
92
+ pageRanges: {
93
+ type: 'string',
94
+ description: 'Page ranges to print (e.g., "1-5, 8, 11-13")',
95
+ },
96
+ displayHeaderFooter: {
97
+ type: 'boolean',
98
+ description: 'Whether to display header and footer (default: false)',
99
+ },
100
+ headerTemplate: {
101
+ type: 'string',
102
+ description: 'HTML template for the header (requires displayHeaderFooter: true)',
103
+ },
104
+ footerTemplate: {
105
+ type: 'string',
106
+ description: 'HTML template for the footer (requires displayHeaderFooter: true)',
107
+ },
108
+ },
109
+ required: ['tabId'],
110
+ },
111
+ };
112
+ const handler = async (sessionId, args) => {
113
+ const tabId = args.tabId;
114
+ const filePath = args.path;
115
+ const format = args.format ?? 'A4';
116
+ const landscape = args.landscape ?? false;
117
+ const printBackground = args.printBackground ?? true;
118
+ const scale = args.scale ?? 1;
119
+ const marginTop = args.marginTop;
120
+ const marginRight = args.marginRight;
121
+ const marginBottom = args.marginBottom;
122
+ const marginLeft = args.marginLeft;
123
+ const pageRanges = args.pageRanges;
124
+ const displayHeaderFooter = args.displayHeaderFooter ?? false;
125
+ const headerTemplate = args.headerTemplate;
126
+ const footerTemplate = args.footerTemplate;
127
+ const sessionManager = (0, session_manager_1.getSessionManager)();
128
+ if (!tabId) {
129
+ return {
130
+ content: [{ type: 'text', text: 'Error: tabId is required' }],
131
+ isError: true,
132
+ };
133
+ }
134
+ // Validate scale
135
+ if (scale < 0.1 || scale > 2.0) {
136
+ return {
137
+ content: [{ type: 'text', text: 'Error: scale must be between 0.1 and 2.0' }],
138
+ isError: true,
139
+ };
140
+ }
141
+ try {
142
+ const page = await sessionManager.getPage(sessionId, tabId, undefined, 'page_pdf');
143
+ if (!page) {
144
+ return {
145
+ content: [{ type: 'text', text: `Error: Tab ${tabId} not found` }],
146
+ isError: true,
147
+ };
148
+ }
149
+ // Build PDF options
150
+ const pdfOptions = {
151
+ format: format,
152
+ landscape,
153
+ printBackground,
154
+ scale,
155
+ displayHeaderFooter,
156
+ };
157
+ // Add margins if specified
158
+ if (marginTop || marginRight || marginBottom || marginLeft) {
159
+ pdfOptions.margin = {
160
+ top: marginTop,
161
+ right: marginRight,
162
+ bottom: marginBottom,
163
+ left: marginLeft,
164
+ };
165
+ }
166
+ if (pageRanges) {
167
+ pdfOptions.pageRanges = pageRanges;
168
+ }
169
+ if (displayHeaderFooter) {
170
+ if (headerTemplate)
171
+ pdfOptions.headerTemplate = headerTemplate;
172
+ if (footerTemplate)
173
+ pdfOptions.footerTemplate = footerTemplate;
174
+ }
175
+ // Generate PDF
176
+ const pdfBuffer = await page.pdf(pdfOptions);
177
+ if (filePath) {
178
+ // Resolve path (support ~ for home directory)
179
+ let resolvedPath = filePath;
180
+ if (filePath.startsWith('~')) {
181
+ resolvedPath = path.join(process.env.HOME || '', filePath.slice(1));
182
+ }
183
+ else if (!path.isAbsolute(filePath)) {
184
+ resolvedPath = path.resolve(filePath);
185
+ }
186
+ // Ensure directory exists
187
+ const dir = path.dirname(resolvedPath);
188
+ await fs_1.promises.mkdir(dir, { recursive: true });
189
+ // Write file
190
+ await fs_1.promises.writeFile(resolvedPath, pdfBuffer);
191
+ return {
192
+ content: [
193
+ {
194
+ type: 'text',
195
+ text: JSON.stringify({
196
+ action: 'page_pdf',
197
+ path: resolvedPath,
198
+ size: pdfBuffer.length,
199
+ sizeKB: Math.round(pdfBuffer.length / 1024),
200
+ format,
201
+ landscape,
202
+ message: `PDF saved to ${resolvedPath} (${Math.round(pdfBuffer.length / 1024)} KB)`,
203
+ }),
204
+ },
205
+ ],
206
+ };
207
+ }
208
+ else {
209
+ // Return base64
210
+ const base64 = Buffer.from(pdfBuffer).toString('base64');
211
+ return {
212
+ content: [
213
+ {
214
+ type: 'text',
215
+ text: JSON.stringify({
216
+ action: 'page_pdf',
217
+ base64: base64.slice(0, 100) + '...', // Truncate for response
218
+ size: pdfBuffer.length,
219
+ sizeKB: Math.round(pdfBuffer.length / 1024),
220
+ format,
221
+ landscape,
222
+ message: `PDF generated (${Math.round(pdfBuffer.length / 1024)} KB). Base64 data truncated in response.`,
223
+ fullBase64: base64,
224
+ }),
225
+ },
226
+ ],
227
+ };
228
+ }
229
+ }
230
+ catch (error) {
231
+ return {
232
+ content: [
233
+ {
234
+ type: 'text',
235
+ text: `PDF error: ${error instanceof Error ? error.message : String(error)}`,
236
+ },
237
+ ],
238
+ isError: true,
239
+ };
240
+ }
241
+ };
242
+ function registerPagePdfTool(server) {
243
+ server.registerTool('page_pdf', handler, definition);
244
+ }
245
+ //# sourceMappingURL=page-pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-pdf.js","sourceRoot":"","sources":["../../src/tools/page-pdf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Page Reload Tool - Reload current page
3
+ */
4
+ import { MCPServer } from '../mcp-server';
5
+ export declare function registerPageReloadTool(server: MCPServer): void;
6
+ //# sourceMappingURL=page-reload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-reload.d.ts","sourceRoot":"","sources":["../../src/tools/page-reload.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA2F1C,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAE9D"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ /**
3
+ * Page Reload Tool - Reload current page
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerPageReloadTool = registerPageReloadTool;
7
+ const session_manager_1 = require("../session-manager");
8
+ const definition = {
9
+ name: 'page_reload',
10
+ description: 'Reload the current page. Optionally bypass cache for a hard refresh.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ tabId: {
15
+ type: 'string',
16
+ description: 'Tab ID to reload',
17
+ },
18
+ ignoreCache: {
19
+ type: 'boolean',
20
+ description: 'If true, bypasses the browser cache (hard refresh). Default: false',
21
+ },
22
+ },
23
+ required: ['tabId'],
24
+ },
25
+ };
26
+ const handler = async (sessionId, args) => {
27
+ const tabId = args.tabId;
28
+ const ignoreCache = args.ignoreCache ?? false;
29
+ const sessionManager = (0, session_manager_1.getSessionManager)();
30
+ if (!tabId) {
31
+ return {
32
+ content: [{ type: 'text', text: 'Error: tabId is required' }],
33
+ isError: true,
34
+ };
35
+ }
36
+ try {
37
+ const page = await sessionManager.getPage(sessionId, tabId, undefined, 'page_reload');
38
+ if (!page) {
39
+ return {
40
+ content: [{ type: 'text', text: `Error: Tab ${tabId} not found` }],
41
+ isError: true,
42
+ };
43
+ }
44
+ const urlBefore = page.url();
45
+ // Reload the page
46
+ if (ignoreCache) {
47
+ // Use CDP to reload with cache bypass
48
+ const client = await page.createCDPSession();
49
+ await client.send('Page.reload', { ignoreCache: true });
50
+ await client.detach();
51
+ // Wait for navigation to complete
52
+ await page.waitForNavigation({ waitUntil: 'domcontentloaded', timeout: 30000 }).catch(() => {
53
+ // Navigation may have already completed
54
+ });
55
+ }
56
+ else {
57
+ await page.reload({ waitUntil: 'domcontentloaded', timeout: 30000 });
58
+ }
59
+ return {
60
+ content: [
61
+ {
62
+ type: 'text',
63
+ text: JSON.stringify({
64
+ action: 'reload',
65
+ url: page.url(),
66
+ title: await page.title(),
67
+ ignoreCache,
68
+ message: ignoreCache ? 'Page reloaded (cache bypassed)' : 'Page reloaded',
69
+ }),
70
+ },
71
+ ],
72
+ };
73
+ }
74
+ catch (error) {
75
+ return {
76
+ content: [
77
+ {
78
+ type: 'text',
79
+ text: `Reload error: ${error instanceof Error ? error.message : String(error)}`,
80
+ },
81
+ ],
82
+ isError: true,
83
+ };
84
+ }
85
+ };
86
+ function registerPageReloadTool(server) {
87
+ server.registerTool('page_reload', handler, definition);
88
+ }
89
+ //# sourceMappingURL=page-reload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-reload.js","sourceRoot":"","sources":["../../src/tools/page-reload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Performance Metrics Tool - Collect page performance data
3
+ */
4
+ import { MCPServer } from '../mcp-server';
5
+ export declare function registerPerformanceMetricsTool(server: MCPServer): void;
6
+ //# sourceMappingURL=performance-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-metrics.d.ts","sourceRoot":"","sources":["../../src/tools/performance-metrics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA0L1C,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEtE"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ /**
3
+ * Performance Metrics Tool - Collect page performance data
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerPerformanceMetricsTool = registerPerformanceMetricsTool;
7
+ const session_manager_1 = require("../session-manager");
8
+ const definition = {
9
+ name: 'performance_metrics',
10
+ description: `Get performance metrics for the current page.
11
+ Collects various metrics including:
12
+ - Puppeteer metrics (JS heap, layout counts, etc.)
13
+ - Navigation timing (page load, DOM content loaded)
14
+ - Paint timing (first paint, first contentful paint)
15
+ - Resource timing (optional)`,
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ tabId: {
20
+ type: 'string',
21
+ description: 'Tab ID to get metrics from',
22
+ },
23
+ type: {
24
+ type: 'string',
25
+ enum: ['all', 'puppeteer', 'navigation', 'paint', 'resource'],
26
+ description: 'Type of metrics to retrieve (default: all)',
27
+ },
28
+ includeResources: {
29
+ type: 'boolean',
30
+ description: 'Whether to include resource timing data (can be large)',
31
+ },
32
+ },
33
+ required: ['tabId'],
34
+ },
35
+ };
36
+ const handler = async (sessionId, args) => {
37
+ const tabId = args.tabId;
38
+ const type = args.type ?? 'all';
39
+ const includeResources = args.includeResources ?? false;
40
+ const sessionManager = (0, session_manager_1.getSessionManager)();
41
+ if (!tabId) {
42
+ return {
43
+ content: [{ type: 'text', text: 'Error: tabId is required' }],
44
+ isError: true,
45
+ };
46
+ }
47
+ try {
48
+ const page = await sessionManager.getPage(sessionId, tabId, undefined, 'performance_metrics');
49
+ if (!page) {
50
+ return {
51
+ content: [{ type: 'text', text: `Error: Tab ${tabId} not found` }],
52
+ isError: true,
53
+ };
54
+ }
55
+ const metrics = {};
56
+ // Puppeteer metrics
57
+ if (type === 'all' || type === 'puppeteer') {
58
+ const puppeteerMetrics = await page.metrics();
59
+ metrics.puppeteer = {};
60
+ for (const [key, value] of Object.entries(puppeteerMetrics)) {
61
+ if (typeof value === 'number') {
62
+ metrics.puppeteer[key] = value;
63
+ }
64
+ }
65
+ }
66
+ // Navigation timing
67
+ if (type === 'all' || type === 'navigation') {
68
+ const navigationTiming = await page.evaluate(() => {
69
+ const nav = performance.getEntriesByType('navigation')[0];
70
+ if (!nav)
71
+ return null;
72
+ return {
73
+ redirectTime: nav.redirectEnd - nav.redirectStart,
74
+ dnsTime: nav.domainLookupEnd - nav.domainLookupStart,
75
+ connectTime: nav.connectEnd - nav.connectStart,
76
+ requestTime: nav.responseStart - nav.requestStart,
77
+ responseTime: nav.responseEnd - nav.responseStart,
78
+ domInteractive: nav.domInteractive,
79
+ domContentLoadedEventEnd: nav.domContentLoadedEventEnd,
80
+ loadEventEnd: nav.loadEventEnd,
81
+ duration: nav.duration,
82
+ };
83
+ });
84
+ if (navigationTiming) {
85
+ metrics.navigation = navigationTiming;
86
+ }
87
+ }
88
+ // Paint timing
89
+ if (type === 'all' || type === 'paint') {
90
+ const paintTiming = await page.evaluate(() => {
91
+ const paints = performance.getEntriesByType('paint');
92
+ const result = {};
93
+ for (const paint of paints) {
94
+ result[paint.name] = paint.startTime;
95
+ }
96
+ return result;
97
+ });
98
+ metrics.paint = paintTiming;
99
+ }
100
+ // Resource timing
101
+ if ((type === 'all' && includeResources) || type === 'resource') {
102
+ const resourceTiming = await page.evaluate(() => {
103
+ const resources = performance.getEntriesByType('resource');
104
+ return resources.slice(0, 50).map(r => ({
105
+ name: r.name.split('?')[0].split('/').pop() || r.name,
106
+ type: r.initiatorType,
107
+ duration: Math.round(r.duration),
108
+ size: r.transferSize || 0,
109
+ }));
110
+ });
111
+ metrics.resource = resourceTiming;
112
+ }
113
+ // Calculate summary
114
+ if (type === 'all') {
115
+ const jsHeapUsed = metrics.puppeteer?.JSHeapUsedSize;
116
+ const resources = metrics.resource || [];
117
+ metrics.summary = {
118
+ pageLoadTime: metrics.navigation?.loadEventEnd ?? null,
119
+ domContentLoaded: metrics.navigation?.domContentLoadedEventEnd ?? null,
120
+ firstPaint: metrics.paint?.['first-paint'] ?? null,
121
+ firstContentfulPaint: metrics.paint?.['first-contentful-paint'] ?? null,
122
+ jsHeapUsedMB: jsHeapUsed ? Math.round((jsHeapUsed / 1024 / 1024) * 100) / 100 : null,
123
+ totalResources: resources.length,
124
+ largestResource: resources.length > 0
125
+ ? resources.sort((a, b) => b.size - a.size)[0]?.name || null
126
+ : null,
127
+ };
128
+ }
129
+ return {
130
+ content: [
131
+ {
132
+ type: 'text',
133
+ text: JSON.stringify({
134
+ action: 'performance_metrics',
135
+ type,
136
+ metrics,
137
+ message: `Performance metrics collected (type: ${type})`,
138
+ }),
139
+ },
140
+ ],
141
+ };
142
+ }
143
+ catch (error) {
144
+ return {
145
+ content: [
146
+ {
147
+ type: 'text',
148
+ text: `Performance metrics error: ${error instanceof Error ? error.message : String(error)}`,
149
+ },
150
+ ],
151
+ isError: true,
152
+ };
153
+ }
154
+ };
155
+ function registerPerformanceMetricsTool(server) {
156
+ server.registerTool('performance_metrics', handler, definition);
157
+ }
158
+ //# sourceMappingURL=performance-metrics.js.map