@cloudbase/agent-tools 0.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 (194) hide show
  1. package/CHANGELOG.md +416 -0
  2. package/dist/agent_tool.d.ts +7 -0
  3. package/dist/agent_tool.d.ts.map +1 -0
  4. package/dist/agent_tool.js +16 -0
  5. package/dist/agent_tool.js.map +1 -0
  6. package/dist/bash/bash-tool.d.ts +61 -0
  7. package/dist/bash/bash-tool.d.ts.map +1 -0
  8. package/dist/bash/bash-tool.js +191 -0
  9. package/dist/bash/bash-tool.js.map +1 -0
  10. package/dist/bash/index.d.ts +7 -0
  11. package/dist/bash/index.d.ts.map +1 -0
  12. package/dist/bash/index.js +17 -0
  13. package/dist/bash/index.js.map +1 -0
  14. package/dist/bash/operator/base-operator.d.ts +44 -0
  15. package/dist/bash/operator/base-operator.d.ts.map +1 -0
  16. package/dist/bash/operator/base-operator.js +14 -0
  17. package/dist/bash/operator/base-operator.js.map +1 -0
  18. package/dist/bash/operator/local-operator.d.ts +15 -0
  19. package/dist/bash/operator/local-operator.d.ts.map +1 -0
  20. package/dist/bash/operator/local-operator.js +145 -0
  21. package/dist/bash/operator/local-operator.js.map +1 -0
  22. package/dist/bash/operator/sandbox-operator.d.ts +22 -0
  23. package/dist/bash/operator/sandbox-operator.d.ts.map +1 -0
  24. package/dist/bash/operator/sandbox-operator.js +112 -0
  25. package/dist/bash/operator/sandbox-operator.js.map +1 -0
  26. package/dist/bash/utils.d.ts +106 -0
  27. package/dist/bash/utils.d.ts.map +1 -0
  28. package/dist/bash/utils.js +197 -0
  29. package/dist/bash/utils.js.map +1 -0
  30. package/dist/browser/browser-instance-manager.d.ts +79 -0
  31. package/dist/browser/browser-instance-manager.d.ts.map +1 -0
  32. package/dist/browser/browser-instance-manager.js +242 -0
  33. package/dist/browser/browser-instance-manager.js.map +1 -0
  34. package/dist/browser/browser-tool-executor.d.ts +57 -0
  35. package/dist/browser/browser-tool-executor.d.ts.map +1 -0
  36. package/dist/browser/browser-tool-executor.js +205 -0
  37. package/dist/browser/browser-tool-executor.js.map +1 -0
  38. package/dist/browser/browser_client_unified.d.ts +52 -0
  39. package/dist/browser/browser_client_unified.d.ts.map +1 -0
  40. package/dist/browser/browser_client_unified.js +381 -0
  41. package/dist/browser/browser_client_unified.js.map +1 -0
  42. package/dist/browser/browser_tool_unified.d.ts +93 -0
  43. package/dist/browser/browser_tool_unified.d.ts.map +1 -0
  44. package/dist/browser/browser_tool_unified.js +181 -0
  45. package/dist/browser/browser_tool_unified.js.map +1 -0
  46. package/dist/browser/index.d.ts +7 -0
  47. package/dist/browser/index.d.ts.map +1 -0
  48. package/dist/browser/index.js +19 -0
  49. package/dist/browser/index.js.map +1 -0
  50. package/dist/browser/sandbox-connector.d.ts +93 -0
  51. package/dist/browser/sandbox-connector.d.ts.map +1 -0
  52. package/dist/browser/sandbox-connector.js +272 -0
  53. package/dist/browser/sandbox-connector.js.map +1 -0
  54. package/dist/browser/types.d.ts +53 -0
  55. package/dist/browser/types.d.ts.map +1 -0
  56. package/dist/browser/types.js +3 -0
  57. package/dist/browser/types.js.map +1 -0
  58. package/dist/code_executers/base_code_executor.d.ts +17 -0
  59. package/dist/code_executers/base_code_executor.d.ts.map +1 -0
  60. package/dist/code_executers/base_code_executor.js +20 -0
  61. package/dist/code_executers/base_code_executor.js.map +1 -0
  62. package/dist/code_executers/built_in_code_executor.d.ts +25 -0
  63. package/dist/code_executers/built_in_code_executor.d.ts.map +1 -0
  64. package/dist/code_executers/built_in_code_executor.js +106 -0
  65. package/dist/code_executers/built_in_code_executor.js.map +1 -0
  66. package/dist/code_executers/unsafe_local_code_executor.d.ts +118 -0
  67. package/dist/code_executers/unsafe_local_code_executor.d.ts.map +1 -0
  68. package/dist/code_executers/unsafe_local_code_executor.js +605 -0
  69. package/dist/code_executers/unsafe_local_code_executor.js.map +1 -0
  70. package/dist/fs/edit-tool.d.ts +26 -0
  71. package/dist/fs/edit-tool.d.ts.map +1 -0
  72. package/dist/fs/edit-tool.js +202 -0
  73. package/dist/fs/edit-tool.js.map +1 -0
  74. package/dist/fs/glob-tool.d.ts +31 -0
  75. package/dist/fs/glob-tool.d.ts.map +1 -0
  76. package/dist/fs/glob-tool.js +287 -0
  77. package/dist/fs/glob-tool.js.map +1 -0
  78. package/dist/fs/grep-tool.d.ts +32 -0
  79. package/dist/fs/grep-tool.d.ts.map +1 -0
  80. package/dist/fs/grep-tool.js +353 -0
  81. package/dist/fs/grep-tool.js.map +1 -0
  82. package/dist/fs/index.d.ts +11 -0
  83. package/dist/fs/index.d.ts.map +1 -0
  84. package/dist/fs/index.js +38 -0
  85. package/dist/fs/index.js.map +1 -0
  86. package/dist/fs/ls-tool.d.ts +26 -0
  87. package/dist/fs/ls-tool.d.ts.map +1 -0
  88. package/dist/fs/ls-tool.js +235 -0
  89. package/dist/fs/ls-tool.js.map +1 -0
  90. package/dist/fs/multiedit-tool.d.ts +34 -0
  91. package/dist/fs/multiedit-tool.d.ts.map +1 -0
  92. package/dist/fs/multiedit-tool.js +158 -0
  93. package/dist/fs/multiedit-tool.js.map +1 -0
  94. package/dist/fs/operator/base-operator.d.ts +28 -0
  95. package/dist/fs/operator/base-operator.d.ts.map +1 -0
  96. package/dist/fs/operator/base-operator.js +21 -0
  97. package/dist/fs/operator/base-operator.js.map +1 -0
  98. package/dist/fs/operator/in-memory-operator.d.ts +39 -0
  99. package/dist/fs/operator/in-memory-operator.d.ts.map +1 -0
  100. package/dist/fs/operator/in-memory-operator.js +115 -0
  101. package/dist/fs/operator/in-memory-operator.js.map +1 -0
  102. package/dist/fs/operator/index.d.ts +6 -0
  103. package/dist/fs/operator/index.d.ts.map +1 -0
  104. package/dist/fs/operator/index.js +28 -0
  105. package/dist/fs/operator/index.js.map +1 -0
  106. package/dist/fs/operator/local-operator.d.ts +25 -0
  107. package/dist/fs/operator/local-operator.d.ts.map +1 -0
  108. package/dist/fs/operator/local-operator.js +62 -0
  109. package/dist/fs/operator/local-operator.js.map +1 -0
  110. package/dist/fs/operator/sanbox-operator.d.ts +31 -0
  111. package/dist/fs/operator/sanbox-operator.d.ts.map +1 -0
  112. package/dist/fs/operator/sanbox-operator.js +172 -0
  113. package/dist/fs/operator/sanbox-operator.js.map +1 -0
  114. package/dist/fs/operator/transaction/index.d.ts +6 -0
  115. package/dist/fs/operator/transaction/index.d.ts.map +1 -0
  116. package/dist/fs/operator/transaction/index.js +28 -0
  117. package/dist/fs/operator/transaction/index.js.map +1 -0
  118. package/dist/fs/operator/transaction/snapshot-strategies.d.ts +54 -0
  119. package/dist/fs/operator/transaction/snapshot-strategies.d.ts.map +1 -0
  120. package/dist/fs/operator/transaction/snapshot-strategies.js +278 -0
  121. package/dist/fs/operator/transaction/snapshot-strategies.js.map +1 -0
  122. package/dist/fs/operator/transaction/transaction-operator.d.ts +53 -0
  123. package/dist/fs/operator/transaction/transaction-operator.d.ts.map +1 -0
  124. package/dist/fs/operator/transaction/transaction-operator.js +195 -0
  125. package/dist/fs/operator/transaction/transaction-operator.js.map +1 -0
  126. package/dist/fs/operator/transaction/transaction-utils.d.ts +80 -0
  127. package/dist/fs/operator/transaction/transaction-utils.d.ts.map +1 -0
  128. package/dist/fs/operator/transaction/transaction-utils.js +156 -0
  129. package/dist/fs/operator/transaction/transaction-utils.js.map +1 -0
  130. package/dist/fs/read-tool.d.ts +32 -0
  131. package/dist/fs/read-tool.d.ts.map +1 -0
  132. package/dist/fs/read-tool.js +271 -0
  133. package/dist/fs/read-tool.js.map +1 -0
  134. package/dist/fs/str-replace-editor.d.ts +23 -0
  135. package/dist/fs/str-replace-editor.d.ts.map +1 -0
  136. package/dist/fs/str-replace-editor.js +74 -0
  137. package/dist/fs/str-replace-editor.js.map +1 -0
  138. package/dist/fs/toolkit.d.ts +61 -0
  139. package/dist/fs/toolkit.d.ts.map +1 -0
  140. package/dist/fs/toolkit.js +113 -0
  141. package/dist/fs/toolkit.js.map +1 -0
  142. package/dist/fs/utils.d.ts +32 -0
  143. package/dist/fs/utils.d.ts.map +1 -0
  144. package/dist/fs/utils.js +133 -0
  145. package/dist/fs/utils.js.map +1 -0
  146. package/dist/fs/write-tool.d.ts +26 -0
  147. package/dist/fs/write-tool.d.ts.map +1 -0
  148. package/dist/fs/write-tool.js +110 -0
  149. package/dist/fs/write-tool.js.map +1 -0
  150. package/dist/index.d.ts +10 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +40 -0
  153. package/dist/index.js.map +1 -0
  154. package/dist/mcp/agkit-mcp-server.d.ts +291 -0
  155. package/dist/mcp/agkit-mcp-server.d.ts.map +1 -0
  156. package/dist/mcp/agkit-mcp-server.js +821 -0
  157. package/dist/mcp/agkit-mcp-server.js.map +1 -0
  158. package/dist/mcp/client-tool.d.ts +65 -0
  159. package/dist/mcp/client-tool.d.ts.map +1 -0
  160. package/dist/mcp/client-tool.js +220 -0
  161. package/dist/mcp/client-tool.js.map +1 -0
  162. package/dist/mcp/index.d.ts +14 -0
  163. package/dist/mcp/index.d.ts.map +1 -0
  164. package/dist/mcp/index.js +26 -0
  165. package/dist/mcp/index.js.map +1 -0
  166. package/dist/mcp/mcp-client-manager.d.ts +153 -0
  167. package/dist/mcp/mcp-client-manager.d.ts.map +1 -0
  168. package/dist/mcp/mcp-client-manager.js +606 -0
  169. package/dist/mcp/mcp-client-manager.js.map +1 -0
  170. package/dist/mcp/mcp-toolkit.d.ts +112 -0
  171. package/dist/mcp/mcp-toolkit.d.ts.map +1 -0
  172. package/dist/mcp/mcp-toolkit.js +188 -0
  173. package/dist/mcp/mcp-toolkit.js.map +1 -0
  174. package/dist/mcp/types.d.ts +157 -0
  175. package/dist/mcp/types.d.ts.map +1 -0
  176. package/dist/mcp/types.js +34 -0
  177. package/dist/mcp/types.js.map +1 -0
  178. package/dist/mcp/utils.d.ts +17 -0
  179. package/dist/mcp/utils.d.ts.map +1 -0
  180. package/dist/mcp/utils.js +48 -0
  181. package/dist/mcp/utils.js.map +1 -0
  182. package/dist/types/index.d.ts +31 -0
  183. package/dist/types/index.d.ts.map +1 -0
  184. package/dist/types/index.js +3 -0
  185. package/dist/types/index.js.map +1 -0
  186. package/dist/types/zod.d.ts +18 -0
  187. package/dist/types/zod.d.ts.map +1 -0
  188. package/dist/types/zod.js +3 -0
  189. package/dist/types/zod.js.map +1 -0
  190. package/dist/utils.d.ts +141 -0
  191. package/dist/utils.d.ts.map +1 -0
  192. package/dist/utils.js +379 -0
  193. package/dist/utils.js.map +1 -0
  194. package/package.json +46 -0
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrowserToolExecutor = void 0;
4
+ /**
5
+ * Shared browser tool executor
6
+ * Handles all Playwright operations regardless of connection method
7
+ */
8
+ class BrowserToolExecutor {
9
+ constructor(pageProvider) {
10
+ this.pageProvider = pageProvider;
11
+ }
12
+ /**
13
+ * Get list of available tools
14
+ */
15
+ listTools() {
16
+ return [
17
+ { name: 'browser_navigate', description: 'Navigate to a URL' },
18
+ { name: 'browser_click', description: 'Click an element' },
19
+ { name: 'browser_snapshot', description: 'Take a snapshot of the page' },
20
+ { name: 'browser_type', description: 'Type text into an element' },
21
+ { name: 'browser_take_screenshot', description: 'Take a screenshot' },
22
+ { name: 'browser_wait_for', description: 'Wait for an element or condition' },
23
+ { name: 'browser_tabs', description: 'Manage browser tabs' },
24
+ { name: 'browser_fill_form', description: 'Fill a form' },
25
+ { name: 'browser_evaluate', description: 'Execute JavaScript' },
26
+ { name: 'browser_scroll', description: 'Scroll the page' },
27
+ { name: 'browser_upload', description: 'Upload a file' },
28
+ { name: 'browser_download', description: 'Download a file' },
29
+ ];
30
+ }
31
+ /**
32
+ * Execute a browser tool
33
+ */
34
+ async executeTool(toolCall) {
35
+ try {
36
+ const result = await this.executePlaywrightTool(toolCall);
37
+ return {
38
+ content: [{
39
+ type: 'text',
40
+ text: JSON.stringify(result, null, 2)
41
+ }],
42
+ isError: false
43
+ };
44
+ }
45
+ catch (error) {
46
+ const errorMessage = error instanceof Error ? error.message : String(error);
47
+ console.error(`Failed to execute tool ${toolCall.name}:`, error);
48
+ return {
49
+ content: [{
50
+ type: 'text',
51
+ text: `Error executing ${toolCall.name}: ${errorMessage}`
52
+ }],
53
+ isError: true
54
+ };
55
+ }
56
+ }
57
+ /**
58
+ * Execute Playwright tool operations
59
+ */
60
+ async executePlaywrightTool(toolCall) {
61
+ const { name, arguments: args = {} } = toolCall;
62
+ switch (name) {
63
+ case 'browser_navigate': {
64
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
65
+ await page.goto(args.url, {
66
+ timeout: args.timeout,
67
+ waitUntil: args.waitUntil || 'load',
68
+ });
69
+ return {
70
+ url: page.url(),
71
+ title: await page.title(),
72
+ };
73
+ }
74
+ case 'browser_click': {
75
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
76
+ await page.click(args.selector || args.element, { timeout: args.timeout });
77
+ return { success: true };
78
+ }
79
+ case 'browser_type': {
80
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
81
+ await page.fill(args.selector || args.element, args.text, { timeout: args.timeout });
82
+ return { success: true };
83
+ }
84
+ case 'browser_take_screenshot':
85
+ case 'browser_snapshot': {
86
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
87
+ const screenshot = await page.screenshot({
88
+ fullPage: args.fullPage ?? true,
89
+ type: args.type || 'png',
90
+ });
91
+ return {
92
+ screenshot: screenshot.toString('base64'),
93
+ mimeType: 'image/png'
94
+ };
95
+ }
96
+ case 'browser_wait_for': {
97
+ if (args.selector) {
98
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
99
+ await page.waitForSelector(args.selector, {
100
+ timeout: args.timeout,
101
+ state: args.state,
102
+ });
103
+ }
104
+ return { success: true };
105
+ }
106
+ case 'browser_tabs':
107
+ return await this.handleTabsOperation(args);
108
+ case 'browser_evaluate': {
109
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
110
+ const result = await page.evaluate((js) => {
111
+ const func = new Function(js);
112
+ return func();
113
+ }, args.script || args.javascript);
114
+ return result;
115
+ }
116
+ case 'browser_scroll': {
117
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
118
+ if (args.selector) {
119
+ await page.locator(args.selector).scrollIntoViewIfNeeded({ timeout: args.timeout });
120
+ }
121
+ else {
122
+ await page.evaluate(() => {
123
+ window.scrollTo(0, document.body.scrollHeight);
124
+ });
125
+ }
126
+ return { success: true };
127
+ }
128
+ case 'browser_upload': {
129
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
130
+ await page.setInputFiles(args.selector, args.filePath, { timeout: args.timeout });
131
+ return { success: true };
132
+ }
133
+ case 'browser_download': {
134
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
135
+ const downloadPromise = page.waitForEvent('download', { timeout: args.timeout });
136
+ if (args.selector) {
137
+ await page.click(args.selector);
138
+ }
139
+ const download = await downloadPromise;
140
+ const downloadPath = `/tmp/${download.suggestedFilename()}`;
141
+ await download.saveAs(downloadPath);
142
+ return {
143
+ filePath: downloadPath,
144
+ filename: download.suggestedFilename(),
145
+ };
146
+ }
147
+ case 'browser_fill_form': {
148
+ if (args.fields && Array.isArray(args.fields)) {
149
+ const page = this.pageProvider.getPage(args.pageIndex || 0);
150
+ for (const field of args.fields) {
151
+ await page.fill(field.selector || field.element, field.value);
152
+ }
153
+ }
154
+ return { success: true };
155
+ }
156
+ default:
157
+ throw new Error(`Unknown tool: ${name}`);
158
+ }
159
+ }
160
+ /**
161
+ * Handle tabs operations
162
+ */
163
+ async handleTabsOperation(args) {
164
+ switch (args.action) {
165
+ case 'list': {
166
+ const pages = this.pageProvider.getPages();
167
+ return {
168
+ tabs: pages.map((page, index) => ({
169
+ index,
170
+ url: page.url(),
171
+ title: page.isClosed() ? 'Closed' : 'Active'
172
+ }))
173
+ };
174
+ }
175
+ case 'create': {
176
+ const newPage = await this.pageProvider.createPage();
177
+ if (args.url) {
178
+ await newPage.goto(args.url);
179
+ }
180
+ return {
181
+ success: true,
182
+ pageIndex: this.pageProvider.getPages().length - 1
183
+ };
184
+ }
185
+ case 'close': {
186
+ if (typeof args.index === 'number') {
187
+ await this.pageProvider.closePage(args.index);
188
+ }
189
+ return { success: true };
190
+ }
191
+ case 'select': {
192
+ // Note: Playwright doesn't have a direct "select tab" concept
193
+ // The pageIndex parameter in other operations handles this
194
+ return {
195
+ success: true,
196
+ message: 'Use pageIndex parameter in other operations to target specific tabs'
197
+ };
198
+ }
199
+ default:
200
+ throw new Error(`Unknown tabs action: ${args.action}`);
201
+ }
202
+ }
203
+ }
204
+ exports.BrowserToolExecutor = BrowserToolExecutor;
205
+ //# sourceMappingURL=browser-tool-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-tool-executor.js","sourceRoot":"","sources":["../../src/browser/browser-tool-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { Browser, BrowserContext } from 'playwright';
2
+ import { BrowserToolCall, BrowserToolResult } from './browser-tool-executor';
3
+ /**
4
+ * Unified browser client configuration
5
+ */
6
+ export interface BrowserClientConfig {
7
+ mode: 'local' | 'sandbox';
8
+ browser?: string;
9
+ caps?: string[];
10
+ allowedHosts?: string[];
11
+ allowedOrigins?: string[];
12
+ blockedOrigins?: string[];
13
+ blockServiceWorkers?: boolean;
14
+ timeout?: number;
15
+ apiKey?: string;
16
+ domain?: string;
17
+ mcpServerPort?: number;
18
+ sessionId?: string;
19
+ maxInstances?: number;
20
+ instanceTtl?: number;
21
+ cleanupInterval?: number;
22
+ }
23
+ /**
24
+ * MCP tool call interface (alias for BrowserToolCall)
25
+ */
26
+ export interface MCPToolCall extends BrowserToolCall {
27
+ }
28
+ /**
29
+ * MCP tool result interface (alias for BrowserToolResult)
30
+ */
31
+ export interface MCPToolResult extends BrowserToolResult {
32
+ }
33
+ /**
34
+ * Unified Browser Client Factory
35
+ * Creates the appropriate client based on configuration
36
+ */
37
+ export declare class UnifiedBrowserClient {
38
+ private client;
39
+ constructor(config: BrowserClientConfig);
40
+ start(): Promise<void>;
41
+ stop(): Promise<void>;
42
+ callTool(toolCall: MCPToolCall): Promise<MCPToolResult>;
43
+ listTools(): Promise<any[]>;
44
+ isReady(): boolean;
45
+ getVncUrl(): string | undefined;
46
+ getCdpUrl(): string | undefined;
47
+ getBrowser(): Browser | null;
48
+ getContext(): BrowserContext | null;
49
+ on(event: string, listener: (...args: any[]) => void): this;
50
+ off(event: string, listener: (...args: any[]) => void): this;
51
+ }
52
+ //# sourceMappingURL=browser_client_unified.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser_client_unified.d.ts","sourceRoot":"","sources":["../../src/browser/browser_client_unified.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,OAAO,EAAE,cAAc,EAAQ,MAAM,YAAY,CAAA;AAGpE,OAAO,EAGL,eAAe,EACf,iBAAiB,EAClB,MAAM,yBAAyB,CAAA;AAEhC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAElC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;IAGzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAGhB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,eAAe;CAAG;AAEvD;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,iBAAiB;CAAG;AA2X3D;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,EAAE,mBAAmB;IAQjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAIvD,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAIjC,OAAO,IAAI,OAAO;IAKlB,SAAS,IAAI,MAAM,GAAG,SAAS;IAO/B,SAAS,IAAI,MAAM,GAAG,SAAS;IAO/B,UAAU,IAAI,OAAO,GAAG,IAAI;IAO5B,UAAU,IAAI,cAAc,GAAG,IAAI;IAQnC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAK3D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;CAI7D"}
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnifiedBrowserClient = void 0;
4
+ const cross_spawn_1 = require("cross-spawn");
5
+ const events_1 = require("events");
6
+ const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
7
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
8
+ const browser_instance_manager_1 = require("./browser-instance-manager");
9
+ const browser_tool_executor_1 = require("./browser-tool-executor");
10
+ /**
11
+ * Abstract base class for browser clients
12
+ */
13
+ class BaseBrowserClient extends events_1.EventEmitter {
14
+ constructor(config) {
15
+ super();
16
+ this.isConnected = false;
17
+ this.config = config;
18
+ }
19
+ isReady() {
20
+ return this.isConnected;
21
+ }
22
+ }
23
+ /**
24
+ * Local Playwright MCP Client
25
+ * Manages a local @playwright/mcp server process
26
+ */
27
+ class LocalBrowserClient extends BaseBrowserClient {
28
+ constructor() {
29
+ super(...arguments);
30
+ this.mcpProcess = null;
31
+ this.client = null;
32
+ this.transport = null;
33
+ }
34
+ async start() {
35
+ if (this.isConnected)
36
+ return;
37
+ try {
38
+ // Build command arguments
39
+ const args = ['@playwright/mcp@latest'];
40
+ if (this.config.browser) {
41
+ args.push('--browser', this.config.browser);
42
+ }
43
+ if (this.config.caps?.length) {
44
+ args.push('--caps', this.config.caps.join(','));
45
+ }
46
+ if (this.config.allowedHosts?.length) {
47
+ args.push('--allowed-hosts', this.config.allowedHosts.join(','));
48
+ }
49
+ if (this.config.allowedOrigins?.length) {
50
+ args.push('--allowed-origins', this.config.allowedOrigins.join(';'));
51
+ }
52
+ if (this.config.blockedOrigins?.length) {
53
+ args.push('--blocked-origins', this.config.blockedOrigins.join(';'));
54
+ }
55
+ if (this.config.blockServiceWorkers) {
56
+ args.push('--block-service-workers');
57
+ }
58
+ // Start MCP server process
59
+ this.mcpProcess = (0, cross_spawn_1.spawn)('npx', args, {
60
+ stdio: ['pipe', 'pipe', 'pipe']
61
+ });
62
+ this.mcpProcess.stderr?.on('data', (data) => {
63
+ console.error('Playwright MCP Server Error:', data.toString());
64
+ });
65
+ this.mcpProcess.on('error', (error) => {
66
+ console.error('Failed to start Playwright MCP server:', error);
67
+ this.emit('error', error);
68
+ });
69
+ this.mcpProcess.on('exit', (code) => {
70
+ console.log(`Playwright MCP server exited with code ${code}`);
71
+ this.isConnected = false;
72
+ this.emit('disconnected');
73
+ });
74
+ // Create MCP transport and client
75
+ this.transport = new stdio_js_1.StdioClientTransport({
76
+ command: 'npx',
77
+ args: args
78
+ });
79
+ this.client = new index_js_1.Client({
80
+ name: 'ag-kit-browser-tool',
81
+ version: '1.0.0'
82
+ }, {
83
+ capabilities: {}
84
+ });
85
+ await this.client.connect(this.transport);
86
+ this.isConnected = true;
87
+ console.log('✅ Connected to local Playwright MCP server');
88
+ this.emit('connected');
89
+ }
90
+ catch (error) {
91
+ console.error('Failed to start local browser client:', error);
92
+ throw error;
93
+ }
94
+ }
95
+ async stop() {
96
+ try {
97
+ if (this.client) {
98
+ await this.client.close();
99
+ this.client = null;
100
+ }
101
+ if (this.transport) {
102
+ await this.transport.close();
103
+ this.transport = null;
104
+ }
105
+ if (this.mcpProcess) {
106
+ this.mcpProcess.kill();
107
+ this.mcpProcess = null;
108
+ }
109
+ this.isConnected = false;
110
+ console.log('✅ Local browser client stopped');
111
+ }
112
+ catch (error) {
113
+ console.error('Failed to stop local browser client:', error);
114
+ throw error;
115
+ }
116
+ }
117
+ async listTools() {
118
+ if (!this.client || !this.isConnected) {
119
+ throw new Error('MCP client not connected');
120
+ }
121
+ try {
122
+ const response = await this.client.listTools();
123
+ return response.tools;
124
+ }
125
+ catch (error) {
126
+ console.error('Failed to list tools:', error);
127
+ throw error;
128
+ }
129
+ }
130
+ async callTool(toolCall) {
131
+ if (!this.client || !this.isConnected) {
132
+ throw new Error('MCP client not connected');
133
+ }
134
+ try {
135
+ const response = await this.client.callTool({
136
+ name: toolCall.name,
137
+ arguments: toolCall.arguments || {}
138
+ });
139
+ return {
140
+ content: Array.isArray(response.content) ? response.content : [],
141
+ isError: Boolean(response.isError)
142
+ };
143
+ }
144
+ catch (error) {
145
+ console.error(`Failed to call tool ${toolCall.name}:`, error);
146
+ return {
147
+ content: [{
148
+ type: 'text',
149
+ text: `Error calling tool ${toolCall.name}: ${error.message}`
150
+ }],
151
+ isError: true
152
+ };
153
+ }
154
+ }
155
+ }
156
+ /**
157
+ * Sandbox Browser Client with Direct CDP Connection
158
+ * Uses SandboxConnector for direct connection without subprocess MCP server
159
+ */
160
+ class SandboxBrowserClient extends BaseBrowserClient {
161
+ constructor(config) {
162
+ super(config);
163
+ // Generate session ID if not provided
164
+ this.currentSessionId = config.sessionId || `session-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
165
+ // Initialize instance manager
166
+ this.instanceManager = new browser_instance_manager_1.BrowserInstanceManager({
167
+ apiKey: config.apiKey,
168
+ domain: config.domain,
169
+ timeout: config.timeout,
170
+ maxInstances: config.maxInstances || 10,
171
+ instanceTtl: config.instanceTtl || 3600,
172
+ cleanupInterval: config.cleanupInterval || 300,
173
+ });
174
+ // Initialize tool executor
175
+ this.toolExecutor = new browser_tool_executor_1.BrowserToolExecutor(this);
176
+ // Setup instance manager events
177
+ this.setupInstanceManagerEvents();
178
+ }
179
+ async start() {
180
+ if (this.isConnected)
181
+ return;
182
+ try {
183
+ // Get or create browser instance
184
+ const instanceInfo = await this.instanceManager.getInstance(this.currentSessionId);
185
+ this.currentConnector = instanceInfo.connector;
186
+ this.isConnected = true;
187
+ console.log('✅ Connected to sandbox browser client via direct CDP');
188
+ console.log(`Session ID: ${this.currentSessionId}`);
189
+ console.log(`Sandbox ID: ${instanceInfo.connectionInfo.sandboxId}`);
190
+ console.log(`VNC URL: ${instanceInfo.connectionInfo.vncUrl}`);
191
+ console.log(`CDP URL: ${instanceInfo.connectionInfo.cdpUrl}`);
192
+ this.emit('connected');
193
+ }
194
+ catch (error) {
195
+ console.error('Failed to start sandbox browser client:', error);
196
+ throw error;
197
+ }
198
+ }
199
+ async stop() {
200
+ try {
201
+ if (this.currentSessionId) {
202
+ await this.instanceManager.removeInstance(this.currentSessionId);
203
+ }
204
+ this.currentConnector = undefined;
205
+ this.isConnected = false;
206
+ console.log('✅ Sandbox browser client stopped');
207
+ this.emit('disconnected');
208
+ }
209
+ catch (error) {
210
+ console.error('Failed to stop sandbox browser client:', error);
211
+ throw error;
212
+ }
213
+ }
214
+ async listTools() {
215
+ return this.toolExecutor.listTools();
216
+ }
217
+ async callTool(toolCall) {
218
+ if (!this.currentConnector || !this.isConnected) {
219
+ return {
220
+ content: [{
221
+ type: 'text',
222
+ text: 'Browser client not connected'
223
+ }],
224
+ isError: true
225
+ };
226
+ }
227
+ return this.toolExecutor.executeTool(toolCall);
228
+ }
229
+ // BrowserPageProvider implementation
230
+ getPage(pageIndex = 0) {
231
+ if (!this.currentConnector) {
232
+ throw new Error('No connector available');
233
+ }
234
+ return this.currentConnector.getPage(pageIndex);
235
+ }
236
+ getPages() {
237
+ if (!this.currentConnector) {
238
+ return [];
239
+ }
240
+ return this.currentConnector.getPages();
241
+ }
242
+ async createPage() {
243
+ if (!this.currentConnector) {
244
+ throw new Error('No connector available');
245
+ }
246
+ return this.currentConnector.createPage();
247
+ }
248
+ async closePage(pageIndex) {
249
+ if (!this.currentConnector) {
250
+ throw new Error('No connector available');
251
+ }
252
+ return this.currentConnector.closePage(pageIndex);
253
+ }
254
+ getBrowser() {
255
+ return this.currentConnector?.getBrowser() || null;
256
+ }
257
+ getContext() {
258
+ return this.currentConnector?.getContext() || null;
259
+ }
260
+ /**
261
+ * Setup instance manager event handlers
262
+ */
263
+ setupInstanceManagerEvents() {
264
+ this.instanceManager.on('instance-error', (sessionId, error) => {
265
+ if (sessionId === this.currentSessionId) {
266
+ console.error(`Instance error for current session:`, error);
267
+ this.emit('error', error);
268
+ }
269
+ });
270
+ this.instanceManager.on('instance-disconnected', (sessionId) => {
271
+ if (sessionId === this.currentSessionId) {
272
+ console.log(`Current session disconnected: ${sessionId}`);
273
+ this.isConnected = false;
274
+ this.emit('disconnected');
275
+ }
276
+ });
277
+ this.instanceManager.on('instance-reconnected', (sessionId) => {
278
+ if (sessionId === this.currentSessionId) {
279
+ console.log(`Current session reconnected: ${sessionId}`);
280
+ this.isConnected = true;
281
+ this.emit('reconnected');
282
+ }
283
+ });
284
+ }
285
+ // Sandbox-specific methods
286
+ getVncUrl() {
287
+ return this.currentConnector?.getVncUrl();
288
+ }
289
+ getCdpUrl() {
290
+ return this.currentConnector?.getCdpUrl();
291
+ }
292
+ getSessionId() {
293
+ return this.currentSessionId;
294
+ }
295
+ getSandboxId() {
296
+ return this.currentConnector?.getSandboxId();
297
+ }
298
+ async healthCheck() {
299
+ if (!this.currentConnector || !this.isConnected) {
300
+ return false;
301
+ }
302
+ return await this.currentConnector.healthCheck();
303
+ }
304
+ async reconnect() {
305
+ if (!this.currentConnector) {
306
+ throw new Error('No connector available for reconnection');
307
+ }
308
+ await this.currentConnector.reconnect();
309
+ }
310
+ getInstanceManager() {
311
+ return this.instanceManager;
312
+ }
313
+ async cleanup() {
314
+ await this.instanceManager.cleanup();
315
+ }
316
+ }
317
+ /**
318
+ * Unified Browser Client Factory
319
+ * Creates the appropriate client based on configuration
320
+ */
321
+ class UnifiedBrowserClient {
322
+ constructor(config) {
323
+ if (config.mode === 'sandbox') {
324
+ this.client = new SandboxBrowserClient(config);
325
+ }
326
+ else {
327
+ this.client = new LocalBrowserClient(config);
328
+ }
329
+ }
330
+ async start() {
331
+ return this.client.start();
332
+ }
333
+ async stop() {
334
+ return this.client.stop();
335
+ }
336
+ async callTool(toolCall) {
337
+ return this.client.callTool(toolCall);
338
+ }
339
+ async listTools() {
340
+ return this.client.listTools();
341
+ }
342
+ isReady() {
343
+ return this.client.isReady();
344
+ }
345
+ // Additional methods for sandbox mode
346
+ getVncUrl() {
347
+ if (this.client instanceof SandboxBrowserClient) {
348
+ return this.client.getVncUrl();
349
+ }
350
+ return undefined;
351
+ }
352
+ getCdpUrl() {
353
+ if (this.client instanceof SandboxBrowserClient) {
354
+ return this.client.getCdpUrl();
355
+ }
356
+ return undefined;
357
+ }
358
+ getBrowser() {
359
+ if (this.client instanceof SandboxBrowserClient) {
360
+ return this.client.getBrowser();
361
+ }
362
+ return null;
363
+ }
364
+ getContext() {
365
+ if (this.client instanceof SandboxBrowserClient) {
366
+ return this.client.getContext();
367
+ }
368
+ return null;
369
+ }
370
+ // Event handling
371
+ on(event, listener) {
372
+ this.client.on(event, listener);
373
+ return this;
374
+ }
375
+ off(event, listener) {
376
+ this.client.off(event, listener);
377
+ return this;
378
+ }
379
+ }
380
+ exports.UnifiedBrowserClient = UnifiedBrowserClient;
381
+ //# sourceMappingURL=browser_client_unified.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser_client_unified.js","sourceRoot":"","sources":["../../src/browser/browser_client_unified.ts"],"names":[],"mappings":"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"}