@agentronics/sdk 0.1.0 → 0.1.1
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/chunk-CILAO3KF.js +17 -0
- package/dist/chunk-CILAO3KF.js.map +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.global.js +3 -3
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{init-only-DrZymcuA.d.ts → init-only-Dm_CIjHa.d.ts} +4 -1
- package/dist/{init-only-6SWFNqud.d.cts → init-only-hn-ea3qP.d.cts} +4 -1
- package/dist/init-only.cjs +3 -3
- package/dist/init-only.cjs.map +1 -1
- package/dist/init-only.d.cts +1 -1
- package/dist/init-only.d.ts +1 -1
- package/dist/init-only.global.js +3 -3
- package/dist/init-only.global.js.map +1 -1
- package/dist/init-only.js +1 -1
- package/package.json +10 -3
- package/dist/chunk-DKDVADEU.js +0 -17
- package/dist/chunk-DKDVADEU.js.map +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var protocol=require('@agentronics/protocol');var ut=()=>{if(typeof navigator>"u")return null;let e=navigator.modelContext;return e&&typeof e=="object"?e:null},E=async(e={})=>{let{pollMs:t=500}=e,r=Date.now();for(;;){let n=ut();if(n)return dt(n);if(Date.now()-r>=t)return null;await new Promise(o=>setTimeout(o,50));}},dt=e=>({class:"webmcp",trust:"detected",confidence:1,vendor:e.vendor??e.client??null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{webmcp:true,toolCount:Array.isArray(e.tools)?e.tools.length:0}});var yt=[/HeadlessChrome/i,/Headless/i,/PhantomJS/i,/SlimerJS/i],mt=()=>({hit:(typeof navigator<"u"&&navigator.webdriver)===true,weight:.6,detail:"navigator.webdriver === true"}),gt=()=>{if(typeof window>"u")return {hit:false,weight:.5};let e=Object.keys(window).filter(t=>t.startsWith("cdc_"));return {hit:e.length>0,weight:.5,detail:`window.${e[0]??"cdc_*"}`}},ft=()=>{if(typeof navigator>"u"||!navigator.plugins)return {hit:false,weight:.2};let e=/Win|Mac|Linux/.test(navigator.userAgent??""),t=navigator.plugins.length===0;return {hit:e&&t,weight:.2,detail:"desktop UA with no plugins"}},ht=()=>{if(typeof navigator>"u")return {hit:false,weight:.7};let e=navigator.userAgent??"",t=yt.some(r=>r.test(e));return t?{hit:t,weight:.7,detail:`headless UA: ${e}`}:{hit:t,weight:.7}},vt=()=>{if(typeof navigator>"u")return {hit:false,weight:.15};let e=navigator.languages;return {hit:!e||e.length===0,weight:.15,detail:"navigator.languages empty"}},xt=()=>{if(typeof navigator>"u")return {hit:false,weight:.1};let e="chrome"in window,t=navigator.userAgent??"";return {hit:/Chrome\//.test(t)&&!/Edg\//.test(t)&&!e,weight:.2,detail:"Chrome UA without window.chrome"}},wt={webdriver:mt,chromedriver:gt,headlessUa:ht,languages:vt,permissions:xt,plugins:ft},C=(e={})=>{let{threshold:t=.4}=e,r={},n=0,o=0;for(let[a,s]of Object.entries(wt)){let l=s();n+=l.weight,r[a]={hit:l.hit,weight:l.weight,detail:l.detail},l.hit&&(o+=l.weight);}let i=n===0?0:o/n;return i<t?null:{class:"dom",trust:"detected",confidence:i,vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:r}};var X=()=>[{id:"webmcp.model-context",status:"stable",detect:()=>E({pollMs:0})},{id:"dom.automation-heuristics",status:"beta",detect:()=>C()}],L=(e=X())=>{let t=new Map(e.map(r=>[r.id,r]));return {register(r){t.set(r.id,r);},list(r){let n=[...t.values()];return r?n.filter(o=>o.status===r):n},async detectAll(r=false){for(let n of t.values()){if(n.status==="research"&&!r)continue;let o=await n.detect();if(o)return o}return null}}};var Y=e=>{let t=protocol.AgentClass.parse(e.class),r=e.verificationToken?"verified":"declared";return {class:t,trust:r,confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{declared:true,hasVerificationToken:!!e.verificationToken}}};var Oe=({gatewayUrl:e,fetcher:t=fetch})=>{let r=null,n=[];return {snapshot(){return [...n]},async sync(){let o=await t(`${e.replace(/\/$/,"")}/v1/detector-signatures`,{headers:r?{"if-none-match":r}:{}});if(o.status===304)return this.snapshot();if(!o.ok)throw new Error(`Detector signature sync failed with status ${o.status}.`);return n=(await o.json()).signatures??[],r=o.headers.get("etag"),this.snapshot()}}};var W=async(e={})=>{if(e.customDetectors?.length){let t=await L(e.customDetectors).detectAll(!!e.experimental);if(t)return t}if(e.webmcp!==false){let t=await E(e.webmcp??{});if(t)return t}if(e.dom!==false){let t=C(e.dom??{});if(t)return t}return null};var kt=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),Q=()=>{let e=null;return {present(t){let r=protocol.IdentityClaim.safeParse(t);if(!r.success)throw new protocol.AgentronicsError("invalid_api_key",`Invalid identity claim: ${r.error.issues[0]?.message??"unknown"}`);let n={claim:r.data,identity:kt(r.data)};return e=n,n},clear(){e=null;},preferOver(t){return e?t?protocol.isHigherTrust(e.identity.trust,t.trust)?e.identity:t:e.identity:t},snapshot(){return e}}};var Mt=({detected:e,declared:t,verified:r,linked:n})=>n?"linked":r?"verified":t?"declared":"detected",Z=e=>{let t=null;for(let r of e)(!t||protocol.TRUST_RANK[r.trust]>protocol.TRUST_RANK[t.trust])&&(t=r);return t};var Le=()=>({name:"bearer",async authenticate(e,t){if(!e.bearerToken)return null;let r=await t.verifyToken?.("bearer",e.bearerToken);return {class:e.classHint??"dom",trust:r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"bearer",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{bearer:true,verifiedRemotely:!!r}}}});var We=()=>({name:"detection",async authenticate(e){return e.detected??null}});var $e=()=>({name:"extensionToken",async authenticate(e,t){if(!e.extensionToken)return null;let r=await t.verifyToken?.("extensionToken",e.extensionToken);return {class:"dom",trust:r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"browser-extension",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{extensionToken:true,verifiedRemotely:!!r}}}});var je=()=>({name:"oauth2",async authenticate(e,t){if(!e.oauth2AccessToken)return null;let r=await t.verifyToken?.("oauth2",e.oauth2AccessToken);return {class:e.classHint??"webmcp",trust:e.oauth2Subject?"linked":r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"oauth2",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{oauth2:true,subject:e.oauth2Subject??null,verifiedRemotely:!!r}}}});var Pt=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),Ge=()=>({name:"selfDeclaration",async authenticate(e){return e.declaration?Pt(protocol.IdentityClaim.parse(e.declaration)):null}});var Be=()=>({name:"sessionLink",async authenticate(e,t){if(!e.sessionLinkToken)return null;let r=await t.verifyToken?.("sessionLink",e.sessionLinkToken);return {class:e.classHint??"screenshot",trust:e.linkedUserId?"linked":r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"session-link",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{sessionLink:true,linkedUserId:e.linkedUserId??null,verifiedRemotely:!!r}}}});var Ne=()=>({name:"xAgentHeader",async authenticate(e){if(!e.xAgentHeader)return null;let[t="x-agent",r="dom",n]=e.xAgentHeader.split(";"),o=protocol.AgentClass.safeParse(r);return {class:o.success?o.data:"dom",trust:n?"verified":"declared",confidence:n?1:.8,vendor:t,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{xAgentHeader:true,hasProof:!!n}}}});var Et=()=>[We(),Ge(),Le(),Ne(),$e(),Be(),je()],ee=({methods:e=Et(),context:t={},onTrace:r}={})=>({async authenticate(n){let o=[],i={};for(let l of e){let p=await l.authenticate(n,t);i[l.name]=!!p,p&&o.push(p);}let a=Z(o),s={type:a?"auth.identity_presented":"sdk.error",agent:a,outcome:a?"success":"error",metadata:{methods:i}};return a||(s.error="No auth method produced an identity."),r?.(s),a},methods(){return e.map(n=>n.name)}});var Ct={identity:null,source:"initial",updatedAt:null},te=()=>{let e=Ct,t=new Set,r=()=>{t.size!==0&&t.forEach(n=>n(e));};return {snapshot(){return e},set(n,o){e={identity:n,source:o,updatedAt:new Date().toISOString()},r();},subscribe(n){return t.add(n),()=>{t.delete(n);}}}};var Ot=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,r)=>{e.set(t,r);}}},Dt=()=>typeof window>"u"||!window.localStorage?Ot():{read:e=>{try{return window.localStorage.getItem(e)}catch{return null}},write:(e,t)=>{try{window.localStorage.setItem(e,t);}catch{}}},Lt=e=>{if(!e)return null;try{let t=JSON.parse(e);if(typeof t=="object"&&t!==null&&Number.isFinite(t.count)&&Number.isFinite(t.resetAt))return t}catch{return null}return null},re=(e=Dt())=>({consume(t,r,n=Date.now()){let o=`agtx:rate:${t}`,i=Lt(e.read(o)),a=i&&i.resetAt>n?i.resetAt:n+r.windowSeconds*1e3,s=i&&i.resetAt>n?i.count+1:1;return e.write(o,JSON.stringify({count:s,resetAt:a})),{allowed:s<=r.max,remaining:Math.max(0,r.max-s),resetAt:a}}});var Wt=(e,t)=>e==="*"||e===t?true:e.includes("*")?new RegExp("^"+e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*")+"$").test(t):false,$t=(e,t)=>{let r=e?protocol.TRUST_RANK[e.trust]:-1,n=protocol.TRUST_RANK[t.minTrust];return r>=n},jt=(e,t)=>t.allowedClasses.length===0?true:e?t.allowedClasses.includes(e.class):false,Ke="review",Gt=(e,t)=>{let r=t?.class??"unknown",n=t?.vendor??"unknown",o=t?.trust??"none";return `${e}:${r}:${n}:${o}`},ne=(e=[],t={})=>{let r=e.map(o=>protocol.PolicyRule.parse(o)),n=t.rateLimiter??re();return {set(o){r=o.map(i=>protocol.PolicyRule.parse(i));},list(){return [...r]},evaluate({tool:o,identity:i}){for(let a of r)if(Wt(a.tool,o)){if(!$t(i,a))return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" requires trust >= ${a.minTrust}.`};if(!jt(i,a))return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" restricts to classes: ${a.allowedClasses.join(", ")}.`};if(a.rateLimit){let s=n.consume(Gt(o,i),a.rateLimit);if(!s.allowed)return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" rate limit exceeded. Resets at ${new Date(s.resetAt).toISOString()}.`}}return {decision:a.decision,ruleId:a.id,reason:`Matched rule "${a.id}".`}}return {decision:Ke,ruleId:null,reason:`No rule matched tool "${o}". Falling back to "${Ke}".`}}}};var oe=({gatewayUrl:e,siteId:t,publishableKey:r,fetcher:n=fetch})=>{let o={policies:[],etag:null};return {snapshot(){return {policies:[...o.policies],etag:o.etag}},async sync(){let i=await n(`${e.replace(/\/$/,"")}/v1/sites/${encodeURIComponent(t)}/policies`,{headers:{authorization:`Bearer ${r}`,...o.etag?{"if-none-match":o.etag}:{}}});if(i.status===304)return this.snapshot();if(!i.ok)throw new Error(`Policy sync failed with status ${i.status}.`);let a=await i.json();return o={policies:protocol.PolicyRule.array().parse(a.policies??[]),etag:i.headers.get("etag")},this.snapshot()}}};var ie=({message:e="Agent action blocked by site policy.",durationMs:t=2400,documentRef:r=typeof document>"u"?void 0:document}={})=>{if(!r?.body)return null;let n=r.createElement("div");return n.setAttribute("role","status"),n.setAttribute("data-agentronics-deny-overlay","true"),n.textContent=e,Object.assign(n.style,{position:"fixed",zIndex:"2147483647",left:"50%",bottom:"24px",transform:"translateX(-50%)",maxWidth:"min(520px, calc(100vw - 32px))",padding:"12px 16px",borderRadius:"8px",background:"#07091A",color:"#F4F4F5",border:"1px solid #6366F1",boxShadow:"0 20px 48px -16px rgba(7,9,26,0.55)",font:"13px/1.45 'Space Mono', ui-monospace, SFMono-Regular, Menlo, monospace"}),r.body.appendChild(n),window.setTimeout(()=>n.remove(),t),n};var se=({policyEngine:e,getIdentity:t,documentRef:r=typeof document>"u"?void 0:document,selector:n="[data-agentronics-tool]"})=>{if(!r)return {uninstall:()=>{}};let o=i=>{let a=i.target instanceof Element?i.target.closest(n):null;if(!(a instanceof HTMLElement))return;let s=a.dataset.agentronicsTool;s&&Promise.resolve(t()).then(l=>{let p=e.evaluate({tool:s,identity:l});p.decision==="deny"&&(i.preventDefault(),i.stopPropagation(),ie({message:p.reason,documentRef:r}));});};return r.addEventListener("click",o,true),{uninstall:()=>r.removeEventListener("click",o,true)}};var ae=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,r)=>{e.set(t,r);},remove:t=>{e.delete(t);},keys:()=>[...e.keys()]}},Fe=(e,t)=>({read:r=>{try{return e.getItem(t+r)}catch{return null}},write:(r,n)=>{try{e.setItem(t+r,n);}catch{}},remove:r=>{try{e.removeItem(t+r);}catch{}},keys:()=>{let r=[];try{for(let n=0;n<e.length;n++){let o=e.key(n);o&&o.startsWith(t)&&r.push(o.slice(t.length));}}catch{}return r}}),He="agtx:",ze=()=>{let e=typeof window<"u",t=e&&typeof window.sessionStorage<"u"?Fe(window.sessionStorage,He+"session:"):ae(),r=e&&typeof window.localStorage<"u"?Fe(window.localStorage,He+"user:"):ae();return {session:t,user:r,org:ae()}};var Ve=(e,t)=>e.expiresAt!==null&&e.expiresAt<=t,qe=e=>{if(!e)return null;try{let t=JSON.parse(e);return typeof t!="object"||t===null?null:t}catch{return null}},Nt=e=>JSON.stringify(e),ce=(e={})=>{let t=ze(),r=l=>{e.onTrace?.(l);};return {get:(l,p={})=>{let u=p.scope??"session",g=t[u],m=qe(g.read(l));if(!m){r({type:"memory.accessed",metadata:{operation:"get",key:l,scope:u,hit:false}});return}if(Ve(m,Date.now())){g.remove(l),r({type:"memory.accessed",metadata:{operation:"get",key:l,scope:u,hit:false,expired:true}});return}return r({type:"memory.accessed",metadata:{operation:"get",key:l,scope:u,hit:true}}),m.value},set:(l,p,u={})=>{let g=u.scope??"session",m=u.ttlSeconds??null,v=Date.now(),w={value:p,expiresAt:m===null?null:v+m*1e3,updatedAt:new Date(v).toISOString()};return t[g].write(l,Nt(w)),r({type:"memory.updated",metadata:{operation:"set",key:l,scope:g,ttlSeconds:m}}),protocol.MemoryEntry.parse({key:l,value:p,scope:g,ttlSeconds:m,updatedAt:w.updatedAt})},remove:(l,p={})=>{let u=p.scope??"session";t[u].remove(l),r({type:"memory.updated",metadata:{operation:"remove",key:l,scope:u}});},list:(l={})=>{let p=l.scope??"session",u=t[p],g=Date.now(),m=[];for(let v of u.keys()){let w=qe(u.read(v));if(w){if(Ve(w,g)){u.remove(v);continue}m.push(protocol.MemoryEntry.parse({key:v,value:w.value,scope:p,ttlSeconds:w.expiresAt===null?null:Math.max(0,Math.round((w.expiresAt-g)/1e3)),updatedAt:w.updatedAt}));}}return r({type:"memory.accessed",metadata:{operation:"list",scope:p,count:m.length}}),m},clear:(l={})=>{let p=l.scope??"session",u=t[p],g=u.keys().length;for(let m of u.keys())u.remove(m);r({type:"memory.updated",metadata:{operation:"clear",scope:p,count:g}});}}};var le=e=>protocol.SiteMemory.parse(JSON.parse(JSON.stringify(e))),$=e=>({...e,updatedAt:new Date().toISOString()}),pe=(e={})=>{let t=protocol.SiteMemory.parse({...protocol.SITE_MEMORY_DEFAULT,...e.initial??{}}),r=null,n=new Set,o=d=>{e.onTrace?.(d);},i=()=>{r=null;},a=()=>{if(n.size===0)return;let d=le(t);r=d,n.forEach(f=>f(d));},s=d=>{let f=protocol.SiteMemory.parse({...t,...d,workflows:{...t.workflows,...d.workflows??{}},policies:{...t.policies,...d.policies??{}},uiGuidance:{...t.uiGuidance,...d.uiGuidance??{}},pageContexts:{...t.pageContexts,...d.pageContexts??{}}});return t=$(f),i(),o({type:"memory.updated",metadata:{kind:"site",operation:"provide",keys:Object.keys(d)}}),a(),u()},l=(d,f)=>{let h=d.split(".").filter(Boolean);if(h.length===0)throw new Error("siteMemory.update() requires a non-empty dot-path.");let A=JSON.parse(JSON.stringify(t)),k=A;for(let M=0;M<h.length-1;M++){let T=h[M],I=k[T];(typeof I!="object"||I===null||Array.isArray(I))&&(k[T]={}),k=k[T];}return k[h[h.length-1]]=f,t=$(protocol.SiteMemory.parse(A)),i(),o({type:"memory.updated",metadata:{kind:"site",operation:"update",path:d}}),a(),u()},p=d=>{let f=protocol.SiteMemoryPageContext.parse({path:d.path,payload:d.payload,updatedAt:new Date().toISOString()});return t=$({...t,pageContexts:{...t.pageContexts,[d.path]:f}}),i(),o({type:"memory.updated",metadata:{kind:"site",operation:"provideForPage",path:d.path}}),a(),{...f,payload:{...f.payload}}},u=()=>(r||(r=le(t)),r);return {provide:s,update:l,provideForPage:p,snapshot:u,get:d=>{if(o({type:"memory.accessed",metadata:{kind:"site",operation:d?"get":"snapshot",path:d??null}}),!d)return le(t);let f=d.split(".").filter(Boolean),h=t;for(let A of f){if(typeof h!="object"||h===null)return;h=h[A];}return h},getForPage:d=>{o({type:"memory.accessed",metadata:{kind:"site",operation:"getForPage",path:d}});let f=t.pageContexts[d];return f?{...f,payload:{...f.payload}}:null},replace:d=>(t=$(protocol.SiteMemory.parse(d)),i(),a(),u()),subscribe:d=>(n.add(d),()=>{n.delete(d);})}};var ue=({gatewayUrl:e,siteId:t,publishableKey:r,fetcher:n=fetch})=>{let o={memory:null,etag:null};return {snapshot(){return {memory:o.memory?protocol.SiteMemory.parse(o.memory):null,etag:o.etag}},async sync(){let i=await n(`${e.replace(/\/$/,"")}/v1/sites/${encodeURIComponent(t)}/memory`,{headers:{authorization:`Bearer ${r}`,...o.etag?{"if-none-match":o.etag}:{}}});if(i.status===304)return this.snapshot();if(!i.ok)throw new Error(`Memory sync failed with status ${i.status}.`);let a=await i.json();return o={memory:protocol.SiteMemory.parse(a.memory??{}),etag:i.headers.get("etag")},this.snapshot()}}};var Ye=({toolName:e="getSiteContext",description:t="Returns Agentronics site memory: page map, workflows, policies, UI guidance.",getSnapshot:r,onAccess:n})=>({name:e,description:t,inputSchema:{type:"object",properties:{path:{type:"string",description:'Optional dot-path into the site memory (e.g. "workflows.purchase").'}},required:[]},invoke(o={}){let i=r(),a=o.path??null;if(n?.(a),!a)return {content:i};let s=a.split(".").filter(Boolean),l=i;for(let p of s){if(typeof l!="object"||l===null)return {content:void 0};l=l[p];}return {content:l}}});var b="agent-context-",de="agentronics-site-context",Kt=e=>{try{return JSON.stringify(e)}catch{return "{}"}},j=(e,t,r)=>{let n=e.querySelector(`meta[name="${t}"]`);n||(n=e.createElement("meta"),n.setAttribute("name",t),e.head.appendChild(n)),n.setAttribute("content",r);},G=(e,t)=>{e.querySelectorAll(`meta[name="${t}"]`).forEach(r=>r.remove());},B=({doc:e=typeof document>"u"?null:document,snapshot:t,schemaType:r="WebSite"})=>{if(!e)return {uninstall:()=>{}};j(e,`${b}version`,t.version),j(e,`${b}updated-at`,t.updatedAt??new Date().toISOString()),t.siteMap?.navigation?.flow&&j(e,`${b}flow`,t.siteMap.navigation.flow),j(e,`${b}workflows`,Object.keys(t.workflows).join(","));let n=e.getElementById(de);return n||(n=e.createElement("script"),n.type="application/ld+json",n.id=de,e.head.appendChild(n)),n.textContent=Kt({"@context":"https://schema.org","@type":r,name:"Agentronics Site Memory",agentronics:t}),{uninstall:()=>{G(e,`${b}version`),G(e,`${b}updated-at`),G(e,`${b}flow`),G(e,`${b}workflows`),e.getElementById(de)?.remove();}}};var Qe="agentronics-memory-overlay",Ft=e=>`
|
|
1
|
+
'use strict';var protocol=require('@agentronics/protocol');var yt=()=>{if(typeof navigator>"u")return null;let e=navigator.modelContext;return e&&typeof e=="object"?e:null},E=async(e={})=>{let{pollMs:t=500}=e,r=Date.now();for(;;){let n=yt();if(n)return gt(n);if(Date.now()-r>=t)return null;await new Promise(o=>setTimeout(o,50));}},gt=e=>({class:"webmcp",trust:"detected",confidence:1,vendor:e.vendor??e.client??null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{webmcp:true,toolCount:Array.isArray(e.tools)?e.tools.length:0}});var ft=[/HeadlessChrome/i,/Headless/i,/PhantomJS/i,/SlimerJS/i],ht=()=>({hit:(typeof navigator<"u"&&navigator.webdriver)===true,weight:.6,detail:"navigator.webdriver === true"}),vt=()=>{if(typeof window>"u")return {hit:false,weight:.5};let e=Object.keys(window).filter(t=>t.startsWith("cdc_"));return {hit:e.length>0,weight:.5,detail:`window.${e[0]??"cdc_*"}`}},xt=()=>{if(typeof navigator>"u"||!navigator.plugins)return {hit:false,weight:.2};let e=/Win|Mac|Linux/.test(navigator.userAgent??""),t=navigator.plugins.length===0;return {hit:e&&t,weight:.2,detail:"desktop UA with no plugins"}},wt=()=>{if(typeof navigator>"u")return {hit:false,weight:.7};let e=navigator.userAgent??"",t=ft.some(r=>r.test(e));return t?{hit:t,weight:.7,detail:`headless UA: ${e}`}:{hit:t,weight:.7}},Tt=()=>{if(typeof navigator>"u")return {hit:false,weight:.15};let e=navigator.languages;return {hit:!e||e.length===0,weight:.15,detail:"navigator.languages empty"}},St=()=>{if(typeof navigator>"u")return {hit:false,weight:.1};let e="chrome"in window,t=navigator.userAgent??"";return {hit:/Chrome\//.test(t)&&!/Edg\//.test(t)&&!e,weight:.2,detail:"Chrome UA without window.chrome"}},bt={webdriver:ht,chromedriver:vt,headlessUa:wt,languages:Tt,permissions:St,plugins:xt},C=(e={})=>{let{threshold:t=.4}=e,r={},n=0,o=0;for(let[s,a]of Object.entries(bt)){let l=a();n+=l.weight,r[s]={hit:l.hit,weight:l.weight,detail:l.detail},l.hit&&(o+=l.weight);}let i=n===0?0:o/n;return i<t?null:{class:"dom",trust:"detected",confidence:i,vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:r}};var X=()=>[{id:"webmcp.model-context",status:"stable",detect:()=>E({pollMs:0})},{id:"dom.automation-heuristics",status:"beta",detect:()=>C()}],L=(e=X())=>{let t=new Map(e.map(r=>[r.id,r]));return {register(r){t.set(r.id,r);},list(r){let n=[...t.values()];return r?n.filter(o=>o.status===r):n},async detectAll(r=false){for(let n of t.values()){if(n.status==="research"&&!r)continue;let o=await n.detect();if(o)return o}return null}}};var Y=e=>{let t=protocol.AgentClass.parse(e.class),r=e.verificationToken?"verified":"declared";return {class:t,trust:r,confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{declared:true,hasVerificationToken:!!e.verificationToken}}};var Oe=({gatewayUrl:e,fetcher:t=fetch})=>{let r=null,n=[];return {snapshot(){return [...n]},async sync(){let o=await t(`${e.replace(/\/$/,"")}/v1/detector-signatures`,{headers:r?{"if-none-match":r}:{}});if(o.status===304)return this.snapshot();if(!o.ok)throw new Error(`Detector signature sync failed with status ${o.status}.`);return n=(await o.json()).signatures??[],r=o.headers.get("etag"),this.snapshot()}}};var W=async(e={})=>{if(e.customDetectors?.length){let t=await L(e.customDetectors).detectAll(!!e.experimental);if(t)return t}if(e.webmcp!==false){let t=await E(e.webmcp??{});if(t)return t}if(e.dom!==false){let t=C(e.dom??{});if(t)return t}return null};var Pt=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),Q=()=>{let e=null;return {present(t){let r=protocol.IdentityClaim.safeParse(t);if(!r.success)throw new protocol.AgentronicsError("invalid_api_key",`Invalid identity claim: ${r.error.issues[0]?.message??"unknown"}`);let n={claim:r.data,identity:Pt(r.data)};return e=n,n},clear(){e=null;},preferOver(t){return e?t?protocol.isHigherTrust(e.identity.trust,t.trust)?e.identity:t:e.identity:t},snapshot(){return e}}};var Rt=({detected:e,declared:t,verified:r,linked:n})=>n?"linked":r?"verified":t?"declared":"detected",Z=e=>{let t=null;for(let r of e)(!t||protocol.TRUST_RANK[r.trust]>protocol.TRUST_RANK[t.trust])&&(t=r);return t};var Le=()=>({name:"bearer",async authenticate(e,t){if(!e.bearerToken)return null;let r=await t.verifyToken?.("bearer",e.bearerToken);return {class:e.classHint??"dom",trust:r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"bearer",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{bearer:true,verifiedRemotely:!!r}}}});var We=()=>({name:"detection",async authenticate(e){return e.detected??null}});var $e=()=>({name:"extensionToken",async authenticate(e,t){if(!e.extensionToken)return null;let r=await t.verifyToken?.("extensionToken",e.extensionToken);return {class:"dom",trust:r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"browser-extension",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{extensionToken:true,verifiedRemotely:!!r}}}});var je=()=>({name:"mtls",async authenticate(e,t){if(!e.xfccHeader)return null;let r=await t.verifyToken?.("mtls",e.xfccHeader);return {class:e.classHint??"webmcp",trust:r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"mtls",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{mtls:true,subject:r?.subject??null,verifiedRemotely:!!r,...r?.signals??{}}}}});var Ge=()=>({name:"oauth2",async authenticate(e,t){if(!e.oauth2AccessToken)return null;let r=await t.verifyToken?.("oauth2",e.oauth2AccessToken);return {class:e.classHint??"webmcp",trust:e.oauth2Subject?"linked":r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"oauth2",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{oauth2:true,subject:e.oauth2Subject??null,verifiedRemotely:!!r}}}});var Ct=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),Be=()=>({name:"selfDeclaration",async authenticate(e){return e.declaration?Ct(protocol.IdentityClaim.parse(e.declaration)):null}});var Ne=()=>({name:"sessionLink",async authenticate(e,t){if(!e.sessionLinkToken)return null;let r=await t.verifyToken?.("sessionLink",e.sessionLinkToken);return {class:e.classHint??"screenshot",trust:e.linkedUserId?"linked":r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"session-link",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{sessionLink:true,linkedUserId:e.linkedUserId??null,verifiedRemotely:!!r}}}});var _e=()=>({name:"sso",async authenticate(e,t){if(!e.ssoIdToken)return null;let r=await t.verifyToken?.("sso",e.ssoIdToken);return {class:e.classHint??"dom",trust:r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"sso",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{sso:true,subject:r?.subject??null,verifiedRemotely:!!r,...r?.signals??{}}}}});var Ue=()=>({name:"spiffe",async authenticate(e,t){if(!e.spiffeJwt)return null;let r=await t.verifyToken?.("spiffe",e.spiffeJwt),n=r?.vendor==="google";return {class:e.classHint??"webmcp",trust:r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"spiffe",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{spiffe:true,spiffeId:r?.subject??null,subject:r?.subject??null,verifiedRemotely:!!r,...n?{googleAgent:true}:{},...r?.signals??{}}}}});var He=()=>({name:"xAgentHeader",async authenticate(e){if(!e.xAgentHeader)return null;let[t="x-agent",r="dom",n]=e.xAgentHeader.split(";"),o=protocol.AgentClass.safeParse(r);return {class:o.success?o.data:"dom",trust:n?"verified":"declared",confidence:n?1:.8,vendor:t,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:"2026.04",signals:{xAgentHeader:true,hasProof:!!n}}}});var Dt=()=>[We(),Be(),Le(),He(),$e(),Ne(),Ge(),_e(),Ue(),je()],Lt={detection:"detection",selfDeclaration:"declaration",bearer:"bearer",xAgentHeader:"x-agent-header",extensionToken:"extension",sessionLink:"session-link",oauth2:"oauth2",sso:"sso",spiffe:"spiffe",mtls:"mtls"},Wt=(e,t)=>e==="spiffe"&&t.signals?.googleAgent===true?"google-agent":Lt[e],ee=({methods:e=Dt(),context:t={},onTrace:r}={})=>({async authenticate(n){let o=[],i={};for(let m of e){let d=await m.authenticate(n,t);i[m.name]=!!d,d&&o.push({method:m.name,identity:d});}let s=Z(o.map(m=>m.identity)),a=s?o.find(m=>m.identity===s):void 0,l=a?Wt(a.method,a.identity):void 0,p=typeof s?.signals?.subject=="string"?s.signals.subject:void 0,u={type:s?"auth.identity_presented":"sdk.error",agent:s,outcome:s?"success":"error",metadata:{methods:i,...l?{protocol:l}:{},...p?{subject:p}:{}}};return s||(u.error="No auth method produced an identity."),r?.(u),s},methods(){return e.map(n=>n.name)}});var $t={identity:null,source:"initial",updatedAt:null},te=()=>{let e=$t,t=new Set,r=()=>{t.size!==0&&t.forEach(n=>n(e));};return {snapshot(){return e},set(n,o){e={identity:n,source:o,updatedAt:new Date().toISOString()},r();},subscribe(n){return t.add(n),()=>{t.delete(n);}}}};var jt=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,r)=>{e.set(t,r);}}},Gt=()=>typeof window>"u"||!window.localStorage?jt():{read:e=>{try{return window.localStorage.getItem(e)}catch{return null}},write:(e,t)=>{try{window.localStorage.setItem(e,t);}catch{}}},Bt=e=>{if(!e)return null;try{let t=JSON.parse(e);if(typeof t=="object"&&t!==null&&Number.isFinite(t.count)&&Number.isFinite(t.resetAt))return t}catch{return null}return null},re=(e=Gt())=>({consume(t,r,n=Date.now()){let o=`agtx:rate:${t}`,i=Bt(e.read(o)),s=i&&i.resetAt>n?i.resetAt:n+r.windowSeconds*1e3,a=i&&i.resetAt>n?i.count+1:1;return e.write(o,JSON.stringify({count:a,resetAt:s})),{allowed:a<=r.max,remaining:Math.max(0,r.max-a),resetAt:s}}});var Nt=(e,t)=>e==="*"||e===t?true:e.includes("*")?new RegExp("^"+e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*")+"$").test(t):false,_t=(e,t)=>{let r=e?protocol.TRUST_RANK[e.trust]:-1,n=protocol.TRUST_RANK[t.minTrust];return r>=n},Ut=(e,t)=>t.allowedClasses.length===0?true:e?t.allowedClasses.includes(e.class):false,ze="review",Ht=(e,t)=>{let r=t?.class??"unknown",n=t?.vendor??"unknown",o=t?.trust??"none";return `${e}:${r}:${n}:${o}`},ne=(e=[],t={})=>{let r=e.map(o=>protocol.PolicyRule.parse(o)),n=t.rateLimiter??re();return {set(o){r=o.map(i=>protocol.PolicyRule.parse(i));},list(){return [...r]},evaluate({tool:o,identity:i}){for(let s of r)if(Nt(s.tool,o)){if(!_t(i,s))return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" requires trust >= ${s.minTrust}.`};if(!Ut(i,s))return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" restricts to classes: ${s.allowedClasses.join(", ")}.`};if(s.rateLimit){let a=n.consume(Ht(o,i),s.rateLimit);if(!a.allowed)return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" rate limit exceeded. Resets at ${new Date(a.resetAt).toISOString()}.`}}return {decision:s.decision,ruleId:s.id,reason:`Matched rule "${s.id}".`}}return {decision:ze,ruleId:null,reason:`No rule matched tool "${o}". Falling back to "${ze}".`}}}};var oe=({gatewayUrl:e,siteId:t,publishableKey:r,fetcher:n=fetch})=>{let o={policies:[],etag:null};return {snapshot(){return {policies:[...o.policies],etag:o.etag}},async sync(){let i=await n(`${e.replace(/\/$/,"")}/v1/sites/${encodeURIComponent(t)}/policies`,{headers:{authorization:`Bearer ${r}`,...o.etag?{"if-none-match":o.etag}:{}}});if(i.status===304)return this.snapshot();if(!i.ok)throw new Error(`Policy sync failed with status ${i.status}.`);let s=await i.json();return o={policies:protocol.PolicyRule.array().parse(s.policies??[]),etag:i.headers.get("etag")},this.snapshot()}}};var ie=({message:e="Agent action blocked by site policy.",durationMs:t=2400,documentRef:r=typeof document>"u"?void 0:document}={})=>{if(!r?.body)return null;let n=r.createElement("div");return n.setAttribute("role","status"),n.setAttribute("data-agentronics-deny-overlay","true"),n.textContent=e,Object.assign(n.style,{position:"fixed",zIndex:"2147483647",left:"50%",bottom:"24px",transform:"translateX(-50%)",maxWidth:"min(520px, calc(100vw - 32px))",padding:"12px 16px",borderRadius:"8px",background:"#07091A",color:"#F4F4F5",border:"1px solid #6366F1",boxShadow:"0 20px 48px -16px rgba(7,9,26,0.55)",font:"13px/1.45 'Space Mono', ui-monospace, SFMono-Regular, Menlo, monospace"}),r.body.appendChild(n),window.setTimeout(()=>n.remove(),t),n};var se=({policyEngine:e,getIdentity:t,documentRef:r=typeof document>"u"?void 0:document,selector:n="[data-agentronics-tool]"})=>{if(!r)return {uninstall:()=>{}};let o=i=>{let s=i.target instanceof Element?i.target.closest(n):null;if(!(s instanceof HTMLElement))return;let a=s.dataset.agentronicsTool;a&&Promise.resolve(t()).then(l=>{let p=e.evaluate({tool:a,identity:l});p.decision==="deny"&&(i.preventDefault(),i.stopPropagation(),ie({message:p.reason,documentRef:r}));});};return r.addEventListener("click",o,true),{uninstall:()=>r.removeEventListener("click",o,true)}};var ae=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,r)=>{e.set(t,r);},remove:t=>{e.delete(t);},keys:()=>[...e.keys()]}},Je=(e,t)=>({read:r=>{try{return e.getItem(t+r)}catch{return null}},write:(r,n)=>{try{e.setItem(t+r,n);}catch{}},remove:r=>{try{e.removeItem(t+r);}catch{}},keys:()=>{let r=[];try{for(let n=0;n<e.length;n++){let o=e.key(n);o&&o.startsWith(t)&&r.push(o.slice(t.length));}}catch{}return r}}),Ve="agtx:",qe=()=>{let e=typeof window<"u",t=e&&typeof window.sessionStorage<"u"?Je(window.sessionStorage,Ve+"session:"):ae(),r=e&&typeof window.localStorage<"u"?Je(window.localStorage,Ve+"user:"):ae();return {session:t,user:r,org:ae()}};var Ye=(e,t)=>e.expiresAt!==null&&e.expiresAt<=t,Qe=e=>{if(!e)return null;try{let t=JSON.parse(e);return typeof t!="object"||t===null?null:t}catch{return null}},Kt=e=>JSON.stringify(e),ce=(e={})=>{let t=qe(),r=l=>{e.onTrace?.(l);};return {get:(l,p={})=>{let u=p.scope??"session",m=t[u],d=Qe(m.read(l));if(!d){r({type:"memory.accessed",metadata:{operation:"get",key:l,scope:u,hit:false}});return}if(Ye(d,Date.now())){m.remove(l),r({type:"memory.accessed",metadata:{operation:"get",key:l,scope:u,hit:false,expired:true}});return}return r({type:"memory.accessed",metadata:{operation:"get",key:l,scope:u,hit:true}}),d.value},set:(l,p,u={})=>{let m=u.scope??"session",d=u.ttlSeconds??null,v=Date.now(),w={value:p,expiresAt:d===null?null:v+d*1e3,updatedAt:new Date(v).toISOString()};return t[m].write(l,Kt(w)),r({type:"memory.updated",metadata:{operation:"set",key:l,scope:m,ttlSeconds:d}}),protocol.MemoryEntry.parse({key:l,value:p,scope:m,ttlSeconds:d,updatedAt:w.updatedAt})},remove:(l,p={})=>{let u=p.scope??"session";t[u].remove(l),r({type:"memory.updated",metadata:{operation:"remove",key:l,scope:u}});},list:(l={})=>{let p=l.scope??"session",u=t[p],m=Date.now(),d=[];for(let v of u.keys()){let w=Qe(u.read(v));if(w){if(Ye(w,m)){u.remove(v);continue}d.push(protocol.MemoryEntry.parse({key:v,value:w.value,scope:p,ttlSeconds:w.expiresAt===null?null:Math.max(0,Math.round((w.expiresAt-m)/1e3)),updatedAt:w.updatedAt}));}}return r({type:"memory.accessed",metadata:{operation:"list",scope:p,count:d.length}}),d},clear:(l={})=>{let p=l.scope??"session",u=t[p],m=u.keys().length;for(let d of u.keys())u.remove(d);r({type:"memory.updated",metadata:{operation:"clear",scope:p,count:m}});}}};var le=e=>protocol.SiteMemory.parse(JSON.parse(JSON.stringify(e))),$=e=>({...e,updatedAt:new Date().toISOString()}),ue=(e={})=>{let t=protocol.SiteMemory.parse({...protocol.SITE_MEMORY_DEFAULT,...e.initial??{}}),r=null,n=new Set,o=y=>{e.onTrace?.(y);},i=()=>{r=null;},s=()=>{if(n.size===0)return;let y=le(t);r=y,n.forEach(f=>f(y));},a=y=>{let f=protocol.SiteMemory.parse({...t,...y,workflows:{...t.workflows,...y.workflows??{}},policies:{...t.policies,...y.policies??{}},uiGuidance:{...t.uiGuidance,...y.uiGuidance??{}},pageContexts:{...t.pageContexts,...y.pageContexts??{}}});return t=$(f),i(),o({type:"memory.updated",metadata:{kind:"site",operation:"provide",keys:Object.keys(y)}}),s(),u()},l=(y,f)=>{let h=y.split(".").filter(Boolean);if(h.length===0)throw new Error("siteMemory.update() requires a non-empty dot-path.");let A=JSON.parse(JSON.stringify(t)),k=A;for(let M=0;M<h.length-1;M++){let S=h[M],I=k[S];(typeof I!="object"||I===null||Array.isArray(I))&&(k[S]={}),k=k[S];}return k[h[h.length-1]]=f,t=$(protocol.SiteMemory.parse(A)),i(),o({type:"memory.updated",metadata:{kind:"site",operation:"update",path:y}}),s(),u()},p=y=>{let f=protocol.SiteMemoryPageContext.parse({path:y.path,payload:y.payload,updatedAt:new Date().toISOString()});return t=$({...t,pageContexts:{...t.pageContexts,[y.path]:f}}),i(),o({type:"memory.updated",metadata:{kind:"site",operation:"provideForPage",path:y.path}}),s(),{...f,payload:{...f.payload}}},u=()=>(r||(r=le(t)),r);return {provide:a,update:l,provideForPage:p,snapshot:u,get:y=>{if(o({type:"memory.accessed",metadata:{kind:"site",operation:y?"get":"snapshot",path:y??null}}),!y)return le(t);let f=y.split(".").filter(Boolean),h=t;for(let A of f){if(typeof h!="object"||h===null)return;h=h[A];}return h},getForPage:y=>{o({type:"memory.accessed",metadata:{kind:"site",operation:"getForPage",path:y}});let f=t.pageContexts[y];return f?{...f,payload:{...f.payload}}:null},replace:y=>(t=$(protocol.SiteMemory.parse(y)),i(),s(),u()),subscribe:y=>(n.add(y),()=>{n.delete(y);})}};var pe=({gatewayUrl:e,siteId:t,publishableKey:r,fetcher:n=fetch})=>{let o={memory:null,etag:null};return {snapshot(){return {memory:o.memory?protocol.SiteMemory.parse(o.memory):null,etag:o.etag}},async sync(){let i=await n(`${e.replace(/\/$/,"")}/v1/sites/${encodeURIComponent(t)}/memory`,{headers:{authorization:`Bearer ${r}`,...o.etag?{"if-none-match":o.etag}:{}}});if(i.status===304)return this.snapshot();if(!i.ok)throw new Error(`Memory sync failed with status ${i.status}.`);let s=await i.json();return o={memory:protocol.SiteMemory.parse(s.memory??{}),etag:i.headers.get("etag")},this.snapshot()}}};var et=({toolName:e="getSiteContext",description:t="Returns Agentronics site memory: page map, workflows, policies, UI guidance.",getSnapshot:r,onAccess:n})=>({name:e,description:t,inputSchema:{type:"object",properties:{path:{type:"string",description:'Optional dot-path into the site memory (e.g. "workflows.purchase").'}},required:[]},invoke(o={}){let i=r(),s=o.path??null;if(n?.(s),!s)return {content:i};let a=s.split(".").filter(Boolean),l=i;for(let p of a){if(typeof l!="object"||l===null)return {content:void 0};l=l[p];}return {content:l}}});var b="agent-context-",de="agentronics-site-context",Vt=e=>{try{return JSON.stringify(e)}catch{return "{}"}},j=(e,t,r)=>{let n=e.querySelector(`meta[name="${t}"]`);n||(n=e.createElement("meta"),n.setAttribute("name",t),e.head.appendChild(n)),n.setAttribute("content",r);},G=(e,t)=>{e.querySelectorAll(`meta[name="${t}"]`).forEach(r=>r.remove());},B=({doc:e=typeof document>"u"?null:document,snapshot:t,schemaType:r="WebSite"})=>{if(!e)return {uninstall:()=>{}};j(e,`${b}version`,t.version),j(e,`${b}updated-at`,t.updatedAt??new Date().toISOString()),t.siteMap?.navigation?.flow&&j(e,`${b}flow`,t.siteMap.navigation.flow),j(e,`${b}workflows`,Object.keys(t.workflows).join(","));let n=e.getElementById(de);return n||(n=e.createElement("script"),n.type="application/ld+json",n.id=de,e.head.appendChild(n)),n.textContent=Vt({"@context":"https://schema.org","@type":r,name:"Agentronics Site Memory",agentronics:t}),{uninstall:()=>{G(e,`${b}version`),G(e,`${b}updated-at`),G(e,`${b}flow`),G(e,`${b}workflows`),e.getElementById(de)?.remove();}}};var tt="agentronics-memory-overlay",qt=e=>`
|
|
2
2
|
position: fixed;
|
|
3
3
|
bottom: 16px;
|
|
4
4
|
right: 16px;
|
|
@@ -12,6 +12,6 @@ z-index: 2147483647;
|
|
|
12
12
|
opacity: ${e?"0":"1"};
|
|
13
13
|
pointer-events: ${e?"none":"auto"};
|
|
14
14
|
box-shadow: 0 12px 32px rgba(15, 23, 42, 0.35);
|
|
15
|
-
`,Ze=e=>{let t=e.siteMap?.pages?.length??0,r=Object.keys(e.workflows).length,n=Object.keys(e.uiGuidance).length;return `Agentronics site memory \xB7 pages:${t} \xB7 workflows:${r} \xB7 ui-hints:${n}`},N=({doc:e=typeof document>"u"?null:document,snapshot:t,hidden:r=false})=>{if(!e)return {uninstall:()=>{},refresh:()=>{}};let n=e.getElementById(Qe);return n||(n=e.createElement("div"),n.id=Qe,n.setAttribute("role","note"),n.setAttribute("aria-label","Agentronics site memory summary"),n.setAttribute("data-agent-context","overlay"),e.body.appendChild(n)),n.setAttribute("style",Ft(r)),n.textContent=Ze(t),{uninstall:()=>{n?.remove();},refresh:o=>{n&&(n.textContent=Ze(o));}}};var ye="/.well-known/agent-context.json",U=async({origin:e,fetcher:t=fetch,signal:r}={})=>{let n=(e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:"")+ye;if(!n.startsWith("http"))return null;let o={headers:{accept:"application/json"}};r!==void 0&&(o.signal=r);let i=await t(n,o);if(!i.ok){if(i.status===404)return null;throw new Error(`well-known agent-context fetch failed with status ${i.status}.`)}let a=await i.json();return protocol.SiteMemory.parse(a)},tt=({snapshot:e})=>JSON.stringify(protocol.SiteMemory.parse(e));var me=({evaluate:e,setPolicies:t,listPolicies:r,onTrace:n})=>{let o=new Map,i=new Set,a=s=>{if(!s.authz||!t||!r)return;let l={id:`tool:${s.name}`,tool:s.name,...s.authz,rateLimit:s.rateLimit??s.authz.rateLimit};t([...r().filter(p=>p.id!==l.id),l]);};return {register(s){return o.set(s.name,s),i.delete(s.name),a(s),n?.({type:"tool.registered",tool:s.name,metadata:{version:s.version??null,group:s.group??null,stage:s.stage??null}}),()=>{o.delete(s.name),i.delete(s.name);}},unregister(s){o.delete(s),i.delete(s);},enable(s){!o.has(s)||!i.has(s)||(i.delete(s),n?.({type:"tool.surfaced",tool:s,metadata:{state:"enabled"}}));},disable(s){!o.has(s)||i.has(s)||(i.add(s),n?.({type:"tool.surfaced",tool:s,metadata:{state:"disabled"}}));},isEnabled:s=>o.has(s)&&!i.has(s),list({includeDisabled:s=false}={}){let l=[...o.values()];return s?l:l.filter(p=>!i.has(p.name))},get:s=>o.get(s),async execute(s,l,p=null){let u=o.get(s);if(!u)throw new Error(`Tool "${s}" is not registered.`);if(i.has(s)){let v={decision:"deny",ruleId:`tool:${s}`,reason:"Tool is disabled."};throw n?.({type:"tool.executed",tool:s,agent:p,policy:v,outcome:"blocked"}),new Error(v.reason)}let g=await e(s,{identity:p});if(g.decision==="deny")throw n?.({type:"tool.executed",tool:s,agent:p,policy:g,outcome:"blocked"}),new Error(g.reason);let m=await u.execute(l,{identity:p});return n?.({type:"tool.executed",tool:s,agent:p,policy:g,outcome:"success"}),m}}};var ge=(e,t={})=>{let r=new Map;for(let a of e.stages)r.set(a.name,a);if(!r.has(e.initial))throw new Error(`Initial stage "${e.initial}" is not declared in progression stages.`);let n=e.initial,o=()=>{let a=r.get(n);return a?.enables?[n,...a.enables]:[n]},i=(a,s)=>{let l=n;if(!r.has(a))throw new Error(`Cannot transition to unknown stage "${a}".`);return a===n?{changed:false,from:l,to:a}:(n=a,t.onTrace?.({type:"tool.progressed",metadata:{from:l,to:a,trigger:s}}),{changed:true,from:l,to:a})};return {current:()=>n,enabledStages:()=>o(),notify(a){let l=r.get(n)?.transitions?.find(p=>p.on===a);return l?i(l.to,a):{changed:false,from:n,to:n}},set(a){return i(a,"manual")},reset(){let a=n;n=e.initial,a!==n&&t.onTrace?.({type:"tool.progressed",metadata:{from:a,to:n,trigger:"reset"}});},snapshot:()=>({current:n,enabled:o()})}};var Ht=(e,t)=>{let r=e.authz?.minTrust;return r?t?protocol.TRUST_RANK[t.trust]<protocol.TRUST_RANK[r]?{ok:false,reason:`trust-too-low:${t.trust}<${r}`}:{ok:true,reason:"trust-ok"}:{ok:false,reason:`requires-trust:${r}`}:{ok:true,reason:"no-trust-floor"}},zt=(e,t)=>{let r=e.authz?.allowedClasses??[];return r.length===0?{ok:true,reason:"no-class-restriction"}:t?r.includes(t.class)?{ok:true,reason:"class-ok"}:{ok:false,reason:`class-not-allowed:${t.class}`}:{ok:false,reason:`requires-class:${r.join("|")}`}},Jt=(e,t)=>e.stage?t.enabledStages&&t.enabledStages.includes(e.stage)?{ok:true,reason:`stage-enabled:${e.stage}`}:t.stage===e.stage?{ok:true,reason:`stage-active:${e.stage}`}:{ok:false,reason:`stage-locked:${e.stage}`}:{ok:true,reason:"no-stage"},fe=(e,t)=>{let r=Ht(e,t.identity);if(!r.ok)return {tool:e,visible:false,reason:r.reason};let n=zt(e,t.identity);if(!n.ok)return {tool:e,visible:false,reason:n.reason};let o=Jt(e,t);return o.ok?e.authz?.decision==="deny"?{tool:e,visible:false,reason:"authz-deny"}:{tool:e,visible:true,reason:"visible"}:{tool:e,visible:false,reason:o.reason}},he=(e,t)=>e.filter(r=>fe(r,t).visible),ve=(e,t)=>e.map(r=>fe(r,t));var xe="default",we=e=>{let t=new Map;for(let r of e){let n=r.group??xe,o=t.get(n)??[];o.push(r),t.set(n,o);}return [...t.entries()].sort(([r],[n])=>r.localeCompare(n)).map(([r,n])=>({name:r,tools:n}))},Vt=e=>[...new Set(e.map(t=>t.group??xe))].sort();var Se=e=>e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Se).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Se(e[r])}`).join(",")}}`,nt=e=>{let t={name:e.name,version:e.version??null,group:e.group??null,description:e.description??null,inputSchema:e.inputSchema??null,authz:e.authz??null,rateLimit:e.rateLimit??null},r=Se(t).length;return {name:e.name,characters:r,tokens:Math.ceil(r/4)}},Te=e=>{let t=e.map(nt);return {total:t.reduce((n,o)=>n+o.tokens,0),perTool:t}};var ot=e=>e.provider?e.provider:(e.doc?.defaultView??(typeof globalThis<"u"?globalThis:null))?.navigator?.modelContext??null,qt=(e,t)=>{let r={name:e.name,invoke:n=>t(e,n)};return e.description!==void 0&&(r.description=e.description),e.inputSchema!==void 0&&(r.inputSchema=e.inputSchema),r},be=(e={})=>{let t=e.invoke??(async(n,o)=>n.execute(o,{identity:null})),r=null;return {publish(n){let o=ot(e);return o?(r?.revoke(),r=o.provideContext({tools:n.map(i=>qt(i,t))}),{revoked:true}):{revoked:false}},revoke(){r?.revoke(),r=null;},available:()=>!!ot(e)}};var _=(e=500)=>{let t=[];return {add(r){t.push(r),t.length>e&&t.splice(0,t.length-e);},list(){return [...t]},clear(){t.length=0;}}};var it=(e,t)=>e===void 0?t:Math.max(0,Math.min(1,e)),Ae=(e={})=>{let t=it(e.traceRate,1),r=it(e.errorRate,1),n=e.random??Math.random;return {shouldKeep(o){let i=o.outcome==="error"?r:t;return n()<i}}};var Xt="[REDACTED]",Yt=e=>{if(e!==void 0)return JSON.parse(JSON.stringify(e))},ke=(e,t)=>{if(t.length===0||typeof e!="object"||e===null)return;let[r,...n]=t;if(!r)return;if(Array.isArray(e)){for(let i of e)ke(i,t);return}let o=e;if(r in o){if(n.length===0){o[r]=Xt;return}ke(o[r],n);}},Me=(e,t=[])=>{if(t.length===0)return e;let r=Yt(e);for(let n of t)ke(r,n.split(".").filter(Boolean));return r},Ie=["metadata.password","metadata.token","metadata.authorization","metadata.cookie"];var st=e=>{let t=globalThis.crypto;return t&&"randomUUID"in t?`${e}_${t.randomUUID()}`:`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`},K=({siteId:e,bufferSize:t,sessionId:r=st("ses"),scrubPaths:n=Ie,exporters:o=[],onExporterError:i,...a})=>{let s=_(t),l=Ae(a);return {sessionId:r,async emit(p){let u=protocol.TraceEvent.parse(Me({id:st("trc"),siteId:e,sessionId:r,occurredAt:new Date().toISOString(),outcome:p.outcome??"success",metadata:{},...p},n));return l.shouldKeep(u)?(s.add(u),await Promise.all(o.map(async g=>{try{await g.export([u]);}catch(m){i?.(m,g,u);}})),u):null},list:()=>s.list(),clear:()=>s.clear()}};var F=()=>({name:"console",export(e){for(let t of e)console.info("[agentronics:trace]",t.type,t);}});var H=({gatewayUrl:e,publishableKey:t,fetcher:r=fetch})=>({name:"gateway",async export(n){let o={publishableKey:t,events:n};await r(`${e.replace(/\/$/,"")}/v1/traces`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(o)});}});var Zt=e=>new Promise(t=>setTimeout(t,e)),z=({url:e,fetcher:t=fetch,maxRetries:r=2,queueLimit:n=500})=>({name:"webhook",async export(o){let a=[...er(e),...o].slice(-n),s=0;for(;;){let l=await t(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({events:a})});if(l.ok){at(e,[]);return}if(s>=r)throw at(e,a),new Error(`Webhook exporter failed with status ${l.status}.`);s+=1,await Zt(100*s);}}}),Pe=e=>`agtx:webhook:${e}`,er=e=>{if(typeof window>"u"||!window.localStorage)return [];try{let t=window.localStorage.getItem(Pe(e));return t?JSON.parse(t):[]}catch{return []}},at=(e,t)=>{if(!(typeof window>"u"||!window.localStorage))try{if(t.length===0){window.localStorage.removeItem(Pe(e));return}window.localStorage.setItem(Pe(e),JSON.stringify(t));}catch{}};var lt="https://gateway.agentronics.dev",nr=e=>{if(e===void 0)return lt;if(e===lt)return e;let t;try{t=new URL(e);}catch{throw new Error(`Agentronics SDK: \`gatewayUrl\` is not a valid URL: ${e}`)}if(t.hostname==="localhost"||t.hostname==="127.0.0.1")return e;throw new Error(`Agentronics SDK does not support custom gateway URLs. Omit \`gatewayUrl\` to use the canonical https://gateway.agentronics.dev. The only accepted override is a localhost / 127.0.0.1 URL for local development. Got: ${e}`)},pt=e=>{let{publishableKey:t,siteId:r="default",debug:n=false,policies:o=[],trace:i={}}=e,a=nr(e.gatewayUrl),s=protocol.classifyApiKey(t);if(s==="secret")throw new protocol.AgentronicsError("wrong_key_kind","A secret key was passed to Agentronics.init(). Browser code must use a publishable key (agtx_pk_*).");if(s!=="publishable")throw new protocol.AgentronicsError("invalid_api_key",`Agentronics.init() expected a key starting with "${protocol.PUBLISHABLE_KEY_PREFIX}".`);let l=i.enabled??true,p=[...n?[F()]:[],...i.gateway?[H({gatewayUrl:a,publishableKey:t})]:[],...i.webhookUrl?[z({url:i.webhookUrl})]:[],...i.exporters??[]],u={siteId:r,exporters:l?p:[],onExporterError:(c,y)=>{n&&console.warn(`[agentronics] trace exporter "${y.name}" failed`,c);}};i.bufferSize!==void 0&&(u.bufferSize=i.bufferSize),i.traceRate!==void 0&&(u.traceRate=i.traceRate),i.errorRate!==void 0&&(u.errorRate=i.errorRate),i.scrubPaths!==void 0&&(u.scrubPaths=i.scrubPaths);let g=K(u),m=c=>{l&&g.emit(c);},v=Q(),w={onTrace:m};e.auth!==void 0&&(w.context=e.auth);let d=ee(w),f=te(),h=ne(o),A=oe({gatewayUrl:a,siteId:r,publishableKey:t}),k=ce({onTrace:m}),M={onTrace:m};e.siteMemory!==void 0&&(M.initial=e.siteMemory);let T=pe(M),I=ue({gatewayUrl:a,siteId:r,publishableKey:t}),J=async c=>{let y=Date.now(),x=await W(c),S=v.preferOver(x);return l&&await g.emit({type:S?"agent.detected":"agent.missed",agent:S,durationMs:Date.now()-y,metadata:{detectedClass:x?.class??null,presented:v.snapshot()!==null}}),f.set(S,"detect"),S},Re=async(c,y={})=>{let x=Date.now(),S=y.identity!==void 0?y.identity:await J(),q=h.evaluate({tool:c,identity:S});return l&&await g.emit({type:"authz.evaluated",tool:c,agent:S,policy:q,outcome:q.decision==="deny"?"blocked":"success",durationMs:Date.now()-x}),q},P=me({evaluate:Re,setPolicies:c=>h.set(c),listPolicies:()=>h.list(),onTrace:m});for(let c of e.tools??[])P.register(c);let R=e.progression?ge(e.progression,{onTrace:m}):null,Ee=c=>{let y={identity:c};return R&&(y.stage=R.current(),y.enabledStages=R.enabledStages()),y},O=c=>he(P.list(),Ee(c)),Ce=c=>{if(!R)return;R.notify(c).changed&&V.publish(O(null));},V=be({invoke:async(c,y)=>{let x=await P.execute(c.name,y,null);return Ce(c.name),x}});return Object.freeze({publishableKey:t,siteId:r,gatewayUrl:a,debug:n,memory:k,siteMemory:T,memoryCache:I,tracer:g,auth:d,agentContext:f,authz:h,policyCache:A,tools:P,progression:R,webmcp:V,detect:J,authenticate:async c=>{let y=await d.authenticate(c);return f.set(y,"authenticate"),y},presentIdentity:c=>{let y=v.present(c);return m({type:"auth.identity_presented",agent:y.identity,metadata:{vendor:y.identity.vendor,class:y.identity.class}}),f.set(y.identity,"declare"),y},clearIdentity:()=>{v.clear(),m({type:"auth.identity_cleared"}),f.set(null,"cleared");},presentedIdentity:()=>v.snapshot(),setPolicies:c=>{h.set(c),m({type:"authz.policies_set",metadata:{count:c.length}});},listPolicies:()=>h.list(),syncPolicies:async()=>{let c=await A.sync();return h.set(c.policies),m({type:"authz.policies_set",metadata:{count:c.policies.length,synced:true}}),c.policies},syncSiteMemory:async()=>{let c=await I.sync();return c.memory&&(T.replace(c.memory),m({type:"memory.updated",metadata:{kind:"site",operation:"sync",etag:c.etag}})),c.memory},provideSiteMemory:c=>T.provide(c),provideForPage:c=>{T.provideForPage(c);},installMemoryDelivery:({metaTags:c=true,overlay:y=false}={})=>{let x=[];return c&&x.push(B({snapshot:T.snapshot()})),y&&x.push(N({snapshot:T.snapshot()})),{uninstall:()=>{x.forEach(S=>S.uninstall());}}},fetchWellKnown:async c=>{let y={};c!==void 0&&(y.origin=c);let x=await U(y);return x&&(T.replace(x),m({type:"memory.updated",metadata:{kind:"site",operation:"wellKnown",origin:c??null}})),x},installDomEnforcer:()=>se({policyEngine:h,getIdentity:()=>J({webmcp:{pollMs:0}})}),registerTool:c=>P.register(c),surfaceTools:({identity:c=null}={})=>O(c),explainSurfacing:({identity:c=null}={})=>ve(P.list(),Ee(c)),groupedTools:({identity:c=null}={})=>we(O(c)),estimateTokens:({identity:c=null}={})=>Te(O(c)),publishToWebMcp:({identity:c=null}={})=>{let y=O(c),x=V.publish(y);return y.forEach(S=>{m({type:"tool.surfaced",tool:S.name,metadata:{state:"published",trust:c?.trust??null,group:S.group??null}});}),{revoked:x.revoked,surfaced:y.length}},notifyToolInvoked:c=>Ce(c),evaluate:Re,traces:()=>g.list(),clearTraces:()=>g.clear(),async ping(){try{let c=await fetch(`${a.replace(/\/$/,"")}/v1/health`,{method:"GET",headers:{authorization:`Bearer ${t}`}});if(!c.ok)return {ok:!1,status:c.status,error:`gateway returned ${c.status}`};let y=await c.json().catch(()=>null)??{};return {ok:!0,status:c.status,body:y}}catch(c){return {ok:false,status:0,error:c instanceof Error?c.message:String(c)}}}})};var Do={init:pt,declareAgent:Y,detectAgent:W},Lo="0.1.0";
|
|
16
|
-
exports.Agentronics=
|
|
15
|
+
`,rt=e=>{let t=e.siteMap?.pages?.length??0,r=Object.keys(e.workflows).length,n=Object.keys(e.uiGuidance).length;return `Agentronics site memory \xB7 pages:${t} \xB7 workflows:${r} \xB7 ui-hints:${n}`},N=({doc:e=typeof document>"u"?null:document,snapshot:t,hidden:r=false})=>{if(!e)return {uninstall:()=>{},refresh:()=>{}};let n=e.getElementById(tt);return n||(n=e.createElement("div"),n.id=tt,n.setAttribute("role","note"),n.setAttribute("aria-label","Agentronics site memory summary"),n.setAttribute("data-agent-context","overlay"),e.body.appendChild(n)),n.setAttribute("style",qt(r)),n.textContent=rt(t),{uninstall:()=>{n?.remove();},refresh:o=>{n&&(n.textContent=rt(o));}}};var me="/.well-known/agent-context.json",_=async({origin:e,fetcher:t=fetch,signal:r}={})=>{let n=(e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:"")+me;if(!n.startsWith("http"))return null;let o={headers:{accept:"application/json"}};r!==void 0&&(o.signal=r);let i=await t(n,o);if(!i.ok){if(i.status===404)return null;throw new Error(`well-known agent-context fetch failed with status ${i.status}.`)}let s=await i.json();return protocol.SiteMemory.parse(s)},ot=({snapshot:e})=>JSON.stringify(protocol.SiteMemory.parse(e));var ye=({evaluate:e,setPolicies:t,listPolicies:r,onTrace:n})=>{let o=new Map,i=new Set,s=a=>{if(!a.authz||!t||!r)return;let l={id:`tool:${a.name}`,tool:a.name,...a.authz,rateLimit:a.rateLimit??a.authz.rateLimit};t([...r().filter(p=>p.id!==l.id),l]);};return {register(a){return o.set(a.name,a),i.delete(a.name),s(a),n?.({type:"tool.registered",tool:a.name,metadata:{version:a.version??null,group:a.group??null,stage:a.stage??null}}),()=>{o.delete(a.name),i.delete(a.name);}},unregister(a){o.delete(a),i.delete(a);},enable(a){!o.has(a)||!i.has(a)||(i.delete(a),n?.({type:"tool.surfaced",tool:a,metadata:{state:"enabled"}}));},disable(a){!o.has(a)||i.has(a)||(i.add(a),n?.({type:"tool.surfaced",tool:a,metadata:{state:"disabled"}}));},isEnabled:a=>o.has(a)&&!i.has(a),list({includeDisabled:a=false}={}){let l=[...o.values()];return a?l:l.filter(p=>!i.has(p.name))},get:a=>o.get(a),async execute(a,l,p=null){let u=o.get(a);if(!u)throw new Error(`Tool "${a}" is not registered.`);if(i.has(a)){let v={decision:"deny",ruleId:`tool:${a}`,reason:"Tool is disabled."};throw n?.({type:"tool.executed",tool:a,agent:p,policy:v,outcome:"blocked"}),new Error(v.reason)}let m=await e(a,{identity:p});if(m.decision==="deny")throw n?.({type:"tool.executed",tool:a,agent:p,policy:m,outcome:"blocked"}),new Error(m.reason);let d=await u.execute(l,{identity:p});return n?.({type:"tool.executed",tool:a,agent:p,policy:m,outcome:"success"}),d}}};var ge=(e,t={})=>{let r=new Map;for(let s of e.stages)r.set(s.name,s);if(!r.has(e.initial))throw new Error(`Initial stage "${e.initial}" is not declared in progression stages.`);let n=e.initial,o=()=>{let s=r.get(n);return s?.enables?[n,...s.enables]:[n]},i=(s,a)=>{let l=n;if(!r.has(s))throw new Error(`Cannot transition to unknown stage "${s}".`);return s===n?{changed:false,from:l,to:s}:(n=s,t.onTrace?.({type:"tool.progressed",metadata:{from:l,to:s,trigger:a}}),{changed:true,from:l,to:s})};return {current:()=>n,enabledStages:()=>o(),notify(s){let l=r.get(n)?.transitions?.find(p=>p.on===s);return l?i(l.to,s):{changed:false,from:n,to:n}},set(s){return i(s,"manual")},reset(){let s=n;n=e.initial,s!==n&&t.onTrace?.({type:"tool.progressed",metadata:{from:s,to:n,trigger:"reset"}});},snapshot:()=>({current:n,enabled:o()})}};var Xt=(e,t)=>{let r=e.authz?.minTrust;return r?t?protocol.TRUST_RANK[t.trust]<protocol.TRUST_RANK[r]?{ok:false,reason:`trust-too-low:${t.trust}<${r}`}:{ok:true,reason:"trust-ok"}:{ok:false,reason:`requires-trust:${r}`}:{ok:true,reason:"no-trust-floor"}},Yt=(e,t)=>{let r=e.authz?.allowedClasses??[];return r.length===0?{ok:true,reason:"no-class-restriction"}:t?r.includes(t.class)?{ok:true,reason:"class-ok"}:{ok:false,reason:`class-not-allowed:${t.class}`}:{ok:false,reason:`requires-class:${r.join("|")}`}},Qt=(e,t)=>e.stage?t.enabledStages&&t.enabledStages.includes(e.stage)?{ok:true,reason:`stage-enabled:${e.stage}`}:t.stage===e.stage?{ok:true,reason:`stage-active:${e.stage}`}:{ok:false,reason:`stage-locked:${e.stage}`}:{ok:true,reason:"no-stage"},fe=(e,t)=>{let r=Xt(e,t.identity);if(!r.ok)return {tool:e,visible:false,reason:r.reason};let n=Yt(e,t.identity);if(!n.ok)return {tool:e,visible:false,reason:n.reason};let o=Qt(e,t);return o.ok?e.authz?.decision==="deny"?{tool:e,visible:false,reason:"authz-deny"}:{tool:e,visible:true,reason:"visible"}:{tool:e,visible:false,reason:o.reason}},he=(e,t)=>e.filter(r=>fe(r,t).visible),ve=(e,t)=>e.map(r=>fe(r,t));var xe="default",we=e=>{let t=new Map;for(let r of e){let n=r.group??xe,o=t.get(n)??[];o.push(r),t.set(n,o);}return [...t.entries()].sort(([r],[n])=>r.localeCompare(n)).map(([r,n])=>({name:r,tools:n}))},Zt=e=>[...new Set(e.map(t=>t.group??xe))].sort();var Te=e=>e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Te).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Te(e[r])}`).join(",")}}`,st=e=>{let t={name:e.name,version:e.version??null,group:e.group??null,description:e.description??null,inputSchema:e.inputSchema??null,authz:e.authz??null,rateLimit:e.rateLimit??null},r=Te(t).length;return {name:e.name,characters:r,tokens:Math.ceil(r/4)}},Se=e=>{let t=e.map(st);return {total:t.reduce((n,o)=>n+o.tokens,0),perTool:t}};var at=e=>e.provider?e.provider:(e.doc?.defaultView??(typeof globalThis<"u"?globalThis:null))?.navigator?.modelContext??null,er=(e,t)=>{let r={name:e.name,invoke:n=>t(e,n)};return e.description!==void 0&&(r.description=e.description),e.inputSchema!==void 0&&(r.inputSchema=e.inputSchema),r},be=(e={})=>{let t=e.invoke??(async(n,o)=>n.execute(o,{identity:null})),r=null;return {publish(n){let o=at(e);return o?(r?.revoke(),r=o.provideContext({tools:n.map(i=>er(i,t))}),{revoked:true}):{revoked:false}},revoke(){r?.revoke(),r=null;},available:()=>!!at(e)}};var U=(e=500)=>{let t=[];return {add(r){t.push(r),t.length>e&&t.splice(0,t.length-e);},list(){return [...t]},clear(){t.length=0;}}};var ct=(e,t)=>e===void 0?t:Math.max(0,Math.min(1,e)),Ae=(e={})=>{let t=ct(e.traceRate,1),r=ct(e.errorRate,1),n=e.random??Math.random;return {shouldKeep(o){let i=o.outcome==="error"?r:t;return n()<i}}};var tr="[REDACTED]",rr=e=>{if(e!==void 0)return JSON.parse(JSON.stringify(e))},ke=(e,t)=>{if(t.length===0||typeof e!="object"||e===null)return;let[r,...n]=t;if(!r)return;if(Array.isArray(e)){for(let i of e)ke(i,t);return}let o=e;if(r in o){if(n.length===0){o[r]=tr;return}ke(o[r],n);}},Me=(e,t=[])=>{if(t.length===0)return e;let r=rr(e);for(let n of t)ke(r,n.split(".").filter(Boolean));return r},Ie=["metadata.password","metadata.token","metadata.authorization","metadata.cookie"];var lt=e=>{let t=globalThis.crypto;return t&&"randomUUID"in t?`${e}_${t.randomUUID()}`:`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`},H=({siteId:e,bufferSize:t,sessionId:r=lt("ses"),scrubPaths:n=Ie,exporters:o=[],onExporterError:i,...s})=>{let a=U(t),l=Ae(s);return {sessionId:r,async emit(p){let u=protocol.TraceEvent.parse(Me({id:lt("trc"),siteId:e,sessionId:r,occurredAt:new Date().toISOString(),outcome:p.outcome??"success",metadata:{},...p},n));return l.shouldKeep(u)?(a.add(u),await Promise.all(o.map(async m=>{try{await m.export([u]);}catch(d){i?.(d,m,u);}})),u):null},list:()=>a.list(),clear:()=>a.clear()}};var F=()=>({name:"console",export(e){for(let t of e)console.info("[agentronics:trace]",t.type,t);}});var K=({gatewayUrl:e,publishableKey:t,fetcher:r=fetch})=>({name:"gateway",async export(n){let o={publishableKey:t,events:n};await r(`${e.replace(/\/$/,"")}/v1/traces`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(o)});}});var or=e=>new Promise(t=>setTimeout(t,e)),z=({url:e,fetcher:t=fetch,maxRetries:r=2,queueLimit:n=500})=>({name:"webhook",async export(o){let s=[...ir(e),...o].slice(-n),a=0;for(;;){let l=await t(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({events:s})});if(l.ok){ut(e,[]);return}if(a>=r)throw ut(e,s),new Error(`Webhook exporter failed with status ${l.status}.`);a+=1,await or(100*a);}}}),Pe=e=>`agtx:webhook:${e}`,ir=e=>{if(typeof window>"u"||!window.localStorage)return [];try{let t=window.localStorage.getItem(Pe(e));return t?JSON.parse(t):[]}catch{return []}},ut=(e,t)=>{if(!(typeof window>"u"||!window.localStorage))try{if(t.length===0){window.localStorage.removeItem(Pe(e));return}window.localStorage.setItem(Pe(e),JSON.stringify(t));}catch{}};var dt="https://gateway.agentronics.dev",cr=e=>{if(e===void 0)return dt;if(e===dt)return e;let t;try{t=new URL(e);}catch{throw new Error(`Agentronics SDK: \`gatewayUrl\` is not a valid URL: ${e}`)}if(t.hostname==="localhost"||t.hostname==="127.0.0.1")return e;throw new Error(`Agentronics SDK does not support custom gateway URLs. Omit \`gatewayUrl\` to use the canonical https://gateway.agentronics.dev. The only accepted override is a localhost / 127.0.0.1 URL for local development. Got: ${e}`)},mt=e=>{let{publishableKey:t,siteId:r="default",debug:n=false,policies:o=[],trace:i={}}=e,s=cr(e.gatewayUrl),a=protocol.classifyApiKey(t);if(a==="secret")throw new protocol.AgentronicsError("wrong_key_kind","A secret key was passed to Agentronics.init(). Browser code must use a publishable key (agtx_pk_*).");if(a!=="publishable")throw new protocol.AgentronicsError("invalid_api_key",`Agentronics.init() expected a key starting with "${protocol.PUBLISHABLE_KEY_PREFIX}".`);let l=i.enabled??true,p=[...n?[F()]:[],...i.gateway?[K({gatewayUrl:s,publishableKey:t})]:[],...i.webhookUrl?[z({url:i.webhookUrl})]:[],...i.exporters??[]],u={siteId:r,exporters:l?p:[],onExporterError:(c,g)=>{n&&console.warn(`[agentronics] trace exporter "${g.name}" failed`,c);}};i.bufferSize!==void 0&&(u.bufferSize=i.bufferSize),i.traceRate!==void 0&&(u.traceRate=i.traceRate),i.errorRate!==void 0&&(u.errorRate=i.errorRate),i.scrubPaths!==void 0&&(u.scrubPaths=i.scrubPaths);let m=H(u),d=c=>{l&&m.emit(c);},v=Q(),w={onTrace:d};e.auth!==void 0&&(w.context=e.auth);let y=ee(w),f=te(),h=ne(o),A=oe({gatewayUrl:s,siteId:r,publishableKey:t}),k=ce({onTrace:d}),M={onTrace:d};e.siteMemory!==void 0&&(M.initial=e.siteMemory);let S=ue(M),I=pe({gatewayUrl:s,siteId:r,publishableKey:t}),J=async c=>{let g=Date.now(),x=await W(c),T=v.preferOver(x);return l&&await m.emit({type:T?"agent.detected":"agent.missed",agent:T,durationMs:Date.now()-g,metadata:{detectedClass:x?.class??null,presented:v.snapshot()!==null}}),f.set(T,"detect"),T},Re=async(c,g={})=>{let x=Date.now(),T=g.identity!==void 0?g.identity:await J(),q=h.evaluate({tool:c,identity:T});return l&&await m.emit({type:"authz.evaluated",tool:c,agent:T,policy:q,outcome:q.decision==="deny"?"blocked":"success",durationMs:Date.now()-x}),q},P=ye({evaluate:Re,setPolicies:c=>h.set(c),listPolicies:()=>h.list(),onTrace:d});for(let c of e.tools??[])P.register(c);let R=e.progression?ge(e.progression,{onTrace:d}):null,Ee=c=>{let g={identity:c};return R&&(g.stage=R.current(),g.enabledStages=R.enabledStages()),g},O=c=>he(P.list(),Ee(c)),Ce=c=>{if(!R)return;R.notify(c).changed&&V.publish(O(null));},V=be({invoke:async(c,g)=>{let x=await P.execute(c.name,g,null);return Ce(c.name),x}});return Object.freeze({publishableKey:t,siteId:r,gatewayUrl:s,debug:n,memory:k,siteMemory:S,memoryCache:I,tracer:m,auth:y,agentContext:f,authz:h,policyCache:A,tools:P,progression:R,webmcp:V,detect:J,authenticate:async c=>{let g=await y.authenticate(c);return f.set(g,"authenticate"),g},presentIdentity:c=>{let g=v.present(c);return d({type:"auth.identity_presented",agent:g.identity,metadata:{vendor:g.identity.vendor,class:g.identity.class}}),f.set(g.identity,"declare"),g},clearIdentity:()=>{v.clear(),d({type:"auth.identity_cleared"}),f.set(null,"cleared");},presentedIdentity:()=>v.snapshot(),setPolicies:c=>{h.set(c),d({type:"authz.policies_set",metadata:{count:c.length}});},listPolicies:()=>h.list(),syncPolicies:async()=>{let c=await A.sync();return h.set(c.policies),d({type:"authz.policies_set",metadata:{count:c.policies.length,synced:true}}),c.policies},syncSiteMemory:async()=>{let c=await I.sync();return c.memory&&(S.replace(c.memory),d({type:"memory.updated",metadata:{kind:"site",operation:"sync",etag:c.etag}})),c.memory},provideSiteMemory:c=>S.provide(c),provideForPage:c=>{S.provideForPage(c);},installMemoryDelivery:({metaTags:c=true,overlay:g=false}={})=>{let x=[];return c&&x.push(B({snapshot:S.snapshot()})),g&&x.push(N({snapshot:S.snapshot()})),{uninstall:()=>{x.forEach(T=>T.uninstall());}}},fetchWellKnown:async c=>{let g={};c!==void 0&&(g.origin=c);let x=await _(g);return x&&(S.replace(x),d({type:"memory.updated",metadata:{kind:"site",operation:"wellKnown",origin:c??null}})),x},installDomEnforcer:()=>se({policyEngine:h,getIdentity:()=>J({webmcp:{pollMs:0}})}),registerTool:c=>P.register(c),surfaceTools:({identity:c=null}={})=>O(c),explainSurfacing:({identity:c=null}={})=>ve(P.list(),Ee(c)),groupedTools:({identity:c=null}={})=>we(O(c)),estimateTokens:({identity:c=null}={})=>Se(O(c)),publishToWebMcp:({identity:c=null}={})=>{let g=O(c),x=V.publish(g);return g.forEach(T=>{d({type:"tool.surfaced",tool:T.name,metadata:{state:"published",trust:c?.trust??null,group:T.group??null}});}),{revoked:x.revoked,surfaced:g.length}},notifyToolInvoked:c=>Ce(c),evaluate:Re,traces:()=>m.list(),clearTraces:()=>m.clear(),async ping(){try{let c=await fetch(`${s.replace(/\/$/,"")}/v1/health`,{method:"GET",headers:{authorization:`Bearer ${t}`}});if(!c.ok)return {ok:!1,status:c.status,error:`gateway returned ${c.status}`};let g=await c.json().catch(()=>null)??{};return {ok:!0,status:c.status,body:g}}catch(c){return {ok:false,status:0,error:c instanceof Error?c.message:String(c)}}}})};var Fo={init:mt,declareAgent:Y,detectAgent:W},Ko="0.1.0";
|
|
16
|
+
exports.Agentronics=Fo;exports.DEFAULT_GROUP=xe;exports.VERSION=Ko;exports.WELL_KNOWN_PATH=me;exports.bundledDetectors=X;exports.createAgentContextStore=te;exports.createAuthEngine=ee;exports.createConsoleExporter=F;exports.createDetectorRegistry=L;exports.createGatewayExporter=K;exports.createIdentityStore=Q;exports.createMemoryCache=pe;exports.createMemoryStore=ce;exports.createPolicyCache=oe;exports.createPolicyEngine=ne;exports.createProgressionStore=ge;exports.createRateLimiter=re;exports.createSignatureLoader=Oe;exports.createSiteMemoryStore=ue;exports.createToolRegistry=ye;exports.createTraceBuffer=U;exports.createTracer=H;exports.createWebMcpAdapter=be;exports.createWebMcpContextTool=et;exports.createWebhookExporter=z;exports.decideSurfacing=fe;exports.declareAgent=Y;exports.deriveTrustLevel=Rt;exports.detectAgent=W;exports.detectDom=C;exports.detectWebMcp=E;exports.estimateBudget=Se;exports.estimateToolTokens=st;exports.explainSurfacing=ve;exports.fetchWellKnownContext=_;exports.groupTools=we;exports.highestTrust=Z;exports.init=mt;exports.installDomEnforcer=se;exports.installMemoryOverlay=N;exports.installMetaTags=B;exports.listGroupNames=Zt;exports.serializeWellKnownContext=ot;exports.showDenyOverlay=ie;exports.surfaceTools=he;//# sourceMappingURL=index.cjs.map
|
|
17
17
|
//# sourceMappingURL=index.cjs.map
|