supapup
Version:
⚡ Lightning-fast MCP browser dev tool. Navigate → Get instant structured data. No screenshots needed! Puppeteer: 📸 → CSS selectors → JS eval. Supapup: semantic IDs ready to use. 10x faster, 90% fewer tokens.
156 lines (155 loc) • 4.69 kB
JavaScript
/**
* Role-based tool filtering for Supapup
* Defines which tools are available for different use cases
*/
// Define tester tools first
const TESTER_TOOLS = [
// Core Navigation & Interaction
'browser_navigate',
'agent_execute_action',
'agent_read_content',
// Form Testing
'form_fill',
'form_detect',
// Visual Verification
'screenshot_capture',
'screenshot_paginated',
'screenshot_get_chunk',
// Responsive Testing
'viewport_set',
'viewport_test_responsive',
'test_responsive',
'test_responsive_section',
'test_responsive_section_get_screenshot',
// Element Inspection (Read-only)
'devtools_inspect_element',
'page_inspect_element',
// Network & Console Monitoring
'network_get_api_logs',
'network_get_console_logs',
'network_clear_logs',
// Performance & Accessibility Testing
'page_get_performance',
'page_get_accessibility',
// Page Analysis
'page_evaluate_script',
'page_trigger_hover',
// Server Info
'server_info'
];
export const ROLE_DEFINITIONS = {
tester: {
name: 'tester',
description: 'Essential tools for QA testing and responsive design verification',
defaultHeadless: true,
tools: TESTER_TOOLS
},
developer: {
name: 'developer',
description: 'Full development toolkit with debugging and modification capabilities',
defaultHeadless: false,
tools: [
// All tester tools
...TESTER_TOOLS,
// Advanced Element Manipulation
'devtools_modify_css',
'devtools_modify_html',
'devtools_highlight_element',
'devtools_get_computed_styles',
'devtools_visual_element_map',
// Advanced Network Tools
'network_get_logs',
'network_replay_request',
'network_intercept_requests',
'network_throttle',
// Storage Management
'storage_get',
'storage_set',
'storage_remove',
'storage_clear',
'storage_export_state',
'storage_import_state',
'storage_get_info',
// Advanced Agent Tools
'agent_generate_page',
'agent_remap_page',
'agent_wait_for_changes',
'agent_get_page_chunk',
'agent_get_page_state',
'agent_discover_actions',
// Browser Management
'browser_close',
'browser_set_visibility',
'browser_open_in_tab',
'browser_list_tabs',
'browser_switch_tab',
// Advanced Screenshots
'browser_navigate_and_capture_loading_sequence',
'get_loading_sequence_frame',
// Human Interaction
'ask_human',
// Page Resources
'page_get_resources',
// Hover testing (developer role only)
'page_trigger_hover'
]
},
automation: {
name: 'automation',
description: 'Minimal tools for basic web automation tasks',
defaultHeadless: true,
tools: [
// Core Navigation
'browser_navigate',
// Basic Interaction
'agent_execute_action',
'agent_read_content',
// Form Automation
'form_fill',
// Basic Verification
'screenshot_capture',
// Network Monitoring
'network_get_console_logs',
// Script Execution
'page_evaluate_script',
// Server Info
'server_info'
]
}
};
/**
* Get tools for a specific role
*/
export function getToolsForRole(role) {
if (!role) {
return null; // Return null to indicate all tools should be used
}
const roleConfig = ROLE_DEFINITIONS[role.toLowerCase()];
if (!roleConfig) {
throw new Error(`Unknown role: ${role}. Available roles: ${Object.keys(ROLE_DEFINITIONS).join(', ')}`);
}
return roleConfig.tools;
}
/**
* Get default headless setting for a role
*/
export function getDefaultHeadlessForRole(role) {
if (!role) {
return undefined; // Use existing default
}
const roleConfig = ROLE_DEFINITIONS[role.toLowerCase()];
return roleConfig?.defaultHeadless;
}
/**
* Get role description
*/
export function getRoleDescription(role) {
const roleConfig = ROLE_DEFINITIONS[role.toLowerCase()];
return roleConfig?.description || 'Unknown role';
}
/**
* List all available roles
*/
export function getAvailableRoles() {
return Object.values(ROLE_DEFINITIONS);
}