@agentronics/sdk 0.1.2 → 0.3.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 +12 -0
- package/dist/chunk-4FJRAPA6.js +17 -0
- package/dist/chunk-4FJRAPA6.js.map +1 -0
- package/dist/chunk-LLD3Y2LZ.js +2 -0
- package/dist/chunk-LLD3Y2LZ.js.map +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.global.js +3 -3
- 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-CsMtI9lh.d.ts → init-only-7f8_LQAI.d.ts} +78 -4
- package/dist/{init-only-CH7e1rAO.d.cts → init-only-Cwll8MGz.d.cts} +78 -4
- package/dist/init-only.cjs +3 -3
- package/dist/init-only.cjs.map +1 -1
- package/dist/init-only.d.cts +1 -1
- package/dist/init-only.d.ts +1 -1
- package/dist/init-only.global.js +3 -3
- package/dist/init-only.global.js.map +1 -1
- package/dist/init-only.js +1 -1
- package/dist/lite.cjs +1 -1
- package/dist/lite.cjs.map +1 -1
- package/dist/lite.global.js +1 -1
- package/dist/lite.global.js.map +1 -1
- package/dist/lite.js +1 -1
- package/package.json +4 -4
- package/dist/chunk-5BS4OAQA.js +0 -2
- package/dist/chunk-5BS4OAQA.js.map +0 -1
- package/dist/chunk-VWQY7QIL.js +0 -17
- package/dist/chunk-VWQY7QIL.js.map +0 -1
package/README.md
CHANGED
|
@@ -110,6 +110,18 @@ Once detection is working, continue to:
|
|
|
110
110
|
|
|
111
111
|
Each of those has its own guide in this docs site. Welcome to Agentronics.
|
|
112
112
|
|
|
113
|
+
## Trust levels
|
|
114
|
+
|
|
115
|
+
Every identity carries a `trust` field that policies can match on. The
|
|
116
|
+
levels (lowest → highest) are:
|
|
117
|
+
|
|
118
|
+
- `detected` — the SDK observed signals (WebMCP polyfill, `navigator.webdriver`, CDP keys) but did not verify anything cryptographically.
|
|
119
|
+
- `declared` — the host page called `client.presentIdentity({...})`. **The browser cannot verify a declared claim, and a malicious host page can claim any identity it likes.** Treat `declared` as "the page told us it's an agent" — useful for hinting, not for authorisation.
|
|
120
|
+
- `verified` — the gateway successfully verified a cryptographic credential (OIDC ID token, SPIFFE JWT-SVID, mTLS XFCC, etc.). This is the only level you should gate dangerous tools on.
|
|
121
|
+
- `linked` — the agent is verified *and* matched to a server-side session.
|
|
122
|
+
|
|
123
|
+
If your dashboard renders agent activity, surface the trust level next to the vendor so reviewers can tell a self-declared "claude" apart from a verified one.
|
|
124
|
+
|
|
113
125
|
## Links
|
|
114
126
|
|
|
115
127
|
- [Documentation](https://docs.agentronics.dev)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {a,b}from'./chunk-LLD3Y2LZ.js';import {AgentClass,isHigherTrust,IdentityClaim,AgentronicsError,PolicyRule,MemoryEntry,SiteMemory,SITE_MEMORY_DEFAULT,TraceEvent,classifyApiKey,PUBLISHABLE_KEY_PREFIX,TRUST_RANK,SiteMemoryPageContext}from'@agentronics/protocol';var ue=[{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}],L=(e={})=>{let{signatures:t=ue,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$1 of t)if(a$1.pattern.test(o))return {class:"crawler",trust:"detected",confidence:n,vendor:a$1.name,userAgent:o,detectionVersion:a,signals:{matched:a$1.name,category:a$1.category,ua:o}};return null};var ft=[/HeadlessChrome/i,/Headless/i,/PhantomJS/i,/SlimerJS/i],ht=()=>({hit:(typeof navigator<"u"&&navigator.webdriver)===true,weight:.6,detail:"navigator.webdriver === true"}),vt=()=>{if(typeof window>"u")return {hit:false,weight:.5};let e=Object.keys(window).filter(t=>t.startsWith("cdc_"));return {hit:e.length>0,weight:.5,detail:`window.${e[0]??"cdc_*"}`}},wt=()=>{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"}},xt=()=>{if(typeof navigator>"u")return {hit:false,weight:.7};let e=navigator.userAgent??"",t=ft.some(r=>r.test(e));return t?{hit:t,weight:.7,detail:`headless UA: ${e}`}:{hit:t,weight:.7}},St=()=>{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"}},bt=()=>{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"}},Tt={webdriver:ht,chromedriver:vt,headlessUa:xt,languages:St,permissions:bt,plugins:wt},$=(e={})=>{let{threshold:t=.4}=e,r={},n=0,o=0;for(let[s,y]of Object.entries(Tt)){let i=y();n+=i.weight,r[s]={hit:i.hit,weight:i.weight,detail:i.detail},i.hit&&(o+=i.weight);}let a$1=n===0?0:o/n;return a$1<t?null:{class:"dom",trust:"detected",confidence:a$1,vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:r}};var pe=()=>[{id:"webmcp.model-context",status:"stable",detect:()=>b({pollMs:0})},{id:"crawler.user-agent",status:"beta",detect:()=>L()},{id:"dom.automation-heuristics",status:"beta",detect:()=>$()}],K=(e=pe())=>{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 kt=e=>{let t=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:a,signals:{declared:true,hasVerificationToken:!!e.verificationToken}}};var It=({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 de=async(e={})=>{if(e.customDetectors?.length){let t=await K(e.customDetectors).detectAll(!!e.experimental);if(t)return t}if(e.webmcp!==false){let t=await b(e.webmcp??{});if(t)return t}if(e.crawler!==false){let t=L(e.crawler??{});if(t)return t}if(e.dom!==false){let t=$(e.dom??{});if(t)return t}return null};var Et=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}}),me=()=>{let e=null;return {present(t){let r=IdentityClaim.safeParse(t);if(!r.success)throw new AgentronicsError("invalid_api_key",`Invalid identity claim: ${r.error.issues[0]?.message??"unknown"}`);let n={claim:r.data,identity:Et(r.data)};return e=n,n},clear(){e=null;},preferOver(t){return e?t?isHigherTrust(e.identity.trust,t.trust)?e.identity:t:e.identity:t},snapshot(){return e}}};var _r=({detected:e,declared:t,verified:r,linked:n})=>n?"linked":r?"verified":t?"declared":"detected",ye=e=>{let t=null;for(let r of e)(!t||TRUST_RANK[r.trust]>TRUST_RANK[t.trust])&&(t=r);return t};var fe=()=>({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:a,signals:{bearer:true,verifiedRemotely:!!r}}}});var he=()=>({name:"detection",async authenticate(e){return e.detected??null}});var ve=()=>({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:a,signals:{extensionToken:true,verifiedRemotely:!!r}}}});var we=()=>({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:a,signals:{mtls:true,subject:r?.subject??null,verifiedRemotely:!!r,...r?.signals??{}}}}});var xe=()=>({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:a,signals:{oauth2:true,subject:e.oauth2Subject??null,verifiedRemotely:!!r}}}});var Ct=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),Se=()=>({name:"selfDeclaration",async authenticate(e){return e.declaration?Ct(IdentityClaim.parse(e.declaration)):null}});var be=()=>({name:"sessionLink",async authenticate(e,t){if(!e.sessionLinkToken)return null;let r=await t.verifyToken?.("sessionLink",e.sessionLinkToken);return {class:e.classHint??"screenshot",trust:e.linkedUserId?"linked":r?.trust??"verified",confidence:1,vendor:r?.vendor??e.vendorHint??"session-link",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{sessionLink:true,linkedUserId:e.linkedUserId??null,verifiedRemotely:!!r}}}});var Te=()=>({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:a,signals:{sso:true,subject:r?.subject??null,verifiedRemotely:!!r,...r?.signals??{}}}}});var Ae=()=>({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:a,signals:{spiffe:true,spiffeId:r?.subject??null,subject:r?.subject??null,verifiedRemotely:!!r,...n?{googleAgent:true}:{},...r?.signals??{}}}}});var ke=()=>({name:"xAgentHeader",async authenticate(e){if(!e.xAgentHeader)return null;let[t="x-agent",r="dom",n]=e.xAgentHeader.split(";"),o=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:a,signals:{xAgentHeader:true,hasProof:!!n}}}});var Lt=()=>[he(),Se(),fe(),ke(),ve(),be(),xe(),Te(),Ae(),we()],$t={detection:"detection",selfDeclaration:"declaration",bearer:"bearer",xAgentHeader:"x-agent-header",extensionToken:"extension",sessionLink:"session-link",oauth2:"oauth2",sso:"sso",spiffe:"spiffe",mtls:"mtls"},jt=(e,t)=>e==="spiffe"&&t.signals?.googleAgent===true?"google-agent":$t[e],Ie=({methods:e=Lt(),context:t={},onTrace:r}={})=>({async authenticate(n){let o=[],a={};for(let d of e){let p=await d.authenticate(n,t);a[d.name]=!!p,p&&o.push({method:d.name,identity:p});}let s=ye(o.map(d=>d.identity)),y=s?o.find(d=>d.identity===s):void 0,i=y?jt(y.method,y.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 Bt={identity:null,source:"initial",updatedAt:null},Me=()=>{let e=Bt,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 Wt=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,r)=>{e.set(t,r);}}},Gt=()=>typeof window>"u"||!window.localStorage?Wt():{read:e=>{try{return window.localStorage.getItem(e)}catch{return null}},write:(e,t)=>{try{window.localStorage.setItem(e,t);}catch{}}},Nt=e=>{if(!e)return null;try{let t=JSON.parse(e);if(typeof t=="object"&&t!==null&&Number.isFinite(t.count)&&Number.isFinite(t.resetAt))return t}catch{return null}return null},Re=(e=Gt())=>({consume(t,r,n=Date.now()){let o=`agtx:rate:${t}`,a=Nt(e.read(o)),s=a&&a.resetAt>n?a.resetAt:n+r.windowSeconds*1e3,y=a&&a.resetAt>n?a.count+1:1;return e.write(o,JSON.stringify({count:y,resetAt:s})),{allowed:y<=r.max,remaining:Math.max(0,r.max-y),resetAt:s}}});var _t=(e,t)=>e==="*"||e===t?true:e.includes("*")?new RegExp("^"+e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*")+"$").test(t):false,Ut=(e,t)=>{let r=e?TRUST_RANK[e.trust]:-1,n=TRUST_RANK[t.minTrust];return r>=n},Kt=(e,t)=>t.allowedClasses.length===0?true:e?t.allowedClasses.includes(e.class):false,Oe="review",Ht=(e,t)=>{let r=t?.class??"unknown",n=t?.vendor??"unknown",o=t?.trust??"none";return `${e}:${r}:${n}:${o}`},Ce=(e=[],t={})=>{let r=e.map(o=>PolicyRule.parse(o)),n=t.rateLimiter??Re();return {set(o){r=o.map(a=>PolicyRule.parse(a));},list(){return [...r]},evaluate({tool:o,identity:a}){for(let s of r)if(_t(s.tool,o)){if(!Ut(a,s))return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" requires trust >= ${s.minTrust}.`};if(!Kt(a,s))return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" restricts to classes: ${s.allowedClasses.join(", ")}.`};if(s.rateLimit){let y=n.consume(Ht(o,a),s.rateLimit);if(!y.allowed)return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" rate limit exceeded. Resets at ${new Date(y.resetAt).toISOString()}.`}}return {decision:s.decision,ruleId:s.id,reason:`Matched rule "${s.id}".`}}return {decision:Oe,ruleId:null,reason:`No rule matched tool "${o}". Falling back to "${Oe}".`}}}};var De=({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: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 $e=({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 y=s.dataset.agentronicsTool;y&&Promise.resolve(t()).then(i=>{let g=e.evaluate({tool:y,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 H=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,r)=>{e.set(t,r);},remove:t=>{e.delete(t);},keys:()=>[...e.keys()]}},je=(e,t)=>({read:r=>{try{return e.getItem(t+r)}catch{return null}},write:(r,n)=>{try{e.setItem(t+r,n);}catch{}},remove:r=>{try{e.removeItem(t+r);}catch{}},keys:()=>{let r=[];try{for(let n=0;n<e.length;n++){let o=e.key(n);o&&o.startsWith(t)&&r.push(o.slice(t.length));}}catch{}return r}}),Be="agtx:",We=()=>{let e=typeof window<"u",t=e&&typeof window.sessionStorage<"u"?je(window.sessionStorage,Be+"session:"):H(),r=e&&typeof window.localStorage<"u"?je(window.localStorage,Be+"user:"):H();return {session:t,user:r,org:H()}};var Ne=(e,t)=>e.expiresAt!==null&&e.expiresAt<=t,_e=e=>{if(!e)return null;try{let t=JSON.parse(e);return typeof t!="object"||t===null?null:t}catch{return null}},zt=e=>JSON.stringify(e),Ue=(e={})=>{let t=We(),r=i=>{e.onTrace?.(i);};return {get:(i,g={})=>{let u=g.scope??"session",d=t[u],p=_e(d.read(i));if(!p){r({type:"memory.accessed",metadata:{operation:"get",key:i,scope:u,hit:false}});return}if(Ne(p,Date.now())){d.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}}),p.value},set:(i,g,u={})=>{let d=u.scope??"session",p=u.ttlSeconds??null,h=Date.now(),w={value:g,expiresAt:p===null?null:h+p*1e3,updatedAt:new Date(h).toISOString()};return t[d].write(i,zt(w)),r({type:"memory.updated",metadata:{operation:"set",key:i,scope:d,ttlSeconds:p}}),MemoryEntry.parse({key:i,value:g,scope:d,ttlSeconds:p,updatedAt:w.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],d=Date.now(),p=[];for(let h of u.keys()){let w=_e(u.read(h));if(w){if(Ne(w,d)){u.remove(h);continue}p.push(MemoryEntry.parse({key:h,value:w.value,scope:g,ttlSeconds:w.expiresAt===null?null:Math.max(0,Math.round((w.expiresAt-d)/1e3)),updatedAt:w.updatedAt}));}}return r({type:"memory.accessed",metadata:{operation:"list",scope:g,count:p.length}}),p},clear:(i={})=>{let g=i.scope??"session",u=t[g],d=u.keys().length;for(let p of u.keys())u.remove(p);r({type:"memory.updated",metadata:{operation:"clear",scope:g,count:d}});}}};var V=e=>SiteMemory.parse(JSON.parse(JSON.stringify(e))),W=e=>({...e,updatedAt:new Date().toISOString()}),Ke=(e={})=>{let t=SiteMemory.parse({...SITE_MEMORY_DEFAULT,...e.initial??{}}),r=null,n=new Set,o=l=>{e.onTrace?.(l);},a=()=>{r=null;},s=()=>{if(n.size===0)return;let l=V(t);r=l,n.forEach(v=>v(l));},y=l=>{let v=SiteMemory.parse({...t,...l,workflows:{...t.workflows,...l.workflows??{}},policies:{...t.policies,...l.policies??{}},uiGuidance:{...t.uiGuidance,...l.uiGuidance??{}},pageContexts:{...t.pageContexts,...l.pageContexts??{}}});return t=W(v),a(),o({type:"memory.updated",metadata:{kind:"site",operation:"provide",keys:Object.keys(l)}}),s(),u()},i=(l,v)=>{let x=l.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 R=0;R<x.length-1;R++){let T=x[R],P=I[T];(typeof P!="object"||P===null||Array.isArray(P))&&(I[T]={}),I=I[T];}return I[x[x.length-1]]=v,t=W(SiteMemory.parse(k)),a(),o({type:"memory.updated",metadata:{kind:"site",operation:"update",path:l}}),s(),u()},g=l=>{let v=SiteMemoryPageContext.parse({path:l.path,payload:l.payload,updatedAt:new Date().toISOString()});return t=W({...t,pageContexts:{...t.pageContexts,[l.path]:v}}),a(),o({type:"memory.updated",metadata:{kind:"site",operation:"provideForPage",path:l.path}}),s(),{...v,payload:{...v.payload}}},u=()=>(r||(r=V(t)),r);return {provide:y,update:i,provideForPage:g,snapshot:u,get:l=>{if(o({type:"memory.accessed",metadata:{kind:"site",operation:l?"get":"snapshot",path:l??null}}),!l)return V(t);let v=l.split(".").filter(Boolean),x=t;for(let k of v){if(typeof x!="object"||x===null)return;x=x[k];}return x},getForPage:l=>{o({type:"memory.accessed",metadata:{kind:"site",operation:"getForPage",path:l}});let v=t.pageContexts[l];return v?{...v,payload:{...v.payload}}:null},replace:l=>(t=W(SiteMemory.parse(l)),a(),s(),u()),subscribe:l=>(n.add(l),()=>{n.delete(l);})}};var Ve=({gatewayUrl:e,siteId:t,publishableKey:r,fetcher:n=fetch})=>{let o={memory:null,etag:null};return {snapshot(){return {memory:o.memory?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:SiteMemory.parse(s.memory??{}),etag:a.headers.get("etag")},this.snapshot()}}};var qt=({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 y=s.split(".").filter(Boolean),i=a;for(let g of y){if(typeof i!="object"||i===null)return {content:void 0};i=i[g];}return {content:i}}});var A="agent-context-",z="agentronics-site-context",Xt=e=>{try{return JSON.stringify(e)}catch{return "{}"}},G=(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);},N=(e,t)=>{e.querySelectorAll(`meta[name="${t}"]`).forEach(r=>r.remove());},F=({doc:e=typeof document>"u"?null:document,snapshot:t,schemaType:r="WebSite"})=>{if(!e)return {uninstall:()=>{}};G(e,`${A}version`,t.version),G(e,`${A}updated-at`,t.updatedAt??new Date().toISOString()),t.siteMap?.navigation?.flow&&G(e,`${A}flow`,t.siteMap.navigation.flow),G(e,`${A}workflows`,Object.keys(t.workflows).join(","));let n=e.getElementById(z);return n||(n=e.createElement("script"),n.type="application/ld+json",n.id=z,e.head.appendChild(n)),n.textContent=Xt({"@context":"https://schema.org","@type":r,name:"Agentronics Site Memory",agentronics:t}),{uninstall:()=>{N(e,`${A}version`),N(e,`${A}updated-at`),N(e,`${A}flow`),N(e,`${A}workflows`),e.getElementById(z)?.remove();}}};var ze="agentronics-memory-overlay",Yt=e=>`
|
|
2
|
+
position: fixed;
|
|
3
|
+
bottom: 16px;
|
|
4
|
+
right: 16px;
|
|
5
|
+
max-width: 320px;
|
|
6
|
+
padding: 10px 12px;
|
|
7
|
+
background: rgba(17, 24, 39, 0.92);
|
|
8
|
+
color: #f9fafb;
|
|
9
|
+
font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
10
|
+
border-radius: 8px;
|
|
11
|
+
z-index: 2147483647;
|
|
12
|
+
opacity: ${e?"0":"1"};
|
|
13
|
+
pointer-events: ${e?"none":"auto"};
|
|
14
|
+
box-shadow: 0 12px 32px rgba(15, 23, 42, 0.35);
|
|
15
|
+
`,Fe=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}`},J=({doc:e=typeof document>"u"?null:document,snapshot:t,hidden:r=false})=>{if(!e)return {uninstall:()=>{},refresh:()=>{}};let n=e.getElementById(ze);return n||(n=e.createElement("div"),n.id=ze,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",Yt(r)),n.textContent=Fe(t),{uninstall:()=>{n?.remove();},refresh:o=>{n&&(n.textContent=Fe(o));}}};var qe="/.well-known/agent-context.json",q=async({origin:e,fetcher:t=fetch,signal:r}={})=>{let n=(e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:"")+qe;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 SiteMemory.parse(s)},Qt=({snapshot:e})=>JSON.stringify(SiteMemory.parse(e));var Xe=({evaluate:e,setPolicies:t,listPolicies:r,onTrace:n,identityResolver:o})=>{let a=new Map,s=new Set,y=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),y(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 d=u===void 0?o?.()??null:u,p=a.get(i);if(!p)throw new Error(`Tool "${i}" is not registered.`);if(s.has(i)){let l={decision:"deny",ruleId:`tool:${i}`,reason:"Tool is disabled."};throw n?.({type:"tool.executed",tool:i,agent:d,policy:l,outcome:"blocked"}),new Error(l.reason)}let h=await e(i,{identity:d});if(h.decision==="deny")throw n?.({type:"tool.executed",tool:i,agent:d,policy:h,outcome:"blocked"}),new Error(h.reason);let w=Date.now();try{let l=await p.execute(g,{identity:d});return n?.({type:"tool.executed",tool:i,agent:d,policy:h,outcome:"success",durationMs:Date.now()-w}),l}catch(l){throw n?.({type:"tool.executed",tool:i,agent:d,policy:h,outcome:"error",durationMs:Date.now()-w,error:l instanceof Error?l.message:String(l)}),l}}}};var Ye=(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,y)=>{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:y}}),{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 Zt=(e,t)=>{let r=e.authz?.minTrust;return r?t?TRUST_RANK[t.trust]<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"}},er=(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("|")}`}},tr=(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"},Ze=(e,t)=>{let r=Zt(e,t.identity);if(!r.ok)return {tool:e,visible:false,reason:r.reason};let n=er(e,t.identity);if(!n.ok)return {tool:e,visible:false,reason:n.reason};let o=tr(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}},et=(e,t)=>e.filter(r=>Ze(r,t).visible),tt=(e,t)=>e.map(r=>Ze(r,t));var rt="default",nt=e=>{let t=new Map;for(let r of e){let n=r.group??rt,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}))},to=e=>[...new Set(e.map(t=>t.group??rt))].sort();var X=e=>e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(X).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${X(e[r])}`).join(",")}}`,rr=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=X(t).length;return {name:e.name,characters:r,tokens:Math.ceil(r/4)}},ot=e=>{let t=e.map(rr);return {total:t.reduce((n,o)=>n+o.tokens,0),perTool:t}};var it=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},nr=(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},st=(e={})=>{let t=e.invoke??(async(n,o)=>n.execute(o,{identity:null})),r=null;return {publish(n){let o=it(e);return o?(r?.revoke(),r=o.provideContext({tools:n.map(a=>nr(a,t))}),{revoked:true}):{revoked:false}},revoke(){r?.revoke(),r=null;},available:()=>!!it(e)}};var Y=(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 at=(e,t)=>e===void 0?t:Math.max(0,Math.min(1,e)),Q=(e={})=>{let t=at(e.traceRate,1),r=at(e.errorRate,1),n=e.random??Math.random;return {shouldKeep(o){let a=o.outcome==="error"?r:t;return n()<a}}};var or="[REDACTED]",ir=e=>{if(e!==void 0)return JSON.parse(JSON.stringify(e))},Z=(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)Z(a,t);return}let o=e;if(r in o){if(n.length===0){o[r]=or;return}Z(o[r],n);}},ee=(e,t=[])=>{if(t.length===0)return e;let r=ir(e);for(let n of t)Z(r,n.split(".").filter(Boolean));return r},te=["metadata.password","metadata.token","metadata.authorization","metadata.cookie"];var ar=()=>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)}`},re=({siteId:e,bufferSize:t,sessionId:r=ct("ses"),scrubPaths:n=te,exporters:o=[],onExporterError:a,pageProvider:s=ar,...y})=>{let i=Y(t),g=Q(y),u=()=>{try{return s()}catch{return}};return {sessionId:r,async emit(d){let p={...d.metadata};if(p.page===void 0){let w=u();w!==void 0&&(p.page=w);}let h=TraceEvent.parse(ee({id:ct("trc"),siteId:e,sessionId:r,occurredAt:new Date().toISOString(),outcome:d.outcome??"success",...d,metadata:p},n));return g.shouldKeep(h)?(i.add(h),await Promise.all(o.map(async w=>{try{await w.export([h]);}catch(l){a?.(l,w,h);}})),h):null},list:()=>i.list(),clear:()=>i.clear()}};var ne=()=>({name:"console",export(e){for(let t of e)console.info("[agentronics:trace]",t.type,t);}});var oe=({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 cr=e=>new Promise(t=>setTimeout(t,e)),se=({url:e,fetcher:t=fetch,maxRetries:r=2,queueLimit:n=500})=>({name:"webhook",async export(o){let s=[...lr(e),...o].slice(-n),y=0;for(;;){let i=await t(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({events:s})});if(i.ok){lt(e,[]);return}if(y>=r)throw lt(e,s),new Error(`Webhook exporter failed with status ${i.status}.`);y+=1,await cr(100*y);}}}),ie=e=>`agtx:webhook:${e}`,lr=e=>{if(typeof window>"u"||!window.localStorage)return [];try{let t=window.localStorage.getItem(ie(e));return t?JSON.parse(t):[]}catch{return []}},lt=(e,t)=>{if(!(typeof window>"u"||!window.localStorage))try{if(t.length===0){window.localStorage.removeItem(ie(e));return}window.localStorage.setItem(ie(e),JSON.stringify(t));}catch{}};var ur=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},ut=({gatewayUrl:e,siteId:t,publishableKey:r,fetcher:n=fetch})=>({async push(o){let a=o.map(ur),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 dt="https://gateway.agentronics.dev",mr=e=>{if(e===void 0)return dt;if(e===dt)return e;let t;try{t=new URL(e);}catch{throw new Error(`Agentronics SDK: \`gatewayUrl\` is not a valid URL: ${e}`)}if(t.hostname==="localhost"||t.hostname==="127.0.0.1")return e;throw new Error(`Agentronics SDK does not support custom gateway URLs. Omit \`gatewayUrl\` to use the canonical https://gateway.agentronics.dev. The only accepted override is a localhost / 127.0.0.1 URL for local development. Got: ${e}`)},Fo=e=>{let{publishableKey:t,siteId:r="default",debug:n=false,policies:o=[],trace:a$1={}}=e,s=mr(e.gatewayUrl),y=classifyApiKey(t);if(y==="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(y!=="publishable")throw new AgentronicsError("invalid_api_key",`Agentronics.init() expected a key starting with "${PUBLISHABLE_KEY_PREFIX}".`);let i=a$1.enabled??true,g=[...n?[ne()]:[],...a$1.gateway?[oe({gatewayUrl:s,publishableKey:t})]:[],...a$1.webhookUrl?[se({url:a$1.webhookUrl})]:[],...a$1.exporters??[]],u={siteId:r,exporters:i?g:[],onExporterError:(c,m)=>{n&&console.warn(`[agentronics] trace exporter "${m.name}" failed`,c);}};a$1.bufferSize!==void 0&&(u.bufferSize=a$1.bufferSize),a$1.traceRate!==void 0&&(u.traceRate=a$1.traceRate),a$1.errorRate!==void 0&&(u.errorRate=a$1.errorRate),a$1.scrubPaths!==void 0&&(u.scrubPaths=a$1.scrubPaths);let d=re(u),p=c=>{i&&d.emit(c);},h=me(),w={onTrace:p};e.auth!==void 0&&(w.context=e.auth);let l=Ie(w),v=Me(),x=Ce(o),k=De({gatewayUrl:s,siteId:r,publishableKey:t}),I=Ue({onTrace:p}),R={onTrace:p};e.siteMemory!==void 0&&(R.initial=e.siteMemory);let T=Ke(R),P=Ve({gatewayUrl:s,siteId:r,publishableKey:t}),mt=ut({gatewayUrl:s,siteId:r,publishableKey:t}),B=async c=>{let m=Date.now(),S=await de(c),b=h.preferOver(S);return i&&await d.emit({type:b?"agent.detected":"agent.missed",agent:b,durationMs:Date.now()-m,metadata:{detectedClass:S?.class??null,presented:h.snapshot()!==null}}),v.set(b,"detect"),b},ae=async(c,m={})=>{let S=Date.now(),b=m.identity!==void 0?m.identity:await B(),U=x.evaluate({tool:c,identity:b});return i&&await d.emit({type:"authz.evaluated",tool:c,agent:b,policy:U,outcome:U.decision==="deny"?"blocked":"success",durationMs:Date.now()-S}),U},M=Xe({evaluate:ae,setPolicies:c=>x.set(c),listPolicies:()=>x.list(),onTrace:p,identityResolver:()=>v.snapshot().identity});for(let c of e.tools??[])M.register(c);let E=e.progression?Ye(e.progression,{onTrace:p}):null,ce=c=>{let m={identity:c};return E&&(m.stage=E.current(),m.enabledStages=E.enabledStages()),m},O=c=>et(M.list(),ce(c)),le=c=>{if(!E)return;E.notify(c).changed&&C.publish(O(v.snapshot().identity));},gt={class:"webmcp",trust:"detected",confidence:1,vendor:null,userAgent:typeof navigator<"u"?navigator.userAgent:null,detectionVersion:a,signals:{source:"navigator.modelContext"}},C=st({invoke:async(c,m)=>{let S=v.snapshot().identity??gt,b=await M.execute(c.name,m,S);return le(c.name),b}});v.subscribe(c=>{C.available()&&C.publish(O(c.identity));});let _=e.autoDetect??true,yt=_===false?Promise.resolve(null):(async()=>{let c=_===true?{}:_;try{return await B(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:T,memoryCache:P,tracer:d,auth:l,agentContext:v,authz:x,policyCache:k,tools:M,progression:E,webmcp:C,ready:yt,detect:B,authenticate:async c=>{let m=await l.authenticate(c);return v.set(m,"authenticate"),m},presentIdentity:c=>{let m=h.present(c);return p({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(),p({type:"auth.identity_cleared"}),v.set(null,"cleared");},presentedIdentity:()=>h.snapshot(),setPolicies:c=>{x.set(c),p({type:"authz.policies_set",metadata:{count:c.length}});},listPolicies:()=>x.list(),syncPolicies:async()=>{let c=await k.sync();return x.set(c.policies),p({type:"authz.policies_set",metadata:{count:c.policies.length,synced:true}}),c.policies},syncSiteMemory:async()=>{let c=await P.sync();return c.memory&&(T.replace(c.memory),p({type:"memory.updated",metadata:{kind:"site",operation:"sync",etag:c.etag}})),c.memory},provideSiteMemory:c=>T.provide(c),provideForPage:c=>{T.provideForPage(c);},installMemoryDelivery:({metaTags:c=true,overlay:m=false}={})=>{let S=[];return c&&S.push(F({snapshot:T.snapshot()})),m&&S.push(J({snapshot:T.snapshot()})),{uninstall:()=>{S.forEach(b=>b.uninstall());}}},fetchWellKnown:async c=>{let m={};c!==void 0&&(m.origin=c);let S=await q(m);return S&&(T.replace(S),p({type:"memory.updated",metadata:{kind:"site",operation:"wellKnown",origin:c??null}})),S},installDomEnforcer:()=>$e({policyEngine:x,getIdentity:()=>B({webmcp:{pollMs:0}})}),registerTool:c=>M.register(c),syncTools:async()=>{let c=M.list({includeDisabled:true}),m=await mt.push(c);return p({type:"tool.registered",metadata:{operation:"sync",count:m}}),m},surfaceTools:({identity:c=null}={})=>O(c),explainSurfacing:({identity:c=null}={})=>tt(M.list(),ce(c)),groupedTools:({identity:c=null}={})=>nt(O(c)),estimateTokens:({identity:c=null}={})=>ot(O(c)),publishToWebMcp:({identity:c=null}={})=>{let m=O(c),S=C.publish(m);return m.forEach(b=>{p({type:"tool.surfaced",tool:b.name,metadata:{state:"published",trust:c?.trust??null,group:b.group??null}});}),{revoked:S.revoked,surfaced:m.length}},notifyToolInvoked:c=>le(c),evaluate:ae,traces:()=>d.list(),clearTraces:()=>d.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)}}}})};
|
|
16
|
+
export{Qt as A,Xe as B,Ye as C,Ze as D,et as E,tt as F,rt as G,nt as H,to as I,rr as J,ot as K,st as L,Y as M,re as N,ne as O,oe as P,se as Q,Fo as R,ue as a,L as b,$ as c,pe as d,K as e,kt as f,It as g,de as h,me as i,_r as j,ye as k,Ie as l,Me as m,Re as n,Ce as o,De as p,Le as q,$e as r,Ue as s,Ke as t,Ve as u,qt as v,F as w,J as x,qe as y,q as z};//# sourceMappingURL=chunk-4FJRAPA6.js.map
|
|
17
|
+
//# sourceMappingURL=chunk-4FJRAPA6.js.map
|