auto-webmcp 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/auto-webmcp.cjs.js +144 -20
- package/dist/auto-webmcp.cjs.js.map +3 -3
- package/dist/auto-webmcp.esm.js +144 -20
- package/dist/auto-webmcp.esm.js.map +3 -3
- package/dist/auto-webmcp.iife.js +2 -2
- package/dist/auto-webmcp.iife.js.map +3 -3
- package/dist/interceptor.d.ts.map +1 -1
- package/dist/schema.d.ts +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/auto-webmcp.iife.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var AutoWebMCP=(()=>{var I=Object.defineProperty;var Ee=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames;var Te=Object.prototype.hasOwnProperty;var he=(e,t)=>()=>(e&&(t=e(e=0)),t);var D=(e,t)=>{for(var n in t)I(e,n,{get:t[n],enumerable:!0})},ye=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of be(t))!Te.call(e,o)&&o!==n&&I(e,o,{get:()=>t[o],enumerable:!(r=Ee(t,o))||r.enumerable});return e};var Me=e=>ye(I({},"__esModule",{value:!0}),e);var te={};D(te,{getAllRegisteredTools:()=>O,getRegisteredToolName:()=>Ne,isWebMCPSupported:()=>E,registerFormTool:()=>k,unregisterAll:()=>$,unregisterFormTool:()=>M});function E(){return typeof navigator<"u"&&typeof navigator.modelContext<"u"}async function k(e,t,n){if(!E())return;T.get(e)&&await M(e);try{await navigator.modelContext.registerTool({name:t.name,description:t.description,inputSchema:t.inputSchema,execute:n})}catch{try{await navigator.modelContext.unregisterTool(t.name),await navigator.modelContext.registerTool({name:t.name,description:t.description,inputSchema:t.inputSchema,execute:n})}catch{}}T.set(e,t.name)}async function M(e){if(!E())return;let t=T.get(e);if(t){try{await navigator.modelContext.unregisterTool(t)}catch{}T.delete(e)}}function Ne(e){return T.get(e)}function O(){return Array.from(T.entries()).map(([e,t])=>({form:e,name:t}))}async function $(){let e=Array.from(T.entries());await Promise.all(e.map(([t])=>M(t)))}var T,H=he(()=>{"use strict";T=new Map});var nt={};D(nt,{autoWebMCP:()=>ge});function j(e){return{exclude:e?.exclude??[],autoSubmit:e?.autoSubmit??!1,enhance:e?.enhance??null,overrides:e?.overrides??{},debug:e?.debug??!1}}var y=["textbox","combobox","checkbox","radio","switch","spinbutton","searchbox","slider"];function F(e){return e instanceof HTMLInputElement?Le(e):e instanceof HTMLTextAreaElement?{type:"string"}:e instanceof HTMLSelectElement?xe(e):null}function Le(e){switch(e.type.toLowerCase()){case"text":case"search":case"tel":return R(e);case"email":return{...R(e),format:"email"};case"url":return{...R(e),format:"uri"};case"number":case"range":{let n={type:"number"};return e.min!==""&&(n.minimum=parseFloat(e.min)),e.max!==""&&(n.maximum=parseFloat(e.max)),n}case"date":return{type:"string",format:"date"};case"datetime-local":return{type:"string",format:"date-time"};case"time":return{type:"string",format:"time"};case"month":return{type:"string",pattern:"^\\d{4}-\\d{2}$"};case"week":return{type:"string",pattern:"^\\d{4}-W\\d{2}$"};case"color":return{type:"string",pattern:"^#[0-9a-fA-F]{6}$"};case"checkbox":return{type:"boolean"};case"radio":return{type:"string"};case"file":case"hidden":case"submit":case"reset":case"button":case"image":return null;case"password":return null;default:return{type:"string"}}}function R(e){let t={type:"string"};return e.minLength>0&&(t.minLength=e.minLength),e.maxLength>0&&e.maxLength!==524288&&(t.maxLength=e.maxLength),e.pattern&&(t.pattern=e.pattern),t}function xe(e){let t=Array.from(e.options).filter(o=>o.value!=="");if(t.length===0)return{type:"string"};let n=t.map(o=>o.value),r=t.map(o=>({const:o.value,title:o.text.trim()||o.value}));return{type:"string",enum:n,oneOf:r}}function W(e,t){return Array.from(e.querySelectorAll(`input[type="radio"][name="${CSS.escape(t)}"]`)).map(r=>r.value).filter(r=>r!=="")}function J(e,t){return Array.from(e.querySelectorAll(`input[type="radio"][name="${CSS.escape(t)}"]`)).filter(r=>r.value!=="").map(r=>{let o=Se(r);return{const:r.value,title:o||r.value}})}function z(e,t){switch(t){case"checkbox":case"switch":return{type:"boolean"};case"spinbutton":case"slider":{let n={type:"number"},r=e.getAttribute("aria-valuemin"),o=e.getAttribute("aria-valuemax");return r!==null&&(n.minimum=parseFloat(r)),o!==null&&(n.maximum=parseFloat(o)),n}case"combobox":{let n=e.getAttribute("aria-owns")??e.getAttribute("aria-controls");if(n){let r=document.getElementById(n);if(r){let o=Array.from(r.querySelectorAll('[role="option"]')).filter(i=>i.getAttribute("aria-disabled")!=="true");if(o.length>0){let i=o.map(a=>(a.getAttribute("data-value")??a.textContent??"").trim()).filter(Boolean),s=o.map(a=>({const:(a.getAttribute("data-value")??a.textContent??"").trim(),title:(a.textContent??"").trim()}));return{type:"string",enum:i,oneOf:s}}}}return{type:"string"}}case"textbox":case"searchbox":case"radio":default:return{type:"string"}}}function Se(e){let t=e.closest("label");if(t){let n=t.cloneNode(!0);n.querySelectorAll("input, select, textarea, button").forEach(o=>o.remove());let r=n.textContent?.trim()??"";if(r)return r}if(e.id){let n=document.querySelector(`label[for="${CSS.escape(e.id)}"]`);if(n){let r=n.textContent?.trim()??"";if(r)return r}}return""}var G=0;function K(e,t){let n=t?.name??ve(e),r=t?.description??Ae(e),{schema:o,fieldElements:i}=Ce(e);return{name:n,description:r,inputSchema:o,fieldElements:i}}function ve(e){let t=e.getAttribute("toolname");if(t)return m(t);let n=e.dataset.webmcpName;if(n)return m(n);let r=He(e);if(r)return m(r);let o=V(e);if(o)return m(o);if(e.id)return m(e.id);if(e.name)return m(e.name);if(e.action){let i=we(e.action);if(i)return m(i)}return`form_${++G}`}function m(e){return e.toLowerCase().trim().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,64)||"form"}function He(e){let t=[...Array.from(e.querySelectorAll('button[type="submit"], button:not([type])')),...Array.from(e.querySelectorAll('input[type="submit"]'))];for(let n of t){let r=n instanceof HTMLInputElement?n.value.trim():n.textContent?.trim()??"";if(r&&r.length>0&&r.length<80)return r}return""}function V(e){let t=e;for(;t;){let n=t.previousElementSibling;for(;n;){if(/^H[1-3]$/i.test(n.tagName)){let r=n.textContent?.trim()??"";if(r)return r}n=n.previousElementSibling}if(t=t.parentElement,!t||t===document.body)break}return""}function we(e){try{let n=new URL(e,window.location.href).pathname.split("/").filter(Boolean);return n[n.length-1]??""}catch{return""}}function Ae(e){let t=e.getAttribute("tooldescription");if(t)return t.trim();let n=e.dataset.webmcpDescription;if(n)return n.trim();let r=e.querySelector("legend");if(r?.textContent?.trim())return r.textContent.trim();let o=e.getAttribute("aria-label");if(o?.trim())return o.trim();let i=e.getAttribute("aria-describedby");if(i){let c=document.getElementById(i);if(c?.textContent?.trim())return c.textContent.trim()}let s=V(e),a=document.title?.trim();return s&&a?`${s} \u2014 ${a}`:s||a||"Submit form"}function Ce(e){let t={},n=[],r=new Map,o=new Set,i=Array.from(e.querySelectorAll("input, textarea, select"));for(let c of i){let l=c.name,u=l||Y(c);if(!u)continue;if(c instanceof HTMLInputElement&&c.type==="radio"){if(o.has(u))continue;o.add(u)}let p=F(c);if(!p)continue;p.title=X(c);let b=Q(c);if(b&&(p.description=b),c instanceof HTMLInputElement&&c.type==="radio"){p.enum=W(e,u);let v=J(e,u);v.length>0&&(p.oneOf=v)}t[u]=p,l||r.set(u,c),c.required&&n.push(u)}let s=Ie(e),a=new Set;for(let{el:c,role:l,key:u}of s){if(t[u])continue;if(l==="radio"){if(a.has(u))continue;a.add(u)}let p=z(c,l);p.title=Fe(c);let b=Pe(c);b&&(p.description=b),t[u]=p,r.set(u,c),c.getAttribute("aria-required")==="true"&&n.push(u)}return{schema:{type:"object",properties:t,required:n},fieldElements:r}}function Y(e){let t=e;if(t.dataset.webmcpName)return m(t.dataset.webmcpName);if(e.id)return m(e.id);let n=e.getAttribute("aria-label");return n?m(n):(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.placeholder?.trim()?m(e.placeholder.trim()):e instanceof HTMLInputElement&&e.type!=="text"?e.type:null}function Ie(e){let t=y.map(r=>`[role="${r}"]`).join(", "),n=[];for(let r of Array.from(e.querySelectorAll(t))){if(r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement||r instanceof HTMLSelectElement||r.getAttribute("aria-hidden")==="true"||r.hidden)continue;let o=r.getAttribute("role"),i=Re(r);i&&n.push({el:r,role:o,key:i})}return n}function Re(e){let t=e;if(t.dataset?.webmcpName)return m(t.dataset.webmcpName);if(e.id)return m(e.id);let n=e.getAttribute("aria-label");if(n)return m(n);let r=e.getAttribute("aria-labelledby");if(r){let o=document.getElementById(r)?.textContent?.trim();if(o)return m(o)}return null}function Fe(e){let t=e;if(t.dataset?.webmcpTitle)return t.dataset.webmcpTitle;let n=e.getAttribute("aria-label");if(n)return n.trim();let r=e.getAttribute("aria-labelledby");if(r){let o=document.getElementById(r)?.textContent?.trim();if(o)return o}return e.id?P(e.id):""}function Pe(e){let t=e.getAttribute("toolparamdescription");if(t)return t.trim();let n=e;if(n.dataset?.webmcpDescription)return n.dataset.webmcpDescription;let r=e.getAttribute("aria-description");if(r)return r;let o=e.getAttribute("aria-describedby");if(o){let s=document.getElementById(o)?.textContent?.trim();if(s)return s}let i=e.getAttribute("placeholder")??e.dataset?.placeholder;return i?i.trim():""}function X(e){if("dataset"in e&&e.dataset.webmcpTitle)return e.dataset.webmcpTitle;let t=ke(e);return t||(e.name?P(e.name):e.id?P(e.id):(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.placeholder?.trim()?e.placeholder.trim():"")}function Q(e){let t=e.getAttribute("toolparamdescription");if(t)return t.trim();let n=e;if(n.dataset.webmcpDescription)return n.dataset.webmcpDescription;let r=e.getAttribute("aria-description");if(r)return r;let o=e.getAttribute("aria-describedby");if(o){let i=document.getElementById(o);if(i?.textContent?.trim())return i.textContent.trim()}if(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement){let i=e.placeholder?.trim();if(i&&i.length>0)return i}return""}function ke(e){if(e.id){let n=document.querySelector(`label[for="${CSS.escape(e.id)}"]`);if(n){let r=U(n);if(r)return r}}let t=e.closest("label");if(t){let n=U(t);if(n)return n}return""}function U(e){let t=e.cloneNode(!0);return t.querySelectorAll("input, select, textarea, button").forEach(n=>n.remove()),t.textContent?.trim()??""}function P(e){return e.replace(/[-_]/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").trim().replace(/\b\w/g,t=>t.toUpperCase())}function Z(e,t,n){let r=Oe(e,n),o=$e(e),{schema:i,fieldElements:s}=_e(t);return{name:r,description:o,inputSchema:i,fieldElements:s}}function Oe(e,t){if(t){let o=t instanceof HTMLInputElement?t.value.trim():t.textContent?.trim()??"";if(o&&o.length>0&&o.length<80)return m(o)}let n=ee(e);if(n)return m(n);let r=document.title?.trim();return r?m(r):`form_${++G}`}function $e(e){let t=ee(e),n=document.title?.trim();return t&&n&&t!==n?`${t} on ${n}`:t||n||"Submit form"}function ee(e){let t=e.querySelector("h1, h2, h3");if(t?.textContent?.trim())return t.textContent.trim();let n=e;for(;n;){let r=n.previousElementSibling;for(;r;){if(/^H[1-3]$/i.test(r.tagName)){let o=r.textContent?.trim()??"";if(o)return o}r=r.previousElementSibling}if(n=n.parentElement,!n||n===document.body)break}return""}function _e(e){let t={},n=[],r=new Map,o=new Set;for(let i of e){let s=i.name,a=s||Y(i);if(!a)continue;if(i instanceof HTMLInputElement&&i.type==="radio"){if(o.has(a))continue;o.add(a)}let c=F(i);if(!c)continue;c.title=X(i);let l=Q(i);l&&(c.description=l),t[a]=c,s||r.set(a,i),i.required&&n.push(a)}return{schema:{type:"object",properties:t,required:n},fieldElements:r}}H();var w=new WeakMap,ie=new WeakMap,_=new WeakMap,Be=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value")?.set,qe=Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,"value")?.set,h=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"checked")?.set;function se(e,t,n,r){return r?.fieldElements&&_.set(e,r.fieldElements),ne(e,n),async o=>(re(e,o),window.dispatchEvent(new CustomEvent("toolactivated",{detail:{toolName:n}})),new Promise((i,s)=>{w.set(e,{resolve:i,reject:s}),(t.autoSubmit||e.hasAttribute("toolautosubmit")||e.dataset.webmcpAutosubmit!==void 0)&&setTimeout(()=>{re(e,o);let a=e;if(!e.isConnected){let l=document.querySelector('button[type="submit"]:not([disabled]), input[type="submit"]:not([disabled])')?.closest("form");l&&(a=l,w.set(a,{resolve:i,reject:s}),ne(a,n))}a.requestSubmit()},300)}))}function ne(e,t){e.__awmcp_intercepted||(e.__awmcp_intercepted=!0,e.addEventListener("submit",n=>{let r=w.get(e);if(!r)return;let{resolve:o}=r;w.delete(e);let i=De(e,ie.get(e),_.get(e)),a={content:[{type:"text",text:`Form submitted. Fields: ${JSON.stringify(i)}`}]};n.agentInvoked&&typeof n.respondWith=="function"&&(n.preventDefault(),n.respondWith(Promise.resolve(a))),o(a)}),e.addEventListener("reset",()=>{window.dispatchEvent(new CustomEvent("toolcancel",{detail:{toolName:t}}))}))}function L(e,t){if(e.focus(),e.select?.(),document.execCommand("insertText",!1,t)&&e.value===t)return;let n=e instanceof HTMLTextAreaElement?qe:Be;n?n.call(e,t):e.value=t,e.dispatchEvent(new InputEvent("input",{bubbles:!0,cancelable:!0,inputType:"insertText",data:t})),e.dispatchEvent(new Event("change",{bubbles:!0}))}function ae(e,t){h?h.call(e,t):e.checked=t,e.dispatchEvent(new Event("change",{bubbles:!0}))}function A(e,t){for(let n of Array.from(e.querySelectorAll("*"))){let r=n.shadowRoot;if(!r)continue;let o=r.querySelector(t);if(o)return o;let i=A(r,t);if(i)return i}return null}function ce(e,t){let n=CSS.escape(t),r=e.querySelector(`[name="${n}"]`)??e.querySelector(`input#${n}, textarea#${n}, select#${n}`);return r||(A(document,`[name="${n}"]`)??A(document,`input#${n}, textarea#${n}, select#${n}`))}function re(e,t){ie.set(e,t);let n=_.get(e);for(let[r,o]of Object.entries(t)){let i=ce(e,r);if(i){i instanceof HTMLInputElement?oe(i,e,r,o):i instanceof HTMLTextAreaElement?L(i,String(o??"")):i instanceof HTMLSelectElement&&(i.value=String(o??""),i.dispatchEvent(new Event("change",{bubbles:!0})));continue}let s=n?.get(r);if(s){let a=s;if(!s.isConnected){let c=s.id;if(c){let l=document.getElementById(c)??A(document,`#${CSS.escape(c)}`);l&&(a=l)}}a instanceof HTMLInputElement?oe(a,e,r,o):a instanceof HTMLTextAreaElement?L(a,String(o??"")):a instanceof HTMLSelectElement?(a.value=String(o??""),a.dispatchEvent(new Event("change",{bubbles:!0}))):le(a,o)}}}function oe(e,t,n,r){let o=e.type.toLowerCase();if(o==="checkbox"){ae(e,!!r);return}if(o==="radio"){let i=CSS.escape(n),s=t.querySelectorAll(`input[type="radio"][name="${i}"]`);for(let a of s)if(a.value===String(r)){h?h.call(a,!0):a.checked=!0,a.dispatchEvent(new Event("change",{bubbles:!0}));break}return}L(e,String(r??""))}function le(e,t){let n=e.getAttribute("role");if(n==="checkbox"||n==="switch"){e.setAttribute("aria-checked",String(!!t)),e.dispatchEvent(new MouseEvent("click",{bubbles:!0}));return}if(n==="radio"){e.setAttribute("aria-checked","true"),e.dispatchEvent(new MouseEvent("click",{bubbles:!0}));return}let r=e;r.isContentEditable&&(r.textContent=String(t??"")),e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0}))}function De(e,t,n){let r={},o=new FormData(e);for(let[i,s]of o.entries())if(r[i]!==void 0){let a=r[i];Array.isArray(a)?a.push(s):r[i]=[a,s]}else r[i]=s;if(t)for(let i of Object.keys(t)){if(i in r)continue;let s=ce(e,i)??n?.get(i)??null;if(s)if(s instanceof HTMLInputElement&&s.type==="checkbox")r[i]=s.checked;else if(s instanceof HTMLInputElement||s instanceof HTMLTextAreaElement||s instanceof HTMLSelectElement)r[i]=s.value;else{let a=s.getAttribute("role");a==="checkbox"||a==="switch"?r[i]=s.getAttribute("aria-checked")==="true":r[i]=s.textContent?.trim()??""}}return r}function ue(e,t){if(e instanceof HTMLInputElement){let n=e.type.toLowerCase();n==="checkbox"?ae(e,!!t):n==="radio"?e.value===String(t)&&(h?h.call(e,!0):e.checked=!0,e.dispatchEvent(new Event("change",{bubbles:!0}))):L(e,String(t??""))}else e instanceof HTMLTextAreaElement?L(e,String(t??"")):e instanceof HTMLSelectElement?(e.value=String(t??""),e.dispatchEvent(new Event("change",{bubbles:!0}))):le(e,t)}async function me(e,t){try{let n=await je(e,t);return{...e,description:n}}catch(n){return console.warn("[auto-webmcp] Enrichment failed, using heuristic description:",n),e}}async function je(e,t){let n=We(e);return t.provider==="claude"?Je(n,t):ze(n,t)}function We(e){let t=Object.entries(e.inputSchema.properties).map(([n,r])=>`- ${r.title??n} (${r.type}): ${r.description??""}`).join(`
|
|
1
|
+
"use strict";var AutoWebMCP=(()=>{var R=Object.defineProperty;var he=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var Me=Object.prototype.hasOwnProperty;var Le=(e,t)=>()=>(e&&(t=e(e=0)),t);var J=(e,t)=>{for(var n in t)R(e,n,{get:t[n],enumerable:!0})},xe=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ye(t))!Me.call(e,o)&&o!==n&&R(e,o,{get:()=>t[o],enumerable:!(r=he(t,o))||r.enumerable});return e};var ve=e=>xe(R({},"__esModule",{value:!0}),e);var oe={};J(oe,{getAllRegisteredTools:()=>$,getRegisteredToolName:()=>De,isWebMCPSupported:()=>E,registerFormTool:()=>O,unregisterAll:()=>_,unregisterFormTool:()=>M});function E(){return typeof navigator<"u"&&typeof navigator.modelContext<"u"}async function O(e,t,n){if(!E())return;T.get(e)&&await M(e);try{await navigator.modelContext.registerTool({name:t.name,description:t.description,inputSchema:t.inputSchema,execute:n})}catch{try{await navigator.modelContext.unregisterTool(t.name),await navigator.modelContext.registerTool({name:t.name,description:t.description,inputSchema:t.inputSchema,execute:n})}catch{}}T.set(e,t.name)}async function M(e){if(!E())return;let t=T.get(e);if(t){try{await navigator.modelContext.unregisterTool(t)}catch{}T.delete(e)}}function De(e){return T.get(e)}function $(){return Array.from(T.entries()).map(([e,t])=>({form:e,name:t}))}async function _(){let e=Array.from(T.entries());await Promise.all(e.map(([t])=>M(t)))}var T,H=Le(()=>{"use strict";T=new Map});var at={};J(at,{autoWebMCP:()=>Te});function z(e){return{exclude:e?.exclude??[],autoSubmit:e?.autoSubmit??!1,enhance:e?.enhance??null,overrides:e?.overrides??{},debug:e?.debug??!1}}var y=["textbox","combobox","checkbox","radio","switch","spinbutton","searchbox","slider"];function k(e){return e instanceof HTMLInputElement?Se(e):e instanceof HTMLTextAreaElement?{type:"string"}:e instanceof HTMLSelectElement?He(e):null}function Se(e){switch(e.type.toLowerCase()){case"text":case"search":case"tel":return F(e);case"email":return{...F(e),format:"email"};case"url":return{...F(e),format:"uri"};case"number":case"range":{let n={type:"number"};return e.min!==""&&(n.minimum=parseFloat(e.min)),e.max!==""&&(n.maximum=parseFloat(e.max)),n}case"date":return{type:"string",format:"date"};case"datetime-local":return{type:"string",format:"date-time"};case"time":return{type:"string",format:"time"};case"month":return{type:"string",pattern:"^\\d{4}-\\d{2}$"};case"week":return{type:"string",pattern:"^\\d{4}-W\\d{2}$"};case"color":return{type:"string",pattern:"^#[0-9a-fA-F]{6}$"};case"checkbox":return{type:"boolean"};case"radio":return{type:"string"};case"file":case"hidden":case"submit":case"reset":case"button":case"image":return null;case"password":return null;default:return{type:"string"}}}function F(e){let t={type:"string"};e.minLength>0&&(t.minLength=e.minLength),e.maxLength>0&&e.maxLength!==524288&&(t.maxLength=e.maxLength),e.pattern&&(t.pattern=e.pattern);let n=e.getAttribute("list");if(n){let r=e.ownerDocument.getElementById(n);if(r instanceof HTMLDataListElement){let o=Array.from(r.options).filter(i=>!i.disabled&&i.value.trim()!=="");o.length>0&&(t.enum=o.map(i=>i.value.trim()),t.oneOf=o.map(i=>({const:i.value.trim(),title:i.textContent?.trim()||i.value.trim()})))}}return t}function He(e){let t=[],n=[];for(let r of Array.from(e.children))if(r instanceof HTMLOptGroupElement){if(r.disabled)continue;let o=r.label?.trim()??"";for(let i of Array.from(r.children)){if(!(i instanceof HTMLOptionElement)||i.disabled||i.value==="")continue;t.push(i.value);let s={const:i.value,title:i.text.trim()||i.value};o&&(s.group=o),n.push(s)}}else if(r instanceof HTMLOptionElement){if(r.disabled||r.value==="")continue;t.push(r.value),n.push({const:r.value,title:r.text.trim()||r.value})}return t.length===0?{type:"string"}:{type:"string",enum:t,oneOf:n}}function U(e,t){return Array.from(e.querySelectorAll(`input[type="radio"][name="${CSS.escape(t)}"]`)).map(r=>r.value).filter(r=>r!=="")}function G(e,t){return Array.from(e.querySelectorAll(`input[type="radio"][name="${CSS.escape(t)}"]`)).filter(r=>r.value!=="").map(r=>{let o=we(r);return{const:r.value,title:o||r.value}})}function K(e,t){switch(t){case"checkbox":case"switch":return{type:"boolean"};case"spinbutton":case"slider":{let n={type:"number"},r=e.getAttribute("aria-valuemin"),o=e.getAttribute("aria-valuemax");return r!==null&&(n.minimum=parseFloat(r)),o!==null&&(n.maximum=parseFloat(o)),n}case"combobox":{let n=e.getAttribute("aria-owns")??e.getAttribute("aria-controls");if(n){let r=document.getElementById(n);if(r){let o=Array.from(r.querySelectorAll('[role="option"]')).filter(i=>i.getAttribute("aria-disabled")!=="true");if(o.length>0){let i=o.map(a=>(a.getAttribute("data-value")??a.textContent??"").trim()).filter(Boolean),s=o.map(a=>({const:(a.getAttribute("data-value")??a.textContent??"").trim(),title:(a.textContent??"").trim()}));return{type:"string",enum:i,oneOf:s}}}}return{type:"string"}}case"textbox":case"searchbox":case"radio":default:return{type:"string"}}}function we(e){let t=e.closest("label");if(t){let n=t.cloneNode(!0);n.querySelectorAll("input, select, textarea, button").forEach(o=>o.remove());let r=n.textContent?.trim()??"";if(r)return r}if(e.id){let n=document.querySelector(`label[for="${CSS.escape(e.id)}"]`);if(n){let r=n.textContent?.trim()??"";if(r)return r}}return""}var Y=0;function X(e,t){let n=t?.name??Ae(e),r=t?.description??Re(e),{schema:o,fieldElements:i}=Fe(e);return{name:n,description:r,inputSchema:o,fieldElements:i}}function Ae(e){let t=e.getAttribute("toolname");if(t)return m(t);let n=e.dataset.webmcpName;if(n)return m(n);let r=Ce(e);if(r)return m(r);let o=Q(e);if(o)return m(o);if(e.id)return m(e.id);if(e.name)return m(e.name);if(e.action){let i=Ie(e.action);if(i)return m(i)}return`form_${++Y}`}function m(e){return e.toLowerCase().trim().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,64)||"form"}function Ce(e){let t=[...Array.from(e.querySelectorAll('button[type="submit"], button:not([type])')),...Array.from(e.querySelectorAll('input[type="submit"]'))];for(let n of t){let r=n instanceof HTMLInputElement?n.value.trim():n.textContent?.trim()??"";if(r&&r.length>0&&r.length<80)return r}return""}function Q(e){let t=e;for(;t;){let n=t.previousElementSibling;for(;n;){if(/^H[1-3]$/i.test(n.tagName)){let r=n.textContent?.trim()??"";if(r)return r}n=n.previousElementSibling}if(t=t.parentElement,!t||t===document.body)break}return""}function Ie(e){try{let n=new URL(e,window.location.href).pathname.split("/").filter(Boolean);return n[n.length-1]??""}catch{return""}}function Re(e){let t=e.getAttribute("tooldescription");if(t)return t.trim();let n=e.dataset.webmcpDescription;if(n)return n.trim();let r=e.querySelector("legend");if(r?.textContent?.trim())return r.textContent.trim();let o=e.getAttribute("aria-label");if(o?.trim())return o.trim();let i=e.getAttribute("aria-describedby");if(i){let l=document.getElementById(i);if(l?.textContent?.trim())return l.textContent.trim()}let s=Q(e),a=document.title?.trim();return s&&a?`${s} \u2014 ${a}`:s||a||"Submit form"}function Fe(e){let t={},n=[],r=new Map,o=new Set,i=Array.from(e.querySelectorAll("input, textarea, select"));for(let l of i){let c=l.name,u=c||Z(l);if(!u)continue;if(l instanceof HTMLInputElement&&l.type==="radio"){if(o.has(u))continue;o.add(u)}let f=k(l);if(!f||!ne(l))continue;f.title=ee(l);let b=te(l);if(b&&(f.description=b),l instanceof HTMLInputElement&&l.type==="radio"){f.enum=U(e,u);let S=G(e,u);S.length>0&&(f.oneOf=S)}t[u]=f,c||r.set(u,l),l.required&&n.push(u)}let s=ke(e),a=new Set;for(let{el:l,role:c,key:u}of s){if(t[u])continue;if(c==="radio"){if(a.has(u))continue;a.add(u)}let f=K(l,c);f.title=Oe(l);let b=$e(l);b&&(f.description=b),t[u]=f,r.set(u,l),l.getAttribute("aria-required")==="true"&&n.push(u)}return{schema:{type:"object",properties:t,required:n},fieldElements:r}}function Z(e){let t=e;if(t.dataset.webmcpName)return m(t.dataset.webmcpName);if(e.id)return m(e.id);let n=e.getAttribute("aria-label");return n?m(n):(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.placeholder?.trim()?m(e.placeholder.trim()):e instanceof HTMLInputElement&&e.type!=="text"?e.type:null}function ke(e){let t=y.map(r=>`[role="${r}"]`).join(", "),n=[];for(let r of Array.from(e.querySelectorAll(t))){if(r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement||r instanceof HTMLSelectElement||r.getAttribute("aria-hidden")==="true"||r.hidden)continue;let o=r.getAttribute("role"),i=Pe(r);i&&n.push({el:r,role:o,key:i})}return n}function Pe(e){let t=e;if(t.dataset?.webmcpName)return m(t.dataset.webmcpName);if(e.id)return m(e.id);let n=e.getAttribute("aria-label");if(n)return m(n);let r=e.getAttribute("aria-labelledby");if(r){let o=document.getElementById(r)?.textContent?.trim();if(o)return m(o)}return null}function Oe(e){let t=e;if(t.dataset?.webmcpTitle)return t.dataset.webmcpTitle;let n=e.getAttribute("aria-label");if(n)return n.trim();let r=e.getAttribute("aria-labelledby");if(r){let o=document.getElementById(r)?.textContent?.trim();if(o)return o}return e.id?P(e.id):""}function $e(e){let t=e.getAttribute("toolparamdescription");if(t)return t.trim();let n=e;if(n.dataset?.webmcpDescription)return n.dataset.webmcpDescription;let r=e.getAttribute("aria-description");if(r)return r;let o=e.getAttribute("aria-describedby");if(o){let s=document.getElementById(o)?.textContent?.trim();if(s)return s}let i=e.getAttribute("placeholder")??e.dataset?.placeholder;return i?i.trim():""}function ee(e){if("dataset"in e&&e.dataset.webmcpTitle)return e.dataset.webmcpTitle;let t=_e(e);return t||(e.name?P(e.name):e.id?P(e.id):(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.placeholder?.trim()?e.placeholder.trim():"")}function te(e){let t=e.getAttribute("toolparamdescription");if(t)return t.trim();let n=e;if(n.dataset.webmcpDescription)return n.dataset.webmcpDescription;let r=e.getAttribute("aria-description");if(r)return r;let o=e.getAttribute("aria-describedby");if(o){let i=document.getElementById(o);if(i?.textContent?.trim())return i.textContent.trim()}if(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement){let i=e.placeholder?.trim();if(i&&i.length>0)return i}return""}function _e(e){if(e.id){let n=document.querySelector(`label[for="${CSS.escape(e.id)}"]`);if(n){let r=V(n);if(r)return r}}let t=e.closest("label");if(t){let n=V(t);if(n)return n}return""}function V(e){let t=e.cloneNode(!0);return t.querySelectorAll("input, select, textarea, button").forEach(n=>n.remove()),t.textContent?.trim()??""}function P(e){return e.replace(/[-_]/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").trim().replace(/\b\w/g,t=>t.toUpperCase())}function ne(e){let t=window.getComputedStyle(e);if(t.display==="none"||t.visibility==="hidden"||e.offsetParent===null&&t.position!=="fixed")return!1;let n=e;for(;n&&n!==document.body;){if(n.getAttribute("aria-hidden")==="true")return!1;n=n.parentElement}return!e.closest("fieldset")?.disabled}function re(e,t,n){let r=Ne(e,n),o=qe(e),{schema:i,fieldElements:s}=Be(t);return{name:r,description:o,inputSchema:i,fieldElements:s}}function Ne(e,t){if(t){let o=t instanceof HTMLInputElement?t.value.trim():t.textContent?.trim()??"";if(o&&o.length>0&&o.length<80)return m(o)}let n=ie(e);if(n)return m(n);let r=document.title?.trim();return r?m(r):`form_${++Y}`}function qe(e){let t=ie(e),n=document.title?.trim();return t&&n&&t!==n?`${t} on ${n}`:t||n||"Submit form"}function ie(e){let t=e.querySelector("h1, h2, h3");if(t?.textContent?.trim())return t.textContent.trim();let n=e;for(;n;){let r=n.previousElementSibling;for(;r;){if(/^H[1-3]$/i.test(r.tagName)){let o=r.textContent?.trim()??"";if(o)return o}r=r.previousElementSibling}if(n=n.parentElement,!n||n===document.body)break}return""}function Be(e){let t={},n=[],r=new Map,o=new Set;for(let i of e){let s=i.name,a=s||Z(i);if(!a)continue;if(i instanceof HTMLInputElement&&i.type==="radio"){if(o.has(a))continue;o.add(a)}let l=k(i);if(!l||!ne(i))continue;l.title=ee(i);let c=te(i);c&&(l.description=c),t[a]=l,s||r.set(a,i),i.required&&n.push(a)}return{schema:{type:"object",properties:t,required:n},fieldElements:r}}H();var w=new WeakMap,ce=new WeakMap,A=new WeakMap,q=new WeakMap,je=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value")?.set,We=Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,"value")?.set,h=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"checked")?.set;function ue(e,t,n,r){return r?.fieldElements&&A.set(e,r.fieldElements),se(e,n),async o=>(N(e,o),window.dispatchEvent(new CustomEvent("toolactivated",{detail:{toolName:n}})),new Promise((i,s)=>{w.set(e,{resolve:i,reject:s}),(t.autoSubmit||e.hasAttribute("toolautosubmit")||e.dataset.webmcpAutosubmit!==void 0)&&le(e).then(async()=>{try{N(e,o);for(let c=0;c<2&&ze(e,o,A.get(e)).length!==0;c++)N(e,o),await le(e,400,100);let a=e;if(!e.isConnected){let u=document.querySelector('button[type="submit"]:not([disabled]), input[type="submit"]:not([disabled])')?.closest("form");u&&(a=u,w.set(a,{resolve:i,reject:s}),se(a,n))}let l=Ue(r,o);l.length>0&&q.set(a,l),a.requestSubmit()}catch(a){s(a instanceof Error?a:new Error(String(a)))}})}))}function se(e,t){e.__awmcp_intercepted||(e.__awmcp_intercepted=!0,e.addEventListener("submit",n=>{let r=w.get(e);if(!r)return;let{resolve:o}=r;w.delete(e);let i=Je(e,ce.get(e),A.get(e)),s=q.get(e);q.delete(e);let a=s?.length?` Note: required fields were not filled: ${s.join(", ")}.`:"",c={content:[{type:"text",text:`Form submitted. Fields: ${JSON.stringify(i)}${a}`}]};n.agentInvoked&&typeof n.respondWith=="function"&&(n.preventDefault(),n.respondWith(Promise.resolve(c))),o(c)}),e.addEventListener("reset",()=>{window.dispatchEvent(new CustomEvent("toolcancel",{detail:{toolName:t}}))}))}function L(e,t){if(e.focus(),e.select?.(),document.execCommand("insertText",!1,t)&&e.value===t)return;let n=e instanceof HTMLTextAreaElement?We:je;n?n.call(e,t):e.value=t,e.dispatchEvent(new InputEvent("input",{bubbles:!0,cancelable:!0,inputType:"insertText",data:t})),e.dispatchEvent(new Event("change",{bubbles:!0}))}function me(e,t){h?h.call(e,t):e.checked=t,e.dispatchEvent(new Event("change",{bubbles:!0}))}function C(e,t){for(let n of Array.from(e.querySelectorAll("*"))){let r=n.shadowRoot;if(!r)continue;let o=r.querySelector(t);if(o)return o;let i=C(r,t);if(i)return i}return null}function B(e,t){let n=CSS.escape(t),r=e.querySelector(`[name="${n}"]`)??e.querySelector(`input#${n}, textarea#${n}, select#${n}`);return r||(C(document,`[name="${n}"]`)??C(document,`input#${n}, textarea#${n}, select#${n}`))}function N(e,t){ce.set(e,t);let n=A.get(e);for(let[r,o]of Object.entries(t)){let i=B(e,r);if(i){i instanceof HTMLInputElement?ae(i,e,r,o):i instanceof HTMLTextAreaElement?L(i,String(o??"")):i instanceof HTMLSelectElement&&(i.value=String(o??""),i.dispatchEvent(new Event("change",{bubbles:!0})));continue}let s=n?.get(r);if(s){let a=s;if(!s.isConnected){let l=s.id;if(l){let c=document.getElementById(l)??C(document,`#${CSS.escape(l)}`);c&&(a=c)}}a instanceof HTMLInputElement?ae(a,e,r,o):a instanceof HTMLTextAreaElement?L(a,String(o??"")):a instanceof HTMLSelectElement?(a.value=String(o??""),a.dispatchEvent(new Event("change",{bubbles:!0}))):de(a,o)}}}function ae(e,t,n,r){let o=e.type.toLowerCase();if(o==="checkbox"){me(e,!!r);return}if(o==="radio"){let i=CSS.escape(n),s=t.querySelectorAll(`input[type="radio"][name="${i}"]`);for(let a of s)if(a.value===String(r)){h?h.call(a,!0):a.checked=!0,a.dispatchEvent(new Event("change",{bubbles:!0}));break}return}L(e,String(r??""))}function de(e,t){let n=e.getAttribute("role");if(n==="checkbox"||n==="switch"){e.setAttribute("aria-checked",String(!!t)),e.dispatchEvent(new MouseEvent("click",{bubbles:!0}));return}if(n==="radio"){e.setAttribute("aria-checked","true"),e.dispatchEvent(new MouseEvent("click",{bubbles:!0}));return}let r=e;r.isContentEditable&&(r.textContent=String(t??"")),e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0}))}function Je(e,t,n){let r={},o=new FormData(e);for(let[i,s]of o.entries())if(r[i]!==void 0){let a=r[i];Array.isArray(a)?a.push(s):r[i]=[a,s]}else r[i]=s;if(t)for(let i of Object.keys(t)){if(i in r)continue;let s=B(e,i)??n?.get(i)??null;if(s)if(s instanceof HTMLInputElement&&s.type==="checkbox")r[i]=s.checked;else if(s instanceof HTMLInputElement||s instanceof HTMLTextAreaElement||s instanceof HTMLSelectElement)r[i]=s.value;else{let a=s.getAttribute("role");a==="checkbox"||a==="switch"?r[i]=s.getAttribute("aria-checked")==="true":r[i]=s.textContent?.trim()??""}}return r}function fe(e,t){if(e instanceof HTMLInputElement){let n=e.type.toLowerCase();n==="checkbox"?me(e,!!t):n==="radio"?e.value===String(t)&&(h?h.call(e,!0):e.checked=!0,e.dispatchEvent(new Event("change",{bubbles:!0}))):L(e,String(t??""))}else e instanceof HTMLTextAreaElement?L(e,String(t??"")):e instanceof HTMLSelectElement?(e.value=String(t??""),e.dispatchEvent(new Event("change",{bubbles:!0}))):de(e,t)}function le(e,t=800,n=150){return new Promise(r=>{let o=!1,i=null,s=()=>{o||(o=!0,a.disconnect(),i!==null&&clearTimeout(i),r())},a=new MutationObserver(()=>{i!==null&&clearTimeout(i),i=setTimeout(s,n)});a.observe(e,{childList:!0,subtree:!0,attributes:!0,characterData:!0}),setTimeout(s,t),i=setTimeout(s,n)})}function ze(e,t,n){let r=[];for(let[o,i]of Object.entries(t)){let s=B(e,o)??n?.get(o)??null;s&&(s instanceof HTMLInputElement&&s.type==="checkbox"?s.checked!==!!i&&r.push(o):(s instanceof HTMLInputElement||s instanceof HTMLTextAreaElement||s instanceof HTMLSelectElement)&&s.value!==String(i??"")&&r.push(o))}return r}function Ue(e,t){return e?.inputSchema?.required?.length?e.inputSchema.required.filter(n=>!(n in t)):[]}async function pe(e,t){try{let n=await Ge(e,t);return{...e,description:n}}catch(n){return console.warn("[auto-webmcp] Enrichment failed, using heuristic description:",n),e}}async function Ge(e,t){let n=Ke(e);return t.provider==="claude"?Ve(n,t):Ye(n,t)}function Ke(e){let t=Object.entries(e.inputSchema.properties).map(([n,r])=>`- ${r.title??n} (${r.type}): ${r.description??""}`).join(`
|
|
2
2
|
`);return`You are helping describe a web form as an AI tool. Given this form information:
|
|
3
3
|
|
|
4
4
|
Name: ${e.name}
|
|
@@ -6,5 +6,5 @@ Current description: ${e.description}
|
|
|
6
6
|
Fields:
|
|
7
7
|
${t}
|
|
8
8
|
|
|
9
|
-
Write a concise (1-2 sentence) description of what this tool does and when an AI agent should use it. Be specific and actionable. Respond with only the description, no preamble.`}async function
|
|
9
|
+
Write a concise (1-2 sentence) description of what this tool does and when an AI agent should use it. Be specific and actionable. Respond with only the description, no preamble.`}async function Ve(e,t){let n=t.model??"claude-haiku-4-5-20251001",r=await fetch("https://api.anthropic.com/v1/messages",{method:"POST",headers:{"x-api-key":t.apiKey,"anthropic-version":"2023-06-01","content-type":"application/json"},body:JSON.stringify({model:n,max_tokens:150,messages:[{role:"user",content:e}]})});if(!r.ok)throw new Error(`Claude API error: ${r.status}`);return(await r.json()).content.filter(i=>i.type==="text").map(i=>i.text).join("").trim()}async function Ye(e,t){let r=`https://generativelanguage.googleapis.com/v1beta/models/${t.model??"gemini-1.5-flash"}:generateContent?key=${t.apiKey}`,o=await fetch(r,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({contents:[{parts:[{text:e}]}],generationConfig:{maxOutputTokens:150,temperature:.2}})});if(!o.ok)throw new Error(`Gemini API error: ${o.status}`);return(await o.json()).candidates[0]?.content.parts.map(s=>s.text).join("").trim()??""}function ge(e,t,n){window.dispatchEvent(new CustomEvent(e,{detail:{form:t,toolName:n}}))}function Xe(e,t){if(e.dataset.noWebmcp!==void 0)return!0;for(let n of t.exclude)try{if(e.matches(n))return!0}catch{}return!1}async function I(e,t){if(Xe(e,t))return;let n;for(let[i,s]of Object.entries(t.overrides))try{if(e.matches(i)){n=s;break}}catch{}let r=X(e,n);t.enhance&&(t.debug&&console.debug(`[auto-webmcp] Enriching: ${r.name}\u2026`),r=await pe(r,t.enhance)),t.debug&&st(r.name,r.description);let o=ue(e,t,r.name,r);await O(e,r,o),W.add(e),j++,t.debug&&console.debug(`[auto-webmcp] Registered: ${r.name}`,r),ge("form:registered",e,r.name)}async function Qe(e,t){let{getRegisteredToolName:n}=await Promise.resolve().then(()=>(H(),oe)),r=n(e);r&&(await M(e),W.delete(e),t.debug&&console.debug(`[auto-webmcp] Unregistered: ${r}`),ge("form:unregistered",e,r))}var v=null,W=new WeakSet,j=0,D=new Map,Ze=300;function et(e){let t=e.tagName.toLowerCase();if(t==="input"||t==="textarea"||t==="select")return!0;let n=e.getAttribute("role");if(n&&y.includes(n)||e.querySelector("input, textarea, select"))return!0;for(let r of y)if(e.querySelector(`[role="${r}"]`))return!0;return!1}function tt(e,t){let n=D.get(e);n&&clearTimeout(n),D.set(e,setTimeout(()=>{D.delete(e),I(e,t)},Ze))}function nt(e){v||(v=new MutationObserver(t=>{for(let n of t){for(let r of n.addedNodes){if(!(r instanceof Element))continue;if(r instanceof HTMLFormElement){I(r,e);continue}let o=r.closest("form");o instanceof HTMLFormElement&&W.has(o)&&et(r)&&tt(o,e);for(let i of Array.from(r.querySelectorAll("form")))I(i,e)}for(let r of n.removedNodes){if(!(r instanceof Element))continue;let o=r instanceof HTMLFormElement?[r]:Array.from(r.querySelectorAll("form"));for(let i of o)Qe(i,e)}}}),v.observe(document.body,{childList:!0,subtree:!0}))}function rt(e){window.addEventListener("hashchange",()=>x(e));let t={pushState:history.pushState.bind(history),replaceState:history.replaceState.bind(history)};history.pushState=function(...n){t.pushState(...n),x(e)},history.replaceState=function(...n){t.replaceState(...n),x(e)},window.addEventListener("popstate",()=>x(e))}async function x(e){let t=Array.from(document.querySelectorAll("form"));await Promise.allSettled(t.map(n=>I(n,e)))}var it=new Set(["password","hidden","file","submit","reset","button","image"]);async function ot(e){if(!E())return;let t='[type="submit"]:not([disabled]), button:not([type]):not([disabled])',n=/subscribe|submit|sign[\s-]?up|send|join|go|search/i,r=Array.from(document.querySelectorAll("input:not(form input), textarea:not(form textarea), select:not(form select)")).filter(i=>{if(i instanceof HTMLInputElement&&it.has(i.type.toLowerCase()))return!1;let s=i.getBoundingClientRect();return s.width>0&&s.height>0});if(r.length===0)return;let o=new Map;for(let i of r){let s=i.parentElement,a=i.parentElement??document.body;for(;s&&s!==document.body;){if(s.querySelector(t)!==null||Array.from(s.querySelectorAll("button")).some(c=>n.test(c.textContent??""))){a=s;break}s=s.parentElement}o.has(a)||o.set(a,[]),o.get(a).push(i)}for(let[i,s]of o){let a=Array.from(i.querySelectorAll(t)).filter(d=>{let p=d.getBoundingClientRect();return p.width>0&&p.height>0}),l=a[a.length-1]??null;if(!l){let d=Array.from(document.querySelectorAll("button")).filter(p=>{let g=p.getBoundingClientRect();return g.width>0&&g.height>0&&n.test(p.textContent??"")});l=d[d.length-1]??null}let c=re(i,s,l),u=[],f=c.inputSchema.properties;for(let d of s){let p=d.name||d.dataset.webmcpName||d.id||d.getAttribute("aria-label")||null,g=p?p.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").slice(0,64):null;g&&f[g]&&u.push({key:g,el:d})}let b=c.name,S=async d=>{for(let{key:p,el:g}of u)d[p]!==void 0&&fe(g,d[p]);return window.dispatchEvent(new CustomEvent("toolactivated",{detail:{toolName:b}})),{content:[{type:"text",text:"Fields filled. Ready to submit."}]}};try{await navigator.modelContext.registerTool({name:c.name,description:c.description,inputSchema:c.inputSchema,execute:S}),e.debug&&console.debug(`[auto-webmcp] Orphan tool registered: ${c.name}`,c)}catch{}}}function st(e,t){/^form_\d+$|^submit$|^form$/.test(e)&&console.warn(`[auto-webmcp] Tool "${e}" has a generic name. Consider adding a toolname or data-webmcp-name attribute.`),(!t||t==="Submit form")&&console.warn(`[auto-webmcp] Tool "${e}" has no meaningful description.`),/don'?t|do not|never|avoid|not for/i.test(t)&&console.warn(`[auto-webmcp] Tool "${e}" description contains negative instructions. Per spec best practices, prefer positive descriptions.`)}async function Ee(e){document.readyState==="loading"&&await new Promise(t=>document.addEventListener("DOMContentLoaded",()=>t(),{once:!0})),j=0,nt(e),rt(e),await x(e),j===0&&await ot(e)}function be(){v?.disconnect(),v=null}H();async function Te(e){let t=z(e);return t.debug&&console.debug("[auto-webmcp] Initializing",{webmcpSupported:E(),config:t}),await Ee(t),{destroy:async()=>{be(),await _()},getTools:$,isSupported:E()}}typeof window<"u"&&!window.__AUTO_WEBMCP_NO_AUTOINIT&&Te();return ve(at);})();
|
|
10
10
|
//# sourceMappingURL=auto-webmcp.iife.js.map
|