@cgaspard/webappmcp 0.1.4 → 0.1.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 (39) hide show
  1. package/README.md +25 -1
  2. package/dist/browser.js +168 -30
  3. package/dist/browser.js.map +1 -1
  4. package/dist/browser.min.js +1 -1
  5. package/dist/browser.min.js.map +1 -1
  6. package/dist/client/devtools.d.ts.map +1 -1
  7. package/dist/client/devtools.js +7 -6
  8. package/dist/client/devtools.js.map +1 -1
  9. package/dist/client/index.d.ts +4 -0
  10. package/dist/client/index.d.ts.map +1 -1
  11. package/dist/client/index.js +161 -24
  12. package/dist/client/index.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.esm.js.map +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/middleware/index.d.ts +40 -0
  18. package/dist/middleware/index.d.ts.map +1 -1
  19. package/dist/middleware/index.js +164 -47
  20. package/dist/middleware/index.js.map +1 -1
  21. package/dist/middleware/mcp-sse-server.d.ts +5 -8
  22. package/dist/middleware/mcp-sse-server.d.ts.map +1 -1
  23. package/dist/middleware/mcp-sse-server.js +89 -145
  24. package/dist/middleware/mcp-sse-server.js.map +1 -1
  25. package/dist/middleware/tools/capture.js +3 -3
  26. package/dist/middleware/tools/capture.js.map +1 -1
  27. package/dist/middleware/tools/dom.js +4 -4
  28. package/dist/middleware/tools/dom.js.map +1 -1
  29. package/dist/middleware/tools/execute.js +1 -1
  30. package/dist/middleware/tools/execute.js.map +1 -1
  31. package/dist/middleware/tools/interaction.js +4 -4
  32. package/dist/middleware/tools/interaction.js.map +1 -1
  33. package/dist/middleware/tools/routing.d.ts +3 -0
  34. package/dist/middleware/tools/routing.d.ts.map +1 -0
  35. package/dist/middleware/tools/routing.js +76 -0
  36. package/dist/middleware/tools/routing.js.map +1 -0
  37. package/dist/middleware/tools/state.js +4 -4
  38. package/dist/middleware/tools/state.js.map +1 -1
  39. package/package.json +2 -1
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).WebAppMCP={})}(this,function(exports){"use strict";class MCPDevTools{constructor(e={}){this.container=null,this.isExpanded=!1,this.logs=[],this.maxLogs=500,this.connectionStatus="disconnected",this.config={position:"bottom-right",theme:"dark",...e},this.createDevToolsUI(),this.setupEventListeners()}createDevToolsUI(){this.container=document.createElement("div"),this.container.id="mcp-devtools",this.container.className=`mcp-theme-${this.config.theme} mcp-position-${this.config.position}`,this.container.innerHTML='\n <div class="mcp-devtools-indicator" id="mcp-indicator">\n <div class="mcp-status-dot" id="mcp-status-dot"></div>\n <span class="mcp-label">MCP</span>\n </div>\n <div class="mcp-devtools-panel" id="mcp-panel" style="display: none;">\n <div class="mcp-devtools-header">\n <span>MCP DevTools</span>\n <div class="mcp-header-controls">\n <button class="mcp-theme-toggle" id="mcp-theme-btn" title="Toggle theme">🌓</button>\n <button class="mcp-close-btn" id="mcp-close-btn">×</button>\n </div>\n </div>\n <div class="mcp-devtools-content">\n <div class="mcp-status-section">\n <div class="mcp-status-item">\n <label>WebSocket:</label>\n <span id="mcp-ws-status">Disconnected</span>\n </div>\n <div class="mcp-status-item">\n <label>MCP Server:</label>\n <span id="mcp-server-status">Disconnected</span>\n </div>\n </div>\n <div class="mcp-logs-section">\n <div class="mcp-logs-header">\n <span>Activity Log</span>\n <div class="mcp-logs-controls">\n <label class="mcp-checkbox">\n <input type="checkbox" id="mcp-autoscroll" checked>\n Auto-scroll\n </label>\n <button class="mcp-clear-btn" id="mcp-clear-btn">Clear</button>\n </div>\n </div>\n <div class="mcp-logs-container" id="mcp-logs"></div>\n </div>\n </div>\n </div>\n ',this.addStyles(),document.body.appendChild(this.container)}addStyles(){const e=document.createElement("style");e.textContent="\n #mcp-devtools {\n position: fixed;\n z-index: 10000;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n \n /* Positioning */\n #mcp-devtools.mcp-position-bottom-right {\n bottom: 20px;\n right: 20px;\n }\n \n #mcp-devtools.mcp-position-bottom-left {\n bottom: 20px;\n left: 20px;\n }\n \n #mcp-devtools.mcp-position-top-right {\n top: 20px;\n right: 20px;\n }\n \n #mcp-devtools.mcp-position-top-left {\n top: 20px;\n left: 20px;\n }\n\n .mcp-devtools-indicator {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n background: rgba(255, 255, 255, 0.9);\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n\n .mcp-label {\n font-size: 10px;\n font-weight: 600;\n color: #495057;\n user-select: none;\n }\n\n .mcp-status-dot {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: #dc3545;\n border: 2px solid rgba(255, 255, 255, 0.8);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: background-color 0.3s ease;\n }\n\n .mcp-status-dot.connecting {\n background-color: #ffc107;\n animation: pulse 1.5s infinite;\n }\n\n .mcp-status-dot.connected {\n background-color: #28a745;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .mcp-devtools-panel {\n position: absolute;\n width: 400px;\n height: 300px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n }\n \n /* Panel positioning based on indicator position */\n .mcp-position-bottom-right .mcp-devtools-panel {\n bottom: 40px;\n right: 0;\n }\n \n .mcp-position-bottom-left .mcp-devtools-panel {\n bottom: 40px;\n left: 0;\n }\n \n .mcp-position-top-right .mcp-devtools-panel {\n top: 40px;\n right: 0;\n }\n \n .mcp-position-top-left .mcp-devtools-panel {\n top: 40px;\n left: 0;\n }\n\n .mcp-devtools-header {\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e0e0;\n border-radius: 8px 8px 0 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: 600;\n font-size: 14px;\n }\n\n .mcp-close-btn {\n background: none;\n border: none;\n font-size: 18px;\n cursor: pointer;\n color: #6c757d;\n padding: 0;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .mcp-close-btn:hover {\n color: #495057;\n }\n\n .mcp-devtools-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .mcp-status-section {\n padding: 12px 16px;\n border-bottom: 1px solid #e0e0e0;\n background: #f8f9fa;\n }\n\n .mcp-status-item {\n display: flex;\n justify-content: space-between;\n margin-bottom: 4px;\n font-size: 12px;\n }\n\n .mcp-status-item label {\n font-weight: 500;\n color: #495057;\n }\n\n .mcp-status-item span {\n color: #6c757d;\n }\n\n .mcp-logs-section {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .mcp-logs-header {\n padding: 8px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e0e0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n font-weight: 500;\n }\n\n .mcp-clear-btn {\n background: none;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 2px 8px;\n font-size: 11px;\n cursor: pointer;\n color: #6c757d;\n }\n\n .mcp-clear-btn:hover {\n background: #e9ecef;\n }\n\n .mcp-logs-container {\n flex: 1;\n overflow-y: auto;\n padding: 8px;\n font-size: 11px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n }\n\n .mcp-log-entry {\n margin-bottom: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n .mcp-log-entry.info {\n background: #e7f3ff;\n color: #0c5460;\n }\n\n .mcp-log-entry.warning {\n background: #fff3cd;\n color: #856404;\n }\n\n .mcp-log-entry.error {\n background: #f8d7da;\n color: #721c24;\n }\n\n .mcp-log-timestamp {\n color: #6c757d;\n font-size: 10px;\n }\n \n /* Header controls */\n .mcp-header-controls {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n \n .mcp-theme-toggle {\n background: none;\n border: none;\n font-size: 16px;\n cursor: pointer;\n padding: 0;\n opacity: 0.6;\n transition: opacity 0.2s;\n }\n \n .mcp-theme-toggle:hover {\n opacity: 1;\n }\n \n /* Log controls */\n .mcp-logs-controls {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n \n .mcp-checkbox {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n cursor: pointer;\n }\n \n .mcp-checkbox input {\n cursor: pointer;\n }\n \n /* Tool execution logs */\n .mcp-log-entry.tool {\n background: #e7f3ff;\n color: #004085;\n border-left: 3px solid #004085;\n }\n \n .mcp-tool-details {\n font-size: 10px;\n margin-top: 4px;\n padding-left: 16px;\n opacity: 0.8;\n }\n \n /* Dark theme */\n .mcp-theme-dark .mcp-devtools-indicator {\n background: rgba(30, 30, 30, 0.9);\n border-color: rgba(255, 255, 255, 0.1);\n }\n \n .mcp-theme-dark .mcp-label {\n color: #e0e0e0;\n }\n \n .mcp-theme-dark .mcp-devtools-panel {\n background: #1e1e1e;\n border-color: #333;\n }\n \n .mcp-theme-dark .mcp-devtools-header {\n background: #2d2d2d;\n border-color: #333;\n color: #e0e0e0;\n }\n \n .mcp-theme-dark .mcp-devtools-content {\n background: #1e1e1e;\n }\n \n .mcp-theme-dark .mcp-status-section {\n background: #2d2d2d;\n border-color: #333;\n }\n \n .mcp-theme-dark .mcp-status-item label {\n color: #b0b0b0;\n }\n \n .mcp-theme-dark .mcp-status-item span {\n color: #e0e0e0;\n }\n \n .mcp-theme-dark .mcp-logs-header {\n background: #2d2d2d;\n border-color: #333;\n color: #e0e0e0;\n }\n \n .mcp-theme-dark .mcp-logs-container {\n background: #252525;\n border-color: #333;\n }\n \n .mcp-theme-dark .mcp-log-entry {\n background: #2d2d2d;\n color: #e0e0e0;\n border-color: #333;\n }\n \n .mcp-theme-dark .mcp-log-entry.warning {\n background: #4a3800;\n color: #ffc107;\n }\n \n .mcp-theme-dark .mcp-log-entry.error {\n background: #4a0000;\n color: #ff6b6b;\n }\n \n .mcp-theme-dark .mcp-log-entry.tool {\n background: #003366;\n color: #66b3ff;\n border-left-color: #66b3ff;\n }\n \n .mcp-theme-dark .mcp-log-timestamp {\n color: #888;\n }\n \n .mcp-theme-dark .mcp-clear-btn,\n .mcp-theme-dark .mcp-close-btn {\n color: #e0e0e0;\n border-color: #555;\n }\n \n .mcp-theme-dark .mcp-clear-btn:hover,\n .mcp-theme-dark .mcp-close-btn:hover {\n background: #444;\n }\n }\n ",document.head.appendChild(e)}setupEventListeners(){const e=this.container?.querySelector("#mcp-indicator"),t=this.container?.querySelector("#mcp-close-btn"),n=this.container?.querySelector("#mcp-clear-btn"),o=this.container?.querySelector("#mcp-theme-btn");e?.addEventListener("click",()=>this.togglePanel()),t?.addEventListener("click",()=>this.togglePanel()),n?.addEventListener("click",()=>this.clearLogs()),o?.addEventListener("click",()=>this.toggleTheme())}toggleTheme(){this.container&&(this.config.theme="light"===this.config.theme?"dark":"light",this.container.className=`mcp-theme-${this.config.theme} mcp-position-${this.config.position}`)}togglePanel(){this.isExpanded=!this.isExpanded;const e=this.container?.querySelector("#mcp-panel");e&&(e.style.display=this.isExpanded?"flex":"none")}setConnectionStatus(e){this.connectionStatus=e;const t=this.container?.querySelector("#mcp-status-dot"),n=this.container?.querySelector("#mcp-ws-status"),o=this.container?.querySelector("#mcp-server-status");if(t&&(t.className=`mcp-status-dot ${e}`),n&&o){const t=e.charAt(0).toUpperCase()+e.slice(1);n.textContent=t,o.textContent=t}this.addLog("info","client",`Connection status: ${e}`)}addLog(e,t,n,o){const s={timestamp:(new Date).toISOString(),level:e,source:t,message:n,data:o};this.logs.push(s),this.logs.length>this.maxLogs&&(this.logs=this.logs.slice(-this.maxLogs)),this.renderLogs()}renderLogs(){const e=this.container?.querySelector("#mcp-logs");if(!e)return;e.innerHTML=this.logs.map(e=>{const t=new Date(e.timestamp).toLocaleTimeString();if("tool"===e.level&&e.data){const n=e.data;let o="";if(n.args&&(o+=`<div class="mcp-tool-details">Args: ${this.safeStringify(n.args)}</div>`),n.error&&(o+=`<div class="mcp-tool-details">Error: ${n.error}</div>`),n.result&&"completed"===n.status){const e=this.safeStringify(n.result);e.length>100?o+=`<div class="mcp-tool-details">Result: ${e.substring(0,100)}...</div>`:o+=`<div class="mcp-tool-details">Result: ${e}</div>`}return`\n <div class="mcp-log-entry ${e.level}">\n <span class="mcp-log-timestamp">[${t}]</span> [${e.source.toUpperCase()}] ${e.message}\n ${o}\n </div>\n `}{const n=e.data?` ${this.safeStringify(e.data)}`:"";return`\n <div class="mcp-log-entry ${e.level}">\n <span class="mcp-log-timestamp">[${t}]</span> [${e.source.toUpperCase()}] ${e.message}${n}\n </div>\n `}}).join("");const t=this.container?.querySelector("#mcp-autoscroll");t?.checked&&(e.scrollTop=e.scrollHeight)}safeStringify(e){try{if(null==e)return String(e);if("string"==typeof e||"number"==typeof e||"boolean"==typeof e)return String(e);const t=new Set;return JSON.stringify(e,(e,n)=>{if("object"==typeof n&&null!==n){if(t.has(n))return"[Circular Reference]";t.add(n)}return n})}catch(e){return`[Error stringifying: ${e instanceof Error?e.message:"Unknown error"}]`}}clearLogs(){this.logs=[],this.renderLogs()}logWebSocketEvent(e,t){this.addLog("info","websocket",e,t)}logMCPEvent(e,t){this.addLog("info","mcp",e,t)}logError(e,t,n){this.addLog("error",e,t,n)}logToolExecution(e,t,n,o,s,r){const c=null===n?"started":n?"completed":"failed",i={tool:e,status:c,args:t,executionTime:s?`${s}ms`:void 0,result:n&&r?r:void 0,error:n||"Success"===o?void 0:o},a=`Tool ${e} ${c}${s?` (${s}ms)`:""}`;this.addLog(!1===n?"error":"tool","tool",a,i)}}class WebAppMCPClient{get isConnected(){return this._isConnected&&this.ws?.readyState===WebSocket.OPEN}constructor(e){this.ws=null,this.reconnectAttempts=0,this.messageHandlers=new Map,this.consoleLogs=[],this._isConnected=!1,this.devTools=null,this.config={reconnectInterval:5e3,maxReconnectAttempts:10,enableDevTools:!0,debug:!1,enableConnection:!0,interceptConsole:!0,enabledTools:[],devToolsPosition:"bottom-right",devToolsTheme:"dark",...e},this.config.interceptConsole&&this.setupConsoleInterception(),this.config.enableDevTools&&this.config.enableConnection&&(this.devTools=new MCPDevTools({position:this.config.devToolsPosition,theme:this.config.devToolsTheme}),this.devTools.setConnectionStatus("disconnected"))}log(...e){this.config.debug&&console.log("[WebAppMCP Client]",...e)}logError(...e){console.error("[WebAppMCP Client Error]",...e)}connect(){if(this.config.enableConnection){if(!this.ws||this.ws.readyState!==WebSocket.OPEN){this.devTools?.setConnectionStatus("connecting"),this.devTools?.logWebSocketEvent("Attempting to connect",{url:this.config.serverUrl});try{const e=new URL(this.config.serverUrl),t={};this.config.authToken&&(t.Authorization=`Bearer ${this.config.authToken}`),this.config.authToken&&e.searchParams.set("token",this.config.authToken),this.ws=new WebSocket(e.toString()),this.setupWebSocketHandlers()}catch(e){this.logError("Failed to connect to WebApp MCP server:",e),this.devTools?.logError("websocket","Failed to connect",e),this.scheduleReconnect()}}}else this.log("Connection disabled by configuration")}disconnect(){this._isConnected=!1,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.ws&&(this.ws.close(),this.ws=null)}setupWebSocketHandlers(){this.ws&&(this.ws.onopen=()=>{this.log("Connected to WebApp MCP server"),this._isConnected=!0,this.reconnectAttempts=0,this.devTools?.setConnectionStatus("connected"),this.devTools?.logWebSocketEvent("Connected to WebApp MCP server"),this.sendMessage({type:"init",url:window.location.href})},this.ws.onmessage=e=>{try{const t=JSON.parse(e.data);this.devTools?.logWebSocketEvent("Message received",t),this.handleMessage(t)}catch(e){this.logError("Failed to parse WebSocket message:",e),this.devTools?.logError("websocket","Failed to parse message",e)}},this.ws.onerror=e=>{this.logError("WebSocket error:",e),this.devTools?.logError("websocket","WebSocket error",e)},this.ws.onclose=()=>{this.log("Disconnected from WebApp MCP server"),this._isConnected=!1,this.devTools?.setConnectionStatus("disconnected"),this.devTools?.logWebSocketEvent("Disconnected from WebApp MCP server"),this.scheduleReconnect()})}scheduleReconnect(){this.reconnectAttempts>=(this.config.maxReconnectAttempts||10)||this.reconnectTimer||(this.reconnectAttempts++,this.log(`Scheduling reconnect attempt ${this.reconnectAttempts}/${this.config.maxReconnectAttempts}`),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},this.config.reconnectInterval))}sendMessage(e){this.ws&&this.ws.readyState===WebSocket.OPEN?this.ws.send(JSON.stringify(e)):this.logError("WebSocket is not connected")}handleMessage(e){const{type:t,requestId:n,tool:o,args:s}=e;if(this.log("[WebApp Client] Received message:",JSON.stringify(e)),"connected"===t)return this.log("WebApp MCP client registered:",e.clientId),void this.devTools?.logMCPEvent("Client registered",{clientId:e.clientId});if("execute_tool"===t)return this.log(`[WebApp Client] Executing tool: ${o} with requestId: ${n}`),this.devTools?.logMCPEvent(`Executing tool: ${o}`,{requestId:n,args:s}),void this.executeToolHandler(n,o,s);const r=this.messageHandlers.get(t);r&&r(e)}async executeToolHandler(e,t,n){if(this.config.enabledTools&&this.config.enabledTools.length>0&&!this.config.enabledTools.includes(t)){const o=`Tool ${t} is not enabled`;return this.logError(o),this.devTools?.logToolExecution(t,n,!1,o),void this.sendMessage({type:"tool_response",requestId:e,success:!1,error:o})}this.log(`[WebApp Client] Executing tool handler for ${t}`),this.log("[WebApp Client] Tool args:",JSON.stringify(n)),this.devTools?.logToolExecution(t,n,null,"Started");const o=Date.now();try{let s;switch(t){case"dom_query":s=await this.domQuery(n);break;case"dom_get_properties":s=await this.domGetProperties(n);break;case"dom_get_text":s=await this.domGetText(n);break;case"dom_get_html":s=await this.domGetHTML(n);break;case"interaction_click":s=await this.interactionClick(n);break;case"interaction_type":s=await this.interactionType(n);break;case"interaction_scroll":s=await this.interactionScroll(n);break;case"interaction_hover":s=await this.interactionHover(n);break;case"capture_screenshot":s=await this.captureScreenshot(n);break;case"capture_element_screenshot":s=await this.captureElementScreenshot(n);break;case"state_get_variable":s=await this.stateGetVariable(n);break;case"state_local_storage":s=await this.stateLocalStorage(n);break;case"console_get_logs":s=await this.consoleGetLogs(n);break;case"dom_manipulate":s=await this.domManipulate(n);break;case"javascript_inject":s=await this.javascriptInject(n);break;case"webapp_list_clients":s=await this.webappListClients(n);break;case"execute_javascript":s=await this.executeJavascript(n);break;default:throw new Error(`Unknown tool: ${t}`)}const r=Date.now()-o;this.log("[WebApp Client] Tool execution successful, sending response"),this.devTools?.logToolExecution(t,n,!0,"Success",r,s),this.sendMessage({type:"tool_response",requestId:e,result:s,success:!0})}catch(s){const r=Date.now()-o,c=s instanceof Error?s.message:String(s);this.logError("[WebApp Client] Tool execution failed:",s),this.devTools?.logToolExecution(t,n,!1,c,r),this.sendMessage({type:"tool_response",requestId:e,success:!1,error:c})}}setupConsoleInterception(){const e={log:console.log,info:console.info,warn:console.warn,error:console.error},t=t=>(...n)=>{this.consoleLogs.push({level:t,timestamp:(new Date).toISOString(),args:n.map(e=>{try{return"object"==typeof e?JSON.stringify(e):String(e)}catch{return String(e)}})}),this.consoleLogs.length>1e3&&this.consoleLogs.shift(),e[t](...n)};console.log=t("log"),console.info=t("info"),console.warn=t("warn"),console.error=t("error")}async domQuery(e){const{selector:t,limit:n=10}=e;return{elements:Array.from(document.querySelectorAll(t)).slice(0,n).map(e=>({selector:t,tagName:e.tagName.toLowerCase(),id:e.id||void 0,className:e.className||void 0,text:e.textContent?.trim().substring(0,100),attributes:(()=>{const t={};for(let n=0;n<e.attributes.length;n++){const o=e.attributes[n];t[o.name]=o.value}return t})()}))}}async domGetProperties(e){const{selector:t,properties:n=[]}=e,o=document.querySelector(t);if(!o)throw new Error(`Element not found: ${t}`);const s={};for(const e of n)try{s[e]=o[e]}catch{s[e]=void 0}return s}async domGetText(e){const{selector:t,includeHidden:n=!1}=e,o=document.querySelectorAll(t),s=[];return o.forEach(e=>{if(n||null!==e.offsetParent){const t=e.textContent?.trim();t&&s.push(t)}}),{texts:s}}async domGetHTML(e){const{selector:t,outerHTML:n=!1}=e,o=document.querySelector(t);if(!o)throw new Error(`Element not found: ${t}`);return{html:n?o.outerHTML:o.innerHTML}}async interactionClick(e){const{selector:t,button:n="left"}=e,o=document.querySelector(t);if(!o)throw new Error(`Element not found: ${t}`);const s=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0,button:"right"===n?2:"middle"===n?1:0});return o.dispatchEvent(s),{success:!0}}async interactionType(e){const{selector:t,text:n,clear:o=!1}=e,s=document.querySelector(t);if(!s)throw new Error(`Element not found: ${t}`);return o&&(s.value=""),s.focus(),s.value+=n,s.dispatchEvent(new Event("input",{bubbles:!0})),s.dispatchEvent(new Event("change",{bubbles:!0})),{success:!0}}async interactionScroll(e){const{selector:t,direction:n,amount:o=100}=e,s=t?document.querySelector(t):window;if(!s&&t)throw new Error(`Element not found: ${t}`);const r={behavior:"smooth"};return"up"===n||"down"===n?r.top="down"===n?o:-o:r.left="right"===n?o:-o,s===window?window.scrollBy(r):s.scrollBy(r),{success:!0}}async interactionHover(e){const{selector:t}=e,n=document.querySelector(t);if(!n)throw new Error(`Element not found: ${t}`);return n.dispatchEvent(new MouseEvent("mouseenter",{view:window,bubbles:!0,cancelable:!0})),n.dispatchEvent(new MouseEvent("mouseover",{view:window,bubbles:!0,cancelable:!0})),{success:!0}}async captureScreenshot(e){const{fullPage:t=!0,format:n="png"}=e;try{const e=document.createElement("canvas"),o=e.getContext("2d");if(!o)throw new Error("Failed to create canvas context");const s=t?document.documentElement.scrollWidth:window.innerWidth,r=t?document.documentElement.scrollHeight:window.innerHeight;e.width=s,e.height=r,o.fillStyle="#f0f0f0",o.fillRect(0,0,s,r),o.fillStyle="#333",o.font="20px Arial",o.textAlign="center",o.fillText("Screenshot placeholder - implement with html2canvas",s/2,r/2);return{success:!0,dataUrl:e.toDataURL(`image/${n}`),width:s,height:r,message:"Screenshot captured (placeholder - integrate html2canvas for full implementation)"}}catch(e){throw new Error(`Failed to capture screenshot: ${e}`)}}async captureElementScreenshot(e){const{selector:t,format:n="png"}=e;if(!t)throw new Error("Selector is required for element screenshot");const o=document.querySelector(t);if(!o)throw new Error(`Element not found: ${t}`);try{const e=o.getBoundingClientRect(),s=document.createElement("canvas"),r=s.getContext("2d");if(!r)throw new Error("Failed to create canvas context");s.width=e.width,s.height=e.height,r.fillStyle="#e0e0e0",r.fillRect(0,0,e.width,e.height),r.fillStyle="#666",r.font="16px Arial",r.textAlign="center",r.fillText(`Element: ${t}`,e.width/2,e.height/2);return{success:!0,dataUrl:s.toDataURL(`image/${n}`),width:e.width,height:e.height,selector:t,message:"Element screenshot captured (placeholder - integrate html2canvas for full implementation)"}}catch(e){throw new Error(`Failed to capture element screenshot: ${e}`)}}async stateGetVariable(e){const{path:t}=e,n=t.split(".");let o=window;for(const e of n){if(!o||"object"!=typeof o||!(e in o))throw new Error(`Variable not found: ${t}`);o=o[e]}return{value:o}}async stateLocalStorage(e){const{operation:t,key:n,value:o}=e;switch(t){case"get":return{value:localStorage.getItem(n)};case"set":return localStorage.setItem(n,o),{success:!0};case"remove":return localStorage.removeItem(n),{success:!0};case"clear":return localStorage.clear(),{success:!0};case"getAll":const e={};for(let t=0;t<localStorage.length;t++){const n=localStorage.key(t);n&&(e[n]=localStorage.getItem(n)||"")}return{items:e};default:throw new Error(`Unknown localStorage operation: ${t}`)}}async consoleGetLogs(e){const{level:t="all",limit:n=100}=e;let o=this.consoleLogs;return"all"!==t&&(o=o.filter(e=>e.level===t)),{logs:o.slice(-n)}}async domManipulate(e){const{action:t,selector:n,value:o,attribute:s,property:r}=e;if(!n)throw new Error("Selector is required for DOM manipulation");const c=document.querySelector(n);if(!c)throw new Error(`Element not found: ${n}`);switch(t){case"setAttribute":if(!s||void 0===o)throw new Error("Attribute name and value are required for setAttribute");return c.setAttribute(s,o),{success:!0,message:`Set attribute ${s}="${o}" on ${n}`};case"removeAttribute":if(!s)throw new Error("Attribute name is required for removeAttribute");return c.removeAttribute(s),{success:!0,message:`Removed attribute ${s} from ${n}`};case"setProperty":if(!r||void 0===o)throw new Error("Property name and value are required for setProperty");return c[r]=o,{success:!0,message:`Set property ${r}=${o} on ${n}`};case"addClass":if(!o)throw new Error("Class name is required for addClass");return c.classList.add(o),{success:!0,message:`Added class "${o}" to ${n}`};case"removeClass":if(!o)throw new Error("Class name is required for removeClass");return c.classList.remove(o),{success:!0,message:`Removed class "${o}" from ${n}`};case"setInnerHTML":if(void 0===o)throw new Error("HTML content is required for setInnerHTML");return c.innerHTML=o,{success:!0,message:`Set innerHTML on ${n}`};case"setTextContent":if(void 0===o)throw new Error("Text content is required for setTextContent");return c.textContent=o,{success:!0,message:`Set textContent on ${n}`};case"setStyle":if(!r||void 0===o)throw new Error("Style property and value are required for setStyle");return c.style[r]=o,{success:!0,message:`Set style ${r}=${o} on ${n}`};case"remove":return c.remove(),{success:!0,message:`Removed element ${n}`};default:throw new Error(`Unknown DOM manipulation action: ${t}`)}}async javascriptInject(args){const{code:code,returnValue:returnValue=!1}=args;if(!code)throw new Error("JavaScript code is required");try{let result;if(returnValue)result=eval(code);else{const e=new Function(code);result=e()}return{success:!0,result:void 0!==result?result:null,message:"JavaScript executed successfully"}}catch(e){throw new Error(`JavaScript execution failed: ${e instanceof Error?e.message:"Unknown error"}`)}}async webappListClients(e){return{clients:[{id:"browser-client",type:"browser",url:window.location.href,userAgent:navigator.userAgent,connected:this.isConnected,timestamp:(new Date).toISOString()}]}}async executeJavascript(args){const{code:code,returnValue:returnValue=!1,async:async=!1}=args;if(!code)throw new Error("JavaScript code is required");try{let result;return async?result=returnValue?await eval(`(async () => { return ${code}; })()`):await eval(`(async () => { ${code}; })()`):returnValue?result=eval(`(() => { return ${code}; })()`):(eval(code),result=void 0),{success:!0,result:void 0!==result?result:null,message:"JavaScript executed successfully",executionTime:(new Date).toISOString()}}catch(e){throw new Error(`JavaScript execution failed: ${e instanceof Error?e.message:"Unknown error"}`)}}}"undefined"!=typeof window&&(window.WebAppMCP={WebAppMCPClient:WebAppMCPClient}),"undefined"!=typeof window&&(window.WebAppMCPClient=WebAppMCPClient,window.WebAppMCP={WebAppMCPClient:WebAppMCPClient}),exports.WebAppMCPClient=WebAppMCPClient});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).WebAppMCP={})}(this,function(exports){"use strict";class MCPDevTools{constructor(e={}){this.container=null,this.isExpanded=!1,this.logs=[],this.maxLogs=500,this.connectionStatus="disconnected",this.config={position:"bottom-right",theme:"dark",...e},this.addStyles(),this.createDevToolsUI(),this.setupEventListeners()}createDevToolsUI(){this.container=document.createElement("div"),this.container.id="mcp-devtools",this.container.className=`mcp-theme-${this.config.theme} mcp-position-${this.config.position}`,this.container.innerHTML='\n <div class="mcp-devtools-indicator" id="mcp-indicator">\n <div class="mcp-status-dot" id="mcp-status-dot"></div>\n <span class="mcp-label">MCP</span>\n </div>\n <div class="mcp-devtools-panel" id="mcp-panel" style="display: none;">\n <div class="mcp-devtools-header">\n <span>MCP DevTools</span>\n <div class="mcp-header-controls">\n <button class="mcp-theme-toggle" id="mcp-theme-btn" title="Toggle theme">🌓</button>\n <button class="mcp-close-btn" id="mcp-close-btn">×</button>\n </div>\n </div>\n <div class="mcp-devtools-content">\n <div class="mcp-status-section">\n <div class="mcp-status-item">\n <label>WebSocket:</label>\n <span id="mcp-ws-status">Disconnected</span>\n </div>\n <div class="mcp-status-item">\n <label>MCP Server:</label>\n <span id="mcp-server-status">Disconnected</span>\n </div>\n </div>\n <div class="mcp-logs-section">\n <div class="mcp-logs-header">\n <span>Activity Log</span>\n <div class="mcp-logs-controls">\n <label class="mcp-checkbox">\n <input type="checkbox" id="mcp-autoscroll" checked>\n Auto-scroll\n </label>\n <button class="mcp-clear-btn" id="mcp-clear-btn">Clear</button>\n </div>\n </div>\n <div class="mcp-logs-container" id="mcp-logs"></div>\n </div>\n </div>\n </div>\n ',this.addStyles(),document.body.appendChild(this.container)}addStyles(){const e=document.createElement("style");e.textContent="\n #mcp-devtools {\n position: fixed;\n z-index: 10000;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n \n /* Positioning */\n #mcp-devtools.mcp-position-bottom-right {\n bottom: 20px;\n right: 20px;\n }\n \n #mcp-devtools.mcp-position-bottom-left {\n bottom: 20px;\n left: 20px;\n }\n \n #mcp-devtools.mcp-position-top-right {\n top: 20px;\n right: 20px;\n }\n \n #mcp-devtools.mcp-position-top-left {\n top: 20px;\n left: 20px;\n }\n\n .mcp-devtools-indicator {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n background: rgba(255, 255, 255, 0.9);\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n }\n\n .mcp-label {\n font-size: 10px;\n font-weight: 600;\n color: #495057;\n user-select: none;\n }\n\n .mcp-status-dot {\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: #dc3545;\n border: 2px solid rgba(255, 255, 255, 0.8);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n transition: background-color 0.3s ease;\n }\n\n .mcp-status-dot.connecting {\n background-color: #ffc107;\n animation: pulse 1.5s infinite;\n }\n\n .mcp-status-dot.connected {\n background-color: #28a745;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .mcp-devtools-panel {\n position: absolute;\n width: 500px;\n height: 400px;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n }\n \n /* Panel positioning based on indicator position */\n .mcp-position-bottom-right .mcp-devtools-panel {\n bottom: 40px;\n right: 0;\n }\n \n .mcp-position-bottom-left .mcp-devtools-panel {\n bottom: 40px;\n left: 0;\n }\n \n .mcp-position-top-right .mcp-devtools-panel {\n top: 40px;\n right: 0;\n }\n \n .mcp-position-top-left .mcp-devtools-panel {\n top: 40px;\n left: 0;\n }\n\n .mcp-devtools-header {\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e0e0;\n border-radius: 8px 8px 0 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-weight: 600;\n font-size: 14px;\n }\n\n .mcp-close-btn {\n background: none;\n border: none;\n font-size: 18px;\n cursor: pointer;\n color: #6c757d;\n padding: 0;\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .mcp-close-btn:hover {\n color: #495057;\n }\n\n .mcp-devtools-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .mcp-status-section {\n padding: 12px 16px;\n border-bottom: 1px solid #e0e0e0;\n background: #f8f9fa;\n }\n\n .mcp-status-item {\n display: flex;\n justify-content: space-between;\n margin-bottom: 4px;\n font-size: 12px;\n }\n\n .mcp-status-item label {\n font-weight: 500;\n color: #495057;\n }\n\n .mcp-status-item span {\n color: #6c757d;\n }\n\n .mcp-logs-section {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .mcp-logs-header {\n padding: 8px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #e0e0e0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n font-weight: 500;\n }\n\n .mcp-clear-btn {\n background: none;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 2px 8px;\n font-size: 11px;\n cursor: pointer;\n color: #6c757d;\n }\n\n .mcp-clear-btn:hover {\n background: #e9ecef;\n }\n\n .mcp-logs-container {\n flex: 1;\n overflow-y: auto;\n padding: 8px;\n font-size: 11px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n }\n\n .mcp-log-entry {\n margin-bottom: 4px;\n padding: 4px 8px;\n border-radius: 4px;\n white-space: pre-wrap;\n word-break: break-word;\n }\n\n .mcp-log-entry.info {\n background: #e7f3ff;\n color: #0c5460;\n }\n\n .mcp-log-entry.warning {\n background: #fff3cd;\n color: #856404;\n }\n\n .mcp-log-entry.error {\n background: #f8d7da;\n color: #721c24;\n }\n\n .mcp-log-timestamp {\n color: #6c757d;\n font-size: 10px;\n }\n \n /* Header controls */\n .mcp-header-controls {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n \n .mcp-theme-toggle {\n background: none;\n border: none;\n font-size: 16px;\n cursor: pointer;\n padding: 0;\n opacity: 0.6;\n transition: opacity 0.2s;\n }\n \n .mcp-theme-toggle:hover {\n opacity: 1;\n }\n \n /* Log controls */\n .mcp-logs-controls {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n \n .mcp-checkbox {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n cursor: pointer;\n }\n \n .mcp-checkbox input {\n cursor: pointer;\n }\n \n /* Tool execution logs */\n .mcp-log-entry.tool {\n background: #e7f3ff;\n color: #004085;\n border-left: 3px solid #004085;\n }\n \n .mcp-tool-details {\n font-size: 10px;\n margin-top: 4px;\n padding-left: 16px;\n opacity: 0.8;\n }\n \n /* Dark theme */\n .mcp-theme-dark .mcp-devtools-indicator {\n background: rgba(30, 30, 30, 0.9);\n border-color: rgba(255, 255, 255, 0.1);\n }\n \n .mcp-theme-dark .mcp-label {\n color: #e0e0e0;\n }\n \n .mcp-theme-dark .mcp-devtools-panel {\n background: #1e1e1e;\n border-color: #333;\n }\n \n .mcp-theme-dark .mcp-devtools-header {\n background: #2d2d2d;\n border-color: #333;\n color: #e0e0e0;\n }\n \n .mcp-theme-dark .mcp-devtools-content {\n background: #1e1e1e;\n }\n \n .mcp-theme-dark .mcp-status-section {\n background: #2d2d2d;\n border-color: #333;\n }\n \n .mcp-theme-dark .mcp-status-item label {\n color: #b0b0b0;\n }\n \n .mcp-theme-dark .mcp-status-item span {\n color: #e0e0e0;\n }\n \n .mcp-theme-dark .mcp-logs-header {\n background: #2d2d2d;\n border-color: #333;\n color: #e0e0e0;\n }\n \n .mcp-theme-dark .mcp-logs-container {\n background: #252525;\n border-color: #333;\n }\n \n .mcp-theme-dark .mcp-log-entry {\n background: #2d2d2d;\n color: #e0e0e0;\n border-color: #333;\n }\n \n .mcp-theme-dark .mcp-log-entry.warning {\n background: #4a3800;\n color: #ffc107;\n }\n \n .mcp-theme-dark .mcp-log-entry.error {\n background: #4a0000;\n color: #ff6b6b;\n }\n \n .mcp-theme-dark .mcp-log-entry.tool {\n background: #003366;\n color: #66b3ff;\n border-left-color: #66b3ff;\n }\n \n .mcp-theme-dark .mcp-log-timestamp {\n color: #888;\n }\n \n .mcp-theme-dark .mcp-clear-btn,\n .mcp-theme-dark .mcp-close-btn {\n color: #e0e0e0;\n border-color: #555;\n }\n \n .mcp-theme-dark .mcp-clear-btn:hover,\n .mcp-theme-dark .mcp-close-btn:hover {\n background: #444;\n }\n }\n ",document.head.appendChild(e)}setupEventListeners(){const e=this.container?.querySelector("#mcp-indicator"),t=this.container?.querySelector("#mcp-close-btn"),n=this.container?.querySelector("#mcp-clear-btn"),o=this.container?.querySelector("#mcp-theme-btn");e?.addEventListener("click",()=>this.togglePanel()),t?.addEventListener("click",()=>this.togglePanel()),n?.addEventListener("click",()=>this.clearLogs()),o?.addEventListener("click",()=>this.toggleTheme())}toggleTheme(){this.container&&(this.config.theme="light"===this.config.theme?"dark":"light",this.container.className=`mcp-theme-${this.config.theme} mcp-position-${this.config.position}`)}togglePanel(){this.isExpanded=!this.isExpanded;const e=this.container?.querySelector("#mcp-panel");e&&(e.style.display=this.isExpanded?"flex":"none")}setConnectionStatus(e){this.connectionStatus=e;const t=this.container?.querySelector("#mcp-status-dot"),n=this.container?.querySelector("#mcp-ws-status"),o=this.container?.querySelector("#mcp-server-status");if(t&&(t.className=`mcp-status-dot ${e}`),n&&o){const t=e.charAt(0).toUpperCase()+e.slice(1);n.textContent=t,o.textContent=t}this.addLog("info","client",`Connection status: ${e}`)}addLog(e,t,n,o){const s={timestamp:(new Date).toISOString(),level:e,source:t,message:n,data:o};this.logs.unshift(s),this.logs.length>this.maxLogs&&(this.logs=this.logs.slice(0,this.maxLogs)),this.renderLogs()}renderLogs(){const e=this.container?.querySelector("#mcp-logs");if(!e)return;e.innerHTML=this.logs.map(e=>{const t=new Date(e.timestamp).toLocaleTimeString();if("tool"===e.level&&e.data){const n=e.data;let o="";if(n.args&&(o+=`<div class="mcp-tool-details">Args: ${this.safeStringify(n.args)}</div>`),n.error&&(o+=`<div class="mcp-tool-details">Error: ${n.error}</div>`),n.result&&"completed"===n.status){const e=this.safeStringify(n.result);e.length>100?o+=`<div class="mcp-tool-details">Result: ${e.substring(0,100)}...</div>`:o+=`<div class="mcp-tool-details">Result: ${e}</div>`}return`\n <div class="mcp-log-entry ${e.level}">\n <span class="mcp-log-timestamp">[${t}]</span> [${e.source.toUpperCase()}] ${e.message}\n ${o}\n </div>\n `}{const n=e.data?` ${this.safeStringify(e.data)}`:"";return`\n <div class="mcp-log-entry ${e.level}">\n <span class="mcp-log-timestamp">[${t}]</span> [${e.source.toUpperCase()}] ${e.message}${n}\n </div>\n `}}).join("");const t=this.container?.querySelector("#mcp-autoscroll");t?.checked&&(e.scrollTop=0)}safeStringify(e){try{if(null==e)return String(e);if("string"==typeof e||"number"==typeof e||"boolean"==typeof e)return String(e);const t=new Set;return JSON.stringify(e,(e,n)=>{if("object"==typeof n&&null!==n){if(t.has(n))return"[Circular Reference]";t.add(n)}return n})}catch(e){return`[Error stringifying: ${e instanceof Error?e.message:"Unknown error"}]`}}clearLogs(){this.logs=[],this.renderLogs()}logWebSocketEvent(e,t){this.addLog("info","websocket",e,t)}logMCPEvent(e,t){this.addLog("info","mcp",e,t)}logError(e,t,n){this.addLog("error",e,t,n)}logToolExecution(e,t,n,o,s,r){const i=null===n?"started":n?"completed":"failed",c={tool:e,status:i,args:t,executionTime:s?`${s}ms`:void 0,result:n&&r?r:void 0,error:n||"Success"===o?void 0:o},a=`Tool ${e} ${i}${s?` (${s}ms)`:""}`;this.addLog(!1===n?"error":"tool","tool",a,c)}}class WebAppMCPClient{get isConnected(){return this._isConnected&&this.ws?.readyState===WebSocket.OPEN}constructor(e){this.ws=null,this.reconnectAttempts=0,this.messageHandlers=new Map,this.consoleLogs=[],this._isConnected=!1,this.devTools=null,this.pluginHandlers={},this.config={reconnectInterval:5e3,maxReconnectAttempts:10,enableDevTools:!0,debug:!1,enableConnection:!0,interceptConsole:!0,enabledTools:[],devToolsPosition:"bottom-right",devToolsTheme:"dark",...e},this.config.interceptConsole&&this.setupConsoleInterception(),this.loadHtml2Canvas(),this.config.enableDevTools&&this.config.enableConnection&&(this.devTools=new MCPDevTools({position:this.config.devToolsPosition,theme:this.config.devToolsTheme}),this.devTools.setConnectionStatus("disconnected"))}log(...e){this.config.debug&&console.log("[webappmcp]",...e)}logError(...e){console.error("[webappmcp]",...e)}connect(){if(this.config.enableConnection){if(!this.ws||this.ws.readyState!==WebSocket.OPEN){this.devTools?.setConnectionStatus("connecting"),this.devTools?.logWebSocketEvent("Attempting to connect",{url:this.config.serverUrl});try{const e=new URL(this.config.serverUrl),t={};this.config.authToken&&(t.Authorization=`Bearer ${this.config.authToken}`),this.config.authToken&&e.searchParams.set("token",this.config.authToken),this.ws=new WebSocket(e.toString()),this.setupWebSocketHandlers()}catch(e){this.logError("Failed to connect to WebApp MCP server:",e),this.devTools?.logError("websocket","Failed to connect",e),this.scheduleReconnect()}}}else this.log("Connection disabled by configuration")}disconnect(){this._isConnected=!1,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.ws&&(this.ws.close(),this.ws=null)}setupWebSocketHandlers(){this.ws&&(this.ws.onopen=()=>{this.log("Connected to WebApp MCP server"),this._isConnected=!0,this.reconnectAttempts=0,this.devTools?.setConnectionStatus("connected"),this.devTools?.logWebSocketEvent("Connected to WebApp MCP server"),this.sendMessage({type:"init",url:window.location.href})},this.ws.onmessage=e=>{try{const t=JSON.parse(e.data);this.devTools?.logWebSocketEvent("Message received",t),this.handleMessage(t)}catch(e){this.logError("Failed to parse WebSocket message:",e),this.devTools?.logError("websocket","Failed to parse message",e)}},this.ws.onerror=e=>{this.logError("WebSocket error:",e),this.devTools?.logError("websocket","WebSocket error",e)},this.ws.onclose=()=>{this.log("Disconnected from WebApp MCP server"),this._isConnected=!1,this.devTools?.setConnectionStatus("disconnected"),this.devTools?.logWebSocketEvent("Disconnected from WebApp MCP server"),this.scheduleReconnect()})}scheduleReconnect(){this.reconnectAttempts>=(this.config.maxReconnectAttempts||10)||this.reconnectTimer||(this.reconnectAttempts++,this.log(`Scheduling reconnect attempt ${this.reconnectAttempts}/${this.config.maxReconnectAttempts}`),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},this.config.reconnectInterval))}sendMessage(e){this.ws&&this.ws.readyState===WebSocket.OPEN?(this.ws.send(JSON.stringify(e)),this.devTools?.logWebSocketEvent("Message sent",e)):this.logError("WebSocket is not connected")}handleMessage(e){const{type:t,requestId:n,tool:o,args:s}=e;if(this.log("[WebApp Client] Received message:",JSON.stringify(e)),"connected"===t)return this.log("WebApp MCP client registered:",e.clientId),void this.devTools?.logMCPEvent("Client registered",{clientId:e.clientId});if("execute_tool"===t)return this.log(`[WebApp Client] Executing tool: ${o} with requestId: ${n}`),this.devTools?.logMCPEvent(`Executing tool: ${o}`,{requestId:n,args:s}),void this.executeToolHandler(n,o,s);if("plugin_extension"===t)return this.log("[WebApp Client] Loading plugin extension"),void this.loadPluginExtension(e.extension);const r=this.messageHandlers.get(t);r&&r(e)}async executeToolHandler(e,t,n){if(this.config.enabledTools&&this.config.enabledTools.length>0&&!this.config.enabledTools.includes(t)){const o=`Tool ${t} is not enabled`;return this.logError(o),this.devTools?.logToolExecution(t,n,!1,o),void this.sendMessage({type:"tool_response",requestId:e,success:!1,error:o})}this.log(`[WebApp Client] Executing tool handler for ${t}`),this.log("[WebApp Client] Tool args:",JSON.stringify(n)),this.devTools?.logToolExecution(t,n,null,"Started");const o=Date.now();try{let s;switch(t){case"dom_query":s=await this.domQuery(n);break;case"dom_get_properties":s=await this.domGetProperties(n);break;case"dom_get_text":s=await this.domGetText(n);break;case"dom_get_html":s=await this.domGetHTML(n);break;case"interaction_click":s=await this.interactionClick(n);break;case"interaction_type":s=await this.interactionType(n);break;case"interaction_scroll":s=await this.interactionScroll(n);break;case"interaction_hover":s=await this.interactionHover(n);break;case"capture_screenshot":s=await this.captureScreenshot(n);break;case"capture_element_screenshot":s=await this.captureElementScreenshot(n);break;case"state_get_variable":s=await this.stateGetVariable(n);break;case"state_local_storage":s=await this.stateLocalStorage(n);break;case"console_get_logs":s=await this.consoleGetLogs(n);break;case"dom_manipulate":s=await this.domManipulate(n);break;case"javascript_inject":s=await this.javascriptInject(n);break;case"webapp_list_clients":s=await this.webappListClients(n);break;case"execute_javascript":s=await this.executeJavascript(n);break;default:if(!this.pluginHandlers||!this.pluginHandlers[t])throw new Error(`Unknown tool: ${t}`);s=await this.pluginHandlers[t](n)}const r=Date.now()-o;this.log("[WebApp Client] Tool execution successful, sending response"),this.devTools?.logToolExecution(t,n,!0,"Success",r,s),this.sendMessage({type:"tool_response",requestId:e,result:s,success:!0})}catch(s){const r=Date.now()-o,i=s instanceof Error?s.message:String(s);this.logError("[WebApp Client] Tool execution failed:",s),this.devTools?.logToolExecution(t,n,!1,i,r),this.sendMessage({type:"tool_response",requestId:e,success:!1,error:i})}}loadHtml2Canvas(){if(void 0!==window.html2canvas)return;const e=document.createElement("script");e.src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js",e.async=!0,e.onload=()=>{this.config.debug&&console.log("[WebAppMCP] html2canvas loaded successfully")},e.onerror=()=>{console.warn("[WebAppMCP] Failed to load html2canvas - screenshots will use fallback mode")},document.head.appendChild(e)}setupConsoleInterception(){const e={log:console.log,info:console.info,warn:console.warn,error:console.error},t=t=>(...n)=>{this.consoleLogs.push({level:t,timestamp:(new Date).toISOString(),args:n.map(e=>{try{return"object"==typeof e?JSON.stringify(e):String(e)}catch{return String(e)}})}),this.consoleLogs.length>1e3&&this.consoleLogs.shift(),e[t](...n)};console.log=t("log"),console.info=t("info"),console.warn=t("warn"),console.error=t("error")}async domQuery(e){const{selector:t,limit:n=10}=e;return{elements:Array.from(document.querySelectorAll(t)).slice(0,n).map(e=>({selector:t,tagName:e.tagName.toLowerCase(),id:e.id||void 0,className:e.className||void 0,text:e.textContent?.trim().substring(0,100),attributes:(()=>{const t={};for(let n=0;n<e.attributes.length;n++){const o=e.attributes[n];t[o.name]=o.value}return t})()}))}}async domGetProperties(e){const{selector:t,properties:n=[]}=e,o=document.querySelector(t);if(!o)throw new Error(`Element not found: ${t}`);const s={};for(const e of n)try{s[e]=o[e]}catch{s[e]=void 0}return s}async domGetText(e){const{selector:t,includeHidden:n=!1}=e,o=document.querySelectorAll(t),s=[];return o.forEach(e=>{if(n||null!==e.offsetParent){const t=e.textContent?.trim();t&&s.push(t)}}),{texts:s}}async domGetHTML(e){const{selector:t,outerHTML:n=!1}=e,o=document.querySelector(t);if(!o)throw new Error(`Element not found: ${t}`);return{html:n?o.outerHTML:o.innerHTML}}async interactionClick(e){const{selector:t,button:n="left"}=e,o=document.querySelector(t);if(!o)throw new Error(`Element not found: ${t}`);const s=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0,button:"right"===n?2:"middle"===n?1:0});return o.dispatchEvent(s),{success:!0}}async interactionType(e){const{selector:t,text:n,clear:o=!1}=e,s=document.querySelector(t);if(!s)throw new Error(`Element not found: ${t}`);return o&&(s.value=""),s.focus(),s.value+=n,s.dispatchEvent(new Event("input",{bubbles:!0})),s.dispatchEvent(new Event("change",{bubbles:!0})),{success:!0}}async interactionScroll(e){const{selector:t,direction:n,amount:o=100}=e,s=t?document.querySelector(t):window;if(!s&&t)throw new Error(`Element not found: ${t}`);const r={behavior:"smooth"};return"up"===n||"down"===n?r.top="down"===n?o:-o:r.left="right"===n?o:-o,s===window?window.scrollBy(r):s.scrollBy(r),{success:!0}}async interactionHover(e){const{selector:t}=e,n=document.querySelector(t);if(!n)throw new Error(`Element not found: ${t}`);return n.dispatchEvent(new MouseEvent("mouseenter",{view:window,bubbles:!0,cancelable:!0})),n.dispatchEvent(new MouseEvent("mouseover",{view:window,bubbles:!0,cancelable:!0})),{success:!0}}async captureScreenshot(e){const{fullPage:t=!0,format:n="png"}=e;try{const e=t?Math.max(document.documentElement.scrollWidth,document.body.scrollWidth,document.documentElement.offsetWidth,document.body.offsetWidth,document.documentElement.clientWidth):window.innerWidth,o=t?Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.offsetHeight,document.body.offsetHeight,document.documentElement.clientHeight):window.innerHeight,s=document.createElement("canvas");s.width=e,s.height=o;const r=s.getContext("2d");if(!r)throw new Error("Failed to create canvas context");if(void 0!==window.html2canvas){const s=window.html2canvas,r=await s(document.body,{width:e,height:o,windowWidth:e,windowHeight:o,x:0,y:0,scrollX:t?0:window.scrollX,scrollY:t?0:window.scrollY,useCORS:!0,allowTaint:!0});return{success:!0,dataUrl:r.toDataURL(`image/${n}`),width:e,height:o,message:"Screenshot captured successfully"}}const i=window.getComputedStyle(document.body).backgroundColor||"#ffffff";r.fillStyle=i,r.fillRect(0,0,e,o),r.fillStyle="#666",r.font="14px system-ui, -apple-system, sans-serif",r.textAlign="left";const c=[`Page Title: ${document.title}`,`URL: ${window.location.href}`,`Dimensions: ${e}x${o}`,"","Note: For full screenshot functionality, include html2canvas library:",'<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"><\/script>'];let a=30;c.forEach(e=>{r.fillText(e,20,a),a+=25}),r.strokeStyle="#ddd",r.lineWidth=2,r.strokeRect(1,1,e-2,o-2);return{success:!0,dataUrl:s.toDataURL(`image/${n}`),width:e,height:o,message:"Screenshot captured (basic mode - add html2canvas for full rendering)"}}catch(e){throw new Error(`Failed to capture screenshot: ${e}`)}}async captureElementScreenshot(e){const{selector:t,format:n="png"}=e;if(!t)throw new Error("Selector is required for element screenshot");const o=document.querySelector(t);if(!o)throw new Error(`Element not found: ${t}`);try{const e=o.getBoundingClientRect();if(void 0!==window.html2canvas){const s=window.html2canvas,r=await s(o,{width:e.width,height:e.height,x:e.left+window.scrollX,y:e.top+window.scrollY,scrollX:-e.left,scrollY:-e.top,useCORS:!0,allowTaint:!0});return{success:!0,dataUrl:r.toDataURL(`image/${n}`),width:e.width,height:e.height,selector:t,message:"Element screenshot captured successfully"}}const s=document.createElement("canvas"),r=s.getContext("2d");if(!r)throw new Error("Failed to create canvas context");s.width=e.width,s.height=e.height;const i=window.getComputedStyle(o),c=i.backgroundColor||"#ffffff";r.fillStyle=c,r.fillRect(0,0,e.width,e.height),r.strokeStyle=i.borderColor||"#ddd",r.lineWidth=parseInt(i.borderWidth)||1,r.strokeRect(0,0,e.width,e.height),r.fillStyle="#666",r.font="12px system-ui, -apple-system, sans-serif",r.textAlign="center";const a=[`Element: ${t}`,`Size: ${Math.round(e.width)}x${Math.round(e.height)}`,`Tag: ${o.tagName.toLowerCase()}`,o.className?`Class: ${o.className}`:"","Add html2canvas for full rendering"].filter(Boolean);let l=Math.max(20,e.height/2-15*a.length/2);a.forEach(t=>{r.fillText(t,e.width/2,l),l+=15});return{success:!0,dataUrl:s.toDataURL(`image/${n}`),width:e.width,height:e.height,selector:t,message:"Element screenshot captured (basic mode - add html2canvas for full rendering)"}}catch(e){throw new Error(`Failed to capture element screenshot: ${e}`)}}async stateGetVariable(e){const{path:t}=e,n=t.split(".");let o=window;for(const e of n){if(!o||"object"!=typeof o||!(e in o))throw new Error(`Variable not found: ${t}`);o=o[e]}return{value:o}}async stateLocalStorage(e){const{operation:t,key:n,value:o}=e;switch(t){case"get":return{value:localStorage.getItem(n)};case"set":return localStorage.setItem(n,o),{success:!0};case"remove":return localStorage.removeItem(n),{success:!0};case"clear":return localStorage.clear(),{success:!0};case"getAll":const e={};for(let t=0;t<localStorage.length;t++){const n=localStorage.key(t);n&&(e[n]=localStorage.getItem(n)||"")}return{items:e};default:throw new Error(`Unknown localStorage operation: ${t}`)}}async consoleGetLogs(e){const{level:t="all",limit:n=100}=e;let o=this.consoleLogs;return"all"!==t&&(o=o.filter(e=>e.level===t)),{logs:o.slice(-n)}}async domManipulate(e){const{action:t,selector:n,value:o,attribute:s,property:r}=e;if(!n)throw new Error("Selector is required for DOM manipulation");const i=document.querySelector(n);if(!i)throw new Error(`Element not found: ${n}`);switch(t){case"setAttribute":if(!s||void 0===o)throw new Error("Attribute name and value are required for setAttribute");return i.setAttribute(s,o),{success:!0,message:`Set attribute ${s}="${o}" on ${n}`};case"removeAttribute":if(!s)throw new Error("Attribute name is required for removeAttribute");return i.removeAttribute(s),{success:!0,message:`Removed attribute ${s} from ${n}`};case"setProperty":if(!r||void 0===o)throw new Error("Property name and value are required for setProperty");return i[r]=o,{success:!0,message:`Set property ${r}=${o} on ${n}`};case"addClass":if(!o)throw new Error("Class name is required for addClass");return i.classList.add(o),{success:!0,message:`Added class "${o}" to ${n}`};case"removeClass":if(!o)throw new Error("Class name is required for removeClass");return i.classList.remove(o),{success:!0,message:`Removed class "${o}" from ${n}`};case"setInnerHTML":if(void 0===o)throw new Error("HTML content is required for setInnerHTML");return i.innerHTML=o,{success:!0,message:`Set innerHTML on ${n}`};case"setTextContent":if(void 0===o)throw new Error("Text content is required for setTextContent");return i.textContent=o,{success:!0,message:`Set textContent on ${n}`};case"setStyle":if(!r||void 0===o)throw new Error("Style property and value are required for setStyle");return i.style[r]=o,{success:!0,message:`Set style ${r}=${o} on ${n}`};case"remove":return i.remove(),{success:!0,message:`Removed element ${n}`};default:throw new Error(`Unknown DOM manipulation action: ${t}`)}}async javascriptInject(args){const{code:code,returnValue:returnValue=!1}=args;if(!code)throw new Error("JavaScript code is required");try{let result;if(returnValue)result=eval(code);else{const e=new Function(code);result=e()}return{success:!0,result:void 0!==result?result:null,message:"JavaScript executed successfully"}}catch(e){throw new Error(`JavaScript execution failed: ${e instanceof Error?e.message:"Unknown error"}`)}}async webappListClients(e){return{clients:[{id:"browser-client",type:"browser",url:window.location.href,userAgent:navigator.userAgent,connected:this.isConnected,timestamp:(new Date).toISOString()}]}}async executeJavascript(args){const{code:code,returnValue:returnValue=!1,async:async=!1}=args;if(!code)throw new Error("JavaScript code is required");try{let result;return async?result=returnValue?await eval(`(async () => { return ${code}; })()`):await eval(`(async () => { ${code}; })()`):returnValue?result=eval(`(() => { return ${code}; })()`):(eval(code),result=void 0),{success:!0,result:void 0!==result?result:null,message:"JavaScript executed successfully",executionTime:(new Date).toISOString()}}catch(e){throw new Error(`JavaScript execution failed: ${e instanceof Error?e.message:"Unknown error"}`)}}loadPluginExtension(extension){try{const pluginCode=`\n (function() {\n ${extension.code}\n })();\n `;eval(pluginCode),this.log("[WebApp Client] Plugin extension loaded successfully")}catch(e){this.logError("[WebApp Client] Failed to load plugin extension:",e)}}registerPluginHandler(e,t){this.pluginHandlers[e]=t,this.log(`[WebApp Client] Registered plugin handler for tool: ${e}`)}}"undefined"!=typeof window&&(window.WebAppMCP={WebAppMCPClient:WebAppMCPClient}),"undefined"!=typeof window&&(window.WebAppMCPClient=WebAppMCPClient,window.WebAppMCP={WebAppMCPClient:WebAppMCPClient}),exports.WebAppMCPClient=WebAppMCPClient});
2
2
  //# sourceMappingURL=browser.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.min.js","sources":["../src/client/devtools.ts","../src/client/index.ts","../src/browser.ts"],"sourcesContent":[null,null,null],"names":["MCPDevTools","constructor","config","this","container","isExpanded","logs","maxLogs","connectionStatus","position","theme","createDevToolsUI","setupEventListeners","document","createElement","id","className","innerHTML","addStyles","body","appendChild","style","textContent","head","indicator","querySelector","closeBtn","clearBtn","themeBtn","addEventListener","togglePanel","clearLogs","toggleTheme","panel","display","setConnectionStatus","status","dot","wsStatus","serverStatus","statusText","charAt","toUpperCase","slice","addLog","level","source","message","data","log","timestamp","Date","toISOString","push","length","renderLogs","logsContainer","map","time","toLocaleTimeString","details","detailsHtml","args","safeStringify","error","result","resultStr","substring","dataStr","join","autoScrollCheckbox","checked","scrollTop","scrollHeight","obj","String","seen","Set","JSON","stringify","key","value","has","add","Error","logWebSocketEvent","event","logMCPEvent","logError","logToolExecution","toolName","success","executionTime","tool","undefined","logMessage","WebAppMCPClient","isConnected","_isConnected","ws","readyState","WebSocket","OPEN","reconnectAttempts","messageHandlers","Map","consoleLogs","devTools","reconnectInterval","maxReconnectAttempts","enableDevTools","debug","enableConnection","interceptConsole","enabledTools","devToolsPosition","devToolsTheme","setupConsoleInterception","console","connect","url","serverUrl","URL","headers","authToken","searchParams","set","toString","setupWebSocketHandlers","scheduleReconnect","disconnect","reconnectTimer","clearTimeout","close","onopen","sendMessage","type","window","location","href","onmessage","parse","handleMessage","onerror","onclose","setTimeout","send","requestId","clientId","executeToolHandler","handler","get","includes","startTime","now","domQuery","domGetProperties","domGetText","domGetHTML","interactionClick","interactionType","interactionScroll","interactionHover","captureScreenshot","captureElementScreenshot","stateGetVariable","stateLocalStorage","consoleGetLogs","domManipulate","javascriptInject","webappListClients","executeJavascript","errorMessage","originalConsole","info","warn","interceptor","arg","shift","selector","limit","elements","Array","from","querySelectorAll","el","tagName","toLowerCase","text","trim","attributes","attrs","i","attr","name","properties","element","prop","includeHidden","texts","forEach","offsetParent","outerHTML","html","button","MouseEvent","view","bubbles","cancelable","dispatchEvent","clear","focus","Event","direction","amount","scrollOptions","behavior","top","left","scrollBy","fullPage","format","canvas","ctx","getContext","width","documentElement","scrollWidth","innerWidth","height","innerHeight","fillStyle","fillRect","font","textAlign","fillText","dataUrl","toDataURL","rect","getBoundingClientRect","path","parts","split","current","part","operation","localStorage","getItem","setItem","removeItem","items","k","filter","action","attribute","property","setAttribute","removeAttribute","classList","remove","code","returnValue","eval","func","Function","clients","userAgent","navigator","connected","async","WebAppMCP"],"mappings":"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"}
1
+ {"version":3,"file":"browser.min.js","sources":["../src/client/devtools.ts","../src/client/index.ts","../src/browser.ts"],"sourcesContent":[null,null,null],"names":["MCPDevTools","constructor","config","this","container","isExpanded","logs","maxLogs","connectionStatus","position","theme","addStyles","createDevToolsUI","setupEventListeners","document","createElement","id","className","innerHTML","body","appendChild","style","textContent","head","indicator","querySelector","closeBtn","clearBtn","themeBtn","addEventListener","togglePanel","clearLogs","toggleTheme","panel","display","setConnectionStatus","status","dot","wsStatus","serverStatus","statusText","charAt","toUpperCase","slice","addLog","level","source","message","data","log","timestamp","Date","toISOString","unshift","length","renderLogs","logsContainer","map","time","toLocaleTimeString","details","detailsHtml","args","safeStringify","error","result","resultStr","substring","dataStr","join","autoScrollCheckbox","checked","scrollTop","obj","String","seen","Set","JSON","stringify","key","value","has","add","Error","logWebSocketEvent","event","logMCPEvent","logError","logToolExecution","toolName","success","executionTime","tool","undefined","logMessage","WebAppMCPClient","isConnected","_isConnected","ws","readyState","WebSocket","OPEN","reconnectAttempts","messageHandlers","Map","consoleLogs","devTools","pluginHandlers","reconnectInterval","maxReconnectAttempts","enableDevTools","debug","enableConnection","interceptConsole","enabledTools","devToolsPosition","devToolsTheme","setupConsoleInterception","loadHtml2Canvas","console","connect","url","serverUrl","URL","headers","authToken","searchParams","set","toString","setupWebSocketHandlers","scheduleReconnect","disconnect","reconnectTimer","clearTimeout","close","onopen","sendMessage","type","window","location","href","onmessage","parse","handleMessage","onerror","onclose","setTimeout","send","requestId","clientId","executeToolHandler","loadPluginExtension","extension","handler","get","includes","startTime","now","domQuery","domGetProperties","domGetText","domGetHTML","interactionClick","interactionType","interactionScroll","interactionHover","captureScreenshot","captureElementScreenshot","stateGetVariable","stateLocalStorage","consoleGetLogs","domManipulate","javascriptInject","webappListClients","executeJavascript","errorMessage","html2canvas","script","src","async","onload","warn","originalConsole","info","interceptor","push","arg","shift","selector","limit","elements","Array","from","querySelectorAll","el","tagName","toLowerCase","text","trim","attributes","attrs","i","attr","name","properties","element","prop","includeHidden","texts","forEach","offsetParent","outerHTML","html","button","MouseEvent","view","bubbles","cancelable","dispatchEvent","clear","focus","Event","direction","amount","scrollOptions","behavior","top","left","scrollBy","fullPage","format","width","Math","max","documentElement","scrollWidth","offsetWidth","clientWidth","innerWidth","height","scrollHeight","offsetHeight","clientHeight","innerHeight","canvas","ctx","getContext","capturedCanvas","windowWidth","windowHeight","x","y","scrollX","scrollY","useCORS","allowTaint","dataUrl","toDataURL","bgColor","getComputedStyle","backgroundColor","fillStyle","fillRect","font","textAlign","title","line","fillText","strokeStyle","lineWidth","strokeRect","rect","getBoundingClientRect","styles","borderColor","parseInt","borderWidth","lines","round","filter","Boolean","path","parts","split","current","part","operation","localStorage","getItem","setItem","removeItem","items","k","action","attribute","property","setAttribute","removeAttribute","classList","remove","code","returnValue","eval","func","Function","clients","userAgent","navigator","connected","pluginCode","registerPluginHandler","WebAppMCP"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../../src/client/devtools.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAC7C,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;IACrE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,gBAAgB,CAA+D;IACvF,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,GAAE,iBAAsB;IAU1C,OAAO,CAAC,gBAAgB;IAiDxB,OAAO,CAAC,SAAS;IAyXjB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;IAQZ,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,cAAc;IAmBvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAkBxI,OAAO,CAAC,UAAU;IAqDlB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,SAAS;IAKV,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAI3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIrC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAI7E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG;CAcpI"}
1
+ {"version":3,"file":"devtools.d.ts","sourceRoot":"","sources":["../../src/client/devtools.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAC7C,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;IACrE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,OAAO,CAAO;IACtB,OAAO,CAAC,gBAAgB,CAA+D;IACvF,OAAO,CAAC,MAAM,CAAoB;gBAEtB,MAAM,GAAE,iBAAsB;IAW1C,OAAO,CAAC,gBAAgB;IAiDxB,OAAO,CAAC,SAAS;IAyXjB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;IAQZ,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,cAAc;IAmBvE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAkBxI,OAAO,CAAC,UAAU;IAqDlB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,SAAS;IAKV,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAI3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIrC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAI7E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG;CAcpI"}
@@ -13,6 +13,7 @@ class MCPDevTools {
13
13
  theme: 'dark',
14
14
  ...config
15
15
  };
16
+ this.addStyles();
16
17
  this.createDevToolsUI();
17
18
  this.setupEventListeners();
18
19
  }
@@ -138,8 +139,8 @@ class MCPDevTools {
138
139
 
139
140
  .mcp-devtools-panel {
140
141
  position: absolute;
141
- width: 400px;
142
- height: 300px;
142
+ width: 500px;
143
+ height: 400px;
143
144
  background: white;
144
145
  border: 1px solid #e0e0e0;
145
146
  border-radius: 8px;
@@ -485,9 +486,9 @@ class MCPDevTools {
485
486
  message,
486
487
  data
487
488
  };
488
- this.logs.push(log);
489
+ this.logs.unshift(log);
489
490
  if (this.logs.length > this.maxLogs) {
490
- this.logs = this.logs.slice(-this.maxLogs);
491
+ this.logs = this.logs.slice(0, this.maxLogs);
491
492
  }
492
493
  this.renderLogs();
493
494
  }
@@ -533,10 +534,10 @@ class MCPDevTools {
533
534
  `;
534
535
  }
535
536
  }).join('');
536
- // Auto-scroll if enabled
537
+ // Auto-scroll to top if enabled (latest items are at the top)
537
538
  const autoScrollCheckbox = this.container?.querySelector('#mcp-autoscroll');
538
539
  if (autoScrollCheckbox?.checked) {
539
- logsContainer.scrollTop = logsContainer.scrollHeight;
540
+ logsContainer.scrollTop = 0;
540
541
  }
541
542
  }
542
543
  safeStringify(obj) {
@@ -1 +1 @@
1
- {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/client/devtools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/client/devtools.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ declare class WebAppMCPClient {
20
20
  private consoleLogs;
21
21
  private _isConnected;
22
22
  private devTools;
23
+ private pluginHandlers;
23
24
  get isConnected(): boolean;
24
25
  constructor(config: WebAppMCPClientConfig);
25
26
  private log;
@@ -31,6 +32,7 @@ declare class WebAppMCPClient {
31
32
  private sendMessage;
32
33
  private handleMessage;
33
34
  private executeToolHandler;
35
+ private loadHtml2Canvas;
34
36
  private setupConsoleInterception;
35
37
  private domQuery;
36
38
  private domGetProperties;
@@ -49,6 +51,8 @@ declare class WebAppMCPClient {
49
51
  private javascriptInject;
50
52
  private webappListClients;
51
53
  private executeJavascript;
54
+ private loadPluginExtension;
55
+ registerPluginHandler(toolName: string, handler: (args: any) => Promise<any>): void;
52
56
  }
53
57
  export { WebAppMCPClient };
54
58
  export default WebAppMCPClient;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAEA,UAAU,qBAAqB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;IAC7E,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAClC;AAED,cAAM,eAAe;IACnB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAA4B;IAE5C,IAAI,WAAW,IAAI,OAAO,CAEzB;gBAEW,MAAM,EAAE,qBAAqB;IA4BzC,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,QAAQ;IAKhB,OAAO,IAAI,IAAI;IAqCf,UAAU,IAAI,IAAI;IAYlB,OAAO,CAAC,sBAAsB;IAwC9B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,aAAa;YAuBP,kBAAkB;IA4GhC,OAAO,CAAC,wBAAwB;YAoClB,QAAQ;YAuBR,gBAAgB;YAoBhB,UAAU;YAeV,UAAU;YAaV,gBAAgB;YAmBhB,eAAe;YAoBf,iBAAiB;YA2BjB,gBAAgB;YA2BhB,iBAAiB;YA4CjB,wBAAwB;YA+CxB,gBAAgB;YAgBhB,iBAAiB;YA2BjB,cAAc;YAWd,aAAa;YA8Eb,gBAAgB;YA4BhB,iBAAiB;YAcjB,iBAAiB;CAqChC;AAGD,OAAO,EAAE,eAAe,EAAE,CAAC;AAG3B,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAEA,UAAU,qBAAqB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;IAC7E,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAClC;AAED,cAAM,eAAe;IACnB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,cAAc,CAAmD;IAEzE,IAAI,WAAW,IAAI,OAAO,CAEzB;gBAEW,MAAM,EAAE,qBAAqB;IA+BzC,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,QAAQ;IAKhB,OAAO,IAAI,IAAI;IAqCf,UAAU,IAAI,IAAI;IAYlB,OAAO,CAAC,sBAAsB;IAwC9B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,aAAa;YA6BP,kBAAkB;IAiHhC,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,wBAAwB;YAoClB,QAAQ;YAuBR,gBAAgB;YAoBhB,UAAU;YAeV,UAAU;YAaV,gBAAgB;YAmBhB,eAAe;YAoBf,iBAAiB;YA2BjB,gBAAgB;YA2BhB,iBAAiB;YAyGjB,wBAAwB;YAmGxB,gBAAgB;YAgBhB,iBAAiB;YA2BjB,cAAc;YAWd,aAAa;YA8Eb,gBAAgB;YA4BhB,iBAAiB;YAcjB,iBAAiB;IAsC/B,OAAO,CAAC,mBAAmB;IAe3B,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;CAIpF;AAGD,OAAO,EAAE,eAAe,EAAE,CAAC;AAG3B,eAAe,eAAe,CAAC"}