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.
Files changed (187) hide show
  1. package/dist/agents/browser/browser-sub-agent.d.ts.map +1 -1
  2. package/dist/agents/browser/browser-sub-agent.js +3 -0
  3. package/dist/agents/browser/browser-sub-agent.js.map +1 -1
  4. package/dist/constants.d.ts +1 -2
  5. package/dist/constants.d.ts.map +1 -1
  6. package/dist/constants.js +1 -2
  7. package/dist/constants.js.map +1 -1
  8. package/dist/core/llm/llm-client.d.ts +1 -0
  9. package/dist/core/llm/llm-client.d.ts.map +1 -1
  10. package/dist/core/llm/llm-client.js +17 -4
  11. package/dist/core/llm/llm-client.js.map +1 -1
  12. package/dist/core/llm/providers.d.ts +12 -0
  13. package/dist/core/llm/providers.d.ts.map +1 -0
  14. package/dist/core/llm/providers.js +80 -0
  15. package/dist/core/llm/providers.js.map +1 -0
  16. package/dist/prompts/system/plan-execute.d.ts.map +1 -1
  17. package/dist/prompts/system/plan-execute.js +40 -4
  18. package/dist/prompts/system/plan-execute.js.map +1 -1
  19. package/dist/tools/browser/browser-client.d.ts +13 -1
  20. package/dist/tools/browser/browser-client.d.ts.map +1 -1
  21. package/dist/tools/browser/browser-client.js +137 -9
  22. package/dist/tools/browser/browser-client.js.map +1 -1
  23. package/dist/tools/browser/browser-tools.d.ts +8 -2
  24. package/dist/tools/browser/browser-tools.d.ts.map +1 -1
  25. package/dist/tools/browser/browser-tools.js +428 -49
  26. package/dist/tools/browser/browser-tools.js.map +1 -1
  27. package/dist/tools/browser/index.d.ts +1 -1
  28. package/dist/tools/browser/index.d.ts.map +1 -1
  29. package/dist/tools/browser/index.js +1 -1
  30. package/dist/tools/browser/index.js.map +1 -1
  31. package/dist/tools/llm/simple/planning-tools.d.ts +1 -0
  32. package/dist/tools/llm/simple/planning-tools.d.ts.map +1 -1
  33. package/dist/tools/llm/simple/planning-tools.js +80 -26
  34. package/dist/tools/llm/simple/planning-tools.js.map +1 -1
  35. package/dist/tools/llm/simple/read-image-tool.d.ts.map +1 -1
  36. package/dist/tools/llm/simple/read-image-tool.js +0 -2
  37. package/dist/tools/llm/simple/read-image-tool.js.map +1 -1
  38. package/dist/tools/office/excel-tools/advanced.d.ts +13 -0
  39. package/dist/tools/office/excel-tools/advanced.d.ts.map +1 -0
  40. package/dist/tools/office/excel-tools/advanced.js +364 -0
  41. package/dist/tools/office/excel-tools/advanced.js.map +1 -0
  42. package/dist/tools/office/excel-tools/cells.js +1 -1
  43. package/dist/tools/office/excel-tools/cells.js.map +1 -1
  44. package/dist/tools/office/excel-tools/charts.d.ts +6 -0
  45. package/dist/tools/office/excel-tools/charts.d.ts.map +1 -1
  46. package/dist/tools/office/excel-tools/charts.js +250 -1
  47. package/dist/tools/office/excel-tools/charts.js.map +1 -1
  48. package/dist/tools/office/excel-tools/comments.d.ts +1 -0
  49. package/dist/tools/office/excel-tools/comments.d.ts.map +1 -1
  50. package/dist/tools/office/excel-tools/comments.js +36 -0
  51. package/dist/tools/office/excel-tools/comments.js.map +1 -1
  52. package/dist/tools/office/excel-tools/data-ops.d.ts +4 -0
  53. package/dist/tools/office/excel-tools/data-ops.d.ts.map +1 -1
  54. package/dist/tools/office/excel-tools/data-ops.js +155 -1
  55. package/dist/tools/office/excel-tools/data-ops.js.map +1 -1
  56. package/dist/tools/office/excel-tools/export.d.ts +3 -0
  57. package/dist/tools/office/excel-tools/export.d.ts.map +1 -1
  58. package/dist/tools/office/excel-tools/export.js +117 -1
  59. package/dist/tools/office/excel-tools/export.js.map +1 -1
  60. package/dist/tools/office/excel-tools/formatting.d.ts +2 -0
  61. package/dist/tools/office/excel-tools/formatting.d.ts.map +1 -1
  62. package/dist/tools/office/excel-tools/formatting.js +74 -0
  63. package/dist/tools/office/excel-tools/formatting.js.map +1 -1
  64. package/dist/tools/office/excel-tools/formulas.d.ts +11 -0
  65. package/dist/tools/office/excel-tools/formulas.d.ts.map +1 -0
  66. package/dist/tools/office/excel-tools/formulas.js +313 -0
  67. package/dist/tools/office/excel-tools/formulas.js.map +1 -0
  68. package/dist/tools/office/excel-tools/index.d.ts +5 -0
  69. package/dist/tools/office/excel-tools/index.d.ts.map +1 -1
  70. package/dist/tools/office/excel-tools/index.js +15 -0
  71. package/dist/tools/office/excel-tools/index.js.map +1 -1
  72. package/dist/tools/office/excel-tools/launch.d.ts +0 -1
  73. package/dist/tools/office/excel-tools/launch.d.ts.map +1 -1
  74. package/dist/tools/office/excel-tools/launch.js +33 -36
  75. package/dist/tools/office/excel-tools/launch.js.map +1 -1
  76. package/dist/tools/office/excel-tools/media.d.ts +5 -0
  77. package/dist/tools/office/excel-tools/media.d.ts.map +1 -1
  78. package/dist/tools/office/excel-tools/media.js +176 -0
  79. package/dist/tools/office/excel-tools/media.js.map +1 -1
  80. package/dist/tools/office/excel-tools/page-setup.d.ts +6 -0
  81. package/dist/tools/office/excel-tools/page-setup.d.ts.map +1 -0
  82. package/dist/tools/office/excel-tools/page-setup.js +144 -0
  83. package/dist/tools/office/excel-tools/page-setup.js.map +1 -0
  84. package/dist/tools/office/excel-tools/pivot-table.d.ts +7 -0
  85. package/dist/tools/office/excel-tools/pivot-table.d.ts.map +1 -0
  86. package/dist/tools/office/excel-tools/pivot-table.js +151 -0
  87. package/dist/tools/office/excel-tools/pivot-table.js.map +1 -0
  88. package/dist/tools/office/excel-tools/rows-columns.d.ts +4 -0
  89. package/dist/tools/office/excel-tools/rows-columns.d.ts.map +1 -1
  90. package/dist/tools/office/excel-tools/rows-columns.js +149 -2
  91. package/dist/tools/office/excel-tools/rows-columns.js.map +1 -1
  92. package/dist/tools/office/excel-tools/sheets.d.ts +8 -0
  93. package/dist/tools/office/excel-tools/sheets.d.ts.map +1 -1
  94. package/dist/tools/office/excel-tools/sheets.js +288 -0
  95. package/dist/tools/office/excel-tools/sheets.js.map +1 -1
  96. package/dist/tools/office/excel-tools/tables.d.ts +7 -0
  97. package/dist/tools/office/excel-tools/tables.d.ts.map +1 -0
  98. package/dist/tools/office/excel-tools/tables.js +156 -0
  99. package/dist/tools/office/excel-tools/tables.js.map +1 -0
  100. package/dist/tools/office/index.d.ts +3 -3
  101. package/dist/tools/office/index.d.ts.map +1 -1
  102. package/dist/tools/office/index.js +3 -3
  103. package/dist/tools/office/index.js.map +1 -1
  104. package/dist/tools/office/powerpoint-client.d.ts +20 -0
  105. package/dist/tools/office/powerpoint-client.d.ts.map +1 -1
  106. package/dist/tools/office/powerpoint-client.js +223 -0
  107. package/dist/tools/office/powerpoint-client.js.map +1 -1
  108. package/dist/tools/office/powerpoint-tools/effects.d.ts.map +1 -1
  109. package/dist/tools/office/powerpoint-tools/effects.js +55 -42
  110. package/dist/tools/office/powerpoint-tools/effects.js.map +1 -1
  111. package/dist/tools/office/powerpoint-tools/export.d.ts +1 -0
  112. package/dist/tools/office/powerpoint-tools/export.d.ts.map +1 -1
  113. package/dist/tools/office/powerpoint-tools/export.js +44 -1
  114. package/dist/tools/office/powerpoint-tools/export.js.map +1 -1
  115. package/dist/tools/office/powerpoint-tools/launch.d.ts +0 -1
  116. package/dist/tools/office/powerpoint-tools/launch.d.ts.map +1 -1
  117. package/dist/tools/office/powerpoint-tools/launch.js +28 -36
  118. package/dist/tools/office/powerpoint-tools/launch.js.map +1 -1
  119. package/dist/tools/office/powerpoint-tools/media.d.ts.map +1 -1
  120. package/dist/tools/office/powerpoint-tools/media.js +25 -15
  121. package/dist/tools/office/powerpoint-tools/media.js.map +1 -1
  122. package/dist/tools/office/powerpoint-tools/notes.d.ts.map +1 -1
  123. package/dist/tools/office/powerpoint-tools/notes.js +20 -10
  124. package/dist/tools/office/powerpoint-tools/notes.js.map +1 -1
  125. package/dist/tools/office/powerpoint-tools/sections.d.ts.map +1 -1
  126. package/dist/tools/office/powerpoint-tools/sections.js +13 -6
  127. package/dist/tools/office/powerpoint-tools/sections.js.map +1 -1
  128. package/dist/tools/office/powerpoint-tools/shapes.d.ts +2 -0
  129. package/dist/tools/office/powerpoint-tools/shapes.d.ts.map +1 -1
  130. package/dist/tools/office/powerpoint-tools/shapes.js +181 -45
  131. package/dist/tools/office/powerpoint-tools/shapes.js.map +1 -1
  132. package/dist/tools/office/powerpoint-tools/slides.d.ts +4 -0
  133. package/dist/tools/office/powerpoint-tools/slides.d.ts.map +1 -1
  134. package/dist/tools/office/powerpoint-tools/slides.js +179 -15
  135. package/dist/tools/office/powerpoint-tools/slides.js.map +1 -1
  136. package/dist/tools/office/powerpoint-tools/tables.d.ts +6 -0
  137. package/dist/tools/office/powerpoint-tools/tables.d.ts.map +1 -1
  138. package/dist/tools/office/powerpoint-tools/tables.js +239 -9
  139. package/dist/tools/office/powerpoint-tools/tables.js.map +1 -1
  140. package/dist/tools/office/powerpoint-tools/text.d.ts +1 -0
  141. package/dist/tools/office/powerpoint-tools/text.d.ts.map +1 -1
  142. package/dist/tools/office/powerpoint-tools/text.js +96 -34
  143. package/dist/tools/office/powerpoint-tools/text.js.map +1 -1
  144. package/dist/tools/office/word-tools/find.d.ts +5 -0
  145. package/dist/tools/office/word-tools/find.d.ts.map +1 -0
  146. package/dist/tools/office/word-tools/find.js +106 -0
  147. package/dist/tools/office/word-tools/find.js.map +1 -0
  148. package/dist/tools/office/word-tools/footnotes.d.ts +9 -0
  149. package/dist/tools/office/word-tools/footnotes.d.ts.map +1 -0
  150. package/dist/tools/office/word-tools/footnotes.js +227 -0
  151. package/dist/tools/office/word-tools/footnotes.js.map +1 -0
  152. package/dist/tools/office/word-tools/index.d.ts +6 -0
  153. package/dist/tools/office/word-tools/index.d.ts.map +1 -1
  154. package/dist/tools/office/word-tools/index.js +18 -0
  155. package/dist/tools/office/word-tools/index.js.map +1 -1
  156. package/dist/tools/office/word-tools/launch.d.ts +0 -1
  157. package/dist/tools/office/word-tools/launch.d.ts.map +1 -1
  158. package/dist/tools/office/word-tools/launch.js +33 -36
  159. package/dist/tools/office/word-tools/launch.js.map +1 -1
  160. package/dist/tools/office/word-tools/selection.d.ts +8 -0
  161. package/dist/tools/office/word-tools/selection.d.ts.map +1 -0
  162. package/dist/tools/office/word-tools/selection.js +193 -0
  163. package/dist/tools/office/word-tools/selection.js.map +1 -0
  164. package/dist/tools/office/word-tools/tables-advanced.d.ts +8 -0
  165. package/dist/tools/office/word-tools/tables-advanced.d.ts.map +1 -0
  166. package/dist/tools/office/word-tools/tables-advanced.js +190 -0
  167. package/dist/tools/office/word-tools/tables-advanced.js.map +1 -0
  168. package/dist/tools/office/word-tools/toc.d.ts +6 -0
  169. package/dist/tools/office/word-tools/toc.d.ts.map +1 -0
  170. package/dist/tools/office/word-tools/toc.js +114 -0
  171. package/dist/tools/office/word-tools/toc.js.map +1 -0
  172. package/dist/tools/office/word-tools/track-changes.d.ts +8 -0
  173. package/dist/tools/office/word-tools/track-changes.d.ts.map +1 -0
  174. package/dist/tools/office/word-tools/track-changes.js +195 -0
  175. package/dist/tools/office/word-tools/track-changes.js.map +1 -0
  176. package/dist/types/index.d.ts +1 -0
  177. package/dist/types/index.d.ts.map +1 -1
  178. package/dist/ui/components/Logo.d.ts.map +1 -1
  179. package/dist/ui/components/Logo.js +2 -4
  180. package/dist/ui/components/Logo.js.map +1 -1
  181. package/dist/ui/components/PlanExecuteApp.d.ts.map +1 -1
  182. package/dist/ui/components/PlanExecuteApp.js +3 -5
  183. package/dist/ui/components/PlanExecuteApp.js.map +1 -1
  184. package/dist/ui/components/dialogs/SettingsDialog.d.ts.map +1 -1
  185. package/dist/ui/components/dialogs/SettingsDialog.js +50 -5
  186. package/dist/ui/components/dialogs/SettingsDialog.js.map +1 -1
  187. 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
- Use this tool to start a browser session before navigating to pages.
10
- The browser runs on Windows via CDP (Chrome DevTools Protocol).`,
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. Use this to open web pages for testing.
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 the text content of an element.
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 are reading this element',
359
+ description: 'Explanation of why you need the text',
356
360
  },
357
361
  selector: {
358
362
  type: 'string',
359
- description: 'CSS selector of the element to read',
363
+ description: 'CSS selector of element (optional, gets full page text if not provided)',
360
364
  },
361
365
  },
362
- required: ['reason', 'selector'],
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 || `Failed to get text: ${selector}`), Date.now() - startTime);
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 || `Failed to get text: ${selector}`,
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: text,
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 BROWSER_GET_CONTENT_DEFINITION = {
455
+ const BROWSER_GET_HTML_DEFINITION = {
451
456
  type: 'function',
452
457
  function: {
453
- name: 'browser_get_content',
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 page content',
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 executeBrowserGetContent(args) {
476
+ async function executeBrowserGetHtml(args) {
475
477
  const startTime = Date.now();
476
- logger.toolStart('browser_get_content', {});
478
+ logger.toolStart('browser_get_html', args);
477
479
  try {
478
480
  if (!(await browserClient.isBrowserActive())) {
479
- logger.toolError('browser_get_content', args, new Error('Browser not running'), Date.now() - startTime);
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('browser_get_content', args, new Error(response.error || 'Failed to get page content'), Date.now() - startTime);
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 page content',
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('browser_get_content', args, { url: response.url, title: response.title, htmlLength: html.length }, Date.now() - startTime);
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: `Page: ${response.title} (${response.url})\n\nHTML:\n${truncatedHtml}`,
503
+ result: truncatedHtml,
502
504
  };
503
505
  }
504
506
  catch (error) {
505
- logger.toolError('browser_get_content', args, error, Date.now() - startTime);
507
+ logger.toolError('browser_get_html', args, error, Date.now() - startTime);
506
508
  return {
507
509
  success: false,
508
- error: `Failed to get page content: ${error instanceof Error ? error.message : String(error)}`,
510
+ error: `Failed to get HTML: ${error instanceof Error ? error.message : String(error)}`,
509
511
  };
510
512
  }
511
513
  }
512
- export const browserGetContentTool = {
513
- definition: BROWSER_GET_CONTENT_DEFINITION,
514
- execute: executeBrowserGetContent,
514
+ export const browserGetHtmlTool = {
515
+ definition: BROWSER_GET_HTML_DEFINITION,
516
+ execute: executeBrowserGetHtml,
515
517
  categories: BROWSER_CATEGORIES,
516
- description: 'Get page HTML content',
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 BROWSER_FOCUS_DEFINITION = {
677
+ const BROWSER_BRING_TO_FRONT_DEFINITION = {
676
678
  type: 'function',
677
679
  function: {
678
- name: 'browser_focus',
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 focus the browser window',
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 executeBrowserFocus(args) {
695
+ async function executeBrowserBringToFront(args) {
694
696
  const startTime = Date.now();
695
- logger.toolStart('browser_focus', {});
697
+ logger.toolStart('browser_bring_to_front', {});
696
698
  try {
697
699
  if (!(await browserClient.isBrowserActive())) {
698
- logger.toolError('browser_focus', args, new Error('Browser not running'), Date.now() - startTime);
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('browser_focus', args, new Error(response.error || 'Failed to focus browser window'), Date.now() - startTime);
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 focus browser window',
711
+ error: response.error || 'Failed to bring browser to front',
710
712
  };
711
713
  }
712
- logger.toolSuccess('browser_focus', args, { focused: true }, Date.now() - startTime);
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('browser_focus', args, error, Date.now() - startTime);
721
+ logger.toolError('browser_bring_to_front', args, error, Date.now() - startTime);
720
722
  return {
721
723
  success: false,
722
- error: `Failed to focus browser: ${error instanceof Error ? error.message : String(error)}`,
724
+ error: `Failed to bring browser to front: ${error instanceof Error ? error.message : String(error)}`,
723
725
  };
724
726
  }
725
727
  }
726
- export const browserFocusTool = {
727
- definition: BROWSER_FOCUS_DEFINITION,
728
- execute: executeBrowserFocus,
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
- browserGetContentTool,
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