@agentronics/sdk 0.5.0 → 0.7.0
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/README.md +96 -76
- package/dist/chunk-3WPDIMJP.js +18 -0
- package/dist/chunk-3WPDIMJP.js.map +1 -0
- package/dist/chunk-6QQS26AP.js +1200 -0
- package/dist/chunk-6QQS26AP.js.map +1 -0
- package/dist/chunk-BPDWJCPY.js +2 -0
- package/dist/chunk-BPDWJCPY.js.map +1 -0
- package/dist/index.cjs +8 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +51 -12
- package/dist/index.d.ts +51 -12
- package/dist/index.global.js +8 -7
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{init-only-7f8_LQAI.d.ts → init-only-C80qhujz.d.ts} +227 -30
- package/dist/{init-only-Cwll8MGz.d.cts → init-only-s9E9bVC0.d.cts} +227 -30
- package/dist/init-only.cjs +8 -7
- package/dist/init-only.cjs.map +1 -1
- package/dist/init-only.d.cts +2 -2
- package/dist/init-only.d.ts +2 -2
- package/dist/init-only.global.js +8 -7
- package/dist/init-only.global.js.map +1 -1
- package/dist/init-only.js +1 -1
- package/dist/lite.cjs +1 -1
- package/dist/lite.cjs.map +1 -1
- package/dist/lite.d.cts +2 -2
- package/dist/lite.d.ts +2 -2
- package/dist/lite.global.js +1 -1
- package/dist/lite.global.js.map +1 -1
- package/dist/lite.js +1 -1
- package/dist/middleware-Dd2T772u.d.cts +429 -0
- package/dist/middleware-Dd2T772u.d.ts +429 -0
- package/dist/next.cjs +1137 -0
- package/dist/next.cjs.map +1 -0
- package/dist/next.d.cts +20 -0
- package/dist/next.d.ts +20 -0
- package/dist/next.js +20 -0
- package/dist/next.js.map +1 -0
- package/dist/server.cjs +1321 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +131 -0
- package/dist/server.d.ts +131 -0
- package/dist/server.js +95 -0
- package/dist/server.js.map +1 -0
- package/dist/webmcp-BgKzHeQ3.d.cts +97 -0
- package/dist/webmcp-BgKzHeQ3.d.ts +97 -0
- package/package.json +38 -6
- package/dist/chunk-77VJ65X2.js +0 -17
- package/dist/chunk-77VJ65X2.js.map +0 -1
- package/dist/chunk-LLD3Y2LZ.js +0 -2
- package/dist/chunk-LLD3Y2LZ.js.map +0 -1
- package/dist/webmcp-C4ikhM4g.d.cts +0 -12
- package/dist/webmcp-C4ikhM4g.d.ts +0 -12
package/dist/index.cjs
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
'use strict';var protocol=require('@agentronics/protocol');var f="0.1.2";var It=()=>{if(typeof navigator>"u")return null;let e=navigator.modelContext;return e&&typeof e=="object"?e:null},O=async(e={})=>{let{pollMs:t=500}=e,r=Date.now();for(;;){let n=It();if(n)return Mt(n);if(Date.now()-r>=t)return null;await new Promise(o=>setTimeout(o,50));}},Mt=e=>({class:"webmcp",trust:"detected",confidence:1,vendor:e.vendor??e.client??null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:f,signals:{webmcp:true,toolCount:Array.isArray(e.tools)?e.tools.length:0}});var Z=[{name:"GPTBot",category:"ai",pattern:/GPTBot/i},{name:"OAI-SearchBot",category:"ai",pattern:/OAI-SearchBot/i},{name:"ChatGPT-User",category:"ai",pattern:/ChatGPT-User/i},{name:"ClaudeBot",category:"ai",pattern:/ClaudeBot/i},{name:"Claude-Web",category:"ai",pattern:/Claude-Web/i},{name:"anthropic-ai",category:"ai",pattern:/anthropic-ai/i},{name:"PerplexityBot",category:"ai",pattern:/PerplexityBot/i},{name:"Google-Extended",category:"ai",pattern:/Google-Extended/i},{name:"Applebot-Extended",category:"ai",pattern:/Applebot-Extended/i},{name:"Amazonbot",category:"ai",pattern:/Amazonbot/i},{name:"Bytespider",category:"ai",pattern:/Bytespider/i},{name:"CCBot",category:"ai",pattern:/CCBot/i},{name:"Meta-ExternalAgent",category:"ai",pattern:/Meta-ExternalAgent/i},{name:"cohere-ai",category:"ai",pattern:/cohere-ai/i},{name:"Googlebot",category:"search",pattern:/Googlebot/i},{name:"Bingbot",category:"search",pattern:/bingbot/i},{name:"DuckDuckBot",category:"search",pattern:/DuckDuckBot/i},{name:"YandexBot",category:"search",pattern:/YandexBot/i},{name:"Baiduspider",category:"search",pattern:/Baiduspider/i},{name:"Applebot",category:"search",pattern:/Applebot/i}],D=(e={})=>{let{signatures:t=Z,disable:r=false,confidence:n=.9}=e;if(r||typeof navigator>"u")return null;let o=navigator.userAgent??"";if(!o)return null;for(let a of t)if(a.pattern.test(o))return {class:"crawler",trust:"detected",confidence:n,vendor:a.name,userAgent:o,detectionVersion:f,signals:{matched:a.name,category:a.category,ua:o}};return null};var Pt=[/HeadlessChrome/i,/Headless/i,/PhantomJS/i,/SlimerJS/i],Et=()=>({hit:(typeof navigator<"u"&&navigator.webdriver)===true,weight:.6,detail:"navigator.webdriver === true"}),Rt=()=>{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_*"}`}},Ct=()=>{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"}},Ot=()=>{if(typeof navigator>"u")return {hit:false,weight:.7};let e=navigator.userAgent??"",t=Pt.some(r=>r.test(e));return t?{hit:t,weight:.7,detail:`headless UA: ${e}`}:{hit:t,weight:.7}},Dt=()=>{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"}},Lt=()=>{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:Et,chromedriver:Rt,headlessUa:Ot,languages:Dt,permissions:Lt,plugins:Ct},L=(e={})=>{let{threshold:t=.4}=e,r={},n=0,o=0;for(let[s,l]of Object.entries(Wt)){let i=l();n+=i.weight,r[s]={hit:i.hit,weight:i.weight,detail:i.detail},i.hit&&(o+=i.weight);}let a=n===0?0:o/n;return a<t?null:{class:"dom",trust:"detected",confidence:a,vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:f,signals:r}};var ee=()=>[{id:"webmcp.model-context",status:"stable",detect:()=>O({pollMs:0})},{id:"crawler.user-agent",status:"beta",detect:()=>D()},{id:"dom.automation-heuristics",status:"beta",detect:()=>L()}],B=(e=ee())=>{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 te=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:f,signals:{declared:true,hasVerificationToken:!!e.verificationToken}}};var je=({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 G=async(e={})=>{if(e.customDetectors?.length){let t=await B(e.customDetectors).detectAll(!!e.experimental);if(t)return t}if(e.webmcp!==false){let t=await O(e.webmcp??{});if(t)return t}if(e.crawler!==false){let t=D(e.crawler??{});if(t)return t}if(e.dom!==false){let t=L(e.dom??{});if(t)return t}return null};var Nt=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:f,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),re=()=>{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:Nt(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 _t=({detected:e,declared:t,verified:r,linked:n})=>n?"linked":r?"verified":t?"declared":"detected",ne=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 Ge=()=>({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:f,signals:{bearer:true,verifiedRemotely:!!r}}}});var Ne=()=>({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:f,signals:{extensionToken:true,verifiedRemotely:!!r}}}});var Ue=()=>({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:f,signals:{mtls:true,subject:r?.subject??null,verifiedRemotely:!!r,...r?.signals??{}}}}});var Ke=()=>({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:f,signals:{oauth2:true,subject:e.oauth2Subject??null,verifiedRemotely:!!r}}}});var Kt=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:f,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),He=()=>({name:"selfDeclaration",async authenticate(e){return e.declaration?Kt(protocol.IdentityClaim.parse(e.declaration)):null}});var Ve=()=>({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:f,signals:{sessionLink:true,linkedUserId:e.linkedUserId??null,verifiedRemotely:!!r}}}});var ze=()=>({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:f,signals:{sso:true,subject:r?.subject??null,verifiedRemotely:!!r,...r?.signals??{}}}}});var Fe=()=>({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:f,signals:{spiffe:true,spiffeId:r?.subject??null,subject:r?.subject??null,verifiedRemotely:!!r,...n?{googleAgent:true}:{},...r?.signals??{}}}}});var Je=()=>({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:f,signals:{xAgentHeader:true,hasProof:!!n}}}});var Vt=()=>[Ne(),He(),Ge(),Je(),_e(),Ve(),Ke(),ze(),Fe(),Ue()],zt={detection:"detection",selfDeclaration:"declaration",bearer:"bearer",xAgentHeader:"x-agent-header",extensionToken:"extension",sessionLink:"session-link",oauth2:"oauth2",sso:"sso",spiffe:"spiffe",mtls:"mtls"},Ft=(e,t)=>e==="spiffe"&&t.signals?.googleAgent===true?"google-agent":zt[e],oe=({methods:e=Vt(),context:t={},onTrace:r}={})=>({async authenticate(n){let o=[],a={};for(let y of e){let d=await y.authenticate(n,t);a[y.name]=!!d,d&&o.push({method:y.name,identity:d});}let s=ne(o.map(y=>y.identity)),l=s?o.find(y=>y.identity===s):void 0,i=l?Ft(l.method,l.identity):void 0,g=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:a,...i?{protocol:i}:{},...g?{subject:g}:{}}};return s||(u.error="No auth method produced an identity."),r?.(u),s},methods(){return e.map(n=>n.name)}});var Jt={identity:null,source:"initial",updatedAt:null},ie=()=>{let e=Jt,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 qt=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,r)=>{e.set(t,r);}}},Xt=()=>typeof window>"u"||!window.localStorage?qt():{read:e=>{try{return window.localStorage.getItem(e)}catch{return null}},write:(e,t)=>{try{window.localStorage.setItem(e,t);}catch{}}},Yt=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},se=(e=Xt())=>({consume(t,r,n=Date.now()){let o=`agtx:rate:${t}`,a=Yt(e.read(o)),s=a&&a.resetAt>n?a.resetAt:n+r.windowSeconds*1e3,l=a&&a.resetAt>n?a.count+1:1;return e.write(o,JSON.stringify({count:l,resetAt:s})),{allowed:l<=r.max,remaining:Math.max(0,r.max-l),resetAt:s}}});var Qt=(e,t)=>e==="*"||e===t?true:e.includes("*")?new RegExp("^"+e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*")+"$").test(t):false,Zt=(e,t)=>{let r=e?protocol.TRUST_RANK[e.trust]:-1,n=protocol.TRUST_RANK[t.minTrust];return r>=n},er=(e,t)=>t.allowedClasses.length===0?true:e?t.allowedClasses.includes(e.class):false,Ye="review",tr=(e,t)=>{let r=t?.class??"unknown",n=t?.vendor??"unknown",o=t?.trust??"none";return `${e}:${r}:${n}:${o}`},ae=(e=[],t={})=>{let r=e.map(o=>protocol.PolicyRule.parse(o)),n=t.rateLimiter??se();return {set(o){r=o.map(a=>protocol.PolicyRule.parse(a));},list(){return [...r]},evaluate({tool:o,identity:a}){for(let s of r)if(Qt(s.tool,o)){if(!Zt(a,s))return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" requires trust >= ${s.minTrust}.`};if(!er(a,s))return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" restricts to classes: ${s.allowedClasses.join(", ")}.`};if(s.rateLimit){let l=n.consume(tr(o,a),s.rateLimit);if(!l.allowed)return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" rate limit exceeded. Resets at ${new Date(l.resetAt).toISOString()}.`}}return {decision:s.decision,ruleId:s.id,reason:`Matched rule "${s.id}".`}}return {decision:Ye,ruleId:null,reason:`No rule matched tool "${o}". Falling back to "${Ye}".`}}}};var ce=({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 a=await n(`${e.replace(/\/$/,"")}/v1/sites/${encodeURIComponent(t)}/policies`,{headers:{authorization:`Bearer ${r}`,...o.etag?{"if-none-match":o.etag}:{}}});if(a.status===304)return this.snapshot();if(!a.ok)throw new Error(`Policy sync failed with status ${a.status}.`);let s=await a.json();return o={policies:protocol.PolicyRule.array().parse(s.policies??[]),etag:a.headers.get("etag")},this.snapshot()}}};var le=({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 pe=({policyEngine:e,getIdentity:t,documentRef:r=typeof document>"u"?void 0:document,selector:n="[data-agentronics-tool]"})=>{if(!r)return {uninstall:()=>{}};let o=a=>{let s=a.target instanceof Element?a.target.closest(n):null;if(!(s instanceof HTMLElement))return;let l=s.dataset.agentronicsTool;l&&Promise.resolve(t()).then(i=>{let g=e.evaluate({tool:l,identity:i});g.decision==="deny"&&(a.preventDefault(),a.stopPropagation(),le({message:g.reason,documentRef:r}));});};return r.addEventListener("click",o,true),{uninstall:()=>r.removeEventListener("click",o,true)}};var ue=()=>{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()]}},Qe=(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}}),Ze="agtx:",et=()=>{let e=typeof window<"u",t=e&&typeof window.sessionStorage<"u"?Qe(window.sessionStorage,Ze+"session:"):ue(),r=e&&typeof window.localStorage<"u"?Qe(window.localStorage,Ze+"user:"):ue();return {session:t,user:r,org:ue()}};var rt=(e,t)=>e.expiresAt!==null&&e.expiresAt<=t,nt=e=>{if(!e)return null;try{let t=JSON.parse(e);return typeof t!="object"||t===null?null:t}catch{return null}},nr=e=>JSON.stringify(e),de=(e={})=>{let t=et(),r=i=>{e.onTrace?.(i);};return {get:(i,g={})=>{let u=g.scope??"session",y=t[u],d=nt(y.read(i));if(!d){r({type:"memory.accessed",metadata:{operation:"get",key:i,scope:u,hit:false}});return}if(rt(d,Date.now())){y.remove(i),r({type:"memory.accessed",metadata:{operation:"get",key:i,scope:u,hit:false,expired:true}});return}return r({type:"memory.accessed",metadata:{operation:"get",key:i,scope:u,hit:true}}),d.value},set:(i,g,u={})=>{let y=u.scope??"session",d=u.ttlSeconds??null,h=Date.now(),S={value:g,expiresAt:d===null?null:h+d*1e3,updatedAt:new Date(h).toISOString()};return t[y].write(i,nr(S)),r({type:"memory.updated",metadata:{operation:"set",key:i,scope:y,ttlSeconds:d}}),protocol.MemoryEntry.parse({key:i,value:g,scope:y,ttlSeconds:d,updatedAt:S.updatedAt})},remove:(i,g={})=>{let u=g.scope??"session";t[u].remove(i),r({type:"memory.updated",metadata:{operation:"remove",key:i,scope:u}});},list:(i={})=>{let g=i.scope??"session",u=t[g],y=Date.now(),d=[];for(let h of u.keys()){let S=nt(u.read(h));if(S){if(rt(S,y)){u.remove(h);continue}d.push(protocol.MemoryEntry.parse({key:h,value:S.value,scope:g,ttlSeconds:S.expiresAt===null?null:Math.max(0,Math.round((S.expiresAt-y)/1e3)),updatedAt:S.updatedAt}));}}return r({type:"memory.accessed",metadata:{operation:"list",scope:g,count:d.length}}),d},clear:(i={})=>{let g=i.scope??"session",u=t[g],y=u.keys().length;for(let d of u.keys())u.remove(d);r({type:"memory.updated",metadata:{operation:"clear",scope:g,count:y}});}}};var ye=e=>protocol.SiteMemory.parse(JSON.parse(JSON.stringify(e))),N=e=>({...e,updatedAt:new Date().toISOString()}),me=(e={})=>{let t=protocol.SiteMemory.parse({...protocol.SITE_MEMORY_DEFAULT,...e.initial??{}}),r=null,n=new Set,o=p=>{e.onTrace?.(p);},a=()=>{r=null;},s=()=>{if(n.size===0)return;let p=ye(t);r=p,n.forEach(v=>v(p));},l=p=>{let v=protocol.SiteMemory.parse({...t,...p,workflows:{...t.workflows,...p.workflows??{}},policies:{...t.policies,...p.policies??{}},uiGuidance:{...t.uiGuidance,...p.uiGuidance??{}},pageContexts:{...t.pageContexts,...p.pageContexts??{}}});return t=N(v),a(),o({type:"memory.updated",metadata:{kind:"site",operation:"provide",keys:Object.keys(p)}}),s(),u()},i=(p,v)=>{let x=p.split(".").filter(Boolean);if(x.length===0)throw new Error("siteMemory.update() requires a non-empty dot-path.");let k=JSON.parse(JSON.stringify(t)),I=k;for(let P=0;P<x.length-1;P++){let b=x[P],E=I[b];(typeof E!="object"||E===null||Array.isArray(E))&&(I[b]={}),I=I[b];}return I[x[x.length-1]]=v,t=N(protocol.SiteMemory.parse(k)),a(),o({type:"memory.updated",metadata:{kind:"site",operation:"update",path:p}}),s(),u()},g=p=>{let v=protocol.SiteMemoryPageContext.parse({path:p.path,payload:p.payload,updatedAt:new Date().toISOString()});return t=N({...t,pageContexts:{...t.pageContexts,[p.path]:v}}),a(),o({type:"memory.updated",metadata:{kind:"site",operation:"provideForPage",path:p.path}}),s(),{...v,payload:{...v.payload}}},u=()=>(r||(r=ye(t)),r);return {provide:l,update:i,provideForPage:g,snapshot:u,get:p=>{if(o({type:"memory.accessed",metadata:{kind:"site",operation:p?"get":"snapshot",path:p??null}}),!p)return ye(t);let v=p.split(".").filter(Boolean),x=t;for(let k of v){if(typeof x!="object"||x===null)return;x=x[k];}return x},getForPage:p=>{o({type:"memory.accessed",metadata:{kind:"site",operation:"getForPage",path:p}});let v=t.pageContexts[p];return v?{...v,payload:{...v.payload}}:null},replace:p=>(t=N(protocol.SiteMemory.parse(p)),a(),s(),u()),subscribe:p=>(n.add(p),()=>{n.delete(p);})}};var ge=({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 a=await n(`${e.replace(/\/$/,"")}/v1/sites/${encodeURIComponent(t)}/memory`,{headers:{authorization:`Bearer ${r}`,...o.etag?{"if-none-match":o.etag}:{}}});if(a.status===304)return this.snapshot();if(!a.ok)throw new Error(`Memory sync failed with status ${a.status}.`);let s=await a.json();return o={memory:protocol.SiteMemory.parse(s.memory??{}),etag:a.headers.get("etag")},this.snapshot()}}};var it=({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 a=r(),s=o.path??null;if(n?.(s),!s)return {content:a};let l=s.split(".").filter(Boolean),i=a;for(let g of l){if(typeof i!="object"||i===null)return {content:void 0};i=i[g];}return {content:i}}});var A="agent-context-",fe="agentronics-site-context",sr=e=>{try{return JSON.stringify(e)}catch{return "{}"}},_=(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);},U=(e,t)=>{e.querySelectorAll(`meta[name="${t}"]`).forEach(r=>r.remove());},K=({doc:e=typeof document>"u"?null:document,snapshot:t,schemaType:r="WebSite"})=>{if(!e)return {uninstall:()=>{}};_(e,`${A}version`,t.version),_(e,`${A}updated-at`,t.updatedAt??new Date().toISOString()),t.siteMap?.navigation?.flow&&_(e,`${A}flow`,t.siteMap.navigation.flow),_(e,`${A}workflows`,Object.keys(t.workflows).join(","));let n=e.getElementById(fe);return n||(n=e.createElement("script"),n.type="application/ld+json",n.id=fe,e.head.appendChild(n)),n.textContent=sr({"@context":"https://schema.org","@type":r,name:"Agentronics Site Memory",agentronics:t}),{uninstall:()=>{U(e,`${A}version`),U(e,`${A}updated-at`),U(e,`${A}flow`),U(e,`${A}workflows`),e.getElementById(fe)?.remove();}}};var st="agentronics-memory-overlay",ar=e=>`
|
|
1
|
+
'use strict';var protocol=require('@agentronics/protocol');var b="0.1.2";var pe=(e,t)=>typeof e=="object"&&e!==null&&typeof e[t]=="function",U=e=>{let t=e??(typeof globalThis>"u"?null:globalThis);if(!t)return null;let n=t.document?.modelContext;if(pe(n,"registerTool"))return {source:"document",context:n};let o=t.navigator?.modelContext;return pe(o,"registerTool")?{source:"navigator",context:o}:pe(o,"provideContext")?{source:"legacy",context:o}:null},ue=null,de=new Set,ye=(e,t)=>{ue={type:e,toolName:t,at:Date.now()},de.forEach(n=>n(ue));},pt=()=>ue,me=e=>(de.add(e),()=>{de.delete(e);});var on=()=>{if(typeof navigator>"u")return null;let e=navigator.modelContext;return !e||typeof e!="object"?null:e.vendor||e.client?e:null},ut=()=>U()?.source??null,j=async(e={})=>{let{pollMs:t=500}=e,n=Date.now();for(;;){let o=pt();if(o)return rn(o);let r=on();if(r)return sn(r);if(Date.now()-n>=t)return null;await new Promise(s=>setTimeout(s,50));}},dt=()=>({class:"webmcp",trust:"detected",confidence:1,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b}),rn=e=>({...dt(),vendor:null,signals:{webmcp:true,source:ut(),event:e.type,tool:e.toolName}}),sn=e=>({...dt(),vendor:e.vendor??e.client??null,signals:{webmcp:true,source:"legacy-extension",toolCount:Array.isArray(e.tools)?e.tools.length:0}});var ge=[{name:"GPTBot",category:"ai",pattern:/GPTBot/i},{name:"OAI-SearchBot",category:"ai",pattern:/OAI-SearchBot/i},{name:"ChatGPT-User",category:"ai",pattern:/ChatGPT-User/i},{name:"Claude-User",category:"ai",pattern:/Claude-User/i},{name:"Claude-SearchBot",category:"ai",pattern:/Claude-SearchBot/i},{name:"ClaudeBot",category:"ai",pattern:/ClaudeBot/i},{name:"Claude-Web",category:"ai",pattern:/Claude-Web/i},{name:"anthropic-ai",category:"ai",pattern:/anthropic-ai/i},{name:"Perplexity-User",category:"ai",pattern:/Perplexity-User/i},{name:"PerplexityBot",category:"ai",pattern:/PerplexityBot/i},{name:"Google-Extended",category:"ai",pattern:/Google-Extended/i},{name:"Applebot-Extended",category:"ai",pattern:/Applebot-Extended/i},{name:"Amazonbot",category:"ai",pattern:/Amazonbot/i},{name:"Bytespider",category:"ai",pattern:/Bytespider/i},{name:"CCBot",category:"ai",pattern:/CCBot/i},{name:"Meta-ExternalAgent",category:"ai",pattern:/Meta-ExternalAgent/i},{name:"cohere-ai",category:"ai",pattern:/cohere-ai/i},{name:"Googlebot",category:"search",pattern:/Googlebot/i},{name:"Bingbot",category:"search",pattern:/bingbot/i},{name:"DuckDuckBot",category:"search",pattern:/DuckDuckBot/i},{name:"YandexBot",category:"search",pattern:/YandexBot/i},{name:"Baiduspider",category:"search",pattern:/Baiduspider/i},{name:"Applebot",category:"search",pattern:/Applebot/i}],B=(e={})=>{let{signatures:t=ge,disable:n=false,confidence:o=.9}=e;if(n||typeof navigator>"u")return null;let r=navigator.userAgent??"";if(!r)return null;for(let s of t)if(s.pattern.test(r))return {class:"crawler",trust:"detected",confidence:o,vendor:s.name,userAgent:r,detectionVersion:b,signals:{matched:s.name,category:s.category,ua:r}};return null};var an=[/HeadlessChrome/i,/Headless/i,/PhantomJS/i,/SlimerJS/i],cn=()=>({hit:(typeof navigator<"u"&&navigator.webdriver)===true,weight:.6,detail:"navigator.webdriver === true"}),ln=()=>{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_*"}`}},pn=["__playwright__binding__","__pwInitScripts","__puppeteer_evaluation_script__","_phantom","callPhantom","__nightmare","domAutomation","domAutomationController","__selenium_unwrapped","__webdriver_evaluate","__driver_evaluate","__fxdriver_unwrapped"],un=()=>{if(typeof window>"u")return {hit:false,weight:.6};let e=pn.find(t=>t in window);return e?{hit:true,weight:.6,detail:`window.${e}`}:{hit:false,weight:.6}},dn=()=>{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"}},yn=()=>{if(typeof navigator>"u")return {hit:false,weight:.7};let e=navigator.userAgent??"",t=an.some(n=>n.test(e));return t?{hit:t,weight:.7,detail:`headless UA: ${e}`}:{hit:t,weight:.7}},mn=()=>{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"}},gn=()=>{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"}},fn={webdriver:cn,chromedriver:ln,automationGlobals:un,headlessUa:yn,languages:mn,permissions:gn,plugins:dn},N=(e={})=>{let{threshold:t=.4}=e,n={},o=0,r=0;for(let[a,p]of Object.entries(fn)){let l=p();o+=l.weight,n[a]={hit:l.hit,weight:l.weight,detail:l.detail},l.hit&&(r+=l.weight);}let s=o===0?0:r/o;return s<t?null:{class:"dom",trust:"detected",confidence:s,vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:n}};var fe=()=>[{id:"webmcp.model-context",status:"stable",detect:()=>j({pollMs:0})},{id:"crawler.user-agent",status:"beta",detect:()=>B()},{id:"dom.automation-heuristics",status:"beta",detect:()=>N()}],z=(e=fe())=>{let t=new Map(e.map(n=>[n.id,n]));return {register(n){t.set(n.id,n);},list(n){let o=[...t.values()];return n?o.filter(r=>r.status===n):o},async detectAll(n=false){for(let o of t.values()){if(o.status==="research"&&!n)continue;let r=await o.detect();if(r)return r}return null}}};var he=e=>{let t=protocol.AgentClass.parse(e.class),n=e.verificationToken?"verified":"declared";return {class:t,trust:n,confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{declared:true,hasVerificationToken:!!e.verificationToken}}};var yt=({gatewayUrl:e,publishableKey:t,fetcher:n=fetch})=>{let o=null,r=[];return {snapshot(){return [...r]},async sync(){let s=await n(`${e.replace(/\/$/,"")}/v1/pub/detector-signatures`,{headers:{...t?{authorization:`Bearer ${t}`}:{},...o?{"if-none-match":o}:{}}});if(s.status===304)return this.snapshot();if(!s.ok)throw new Error(`Detector signature sync failed with status ${s.status}.`);return r=(await s.json()).signatures??[],o=s.headers.get("etag"),this.snapshot()}}};var J=async(e={})=>{if(e.customDetectors?.length){let t=await z(e.customDetectors).detectAll(!!e.experimental);if(t)return t}if(e.webmcp!==false){let t=await j(e.webmcp??{});if(t)return t}if(e.crawler!==false){let t=B(e.crawler??{});if(t)return t}if(e.dom!==false){let t=N(e.dom??{});if(t)return t}return null};var vn=new Set(["1024x768","1280x800","1280x720","1280x1024","1440x900","1920x1080"]),xn=e=>{if(e.length<6)return null;let t=e.reduce((o,r)=>o+r,0)/e.length;if(t<=0)return null;let n=e.reduce((o,r)=>o+(r-t)**2,0)/e.length;return Math.sqrt(n)/t},ve=e=>{let t=0;return e.clicks>=2&&(t+=.35*(e.teleportClicks/e.clicks),t+=.25*(e.centreClicks/e.clicks),e.pointerMoves===0&&(t+=.15)),e.keyIntervalCv!==null&&e.keyIntervalCv<.15&&(t+=.2),e.insertWithoutKeys>0&&(t+=.15),e.wheelEvents===0&&e.clicks>=3&&(t+=.05),e.vmViewport&&(t+=.1),Math.min(1,t)},xe=(e={})=>{let{threshold:t=.6,minInteractions:n=3,onDetect:o,acceptUntrustedEvents:r=false}=e,s=w=>w.isTrusted||r,a=e.documentRef??(typeof document>"u"?void 0:document),p={clicks:0,teleportClicks:0,centreClicks:0,keyIntervals:0,keyIntervalCv:null,insertWithoutKeys:0,pointerMoves:0,wheelEvents:0,vmViewport:false},l=Number.NEGATIVE_INFINITY,i=0,d=0,f=[],y=0,x=null,m=a?.defaultView;m&&(p.vmViewport=vn.has(`${m.innerWidth}x${m.innerHeight}`));let u=w=>({class:"screenshot",trust:"detected",confidence:Number(w.toFixed(2)),vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{vision:true,...p}}),v=()=>{if(x||p.clicks+y<n)return;let w=ve(p);w>=t&&(x=u(w),o?.(x));},h=w=>{s(w)&&(p.pointerMoves+=1,l=w.timeStamp);},H=[["pointermove",h],["mousemove",h],["wheel",w=>{s(w)&&(p.wheelEvents+=1);}],["click",w=>{if(!s(w))return;let T=w;p.clicks+=1,w.timeStamp-l>400&&(p.teleportClicks+=1);let G=T.target instanceof Element?T.target:null;if(G&&typeof G.getBoundingClientRect=="function"){let P=G.getBoundingClientRect();if(P.width>8&&P.height>8){let D=Math.abs(T.clientX-(P.left+P.width/2)),O=Math.abs(T.clientY-(P.top+P.height/2));D<=1.5&&O<=1.5&&(p.centreClicks+=1);}}v();}],["keydown",w=>{if(!s(w))return;let T=w.timeStamp;i&&T-i<1500?(f.push(T-i),f.length>60&&f.shift(),p.keyIntervals=f.length,p.keyIntervalCv=xn(f)):y+=1,i=T,d=T;}],["keyup",()=>v()],["input",w=>{if(!s(w))return;let T=w;T.inputType==="insertText"&&T.data&&T.data.length>1&&w.timeStamp-d>200&&(p.insertWithoutKeys+=1,y+=1,v());}]];for(let[w,T]of H)a?.addEventListener(w,T,{capture:true,passive:true});return {signals:()=>({...p}),score:()=>ve(p),detected:()=>x,stop:()=>{for(let[w,T]of H)a?.removeEventListener(w,T,{capture:true});}}};var Tn=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),be=()=>{let e=null;return {present(t){let n=protocol.IdentityClaim.safeParse(t);if(!n.success)throw new protocol.AgentronicsError("invalid_api_key",`Invalid identity claim: ${n.error.issues[0]?.message??"unknown"}`);let o={claim:n.data,identity:Tn(n.data)};return e=o,o},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 An=({detected:e,declared:t,verified:n,linked:o})=>o?"linked":n?"verified":t?"declared":"detected",we=e=>{let t=null;for(let n of e)(!t||protocol.TRUST_RANK[n.trust]>protocol.TRUST_RANK[t.trust])&&(t=n);return t};var gt=()=>({name:"bearer",async authenticate(e,t){if(!e.bearerToken)return null;let n=await t.verifyToken?.("bearer",e.bearerToken);return {class:e.classHint??"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"bearer",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{bearer:true,verifiedRemotely:!!n}}}});var ft=()=>({name:"detection",async authenticate(e){return e.detected??null}});var ht=()=>({name:"extensionToken",async authenticate(e,t){if(!e.extensionToken)return null;let n=await t.verifyToken?.("extensionToken",e.extensionToken);return {class:"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"browser-extension",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{extensionToken:true,verifiedRemotely:!!n}}}});var vt=()=>({name:"mtls",async authenticate(e,t){if(!e.xfccHeader)return null;let n=await t.verifyToken?.("mtls",e.xfccHeader);return {class:e.classHint??"webmcp",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"mtls",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{mtls:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var xt=()=>({name:"oauth2",async authenticate(e,t){if(!e.oauth2AccessToken)return null;let n=await t.verifyToken?.("oauth2",e.oauth2AccessToken);return {class:e.classHint??"webmcp",trust:n?e.oauth2Subject&&n.trust!=="detected"&&n.trust!=="declared"?"linked":n.trust:"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"oauth2",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{oauth2:true,subject:e.oauth2Subject??null,verifiedRemotely:!!n}}}});var Mn=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),bt=()=>({name:"selfDeclaration",async authenticate(e){return e.declaration?Mn(protocol.IdentityClaim.parse(e.declaration)):null}});var wt=()=>({name:"sessionLink",async authenticate(e,t){if(!e.sessionLinkToken)return null;let n=await t.verifyToken?.("sessionLink",e.sessionLinkToken);return {class:e.classHint??"screenshot",trust:n?e.linkedUserId&&n.trust!=="detected"&&n.trust!=="declared"?"linked":n.trust:"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"session-link",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{sessionLink:true,linkedUserId:e.linkedUserId??null,verifiedRemotely:!!n}}}});var St=()=>({name:"sso",async authenticate(e,t){if(!e.ssoIdToken)return null;let n=await t.verifyToken?.("sso",e.ssoIdToken);return {class:e.classHint??"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"sso",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{sso:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var Tt=()=>({name:"spiffe",async authenticate(e,t){if(!e.spiffeJwt)return null;let n=await t.verifyToken?.("spiffe",e.spiffeJwt),o=n?.vendor==="google";return {class:e.classHint??"webmcp",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"spiffe",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{spiffe:true,spiffeId:n?.subject??null,subject:n?.subject??null,verifiedRemotely:!!n,...o?{googleAgent:true}:{},...n?.signals??{}}}}});var At=()=>({name:"xAgentHeader",async authenticate(e){if(!e.xAgentHeader)return null;let[t="x-agent",n="dom",o]=e.xAgentHeader.split(";"),r=protocol.AgentClass.safeParse(n);return {class:r.success?r.data:"dom",trust:"declared",confidence:o?1:.8,vendor:t,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{xAgentHeader:true,hasProof:!!o}}}});var kt=new Set(["bearer","extensionToken","sessionLink","oauth2","sso","spiffe","mtls"]),Rn=(e,t,n)=>{if(kt.has(e)&&t.signals?.verifiedRemotely===false){let o=e==="oauth2"&&n.oauth2Subject||e==="sessionLink"&&n.linkedUserId;return {...t,trust:o?"linked":"verified",signals:{...t.signals,compat:"0.6"}}}return e==="xAgentHeader"&&t.signals?.hasProof===true?{...t,trust:"verified",confidence:1,signals:{...t.signals,compat:"0.6"}}:t},Se=()=>[ft(),bt(),gt(),At(),ht(),wt(),xt()],Mt=()=>[St(),Tt(),vt()],En={detection:"detection",selfDeclaration:"declaration",bearer:"bearer",xAgentHeader:"x-agent-header",extensionToken:"extension",sessionLink:"session-link",oauth2:"oauth2",sso:"sso",spiffe:"spiffe",mtls:"mtls"},Cn=(e,t)=>e==="spiffe"&&t.signals?.googleAgent===true?"google-agent":En[e],Te=({compat:e,methods:t=e==="0.6"?[...Se(),...Mt()]:Se(),context:n={},onTrace:o,onUnverifiedToken:r}={})=>{let s=false;return {async authenticate(a){let p=[],l={};for(let m of t){let u=await m.authenticate(a,n);l[m.name]=!!u,u&&(kt.has(m.name)&&u.signals?.verifiedRemotely===false&&!n.verifyToken&&!s&&(s=true,r?.(m.name)),e==="0.6"&&(u=Rn(m.name,u,a)),p.push({method:m.name,identity:u}));}let i=we(p.map(m=>m.identity)),d=i?p.find(m=>m.identity===i):void 0,f=d?Cn(d.method,d.identity):void 0,y=typeof i?.signals?.subject=="string"?i.signals.subject:void 0,x={type:i?"auth.identity_presented":"sdk.error",agent:i,outcome:i?"success":"error",metadata:{methods:l,...f?{protocol:f}:{},...y?{subject:y}:{}}};return i||(x.error="No auth method produced an identity."),o?.(x),i},methods(){return t.map(a=>a.name)}}};var Pn={identity:null,source:"initial",updatedAt:null},Ae=()=>{let e=Pn,t=new Set,n=()=>{t.size!==0&&t.forEach(o=>o(e));};return {snapshot(){return e},set(o,r){e={identity:o,source:r,updatedAt:new Date().toISOString()},n();},subscribe(o){return t.add(o),()=>{t.delete(o);}}}};var Dn=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,n)=>{e.set(t,n);}}},On=()=>typeof window>"u"||!window.localStorage?Dn():{read:e=>{try{return window.localStorage.getItem(e)}catch{return null}},write:(e,t)=>{try{window.localStorage.setItem(e,t);}catch{}}},Ln=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},ke=(e=On())=>({consume(t,n,o=Date.now()){let r=`agtx:rate:${t}`,s=Ln(e.read(r)),a=s&&s.resetAt>o?s.resetAt:o+n.windowSeconds*1e3,p=s&&s.resetAt>o?s.count+1:1;return e.write(r,JSON.stringify({count:p,resetAt:a})),{allowed:p<=n.max,remaining:Math.max(0,n.max-p),resetAt:a}}});var Wn=(e,t)=>e==="*"||e===t?true:e.includes("*")?new RegExp("^"+e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*")+"$").test(t):false,_n=(e,t)=>{let n=e?protocol.TRUST_RANK[e.trust]:-1,o=protocol.TRUST_RANK[t.minTrust];return n>=o},$n=(e,t)=>t.allowedClasses.length===0?true:e?t.allowedClasses.includes(e.class):false,Et="allow",jn=(e,t)=>{let n=t?.class??"unknown",o=t?.vendor??"unknown",r=t?.trust??"none";return `${e}:${n}:${o}:${r}`},Me=(e=[],t={})=>{let n=e.map(r=>protocol.PolicyRule.parse(r)),o=t.rateLimiter??ke();return {set(r){n=r.map(s=>protocol.PolicyRule.parse(s));},list(){return [...n]},evaluate({tool:r,identity:s}){for(let a of n)if(Wn(a.tool,r)){if(!_n(s,a))return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" requires trust >= ${a.minTrust}.`};if(!$n(s,a))return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" restricts to classes: ${a.allowedClasses.join(", ")}.`};if(a.rateLimit){let p=o.consume(jn(r,s),a.rateLimit);if(!p.allowed)return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" rate limit exceeded. Resets at ${new Date(p.resetAt).toISOString()}.`}}return {decision:a.decision,ruleId:a.id,reason:`Matched rule "${a.id}".`}}return {decision:Et,ruleId:null,reason:`No rule matched tool "${r}". Falling back to "${Et}".`}}}};var Ie=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>{let r={policies:[],etag:null};return {snapshot(){return {policies:[...r.policies],etag:r.etag}},async sync(){let s=await o(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/policies`,{headers:{authorization:`Bearer ${n}`,...r.etag?{"if-none-match":r.etag}:{}}});if(s.status===304)return this.snapshot();if(!s.ok)throw new Error(`Policy sync failed with status ${s.status}.`);let a=await s.json();return r={policies:protocol.PolicyRule.array().parse(a.policies??[]),etag:s.headers.get("etag")},this.snapshot()}}};var Re=({message:e="Agent action blocked by site policy.",durationMs:t=2400,documentRef:n=typeof document>"u"?void 0:document}={})=>{if(!n?.body)return null;let o=n.createElement("div");return o.setAttribute("role","status"),o.setAttribute("data-agentronics-deny-overlay","true"),o.textContent=e,Object.assign(o.style,{position:"fixed",zIndex:"2147483647",left:"50%",bottom:"24px",transform:"translateX(-50%)",maxWidth:"min(520px, calc(100vw - 32px))",padding:"12px 16px",borderRadius:"12px",background:"#0B0B0C",color:"#FFFFFF",border:"2px solid #FF4D1F",font:"13px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace"}),n.body.appendChild(o),window.setTimeout(()=>o.remove(),t),o};var Ee=({policyEngine:e,getIdentity:t,documentRef:n=typeof document>"u"?void 0:document,selector:o="[data-agentronics-tool]"})=>{if(!n)return {uninstall:()=>{}};let r=s=>{let a=s.target instanceof Element?s.target.closest(o):null;if(!(a instanceof HTMLElement))return;let p=a.dataset.agentronicsTool;p&&Promise.resolve(t()).then(l=>{let i=e.evaluate({tool:p,identity:l});i.decision==="deny"&&(s.preventDefault(),s.stopPropagation(),Re({message:i.reason,documentRef:n}));});};return n.addEventListener("click",r,true),{uninstall:()=>n.removeEventListener("click",r,true)}};var Ce=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,n)=>{e.set(t,n);},remove:t=>{e.delete(t);},keys:()=>[...e.keys()]}},Ct=(e,t)=>({read:n=>{try{return e.getItem(t+n)}catch{return null}},write:(n,o)=>{try{e.setItem(t+n,o);}catch{}},remove:n=>{try{e.removeItem(t+n);}catch{}},keys:()=>{let n=[];try{for(let o=0;o<e.length;o++){let r=e.key(o);r&&r.startsWith(t)&&n.push(r.slice(t.length));}}catch{}return n}}),Pt="agtx:",Dt=()=>{let e=typeof window<"u",t=e&&typeof window.sessionStorage<"u"?Ct(window.sessionStorage,Pt+"session:"):Ce(),n=e&&typeof window.localStorage<"u"?Ct(window.localStorage,Pt+"user:"):Ce();return {session:t,user:n,org:Ce()}};var Lt=(e,t)=>e.expiresAt!==null&&e.expiresAt<=t,Wt=e=>{if(!e)return null;try{let t=JSON.parse(e);return typeof t!="object"||t===null?null:t}catch{return null}},Nn=e=>JSON.stringify(e),Pe=(e={})=>{let t=Dt(),n=l=>{e.onTrace?.(l);};return {get:(l,i={})=>{let d=i.scope??"session",f=t[d],y=Wt(f.read(l));if(!y){n({type:"memory.accessed",metadata:{operation:"get",key:l,scope:d,hit:false}});return}if(Lt(y,Date.now())){f.remove(l),n({type:"memory.accessed",metadata:{operation:"get",key:l,scope:d,hit:false,expired:true}});return}return n({type:"memory.accessed",metadata:{operation:"get",key:l,scope:d,hit:true}}),y.value},set:(l,i,d={})=>{let f=d.scope??"session",y=d.ttlSeconds??null,x=Date.now(),m={value:i,expiresAt:y===null?null:x+y*1e3,updatedAt:new Date(x).toISOString()};return t[f].write(l,Nn(m)),n({type:"memory.updated",metadata:{operation:"set",key:l,scope:f,ttlSeconds:y}}),protocol.MemoryEntry.parse({key:l,value:i,scope:f,ttlSeconds:y,updatedAt:m.updatedAt})},remove:(l,i={})=>{let d=i.scope??"session";t[d].remove(l),n({type:"memory.updated",metadata:{operation:"remove",key:l,scope:d}});},list:(l={})=>{let i=l.scope??"session",d=t[i],f=Date.now(),y=[];for(let x of d.keys()){let m=Wt(d.read(x));if(m){if(Lt(m,f)){d.remove(x);continue}y.push(protocol.MemoryEntry.parse({key:x,value:m.value,scope:i,ttlSeconds:m.expiresAt===null?null:Math.max(0,Math.round((m.expiresAt-f)/1e3)),updatedAt:m.updatedAt}));}}return n({type:"memory.accessed",metadata:{operation:"list",scope:i,count:y.length}}),y},clear:(l={})=>{let i=l.scope??"session",d=t[i],f=d.keys().length;for(let y of d.keys())d.remove(y);n({type:"memory.updated",metadata:{operation:"clear",scope:i,count:f}});}}};var De=e=>protocol.SiteMemory.parse(JSON.parse(JSON.stringify(e))),q=e=>({...e,updatedAt:new Date().toISOString()}),Oe=(e={})=>{let t=protocol.SiteMemory.parse({...protocol.SITE_MEMORY_DEFAULT,...e.initial??{}}),n=null,o=new Set,r=u=>{e.onTrace?.(u);},s=()=>{n=null;},a=()=>{if(o.size===0)return;let u=De(t);n=u,o.forEach(v=>v(u));},p=u=>{let v=protocol.SiteMemory.parse({...t,...u,workflows:{...t.workflows,...u.workflows??{}},policies:{...t.policies,...u.policies??{}},uiGuidance:{...t.uiGuidance,...u.uiGuidance??{}},pageContexts:{...t.pageContexts,...u.pageContexts??{}}});return t=q(v),s(),r({type:"memory.updated",metadata:{kind:"site",operation:"provide",keys:Object.keys(u)}}),a(),d()},l=(u,v)=>{let h=u.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)),I=A;for(let R=0;R<h.length-1;R++){let k=h[R],E=I[k];(typeof E!="object"||E===null||Array.isArray(E))&&(I[k]={}),I=I[k];}return I[h[h.length-1]]=v,t=q(protocol.SiteMemory.parse(A)),s(),r({type:"memory.updated",metadata:{kind:"site",operation:"update",path:u}}),a(),d()},i=u=>{let v=protocol.SiteMemoryPageContext.parse({path:u.path,payload:u.payload,updatedAt:new Date().toISOString()});return t=q({...t,pageContexts:{...t.pageContexts,[u.path]:v}}),s(),r({type:"memory.updated",metadata:{kind:"site",operation:"provideForPage",path:u.path}}),a(),{...v,payload:{...v.payload}}},d=()=>(n||(n=De(t)),n);return {provide:p,update:l,provideForPage:i,snapshot:d,get:u=>{if(r({type:"memory.accessed",metadata:{kind:"site",operation:u?"get":"snapshot",path:u??null}}),!u)return De(t);let v=u.split(".").filter(Boolean),h=t;for(let A of v){if(typeof h!="object"||h===null)return;h=h[A];}return h},getForPage:u=>{r({type:"memory.accessed",metadata:{kind:"site",operation:"getForPage",path:u}});let v=t.pageContexts[u];return v?{...v,payload:{...v.payload}}:null},replace:u=>(t=q(protocol.SiteMemory.parse(u)),s(),a(),d()),subscribe:u=>(o.add(u),()=>{o.delete(u);})}};var Le=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>{let r={memory:null,etag:null};return {snapshot(){return {memory:r.memory?protocol.SiteMemory.parse(r.memory):null,etag:r.etag}},async sync(){let s=await o(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/memory`,{headers:{authorization:`Bearer ${n}`,...r.etag?{"if-none-match":r.etag}:{}}});if(s.status===304)return this.snapshot();if(!s.ok)throw new Error(`Memory sync failed with status ${s.status}.`);let a=await s.json();return r={memory:protocol.SiteMemory.parse(a.memory??{}),etag:s.headers.get("etag")},this.snapshot()}}};var $t=({toolName:e="getSiteContext",description:t="Returns Agentronics site memory: page map, workflows, policies, UI guidance.",getSnapshot:n,onAccess:o})=>({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(r={}){let s=n(),a=r.path??null;if(o?.(a),!a)return {content:s};let p=a.split(".").filter(Boolean),l=s;for(let i of p){if(typeof l!="object"||l===null)return {content:void 0};l=l[i];}return {content:l}}});var L="agent-context-",We="agentronics-site-context",Un=e=>{try{return JSON.stringify(e)}catch{return "{}"}},Y=(e,t,n)=>{let o=e.querySelector(`meta[name="${t}"]`);o||(o=e.createElement("meta"),o.setAttribute("name",t),e.head.appendChild(o)),o.setAttribute("content",n);},X=(e,t)=>{e.querySelectorAll(`meta[name="${t}"]`).forEach(n=>n.remove());},Q=({doc:e=typeof document>"u"?null:document,snapshot:t,schemaType:n="WebSite"})=>{if(!e)return {uninstall:()=>{}};Y(e,`${L}version`,t.version),Y(e,`${L}updated-at`,t.updatedAt??new Date().toISOString()),t.siteMap?.navigation?.flow&&Y(e,`${L}flow`,t.siteMap.navigation.flow),Y(e,`${L}workflows`,Object.keys(t.workflows).join(","));let o=e.getElementById(We);return o||(o=e.createElement("script"),o.type="application/ld+json",o.id=We,e.head.appendChild(o)),o.textContent=Un({"@context":"https://schema.org","@type":n,name:"Agentronics Site Memory",agentronics:t}),{uninstall:()=>{X(e,`${L}version`),X(e,`${L}updated-at`),X(e,`${L}flow`),X(e,`${L}workflows`),e.getElementById(We)?.remove();}}};var jt="agentronics-memory-overlay",Vn=e=>`
|
|
2
2
|
position: fixed;
|
|
3
3
|
bottom: 16px;
|
|
4
4
|
right: 16px;
|
|
5
5
|
max-width: 320px;
|
|
6
6
|
padding: 10px 12px;
|
|
7
|
-
background: rgba(
|
|
8
|
-
color: #
|
|
7
|
+
background: rgba(11, 11, 12, 0.92);
|
|
8
|
+
color: #ffffff;
|
|
9
9
|
font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
10
|
-
border
|
|
10
|
+
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
11
|
+
border-radius: 10px;
|
|
11
12
|
z-index: 2147483647;
|
|
12
13
|
opacity: ${e?"0":"1"};
|
|
13
14
|
pointer-events: ${e?"none":"auto"};
|
|
14
|
-
|
|
15
|
-
`,at=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}`},H=({doc:e=typeof document>"u"?null:document,snapshot:t,hidden:r=false})=>{if(!e)return {uninstall:()=>{},refresh:()=>{}};let n=e.getElementById(st);return n||(n=e.createElement("div"),n.id=st,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",ar(r)),n.textContent=at(t),{uninstall:()=>{n?.remove();},refresh:o=>{n&&(n.textContent=at(o));}}};var he="/.well-known/agent-context.json",V=async({origin:e,fetcher:t=fetch,signal:r}={})=>{let n=(e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:"")+he;if(!n.startsWith("http"))return null;let o={headers:{accept:"application/json"}};r!==void 0&&(o.signal=r);let a=await t(n,o);if(!a.ok){if(a.status===404)return null;throw new Error(`well-known agent-context fetch failed with status ${a.status}.`)}let s=await a.json();return protocol.SiteMemory.parse(s)},lt=({snapshot:e})=>JSON.stringify(protocol.SiteMemory.parse(e));var ve=({evaluate:e,setPolicies:t,listPolicies:r,onTrace:n,identityResolver:o})=>{let a=new Map,s=new Set,l=i=>{if(!i.authz||!t||!r)return;let g={id:`tool:${i.name}`,tool:i.name,...i.authz,rateLimit:i.rateLimit??i.authz.rateLimit};t([...r().filter(u=>u.id!==g.id),g]);};return {register(i){return a.set(i.name,i),s.delete(i.name),l(i),n?.({type:"tool.registered",tool:i.name,metadata:{version:i.version??null,group:i.group??null,stage:i.stage??null}}),()=>{a.delete(i.name),s.delete(i.name);}},unregister(i){a.delete(i),s.delete(i);},enable(i){!a.has(i)||!s.has(i)||(s.delete(i),n?.({type:"tool.surfaced",tool:i,metadata:{state:"enabled"}}));},disable(i){!a.has(i)||s.has(i)||(s.add(i),n?.({type:"tool.surfaced",tool:i,metadata:{state:"disabled"}}));},isEnabled:i=>a.has(i)&&!s.has(i),list({includeDisabled:i=false}={}){let g=[...a.values()];return i?g:g.filter(u=>!s.has(u.name))},get:i=>a.get(i),async execute(i,g,u){let y=u===void 0?o?.()??null:u,d=a.get(i);if(!d)throw new Error(`Tool "${i}" is not registered.`);if(s.has(i)){let p={decision:"deny",ruleId:`tool:${i}`,reason:"Tool is disabled."};throw n?.({type:"tool.executed",tool:i,agent:y,policy:p,outcome:"blocked"}),new Error(p.reason)}let h=await e(i,{identity:y});if(h.decision==="deny")throw n?.({type:"tool.executed",tool:i,agent:y,policy:h,outcome:"blocked"}),new Error(h.reason);let S=Date.now();try{let p=await d.execute(g,{identity:y});return n?.({type:"tool.executed",tool:i,agent:y,policy:h,outcome:"success",durationMs:Date.now()-S}),p}catch(p){throw n?.({type:"tool.executed",tool:i,agent:y,policy:h,outcome:"error",durationMs:Date.now()-S,error:p instanceof Error?p.message:String(p)}),p}}}};var Se=e=>{let t={name:e.name,description:e.description??"",inputSchema:e.inputSchema??{},tokens:0};return e.group&&(t.group=e.group),e.stage&&(t.page=e.stage),e.outputSchema&&(t.outputSchema=e.outputSchema),t.tokens=Math.ceil(JSON.stringify({name:t.name,description:t.description,inputSchema:t.inputSchema,...t.outputSchema?{outputSchema:t.outputSchema}:{}}).length/4),t},pt=({gatewayUrl:e,siteId:t,publishableKey:r,fetcher:n=fetch})=>({async push(o){let a=o.map(Se),s=await n(`${e.replace(/\/$/,"")}/v1/sites/${encodeURIComponent(t)}/tools`,{method:"PUT",headers:{authorization:`Bearer ${r}`,"content-type":"application/json"},body:JSON.stringify({registry:{tools:a}})});if(!s.ok)throw new Error(`Tool sync failed with status ${s.status}.`);return a.length}});var xe=(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]},a=(s,l)=>{let i=n;if(!r.has(s))throw new Error(`Cannot transition to unknown stage "${s}".`);return s===n?{changed:false,from:i,to:s}:(n=s,t.onTrace?.({type:"tool.progressed",metadata:{from:i,to:s,trigger:l}}),{changed:true,from:i,to:s})};return {current:()=>n,enabledStages:()=>o(),notify(s){let i=r.get(n)?.transitions?.find(g=>g.on===s);return i?a(i.to,s):{changed:false,from:n,to:n}},set(s){return a(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 cr=(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"}},lr=(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("|")}`}},pr=(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"},we=(e,t)=>{let r=cr(e,t.identity);if(!r.ok)return {tool:e,visible:false,reason:r.reason};let n=lr(e,t.identity);if(!n.ok)return {tool:e,visible:false,reason:n.reason};let o=pr(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}},Te=(e,t)=>e.filter(r=>we(r,t).visible),be=(e,t)=>e.map(r=>we(r,t));var Ae="default",ke=e=>{let t=new Map;for(let r of e){let n=r.group??Ae,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}))},ur=e=>[...new Set(e.map(t=>t.group??Ae))].sort();var Ie=e=>e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Ie).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Ie(e[r])}`).join(",")}}`,dt=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=Ie(t).length;return {name:e.name,characters:r,tokens:Math.ceil(r/4)}},Me=e=>{let t=e.map(dt);return {total:t.reduce((n,o)=>n+o.tokens,0),perTool:t}};var yt=e=>{if(e.provider)return e.provider;let r=(e.doc?.defaultView??(typeof globalThis<"u"?globalThis:null))?.navigator?.modelContext;return !r||typeof r.provideContext!="function"?null:r},dr=(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},Pe=(e={})=>{let t=e.invoke??(async(n,o)=>n.execute(o,{identity:null})),r=null;return {publish(n){let o=yt(e);return o?(r?.revoke(),r=o.provideContext({tools:n.map(a=>dr(a,t))}),{revoked:true}):{revoked:false}},revoke(){r?.revoke(),r=null;},available:()=>!!yt(e)}};var z=(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 mt=(e,t)=>e===void 0?t:Math.max(0,Math.min(1,e)),Ee=(e={})=>{let t=mt(e.traceRate,1),r=mt(e.errorRate,1),n=e.random??Math.random;return {shouldKeep(o){let a=o.outcome==="error"?r:t;return n()<a}}};var yr="[REDACTED]",mr=e=>{if(e!==void 0)return JSON.parse(JSON.stringify(e))},Re=(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 a of e)Re(a,t);return}let o=e;if(r in o){if(n.length===0){o[r]=yr;return}Re(o[r],n);}},Ce=(e,t=[])=>{if(t.length===0)return e;let r=mr(e);for(let n of t)Re(r,n.split(".").filter(Boolean));return r},Oe=["metadata.password","metadata.token","metadata.authorization","metadata.cookie"];var fr=()=>typeof location<"u"&&typeof location.pathname=="string"?location.pathname:void 0,gt=e=>{let t=globalThis.crypto;return t&&"randomUUID"in t?`${e}_${t.randomUUID()}`:`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`},F=({siteId:e,bufferSize:t,sessionId:r=gt("ses"),scrubPaths:n=Oe,exporters:o=[],onExporterError:a,pageProvider:s=fr,...l})=>{let i=z(t),g=Ee(l),u=()=>{try{return s()}catch{return}};return {sessionId:r,async emit(y){let d={...y.metadata};if(d.page===void 0){let S=u();S!==void 0&&(d.page=S);}let h=protocol.TraceEvent.parse(Ce({id:gt("trc"),siteId:e,sessionId:r,occurredAt:new Date().toISOString(),outcome:y.outcome??"success",...y,metadata:d},n));return g.shouldKeep(h)?(i.add(h),await Promise.all(o.map(async S=>{try{await S.export([h]);}catch(p){a?.(p,S,h);}})),h):null},list:()=>i.list(),clear:()=>i.clear()}};var J=()=>({name:"console",export(e){for(let t of e)console.info("[agentronics:trace]",t.type,t);}});var q=({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 hr=e=>new Promise(t=>setTimeout(t,e)),X=({url:e,fetcher:t=fetch,maxRetries:r=2,queueLimit:n=500})=>({name:"webhook",async export(o){let s=[...vr(e),...o].slice(-n),l=0;for(;;){let i=await t(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({events:s})});if(i.ok){ft(e,[]);return}if(l>=r)throw ft(e,s),new Error(`Webhook exporter failed with status ${i.status}.`);l+=1,await hr(100*l);}}}),De=e=>`agtx:webhook:${e}`,vr=e=>{if(typeof window>"u"||!window.localStorage)return [];try{let t=window.localStorage.getItem(De(e));return t?JSON.parse(t):[]}catch{return []}},ft=(e,t)=>{if(!(typeof window>"u"||!window.localStorage))try{if(t.length===0){window.localStorage.removeItem(De(e));return}window.localStorage.setItem(De(e),JSON.stringify(t));}catch{}};var ht="/v1/sdk/events",vt=({url:e,ingestKey:t,fetcher:r=fetch})=>{let n=e.replace(/\/$/,""),o=n.endsWith(ht)?n:`${n}${ht}`;return {name:"intel",async export(a){let s={events:a},l=await r(o,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(s)});if(!l.ok)throw new Error(`Intel exporter failed with status ${l.status}.`)}}},St=({url:e,ingestKey:t,siteId:r,fetcher:n=fetch})=>{let o=e.replace(/\/$/,""),a=async(s,l)=>{let i=await n(`${o}${s}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(l)});if(!i.ok)throw new Error(`Intel sync ${s} failed with status ${i.status}.`)};return {async pushTools(s){let l=s.map(Se);return await a("/v1/sdk/tools",{siteId:r,tools:l}),l.length},async pushMemory(s,l){await a("/v1/sdk/memory",{siteId:r,snapshot:s,...typeof l=="number"?{score:l}:{}});}}};var wt="https://gateway.agentronics.dev",wr=e=>{if(e===void 0)return wt;if(e===wt)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}`)},Tt=e=>{let{publishableKey:t,siteId:r="default",debug:n=false,policies:o=[],trace:a={}}=e,s=wr(e.gatewayUrl),l=protocol.classifyApiKey(t);if(l==="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(l!=="publishable")throw new protocol.AgentronicsError("invalid_api_key",`Agentronics.init() expected a key starting with "${protocol.PUBLISHABLE_KEY_PREFIX}".`);let i=a.enabled??true,g=[...n?[J()]:[],...a.gateway?[q({gatewayUrl:s,publishableKey:t})]:[],...a.webhookUrl?[X({url:a.webhookUrl})]:[],...a.exporters??[]],u={siteId:r,exporters:i?g:[],onExporterError:(c,m)=>{n&&console.warn(`[agentronics] trace exporter "${m.name}" failed`,c);}};a.bufferSize!==void 0&&(u.bufferSize=a.bufferSize),a.traceRate!==void 0&&(u.traceRate=a.traceRate),a.errorRate!==void 0&&(u.errorRate=a.errorRate),a.scrubPaths!==void 0&&(u.scrubPaths=a.scrubPaths);let y=F(u),d=c=>{i&&y.emit(c);},h=re(),S={onTrace:d};e.auth!==void 0&&(S.context=e.auth);let p=oe(S),v=ie(),x=ae(o),k=ce({gatewayUrl:s,siteId:r,publishableKey:t}),I=de({onTrace:d}),P={onTrace:d};e.siteMemory!==void 0&&(P.initial=e.siteMemory);let b=me(P),E=ge({gatewayUrl:s,siteId:r,publishableKey:t}),bt=pt({gatewayUrl:s,siteId:r,publishableKey:t}),j=async c=>{let m=Date.now(),w=await G(c),T=h.preferOver(w);return i&&await y.emit({type:T?"agent.detected":"agent.missed",agent:T,durationMs:Date.now()-m,metadata:{detectedClass:w?.class??null,presented:h.snapshot()!==null}}),v.set(T,"detect"),T},Le=async(c,m={})=>{let w=Date.now(),T=m.identity!==void 0?m.identity:await j(),Q=x.evaluate({tool:c,identity:T});return i&&await y.emit({type:"authz.evaluated",tool:c,agent:T,policy:Q,outcome:Q.decision==="deny"?"blocked":"success",durationMs:Date.now()-w}),Q},M=ve({evaluate:Le,setPolicies:c=>x.set(c),listPolicies:()=>x.list(),onTrace:d,identityResolver:()=>v.snapshot().identity});for(let c of e.tools??[])M.register(c);let R=e.progression?xe(e.progression,{onTrace:d}):null,We=c=>{let m={identity:c};return R&&(m.stage=R.current(),m.enabledStages=R.enabledStages()),m},C=c=>Te(M.list(),We(c)),$e=c=>{if(!R)return;R.notify(c).changed&&W.publish(C(v.snapshot().identity));},At={class:"webmcp",trust:"detected",confidence:1,vendor:null,userAgent:typeof navigator<"u"?navigator.userAgent:null,detectionVersion:f,signals:{source:"navigator.modelContext"}},W=Pe({invoke:async(c,m)=>{let w=v.snapshot().identity??At,T=await M.execute(c.name,m,w);return $e(c.name),T}});v.subscribe(c=>{W.available()&&W.publish(C(c.identity));});let Y=e.autoDetect??true,kt=Y===false?Promise.resolve(null):(async()=>{let c=Y===true?{}:Y;try{return await j(c)}catch(m){return n&&console.warn("[agentronics] autoDetect failed:",m),null}})();return Object.freeze({publishableKey:t,siteId:r,gatewayUrl:s,debug:n,memory:I,siteMemory:b,memoryCache:E,tracer:y,auth:p,agentContext:v,authz:x,policyCache:k,tools:M,progression:R,webmcp:W,ready:kt,detect:j,authenticate:async c=>{let m=await p.authenticate(c);return v.set(m,"authenticate"),m},presentIdentity:c=>{let m=h.present(c);return d({type:"auth.identity_presented",agent:m.identity,metadata:{vendor:m.identity.vendor,class:m.identity.class}}),v.set(m.identity,"declare"),m},clearIdentity:()=>{h.clear(),d({type:"auth.identity_cleared"}),v.set(null,"cleared");},presentedIdentity:()=>h.snapshot(),setPolicies:c=>{x.set(c),d({type:"authz.policies_set",metadata:{count:c.length}});},listPolicies:()=>x.list(),syncPolicies:async()=>{let c=await k.sync();return x.set(c.policies),d({type:"authz.policies_set",metadata:{count:c.policies.length,synced:true}}),c.policies},syncSiteMemory:async()=>{let c=await E.sync();return c.memory&&(b.replace(c.memory),d({type:"memory.updated",metadata:{kind:"site",operation:"sync",etag:c.etag}})),c.memory},provideSiteMemory:c=>b.provide(c),provideForPage:c=>{b.provideForPage(c);},installMemoryDelivery:({metaTags:c=true,overlay:m=false}={})=>{let w=[];return c&&w.push(K({snapshot:b.snapshot()})),m&&w.push(H({snapshot:b.snapshot()})),{uninstall:()=>{w.forEach(T=>T.uninstall());}}},fetchWellKnown:async c=>{let m={};c!==void 0&&(m.origin=c);let w=await V(m);return w&&(b.replace(w),d({type:"memory.updated",metadata:{kind:"site",operation:"wellKnown",origin:c??null}})),w},installDomEnforcer:()=>pe({policyEngine:x,getIdentity:()=>j({webmcp:{pollMs:0}})}),registerTool:c=>M.register(c),syncTools:async()=>{let c=M.list({includeDisabled:true}),m=await bt.push(c);return d({type:"tool.registered",metadata:{operation:"sync",count:m}}),m},surfaceTools:({identity:c=null}={})=>C(c),explainSurfacing:({identity:c=null}={})=>be(M.list(),We(c)),groupedTools:({identity:c=null}={})=>ke(C(c)),estimateTokens:({identity:c=null}={})=>Me(C(c)),publishToWebMcp:({identity:c=null}={})=>{let m=C(c),w=W.publish(m);return m.forEach(T=>{d({type:"tool.surfaced",tool:T.name,metadata:{state:"published",trust:c?.trust??null,group:T.group??null}});}),{revoked:w.revoked,surfaced:m.length}},notifyToolInvoked:c=>$e(c),evaluate:Le,traces:()=>y.list(),clearTraces:()=>y.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 m=await c.json().catch(()=>null)??{};return {ok:!0,status:c.status,body:m}}catch(c){return {ok:false,status:0,error:c instanceof Error?c.message:String(c)}}}})};var Pi={init:Tt,declareAgent:te,detectAgent:G},Ei="0.1.0";
|
|
16
|
-
exports.Agentronics=
|
|
15
|
+
`,Bt=e=>{let t=e.siteMap?.pages?.length??0,n=Object.keys(e.workflows).length,o=Object.keys(e.uiGuidance).length;return `Agentronics site memory \xB7 pages:${t} \xB7 workflows:${n} \xB7 ui-hints:${o}`},Z=({doc:e=typeof document>"u"?null:document,snapshot:t,hidden:n=false})=>{if(!e)return {uninstall:()=>{},refresh:()=>{}};let o=e.getElementById(jt);return o||(o=e.createElement("div"),o.id=jt,o.setAttribute("role","note"),o.setAttribute("aria-label","Agentronics site memory summary"),o.setAttribute("data-agent-context","overlay"),e.body.appendChild(o)),o.setAttribute("style",Vn(n)),o.textContent=Bt(t),{uninstall:()=>{o?.remove();},refresh:r=>{o&&(o.textContent=Bt(r));}}};var _e="/.well-known/agent-context.json",ee=async({origin:e,fetcher:t=fetch,signal:n}={})=>{let o=(e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:"")+_e;if(!o.startsWith("http"))return null;let r={headers:{accept:"application/json"}};n!==void 0&&(r.signal=n);let s=await t(o,r);if(!s.ok){if(s.status===404)return null;throw new Error(`well-known agent-context fetch failed with status ${s.status}.`)}let a=await s.json();return protocol.SiteMemory.parse(a)},Gt=({snapshot:e})=>JSON.stringify(protocol.SiteMemory.parse(e));var $e=({evaluate:e,setPolicies:t,listPolicies:n,onTrace:o,identityResolver:r,reviewer:s})=>{let a=new Map,p=new Set,l=i=>{if(!i.authz||!t||!n)return;let d={id:`tool:${i.name}`,tool:i.name,...i.authz,rateLimit:i.rateLimit??i.authz.rateLimit};t([...n().filter(f=>f.id!==d.id),d]);};return {register(i){return a.set(i.name,i),p.delete(i.name),l(i),o?.({type:"tool.registered",tool:i.name,metadata:{version:i.version??null,group:i.group??null,stage:i.stage??null}}),()=>{a.delete(i.name),p.delete(i.name);}},unregister(i){a.delete(i),p.delete(i);},enable(i){!a.has(i)||!p.has(i)||(p.delete(i),o?.({type:"tool.surfaced",tool:i,metadata:{state:"enabled"}}));},disable(i){!a.has(i)||p.has(i)||(p.add(i),o?.({type:"tool.surfaced",tool:i,metadata:{state:"disabled"}}));},isEnabled:i=>a.has(i)&&!p.has(i),list({includeDisabled:i=false}={}){let d=[...a.values()];return i?d:d.filter(f=>!p.has(f.name))},get:i=>a.get(i),async execute(i,d,f,y={}){let x=f===void 0?r?.()??null:f,m=a.get(i);if(!m)throw new Error(`Tool "${i}" is not registered.`);if(p.has(i)){let h={decision:"deny",ruleId:`tool:${i}`,reason:"Tool is disabled."};throw o?.({type:"tool.executed",tool:i,agent:x,policy:h,outcome:"blocked"}),new Error(h.reason)}let u=await e(i,{identity:x});if(u.decision==="deny")throw o?.({type:"tool.executed",tool:i,agent:x,policy:u,outcome:"blocked"}),new Error(u.reason);if(u.decision==="review"){let h={tool:i,input:d,identity:x,reason:u.reason};m.title!==void 0&&(h.title=m.title),m.description!==void 0&&(h.description=m.description);let A=s?await s(h).catch(()=>false):false;if(o?.({type:"authz.evaluated",tool:i,agent:x,policy:u,outcome:A?"success":"blocked",metadata:{review:true,approved:A,reviewer:s?"configured":"none"}}),!A){let I={...u,decision:"deny",reason:s?"The person on the page did not approve this action.":"This action needs review and no reviewer is configured."};throw o?.({type:"tool.executed",tool:i,agent:x,policy:I,outcome:"blocked"}),new Error(I.reason)}u={...u,reason:`${u.reason} Approved by the person on the page.`};}let v=Date.now();try{let h={identity:x};y.signal&&(h.signal=y.signal);let A=await m.execute(d,h);return o?.({type:"tool.executed",tool:i,agent:x,policy:u,outcome:"success",durationMs:Date.now()-v}),A}catch(h){throw o?.({type:"tool.executed",tool:i,agent:x,policy:u,outcome:"error",durationMs:Date.now()-v,error:h instanceof Error?h.message:String(h)}),h}}}};var te=e=>e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(te).join(",")}]`:`{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${te(e[n])}`).join(",")}}`,je=e=>({name:e.name,...e.title?{title:e.title}:{},description:e.description??e.name,...e.inputSchema?{inputSchema:e.inputSchema}:{},...e.annotations?{annotations:e.annotations}:{}}),Be=e=>Math.ceil(te(je(e)).length/4),Kt=e=>{let t=te(je(e)).length;return {name:e.name,characters:t,tokens:Math.ceil(t/4)}},Ne=e=>{let t=e.map(Kt);return {total:t.reduce((o,r)=>o+r.tokens,0),perTool:t}};var Ge=e=>{let t={name:e.name,description:e.description??"",inputSchema:e.inputSchema??{},tokens:0};return e.title&&(t.title=e.title),e.annotations&&(t.annotations={...e.annotations}),e.group&&(t.group=e.group),e.stage&&(t.page=e.stage),e.outputSchema&&(t.outputSchema=e.outputSchema),t.tokens=Be(e),t},Ut=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>({async push(r){let s=r.map(Ge),a=await o(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/tools`,{method:"PUT",headers:{authorization:`Bearer ${n}`,"content-type":"application/json"},body:JSON.stringify({registry:{tools:s}})});if(!a.ok)throw new Error(`Tool sync failed with status ${a.status}.`);return s.length}});var Ke=(e,t={})=>{let n=new Map;for(let a of e.stages)n.set(a.name,a);if(!n.has(e.initial))throw new Error(`Initial stage "${e.initial}" is not declared in progression stages.`);let o=e.initial,r=()=>{let a=n.get(o);return a?.enables?[o,...a.enables]:[o]},s=(a,p)=>{let l=o;if(!n.has(a))throw new Error(`Cannot transition to unknown stage "${a}".`);return a===o?{changed:false,from:l,to:a}:(o=a,t.onTrace?.({type:"tool.progressed",metadata:{from:l,to:a,trigger:p}}),{changed:true,from:l,to:a})};return {current:()=>o,enabledStages:()=>r(),notify(a){let l=n.get(o)?.transitions?.find(i=>i.on===a);return l?s(l.to,a):{changed:false,from:o,to:o}},set(a){return s(a,"manual")},reset(){let a=o;o=e.initial,a!==o&&t.onTrace?.({type:"tool.progressed",metadata:{from:a,to:o,trigger:"reset"}});},snapshot:()=>({current:o,enabled:r()})}};var Fn=(e,t)=>{let n=e.authz?.minTrust;return n?t?protocol.TRUST_RANK[t.trust]<protocol.TRUST_RANK[n]?{ok:false,reason:`trust-too-low:${t.trust}<${n}`}:{ok:true,reason:"trust-ok"}:{ok:false,reason:`requires-trust:${n}`}:{ok:true,reason:"no-trust-floor"}},Hn=(e,t)=>{let n=e.authz?.allowedClasses??[];return n.length===0?{ok:true,reason:"no-class-restriction"}:t?n.includes(t.class)?{ok:true,reason:"class-ok"}:{ok:false,reason:`class-not-allowed:${t.class}`}:{ok:false,reason:`requires-class:${n.join("|")}`}},zn=(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"},Ue=(e,t)=>{let n=Fn(e,t.identity);if(!n.ok)return {tool:e,visible:false,reason:n.reason};let o=Hn(e,t.identity);if(!o.ok)return {tool:e,visible:false,reason:o.reason};let r=zn(e,t);return r.ok?e.authz?.decision==="deny"?{tool:e,visible:false,reason:"authz-deny"}:{tool:e,visible:true,reason:"visible"}:{tool:e,visible:false,reason:r.reason}},Ve=(e,t)=>e.filter(n=>Ue(n,t).visible),Fe=(e,t)=>e.map(n=>Ue(n,t));var He="default",ze=e=>{let t=new Map;for(let n of e){let o=n.group??He,r=t.get(o)??[];r.push(n),t.set(o,r);}return [...t.entries()].sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>({name:n,tools:o}))},Jn=e=>[...new Set(e.map(t=>t.group??He))].sort();var qn=(e,t)=>e==="legacy",Yn=(e,t)=>{let n={name:e.name,description:e.description??e.name,execute:(o,{signal:r})=>t(e,o??{},r)};return e.title!==void 0&&(n.title=e.title),e.inputSchema!==void 0&&(n.inputSchema=e.inputSchema),e.annotations!==void 0&&(n.annotations={...e.annotations}),n},Je=(e={})=>{let t=e.invoke??(async(i,d)=>i.execute(d,{identity:null})),n=null,o=null,r=null,s=[],a=()=>{let i=e.modelContext??e.provider;return i?{source:typeof i.registerTool=="function"?"document":"legacy",context:i}:U(e.host)},p=()=>{n?.abort(),n=null,o?.revoke(),o=null;},l=i=>{if(r||typeof i.addEventListener!="function")return;let d=y=>ye("activated",y.toolName??""),f=y=>ye("cancelled",y.toolName??"");i.addEventListener("toolactivated",d),i.addEventListener("toolcancel",f),r=()=>{i.removeEventListener?.("toolactivated",d),i.removeEventListener?.("toolcancel",f),r=null;};};return {publish(i){let d=a();if(!d)return {revoked:false,registrations:Promise.resolve([])};if(p(),qn(d.source,d.context))return o=d.context.provideContext({tools:i.map(m=>{let u={name:m.name,invoke:v=>t(m,v)};return m.description!==void 0&&(u.description=m.description),m.inputSchema!==void 0&&(u.inputSchema=m.inputSchema),u})}),s=i.map(m=>({name:m.name,status:"callable"})),{revoked:true,registrations:Promise.resolve(s)};let f=d.context;l(f);let y=new AbortController;return n=y,{revoked:true,registrations:Promise.all(i.map(async m=>{try{let u={signal:y.signal};return m.exposedTo?.length&&(u.exposedTo=m.exposedTo),await f.registerTool(Yn(m,t),u),{name:m.name,status:"callable"}}catch(u){return {name:m.name,status:"failed",error:u instanceof Error?`${u.name}: ${u.message}`:String(u)}}})).then(m=>(n===y&&(s=m),m))}},revoke(){p(),r?.(),s=[];},available:()=>!!a(),source:()=>a()?.source??null,status:()=>[...s]}};var Xn=e=>e===null||typeof e!="object"?"":Object.entries(e).slice(0,6).map(([n,o])=>`${n}: ${typeof o=="string"?o:JSON.stringify(o)}`.slice(0,90)).join(`
|
|
16
|
+
`),qe=({documentRef:e=typeof document>"u"?void 0:document,timeoutMs:t=12e4}={})=>n=>new Promise(o=>{if(!e?.body)return o(false);let r=e,s=r.createElement("div");s.setAttribute("data-agentronics-review","true"),Object.assign(s.style,{position:"fixed",inset:"0",zIndex:"2147483647",background:"rgba(11,11,12,0.45)",display:"flex",alignItems:"center",justifyContent:"center",padding:"16px"});let a=r.createElement("div");a.setAttribute("role","dialog"),a.setAttribute("aria-modal","true"),a.setAttribute("aria-label","Approve agent action"),Object.assign(a.style,{width:"min(440px, 100%)",background:"#FFFFFF",color:"#0B0B0C",border:"2px solid #0B0B0C",borderRadius:"16px",padding:"20px",boxShadow:"8px 8px 0 #0B0B0C",font:"14px/1.5 system-ui, -apple-system, 'Segoe UI', sans-serif"});let p=r.createElement("div");p.style.fontWeight="700",p.style.fontSize="16px";let l=n.identity?.vendor??"An AI agent";p.textContent=`${l} wants to ${n.title??n.tool}`;let i=r.createElement("div");i.style.margin="8px 0 0",i.style.color="rgba(11,11,12,0.65)",i.textContent=n.description??"Allow this action on your behalf?";let d=r.createElement("pre"),f=Xn(n.input);Object.assign(d.style,{display:f?"block":"none",margin:"12px 0 0",padding:"10px 12px",background:"rgba(11,11,12,0.06)",borderRadius:"10px",fontSize:"12px",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",whiteSpace:"pre-wrap",overflowWrap:"anywhere"}),d.textContent=f;let y=r.createElement("div");Object.assign(y.style,{display:"flex",gap:"8px",justifyContent:"flex-end",marginTop:"16px"});let x=(R,k)=>{let E=r.createElement("button");return E.type="button",E.textContent=R,Object.assign(E.style,{padding:"9px 16px",borderRadius:"10px",border:"2px solid #0B0B0C",background:k?"#D4FF3A":"#FFFFFF",color:"#0B0B0C",boxShadow:k?"3px 3px 0 #0B0B0C":"none",font:"inherit",fontWeight:"650",cursor:"pointer"}),E},m=x("Not now",false),u=x("Allow",true);y.append(m,u),a.append(p,i,d,y),s.append(a);let v=false,h=R=>{v||(v=true,clearTimeout(I),r.removeEventListener("keydown",A,true),s.remove(),o(R));},A=R=>{R.key==="Escape"&&h(false);},I=setTimeout(()=>h(false),t);u.addEventListener("click",()=>h(true)),m.addEventListener("click",()=>h(false)),r.addEventListener("keydown",A,true),r.body.appendChild(s),u.focus();});var ne=(e=500)=>{let t=[];return {add(n){t.push(n),t.length>e&&t.splice(0,t.length-e);},list(){return [...t]},clear(){t.length=0;}}};var Ft=(e,t)=>e===void 0?t:Math.max(0,Math.min(1,e)),Ye=(e={})=>{let t=Ft(e.traceRate,1),n=Ft(e.errorRate,1),o=e.random??Math.random;return {shouldKeep(r){let s=r.outcome==="error"?n:t;return o()<s}}};var Qn="[REDACTED]",Zn=e=>{if(e!==void 0)return JSON.parse(JSON.stringify(e))},Xe=(e,t)=>{if(t.length===0||typeof e!="object"||e===null)return;let[n,...o]=t;if(!n)return;if(Array.isArray(e)){for(let s of e)Xe(s,t);return}let r=e;if(n in r){if(o.length===0){r[n]=Qn;return}Xe(r[n],o);}},Qe=(e,t=[])=>{if(t.length===0)return e;let n=Zn(e);for(let o of t)Xe(n,o.split(".").filter(Boolean));return n},Ze=["metadata.password","metadata.token","metadata.authorization","metadata.cookie"];var to=()=>typeof location<"u"&&typeof location.pathname=="string"?location.pathname:void 0,Ht=e=>{let t=globalThis.crypto;return t&&"randomUUID"in t?`${e}_${t.randomUUID()}`:`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`},oe=({siteId:e,bufferSize:t,sessionId:n=Ht("ses"),scrubPaths:o=Ze,exporters:r=[],onExporterError:s,pageProvider:a=to,...p})=>{let l=ne(t),i=Ye(p),d=()=>{try{return a()}catch{return}};return {sessionId:n,async emit(f){let y={...f.metadata};if(y.page===void 0){let m=d();m!==void 0&&(y.page=m);}let x=protocol.TraceEvent.parse(Qe({id:Ht("trc"),siteId:e,sessionId:n,occurredAt:new Date().toISOString(),outcome:f.outcome??"success",...f,metadata:y},o));return i.shouldKeep(x)?(l.add(x),await Promise.all(r.map(async m=>{try{await m.export([x]);}catch(u){s?.(u,m,x);}})),x):null},list:()=>l.list(),clear:()=>l.clear()}};var re=()=>({name:"console",export(e){for(let t of e)console.info("[agentronics:trace]",t.type,t);}});var ie=({gatewayUrl:e,publishableKey:t,fetcher:n=fetch})=>({name:"gateway",async export(o){let r={publishableKey:t,events:o};await n(`${e.replace(/\/$/,"")}/v1/pub/traces`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(r)});}});var no=e=>new Promise(t=>setTimeout(t,e)),se=({url:e,fetcher:t=fetch,maxRetries:n=2,queueLimit:o=500})=>({name:"webhook",async export(r){let a=[...oo(e),...r].slice(-o),p=0;for(;;){let l=await t(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({events:a})});if(l.ok){zt(e,[]);return}if(p>=n)throw zt(e,a),new Error(`Webhook exporter failed with status ${l.status}.`);p+=1,await no(100*p);}}}),et=e=>`agtx:webhook:${e}`,oo=e=>{if(typeof window>"u"||!window.localStorage)return [];try{let t=window.localStorage.getItem(et(e));return t?JSON.parse(t):[]}catch{return []}},zt=(e,t)=>{if(!(typeof window>"u"||!window.localStorage))try{if(t.length===0){window.localStorage.removeItem(et(e));return}window.localStorage.setItem(et(e),JSON.stringify(t));}catch{}};var Jt="/v1/sdk/events",tt=({url:e,ingestKey:t,fetcher:n=fetch})=>{let o=e.replace(/\/$/,""),r=o.endsWith(Jt)?o:`${o}${Jt}`;return {name:"intel",async export(s){let a={events:s},p=await n(r,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(a)});if(!p.ok)throw new Error(`Intel exporter failed with status ${p.status}.`)}}},nt=({url:e,ingestKey:t,siteId:n,fetcher:o=fetch})=>{let r=e.replace(/\/$/,""),s=async(l,i)=>{let d=await o(`${r}${l}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(i)});if(!d.ok)throw new Error(`Intel sync ${l} failed with status ${d.status}.`);return d},a=async(l,i)=>{await s(l,i);},p=new Map;return {async pushTools(l){let i=l.map(Ge);return await a("/v1/sdk/tools",{siteId:n,tools:i}),i.length},async pushMemory(l,i){await a("/v1/sdk/memory",{siteId:n,snapshot:l,...typeof i=="number"?{score:i}:{}});},async pullConfig(){let l=await(await s("/v1/sdk/config",{siteId:n})).json();return {policies:Array.isArray(l.policies)?l.policies:[],toolDescriptions:l.toolDescriptions&&typeof l.toolDescriptions=="object"?l.toolDescriptions:{},siteMemory:l.siteMemory&&typeof l.siteMemory=="object"?l.siteMemory:null,fetchedAt:typeof l.fetchedAt=="string"?l.fetchedAt:new Date().toISOString()}},keyVerifier({cacheSeconds:l=60}={}){return async i=>{let d=p.get(i);if(d&&d.until>Date.now())return d.value;let f=null;try{let y=await(await s("/v1/sdk/agent-keys/verify",{key:i})).json();y.valid&&y.agentId&&(f={agentId:y.agentId},y.name&&(f.name=y.name),y.vendor&&(f.vendor=y.vendor));}catch{return d?d.value:null}return p.size>5e3&&p.delete(p.keys().next().value),p.set(i,{value:f,until:Date.now()+l*1e3}),f}}}},qt=tt,Yt=nt;var F="https://api.agentronics.dev",co="https://gateway.agentronics.dev",lo=e=>{if(e===void 0||e.replace(/\/$/,"")===F||e.replace(/\/$/,"")===co)return F;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 API URLs. Omit \`gatewayUrl\` to use the canonical ${F}. The only accepted override is a localhost / 127.0.0.1 URL for local development. Got: ${e}`)},Qt=e=>{let{publishableKey:t,siteId:n="default",debug:o=false,policies:r=[],trace:s={}}=e,a=lo(e.gatewayUrl),p=protocol.classifyApiKey(t);if(p==="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(p!=="publishable")throw new protocol.AgentronicsError("invalid_api_key",`Agentronics.init() expected a key starting with "${protocol.PUBLISHABLE_KEY_PREFIX}".`);let l=s.enabled??true,i=[...o?[re()]:[],...s.gateway?[ie({gatewayUrl:a,publishableKey:t})]:[],...s.webhookUrl?[se({url:s.webhookUrl})]:[],...s.exporters??[]],d={siteId:n,exporters:l?i:[],onExporterError:(c,g)=>{o&&console.warn(`[agentronics] trace exporter "${g.name}" failed`,c);}};s.bufferSize!==void 0&&(d.bufferSize=s.bufferSize),s.traceRate!==void 0&&(d.traceRate=s.traceRate),s.errorRate!==void 0&&(d.errorRate=s.errorRate),s.scrubPaths!==void 0&&(d.scrubPaths=s.scrubPaths);let f=oe(d),y=c=>{l&&f.emit(c);},x=be(),m={onTrace:y};e.auth!==void 0&&(m.context=e.auth),e.compat==="0.6"&&(m.compat="0.6",console.warn("[agentronics] compat: '0.6' is on \u2014 unverified tokens are trusted and review rules run without asking. Remove it once you have upgraded: https://agentronics.dev/docs/guides/upgrade-0-7")),m.onUnverifiedToken=c=>{e.compat!=="0.6"&&console.warn(`[agentronics] A ${c} credential was presented but nothing verifies it, so the agent is 'declared', not 'verified'. Wire auth.verifyToken to your backend: https://agentronics.dev/docs/auth/overview#in-the-browser`);};let u=Te(m),v=Ae(),h=Me(r),A=Ie({gatewayUrl:a,siteId:n,publishableKey:t}),I=Pe({onTrace:y}),R={onTrace:y};e.siteMemory!==void 0&&(R.initial=e.siteMemory);let k=Oe(R),E=Le({gatewayUrl:a,siteId:n,publishableKey:t}),H=Ut({gatewayUrl:a,siteId:n,publishableKey:t}),w=async c=>{let g=Date.now(),S=await J(c),M=x.preferOver(S);return l&&await f.emit({type:M?"agent.detected":"agent.missed",agent:M,durationMs:Date.now()-g,metadata:{detectedClass:S?.class??null,presented:x.snapshot()!==null}}),v.set(M,"detect"),M},T=async(c,g={})=>{let S=Date.now(),M=g.identity!==void 0?g.identity:await w(),C=h.evaluate({tool:c,identity:M});return l&&await f.emit({type:"authz.evaluated",tool:c,agent:M,policy:C,outcome:C.decision==="deny"?"blocked":"success",durationMs:Date.now()-S}),C},G=async()=>true,P=e.review===false?void 0:e.review??(e.compat==="0.6"?G:typeof document>"u"?void 0:qe()),D=$e({evaluate:T,...P?{reviewer:P}:{},setPolicies:c=>h.set(c),listPolicies:()=>h.list(),onTrace:y,identityResolver:()=>v.snapshot().identity});for(let c of e.tools??[])D.register(c);let O=e.progression?Ke(e.progression,{onTrace:y}):null,ot=c=>{let g={identity:c};return O&&(g.stage=O.current(),g.enabledStages=O.enabledStages()),g},rt={...e.toolDescriptions??{}},Zt=c=>c.map(g=>{let S=rt[g.name];return S?{...g,description:S}:g}),W=c=>Zt(Ve(D.list(),ot(c))),it=c=>{rt={...c},_!==null&&(_=null,ae(W(v.snapshot().identity)));},_=null,st=c=>c.map(g=>g.name).sort().join(`
|
|
17
|
+
`),ae=c=>{let g=st(c);return g===_?null:(_=g,$.publish(c))},at=c=>{if(!O)return;O.notify(c).changed&&_!==null&&ae(W(v.snapshot().identity));},ct={class:"webmcp",trust:"detected",confidence:1,vendor:null,userAgent:typeof navigator<"u"?navigator.userAgent:null,detectionVersion:b,signals:{source:"navigator.modelContext"}},$=Je({invoke:async(c,g,S)=>{en(c.name);let M=v.snapshot().identity??ct,C=await D.execute(c.name,g,M,S?{signal:S}:{});return at(c.name),C}}),lt=c=>{let g=v.snapshot().identity;if(g&&g.trust!=="detected"||g?.class==="webmcp")return;let S={...ct,signals:{source:$.source()??"document",tool:c}};v.set(S,"detect"),y({type:"agent.detected",agent:S,metadata:{detectedClass:"webmcp",via:"webmcp-activity"}});},en=c=>lt(c);me(c=>{c.type==="activated"&<(c.toolName);}),v.subscribe(c=>{_===null||!$.available()||ae(W(c.identity));});let ce=e.visionDetection??e.autoDetect!==false,tn=ce===false||typeof document>"u"?null:xe({...ce===true?{}:ce,onDetect:c=>{let g=v.snapshot().identity;g&&(g.trust!=="detected"||g.class==="webmcp")||(v.set(c,"detect"),y({type:"agent.detected",agent:c,metadata:{detectedClass:"screenshot",via:"vision-behaviour"}}));}}),le=e.autoDetect??true,nn=le===false?Promise.resolve(null):(async()=>{let c=le===true?{}:le;try{return await w(c)}catch(g){return o&&console.warn("[agentronics] autoDetect failed:",g),null}})();return Object.freeze({publishableKey:t,siteId:n,gatewayUrl:a,debug:o,memory:I,siteMemory:k,memoryCache:E,tracer:f,auth:u,agentContext:v,authz:h,policyCache:A,tools:D,progression:O,webmcp:$,vision:tn,ready:nn,detect:w,authenticate:async c=>{let g=await u.authenticate(c);return v.set(g,"authenticate"),g},presentIdentity:c=>{let g=x.present(c);return y({type:"auth.identity_presented",agent:g.identity,metadata:{vendor:g.identity.vendor,class:g.identity.class}}),v.set(g.identity,"declare"),g},clearIdentity:()=>{x.clear(),y({type:"auth.identity_cleared"}),v.set(null,"cleared");},presentedIdentity:()=>x.snapshot(),setPolicies:c=>{h.set(c),y({type:"authz.policies_set",metadata:{count:c.length}});},listPolicies:()=>h.list(),syncPolicies:async()=>{let c=await A.sync();return h.set(c.policies),y({type:"authz.policies_set",metadata:{count:c.policies.length,synced:true}}),c.policies},syncSiteMemory:async()=>{let c=await E.sync();return c.memory&&(k.replace(c.memory),y({type:"memory.updated",metadata:{kind:"site",operation:"sync",etag:c.etag}})),c.memory},syncConfig:async()=>{let c=await fetch(`${a.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(n)}/config`,{headers:{authorization:`Bearer ${t}`}});if(!c.ok)throw new Error(`Config sync failed with status ${c.status}.`);let g=await c.json(),S=protocol.PolicyRule.array().parse(g.policies??[]);h.set(S),y({type:"authz.policies_set",metadata:{count:S.length,synced:true}});let M=g.siteMemory&&typeof g.siteMemory=="object"&&Object.keys(g.siteMemory).length?k.replace(protocol.SiteMemory.parse(g.siteMemory)):null,C=g.toolDescriptions&&typeof g.toolDescriptions=="object"?g.toolDescriptions:{};return it(C),{policies:S,toolDescriptions:C,siteMemory:M}},provideSiteMemory:c=>k.provide(c),provideForPage:c=>{k.provideForPage(c);},installMemoryDelivery:({metaTags:c=true,overlay:g=false}={})=>{let S=[];return c&&S.push(Q({snapshot:k.snapshot()})),g&&S.push(Z({snapshot:k.snapshot()})),{uninstall:()=>{S.forEach(M=>M.uninstall());}}},fetchWellKnown:async c=>{let g={};c!==void 0&&(g.origin=c);let S=await ee(g);return S&&(k.replace(S),y({type:"memory.updated",metadata:{kind:"site",operation:"wellKnown",origin:c??null}})),S},installDomEnforcer:()=>Ee({policyEngine:h,getIdentity:()=>w({webmcp:{pollMs:0}})}),registerTool:c=>D.register(c),setToolDescriptions:c=>it(c),syncTools:async()=>{let c=D.list({includeDisabled:true}),g=await H.push(c);return y({type:"tool.registered",metadata:{operation:"sync",count:g}}),g},surfaceTools:({identity:c=null}={})=>W(c),explainSurfacing:({identity:c=null}={})=>Fe(D.list(),ot(c)),groupedTools:({identity:c=null}={})=>ze(W(c)),estimateTokens:({identity:c=null}={})=>Ne(W(c)),publishToWebMcp:({identity:c=null}={})=>{let g=W(c);_=st(g);let S=$.publish(g),M=S.registrations.then(C=>(C.forEach(K=>{y({type:"tool.surfaced",tool:K.name,outcome:K.status==="callable"?"success":"error",...K.error?{error:K.error}:{},metadata:{state:K.status==="callable"?"published":"failed",source:$.source(),trust:c?.trust??null}});}),C));return {revoked:S.revoked,surfaced:g.length,registrations:M}},notifyToolInvoked:c=>at(c),evaluate:T,traces:()=>f.list(),clearTraces:()=>f.clear(),async ping(){try{let c=await fetch(`${a.replace(/\/$/,"")}/v1/pub/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 Es={init:Qt,declareAgent:he,detectAgent:J};exports.Agentronics=Es;exports.CRAWLER_SIGNATURES=ge;exports.DEFAULT_GROUP=He;exports.VERSION=b;exports.WELL_KNOWN_PATH=_e;exports.bundledDetectors=fe;exports.createAgentContextStore=Ae;exports.createAuthEngine=Te;exports.createConsoleExporter=re;exports.createDashboardExporter=qt;exports.createDashboardSync=Yt;exports.createDetectorRegistry=z;exports.createGatewayExporter=ie;exports.createIdentityStore=be;exports.createIntelExporter=tt;exports.createIntelSync=nt;exports.createMemoryCache=Le;exports.createMemoryStore=Pe;exports.createPolicyCache=Ie;exports.createPolicyEngine=Me;exports.createProgressionStore=Ke;exports.createRateLimiter=ke;exports.createReviewPrompt=qe;exports.createSignatureLoader=yt;exports.createSiteMemoryStore=Oe;exports.createToolRegistry=$e;exports.createTraceBuffer=ne;exports.createTracer=oe;exports.createVisionDetector=xe;exports.createWebMcpAdapter=Je;exports.createWebMcpContextTool=$t;exports.createWebhookExporter=se;exports.decideSurfacing=Ue;exports.declareAgent=he;exports.defaultAuthMethods=Se;exports.deriveTrustLevel=An;exports.descriptorTokens=Be;exports.detectAgent=J;exports.detectCrawler=B;exports.detectDom=N;exports.detectWebMcp=j;exports.estimateBudget=Ne;exports.estimateToolTokens=Kt;exports.explainSurfacing=Fe;exports.fetchWellKnownContext=ee;exports.groupTools=ze;exports.highestTrust=we;exports.init=Qt;exports.installDomEnforcer=Ee;exports.installMemoryOverlay=Z;exports.installMetaTags=Q;exports.listGroupNames=Jn;exports.modelFacingDescriptor=je;exports.onWebMcpActivity=me;exports.previewAuthMethods=Mt;exports.resolveModelContext=U;exports.scoreVisionSignals=ve;exports.serializeWellKnownContext=Gt;exports.showDenyOverlay=Re;exports.surfaceTools=Ve;exports.webMcpSupport=ut;//# sourceMappingURL=index.cjs.map
|
|
17
18
|
//# sourceMappingURL=index.cjs.map
|