@ai2qa/local-agent 0.1.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 (83) hide show
  1. package/README.md +254 -0
  2. package/bin/ai2qa-agent +12 -0
  3. package/dist/browser/connection.d.ts +80 -0
  4. package/dist/browser/connection.d.ts.map +1 -0
  5. package/dist/browser/connection.js +165 -0
  6. package/dist/browser/connection.js.map +1 -0
  7. package/dist/config.d.ts +58 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +231 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +10 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +189 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/server.d.ts +56 -0
  16. package/dist/server.d.ts.map +1 -0
  17. package/dist/server.js +387 -0
  18. package/dist/server.js.map +1 -0
  19. package/dist/tools/click.d.ts +12 -0
  20. package/dist/tools/click.d.ts.map +1 -0
  21. package/dist/tools/click.js +61 -0
  22. package/dist/tools/click.js.map +1 -0
  23. package/dist/tools/evaluate.d.ts +9 -0
  24. package/dist/tools/evaluate.d.ts.map +1 -0
  25. package/dist/tools/evaluate.js +77 -0
  26. package/dist/tools/evaluate.js.map +1 -0
  27. package/dist/tools/fill.d.ts +9 -0
  28. package/dist/tools/fill.d.ts.map +1 -0
  29. package/dist/tools/fill.js +48 -0
  30. package/dist/tools/fill.js.map +1 -0
  31. package/dist/tools/hover.d.ts +9 -0
  32. package/dist/tools/hover.d.ts.map +1 -0
  33. package/dist/tools/hover.js +44 -0
  34. package/dist/tools/hover.js.map +1 -0
  35. package/dist/tools/index.d.ts +18 -0
  36. package/dist/tools/index.d.ts.map +1 -0
  37. package/dist/tools/index.js +51 -0
  38. package/dist/tools/index.js.map +1 -0
  39. package/dist/tools/knowledge.d.ts +56 -0
  40. package/dist/tools/knowledge.d.ts.map +1 -0
  41. package/dist/tools/knowledge.js +98 -0
  42. package/dist/tools/knowledge.js.map +1 -0
  43. package/dist/tools/navigate.d.ts +9 -0
  44. package/dist/tools/navigate.d.ts.map +1 -0
  45. package/dist/tools/navigate.js +48 -0
  46. package/dist/tools/navigate.js.map +1 -0
  47. package/dist/tools/press-key.d.ts +9 -0
  48. package/dist/tools/press-key.d.ts.map +1 -0
  49. package/dist/tools/press-key.js +38 -0
  50. package/dist/tools/press-key.js.map +1 -0
  51. package/dist/tools/report.d.ts +29 -0
  52. package/dist/tools/report.d.ts.map +1 -0
  53. package/dist/tools/report.js +92 -0
  54. package/dist/tools/report.js.map +1 -0
  55. package/dist/tools/screenshot.d.ts +9 -0
  56. package/dist/tools/screenshot.d.ts.map +1 -0
  57. package/dist/tools/screenshot.js +54 -0
  58. package/dist/tools/screenshot.js.map +1 -0
  59. package/dist/tools/snapshot.d.ts +13 -0
  60. package/dist/tools/snapshot.d.ts.map +1 -0
  61. package/dist/tools/snapshot.js +134 -0
  62. package/dist/tools/snapshot.js.map +1 -0
  63. package/dist/tools/types.d.ts +329 -0
  64. package/dist/tools/types.d.ts.map +1 -0
  65. package/dist/tools/types.js +102 -0
  66. package/dist/tools/types.js.map +1 -0
  67. package/dist/tools/wait.d.ts +9 -0
  68. package/dist/tools/wait.d.ts.map +1 -0
  69. package/dist/tools/wait.js +64 -0
  70. package/dist/tools/wait.js.map +1 -0
  71. package/dist/transports/index.d.ts +8 -0
  72. package/dist/transports/index.d.ts.map +1 -0
  73. package/dist/transports/index.js +14 -0
  74. package/dist/transports/index.js.map +1 -0
  75. package/dist/transports/stdio.d.ts +8 -0
  76. package/dist/transports/stdio.d.ts.map +1 -0
  77. package/dist/transports/stdio.js +12 -0
  78. package/dist/transports/stdio.js.map +1 -0
  79. package/dist/transports/websocket.d.ts +87 -0
  80. package/dist/transports/websocket.d.ts.map +1 -0
  81. package/dist/transports/websocket.js +200 -0
  82. package/dist/transports/websocket.js.map +1 -0
  83. package/package.json +53 -0
package/dist/config.js ADDED
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration Management
4
+ *
5
+ * Handles loading/saving agent configuration including:
6
+ * - Cloud connection settings
7
+ * - Device token storage
8
+ * - Agent identity
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.loadConfig = loadConfig;
45
+ exports.saveConfig = saveConfig;
46
+ exports.storeToken = storeToken;
47
+ exports.getToken = getToken;
48
+ exports.isLoggedIn = isLoggedIn;
49
+ exports.clearToken = clearToken;
50
+ exports.getCloudConfig = getCloudConfig;
51
+ exports.setCloudUrl = setCloudUrl;
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ const os = __importStar(require("os"));
55
+ const crypto = __importStar(require("crypto"));
56
+ /** Default cloud URL */
57
+ const DEFAULT_CLOUD_URL = 'wss://api.ai2qa.com/agents/connect';
58
+ /** Config directory path */
59
+ const CONFIG_DIR = path.join(os.homedir(), '.ai2qa');
60
+ const CONFIG_FILE = path.join(CONFIG_DIR, 'agent-config.json');
61
+ const TOKEN_FILE = path.join(CONFIG_DIR, '.token');
62
+ /**
63
+ * Get or generate a unique agent ID.
64
+ */
65
+ function getOrCreateAgentId() {
66
+ const idFile = path.join(CONFIG_DIR, '.agent-id');
67
+ if (fs.existsSync(idFile)) {
68
+ return fs.readFileSync(idFile, 'utf-8').trim();
69
+ }
70
+ const agentId = crypto.randomUUID();
71
+ ensureConfigDir();
72
+ fs.writeFileSync(idFile, agentId, { mode: 0o600 });
73
+ return agentId;
74
+ }
75
+ /**
76
+ * Get device name (hostname).
77
+ */
78
+ function getDeviceName() {
79
+ return os.hostname();
80
+ }
81
+ /**
82
+ * Ensure config directory exists.
83
+ */
84
+ function ensureConfigDir() {
85
+ if (!fs.existsSync(CONFIG_DIR)) {
86
+ fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
87
+ }
88
+ }
89
+ /**
90
+ * Derive encryption key from machine-specific data.
91
+ * This provides basic protection for stored tokens.
92
+ */
93
+ function getEncryptionKey() {
94
+ const machineId = `${os.hostname()}-${os.userInfo().username}-${os.platform()}`;
95
+ return crypto.scryptSync(machineId, 'ai2qa-agent-salt', 32);
96
+ }
97
+ /**
98
+ * Encrypt a token for storage.
99
+ */
100
+ function encryptToken(token) {
101
+ const key = getEncryptionKey();
102
+ const iv = crypto.randomBytes(16);
103
+ const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
104
+ let encrypted = cipher.update(token, 'utf8', 'hex');
105
+ encrypted += cipher.final('hex');
106
+ const authTag = cipher.getAuthTag();
107
+ return `${iv.toString('hex')}:${authTag.toString('hex')}:${encrypted}`;
108
+ }
109
+ /**
110
+ * Decrypt a stored token.
111
+ */
112
+ function decryptToken(encrypted) {
113
+ try {
114
+ const [ivHex, authTagHex, data] = encrypted.split(':');
115
+ const key = getEncryptionKey();
116
+ const iv = Buffer.from(ivHex, 'hex');
117
+ const authTag = Buffer.from(authTagHex, 'hex');
118
+ const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);
119
+ decipher.setAuthTag(authTag);
120
+ let decrypted = decipher.update(data, 'hex', 'utf8');
121
+ decrypted += decipher.final('utf8');
122
+ return decrypted;
123
+ }
124
+ catch {
125
+ return null;
126
+ }
127
+ }
128
+ /**
129
+ * Load agent configuration from disk.
130
+ */
131
+ function loadConfig() {
132
+ const defaults = {
133
+ agentId: getOrCreateAgentId(),
134
+ deviceName: getDeviceName(),
135
+ cloudUrl: process.env.AI2QA_CLOUD_URL ?? DEFAULT_CLOUD_URL,
136
+ };
137
+ if (!fs.existsSync(CONFIG_FILE)) {
138
+ return defaults;
139
+ }
140
+ try {
141
+ const data = fs.readFileSync(CONFIG_FILE, 'utf-8');
142
+ const saved = JSON.parse(data);
143
+ return { ...defaults, ...saved };
144
+ }
145
+ catch {
146
+ return defaults;
147
+ }
148
+ }
149
+ /**
150
+ * Save agent configuration to disk.
151
+ */
152
+ function saveConfig(config) {
153
+ ensureConfigDir();
154
+ const current = loadConfig();
155
+ const updated = { ...current, ...config };
156
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(updated, null, 2), { mode: 0o600 });
157
+ }
158
+ /**
159
+ * Store device token securely.
160
+ */
161
+ function storeToken(token, expiresAt) {
162
+ ensureConfigDir();
163
+ const encrypted = encryptToken(token);
164
+ fs.writeFileSync(TOKEN_FILE, encrypted, { mode: 0o600 });
165
+ if (expiresAt) {
166
+ saveConfig({ tokenExpiresAt: expiresAt.toISOString() });
167
+ }
168
+ }
169
+ /**
170
+ * Retrieve stored device token.
171
+ */
172
+ function getToken() {
173
+ if (!fs.existsSync(TOKEN_FILE)) {
174
+ return null;
175
+ }
176
+ try {
177
+ const encrypted = fs.readFileSync(TOKEN_FILE, 'utf-8').trim();
178
+ const token = decryptToken(encrypted);
179
+ // Check expiration
180
+ const config = loadConfig();
181
+ if (config.tokenExpiresAt) {
182
+ const expiresAt = new Date(config.tokenExpiresAt);
183
+ if (expiresAt < new Date()) {
184
+ console.error('[Config] Token has expired');
185
+ clearToken();
186
+ return null;
187
+ }
188
+ }
189
+ return token;
190
+ }
191
+ catch {
192
+ return null;
193
+ }
194
+ }
195
+ /**
196
+ * Check if agent is logged in (has valid token).
197
+ */
198
+ function isLoggedIn() {
199
+ return getToken() !== null;
200
+ }
201
+ /**
202
+ * Clear stored token (logout).
203
+ */
204
+ function clearToken() {
205
+ if (fs.existsSync(TOKEN_FILE)) {
206
+ fs.unlinkSync(TOKEN_FILE);
207
+ }
208
+ saveConfig({ encryptedToken: undefined, tokenExpiresAt: undefined });
209
+ }
210
+ /**
211
+ * Get cloud connection config.
212
+ */
213
+ function getCloudConfig() {
214
+ const config = loadConfig();
215
+ const token = getToken();
216
+ if (!token) {
217
+ return null;
218
+ }
219
+ return {
220
+ url: config.cloudUrl,
221
+ token,
222
+ agentId: config.agentId,
223
+ };
224
+ }
225
+ /**
226
+ * Set cloud URL.
227
+ */
228
+ function setCloudUrl(url) {
229
+ saveConfig({ cloudUrl: url });
230
+ }
231
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * AI2QA Local Agent
3
+ *
4
+ * Universal MCP Server for browser automation.
5
+ * Supports both local AI tools (via stdio) and AI2QA cloud (via WebSocket).
6
+ */
7
+ export { createMcpServer, Ai2qaMcpServer } from './server.js';
8
+ export { BrowserConnection, type BrowserConfig } from './browser/connection.js';
9
+ export * from './tools/index.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmMH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAChF,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ /**
3
+ * AI2QA Local Agent
4
+ *
5
+ * Universal MCP Server for browser automation.
6
+ * Supports both local AI tools (via stdio) and AI2QA cloud (via WebSocket).
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.BrowserConnection = exports.Ai2qaMcpServer = exports.createMcpServer = void 0;
24
+ const commander_1 = require("commander");
25
+ const server_js_1 = require("./server.js");
26
+ const config_js_1 = require("./config.js");
27
+ const VERSION = '0.1.0';
28
+ async function main() {
29
+ const program = new commander_1.Command();
30
+ program
31
+ .name('ai2qa-agent')
32
+ .description('AI2QA Local Agent - Universal MCP Server for browser automation')
33
+ .version(VERSION);
34
+ program
35
+ .command('start')
36
+ .description('Start the MCP server')
37
+ .option('--sidecar', 'Attach to existing Chrome via CDP (default)', true)
38
+ .option('--port <port>', 'CDP port for sidecar mode', '9222')
39
+ .option('--headless', 'Run in headless mode (launch mode only)', false)
40
+ .option('--cloud', 'Connect to AI2QA cloud via WebSocket', false)
41
+ .action(async (options) => {
42
+ const mode = options.sidecar ? 'sidecar' : 'launch';
43
+ const cdpUrl = `http://localhost:${options.port}`;
44
+ const useCloud = options.cloud;
45
+ // Validate cloud mode requirements
46
+ if (useCloud && !(0, config_js_1.isLoggedIn)()) {
47
+ console.error('╔════════════════════════════════════════════════════════════╗');
48
+ console.error('║ ERROR: Not logged in to AI2QA cloud ║');
49
+ console.error('║ ║');
50
+ console.error('║ Please run: ai2qa-agent login <token> ║');
51
+ console.error('║ ║');
52
+ console.error('║ Get your device token from: https://ai2qa.com/agents ║');
53
+ console.error('╚════════════════════════════════════════════════════════════╝');
54
+ process.exit(1);
55
+ }
56
+ console.error('╔════════════════════════════════════════════════════════════╗');
57
+ console.error('║ AI2QA Local Agent v' + VERSION.padEnd(27) + '║');
58
+ console.error('╠════════════════════════════════════════════════════════════╣');
59
+ console.error(`║ Mode: ${mode.padEnd(51)}║`);
60
+ console.error(`║ Transport: ${(useCloud ? 'WebSocket (cloud)' : 'stdio (local)').padEnd(46)}║`);
61
+ if (mode === 'sidecar') {
62
+ console.error(`║ CDP URL: ${cdpUrl.padEnd(48)}║`);
63
+ console.error('║ ║');
64
+ console.error('║ Make sure Chrome is running with: ║');
65
+ console.error('║ --remote-debugging-port=9222 ║');
66
+ }
67
+ if (useCloud) {
68
+ const config = (0, config_js_1.loadConfig)();
69
+ console.error('║ ║');
70
+ console.error(`║ Agent ID: ${config.agentId.substring(0, 8)}... ║`);
71
+ console.error(`║ Device: ${config.deviceName.substring(0, 40).padEnd(48)}║`);
72
+ }
73
+ console.error('╚════════════════════════════════════════════════════════════╝');
74
+ const server = (0, server_js_1.createMcpServer)({
75
+ browser: {
76
+ mode,
77
+ cdpUrl,
78
+ headless: options.headless,
79
+ },
80
+ });
81
+ // Handle graceful shutdown
82
+ const shutdown = async (signal) => {
83
+ console.error(`\n[ai2qa-agent] Received ${signal}, shutting down...`);
84
+ await server.stop();
85
+ process.exit(0);
86
+ };
87
+ process.on('SIGINT', () => shutdown('SIGINT'));
88
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
89
+ try {
90
+ if (useCloud) {
91
+ // Cloud mode - connect via WebSocket
92
+ const cloudConfig = (0, config_js_1.getCloudConfig)();
93
+ if (!cloudConfig) {
94
+ console.error('[ai2qa-agent] Failed to get cloud configuration');
95
+ process.exit(1);
96
+ }
97
+ await server.startWithWebSocket(cloudConfig);
98
+ }
99
+ else {
100
+ // Local mode - use stdio
101
+ await server.start();
102
+ }
103
+ }
104
+ catch (err) {
105
+ console.error('[ai2qa-agent] Failed to start server:', err);
106
+ process.exit(1);
107
+ }
108
+ });
109
+ program
110
+ .command('login')
111
+ .description('Login to AI2QA cloud with a device token')
112
+ .argument('<token>', 'Device token from AI2QA web UI')
113
+ .option('--url <url>', 'Custom cloud WebSocket URL')
114
+ .action((token, options) => {
115
+ if (!token || token.length < 10) {
116
+ console.error('Error: Invalid token format');
117
+ console.error('');
118
+ console.error('Get your device token from: https://ai2qa.com/agents');
119
+ process.exit(1);
120
+ }
121
+ // Calculate expiration (7 days from now)
122
+ const expiresAt = new Date();
123
+ expiresAt.setDate(expiresAt.getDate() + 7);
124
+ // Store the token
125
+ (0, config_js_1.storeToken)(token, expiresAt);
126
+ // Set custom cloud URL if provided
127
+ if (options.url) {
128
+ (0, config_js_1.setCloudUrl)(options.url);
129
+ }
130
+ const config = (0, config_js_1.loadConfig)();
131
+ console.log('╔════════════════════════════════════════════════════════════╗');
132
+ console.log('║ Successfully logged in to AI2QA cloud! ║');
133
+ console.log('╠════════════════════════════════════════════════════════════╣');
134
+ console.log(`║ Agent ID: ${config.agentId.substring(0, 8)}... ║`);
135
+ console.log(`║ Device: ${config.deviceName.substring(0, 40).padEnd(48)}║`);
136
+ console.log(`║ Token expires: ${expiresAt.toLocaleDateString().padEnd(41)}║`);
137
+ console.log('║ ║');
138
+ console.log('║ Start the agent with: ai2qa-agent start --cloud ║');
139
+ console.log('╚════════════════════════════════════════════════════════════╝');
140
+ });
141
+ program
142
+ .command('logout')
143
+ .description('Logout from AI2QA cloud and clear stored credentials')
144
+ .action(() => {
145
+ (0, config_js_1.clearToken)();
146
+ console.log('Successfully logged out from AI2QA cloud.');
147
+ console.log('Device token has been cleared.');
148
+ });
149
+ program
150
+ .command('status')
151
+ .description('Check agent status')
152
+ .action(() => {
153
+ const config = (0, config_js_1.loadConfig)();
154
+ const loggedIn = (0, config_js_1.isLoggedIn)();
155
+ console.log('╔════════════════════════════════════════════════════════════╗');
156
+ console.log('║ AI2QA Local Agent Status ║');
157
+ console.log('╠════════════════════════════════════════════════════════════╣');
158
+ console.log(`║ Version: ${VERSION.padEnd(48)}║`);
159
+ console.log(`║ Agent ID: ${config.agentId.substring(0, 8)}... ║`);
160
+ console.log(`║ Device: ${config.deviceName.substring(0, 40).padEnd(48)}║`);
161
+ console.log('║ ║');
162
+ console.log(`║ Cloud Login: ${(loggedIn ? '✓ Logged in' : '✗ Not logged in').padEnd(44)}║`);
163
+ if (loggedIn && config.tokenExpiresAt) {
164
+ const expires = new Date(config.tokenExpiresAt);
165
+ console.log(`║ Token Expires: ${expires.toLocaleDateString().padEnd(41)}║`);
166
+ }
167
+ console.log('╠════════════════════════════════════════════════════════════╣');
168
+ console.log('║ Commands: ║');
169
+ console.log('║ ai2qa-agent start Start with stdio (local AI) ║');
170
+ console.log('║ ai2qa-agent start --cloud Start with cloud connection ║');
171
+ console.log('║ ai2qa-agent login <token> Login to AI2QA cloud ║');
172
+ console.log('║ ai2qa-agent logout Logout from AI2QA cloud ║');
173
+ console.log('╚════════════════════════════════════════════════════════════╝');
174
+ });
175
+ await program.parseAsync(process.argv);
176
+ }
177
+ // Run if executed directly
178
+ main().catch((err) => {
179
+ console.error('[ai2qa-agent] Fatal error:', err);
180
+ process.exit(1);
181
+ });
182
+ // Export for programmatic use
183
+ var server_js_2 = require("./server.js");
184
+ Object.defineProperty(exports, "createMcpServer", { enumerable: true, get: function () { return server_js_2.createMcpServer; } });
185
+ Object.defineProperty(exports, "Ai2qaMcpServer", { enumerable: true, get: function () { return server_js_2.Ai2qaMcpServer; } });
186
+ var connection_js_1 = require("./browser/connection.js");
187
+ Object.defineProperty(exports, "BrowserConnection", { enumerable: true, get: function () { return connection_js_1.BrowserConnection; } });
188
+ __exportStar(require("./tools/index.js"), exports);
189
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * MCP Server
3
+ *
4
+ * Model Context Protocol server that exposes browser automation tools.
5
+ * Supports stdio transport for local AI tools (Claude Code, Cursor, etc.)
6
+ */
7
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
8
+ import { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
9
+ import { BrowserConfig } from './browser/connection.js';
10
+ import { WebSocketTransportConfig } from './transports/websocket.js';
11
+ import { KnowledgeApiConfig } from './tools/report.js';
12
+ /** Server configuration options */
13
+ export interface ServerConfig {
14
+ browser?: Partial<BrowserConfig>;
15
+ knowledgeApi?: KnowledgeApiConfig;
16
+ }
17
+ /**
18
+ * AI2QA MCP Server
19
+ */
20
+ export declare class Ai2qaMcpServer {
21
+ private readonly server;
22
+ private readonly browserConnection;
23
+ private page;
24
+ constructor(config?: ServerConfig);
25
+ /**
26
+ * Configure the knowledge API for reporting results.
27
+ */
28
+ configureKnowledgeApi(config: KnowledgeApiConfig): void;
29
+ private setupHandlers;
30
+ private executeTool;
31
+ /**
32
+ * Start the MCP server with stdio transport (default for local AI tools).
33
+ */
34
+ start(): Promise<void>;
35
+ /**
36
+ * Start the MCP server with WebSocket transport (for AI2QA cloud).
37
+ */
38
+ startWithWebSocket(config: WebSocketTransportConfig): Promise<void>;
39
+ /**
40
+ * Start with a custom transport.
41
+ */
42
+ startWithTransport(transport: Transport): Promise<void>;
43
+ /**
44
+ * Stop the server and clean up resources.
45
+ */
46
+ stop(): Promise<void>;
47
+ /**
48
+ * Get the underlying MCP server instance.
49
+ */
50
+ getServer(): Server;
51
+ }
52
+ /**
53
+ * Factory function for creating the MCP server.
54
+ */
55
+ export declare function createMcpServer(config?: ServerConfig): Ai2qaMcpServer;
56
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAQ1E,OAAO,EAAqB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAsB,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAWzF,OAAO,EAAwC,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA2M7F,mCAAmC;AACnC,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,IAAI,CAAqB;gBAErB,MAAM,CAAC,EAAE,YAAY;IAuBjC;;OAEG;IACH,qBAAqB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAIvD,OAAO,CAAC,aAAa;YAyDP,WAAW;IAmCzB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzE;;OAEG;IACG,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B;;OAEG;IACH,SAAS,IAAI,MAAM;CAGtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAErE"}