local-cli-agent 5.0.4 → 5.0.6
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.
- package/dist/agents/browser/browser-sub-agent.d.ts.map +1 -1
- package/dist/agents/browser/browser-sub-agent.js +3 -0
- package/dist/agents/browser/browser-sub-agent.js.map +1 -1
- package/dist/constants.d.ts +1 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -2
- package/dist/constants.js.map +1 -1
- package/dist/core/llm/llm-client.d.ts +1 -0
- package/dist/core/llm/llm-client.d.ts.map +1 -1
- package/dist/core/llm/llm-client.js +17 -4
- package/dist/core/llm/llm-client.js.map +1 -1
- package/dist/core/llm/providers.d.ts +12 -0
- package/dist/core/llm/providers.d.ts.map +1 -0
- package/dist/core/llm/providers.js +80 -0
- package/dist/core/llm/providers.js.map +1 -0
- package/dist/prompts/system/plan-execute.d.ts.map +1 -1
- package/dist/prompts/system/plan-execute.js +40 -4
- package/dist/prompts/system/plan-execute.js.map +1 -1
- package/dist/tools/browser/browser-client.d.ts +13 -1
- package/dist/tools/browser/browser-client.d.ts.map +1 -1
- package/dist/tools/browser/browser-client.js +137 -9
- package/dist/tools/browser/browser-client.js.map +1 -1
- package/dist/tools/browser/browser-tools.d.ts +8 -2
- package/dist/tools/browser/browser-tools.d.ts.map +1 -1
- package/dist/tools/browser/browser-tools.js +428 -49
- package/dist/tools/browser/browser-tools.js.map +1 -1
- package/dist/tools/browser/index.d.ts +1 -1
- package/dist/tools/browser/index.d.ts.map +1 -1
- package/dist/tools/browser/index.js +1 -1
- package/dist/tools/browser/index.js.map +1 -1
- package/dist/tools/llm/simple/planning-tools.d.ts +1 -0
- package/dist/tools/llm/simple/planning-tools.d.ts.map +1 -1
- package/dist/tools/llm/simple/planning-tools.js +80 -26
- package/dist/tools/llm/simple/planning-tools.js.map +1 -1
- package/dist/tools/llm/simple/read-image-tool.d.ts.map +1 -1
- package/dist/tools/llm/simple/read-image-tool.js +0 -2
- package/dist/tools/llm/simple/read-image-tool.js.map +1 -1
- package/dist/tools/office/excel-tools/advanced.d.ts +13 -0
- package/dist/tools/office/excel-tools/advanced.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/advanced.js +364 -0
- package/dist/tools/office/excel-tools/advanced.js.map +1 -0
- package/dist/tools/office/excel-tools/cells.js +1 -1
- package/dist/tools/office/excel-tools/cells.js.map +1 -1
- package/dist/tools/office/excel-tools/charts.d.ts +6 -0
- package/dist/tools/office/excel-tools/charts.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/charts.js +250 -1
- package/dist/tools/office/excel-tools/charts.js.map +1 -1
- package/dist/tools/office/excel-tools/comments.d.ts +1 -0
- package/dist/tools/office/excel-tools/comments.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/comments.js +36 -0
- package/dist/tools/office/excel-tools/comments.js.map +1 -1
- package/dist/tools/office/excel-tools/data-ops.d.ts +4 -0
- package/dist/tools/office/excel-tools/data-ops.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/data-ops.js +155 -1
- package/dist/tools/office/excel-tools/data-ops.js.map +1 -1
- package/dist/tools/office/excel-tools/export.d.ts +3 -0
- package/dist/tools/office/excel-tools/export.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/export.js +117 -1
- package/dist/tools/office/excel-tools/export.js.map +1 -1
- package/dist/tools/office/excel-tools/formatting.d.ts +2 -0
- package/dist/tools/office/excel-tools/formatting.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/formatting.js +74 -0
- package/dist/tools/office/excel-tools/formatting.js.map +1 -1
- package/dist/tools/office/excel-tools/formulas.d.ts +11 -0
- package/dist/tools/office/excel-tools/formulas.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/formulas.js +313 -0
- package/dist/tools/office/excel-tools/formulas.js.map +1 -0
- package/dist/tools/office/excel-tools/index.d.ts +5 -0
- package/dist/tools/office/excel-tools/index.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/index.js +15 -0
- package/dist/tools/office/excel-tools/index.js.map +1 -1
- package/dist/tools/office/excel-tools/launch.d.ts +0 -1
- package/dist/tools/office/excel-tools/launch.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/launch.js +33 -36
- package/dist/tools/office/excel-tools/launch.js.map +1 -1
- package/dist/tools/office/excel-tools/media.d.ts +5 -0
- package/dist/tools/office/excel-tools/media.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/media.js +176 -0
- package/dist/tools/office/excel-tools/media.js.map +1 -1
- package/dist/tools/office/excel-tools/page-setup.d.ts +6 -0
- package/dist/tools/office/excel-tools/page-setup.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/page-setup.js +144 -0
- package/dist/tools/office/excel-tools/page-setup.js.map +1 -0
- package/dist/tools/office/excel-tools/pivot-table.d.ts +7 -0
- package/dist/tools/office/excel-tools/pivot-table.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/pivot-table.js +151 -0
- package/dist/tools/office/excel-tools/pivot-table.js.map +1 -0
- package/dist/tools/office/excel-tools/rows-columns.d.ts +4 -0
- package/dist/tools/office/excel-tools/rows-columns.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/rows-columns.js +149 -2
- package/dist/tools/office/excel-tools/rows-columns.js.map +1 -1
- package/dist/tools/office/excel-tools/sheets.d.ts +8 -0
- package/dist/tools/office/excel-tools/sheets.d.ts.map +1 -1
- package/dist/tools/office/excel-tools/sheets.js +288 -0
- package/dist/tools/office/excel-tools/sheets.js.map +1 -1
- package/dist/tools/office/excel-tools/tables.d.ts +7 -0
- package/dist/tools/office/excel-tools/tables.d.ts.map +1 -0
- package/dist/tools/office/excel-tools/tables.js +156 -0
- package/dist/tools/office/excel-tools/tables.js.map +1 -0
- package/dist/tools/office/index.d.ts +3 -3
- package/dist/tools/office/index.d.ts.map +1 -1
- package/dist/tools/office/index.js +3 -3
- package/dist/tools/office/index.js.map +1 -1
- package/dist/tools/office/powerpoint-client.d.ts +20 -0
- package/dist/tools/office/powerpoint-client.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-client.js +223 -0
- package/dist/tools/office/powerpoint-client.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/effects.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/effects.js +55 -42
- package/dist/tools/office/powerpoint-tools/effects.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/export.d.ts +1 -0
- package/dist/tools/office/powerpoint-tools/export.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/export.js +44 -1
- package/dist/tools/office/powerpoint-tools/export.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/launch.d.ts +0 -1
- package/dist/tools/office/powerpoint-tools/launch.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/launch.js +28 -36
- package/dist/tools/office/powerpoint-tools/launch.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/media.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/media.js +25 -15
- package/dist/tools/office/powerpoint-tools/media.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/notes.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/notes.js +20 -10
- package/dist/tools/office/powerpoint-tools/notes.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/sections.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/sections.js +13 -6
- package/dist/tools/office/powerpoint-tools/sections.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/shapes.d.ts +2 -0
- package/dist/tools/office/powerpoint-tools/shapes.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/shapes.js +181 -45
- package/dist/tools/office/powerpoint-tools/shapes.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/slides.d.ts +4 -0
- package/dist/tools/office/powerpoint-tools/slides.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/slides.js +179 -15
- package/dist/tools/office/powerpoint-tools/slides.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/tables.d.ts +6 -0
- package/dist/tools/office/powerpoint-tools/tables.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/tables.js +239 -9
- package/dist/tools/office/powerpoint-tools/tables.js.map +1 -1
- package/dist/tools/office/powerpoint-tools/text.d.ts +1 -0
- package/dist/tools/office/powerpoint-tools/text.d.ts.map +1 -1
- package/dist/tools/office/powerpoint-tools/text.js +96 -34
- package/dist/tools/office/powerpoint-tools/text.js.map +1 -1
- package/dist/tools/office/word-tools/find.d.ts +5 -0
- package/dist/tools/office/word-tools/find.d.ts.map +1 -0
- package/dist/tools/office/word-tools/find.js +106 -0
- package/dist/tools/office/word-tools/find.js.map +1 -0
- package/dist/tools/office/word-tools/footnotes.d.ts +9 -0
- package/dist/tools/office/word-tools/footnotes.d.ts.map +1 -0
- package/dist/tools/office/word-tools/footnotes.js +227 -0
- package/dist/tools/office/word-tools/footnotes.js.map +1 -0
- package/dist/tools/office/word-tools/index.d.ts +6 -0
- package/dist/tools/office/word-tools/index.d.ts.map +1 -1
- package/dist/tools/office/word-tools/index.js +18 -0
- package/dist/tools/office/word-tools/index.js.map +1 -1
- package/dist/tools/office/word-tools/launch.d.ts +0 -1
- package/dist/tools/office/word-tools/launch.d.ts.map +1 -1
- package/dist/tools/office/word-tools/launch.js +33 -36
- package/dist/tools/office/word-tools/launch.js.map +1 -1
- package/dist/tools/office/word-tools/selection.d.ts +8 -0
- package/dist/tools/office/word-tools/selection.d.ts.map +1 -0
- package/dist/tools/office/word-tools/selection.js +193 -0
- package/dist/tools/office/word-tools/selection.js.map +1 -0
- package/dist/tools/office/word-tools/tables-advanced.d.ts +8 -0
- package/dist/tools/office/word-tools/tables-advanced.d.ts.map +1 -0
- package/dist/tools/office/word-tools/tables-advanced.js +190 -0
- package/dist/tools/office/word-tools/tables-advanced.js.map +1 -0
- package/dist/tools/office/word-tools/toc.d.ts +6 -0
- package/dist/tools/office/word-tools/toc.d.ts.map +1 -0
- package/dist/tools/office/word-tools/toc.js +114 -0
- package/dist/tools/office/word-tools/toc.js.map +1 -0
- package/dist/tools/office/word-tools/track-changes.d.ts +8 -0
- package/dist/tools/office/word-tools/track-changes.d.ts.map +1 -0
- package/dist/tools/office/word-tools/track-changes.js +195 -0
- package/dist/tools/office/word-tools/track-changes.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/ui/components/Logo.d.ts.map +1 -1
- package/dist/ui/components/Logo.js +2 -4
- package/dist/ui/components/Logo.js.map +1 -1
- package/dist/ui/components/PlanExecuteApp.d.ts.map +1 -1
- package/dist/ui/components/PlanExecuteApp.js +3 -5
- package/dist/ui/components/PlanExecuteApp.js.map +1 -1
- package/dist/ui/components/dialogs/SettingsDialog.d.ts.map +1 -1
- package/dist/ui/components/dialogs/SettingsDialog.js +50 -5
- package/dist/ui/components/dialogs/SettingsDialog.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,8 +6,11 @@ const BROWSER_LAUNCH_DEFINITION = {
|
|
|
6
6
|
function: {
|
|
7
7
|
name: 'browser_launch',
|
|
8
8
|
description: `Launch Chrome/Edge browser for web testing and automation.
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
Uses Chrome DevTools Protocol (CDP) for browser control.
|
|
10
|
+
If browser is already running, returns existing session.
|
|
11
|
+
|
|
12
|
+
IMPORTANT: For visual testing or when user needs to see the browser, use headless: false (default).
|
|
13
|
+
Only use headless: true when explicitly requested by the user.`,
|
|
11
14
|
parameters: {
|
|
12
15
|
type: 'object',
|
|
13
16
|
properties: {
|
|
@@ -74,7 +77,8 @@ const BROWSER_NAVIGATE_DEFINITION = {
|
|
|
74
77
|
type: 'function',
|
|
75
78
|
function: {
|
|
76
79
|
name: 'browser_navigate',
|
|
77
|
-
description: `Navigate browser to a URL.
|
|
80
|
+
description: `Navigate browser to a URL. Waits for page load to complete.
|
|
81
|
+
|
|
78
82
|
Common URLs:
|
|
79
83
|
- http://localhost:3000 - Local development server
|
|
80
84
|
- http://localhost:8080 - Alternative local server
|
|
@@ -345,21 +349,21 @@ const BROWSER_GET_TEXT_DEFINITION = {
|
|
|
345
349
|
type: 'function',
|
|
346
350
|
function: {
|
|
347
351
|
name: 'browser_get_text',
|
|
348
|
-
description: `Get
|
|
352
|
+
description: `Get text content from an element or the entire page.
|
|
349
353
|
Use this to read content from the page, like error messages or confirmation text.`,
|
|
350
354
|
parameters: {
|
|
351
355
|
type: 'object',
|
|
352
356
|
properties: {
|
|
353
357
|
reason: {
|
|
354
358
|
type: 'string',
|
|
355
|
-
description: 'Explanation of why you
|
|
359
|
+
description: 'Explanation of why you need the text',
|
|
356
360
|
},
|
|
357
361
|
selector: {
|
|
358
362
|
type: 'string',
|
|
359
|
-
description: 'CSS selector of
|
|
363
|
+
description: 'CSS selector of element (optional, gets full page text if not provided)',
|
|
360
364
|
},
|
|
361
365
|
},
|
|
362
|
-
required: ['reason'
|
|
366
|
+
required: ['reason'],
|
|
363
367
|
},
|
|
364
368
|
},
|
|
365
369
|
};
|
|
@@ -377,17 +381,18 @@ async function executeBrowserGetText(args) {
|
|
|
377
381
|
}
|
|
378
382
|
const response = await browserClient.getText(selector);
|
|
379
383
|
if (!response.success) {
|
|
380
|
-
logger.toolError('browser_get_text', args, new Error(response.error ||
|
|
384
|
+
logger.toolError('browser_get_text', args, new Error(response.error || 'Failed to get text'), Date.now() - startTime);
|
|
381
385
|
return {
|
|
382
386
|
success: false,
|
|
383
|
-
error: response.error ||
|
|
387
|
+
error: response.error || 'Failed to get text',
|
|
384
388
|
};
|
|
385
389
|
}
|
|
386
390
|
const text = response['text'] || '(empty)';
|
|
391
|
+
const truncated = text.length > 5000 ? text.slice(0, 5000) + '\n... (truncated)' : text;
|
|
387
392
|
logger.toolSuccess('browser_get_text', args, { selector, textLength: text.length }, Date.now() - startTime);
|
|
388
393
|
return {
|
|
389
394
|
success: true,
|
|
390
|
-
result:
|
|
395
|
+
result: truncated,
|
|
391
396
|
};
|
|
392
397
|
}
|
|
393
398
|
catch (error) {
|
|
@@ -447,36 +452,33 @@ export const browserCloseTool = {
|
|
|
447
452
|
categories: BROWSER_CATEGORIES,
|
|
448
453
|
description: 'Close browser',
|
|
449
454
|
};
|
|
450
|
-
const
|
|
455
|
+
const BROWSER_GET_HTML_DEFINITION = {
|
|
451
456
|
type: 'function',
|
|
452
457
|
function: {
|
|
453
|
-
name: '
|
|
454
|
-
description: `Get the HTML content of the current page
|
|
455
|
-
Returns page URL, title, and HTML source.
|
|
456
|
-
|
|
457
|
-
Use this tool when you need to:
|
|
458
|
-
- Find elements and their selectors
|
|
459
|
-
- Understand the page structure
|
|
460
|
-
- Check form fields
|
|
461
|
-
- Debug page issues`,
|
|
458
|
+
name: 'browser_get_html',
|
|
459
|
+
description: `Get the HTML content of the current page or a specific element.`,
|
|
462
460
|
parameters: {
|
|
463
461
|
type: 'object',
|
|
464
462
|
properties: {
|
|
465
463
|
reason: {
|
|
466
464
|
type: 'string',
|
|
467
|
-
description: 'Explanation of why you need the
|
|
465
|
+
description: 'Explanation of why you need the HTML',
|
|
466
|
+
},
|
|
467
|
+
selector: {
|
|
468
|
+
type: 'string',
|
|
469
|
+
description: 'CSS selector to get HTML of specific element (optional, gets full page if not provided)',
|
|
468
470
|
},
|
|
469
471
|
},
|
|
470
472
|
required: ['reason'],
|
|
471
473
|
},
|
|
472
474
|
},
|
|
473
475
|
};
|
|
474
|
-
async function
|
|
476
|
+
async function executeBrowserGetHtml(args) {
|
|
475
477
|
const startTime = Date.now();
|
|
476
|
-
logger.toolStart('
|
|
478
|
+
logger.toolStart('browser_get_html', args);
|
|
477
479
|
try {
|
|
478
480
|
if (!(await browserClient.isBrowserActive())) {
|
|
479
|
-
logger.toolError('
|
|
481
|
+
logger.toolError('browser_get_html', args, new Error('Browser not running'), Date.now() - startTime);
|
|
480
482
|
return {
|
|
481
483
|
success: false,
|
|
482
484
|
error: 'Browser is not running. Use browser_launch first.',
|
|
@@ -484,10 +486,10 @@ async function executeBrowserGetContent(args) {
|
|
|
484
486
|
}
|
|
485
487
|
const response = await browserClient.getHtml();
|
|
486
488
|
if (!response.success) {
|
|
487
|
-
logger.toolError('
|
|
489
|
+
logger.toolError('browser_get_html', args, new Error(response.error || 'Failed to get HTML'), Date.now() - startTime);
|
|
488
490
|
return {
|
|
489
491
|
success: false,
|
|
490
|
-
error: response.error || 'Failed to get
|
|
492
|
+
error: response.error || 'Failed to get HTML',
|
|
491
493
|
};
|
|
492
494
|
}
|
|
493
495
|
const html = response.html || '';
|
|
@@ -495,25 +497,25 @@ async function executeBrowserGetContent(args) {
|
|
|
495
497
|
const truncatedHtml = html.length > maxLen
|
|
496
498
|
? html.substring(0, maxLen) + `\n...(truncated, ${html.length} total chars)`
|
|
497
499
|
: html;
|
|
498
|
-
logger.toolSuccess('
|
|
500
|
+
logger.toolSuccess('browser_get_html', args, { url: response.url, title: response.title, htmlLength: html.length }, Date.now() - startTime);
|
|
499
501
|
return {
|
|
500
502
|
success: true,
|
|
501
|
-
result:
|
|
503
|
+
result: truncatedHtml,
|
|
502
504
|
};
|
|
503
505
|
}
|
|
504
506
|
catch (error) {
|
|
505
|
-
logger.toolError('
|
|
507
|
+
logger.toolError('browser_get_html', args, error, Date.now() - startTime);
|
|
506
508
|
return {
|
|
507
509
|
success: false,
|
|
508
|
-
error: `Failed to get
|
|
510
|
+
error: `Failed to get HTML: ${error instanceof Error ? error.message : String(error)}`,
|
|
509
511
|
};
|
|
510
512
|
}
|
|
511
513
|
}
|
|
512
|
-
export const
|
|
513
|
-
definition:
|
|
514
|
-
execute:
|
|
514
|
+
export const browserGetHtmlTool = {
|
|
515
|
+
definition: BROWSER_GET_HTML_DEFINITION,
|
|
516
|
+
execute: executeBrowserGetHtml,
|
|
515
517
|
categories: BROWSER_CATEGORIES,
|
|
516
|
-
description: 'Get page HTML
|
|
518
|
+
description: 'Get page HTML',
|
|
517
519
|
};
|
|
518
520
|
const BROWSER_GET_CONSOLE_DEFINITION = {
|
|
519
521
|
type: 'function',
|
|
@@ -672,10 +674,10 @@ export const browserGetNetworkTool = {
|
|
|
672
674
|
categories: BROWSER_CATEGORIES,
|
|
673
675
|
description: 'Get browser network logs',
|
|
674
676
|
};
|
|
675
|
-
const
|
|
677
|
+
const BROWSER_BRING_TO_FRONT_DEFINITION = {
|
|
676
678
|
type: 'function',
|
|
677
679
|
function: {
|
|
678
|
-
name: '
|
|
680
|
+
name: 'browser_bring_to_front',
|
|
679
681
|
description: `Bring the browser window to the foreground.
|
|
680
682
|
Use this to make the browser window visible and focused when needed.`,
|
|
681
683
|
parameters: {
|
|
@@ -683,19 +685,19 @@ Use this to make the browser window visible and focused when needed.`,
|
|
|
683
685
|
properties: {
|
|
684
686
|
reason: {
|
|
685
687
|
type: 'string',
|
|
686
|
-
description: 'Explanation of why you need to
|
|
688
|
+
description: 'Explanation of why you need to bring the browser window to front',
|
|
687
689
|
},
|
|
688
690
|
},
|
|
689
691
|
required: ['reason'],
|
|
690
692
|
},
|
|
691
693
|
},
|
|
692
694
|
};
|
|
693
|
-
async function
|
|
695
|
+
async function executeBrowserBringToFront(args) {
|
|
694
696
|
const startTime = Date.now();
|
|
695
|
-
logger.toolStart('
|
|
697
|
+
logger.toolStart('browser_bring_to_front', {});
|
|
696
698
|
try {
|
|
697
699
|
if (!(await browserClient.isBrowserActive())) {
|
|
698
|
-
logger.toolError('
|
|
700
|
+
logger.toolError('browser_bring_to_front', args, new Error('Browser not running'), Date.now() - startTime);
|
|
699
701
|
return {
|
|
700
702
|
success: false,
|
|
701
703
|
error: 'Browser is not running. Use browser_launch first.',
|
|
@@ -703,29 +705,29 @@ async function executeBrowserFocus(args) {
|
|
|
703
705
|
}
|
|
704
706
|
const response = await browserClient.focus();
|
|
705
707
|
if (!response.success) {
|
|
706
|
-
logger.toolError('
|
|
708
|
+
logger.toolError('browser_bring_to_front', args, new Error(response.error || 'Failed to bring browser to front'), Date.now() - startTime);
|
|
707
709
|
return {
|
|
708
710
|
success: false,
|
|
709
|
-
error: response.error || 'Failed to
|
|
711
|
+
error: response.error || 'Failed to bring browser to front',
|
|
710
712
|
};
|
|
711
713
|
}
|
|
712
|
-
logger.toolSuccess('
|
|
714
|
+
logger.toolSuccess('browser_bring_to_front', args, { focused: true }, Date.now() - startTime);
|
|
713
715
|
return {
|
|
714
716
|
success: true,
|
|
715
717
|
result: 'Browser window brought to foreground.',
|
|
716
718
|
};
|
|
717
719
|
}
|
|
718
720
|
catch (error) {
|
|
719
|
-
logger.toolError('
|
|
721
|
+
logger.toolError('browser_bring_to_front', args, error, Date.now() - startTime);
|
|
720
722
|
return {
|
|
721
723
|
success: false,
|
|
722
|
-
error: `Failed to
|
|
724
|
+
error: `Failed to bring browser to front: ${error instanceof Error ? error.message : String(error)}`,
|
|
723
725
|
};
|
|
724
726
|
}
|
|
725
727
|
}
|
|
726
|
-
export const
|
|
727
|
-
definition:
|
|
728
|
-
execute:
|
|
728
|
+
export const browserBringToFrontTool = {
|
|
729
|
+
definition: BROWSER_BRING_TO_FRONT_DEFINITION,
|
|
730
|
+
execute: executeBrowserBringToFront,
|
|
729
731
|
categories: BROWSER_CATEGORIES,
|
|
730
732
|
description: 'Bring browser window to foreground',
|
|
731
733
|
};
|
|
@@ -953,6 +955,373 @@ export const browserExecuteScriptTool = {
|
|
|
953
955
|
categories: BROWSER_CATEGORIES,
|
|
954
956
|
description: 'Execute JavaScript in browser',
|
|
955
957
|
};
|
|
958
|
+
const BROWSER_WAIT_DEFINITION = {
|
|
959
|
+
type: 'function',
|
|
960
|
+
function: {
|
|
961
|
+
name: 'browser_wait',
|
|
962
|
+
description: `Wait for an element to appear or for a specified time.`,
|
|
963
|
+
parameters: {
|
|
964
|
+
type: 'object',
|
|
965
|
+
properties: {
|
|
966
|
+
reason: {
|
|
967
|
+
type: 'string',
|
|
968
|
+
description: 'Explanation of why you are waiting',
|
|
969
|
+
},
|
|
970
|
+
selector: {
|
|
971
|
+
type: 'string',
|
|
972
|
+
description: 'CSS selector to wait for (optional)',
|
|
973
|
+
},
|
|
974
|
+
timeout: {
|
|
975
|
+
type: 'number',
|
|
976
|
+
description: 'Timeout in seconds (default: 10)',
|
|
977
|
+
},
|
|
978
|
+
},
|
|
979
|
+
required: ['reason'],
|
|
980
|
+
},
|
|
981
|
+
},
|
|
982
|
+
};
|
|
983
|
+
async function executeBrowserWait(args) {
|
|
984
|
+
const selector = args['selector'];
|
|
985
|
+
const timeout = args['timeout'] || 10;
|
|
986
|
+
const startTime = Date.now();
|
|
987
|
+
logger.toolStart('browser_wait', { selector, timeout });
|
|
988
|
+
try {
|
|
989
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
990
|
+
logger.toolError('browser_wait', args, new Error('Browser not running'), Date.now() - startTime);
|
|
991
|
+
return {
|
|
992
|
+
success: false,
|
|
993
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
994
|
+
};
|
|
995
|
+
}
|
|
996
|
+
const response = await browserClient.waitFor(selector || '', timeout);
|
|
997
|
+
if (!response.success) {
|
|
998
|
+
logger.toolError('browser_wait', args, new Error(response.error || 'Wait failed'), Date.now() - startTime);
|
|
999
|
+
return {
|
|
1000
|
+
success: false,
|
|
1001
|
+
error: response.error || 'Wait failed',
|
|
1002
|
+
};
|
|
1003
|
+
}
|
|
1004
|
+
logger.toolSuccess('browser_wait', args, { selector, timeout }, Date.now() - startTime);
|
|
1005
|
+
return {
|
|
1006
|
+
success: true,
|
|
1007
|
+
result: response.message || 'Wait completed',
|
|
1008
|
+
};
|
|
1009
|
+
}
|
|
1010
|
+
catch (error) {
|
|
1011
|
+
logger.toolError('browser_wait', args, error, Date.now() - startTime);
|
|
1012
|
+
return {
|
|
1013
|
+
success: false,
|
|
1014
|
+
error: `Wait failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
1015
|
+
};
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
export const browserWaitTool = {
|
|
1019
|
+
definition: BROWSER_WAIT_DEFINITION,
|
|
1020
|
+
execute: executeBrowserWait,
|
|
1021
|
+
categories: BROWSER_CATEGORIES,
|
|
1022
|
+
description: 'Wait for element or time',
|
|
1023
|
+
};
|
|
1024
|
+
const BROWSER_CONNECT_DEFINITION = {
|
|
1025
|
+
type: 'function',
|
|
1026
|
+
function: {
|
|
1027
|
+
name: 'browser_connect',
|
|
1028
|
+
description: `Connect to an existing browser that has remote debugging enabled.`,
|
|
1029
|
+
parameters: {
|
|
1030
|
+
type: 'object',
|
|
1031
|
+
properties: {
|
|
1032
|
+
reason: {
|
|
1033
|
+
type: 'string',
|
|
1034
|
+
description: 'Explanation of why you are connecting',
|
|
1035
|
+
},
|
|
1036
|
+
port: {
|
|
1037
|
+
type: 'number',
|
|
1038
|
+
description: 'CDP port to connect to (default: 9222)',
|
|
1039
|
+
},
|
|
1040
|
+
},
|
|
1041
|
+
required: ['reason'],
|
|
1042
|
+
},
|
|
1043
|
+
},
|
|
1044
|
+
};
|
|
1045
|
+
async function executeBrowserConnect(args) {
|
|
1046
|
+
const port = args['port'];
|
|
1047
|
+
const startTime = Date.now();
|
|
1048
|
+
logger.toolStart('browser_connect', { port });
|
|
1049
|
+
try {
|
|
1050
|
+
const response = await browserClient.connect(port);
|
|
1051
|
+
if (!response.success) {
|
|
1052
|
+
logger.toolError('browser_connect', args, new Error(response.error || 'Failed to connect'), Date.now() - startTime);
|
|
1053
|
+
return {
|
|
1054
|
+
success: false,
|
|
1055
|
+
error: response.error || 'Failed to connect',
|
|
1056
|
+
};
|
|
1057
|
+
}
|
|
1058
|
+
logger.toolSuccess('browser_connect', args, { url: response['url'] }, Date.now() - startTime);
|
|
1059
|
+
return {
|
|
1060
|
+
success: true,
|
|
1061
|
+
result: `Connected to browser at ${response['url']}`,
|
|
1062
|
+
};
|
|
1063
|
+
}
|
|
1064
|
+
catch (error) {
|
|
1065
|
+
logger.toolError('browser_connect', args, error, Date.now() - startTime);
|
|
1066
|
+
return {
|
|
1067
|
+
success: false,
|
|
1068
|
+
error: `Failed to connect: ${error instanceof Error ? error.message : String(error)}`,
|
|
1069
|
+
};
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
export const browserConnectTool = {
|
|
1073
|
+
definition: BROWSER_CONNECT_DEFINITION,
|
|
1074
|
+
execute: executeBrowserConnect,
|
|
1075
|
+
categories: BROWSER_CATEGORIES,
|
|
1076
|
+
description: 'Connect to existing browser',
|
|
1077
|
+
};
|
|
1078
|
+
const BROWSER_GET_HEALTH_DEFINITION = {
|
|
1079
|
+
type: 'function',
|
|
1080
|
+
function: {
|
|
1081
|
+
name: 'browser_get_health',
|
|
1082
|
+
description: `Check browser connection health and status.`,
|
|
1083
|
+
parameters: {
|
|
1084
|
+
type: 'object',
|
|
1085
|
+
properties: {
|
|
1086
|
+
reason: {
|
|
1087
|
+
type: 'string',
|
|
1088
|
+
description: 'Explanation of why you are checking health',
|
|
1089
|
+
},
|
|
1090
|
+
},
|
|
1091
|
+
required: ['reason'],
|
|
1092
|
+
},
|
|
1093
|
+
},
|
|
1094
|
+
};
|
|
1095
|
+
async function executeBrowserGetHealth(args) {
|
|
1096
|
+
const startTime = Date.now();
|
|
1097
|
+
logger.toolStart('browser_get_health', args);
|
|
1098
|
+
try {
|
|
1099
|
+
const response = await browserClient.getHealth();
|
|
1100
|
+
if (!response) {
|
|
1101
|
+
logger.toolError('browser_get_health', args, new Error('Failed to get health'), Date.now() - startTime);
|
|
1102
|
+
return {
|
|
1103
|
+
success: false,
|
|
1104
|
+
error: 'Failed to get browser health',
|
|
1105
|
+
};
|
|
1106
|
+
}
|
|
1107
|
+
logger.toolSuccess('browser_get_health', args, { status: response.status }, Date.now() - startTime);
|
|
1108
|
+
return {
|
|
1109
|
+
success: true,
|
|
1110
|
+
result: JSON.stringify({
|
|
1111
|
+
status: response.status,
|
|
1112
|
+
version: response.version,
|
|
1113
|
+
browser: response.browser,
|
|
1114
|
+
}, null, 2),
|
|
1115
|
+
};
|
|
1116
|
+
}
|
|
1117
|
+
catch (error) {
|
|
1118
|
+
logger.toolError('browser_get_health', args, error, Date.now() - startTime);
|
|
1119
|
+
return {
|
|
1120
|
+
success: false,
|
|
1121
|
+
error: `Failed to get health: ${error instanceof Error ? error.message : String(error)}`,
|
|
1122
|
+
};
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
export const browserGetHealthTool = {
|
|
1126
|
+
definition: BROWSER_GET_HEALTH_DEFINITION,
|
|
1127
|
+
execute: executeBrowserGetHealth,
|
|
1128
|
+
categories: BROWSER_CATEGORIES,
|
|
1129
|
+
description: 'Check browser health',
|
|
1130
|
+
};
|
|
1131
|
+
const BROWSER_GET_PAGE_INFO_DEFINITION = {
|
|
1132
|
+
type: 'function',
|
|
1133
|
+
function: {
|
|
1134
|
+
name: 'browser_get_page_info',
|
|
1135
|
+
description: `Get information about the current page (URL, title, element counts, etc.).`,
|
|
1136
|
+
parameters: {
|
|
1137
|
+
type: 'object',
|
|
1138
|
+
properties: {
|
|
1139
|
+
reason: {
|
|
1140
|
+
type: 'string',
|
|
1141
|
+
description: 'Explanation of why you need page info',
|
|
1142
|
+
},
|
|
1143
|
+
},
|
|
1144
|
+
required: ['reason'],
|
|
1145
|
+
},
|
|
1146
|
+
},
|
|
1147
|
+
};
|
|
1148
|
+
async function executeBrowserGetPageInfo(args) {
|
|
1149
|
+
const startTime = Date.now();
|
|
1150
|
+
logger.toolStart('browser_get_page_info', args);
|
|
1151
|
+
try {
|
|
1152
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
1153
|
+
logger.toolError('browser_get_page_info', args, new Error('Browser not running'), Date.now() - startTime);
|
|
1154
|
+
return {
|
|
1155
|
+
success: false,
|
|
1156
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
1157
|
+
};
|
|
1158
|
+
}
|
|
1159
|
+
const response = await browserClient.getPageInfo();
|
|
1160
|
+
if (!response.success) {
|
|
1161
|
+
logger.toolError('browser_get_page_info', args, new Error(response.error || 'Failed to get page info'), Date.now() - startTime);
|
|
1162
|
+
return {
|
|
1163
|
+
success: false,
|
|
1164
|
+
error: response.error || 'Failed to get page info',
|
|
1165
|
+
};
|
|
1166
|
+
}
|
|
1167
|
+
logger.toolSuccess('browser_get_page_info', args, { url: response['url'] }, Date.now() - startTime);
|
|
1168
|
+
return {
|
|
1169
|
+
success: true,
|
|
1170
|
+
result: JSON.stringify({
|
|
1171
|
+
url: response['url'],
|
|
1172
|
+
title: response['title'],
|
|
1173
|
+
domain: response['domain'],
|
|
1174
|
+
readyState: response['readyState'],
|
|
1175
|
+
linkCount: response['linkCount'],
|
|
1176
|
+
imageCount: response['imageCount'],
|
|
1177
|
+
formCount: response['formCount'],
|
|
1178
|
+
inputCount: response['inputCount'],
|
|
1179
|
+
}, null, 2),
|
|
1180
|
+
};
|
|
1181
|
+
}
|
|
1182
|
+
catch (error) {
|
|
1183
|
+
logger.toolError('browser_get_page_info', args, error, Date.now() - startTime);
|
|
1184
|
+
return {
|
|
1185
|
+
success: false,
|
|
1186
|
+
error: `Failed to get page info: ${error instanceof Error ? error.message : String(error)}`,
|
|
1187
|
+
};
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
export const browserGetPageInfoTool = {
|
|
1191
|
+
definition: BROWSER_GET_PAGE_INFO_DEFINITION,
|
|
1192
|
+
execute: executeBrowserGetPageInfo,
|
|
1193
|
+
categories: BROWSER_CATEGORIES,
|
|
1194
|
+
description: 'Get page information',
|
|
1195
|
+
};
|
|
1196
|
+
const BROWSER_SEND_DEFINITION = {
|
|
1197
|
+
type: 'function',
|
|
1198
|
+
function: {
|
|
1199
|
+
name: 'browser_send',
|
|
1200
|
+
description: `Send a low-level CDP (Chrome DevTools Protocol) command.
|
|
1201
|
+
Use this for advanced operations not covered by other tools.`,
|
|
1202
|
+
parameters: {
|
|
1203
|
+
type: 'object',
|
|
1204
|
+
properties: {
|
|
1205
|
+
reason: {
|
|
1206
|
+
type: 'string',
|
|
1207
|
+
description: 'Explanation of why you are sending this command',
|
|
1208
|
+
},
|
|
1209
|
+
method: {
|
|
1210
|
+
type: 'string',
|
|
1211
|
+
description: 'CDP method name (e.g., "Page.navigate", "DOM.getDocument")',
|
|
1212
|
+
},
|
|
1213
|
+
params: {
|
|
1214
|
+
type: 'object',
|
|
1215
|
+
description: 'Parameters for the CDP method',
|
|
1216
|
+
},
|
|
1217
|
+
},
|
|
1218
|
+
required: ['reason', 'method'],
|
|
1219
|
+
},
|
|
1220
|
+
},
|
|
1221
|
+
};
|
|
1222
|
+
async function executeBrowserSend(args) {
|
|
1223
|
+
const method = args['method'];
|
|
1224
|
+
const params = args['params'];
|
|
1225
|
+
const startTime = Date.now();
|
|
1226
|
+
logger.toolStart('browser_send', { method });
|
|
1227
|
+
try {
|
|
1228
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
1229
|
+
logger.toolError('browser_send', args, new Error('Browser not running'), Date.now() - startTime);
|
|
1230
|
+
return {
|
|
1231
|
+
success: false,
|
|
1232
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
1233
|
+
};
|
|
1234
|
+
}
|
|
1235
|
+
const response = await browserClient.send(method, params);
|
|
1236
|
+
if (!response.success) {
|
|
1237
|
+
logger.toolError('browser_send', args, new Error(response.error || 'Failed to send CDP command'), Date.now() - startTime);
|
|
1238
|
+
return {
|
|
1239
|
+
success: false,
|
|
1240
|
+
error: response.error || 'Failed to send CDP command',
|
|
1241
|
+
};
|
|
1242
|
+
}
|
|
1243
|
+
logger.toolSuccess('browser_send', args, { method }, Date.now() - startTime);
|
|
1244
|
+
return {
|
|
1245
|
+
success: true,
|
|
1246
|
+
result: JSON.stringify(response['result'], null, 2),
|
|
1247
|
+
};
|
|
1248
|
+
}
|
|
1249
|
+
catch (error) {
|
|
1250
|
+
logger.toolError('browser_send', args, error, Date.now() - startTime);
|
|
1251
|
+
return {
|
|
1252
|
+
success: false,
|
|
1253
|
+
error: `Failed to send CDP command: ${error instanceof Error ? error.message : String(error)}`,
|
|
1254
|
+
};
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
export const browserSendTool = {
|
|
1258
|
+
definition: BROWSER_SEND_DEFINITION,
|
|
1259
|
+
execute: executeBrowserSend,
|
|
1260
|
+
categories: BROWSER_CATEGORIES,
|
|
1261
|
+
description: 'Send CDP command',
|
|
1262
|
+
};
|
|
1263
|
+
const BROWSER_FOCUS_DEFINITION = {
|
|
1264
|
+
type: 'function',
|
|
1265
|
+
function: {
|
|
1266
|
+
name: 'browser_focus',
|
|
1267
|
+
description: `Focus on a DOM element by CSS selector.
|
|
1268
|
+
Use this to focus input fields or other focusable elements.`,
|
|
1269
|
+
parameters: {
|
|
1270
|
+
type: 'object',
|
|
1271
|
+
properties: {
|
|
1272
|
+
reason: {
|
|
1273
|
+
type: 'string',
|
|
1274
|
+
description: 'Explanation of why you are focusing this element',
|
|
1275
|
+
},
|
|
1276
|
+
selector: {
|
|
1277
|
+
type: 'string',
|
|
1278
|
+
description: 'CSS selector of element to focus',
|
|
1279
|
+
},
|
|
1280
|
+
},
|
|
1281
|
+
required: ['reason', 'selector'],
|
|
1282
|
+
},
|
|
1283
|
+
},
|
|
1284
|
+
};
|
|
1285
|
+
async function executeBrowserFocus(args) {
|
|
1286
|
+
const selector = args['selector'];
|
|
1287
|
+
const startTime = Date.now();
|
|
1288
|
+
logger.toolStart('browser_focus', { selector });
|
|
1289
|
+
try {
|
|
1290
|
+
if (!(await browserClient.isBrowserActive())) {
|
|
1291
|
+
logger.toolError('browser_focus', args, new Error('Browser not running'), Date.now() - startTime);
|
|
1292
|
+
return {
|
|
1293
|
+
success: false,
|
|
1294
|
+
error: 'Browser is not running. Use browser_launch first.',
|
|
1295
|
+
};
|
|
1296
|
+
}
|
|
1297
|
+
const response = await browserClient.focusElement(selector);
|
|
1298
|
+
if (!response.success) {
|
|
1299
|
+
logger.toolError('browser_focus', args, new Error(response.error || 'Failed to focus element'), Date.now() - startTime);
|
|
1300
|
+
return {
|
|
1301
|
+
success: false,
|
|
1302
|
+
error: response.error || 'Failed to focus element',
|
|
1303
|
+
};
|
|
1304
|
+
}
|
|
1305
|
+
logger.toolSuccess('browser_focus', args, { selector }, Date.now() - startTime);
|
|
1306
|
+
return {
|
|
1307
|
+
success: true,
|
|
1308
|
+
result: `Element focused: ${selector}`,
|
|
1309
|
+
};
|
|
1310
|
+
}
|
|
1311
|
+
catch (error) {
|
|
1312
|
+
logger.toolError('browser_focus', args, error, Date.now() - startTime);
|
|
1313
|
+
return {
|
|
1314
|
+
success: false,
|
|
1315
|
+
error: `Failed to focus element: ${error instanceof Error ? error.message : String(error)}`,
|
|
1316
|
+
};
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
export const browserFocusTool = {
|
|
1320
|
+
definition: BROWSER_FOCUS_DEFINITION,
|
|
1321
|
+
execute: executeBrowserFocus,
|
|
1322
|
+
categories: BROWSER_CATEGORIES,
|
|
1323
|
+
description: 'Focus element',
|
|
1324
|
+
};
|
|
956
1325
|
export const BROWSER_TOOLS = [
|
|
957
1326
|
browserLaunchTool,
|
|
958
1327
|
browserNavigateTool,
|
|
@@ -960,14 +1329,20 @@ export const BROWSER_TOOLS = [
|
|
|
960
1329
|
browserClickTool,
|
|
961
1330
|
browserFillTool,
|
|
962
1331
|
browserGetTextTool,
|
|
963
|
-
|
|
1332
|
+
browserGetHtmlTool,
|
|
964
1333
|
browserGetConsoleTool,
|
|
965
1334
|
browserGetNetworkTool,
|
|
1335
|
+
browserBringToFrontTool,
|
|
966
1336
|
browserFocusTool,
|
|
967
1337
|
browserPressKeyTool,
|
|
968
1338
|
browserTypeTool,
|
|
969
1339
|
browserExecuteScriptTool,
|
|
970
1340
|
browserCloseTool,
|
|
1341
|
+
browserWaitTool,
|
|
1342
|
+
browserConnectTool,
|
|
1343
|
+
browserGetHealthTool,
|
|
1344
|
+
browserGetPageInfoTool,
|
|
1345
|
+
browserSendTool,
|
|
971
1346
|
];
|
|
972
1347
|
export const BROWSER_SUB_AGENT_TOOLS = [
|
|
973
1348
|
browserNavigateTool,
|
|
@@ -975,9 +1350,13 @@ export const BROWSER_SUB_AGENT_TOOLS = [
|
|
|
975
1350
|
browserClickTool,
|
|
976
1351
|
browserFillTool,
|
|
977
1352
|
browserGetTextTool,
|
|
1353
|
+
browserGetHtmlTool,
|
|
1354
|
+
browserGetPageInfoTool,
|
|
978
1355
|
browserFocusTool,
|
|
979
1356
|
browserPressKeyTool,
|
|
980
1357
|
browserTypeTool,
|
|
981
1358
|
browserExecuteScriptTool,
|
|
1359
|
+
browserWaitTool,
|
|
1360
|
+
browserSendTool,
|
|
982
1361
|
];
|
|
983
1362
|
//# sourceMappingURL=browser-tools.js.map
|