@eddym06/custom-chrome-mcp 1.0.2

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 (56) hide show
  1. package/.npmrc.example +2 -0
  2. package/CHANGELOG.md +87 -0
  3. package/INSTALL.md +148 -0
  4. package/LICENSE +21 -0
  5. package/README.md +403 -0
  6. package/dist/chrome-connector.d.ts +116 -0
  7. package/dist/chrome-connector.d.ts.map +1 -0
  8. package/dist/chrome-connector.js +452 -0
  9. package/dist/chrome-connector.js.map +1 -0
  10. package/dist/index.d.ts +7 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +211 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/tools/anti-detection.d.ts +22 -0
  15. package/dist/tools/anti-detection.d.ts.map +1 -0
  16. package/dist/tools/anti-detection.js +220 -0
  17. package/dist/tools/anti-detection.js.map +1 -0
  18. package/dist/tools/capture.d.ts +130 -0
  19. package/dist/tools/capture.d.ts.map +1 -0
  20. package/dist/tools/capture.js +164 -0
  21. package/dist/tools/capture.js.map +1 -0
  22. package/dist/tools/interaction.d.ts +173 -0
  23. package/dist/tools/interaction.d.ts.map +1 -0
  24. package/dist/tools/interaction.js +274 -0
  25. package/dist/tools/interaction.js.map +1 -0
  26. package/dist/tools/navigation.d.ts +82 -0
  27. package/dist/tools/navigation.d.ts.map +1 -0
  28. package/dist/tools/navigation.js +196 -0
  29. package/dist/tools/navigation.js.map +1 -0
  30. package/dist/tools/playwright-launcher.d.ts +53 -0
  31. package/dist/tools/playwright-launcher.d.ts.map +1 -0
  32. package/dist/tools/playwright-launcher.js +117 -0
  33. package/dist/tools/playwright-launcher.js.map +1 -0
  34. package/dist/tools/service-worker.d.ts +128 -0
  35. package/dist/tools/service-worker.d.ts.map +1 -0
  36. package/dist/tools/service-worker.js +355 -0
  37. package/dist/tools/service-worker.js.map +1 -0
  38. package/dist/tools/session.d.ts +54 -0
  39. package/dist/tools/session.d.ts.map +1 -0
  40. package/dist/tools/session.js +311 -0
  41. package/dist/tools/session.js.map +1 -0
  42. package/dist/tools/system.d.ts +159 -0
  43. package/dist/tools/system.d.ts.map +1 -0
  44. package/dist/tools/system.js +252 -0
  45. package/dist/tools/system.js.map +1 -0
  46. package/dist/types/index.d.ts +75 -0
  47. package/dist/types/index.d.ts.map +1 -0
  48. package/dist/types/index.js +5 -0
  49. package/dist/types/index.js.map +1 -0
  50. package/dist/utils/helpers.d.ts +53 -0
  51. package/dist/utils/helpers.d.ts.map +1 -0
  52. package/dist/utils/helpers.js +122 -0
  53. package/dist/utils/helpers.js.map +1 -0
  54. package/mcp-config-example.json +12 -0
  55. package/package.json +61 -0
  56. package/test-playwright.js +57 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Navigation and Tab Management Tools
3
+ */
4
+ import { z } from 'zod';
5
+ import type { ChromeConnector } from '../chrome-connector.js';
6
+ export declare function createNavigationTools(connector: ChromeConnector): ({
7
+ name: string;
8
+ description: string;
9
+ inputSchema: z.ZodObject<{
10
+ tabId: z.ZodOptional<z.ZodString>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ tabId?: string | undefined;
13
+ }, {
14
+ tabId?: string | undefined;
15
+ }>;
16
+ handler: ({ tabId }: any) => Promise<{
17
+ success: boolean;
18
+ message: string;
19
+ }>;
20
+ } | {
21
+ name: string;
22
+ description: string;
23
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
24
+ handler: () => Promise<{
25
+ success: boolean;
26
+ count: number;
27
+ tabs: {
28
+ id: string;
29
+ title: string;
30
+ url: string;
31
+ }[];
32
+ }>;
33
+ } | {
34
+ name: string;
35
+ description: string;
36
+ inputSchema: z.ZodObject<{
37
+ url: z.ZodOptional<z.ZodString>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ url?: string | undefined;
40
+ }, {
41
+ url?: string | undefined;
42
+ }>;
43
+ handler: ({ url }: any) => Promise<{
44
+ success: boolean;
45
+ tab: {
46
+ id: string;
47
+ url: string;
48
+ title: string;
49
+ };
50
+ message: string;
51
+ }>;
52
+ } | {
53
+ name: string;
54
+ description: string;
55
+ inputSchema: z.ZodObject<{
56
+ tabId: z.ZodString;
57
+ }, "strip", z.ZodTypeAny, {
58
+ tabId: string;
59
+ }, {
60
+ tabId: string;
61
+ }>;
62
+ handler: ({ tabId }: any) => Promise<{
63
+ success: boolean;
64
+ message: string;
65
+ }>;
66
+ } | {
67
+ name: string;
68
+ description: string;
69
+ inputSchema: z.ZodObject<{
70
+ tabId: z.ZodOptional<z.ZodString>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ tabId?: string | undefined;
73
+ }, {
74
+ tabId?: string | undefined;
75
+ }>;
76
+ handler: ({ tabId }: any) => Promise<{
77
+ success: boolean;
78
+ url: any;
79
+ title: any;
80
+ }>;
81
+ })[];
82
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/tools/navigation.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,eAAe;;;;;;;;;;yBA+C/B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA6FL,GAAG;;;;;;;;;;;;;;;;;;;yBAuBD,GAAG;;;;;;;;;;;;;;yBAoCH,GAAG;;;;;KAenC"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Navigation and Tab Management Tools
3
+ */
4
+ import { z } from 'zod';
5
+ import { isValidUrl, humanDelay } from '../utils/helpers.js';
6
+ export function createNavigationTools(connector) {
7
+ return [
8
+ // Navigate to URL
9
+ {
10
+ name: 'navigate',
11
+ description: 'Navigate to a URL in the current or specified tab',
12
+ inputSchema: z.object({
13
+ url: z.string().describe('URL to navigate to'),
14
+ tabId: z.string().optional().describe('Tab ID (optional, uses current tab if not specified)'),
15
+ waitUntil: z.enum(['load', 'domcontentloaded', 'networkidle']).optional().default('load')
16
+ .describe('Wait until this event fires')
17
+ }),
18
+ handler: async ({ url, tabId, waitUntil }) => {
19
+ if (!isValidUrl(url)) {
20
+ throw new Error(`Invalid URL: ${url}`);
21
+ }
22
+ const client = await connector.getTabClient(tabId);
23
+ const { Page } = client;
24
+ await Page.enable();
25
+ await Page.navigate({ url });
26
+ // Wait for the specified event
27
+ if (waitUntil === 'load') {
28
+ await Page.loadEventFired();
29
+ }
30
+ else if (waitUntil === 'domcontentloaded') {
31
+ await Page.domContentEventFired();
32
+ }
33
+ await humanDelay();
34
+ return {
35
+ success: true,
36
+ url,
37
+ message: `Navigated to ${url}`
38
+ };
39
+ }
40
+ },
41
+ // Go back
42
+ {
43
+ name: 'go_back',
44
+ description: 'Navigate back in browser history',
45
+ inputSchema: z.object({
46
+ tabId: z.string().optional().describe('Tab ID (optional)')
47
+ }),
48
+ handler: async ({ tabId }) => {
49
+ const client = await connector.getTabClient(tabId);
50
+ const { Page } = client;
51
+ await Page.enable();
52
+ const history = await Page.getNavigationHistory();
53
+ if (history.currentIndex > 0) {
54
+ const entry = history.entries[history.currentIndex - 1];
55
+ await Page.navigateToHistoryEntry({ entryId: entry.id });
56
+ await humanDelay();
57
+ return { success: true, message: 'Navigated back' };
58
+ }
59
+ return { success: false, message: 'No history to go back' };
60
+ }
61
+ },
62
+ // Go forward
63
+ {
64
+ name: 'go_forward',
65
+ description: 'Navigate forward in browser history',
66
+ inputSchema: z.object({
67
+ tabId: z.string().optional().describe('Tab ID (optional)')
68
+ }),
69
+ handler: async ({ tabId }) => {
70
+ const client = await connector.getTabClient(tabId);
71
+ const { Page } = client;
72
+ await Page.enable();
73
+ const history = await Page.getNavigationHistory();
74
+ if (history.currentIndex < history.entries.length - 1) {
75
+ const entry = history.entries[history.currentIndex + 1];
76
+ await Page.navigateToHistoryEntry({ entryId: entry.id });
77
+ await humanDelay();
78
+ return { success: true, message: 'Navigated forward' };
79
+ }
80
+ return { success: false, message: 'No history to go forward' };
81
+ }
82
+ },
83
+ // Reload page
84
+ {
85
+ name: 'reload',
86
+ description: 'Reload the current page',
87
+ inputSchema: z.object({
88
+ tabId: z.string().optional().describe('Tab ID (optional)'),
89
+ ignoreCache: z.boolean().optional().default(false).describe('Ignore cache when reloading')
90
+ }),
91
+ handler: async ({ tabId, ignoreCache }) => {
92
+ const client = await connector.getTabClient(tabId);
93
+ const { Page } = client;
94
+ await Page.enable();
95
+ await Page.reload({ ignoreCache });
96
+ await Page.loadEventFired();
97
+ await humanDelay();
98
+ return {
99
+ success: true,
100
+ message: `Page reloaded${ignoreCache ? ' (cache ignored)' : ''}`
101
+ };
102
+ }
103
+ },
104
+ // List tabs
105
+ {
106
+ name: 'list_tabs',
107
+ description: 'List all open tabs',
108
+ inputSchema: z.object({}),
109
+ handler: async () => {
110
+ const tabs = await connector.listTabs();
111
+ return {
112
+ success: true,
113
+ count: tabs.length,
114
+ tabs: tabs.map(t => ({
115
+ id: t.id,
116
+ title: t.title,
117
+ url: t.url
118
+ }))
119
+ };
120
+ }
121
+ },
122
+ // Create new tab
123
+ {
124
+ name: 'create_tab',
125
+ description: 'Create a new tab',
126
+ inputSchema: z.object({
127
+ url: z.string().optional().describe('URL to open in new tab (optional)')
128
+ }),
129
+ handler: async ({ url }) => {
130
+ const newTab = await connector.createTab(url);
131
+ await humanDelay();
132
+ return {
133
+ success: true,
134
+ tab: {
135
+ id: newTab.id,
136
+ url: newTab.url,
137
+ title: newTab.title
138
+ },
139
+ message: `Created new tab${url ? ` with URL: ${url}` : ''}`
140
+ };
141
+ }
142
+ },
143
+ // Close tab
144
+ {
145
+ name: 'close_tab',
146
+ description: 'Close a tab by ID',
147
+ inputSchema: z.object({
148
+ tabId: z.string().describe('Tab ID to close')
149
+ }),
150
+ handler: async ({ tabId }) => {
151
+ await connector.closeTab(tabId);
152
+ await humanDelay();
153
+ return {
154
+ success: true,
155
+ message: `Closed tab ${tabId}`
156
+ };
157
+ }
158
+ },
159
+ // Activate/switch to tab
160
+ {
161
+ name: 'switch_tab',
162
+ description: 'Switch to a specific tab',
163
+ inputSchema: z.object({
164
+ tabId: z.string().describe('Tab ID to switch to')
165
+ }),
166
+ handler: async ({ tabId }) => {
167
+ await connector.activateTab(tabId);
168
+ await humanDelay();
169
+ return {
170
+ success: true,
171
+ message: `Switched to tab ${tabId}`
172
+ };
173
+ }
174
+ },
175
+ // Get current URL
176
+ {
177
+ name: 'get_url',
178
+ description: 'Get the current URL of the page',
179
+ inputSchema: z.object({
180
+ tabId: z.string().optional().describe('Tab ID (optional)')
181
+ }),
182
+ handler: async ({ tabId }) => {
183
+ const client = await connector.getTabClient(tabId);
184
+ const { Page } = client;
185
+ await Page.enable();
186
+ const { frameTree } = await Page.getFrameTree();
187
+ return {
188
+ success: true,
189
+ url: frameTree.frame.url,
190
+ title: frameTree.frame.name || 'Untitled'
191
+ };
192
+ }
193
+ }
194
+ ];
195
+ }
196
+ //# sourceMappingURL=navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/tools/navigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Playwright Launcher Tool
3
+ * Launch Chrome with user profile using Playwright
4
+ */
5
+ import { z } from 'zod';
6
+ import type { ChromeConnector } from '../chrome-connector.js';
7
+ export declare function createPlaywrightLauncherTools(connector: ChromeConnector): ({
8
+ name: string;
9
+ description: string;
10
+ inputSchema: z.ZodObject<{
11
+ profileDirectory: z.ZodDefault<z.ZodOptional<z.ZodString>>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ profileDirectory: string;
14
+ }, {
15
+ profileDirectory?: string | undefined;
16
+ }>;
17
+ handler: ({ profileDirectory }: any) => Promise<{
18
+ success: boolean;
19
+ message: string;
20
+ cdpPort: number;
21
+ error?: undefined;
22
+ } | {
23
+ success: boolean;
24
+ error: string;
25
+ message?: undefined;
26
+ cdpPort?: undefined;
27
+ }>;
28
+ } | {
29
+ name: string;
30
+ description: string;
31
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
32
+ handler: () => Promise<{
33
+ success: boolean;
34
+ message: string;
35
+ error?: undefined;
36
+ } | {
37
+ success: boolean;
38
+ error: string;
39
+ message?: undefined;
40
+ }>;
41
+ } | {
42
+ name: string;
43
+ description: string;
44
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
45
+ handler: () => Promise<{
46
+ success: boolean;
47
+ connected: boolean;
48
+ playwrightManaged: boolean;
49
+ port: number;
50
+ status: string;
51
+ }>;
52
+ })[];
53
+ //# sourceMappingURL=playwright-launcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-launcher.d.ts","sourceRoot":"","sources":["../../src/tools/playwright-launcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,eAAe;;;;;;;;;;oCA4C5B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA0E9C"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Playwright Launcher Tool
3
+ * Launch Chrome with user profile using Playwright
4
+ */
5
+ import { z } from 'zod';
6
+ export function createPlaywrightLauncherTools(connector) {
7
+ return [
8
+ {
9
+ name: 'launch_chrome_with_profile',
10
+ description: 'Launch Chrome using Playwright with your user profile (keeps cookies, sessions, extensions). This is the recommended way to start Chrome.',
11
+ inputSchema: z.object({
12
+ profileDirectory: z.string().optional().default('Default').describe('Profile directory name: "Default", "Profile 1", "Profile 2", etc.'),
13
+ userDataDir: z.string().optional().describe('Full path to Chrome User Data directory. Leave empty for default location.')
14
+ }),
15
+ handler: async ({ profileDirectory, userDataDir }) => {
16
+ try {
17
+ const options = {
18
+ headless: false,
19
+ profileDirectory
20
+ };
21
+ if (userDataDir) {
22
+ options.userDataDir = userDataDir;
23
+ }
24
+ await connector.launchWithProfile(options);
25
+ return {
26
+ success: true,
27
+ message: `Chrome launched with profile: ${profileDirectory}`,
28
+ cdpPort: connector.getPort(),
29
+ note: 'Chrome is now running with all your cookies, sessions, and extensions. Use other MCP tools to interact with it.'
30
+ };
31
+ }
32
+ catch (error) {
33
+ return {
34
+ success: false,
35
+ error: error.message,
36
+ suggestion: 'Make sure Chrome is not already running. Close all Chrome windows and try again.'
37
+ };
38
+ }
39
+ }
40
+ },
41
+ {
42
+ name: 'launch_edge_with_profile',
43
+ description: 'Launch Microsoft Edge using Playwright with your user profile',
44
+ inputSchema: z.object({
45
+ profileDirectory: z.string().optional().default('Default').describe('Profile directory name')
46
+ }),
47
+ handler: async ({ profileDirectory }) => {
48
+ try {
49
+ const edgeUserData = `${process.env.LOCALAPPDATA}\\Microsoft\\Edge\\User Data`;
50
+ const edgeExe = 'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe';
51
+ await connector.launchWithProfile({
52
+ headless: false,
53
+ profileDirectory,
54
+ userDataDir: edgeUserData,
55
+ executablePath: edgeExe
56
+ });
57
+ return {
58
+ success: true,
59
+ message: `Edge launched with profile: ${profileDirectory}`,
60
+ cdpPort: connector.getPort()
61
+ };
62
+ }
63
+ catch (error) {
64
+ return {
65
+ success: false,
66
+ error: error.message
67
+ };
68
+ }
69
+ }
70
+ },
71
+ {
72
+ name: 'close_browser',
73
+ description: 'Close the Playwright-managed browser instance',
74
+ inputSchema: z.object({}),
75
+ handler: async () => {
76
+ try {
77
+ if (!connector.isPlaywrightManaged()) {
78
+ return {
79
+ success: false,
80
+ message: 'No Playwright-managed browser to close'
81
+ };
82
+ }
83
+ await connector.disconnect();
84
+ return {
85
+ success: true,
86
+ message: 'Browser closed successfully'
87
+ };
88
+ }
89
+ catch (error) {
90
+ return {
91
+ success: false,
92
+ error: error.message
93
+ };
94
+ }
95
+ }
96
+ },
97
+ {
98
+ name: 'get_browser_status',
99
+ description: 'Check if browser is running and how it was launched',
100
+ inputSchema: z.object({}),
101
+ handler: async () => {
102
+ const isConnected = connector.isConnected();
103
+ const isPlaywright = connector.isPlaywrightManaged();
104
+ return {
105
+ success: true,
106
+ connected: isConnected,
107
+ playwrightManaged: isPlaywright,
108
+ port: connector.getPort(),
109
+ status: isConnected
110
+ ? (isPlaywright ? 'Running via Playwright' : 'Connected to external Chrome')
111
+ : 'Not connected'
112
+ };
113
+ }
114
+ }
115
+ ];
116
+ }
117
+ //# sourceMappingURL=playwright-launcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-launcher.js","sourceRoot":"","sources":["../../src/tools/playwright-launcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Service Worker Management Tools
3
+ */
4
+ import { z } from 'zod';
5
+ import type { ChromeConnector } from '../chrome-connector.js';
6
+ export declare function createServiceWorkerTools(connector: ChromeConnector): ({
7
+ name: string;
8
+ description: string;
9
+ inputSchema: z.ZodObject<{
10
+ tabId: z.ZodOptional<z.ZodString>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ tabId?: string | undefined;
13
+ }, {
14
+ tabId?: string | undefined;
15
+ }>;
16
+ handler: ({ tabId }: any) => Promise<{
17
+ success: boolean;
18
+ count: any;
19
+ workers: any;
20
+ }>;
21
+ } | {
22
+ name: string;
23
+ description: string;
24
+ inputSchema: z.ZodObject<{
25
+ targetId: z.ZodString;
26
+ executeTestLogs: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
27
+ captureTimeMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
28
+ }, "strip", z.ZodTypeAny, {
29
+ targetId: string;
30
+ executeTestLogs: boolean;
31
+ captureTimeMs: number;
32
+ }, {
33
+ targetId: string;
34
+ executeTestLogs?: boolean | undefined;
35
+ captureTimeMs?: number | undefined;
36
+ }>;
37
+ handler: ({ targetId, executeTestLogs, captureTimeMs }: any) => Promise<{
38
+ success: boolean;
39
+ targetId: any;
40
+ status: any;
41
+ capturedLogs: {
42
+ time: string;
43
+ source: string;
44
+ type: string;
45
+ message: string;
46
+ }[];
47
+ summary: {
48
+ totalCaptured: number;
49
+ byType: any;
50
+ bySource: any;
51
+ };
52
+ note: string;
53
+ }>;
54
+ } | {
55
+ name: string;
56
+ description: string;
57
+ inputSchema: z.ZodObject<{
58
+ versionId: z.ZodString;
59
+ tabId: z.ZodOptional<z.ZodString>;
60
+ }, "strip", z.ZodTypeAny, {
61
+ versionId: string;
62
+ tabId?: string | undefined;
63
+ }, {
64
+ versionId: string;
65
+ tabId?: string | undefined;
66
+ }>;
67
+ handler: ({ versionId, tabId }: any) => Promise<{
68
+ success: boolean;
69
+ worker: {
70
+ registrationId: any;
71
+ scopeURL: any;
72
+ scriptURL: any;
73
+ status: any;
74
+ versionId: any;
75
+ runningStatus: any;
76
+ };
77
+ }>;
78
+ } | {
79
+ name: string;
80
+ description: string;
81
+ inputSchema: z.ZodObject<{
82
+ scopeURL: z.ZodString;
83
+ tabId: z.ZodOptional<z.ZodString>;
84
+ }, "strip", z.ZodTypeAny, {
85
+ scopeURL: string;
86
+ tabId?: string | undefined;
87
+ }, {
88
+ scopeURL: string;
89
+ tabId?: string | undefined;
90
+ }>;
91
+ handler: ({ scopeURL, tabId }: any) => Promise<{
92
+ success: any;
93
+ message: string;
94
+ }>;
95
+ } | {
96
+ name: string;
97
+ description: string;
98
+ inputSchema: z.ZodObject<{
99
+ versionId: z.ZodString;
100
+ tabId: z.ZodOptional<z.ZodString>;
101
+ }, "strip", z.ZodTypeAny, {
102
+ versionId: string;
103
+ tabId?: string | undefined;
104
+ }, {
105
+ versionId: string;
106
+ tabId?: string | undefined;
107
+ }>;
108
+ handler: ({ versionId, tabId }: any) => Promise<{
109
+ success: boolean;
110
+ message: string;
111
+ }>;
112
+ } | {
113
+ name: string;
114
+ description: string;
115
+ inputSchema: z.ZodObject<{
116
+ tabId: z.ZodOptional<z.ZodString>;
117
+ }, "strip", z.ZodTypeAny, {
118
+ tabId?: string | undefined;
119
+ }, {
120
+ tabId?: string | undefined;
121
+ }>;
122
+ handler: ({ tabId }: any) => Promise<{
123
+ success: boolean;
124
+ count: any;
125
+ caches: any;
126
+ }>;
127
+ })[];
128
+ //# sourceMappingURL=service-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-worker.d.ts","sourceRoot":"","sources":["../../src/tools/service-worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,eAAe;;;;;;;;;;yBASlC,GAAG;;;;;;;;;;;;;;;;;;;;;4DA2C8C,GAAG;;;;;kBASpD,MAAM;oBAAU,MAAM;kBAAQ,MAAM;qBAAW,MAAM;;;;;;;;;;;;;;;;;;;;;;oCAwG1C,GAAG;;;;;;;;;;;;;;;;;;;;;;;;mCAmCJ,GAAG;;;;;;;;;;;;;;;;;oCAgGF,GAAG;;;;;;;;;;;;;;yBAiEd,GAAG;;;;;KAoBnC"}