@sparkleideas/browser 3.0.0-alpha.7 → 3.0.0-alpha.9

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 (67) hide show
  1. package/.agentic-flow/intelligence.json +17 -0
  2. package/agents/architect.yaml +1 -1
  3. package/agents/coder.yaml +1 -1
  4. package/agents/reviewer.yaml +1 -1
  5. package/agents/security-architect.yaml +1 -1
  6. package/agents/tester.yaml +1 -1
  7. package/dist/agent/index.d.ts +25 -0
  8. package/dist/agent/index.d.ts.map +1 -0
  9. package/dist/agent/index.js +33 -0
  10. package/dist/agent/index.js.map +1 -0
  11. package/dist/application/browser-service.d.ts +228 -0
  12. package/dist/application/browser-service.d.ts.map +1 -0
  13. package/dist/application/browser-service.js +470 -0
  14. package/dist/application/browser-service.js.map +1 -0
  15. package/dist/domain/types.d.ts +428 -0
  16. package/dist/domain/types.d.ts.map +1 -0
  17. package/dist/domain/types.js +95 -0
  18. package/dist/domain/types.js.map +1 -0
  19. package/dist/index.d.ts +131 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +84 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/infrastructure/agent-browser-adapter.d.ts +134 -0
  24. package/dist/infrastructure/agent-browser-adapter.d.ts.map +1 -0
  25. package/dist/infrastructure/agent-browser-adapter.js +551 -0
  26. package/dist/infrastructure/agent-browser-adapter.js.map +1 -0
  27. package/dist/infrastructure/hooks-integration.d.ts +109 -0
  28. package/dist/infrastructure/hooks-integration.d.ts.map +1 -0
  29. package/dist/infrastructure/hooks-integration.js +111 -0
  30. package/dist/infrastructure/hooks-integration.js.map +1 -0
  31. package/dist/infrastructure/memory-integration.d.ts +149 -0
  32. package/dist/infrastructure/memory-integration.d.ts.map +1 -0
  33. package/dist/infrastructure/memory-integration.js +335 -0
  34. package/dist/infrastructure/memory-integration.js.map +1 -0
  35. package/dist/infrastructure/reasoningbank-adapter.d.ts +90 -0
  36. package/dist/infrastructure/reasoningbank-adapter.d.ts.map +1 -0
  37. package/dist/infrastructure/reasoningbank-adapter.js +224 -0
  38. package/dist/infrastructure/reasoningbank-adapter.js.map +1 -0
  39. package/dist/infrastructure/security-integration.d.ts +80 -0
  40. package/dist/infrastructure/security-integration.d.ts.map +1 -0
  41. package/dist/infrastructure/security-integration.js +404 -0
  42. package/dist/infrastructure/security-integration.js.map +1 -0
  43. package/dist/infrastructure/workflow-templates.d.ts +95 -0
  44. package/dist/infrastructure/workflow-templates.d.ts.map +1 -0
  45. package/dist/infrastructure/workflow-templates.js +366 -0
  46. package/dist/infrastructure/workflow-templates.js.map +1 -0
  47. package/dist/mcp-tools/browser-tools.d.ts +18 -0
  48. package/dist/mcp-tools/browser-tools.d.ts.map +1 -0
  49. package/dist/mcp-tools/browser-tools.js +1163 -0
  50. package/dist/mcp-tools/browser-tools.js.map +1 -0
  51. package/dist/mcp-tools/index.d.ts +6 -0
  52. package/dist/mcp-tools/index.d.ts.map +1 -0
  53. package/dist/mcp-tools/index.js +6 -0
  54. package/dist/mcp-tools/index.js.map +1 -0
  55. package/dist/skill/index.d.ts +15 -0
  56. package/dist/skill/index.d.ts.map +1 -0
  57. package/dist/skill/index.js +23 -0
  58. package/dist/skill/index.js.map +1 -0
  59. package/package.json +3 -4
  60. package/src/application/browser-service.ts +1 -1
  61. package/src/domain/types.ts +1 -1
  62. package/src/index.ts +2 -2
  63. package/src/infrastructure/hooks-integration.ts +1 -1
  64. package/src/infrastructure/memory-integration.ts +2 -2
  65. package/src/infrastructure/reasoningbank-adapter.ts +1 -1
  66. package/src/mcp-tools/browser-tools.ts +1 -1
  67. package/src/skill/index.ts +1 -1
@@ -0,0 +1,551 @@
1
+ /**
2
+ * @sparkleideas/browser - Agent Browser Adapter
3
+ * Wraps agent-browser CLI for programmatic access
4
+ */
5
+ import { execSync } from 'child_process';
6
+ export class AgentBrowserAdapter {
7
+ session;
8
+ timeout;
9
+ headless;
10
+ executablePath;
11
+ proxy;
12
+ viewport;
13
+ debug;
14
+ constructor(options = {}) {
15
+ this.session = options.session || 'default';
16
+ this.timeout = options.timeout || 30000;
17
+ this.headless = options.headless !== false;
18
+ this.executablePath = options.executablePath;
19
+ this.proxy = options.proxy;
20
+ this.viewport = options.viewport;
21
+ this.debug = options.debug || false;
22
+ }
23
+ // ===========================================================================
24
+ // Core Command Execution
25
+ // ===========================================================================
26
+ async exec(args, jsonOutput = true) {
27
+ const startTime = Date.now();
28
+ const fullArgs = [
29
+ '--session', this.session,
30
+ ...(this.timeout ? ['--timeout', String(this.timeout)] : []),
31
+ ...(!this.headless ? ['--headed'] : []),
32
+ ...(this.executablePath ? ['--executable-path', this.executablePath] : []),
33
+ ...(this.proxy ? ['--proxy-server', this.proxy] : []),
34
+ ...(jsonOutput ? ['--json'] : []),
35
+ ...args,
36
+ ];
37
+ if (this.debug) {
38
+ console.log(`[agent-browser] ${fullArgs.join(' ')}`);
39
+ }
40
+ return new Promise((resolve) => {
41
+ try {
42
+ const result = execSync(`agent-browser ${fullArgs.join(' ')}`, {
43
+ encoding: 'utf-8',
44
+ timeout: this.timeout + 5000,
45
+ stdio: ['pipe', 'pipe', 'pipe'],
46
+ });
47
+ const duration = Date.now() - startTime;
48
+ if (jsonOutput) {
49
+ try {
50
+ const parsed = JSON.parse(result);
51
+ resolve({
52
+ success: parsed.success !== false,
53
+ data: (parsed.data || parsed),
54
+ duration,
55
+ });
56
+ }
57
+ catch {
58
+ resolve({ success: true, data: result.trim(), duration });
59
+ }
60
+ }
61
+ else {
62
+ resolve({ success: true, data: result.trim(), duration });
63
+ }
64
+ }
65
+ catch (error) {
66
+ const duration = Date.now() - startTime;
67
+ const message = error instanceof Error ? error.message : String(error);
68
+ resolve({ success: false, error: message, duration });
69
+ }
70
+ });
71
+ }
72
+ // ===========================================================================
73
+ // Navigation Commands
74
+ // ===========================================================================
75
+ async open(input) {
76
+ const args = ['open', input.url];
77
+ if (input.waitUntil)
78
+ args.push('--wait', input.waitUntil);
79
+ if (input.headers)
80
+ args.push('--headers', JSON.stringify(input.headers));
81
+ return this.exec(args);
82
+ }
83
+ async back() {
84
+ return this.exec(['back']);
85
+ }
86
+ async forward() {
87
+ return this.exec(['forward']);
88
+ }
89
+ async reload() {
90
+ return this.exec(['reload']);
91
+ }
92
+ async close() {
93
+ return this.exec(['close']);
94
+ }
95
+ // ===========================================================================
96
+ // Interaction Commands
97
+ // ===========================================================================
98
+ async click(input) {
99
+ const args = ['click', input.target];
100
+ if (input.button)
101
+ args.push('--button', input.button);
102
+ if (input.clickCount)
103
+ args.push('--click-count', String(input.clickCount));
104
+ if (input.force)
105
+ args.push('--force');
106
+ return this.exec(args);
107
+ }
108
+ async dblclick(target) {
109
+ return this.exec(['dblclick', target]);
110
+ }
111
+ async fill(input) {
112
+ return this.exec(['fill', input.target, input.value]);
113
+ }
114
+ async type(input) {
115
+ const args = ['type', input.target, input.text];
116
+ if (input.delay)
117
+ args.push('--delay', String(input.delay));
118
+ return this.exec(args);
119
+ }
120
+ async press(key, delay) {
121
+ const args = ['press', key];
122
+ if (delay)
123
+ args.push('--delay', String(delay));
124
+ return this.exec(args);
125
+ }
126
+ async hover(target) {
127
+ return this.exec(['hover', target]);
128
+ }
129
+ async focus(target) {
130
+ return this.exec(['focus', target]);
131
+ }
132
+ async select(target, value) {
133
+ return this.exec(['select', target, value]);
134
+ }
135
+ async check(target) {
136
+ return this.exec(['check', target]);
137
+ }
138
+ async uncheck(target) {
139
+ return this.exec(['uncheck', target]);
140
+ }
141
+ async scroll(direction, pixels) {
142
+ const args = ['scroll', direction];
143
+ if (pixels)
144
+ args.push(String(pixels));
145
+ return this.exec(args);
146
+ }
147
+ async scrollIntoView(target) {
148
+ return this.exec(['scrollintoview', target]);
149
+ }
150
+ async drag(source, target) {
151
+ return this.exec(['drag', source, target]);
152
+ }
153
+ async upload(target, files) {
154
+ return this.exec(['upload', target, ...files]);
155
+ }
156
+ // ===========================================================================
157
+ // Information Retrieval
158
+ // ===========================================================================
159
+ async get(input) {
160
+ const args = ['get', input.type];
161
+ if (input.target)
162
+ args.push(input.target);
163
+ if (input.attribute && input.type === 'attr')
164
+ args.push(input.attribute);
165
+ return this.exec(args);
166
+ }
167
+ async getText(target) {
168
+ return this.exec(['get', 'text', target]);
169
+ }
170
+ async getHtml(target) {
171
+ return this.exec(['get', 'html', target]);
172
+ }
173
+ async getValue(target) {
174
+ return this.exec(['get', 'value', target]);
175
+ }
176
+ async getAttr(target, attribute) {
177
+ return this.exec(['get', 'attr', target, attribute]);
178
+ }
179
+ async getTitle() {
180
+ return this.exec(['get', 'title']);
181
+ }
182
+ async getUrl() {
183
+ return this.exec(['get', 'url']);
184
+ }
185
+ async getCount(selector) {
186
+ return this.exec(['get', 'count', selector]);
187
+ }
188
+ async getBox(target) {
189
+ return this.exec(['get', 'box', target]);
190
+ }
191
+ // ===========================================================================
192
+ // State Checks
193
+ // ===========================================================================
194
+ async isVisible(target) {
195
+ return this.exec(['is', 'visible', target]);
196
+ }
197
+ async isEnabled(target) {
198
+ return this.exec(['is', 'enabled', target]);
199
+ }
200
+ async isChecked(target) {
201
+ return this.exec(['is', 'checked', target]);
202
+ }
203
+ // ===========================================================================
204
+ // Snapshot & Screenshot
205
+ // ===========================================================================
206
+ async snapshot(options = {}) {
207
+ const args = ['snapshot'];
208
+ if (options.interactive)
209
+ args.push('-i');
210
+ if (options.compact)
211
+ args.push('-c');
212
+ if (options.depth)
213
+ args.push('-d', String(options.depth));
214
+ if (options.selector)
215
+ args.push('-s', options.selector);
216
+ return this.exec(args);
217
+ }
218
+ async screenshot(input = {}) {
219
+ const args = ['screenshot'];
220
+ if (input.path)
221
+ args.push(input.path);
222
+ if (input.fullPage)
223
+ args.push('--full');
224
+ return this.exec(args);
225
+ }
226
+ async pdf(path) {
227
+ return this.exec(['pdf', path]);
228
+ }
229
+ // ===========================================================================
230
+ // Wait Commands
231
+ // ===========================================================================
232
+ async wait(input) {
233
+ if (input.selector) {
234
+ return this.exec(['wait', input.selector]);
235
+ }
236
+ if (typeof input.timeout === 'number' && !input.text && !input.url && !input.load && !input.fn) {
237
+ return this.exec(['wait', String(input.timeout)]);
238
+ }
239
+ const args = ['wait'];
240
+ if (input.text)
241
+ args.push('--text', input.text);
242
+ if (input.url)
243
+ args.push('--url', input.url);
244
+ if (input.load)
245
+ args.push('--load', input.load);
246
+ if (input.fn)
247
+ args.push('--fn', input.fn);
248
+ return this.exec(args);
249
+ }
250
+ async waitForSelector(selector, timeout) {
251
+ const args = ['wait', selector];
252
+ if (timeout)
253
+ args.push('--timeout', String(timeout));
254
+ return this.exec(args);
255
+ }
256
+ async waitForText(text) {
257
+ return this.exec(['wait', '--text', text]);
258
+ }
259
+ async waitForUrl(pattern) {
260
+ return this.exec(['wait', '--url', pattern]);
261
+ }
262
+ async waitForLoad(state) {
263
+ return this.exec(['wait', '--load', state]);
264
+ }
265
+ async waitForFunction(fn) {
266
+ return this.exec(['wait', '--fn', fn]);
267
+ }
268
+ // ===========================================================================
269
+ // JavaScript Execution
270
+ // ===========================================================================
271
+ async eval(input) {
272
+ return this.exec(['eval', input.script]);
273
+ }
274
+ // ===========================================================================
275
+ // Mouse Control
276
+ // ===========================================================================
277
+ async mouseMove(x, y) {
278
+ return this.exec(['mouse', 'move', String(x), String(y)]);
279
+ }
280
+ async mouseDown(button = 'left') {
281
+ return this.exec(['mouse', 'down', button]);
282
+ }
283
+ async mouseUp(button = 'left') {
284
+ return this.exec(['mouse', 'up', button]);
285
+ }
286
+ async mouseWheel(deltaY, deltaX = 0) {
287
+ return this.exec(['mouse', 'wheel', String(deltaY), String(deltaX)]);
288
+ }
289
+ // ===========================================================================
290
+ // Browser Settings
291
+ // ===========================================================================
292
+ async setViewport(width, height) {
293
+ return this.exec(['set', 'viewport', String(width), String(height)]);
294
+ }
295
+ async setDevice(device) {
296
+ return this.exec(['set', 'device', device]);
297
+ }
298
+ async setGeolocation(lat, lng) {
299
+ return this.exec(['set', 'geo', String(lat), String(lng)]);
300
+ }
301
+ async setOffline(enabled) {
302
+ return this.exec(['set', 'offline', enabled ? 'on' : 'off']);
303
+ }
304
+ async setHeaders(headers) {
305
+ return this.exec(['set', 'headers', JSON.stringify(headers)]);
306
+ }
307
+ async setCredentials(username, password) {
308
+ return this.exec(['set', 'credentials', username, password]);
309
+ }
310
+ async setMedia(scheme) {
311
+ return this.exec(['set', 'media', scheme]);
312
+ }
313
+ // ===========================================================================
314
+ // Cookies & Storage
315
+ // ===========================================================================
316
+ async getCookies() {
317
+ return this.exec(['cookies']);
318
+ }
319
+ async setCookie(name, value) {
320
+ return this.exec(['cookies', 'set', name, value]);
321
+ }
322
+ async clearCookies() {
323
+ return this.exec(['cookies', 'clear']);
324
+ }
325
+ async getLocalStorage(key) {
326
+ const args = ['storage', 'local'];
327
+ if (key)
328
+ args.push(key);
329
+ return this.exec(args);
330
+ }
331
+ async setLocalStorage(key, value) {
332
+ return this.exec(['storage', 'local', 'set', key, value]);
333
+ }
334
+ async clearLocalStorage() {
335
+ return this.exec(['storage', 'local', 'clear']);
336
+ }
337
+ async getSessionStorage(key) {
338
+ const args = ['storage', 'session'];
339
+ if (key)
340
+ args.push(key);
341
+ return this.exec(args);
342
+ }
343
+ async setSessionStorage(key, value) {
344
+ return this.exec(['storage', 'session', 'set', key, value]);
345
+ }
346
+ async clearSessionStorage() {
347
+ return this.exec(['storage', 'session', 'clear']);
348
+ }
349
+ // ===========================================================================
350
+ // Network
351
+ // ===========================================================================
352
+ async networkRoute(input) {
353
+ const args = ['network', 'route', input.urlPattern];
354
+ if (input.abort)
355
+ args.push('--abort');
356
+ if (input.body)
357
+ args.push('--body', typeof input.body === 'string' ? input.body : JSON.stringify(input.body));
358
+ if (input.status)
359
+ args.push('--status', String(input.status));
360
+ if (input.headers)
361
+ args.push('--headers', JSON.stringify(input.headers));
362
+ return this.exec(args);
363
+ }
364
+ async networkUnroute(urlPattern) {
365
+ const args = ['network', 'unroute'];
366
+ if (urlPattern)
367
+ args.push(urlPattern);
368
+ return this.exec(args);
369
+ }
370
+ async networkRequests(filter) {
371
+ const args = ['network', 'requests'];
372
+ if (filter)
373
+ args.push('--filter', filter);
374
+ return this.exec(args);
375
+ }
376
+ // ===========================================================================
377
+ // Tabs & Windows
378
+ // ===========================================================================
379
+ async listTabs() {
380
+ return this.exec(['tab']);
381
+ }
382
+ async newTab(url) {
383
+ const args = ['tab', 'new'];
384
+ if (url)
385
+ args.push(url);
386
+ return this.exec(args);
387
+ }
388
+ async switchTab(index) {
389
+ return this.exec(['tab', String(index)]);
390
+ }
391
+ async closeTab(index) {
392
+ const args = ['tab', 'close'];
393
+ if (index !== undefined)
394
+ args.push(String(index));
395
+ return this.exec(args);
396
+ }
397
+ async newWindow() {
398
+ return this.exec(['window', 'new']);
399
+ }
400
+ // ===========================================================================
401
+ // Frames
402
+ // ===========================================================================
403
+ async switchFrame(selector) {
404
+ return this.exec(['frame', selector]);
405
+ }
406
+ async switchToMainFrame() {
407
+ return this.exec(['frame', 'main']);
408
+ }
409
+ // ===========================================================================
410
+ // Dialogs
411
+ // ===========================================================================
412
+ async dialogAccept(text) {
413
+ const args = ['dialog', 'accept'];
414
+ if (text)
415
+ args.push(text);
416
+ return this.exec(args);
417
+ }
418
+ async dialogDismiss() {
419
+ return this.exec(['dialog', 'dismiss']);
420
+ }
421
+ // ===========================================================================
422
+ // Debug & Trace
423
+ // ===========================================================================
424
+ async traceStart(path) {
425
+ const args = ['trace', 'start'];
426
+ if (path)
427
+ args.push(path);
428
+ return this.exec(args);
429
+ }
430
+ async traceStop(path) {
431
+ const args = ['trace', 'stop'];
432
+ if (path)
433
+ args.push(path);
434
+ return this.exec(args);
435
+ }
436
+ async getConsole() {
437
+ return this.exec(['console']);
438
+ }
439
+ async clearConsole() {
440
+ return this.exec(['console', '--clear']);
441
+ }
442
+ async getErrors() {
443
+ return this.exec(['errors']);
444
+ }
445
+ async clearErrors() {
446
+ return this.exec(['errors', '--clear']);
447
+ }
448
+ async highlight(selector) {
449
+ return this.exec(['highlight', selector]);
450
+ }
451
+ async saveState(path) {
452
+ return this.exec(['state', 'save', path]);
453
+ }
454
+ async loadState(path) {
455
+ return this.exec(['state', 'load', path]);
456
+ }
457
+ // ===========================================================================
458
+ // Find Commands (Semantic Locators)
459
+ // ===========================================================================
460
+ async findByRole(role, action, options) {
461
+ const args = ['find', 'role', role, action];
462
+ if (options?.name)
463
+ args.push('--name', options.name);
464
+ if (options?.exact)
465
+ args.push('--exact');
466
+ return this.exec(args);
467
+ }
468
+ async findByText(text, action) {
469
+ return this.exec(['find', 'text', text, action]);
470
+ }
471
+ async findByLabel(label, action, value) {
472
+ const args = ['find', 'label', label, action];
473
+ if (value)
474
+ args.push(value);
475
+ return this.exec(args);
476
+ }
477
+ async findByPlaceholder(placeholder, action, value) {
478
+ const args = ['find', 'placeholder', placeholder, action];
479
+ if (value)
480
+ args.push(value);
481
+ return this.exec(args);
482
+ }
483
+ async findByTestId(testId, action, value) {
484
+ const args = ['find', 'testid', testId, action];
485
+ if (value)
486
+ args.push(value);
487
+ return this.exec(args);
488
+ }
489
+ async findFirst(selector, action, value) {
490
+ const args = ['find', 'first', selector, action];
491
+ if (value)
492
+ args.push(value);
493
+ return this.exec(args);
494
+ }
495
+ async findLast(selector, action, value) {
496
+ const args = ['find', 'last', selector, action];
497
+ if (value)
498
+ args.push(value);
499
+ return this.exec(args);
500
+ }
501
+ async findNth(n, selector, action, value) {
502
+ const args = ['find', 'nth', String(n), selector, action];
503
+ if (value)
504
+ args.push(value);
505
+ return this.exec(args);
506
+ }
507
+ // ===========================================================================
508
+ // Session Management
509
+ // ===========================================================================
510
+ async listSessions() {
511
+ return this.exec(['session', 'list']);
512
+ }
513
+ async getCurrentSession() {
514
+ return this.exec(['session']);
515
+ }
516
+ setSession(sessionId) {
517
+ this.session = sessionId;
518
+ }
519
+ getSession() {
520
+ return this.session;
521
+ }
522
+ // ===========================================================================
523
+ // CDP Connection
524
+ // ===========================================================================
525
+ async connect(port) {
526
+ return this.exec(['connect', String(port)]);
527
+ }
528
+ // ===========================================================================
529
+ // Setup
530
+ // ===========================================================================
531
+ static async install(withDeps = false) {
532
+ const args = ['install'];
533
+ if (withDeps)
534
+ args.push('--with-deps');
535
+ return new Promise((resolve) => {
536
+ try {
537
+ const result = execSync(`agent-browser ${args.join(' ')}`, {
538
+ encoding: 'utf-8',
539
+ timeout: 300000, // 5 minutes for download
540
+ });
541
+ resolve({ success: true, data: result });
542
+ }
543
+ catch (error) {
544
+ const message = error instanceof Error ? error.message : String(error);
545
+ resolve({ success: false, error: message });
546
+ }
547
+ });
548
+ }
549
+ }
550
+ export default AgentBrowserAdapter;
551
+ //# sourceMappingURL=agent-browser-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-browser-adapter.js","sourceRoot":"","sources":["../../src/infrastructure/agent-browser-adapter.ts"],"names":[],"mappings":"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"}