@agentronics/sdk 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/chunk-4FLZQPCO.js +18 -0
  2. package/dist/chunk-4FLZQPCO.js.map +1 -0
  3. package/dist/{chunk-X7NFMFN6.js → chunk-6QQS26AP.js} +264 -69
  4. package/dist/chunk-6QQS26AP.js.map +1 -0
  5. package/dist/chunk-BPDWJCPY.js +2 -0
  6. package/dist/chunk-BPDWJCPY.js.map +1 -0
  7. package/dist/index.cjs +8 -7
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +57 -8
  10. package/dist/index.d.ts +57 -8
  11. package/dist/index.global.js +8 -7
  12. package/dist/index.global.js.map +1 -1
  13. package/dist/index.js +1 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/{init-only-7f8_LQAI.d.ts → init-only-C80qhujz.d.ts} +227 -30
  16. package/dist/{init-only-Cwll8MGz.d.cts → init-only-s9E9bVC0.d.cts} +227 -30
  17. package/dist/init-only.cjs +8 -7
  18. package/dist/init-only.cjs.map +1 -1
  19. package/dist/init-only.d.cts +2 -2
  20. package/dist/init-only.d.ts +2 -2
  21. package/dist/init-only.global.js +8 -7
  22. package/dist/init-only.global.js.map +1 -1
  23. package/dist/init-only.js +1 -1
  24. package/dist/lite.cjs +1 -1
  25. package/dist/lite.cjs.map +1 -1
  26. package/dist/lite.d.cts +2 -2
  27. package/dist/lite.d.ts +2 -2
  28. package/dist/lite.global.js +1 -1
  29. package/dist/lite.global.js.map +1 -1
  30. package/dist/lite.js +1 -1
  31. package/dist/middleware-Dd2T772u.d.cts +429 -0
  32. package/dist/middleware-Dd2T772u.d.ts +429 -0
  33. package/dist/next.cjs +239 -64
  34. package/dist/next.cjs.map +1 -1
  35. package/dist/next.d.cts +2 -2
  36. package/dist/next.d.ts +2 -2
  37. package/dist/next.js +2 -2
  38. package/dist/server.cjs +361 -66
  39. package/dist/server.cjs.map +1 -1
  40. package/dist/server.d.cts +103 -308
  41. package/dist/server.d.ts +103 -308
  42. package/dist/server.js +93 -1
  43. package/dist/server.js.map +1 -1
  44. package/dist/webmcp-BgKzHeQ3.d.cts +97 -0
  45. package/dist/webmcp-BgKzHeQ3.d.ts +97 -0
  46. package/package.json +4 -4
  47. package/dist/chunk-LLD3Y2LZ.js +0 -2
  48. package/dist/chunk-LLD3Y2LZ.js.map +0 -1
  49. package/dist/chunk-X7NFMFN6.js.map +0 -1
  50. package/dist/chunk-Y7JYD5RA.js +0 -17
  51. package/dist/chunk-Y7JYD5RA.js.map +0 -1
  52. package/dist/webmcp-C4ikhM4g.d.cts +0 -12
  53. package/dist/webmcp-C4ikhM4g.d.ts +0 -12
@@ -0,0 +1,18 @@
1
+ import {a,f,d,b,c}from'./chunk-BPDWJCPY.js';import {AgentClass,isHigherTrust,IdentityClaim,AgentronicsError,PolicyRule,MemoryEntry,SiteMemory,SITE_MEMORY_DEFAULT,TraceEvent,classifyApiKey,PUBLISHABLE_KEY_PREFIX,TRUST_RANK,SiteMemoryPageContext}from'@agentronics/protocol';var Me=[{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}],N=(e={})=>{let{signatures:t=Me,disable:n=false,confidence:o=.9}=e;if(n||typeof navigator>"u")return null;let i=navigator.userAgent??"";if(!i)return null;for(let s of t)if(s.pattern.test(i))return {class:"crawler",trust:"detected",confidence:o,vendor:s.name,userAgent:i,detectionVersion:a,signals:{matched:s.name,category:s.category,ua:i}};return null};var Ut=[/HeadlessChrome/i,/Headless/i,/PhantomJS/i,/SlimerJS/i],Kt=()=>({hit:(typeof navigator<"u"&&navigator.webdriver)===true,weight:.6,detail:"navigator.webdriver === true"}),Vt=()=>{if(typeof window>"u")return {hit:false,weight:.5};let e=Object.keys(window).filter(t=>t.startsWith("cdc_"));return {hit:e.length>0,weight:.5,detail:`window.${e[0]??"cdc_*"}`}},Ft=["__playwright__binding__","__pwInitScripts","__puppeteer_evaluation_script__","_phantom","callPhantom","__nightmare","domAutomation","domAutomationController","__selenium_unwrapped","__webdriver_evaluate","__driver_evaluate","__fxdriver_unwrapped"],Ht=()=>{if(typeof window>"u")return {hit:false,weight:.6};let e=Ft.find(t=>t in window);return e?{hit:true,weight:.6,detail:`window.${e}`}:{hit:false,weight:.6}},zt=()=>{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"}},Jt=()=>{if(typeof navigator>"u")return {hit:false,weight:.7};let e=navigator.userAgent??"",t=Ut.some(n=>n.test(e));return t?{hit:t,weight:.7,detail:`headless UA: ${e}`}:{hit:t,weight:.7}},qt=()=>{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"}},Yt=()=>{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"}},Xt={webdriver:Kt,chromedriver:Vt,automationGlobals:Ht,headlessUa:Jt,languages:qt,permissions:Yt,plugins:zt},U=(e={})=>{let{threshold:t=.4}=e,n={},o=0,i=0;for(let[a,u]of Object.entries(Xt)){let l=u();o+=l.weight,n[a]={hit:l.hit,weight:l.weight,detail:l.detail},l.hit&&(i+=l.weight);}let s=o===0?0:i/o;return s<t?null:{class:"dom",trust:"detected",confidence:s,vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:n}};var Ee=()=>[{id:"webmcp.model-context",status:"stable",detect:()=>f({pollMs:0})},{id:"crawler.user-agent",status:"beta",detect:()=>N()},{id:"dom.automation-heuristics",status:"beta",detect:()=>U()}],ee=(e=Ee())=>{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(i=>i.status===n):o},async detectAll(n=false){for(let o of t.values()){if(o.status==="research"&&!n)continue;let i=await o.detect();if(i)return i}return null}}};var Zt=e=>{let t=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:a,signals:{declared:true,hasVerificationToken:!!e.verificationToken}}};var en=({gatewayUrl:e,publishableKey:t,fetcher:n=fetch})=>{let o=null,i=[];return {snapshot(){return [...i]},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 i=(await s.json()).signatures??[],o=s.headers.get("etag"),this.snapshot()}}};var Re=async(e={})=>{if(e.customDetectors?.length){let t=await ee(e.customDetectors).detectAll(!!e.experimental);if(t)return t}if(e.webmcp!==false){let t=await f(e.webmcp??{});if(t)return t}if(e.crawler!==false){let t=N(e.crawler??{});if(t)return t}if(e.dom!==false){let t=U(e.dom??{});if(t)return t}return null};var tn=new Set(["1024x768","1280x800","1280x720","1280x1024","1440x900","1920x1080"]),nn=e=>{if(e.length<6)return null;let t=e.reduce((o,i)=>o+i,0)/e.length;if(t<=0)return null;let n=e.reduce((o,i)=>o+(i-t)**2,0)/e.length;return Math.sqrt(n)/t},Pe=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)},Ce=(e={})=>{let{threshold:t=.6,minInteractions:n=3,onDetect:o,acceptUntrustedEvents:i=false}=e,s=b=>b.isTrusted||i,a$1=e.documentRef??(typeof document>"u"?void 0:document),u={clicks:0,teleportClicks:0,centreClicks:0,keyIntervals:0,keyIntervalCv:null,insertWithoutKeys:0,pointerMoves:0,wheelEvents:0,vmViewport:false},l=Number.NEGATIVE_INFINITY,r=0,p=0,f=[],m=0,h=null,g=a$1?.defaultView;g&&(u.vmViewport=tn.has(`${g.innerWidth}x${g.innerHeight}`));let d=b=>({class:"screenshot",trust:"detected",confidence:Number(b.toFixed(2)),vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{vision:true,...u}}),w=()=>{if(h||u.clicks+m<n)return;let b=Pe(u);b>=t&&(h=d(b),o?.(h));},v=b=>{s(b)&&(u.pointerMoves+=1,l=b.timeStamp);},F=[["pointermove",v],["mousemove",v],["wheel",b=>{s(b)&&(u.wheelEvents+=1);}],["click",b=>{if(!s(b))return;let T=b;u.clicks+=1,b.timeStamp-l>400&&(u.teleportClicks+=1);let B=T.target instanceof Element?T.target:null;if(B&&typeof B.getBoundingClientRect=="function"){let C=B.getBoundingClientRect();if(C.width>8&&C.height>8){let D=Math.abs(T.clientX-(C.left+C.width/2)),O=Math.abs(T.clientY-(C.top+C.height/2));D<=1.5&&O<=1.5&&(u.centreClicks+=1);}}w();}],["keydown",b=>{if(!s(b))return;let T=b.timeStamp;r&&T-r<1500?(f.push(T-r),f.length>60&&f.shift(),u.keyIntervals=f.length,u.keyIntervalCv=nn(f)):m+=1,r=T,p=T;}],["keyup",()=>w()],["input",b=>{if(!s(b))return;let T=b;T.inputType==="insertText"&&T.data&&T.data.length>1&&b.timeStamp-p>200&&(u.insertWithoutKeys+=1,m+=1,w());}]];for(let[b,T]of F)a$1?.addEventListener(b,T,{capture:true,passive:true});return {signals:()=>({...u}),score:()=>Pe(u),detected:()=>h,stop:()=>{for(let[b,T]of F)a$1?.removeEventListener(b,T,{capture:true});}}};var an=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),De=()=>{let e=null;return {present(t){let n=IdentityClaim.safeParse(t);if(!n.success)throw new AgentronicsError("invalid_api_key",`Invalid identity claim: ${n.error.issues[0]?.message??"unknown"}`);let o={claim:n.data,identity:an(n.data)};return e=o,o},clear(){e=null;},preferOver(t){return e?t?isHigherTrust(e.identity.trust,t.trust)?e.identity:t:e.identity:t},snapshot(){return e}}};var Eo=({detected:e,declared:t,verified:n,linked:o})=>o?"linked":n?"verified":t?"declared":"detected",Le=e=>{let t=null;for(let n of e)(!t||TRUST_RANK[n.trust]>TRUST_RANK[t.trust])&&(t=n);return t};var $e=()=>({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:a,signals:{bearer:true,verifiedRemotely:!!n}}}});var je=()=>({name:"detection",async authenticate(e){return e.detected??null}});var _e=()=>({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:a,signals:{extensionToken:true,verifiedRemotely:!!n}}}});var Be=()=>({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:a,signals:{mtls:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var We=()=>({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:a,signals:{oauth2:true,subject:e.oauth2Subject??null,verifiedRemotely:!!n}}}});var ln=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),Ge=()=>({name:"selfDeclaration",async authenticate(e){return e.declaration?ln(IdentityClaim.parse(e.declaration)):null}});var Ne=()=>({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:a,signals:{sessionLink:true,linkedUserId:e.linkedUserId??null,verifiedRemotely:!!n}}}});var Ue=()=>({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:a,signals:{sso:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var Ke=()=>({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:a,signals:{spiffe:true,spiffeId:n?.subject??null,subject:n?.subject??null,verifiedRemotely:!!n,...o?{googleAgent:true}:{},...n?.signals??{}}}}});var Ve=()=>({name:"xAgentHeader",async authenticate(e){if(!e.xAgentHeader)return null;let[t="x-agent",n="dom",o]=e.xAgentHeader.split(";"),i=AgentClass.safeParse(n);return {class:i.success?i.data:"dom",trust:"declared",confidence:o?1:.8,vendor:t,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{xAgentHeader:true,hasProof:!!o}}}});var He=new Set(["bearer","extensionToken","sessionLink","oauth2","sso","spiffe","mtls"]),dn=(e,t,n)=>{if(He.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},Fe=()=>[je(),Ge(),$e(),Ve(),_e(),Ne(),We()],pn=()=>[Ue(),Ke(),Be()],mn={detection:"detection",selfDeclaration:"declaration",bearer:"bearer",xAgentHeader:"x-agent-header",extensionToken:"extension",sessionLink:"session-link",oauth2:"oauth2",sso:"sso",spiffe:"spiffe",mtls:"mtls"},gn=(e,t)=>e==="spiffe"&&t.signals?.googleAgent===true?"google-agent":mn[e],ze=({compat:e,methods:t=e==="0.6"?[...Fe(),...pn()]:Fe(),context:n={},onTrace:o,onUnverifiedToken:i}={})=>{let s=false;return {async authenticate(a){let u=[],l={};for(let g of t){let d=await g.authenticate(a,n);l[g.name]=!!d,d&&(He.has(g.name)&&d.signals?.verifiedRemotely===false&&!n.verifyToken&&!s&&(s=true,i?.(g.name)),e==="0.6"&&(d=dn(g.name,d,a)),u.push({method:g.name,identity:d}));}let r=Le(u.map(g=>g.identity)),p=r?u.find(g=>g.identity===r):void 0,f=p?gn(p.method,p.identity):void 0,m=typeof r?.signals?.subject=="string"?r.signals.subject:void 0,h={type:r?"auth.identity_presented":"sdk.error",agent:r,outcome:r?"success":"error",metadata:{methods:l,...f?{protocol:f}:{},...m?{subject:m}:{}}};return r||(h.error="No auth method produced an identity."),o?.(h),r},methods(){return t.map(a=>a.name)}}};var yn={identity:null,source:"initial",updatedAt:null},Je=()=>{let e=yn,t=new Set,n=()=>{t.size!==0&&t.forEach(o=>o(e));};return {snapshot(){return e},set(o,i){e={identity:o,source:i,updatedAt:new Date().toISOString()},n();},subscribe(o){return t.add(o),()=>{t.delete(o);}}}};var fn=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,n)=>{e.set(t,n);}}},hn=()=>typeof window>"u"||!window.localStorage?fn():{read:e=>{try{return window.localStorage.getItem(e)}catch{return null}},write:(e,t)=>{try{window.localStorage.setItem(e,t);}catch{}}},vn=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},qe=(e=hn())=>({consume(t,n,o=Date.now()){let i=`agtx:rate:${t}`,s=vn(e.read(i)),a=s&&s.resetAt>o?s.resetAt:o+n.windowSeconds*1e3,u=s&&s.resetAt>o?s.count+1:1;return e.write(i,JSON.stringify({count:u,resetAt:a})),{allowed:u<=n.max,remaining:Math.max(0,n.max-u),resetAt:a}}});var wn=(e,t)=>e==="*"||e===t?true:e.includes("*")?new RegExp("^"+e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*")+"$").test(t):false,bn=(e,t)=>{let n=e?TRUST_RANK[e.trust]:-1,o=TRUST_RANK[t.minTrust];return n>=o},xn=(e,t)=>t.allowedClasses.length===0?true:e?t.allowedClasses.includes(e.class):false,Qe="allow",Sn=(e,t)=>{let n=t?.class??"unknown",o=t?.vendor??"unknown",i=t?.trust??"none";return `${e}:${n}:${o}:${i}`},Ze=(e=[],t={})=>{let n=e.map(i=>PolicyRule.parse(i)),o=t.rateLimiter??qe();return {set(i){n=i.map(s=>PolicyRule.parse(s));},list(){return [...n]},evaluate({tool:i,identity:s}){for(let a of n)if(wn(a.tool,i)){if(!bn(s,a))return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" requires trust >= ${a.minTrust}.`};if(!xn(s,a))return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" restricts to classes: ${a.allowedClasses.join(", ")}.`};if(a.rateLimit){let u=o.consume(Sn(i,s),a.rateLimit);if(!u.allowed)return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" rate limit exceeded. Resets at ${new Date(u.resetAt).toISOString()}.`}}return {decision:a.decision,ruleId:a.id,reason:`Matched rule "${a.id}".`}}return {decision:Qe,ruleId:null,reason:`No rule matched tool "${i}". Falling back to "${Qe}".`}}}};var et=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>{let i={policies:[],etag:null};return {snapshot(){return {policies:[...i.policies],etag:i.etag}},async sync(){let s=await o(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/policies`,{headers:{authorization:`Bearer ${n}`,...i.etag?{"if-none-match":i.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 i={policies:PolicyRule.array().parse(a.policies??[]),etag:s.headers.get("etag")},this.snapshot()}}};var tt=({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 nt=({policyEngine:e,getIdentity:t,documentRef:n=typeof document>"u"?void 0:document,selector:o="[data-agentronics-tool]"})=>{if(!n)return {uninstall:()=>{}};let i=s=>{let a=s.target instanceof Element?s.target.closest(o):null;if(!(a instanceof HTMLElement))return;let u=a.dataset.agentronicsTool;u&&Promise.resolve(t()).then(l=>{let r=e.evaluate({tool:u,identity:l});r.decision==="deny"&&(s.preventDefault(),s.stopPropagation(),tt({message:r.reason,documentRef:n}));});};return n.addEventListener("click",i,true),{uninstall:()=>n.removeEventListener("click",i,true)}};var te=()=>{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()]}},ot=(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 i=e.key(o);i&&i.startsWith(t)&&n.push(i.slice(t.length));}}catch{}return n}}),rt="agtx:",it=()=>{let e=typeof window<"u",t=e&&typeof window.sessionStorage<"u"?ot(window.sessionStorage,rt+"session:"):te(),n=e&&typeof window.localStorage<"u"?ot(window.localStorage,rt+"user:"):te();return {session:t,user:n,org:te()}};var at=(e,t)=>e.expiresAt!==null&&e.expiresAt<=t,ct=e=>{if(!e)return null;try{let t=JSON.parse(e);return typeof t!="object"||t===null?null:t}catch{return null}},An=e=>JSON.stringify(e),lt=(e={})=>{let t=it(),n=l=>{e.onTrace?.(l);};return {get:(l,r={})=>{let p=r.scope??"session",f=t[p],m=ct(f.read(l));if(!m){n({type:"memory.accessed",metadata:{operation:"get",key:l,scope:p,hit:false}});return}if(at(m,Date.now())){f.remove(l),n({type:"memory.accessed",metadata:{operation:"get",key:l,scope:p,hit:false,expired:true}});return}return n({type:"memory.accessed",metadata:{operation:"get",key:l,scope:p,hit:true}}),m.value},set:(l,r,p={})=>{let f=p.scope??"session",m=p.ttlSeconds??null,h=Date.now(),g={value:r,expiresAt:m===null?null:h+m*1e3,updatedAt:new Date(h).toISOString()};return t[f].write(l,An(g)),n({type:"memory.updated",metadata:{operation:"set",key:l,scope:f,ttlSeconds:m}}),MemoryEntry.parse({key:l,value:r,scope:f,ttlSeconds:m,updatedAt:g.updatedAt})},remove:(l,r={})=>{let p=r.scope??"session";t[p].remove(l),n({type:"memory.updated",metadata:{operation:"remove",key:l,scope:p}});},list:(l={})=>{let r=l.scope??"session",p=t[r],f=Date.now(),m=[];for(let h of p.keys()){let g=ct(p.read(h));if(g){if(at(g,f)){p.remove(h);continue}m.push(MemoryEntry.parse({key:h,value:g.value,scope:r,ttlSeconds:g.expiresAt===null?null:Math.max(0,Math.round((g.expiresAt-f)/1e3)),updatedAt:g.updatedAt}));}}return n({type:"memory.accessed",metadata:{operation:"list",scope:r,count:m.length}}),m},clear:(l={})=>{let r=l.scope??"session",p=t[r],f=p.keys().length;for(let m of p.keys())p.remove(m);n({type:"memory.updated",metadata:{operation:"clear",scope:r,count:f}});}}};var ne=e=>SiteMemory.parse(JSON.parse(JSON.stringify(e))),H=e=>({...e,updatedAt:new Date().toISOString()}),ut=(e={})=>{let t=SiteMemory.parse({...SITE_MEMORY_DEFAULT,...e.initial??{}}),n=null,o=new Set,i=d=>{e.onTrace?.(d);},s=()=>{n=null;},a=()=>{if(o.size===0)return;let d=ne(t);n=d,o.forEach(w=>w(d));},u=d=>{let w=SiteMemory.parse({...t,...d,workflows:{...t.workflows,...d.workflows??{}},policies:{...t.policies,...d.policies??{}},uiGuidance:{...t.uiGuidance,...d.uiGuidance??{}},pageContexts:{...t.pageContexts,...d.pageContexts??{}}});return t=H(w),s(),i({type:"memory.updated",metadata:{kind:"site",operation:"provide",keys:Object.keys(d)}}),a(),p()},l=(d,w)=>{let v=d.split(".").filter(Boolean);if(v.length===0)throw new Error("siteMemory.update() requires a non-empty dot-path.");let A=JSON.parse(JSON.stringify(t)),M=A;for(let E=0;E<v.length-1;E++){let k=v[E],R=M[k];(typeof R!="object"||R===null||Array.isArray(R))&&(M[k]={}),M=M[k];}return M[v[v.length-1]]=w,t=H(SiteMemory.parse(A)),s(),i({type:"memory.updated",metadata:{kind:"site",operation:"update",path:d}}),a(),p()},r=d=>{let w=SiteMemoryPageContext.parse({path:d.path,payload:d.payload,updatedAt:new Date().toISOString()});return t=H({...t,pageContexts:{...t.pageContexts,[d.path]:w}}),s(),i({type:"memory.updated",metadata:{kind:"site",operation:"provideForPage",path:d.path}}),a(),{...w,payload:{...w.payload}}},p=()=>(n||(n=ne(t)),n);return {provide:u,update:l,provideForPage:r,snapshot:p,get:d=>{if(i({type:"memory.accessed",metadata:{kind:"site",operation:d?"get":"snapshot",path:d??null}}),!d)return ne(t);let w=d.split(".").filter(Boolean),v=t;for(let A of w){if(typeof v!="object"||v===null)return;v=v[A];}return v},getForPage:d=>{i({type:"memory.accessed",metadata:{kind:"site",operation:"getForPage",path:d}});let w=t.pageContexts[d];return w?{...w,payload:{...w.payload}}:null},replace:d=>(t=H(SiteMemory.parse(d)),s(),a(),p()),subscribe:d=>(o.add(d),()=>{o.delete(d);})}};var pt=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>{let i={memory:null,etag:null};return {snapshot(){return {memory:i.memory?SiteMemory.parse(i.memory):null,etag:i.etag}},async sync(){let s=await o(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/memory`,{headers:{authorization:`Bearer ${n}`,...i.etag?{"if-none-match":i.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 i={memory:SiteMemory.parse(a.memory??{}),etag:s.headers.get("etag")},this.snapshot()}}};var Mn=({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(i={}){let s=n(),a=i.path??null;if(o?.(a),!a)return {content:s};let u=a.split(".").filter(Boolean),l=s;for(let r of u){if(typeof l!="object"||l===null)return {content:void 0};l=l[r];}return {content:l}}});var L="agent-context-",oe="agentronics-site-context",En=e=>{try{return JSON.stringify(e)}catch{return "{}"}},z=(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);},J=(e,t)=>{e.querySelectorAll(`meta[name="${t}"]`).forEach(n=>n.remove());},re=({doc:e=typeof document>"u"?null:document,snapshot:t,schemaType:n="WebSite"})=>{if(!e)return {uninstall:()=>{}};z(e,`${L}version`,t.version),z(e,`${L}updated-at`,t.updatedAt??new Date().toISOString()),t.siteMap?.navigation?.flow&&z(e,`${L}flow`,t.siteMap.navigation.flow),z(e,`${L}workflows`,Object.keys(t.workflows).join(","));let o=e.getElementById(oe);return o||(o=e.createElement("script"),o.type="application/ld+json",o.id=oe,e.head.appendChild(o)),o.textContent=En({"@context":"https://schema.org","@type":n,name:"Agentronics Site Memory",agentronics:t}),{uninstall:()=>{J(e,`${L}version`),J(e,`${L}updated-at`),J(e,`${L}flow`),J(e,`${L}workflows`),e.getElementById(oe)?.remove();}}};var mt="agentronics-memory-overlay",Rn=e=>`
2
+ position: fixed;
3
+ bottom: 16px;
4
+ right: 16px;
5
+ max-width: 320px;
6
+ padding: 10px 12px;
7
+ background: rgba(11, 11, 12, 0.92);
8
+ color: #ffffff;
9
+ font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace;
10
+ border: 1px solid rgba(255, 255, 255, 0.15);
11
+ border-radius: 10px;
12
+ z-index: 2147483647;
13
+ opacity: ${e?"0":"1"};
14
+ pointer-events: ${e?"none":"auto"};
15
+ `,gt=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}`},ie=({doc:e=typeof document>"u"?null:document,snapshot:t,hidden:n=false})=>{if(!e)return {uninstall:()=>{},refresh:()=>{}};let o=e.getElementById(mt);return o||(o=e.createElement("div"),o.id=mt,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",Rn(n)),o.textContent=gt(t),{uninstall:()=>{o?.remove();},refresh:i=>{o&&(o.textContent=gt(i));}}};var ft="/.well-known/agent-context.json",se=async({origin:e,fetcher:t=fetch,signal:n}={})=>{let o=(e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:"")+ft;if(!o.startsWith("http"))return null;let i={headers:{accept:"application/json"}};n!==void 0&&(i.signal=n);let s=await t(o,i);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 SiteMemory.parse(a)},Pn=({snapshot:e})=>JSON.stringify(SiteMemory.parse(e));var ht=({evaluate:e,setPolicies:t,listPolicies:n,onTrace:o,identityResolver:i,reviewer:s})=>{let a=new Map,u=new Set,l=r=>{if(!r.authz||!t||!n)return;let p={id:`tool:${r.name}`,tool:r.name,...r.authz,rateLimit:r.rateLimit??r.authz.rateLimit};t([...n().filter(f=>f.id!==p.id),p]);};return {register(r){return a.set(r.name,r),u.delete(r.name),l(r),o?.({type:"tool.registered",tool:r.name,metadata:{version:r.version??null,group:r.group??null,stage:r.stage??null}}),()=>{a.delete(r.name),u.delete(r.name);}},unregister(r){a.delete(r),u.delete(r);},enable(r){!a.has(r)||!u.has(r)||(u.delete(r),o?.({type:"tool.surfaced",tool:r,metadata:{state:"enabled"}}));},disable(r){!a.has(r)||u.has(r)||(u.add(r),o?.({type:"tool.surfaced",tool:r,metadata:{state:"disabled"}}));},isEnabled:r=>a.has(r)&&!u.has(r),list({includeDisabled:r=false}={}){let p=[...a.values()];return r?p:p.filter(f=>!u.has(f.name))},get:r=>a.get(r),async execute(r,p,f,m={}){let h=f===void 0?i?.()??null:f,g=a.get(r);if(!g)throw new Error(`Tool "${r}" is not registered.`);if(u.has(r)){let v={decision:"deny",ruleId:`tool:${r}`,reason:"Tool is disabled."};throw o?.({type:"tool.executed",tool:r,agent:h,policy:v,outcome:"blocked"}),new Error(v.reason)}let d=await e(r,{identity:h});if(d.decision==="deny")throw o?.({type:"tool.executed",tool:r,agent:h,policy:d,outcome:"blocked"}),new Error(d.reason);if(d.decision==="review"){let v={tool:r,input:p,identity:h,reason:d.reason};g.title!==void 0&&(v.title=g.title),g.description!==void 0&&(v.description=g.description);let A=s?await s(v).catch(()=>false):false;if(o?.({type:"authz.evaluated",tool:r,agent:h,policy:d,outcome:A?"success":"blocked",metadata:{review:true,approved:A,reviewer:s?"configured":"none"}}),!A){let M={...d,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:r,agent:h,policy:M,outcome:"blocked"}),new Error(M.reason)}d={...d,reason:`${d.reason} Approved by the person on the page.`};}let w=Date.now();try{let v={identity:h};m.signal&&(v.signal=m.signal);let A=await g.execute(p,v);return o?.({type:"tool.executed",tool:r,agent:h,policy:d,outcome:"success",durationMs:Date.now()-w}),A}catch(v){throw o?.({type:"tool.executed",tool:r,agent:h,policy:d,outcome:"error",durationMs:Date.now()-w,error:v instanceof Error?v.message:String(v)}),v}}}};var q=e=>e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(q).join(",")}]`:`{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${q(e[n])}`).join(",")}}`,vt=e=>({name:e.name,...e.title?{title:e.title}:{},description:e.description??e.name,...e.inputSchema?{inputSchema:e.inputSchema}:{},...e.annotations?{annotations:e.annotations}:{}}),wt=e=>Math.ceil(q(vt(e)).length/4),Cn=e=>{let t=q(vt(e)).length;return {name:e.name,characters:t,tokens:Math.ceil(t/4)}},bt=e=>{let t=e.map(Cn);return {total:t.reduce((o,i)=>o+i.tokens,0),perTool:t}};var xt=(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,i=()=>{let a=n.get(o);return a?.enables?[o,...a.enables]:[o]},s=(a,u)=>{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:u}}),{changed:true,from:l,to:a})};return {current:()=>o,enabledStages:()=>i(),notify(a){let l=n.get(o)?.transitions?.find(r=>r.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:i()})}};var Dn=(e,t)=>{let n=e.authz?.minTrust;return n?t?TRUST_RANK[t.trust]<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"}},On=(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("|")}`}},Ln=(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"},Tt=(e,t)=>{let n=Dn(e,t.identity);if(!n.ok)return {tool:e,visible:false,reason:n.reason};let o=On(e,t.identity);if(!o.ok)return {tool:e,visible:false,reason:o.reason};let i=Ln(e,t);return i.ok?e.authz?.decision==="deny"?{tool:e,visible:false,reason:"authz-deny"}:{tool:e,visible:true,reason:"visible"}:{tool:e,visible:false,reason:i.reason}},At=(e,t)=>e.filter(n=>Tt(n,t).visible),kt=(e,t)=>e.map(n=>Tt(n,t));var It="default",Mt=e=>{let t=new Map;for(let n of e){let o=n.group??It,i=t.get(o)??[];i.push(n),t.set(o,i);}return [...t.entries()].sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>({name:n,tools:o}))},Ur=e=>[...new Set(e.map(t=>t.group??It))].sort();var $n=(e,t)=>e==="legacy",jn=(e,t)=>{let n={name:e.name,description:e.description??e.name,execute:(o,{signal:i})=>t(e,o??{},i)};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},Et=(e={})=>{let t=e.invoke??(async(r,p)=>r.execute(p,{identity:null})),n=null,o=null,i=null,s=[],a=()=>{let r=e.modelContext??e.provider;return r?{source:typeof r.registerTool=="function"?"document":"legacy",context:r}:b(e.host)},u=()=>{n?.abort(),n=null,o?.revoke(),o=null;},l=r=>{if(i||typeof r.addEventListener!="function")return;let p=m=>c("activated",m.toolName??""),f=m=>c("cancelled",m.toolName??"");r.addEventListener("toolactivated",p),r.addEventListener("toolcancel",f),i=()=>{r.removeEventListener?.("toolactivated",p),r.removeEventListener?.("toolcancel",f),i=null;};};return {publish(r){let p=a();if(!p)return {revoked:false,registrations:Promise.resolve([])};if(u(),$n(p.source,p.context))return o=p.context.provideContext({tools:r.map(g=>{let d={name:g.name,invoke:w=>t(g,w)};return g.description!==void 0&&(d.description=g.description),g.inputSchema!==void 0&&(d.inputSchema=g.inputSchema),d})}),s=r.map(g=>({name:g.name,status:"callable"})),{revoked:true,registrations:Promise.resolve(s)};let f=p.context;l(f);let m=new AbortController;return n=m,{revoked:true,registrations:Promise.all(r.map(async g=>{try{let d={signal:m.signal};return g.exposedTo?.length&&(d.exposedTo=g.exposedTo),await f.registerTool(jn(g,t),d),{name:g.name,status:"callable"}}catch(d){return {name:g.name,status:"failed",error:d instanceof Error?`${d.name}: ${d.message}`:String(d)}}})).then(g=>(n===m&&(s=g),g))}},revoke(){u(),i?.(),s=[];},available:()=>!!a(),source:()=>a()?.source??null,status:()=>[...s]}};var _n=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
+ `),Rt=({documentRef:e=typeof document>"u"?void 0:document,timeoutMs:t=12e4}={})=>n=>new Promise(o=>{if(!e?.body)return o(false);let i=e,s=i.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=i.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 u=i.createElement("div");u.style.fontWeight="700",u.style.fontSize="16px";let l=n.identity?.vendor??"An AI agent";u.textContent=`${l} wants to ${n.title??n.tool}`;let r=i.createElement("div");r.style.margin="8px 0 0",r.style.color="rgba(11,11,12,0.65)",r.textContent=n.description??"Allow this action on your behalf?";let p=i.createElement("pre"),f=_n(n.input);Object.assign(p.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"}),p.textContent=f;let m=i.createElement("div");Object.assign(m.style,{display:"flex",gap:"8px",justifyContent:"flex-end",marginTop:"16px"});let h=(E,k)=>{let R=i.createElement("button");return R.type="button",R.textContent=E,Object.assign(R.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"}),R},g=h("Not now",false),d=h("Allow",true);m.append(g,d),a.append(u,r,p,m),s.append(a);let w=false,v=E=>{w||(w=true,clearTimeout(M),i.removeEventListener("keydown",A,true),s.remove(),o(E));},A=E=>{E.key==="Escape"&&v(false);},M=setTimeout(()=>v(false),t);d.addEventListener("click",()=>v(true)),g.addEventListener("click",()=>v(false)),i.addEventListener("keydown",A,true),i.body.appendChild(s),d.focus();});var ae=(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 Pt=(e,t)=>e===void 0?t:Math.max(0,Math.min(1,e)),ce=(e={})=>{let t=Pt(e.traceRate,1),n=Pt(e.errorRate,1),o=e.random??Math.random;return {shouldKeep(i){let s=i.outcome==="error"?n:t;return o()<s}}};var Bn="[REDACTED]",Wn=e=>{if(e!==void 0)return JSON.parse(JSON.stringify(e))},le=(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)le(s,t);return}let i=e;if(n in i){if(o.length===0){i[n]=Bn;return}le(i[n],o);}},ue=(e,t=[])=>{if(t.length===0)return e;let n=Wn(e);for(let o of t)le(n,o.split(".").filter(Boolean));return n},de=["metadata.password","metadata.token","metadata.authorization","metadata.cookie"];var Nn=()=>typeof location<"u"&&typeof location.pathname=="string"?location.pathname:void 0,Ct=e=>{let t=globalThis.crypto;return t&&"randomUUID"in t?`${e}_${t.randomUUID()}`:`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`},pe=({siteId:e,bufferSize:t,sessionId:n=Ct("ses"),scrubPaths:o=de,exporters:i=[],onExporterError:s,pageProvider:a=Nn,...u})=>{let l=ae(t),r=ce(u),p=()=>{try{return a()}catch{return}};return {sessionId:n,async emit(f){let m={...f.metadata};if(m.page===void 0){let g=p();g!==void 0&&(m.page=g);}let h=TraceEvent.parse(ue({id:Ct("trc"),siteId:e,sessionId:n,occurredAt:new Date().toISOString(),outcome:f.outcome??"success",...f,metadata:m},o));return r.shouldKeep(h)?(l.add(h),await Promise.all(i.map(async g=>{try{await g.export([h]);}catch(d){s?.(d,g,h);}})),h):null},list:()=>l.list(),clear:()=>l.clear()}};var me=()=>({name:"console",export(e){for(let t of e)console.info("[agentronics:trace]",t.type,t);}});var ge=({gatewayUrl:e,publishableKey:t,fetcher:n,flushMs:o=2e3,maxBatch:i=50,maxQueue:s=500})=>{let a=`${e.replace(/\/$/,"")}/v1/pub/traces`,u=Math.max(1,Math.min(100,i)),l=[],r=null,p=(m,h)=>{let g=n??(typeof fetch=="function"?fetch:null);if(!g)return Promise.resolve();let d={publishableKey:t,events:m};try{return Promise.resolve(g(a,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(d),...h?{keepalive:!0}:{}})).then(()=>{},()=>{})}catch{return Promise.resolve()}},f=(m=false)=>{r!==null&&(clearTimeout(r),r=null);let h=[];for(;l.length;)h.push(p(l.splice(0,u),m));return Promise.all(h).then(()=>{})};return typeof document<"u"&&typeof document.addEventListener=="function"&&document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&f(true);}),typeof addEventListener=="function"&&addEventListener("pagehide",()=>{f(true);}),{name:"gateway",export(m){l.push(...m),l.length>s&&(l=l.slice(l.length-s)),l.length>=u?f():r===null&&(r=setTimeout(()=>{f();},o));},flush:f}};var Un=e=>new Promise(t=>setTimeout(t,e)),fe=({url:e,fetcher:t=fetch,maxRetries:n=2,queueLimit:o=500})=>({name:"webhook",async export(i){let a=[...Kn(e),...i].slice(-o),u=0;for(;;){let l=await t(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({events:a})});if(l.ok){Dt(e,[]);return}if(u>=n)throw Dt(e,a),new Error(`Webhook exporter failed with status ${l.status}.`);u+=1,await Un(100*u);}}}),ye=e=>`agtx:webhook:${e}`,Kn=e=>{if(typeof window>"u"||!window.localStorage)return [];try{let t=window.localStorage.getItem(ye(e));return t?JSON.parse(t):[]}catch{return []}},Dt=(e,t)=>{if(!(typeof window>"u"||!window.localStorage))try{if(t.length===0){window.localStorage.removeItem(ye(e));return}window.localStorage.setItem(ye(e),JSON.stringify(t));}catch{}};var he=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=wt(e),t},Ot=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>({async push(i){let s=i.map(he),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 Lt="/v1/sdk/events",$t=({url:e,ingestKey:t,fetcher:n=fetch})=>{let o=e.replace(/\/$/,""),i=o.endsWith(Lt)?o:`${o}${Lt}`;return {name:"intel",async export(s){let a={events:s},u=await n(i,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(a)});if(!u.ok)throw new Error(`Intel exporter failed with status ${u.status}.`)}}},jt=({url:e,ingestKey:t,siteId:n,fetcher:o=fetch})=>{let i=e.replace(/\/$/,""),s=async(l,r)=>{let p=await o(`${i}${l}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(r)});if(!p.ok)throw new Error(`Intel sync ${l} failed with status ${p.status}.`);return p},a=async(l,r)=>{await s(l,r);},u=new Map;return {async pushTools(l){let r=l.map(he);return await a("/v1/sdk/tools",{siteId:n,tools:r}),r.length},async pushMemory(l,r){await a("/v1/sdk/memory",{siteId:n,snapshot:l,...typeof r=="number"?{score:r}:{}});},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 r=>{let p=u.get(r);if(p&&p.until>Date.now())return p.value;let f=null;try{let m=await(await s("/v1/sdk/agent-keys/verify",{key:r})).json();m.valid&&m.agentId&&(f={agentId:m.agentId},m.name&&(f.name=m.name),m.vendor&&(f.vendor=m.vendor));}catch{return p?p.value:null}return u.size>5e3&&u.delete(u.keys().next().value),u.set(r,{value:f,until:Date.now()+l*1e3}),f}}}},Vn=$t,Fn=jt;var V="https://api.agentronics.dev",Yn="https://gateway.agentronics.dev",Xn=e=>{if(e===void 0||e.replace(/\/$/,"")===V||e.replace(/\/$/,"")===Yn)return V;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 ${V}. The only accepted override is a localhost / 127.0.0.1 URL for local development. Got: ${e}`)},Ni=e=>{let{publishableKey:t,siteId:n="default",debug:o=false,policies:i=[],trace:s={}}=e,a$1=Xn(e.gatewayUrl),u=classifyApiKey(t);if(u==="secret")throw new AgentronicsError("wrong_key_kind","A secret key was passed to Agentronics.init(). Browser code must use a publishable key (agtx_pk_*).");if(u!=="publishable")throw new AgentronicsError("invalid_api_key",`Agentronics.init() expected a key starting with "${PUBLISHABLE_KEY_PREFIX}".`);let l=s.enabled??true,r=[...o?[me()]:[],...s.gateway?[ge({gatewayUrl:a$1,publishableKey:t})]:[],...s.webhookUrl?[fe({url:s.webhookUrl})]:[],...s.exporters??[]],p={siteId:n,exporters:l?r:[],onExporterError:(c,y)=>{o&&console.warn(`[agentronics] trace exporter "${y.name}" failed`,c);}};s.bufferSize!==void 0&&(p.bufferSize=s.bufferSize),s.traceRate!==void 0&&(p.traceRate=s.traceRate),s.errorRate!==void 0&&(p.errorRate=s.errorRate),s.scrubPaths!==void 0&&(p.scrubPaths=s.scrubPaths);let f=pe(p),m=c=>{l&&f.emit(c);},h=De(),g={onTrace:m};e.auth!==void 0&&(g.context=e.auth),e.compat==="0.6"&&(g.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")),g.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 d$1=ze(g),w=Je(),v=Ze(i),A=et({gatewayUrl:a$1,siteId:n,publishableKey:t}),M=lt({onTrace:m}),E={onTrace:m};e.siteMemory!==void 0&&(E.initial=e.siteMemory);let k=ut(E),R=pt({gatewayUrl:a$1,siteId:n,publishableKey:t}),F=Ot({gatewayUrl:a$1,siteId:n,publishableKey:t}),b=async c=>{let y=Date.now(),S=await Re(c),I=h.preferOver(S);return l&&await f.emit({type:I?"agent.detected":"agent.missed",agent:I,durationMs:Date.now()-y,metadata:{detectedClass:S?.class??null,presented:h.snapshot()!==null}}),w.set(I,"detect"),I},T=async(c,y={})=>{let S=Date.now(),I=y.identity!==void 0?y.identity:await b(),P=v.evaluate({tool:c,identity:I});return l&&await f.emit({type:"authz.evaluated",tool:c,agent:I,policy:P,outcome:P.decision==="deny"?"blocked":"success",durationMs:Date.now()-S}),P},B=async()=>true,C=e.review===false?void 0:e.review??(e.compat==="0.6"?B:typeof document>"u"?void 0:Rt()),D=ht({evaluate:T,...C?{reviewer:C}:{},setPolicies:c=>v.set(c),listPolicies:()=>v.list(),onTrace:m,identityResolver:()=>w.snapshot().identity});for(let c of e.tools??[])D.register(c);let O=e.progression?xt(e.progression,{onTrace:m}):null,ve=c=>{let y={identity:c};return O&&(y.stage=O.current(),y.enabledStages=O.enabledStages()),y},we={...e.toolDescriptions??{}},Bt=c=>c.map(y=>{let S=we[y.name];return S?{...y,description:S}:y}),$=c=>Bt(At(D.list(),ve(c))),be=c=>{we={...c},j!==null&&(j=null,Y($(w.snapshot().identity)));},j=null,xe=c=>c.map(y=>y.name).sort().join(`
17
+ `),Y=c=>{let y=xe(c);return y===j?null:(j=y,_.publish(c))},Se=c=>{if(!O)return;O.notify(c).changed&&j!==null&&Y($(w.snapshot().identity));},Te={class:"webmcp",trust:"detected",confidence:1,vendor:null,userAgent:typeof navigator<"u"?navigator.userAgent:null,detectionVersion:a,signals:{source:"navigator.modelContext"}},_=Et({invoke:async(c,y,S)=>{Wt(c.name);let I=w.snapshot().identity??Te,P=await D.execute(c.name,y,I,S?{signal:S}:{});return Se(c.name),P}}),Ae=c=>{let y=w.snapshot().identity;if(y&&y.trust!=="detected"||y?.class==="webmcp")return;let S={...Te,signals:{source:_.source()??"document",tool:c}};w.set(S,"detect"),m({type:"agent.detected",agent:S,metadata:{detectedClass:"webmcp",via:"webmcp-activity"}});},Wt=c=>Ae(c);d(c=>{c.type==="activated"&&Ae(c.toolName);}),w.subscribe(c=>{j===null||!_.available()||Y($(c.identity));});let X=e.visionDetection??e.autoDetect!==false,Gt=X===false||typeof document>"u"?null:Ce({...X===true?{}:X,onDetect:c=>{let y=w.snapshot().identity;y&&(y.trust!=="detected"||y.class==="webmcp")||(w.set(c,"detect"),m({type:"agent.detected",agent:c,metadata:{detectedClass:"screenshot",via:"vision-behaviour"}}));}}),Q=e.autoDetect??true,Nt=Q===false?Promise.resolve(null):(async()=>{let c=Q===true?{}:Q;try{return await b(c)}catch(y){return o&&console.warn("[agentronics] autoDetect failed:",y),null}})();return Object.freeze({publishableKey:t,siteId:n,gatewayUrl:a$1,debug:o,memory:M,siteMemory:k,memoryCache:R,tracer:f,auth:d$1,agentContext:w,authz:v,policyCache:A,tools:D,progression:O,webmcp:_,vision:Gt,ready:Nt,detect:b,authenticate:async c=>{let y=await d$1.authenticate(c);return w.set(y,"authenticate"),y},presentIdentity:c=>{let y=h.present(c);return m({type:"auth.identity_presented",agent:y.identity,metadata:{vendor:y.identity.vendor,class:y.identity.class}}),w.set(y.identity,"declare"),y},clearIdentity:()=>{h.clear(),m({type:"auth.identity_cleared"}),w.set(null,"cleared");},presentedIdentity:()=>h.snapshot(),setPolicies:c=>{v.set(c),m({type:"authz.policies_set",metadata:{count:c.length}});},listPolicies:()=>v.list(),syncPolicies:async()=>{let c=await A.sync();return v.set(c.policies),m({type:"authz.policies_set",metadata:{count:c.policies.length,synced:true}}),c.policies},syncSiteMemory:async()=>{let c=await R.sync();return c.memory&&(k.replace(c.memory),m({type:"memory.updated",metadata:{kind:"site",operation:"sync",etag:c.etag}})),c.memory},syncConfig:async()=>{let c=await fetch(`${a$1.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 y=await c.json(),S=PolicyRule.array().parse(y.policies??[]);v.set(S),m({type:"authz.policies_set",metadata:{count:S.length,synced:true}});let I=y.siteMemory&&typeof y.siteMemory=="object"&&Object.keys(y.siteMemory).length?k.replace(SiteMemory.parse(y.siteMemory)):null,P=y.toolDescriptions&&typeof y.toolDescriptions=="object"?y.toolDescriptions:{};return be(P),{policies:S,toolDescriptions:P,siteMemory:I}},provideSiteMemory:c=>k.provide(c),provideForPage:c=>{k.provideForPage(c);},installMemoryDelivery:({metaTags:c=true,overlay:y=false}={})=>{let S=[];return c&&S.push(re({snapshot:k.snapshot()})),y&&S.push(ie({snapshot:k.snapshot()})),{uninstall:()=>{S.forEach(I=>I.uninstall());}}},fetchWellKnown:async c=>{let y={};c!==void 0&&(y.origin=c);let S=await se(y);return S&&(k.replace(S),m({type:"memory.updated",metadata:{kind:"site",operation:"wellKnown",origin:c??null}})),S},installDomEnforcer:()=>nt({policyEngine:v,getIdentity:()=>b({webmcp:{pollMs:0}})}),registerTool:c=>D.register(c),setToolDescriptions:c=>be(c),syncTools:async()=>{let c=D.list({includeDisabled:true}),y=await F.push(c);return m({type:"tool.registered",metadata:{operation:"sync",count:y}}),y},surfaceTools:({identity:c=null}={})=>$(c),explainSurfacing:({identity:c=null}={})=>kt(D.list(),ve(c)),groupedTools:({identity:c=null}={})=>Mt($(c)),estimateTokens:({identity:c=null}={})=>bt($(c)),publishToWebMcp:({identity:c=null}={})=>{let y=$(c);j=xe(y);let S=_.publish(y),I=S.registrations.then(P=>(P.forEach(W=>{m({type:"tool.surfaced",tool:W.name,outcome:W.status==="callable"?"success":"error",...W.error?{error:W.error}:{},metadata:{state:W.status==="callable"?"published":"failed",source:_.source(),trust:c?.trust??null}});}),P));return {revoked:S.revoked,surfaced:y.length,registrations:I}},notifyToolInvoked:c=>Se(c),evaluate:T,traces:()=>f.list(),clearTraces:()=>f.clear(),async ping(){try{let c=await fetch(`${a$1.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 y=await c.json().catch(()=>null)??{};return {ok:!0,status:c.status,body:y}}catch(c){return {ok:false,status:0,error:c instanceof Error?c.message:String(c)}}}})};export{Fn as $,re as A,ie as B,ft as C,se as D,Pn as E,ht as F,vt as G,wt as H,Cn as I,bt as J,xt as K,Tt as L,At as M,kt as N,It as O,Mt as P,Ur as Q,Et as R,Rt as S,ae as T,pe as U,me as V,ge as W,fe as X,$t as Y,jt as Z,Vn as _,Me as a,Ni as aa,N as b,U as c,Ee as d,ee as e,Zt as f,en as g,Re as h,Pe as i,Ce as j,De as k,Eo as l,Le as m,Fe as n,pn as o,ze as p,Je as q,qe as r,Ze as s,et as t,tt as u,nt as v,lt as w,ut as x,pt as y,Mn as z};//# sourceMappingURL=chunk-4FLZQPCO.js.map
18
+ //# sourceMappingURL=chunk-4FLZQPCO.js.map