@agentronics/sdk 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import {h,f,aa}from'./chunk-3WPDIMJP.js';export{a as CRAWLER_SIGNATURES,O as DEFAULT_GROUP,C as WELL_KNOWN_PATH,d as bundledDetectors,q as createAgentContextStore,p as createAuthEngine,V as createConsoleExporter,_ as createDashboardExporter,$ as createDashboardSync,e as createDetectorRegistry,W as createGatewayExporter,k as createIdentityStore,Y as createIntelExporter,Z as createIntelSync,y as createMemoryCache,w as createMemoryStore,t as createPolicyCache,s as createPolicyEngine,K as createProgressionStore,r as createRateLimiter,S as createReviewPrompt,g as createSignatureLoader,x as createSiteMemoryStore,F as createToolRegistry,T as createTraceBuffer,U as createTracer,j as createVisionDetector,R as createWebMcpAdapter,z as createWebMcpContextTool,X as createWebhookExporter,L as decideSurfacing,f as declareAgent,n as defaultAuthMethods,l as deriveTrustLevel,H as descriptorTokens,h as detectAgent,b as detectCrawler,c as detectDom,J as estimateBudget,I as estimateToolTokens,N as explainSurfacing,D as fetchWellKnownContext,P as groupTools,m as highestTrust,aa as init,v as installDomEnforcer,B as installMemoryOverlay,A as installMetaTags,Q as listGroupNames,G as modelFacingDescriptor,o as previewAuthMethods,i as scoreVisionSignals,E as serializeWellKnownContext,u as showDenyOverlay,M as surfaceTools}from'./chunk-3WPDIMJP.js';export{a as VERSION,f as detectWebMcp,d as onWebMcpActivity,b as resolveModelContext,e as webMcpSupport}from'./chunk-BPDWJCPY.js';var ve={init:aa,declareAgent:f,detectAgent:h};export{ve as Agentronics};//# sourceMappingURL=index.js.map
1
+ import {h,f,aa}from'./chunk-JR5YRLTH.js';export{a as CRAWLER_SIGNATURES,O as DEFAULT_GROUP,C as WELL_KNOWN_PATH,d as bundledDetectors,q as createAgentContextStore,p as createAuthEngine,V as createConsoleExporter,_ as createDashboardExporter,$ as createDashboardSync,e as createDetectorRegistry,W as createGatewayExporter,k as createIdentityStore,Y as createIntelExporter,Z as createIntelSync,y as createMemoryCache,w as createMemoryStore,t as createPolicyCache,s as createPolicyEngine,K as createProgressionStore,r as createRateLimiter,S as createReviewPrompt,g as createSignatureLoader,x as createSiteMemoryStore,F as createToolRegistry,T as createTraceBuffer,U as createTracer,j as createVisionDetector,R as createWebMcpAdapter,z as createWebMcpContextTool,X as createWebhookExporter,L as decideSurfacing,f as declareAgent,n as defaultAuthMethods,l as deriveTrustLevel,H as descriptorTokens,h as detectAgent,b as detectCrawler,c as detectDom,J as estimateBudget,I as estimateToolTokens,N as explainSurfacing,D as fetchWellKnownContext,P as groupTools,m as highestTrust,aa as init,v as installDomEnforcer,B as installMemoryOverlay,A as installMetaTags,Q as listGroupNames,G as modelFacingDescriptor,o as previewAuthMethods,i as scoreVisionSignals,E as serializeWellKnownContext,u as showDenyOverlay,M as surfaceTools}from'./chunk-JR5YRLTH.js';export{a as VERSION,f as detectWebMcp,d as onWebMcpActivity,b as resolveModelContext,e as webMcpSupport}from'./chunk-DYCRZCCT.js';var ve={init:aa,declareAgent:f,detectAgent:h};export{ve as Agentronics};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
1
  import { AgentIdentity, IdentityClaim, TraceEvent, TraceEventType, VerificationResult, AgentClass, PolicyRule, PolicyEvaluation, MemoryScope, MemoryEntry, SiteMemory, SiteMemoryPageContext } from '@agentronics/protocol';
2
- import { D as DetectWebMcpOptions, T as ToolAnnotations, a as ModelContextSource, b as ModelContextLike, L as LegacyProvider } from './webmcp-BgKzHeQ3.js';
2
+ import { D as DetectWebMcpOptions, T as ToolAnnotations, a as ModelContextSource, b as ModelContextLike, L as LegacyProvider } from './webmcp-C5uwNbnJ.js';
3
3
 
4
4
  type CrawlerCategory = 'ai' | 'search';
5
5
  interface CrawlerSignature {
@@ -581,6 +581,8 @@ interface WebMcpAdapterOptions {
581
581
  } | null;
582
582
  } | null;
583
583
  invoke?: (tool: GovernedTool, input: unknown, signal?: AbortSignal) => Promise<unknown>;
584
+ /** A call that hasn't finished after this long is aborted and answered with an error. Default 30 000; 0 = never. */
585
+ toolTimeoutMs?: number;
584
586
  }
585
587
  /** Per-tool result of the last publish — the "callable / failed" status the console shows. */
586
588
  interface WebMcpRegistration {
@@ -634,6 +636,11 @@ interface InitOptions {
634
636
  * Pass your own function to use your UI, or `false` to refuse every review.
635
637
  */
636
638
  review?: Reviewer | false;
639
+ /**
640
+ * How long an agent's tool call may run before it's aborted and the agent
641
+ * gets an error back instead of waiting forever. Default 30 000 ms; 0 = no limit.
642
+ */
643
+ toolTimeoutMs?: number;
637
644
  /**
638
645
  * `'0.6'` keeps the pre-0.7 behaviour while you upgrade: unverified tokens
639
646
  * count as `verified`, SSO / SPIFFE / mTLS are on, and `review` rules run
@@ -1,5 +1,5 @@
1
1
  import { AgentIdentity, IdentityClaim, TraceEvent, TraceEventType, VerificationResult, AgentClass, PolicyRule, PolicyEvaluation, MemoryScope, MemoryEntry, SiteMemory, SiteMemoryPageContext } from '@agentronics/protocol';
2
- import { D as DetectWebMcpOptions, T as ToolAnnotations, a as ModelContextSource, b as ModelContextLike, L as LegacyProvider } from './webmcp-BgKzHeQ3.cjs';
2
+ import { D as DetectWebMcpOptions, T as ToolAnnotations, a as ModelContextSource, b as ModelContextLike, L as LegacyProvider } from './webmcp-C5uwNbnJ.cjs';
3
3
 
4
4
  type CrawlerCategory = 'ai' | 'search';
5
5
  interface CrawlerSignature {
@@ -581,6 +581,8 @@ interface WebMcpAdapterOptions {
581
581
  } | null;
582
582
  } | null;
583
583
  invoke?: (tool: GovernedTool, input: unknown, signal?: AbortSignal) => Promise<unknown>;
584
+ /** A call that hasn't finished after this long is aborted and answered with an error. Default 30 000; 0 = never. */
585
+ toolTimeoutMs?: number;
584
586
  }
585
587
  /** Per-tool result of the last publish — the "callable / failed" status the console shows. */
586
588
  interface WebMcpRegistration {
@@ -634,6 +636,11 @@ interface InitOptions {
634
636
  * Pass your own function to use your UI, or `false` to refuse every review.
635
637
  */
636
638
  review?: Reviewer | false;
639
+ /**
640
+ * How long an agent's tool call may run before it's aborted and the agent
641
+ * gets an error back instead of waiting forever. Default 30 000 ms; 0 = no limit.
642
+ */
643
+ toolTimeoutMs?: number;
637
644
  /**
638
645
  * `'0.6'` keeps the pre-0.7 behaviour while you upgrade: unverified tokens
639
646
  * count as `verified`, SSO / SPIFFE / mTLS are on, and `review` rules run
@@ -1,4 +1,4 @@
1
- 'use strict';var protocol=require('@agentronics/protocol');var b="0.1.2";var ee=(e,t)=>typeof e=="object"&&e!==null&&typeof e[t]=="function",H=e=>{let t=e??(typeof globalThis>"u"?null:globalThis);if(!t)return null;let n=t.document?.modelContext;if(ee(n,"registerTool"))return {source:"document",context:n};let o=t.navigator?.modelContext;return ee(o,"registerTool")?{source:"navigator",context:o}:ee(o,"provideContext")?{source:"legacy",context:o}:null},te=null,ne=new Set,oe=(e,t)=>{te={type:e,toolName:t,at:Date.now()},ne.forEach(n=>n(te));},Re=()=>te,Ee=e=>(ne.add(e),()=>{ne.delete(e);});var Kt=()=>{if(typeof navigator>"u")return null;let e=navigator.modelContext;return !e||typeof e!="object"?null:e.vendor||e.client?e:null},Ut=()=>H()?.source??null,N=async(e={})=>{let{pollMs:t=500}=e,n=Date.now();for(;;){let o=Re();if(o)return Vt(o);let r=Kt();if(r)return Ft(r);if(Date.now()-n>=t)return null;await new Promise(c=>setTimeout(c,50));}},Ce=()=>({class:"webmcp",trust:"detected",confidence:1,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b}),Vt=e=>({...Ce(),vendor:null,signals:{webmcp:true,source:Ut(),event:e.type,tool:e.toolName}}),Ft=e=>({...Ce(),vendor:e.vendor??e.client??null,signals:{webmcp:true,source:"legacy-extension",toolCount:Array.isArray(e.tools)?e.tools.length:0}});var Pe=[{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}],G=(e={})=>{let{signatures:t=Pe,disable:n=false,confidence:o=.9}=e;if(n||typeof navigator>"u")return null;let r=navigator.userAgent??"";if(!r)return null;for(let c of t)if(c.pattern.test(r))return {class:"crawler",trust:"detected",confidence:o,vendor:c.name,userAgent:r,detectionVersion:b,signals:{matched:c.name,category:c.category,ua:r}};return null};var Ht=[/HeadlessChrome/i,/Headless/i,/PhantomJS/i,/SlimerJS/i],zt=()=>({hit:(typeof navigator<"u"&&navigator.webdriver)===true,weight:.6,detail:"navigator.webdriver === true"}),Jt=()=>{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_*"}`}},qt=["__playwright__binding__","__pwInitScripts","__puppeteer_evaluation_script__","_phantom","callPhantom","__nightmare","domAutomation","domAutomationController","__selenium_unwrapped","__webdriver_evaluate","__driver_evaluate","__fxdriver_unwrapped"],Yt=()=>{if(typeof window>"u")return {hit:false,weight:.6};let e=qt.find(t=>t in window);return e?{hit:true,weight:.6,detail:`window.${e}`}:{hit:false,weight:.6}},Xt=()=>{if(typeof navigator>"u"||!navigator.plugins)return {hit:false,weight:.2};let e=/Win|Mac|Linux/.test(navigator.userAgent??""),t=navigator.plugins.length===0;return {hit:e&&t,weight:.2,detail:"desktop UA with no plugins"}},Qt=()=>{if(typeof navigator>"u")return {hit:false,weight:.7};let e=navigator.userAgent??"",t=Ht.some(n=>n.test(e));return t?{hit:t,weight:.7,detail:`headless UA: ${e}`}:{hit:t,weight:.7}},Zt=()=>{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"}},en=()=>{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"}},tn={webdriver:zt,chromedriver:Jt,automationGlobals:Yt,headlessUa:Qt,languages:Zt,permissions:en,plugins:Xt},K=(e={})=>{let{threshold:t=.4}=e,n={},o=0,r=0;for(let[a,u]of Object.entries(tn)){let m=u();o+=m.weight,n[a]={hit:m.hit,weight:m.weight,detail:m.detail},m.hit&&(r+=m.weight);}let c=o===0?0:r/o;return c<t?null:{class:"dom",trust:"detected",confidence:c,vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:n}};var De=()=>[{id:"webmcp.model-context",status:"stable",detect:()=>N({pollMs:0})},{id:"crawler.user-agent",status:"beta",detect:()=>G()},{id:"dom.automation-heuristics",status:"beta",detect:()=>K()}],re=(e=De())=>{let t=new Map(e.map(n=>[n.id,n]));return {register(n){t.set(n.id,n);},list(n){let o=[...t.values()];return n?o.filter(r=>r.status===n):o},async detectAll(n=false){for(let o of t.values()){if(o.status==="research"&&!n)continue;let r=await o.detect();if(r)return r}return null}}};var Oe=async(e={})=>{if(e.customDetectors?.length){let t=await re(e.customDetectors).detectAll(!!e.experimental);if(t)return t}if(e.webmcp!==false){let t=await N(e.webmcp??{});if(t)return t}if(e.crawler!==false){let t=G(e.crawler??{});if(t)return t}if(e.dom!==false){let t=K(e.dom??{});if(t)return t}return null};var nn=new Set(["1024x768","1280x800","1280x720","1280x1024","1440x900","1920x1080"]),on=e=>{if(e.length<6)return null;let t=e.reduce((o,r)=>o+r,0)/e.length;if(t<=0)return null;let n=e.reduce((o,r)=>o+(r-t)**2,0)/e.length;return Math.sqrt(n)/t},Le=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)},$e=(e={})=>{let{threshold:t=.6,minInteractions:n=3,onDetect:o,acceptUntrustedEvents:r=false}=e,c=w=>w.isTrusted||r,a=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},m=Number.NEGATIVE_INFINITY,i=0,g=0,f=[],y=0,x=null,d=a?.defaultView;d&&(u.vmViewport=nn.has(`${d.innerWidth}x${d.innerHeight}`));let l=w=>({class:"screenshot",trust:"detected",confidence:Number(w.toFixed(2)),vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{vision:true,...u}}),v=()=>{if(x||u.clicks+y<n)return;let w=Le(u);w>=t&&(x=l(w),o?.(x));},h=w=>{c(w)&&(u.pointerMoves+=1,m=w.timeStamp);},F=[["pointermove",h],["mousemove",h],["wheel",w=>{c(w)&&(u.wheelEvents+=1);}],["click",w=>{if(!c(w))return;let A=w;u.clicks+=1,w.timeStamp-m>400&&(u.teleportClicks+=1);let W=A.target instanceof Element?A.target:null;if(W&&typeof W.getBoundingClientRect=="function"){let P=W.getBoundingClientRect();if(P.width>8&&P.height>8){let D=Math.abs(A.clientX-(P.left+P.width/2)),O=Math.abs(A.clientY-(P.top+P.height/2));D<=1.5&&O<=1.5&&(u.centreClicks+=1);}}v();}],["keydown",w=>{if(!c(w))return;let A=w.timeStamp;i&&A-i<1500?(f.push(A-i),f.length>60&&f.shift(),u.keyIntervals=f.length,u.keyIntervalCv=on(f)):y+=1,i=A,g=A;}],["keyup",()=>v()],["input",w=>{if(!c(w))return;let A=w;A.inputType==="insertText"&&A.data&&A.data.length>1&&w.timeStamp-g>200&&(u.insertWithoutKeys+=1,y+=1,v());}]];for(let[w,A]of F)a?.addEventListener(w,A,{capture:true,passive:true});return {signals:()=>({...u}),score:()=>Le(u),detected:()=>x,stop:()=>{for(let[w,A]of F)a?.removeEventListener(w,A,{capture:true});}}};var cn=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),je=()=>{let e=null;return {present(t){let n=protocol.IdentityClaim.safeParse(t);if(!n.success)throw new protocol.AgentronicsError("invalid_api_key",`Invalid identity claim: ${n.error.issues[0]?.message??"unknown"}`);let o={claim:n.data,identity:cn(n.data)};return e=o,o},clear(){e=null;},preferOver(t){return e?t?protocol.isHigherTrust(e.identity.trust,t.trust)?e.identity:t:e.identity:t},snapshot(){return e}}};var We=e=>{let t=null;for(let n of e)(!t||protocol.TRUST_RANK[n.trust]>protocol.TRUST_RANK[t.trust])&&(t=n);return t};var Be=()=>({name:"bearer",async authenticate(e,t){if(!e.bearerToken)return null;let n=await t.verifyToken?.("bearer",e.bearerToken);return {class:e.classHint??"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"bearer",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{bearer:true,verifiedRemotely:!!n}}}});var Ne=()=>({name:"detection",async authenticate(e){return e.detected??null}});var Ge=()=>({name:"extensionToken",async authenticate(e,t){if(!e.extensionToken)return null;let n=await t.verifyToken?.("extensionToken",e.extensionToken);return {class:"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"browser-extension",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{extensionToken:true,verifiedRemotely:!!n}}}});var Ke=()=>({name:"mtls",async authenticate(e,t){if(!e.xfccHeader)return null;let n=await t.verifyToken?.("mtls",e.xfccHeader);return {class:e.classHint??"webmcp",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"mtls",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{mtls:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var Ue=()=>({name:"oauth2",async authenticate(e,t){if(!e.oauth2AccessToken)return null;let n=await t.verifyToken?.("oauth2",e.oauth2AccessToken);return {class:e.classHint??"webmcp",trust:n?e.oauth2Subject&&n.trust!=="detected"&&n.trust!=="declared"?"linked":n.trust:"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"oauth2",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{oauth2:true,subject:e.oauth2Subject??null,verifiedRemotely:!!n}}}});var un=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),Ve=()=>({name:"selfDeclaration",async authenticate(e){return e.declaration?un(protocol.IdentityClaim.parse(e.declaration)):null}});var Fe=()=>({name:"sessionLink",async authenticate(e,t){if(!e.sessionLinkToken)return null;let n=await t.verifyToken?.("sessionLink",e.sessionLinkToken);return {class:e.classHint??"screenshot",trust:n?e.linkedUserId&&n.trust!=="detected"&&n.trust!=="declared"?"linked":n.trust:"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"session-link",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{sessionLink:true,linkedUserId:e.linkedUserId??null,verifiedRemotely:!!n}}}});var He=()=>({name:"sso",async authenticate(e,t){if(!e.ssoIdToken)return null;let n=await t.verifyToken?.("sso",e.ssoIdToken);return {class:e.classHint??"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"sso",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{sso:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var ze=()=>({name:"spiffe",async authenticate(e,t){if(!e.spiffeJwt)return null;let n=await t.verifyToken?.("spiffe",e.spiffeJwt),o=n?.vendor==="google";return {class:e.classHint??"webmcp",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"spiffe",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{spiffe:true,spiffeId:n?.subject??null,subject:n?.subject??null,verifiedRemotely:!!n,...o?{googleAgent:true}:{},...n?.signals??{}}}}});var Je=()=>({name:"xAgentHeader",async authenticate(e){if(!e.xAgentHeader)return null;let[t="x-agent",n="dom",o]=e.xAgentHeader.split(";"),r=protocol.AgentClass.safeParse(n);return {class:r.success?r.data:"dom",trust:"declared",confidence:o?1:.8,vendor:t,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{xAgentHeader:true,hasProof:!!o}}}});var Ye=new Set(["bearer","extensionToken","sessionLink","oauth2","sso","spiffe","mtls"]),pn=(e,t,n)=>{if(Ye.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},qe=()=>[Ne(),Ve(),Be(),Je(),Ge(),Fe(),Ue()],gn=()=>[He(),ze(),Ke()],mn={detection:"detection",selfDeclaration:"declaration",bearer:"bearer",xAgentHeader:"x-agent-header",extensionToken:"extension",sessionLink:"session-link",oauth2:"oauth2",sso:"sso",spiffe:"spiffe",mtls:"mtls"},yn=(e,t)=>e==="spiffe"&&t.signals?.googleAgent===true?"google-agent":mn[e],Xe=({compat:e,methods:t=e==="0.6"?[...qe(),...gn()]:qe(),context:n={},onTrace:o,onUnverifiedToken:r}={})=>{let c=false;return {async authenticate(a){let u=[],m={};for(let d of t){let l=await d.authenticate(a,n);m[d.name]=!!l,l&&(Ye.has(d.name)&&l.signals?.verifiedRemotely===false&&!n.verifyToken&&!c&&(c=true,r?.(d.name)),e==="0.6"&&(l=pn(d.name,l,a)),u.push({method:d.name,identity:l}));}let i=We(u.map(d=>d.identity)),g=i?u.find(d=>d.identity===i):void 0,f=g?yn(g.method,g.identity):void 0,y=typeof i?.signals?.subject=="string"?i.signals.subject:void 0,x={type:i?"auth.identity_presented":"sdk.error",agent:i,outcome:i?"success":"error",metadata:{methods:m,...f?{protocol:f}:{},...y?{subject:y}:{}}};return i||(x.error="No auth method produced an identity."),o?.(x),i},methods(){return t.map(a=>a.name)}}};var fn={identity:null,source:"initial",updatedAt:null},Qe=()=>{let e=fn,t=new Set,n=()=>{t.size!==0&&t.forEach(o=>o(e));};return {snapshot(){return e},set(o,r){e={identity:o,source:r,updatedAt:new Date().toISOString()},n();},subscribe(o){return t.add(o),()=>{t.delete(o);}}}};var hn=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,n)=>{e.set(t,n);}}},vn=()=>typeof window>"u"||!window.localStorage?hn():{read:e=>{try{return window.localStorage.getItem(e)}catch{return null}},write:(e,t)=>{try{window.localStorage.setItem(e,t);}catch{}}},xn=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},Ze=(e=vn())=>({consume(t,n,o=Date.now()){let r=`agtx:rate:${t}`,c=xn(e.read(r)),a=c&&c.resetAt>o?c.resetAt:o+n.windowSeconds*1e3,u=c&&c.resetAt>o?c.count+1:1;return e.write(r,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?protocol.TRUST_RANK[e.trust]:-1,o=protocol.TRUST_RANK[t.minTrust];return n>=o},Sn=(e,t)=>t.allowedClasses.length===0?true:e?t.allowedClasses.includes(e.class):false,nt="allow",An=(e,t)=>{let n=t?.class??"unknown",o=t?.vendor??"unknown",r=t?.trust??"none";return `${e}:${n}:${o}:${r}`},ot=(e=[],t={})=>{let n=e.map(r=>protocol.PolicyRule.parse(r)),o=t.rateLimiter??Ze();return {set(r){n=r.map(c=>protocol.PolicyRule.parse(c));},list(){return [...n]},evaluate({tool:r,identity:c}){for(let a of n)if(wn(a.tool,r)){if(!bn(c,a))return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" requires trust >= ${a.minTrust}.`};if(!Sn(c,a))return {decision:"deny",ruleId:a.id,reason:`Rule "${a.id}" restricts to classes: ${a.allowedClasses.join(", ")}.`};if(a.rateLimit){let u=o.consume(An(r,c),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:nt,ruleId:null,reason:`No rule matched tool "${r}". Falling back to "${nt}".`}}}};var rt=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>{let r={policies:[],etag:null};return {snapshot(){return {policies:[...r.policies],etag:r.etag}},async sync(){let c=await o(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/policies`,{headers:{authorization:`Bearer ${n}`,...r.etag?{"if-none-match":r.etag}:{}}});if(c.status===304)return this.snapshot();if(!c.ok)throw new Error(`Policy sync failed with status ${c.status}.`);let a=await c.json();return r={policies:protocol.PolicyRule.array().parse(a.policies??[]),etag:c.headers.get("etag")},this.snapshot()}}};var it=({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 st=({policyEngine:e,getIdentity:t,documentRef:n=typeof document>"u"?void 0:document,selector:o="[data-agentronics-tool]"})=>{if(!n)return {uninstall:()=>{}};let r=c=>{let a=c.target instanceof Element?c.target.closest(o):null;if(!(a instanceof HTMLElement))return;let u=a.dataset.agentronicsTool;u&&Promise.resolve(t()).then(m=>{let i=e.evaluate({tool:u,identity:m});i.decision==="deny"&&(c.preventDefault(),c.stopPropagation(),it({message:i.reason,documentRef:n}));});};return n.addEventListener("click",r,true),{uninstall:()=>n.removeEventListener("click",r,true)}};var ie=()=>{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()]}},at=(e,t)=>({read:n=>{try{return e.getItem(t+n)}catch{return null}},write:(n,o)=>{try{e.setItem(t+n,o);}catch{}},remove:n=>{try{e.removeItem(t+n);}catch{}},keys:()=>{let n=[];try{for(let o=0;o<e.length;o++){let r=e.key(o);r&&r.startsWith(t)&&n.push(r.slice(t.length));}}catch{}return n}}),ct="agtx:",lt=()=>{let e=typeof window<"u",t=e&&typeof window.sessionStorage<"u"?at(window.sessionStorage,ct+"session:"):ie(),n=e&&typeof window.localStorage<"u"?at(window.localStorage,ct+"user:"):ie();return {session:t,user:n,org:ie()}};var dt=(e,t)=>e.expiresAt!==null&&e.expiresAt<=t,pt=e=>{if(!e)return null;try{let t=JSON.parse(e);return typeof t!="object"||t===null?null:t}catch{return null}},kn=e=>JSON.stringify(e),gt=(e={})=>{let t=lt(),n=m=>{e.onTrace?.(m);};return {get:(m,i={})=>{let g=i.scope??"session",f=t[g],y=pt(f.read(m));if(!y){n({type:"memory.accessed",metadata:{operation:"get",key:m,scope:g,hit:false}});return}if(dt(y,Date.now())){f.remove(m),n({type:"memory.accessed",metadata:{operation:"get",key:m,scope:g,hit:false,expired:true}});return}return n({type:"memory.accessed",metadata:{operation:"get",key:m,scope:g,hit:true}}),y.value},set:(m,i,g={})=>{let f=g.scope??"session",y=g.ttlSeconds??null,x=Date.now(),d={value:i,expiresAt:y===null?null:x+y*1e3,updatedAt:new Date(x).toISOString()};return t[f].write(m,kn(d)),n({type:"memory.updated",metadata:{operation:"set",key:m,scope:f,ttlSeconds:y}}),protocol.MemoryEntry.parse({key:m,value:i,scope:f,ttlSeconds:y,updatedAt:d.updatedAt})},remove:(m,i={})=>{let g=i.scope??"session";t[g].remove(m),n({type:"memory.updated",metadata:{operation:"remove",key:m,scope:g}});},list:(m={})=>{let i=m.scope??"session",g=t[i],f=Date.now(),y=[];for(let x of g.keys()){let d=pt(g.read(x));if(d){if(dt(d,f)){g.remove(x);continue}y.push(protocol.MemoryEntry.parse({key:x,value:d.value,scope:i,ttlSeconds:d.expiresAt===null?null:Math.max(0,Math.round((d.expiresAt-f)/1e3)),updatedAt:d.updatedAt}));}}return n({type:"memory.accessed",metadata:{operation:"list",scope:i,count:y.length}}),y},clear:(m={})=>{let i=m.scope??"session",g=t[i],f=g.keys().length;for(let y of g.keys())g.remove(y);n({type:"memory.updated",metadata:{operation:"clear",scope:i,count:f}});}}};var se=e=>protocol.SiteMemory.parse(JSON.parse(JSON.stringify(e))),z=e=>({...e,updatedAt:new Date().toISOString()}),mt=(e={})=>{let t=protocol.SiteMemory.parse({...protocol.SITE_MEMORY_DEFAULT,...e.initial??{}}),n=null,o=new Set,r=l=>{e.onTrace?.(l);},c=()=>{n=null;},a=()=>{if(o.size===0)return;let l=se(t);n=l,o.forEach(v=>v(l));},u=l=>{let v=protocol.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=z(v),c(),r({type:"memory.updated",metadata:{kind:"site",operation:"provide",keys:Object.keys(l)}}),a(),g()},m=(l,v)=>{let h=l.split(".").filter(Boolean);if(h.length===0)throw new Error("siteMemory.update() requires a non-empty dot-path.");let T=JSON.parse(JSON.stringify(t)),I=T;for(let R=0;R<h.length-1;R++){let k=h[R],E=I[k];(typeof E!="object"||E===null||Array.isArray(E))&&(I[k]={}),I=I[k];}return I[h[h.length-1]]=v,t=z(protocol.SiteMemory.parse(T)),c(),r({type:"memory.updated",metadata:{kind:"site",operation:"update",path:l}}),a(),g()},i=l=>{let v=protocol.SiteMemoryPageContext.parse({path:l.path,payload:l.payload,updatedAt:new Date().toISOString()});return t=z({...t,pageContexts:{...t.pageContexts,[l.path]:v}}),c(),r({type:"memory.updated",metadata:{kind:"site",operation:"provideForPage",path:l.path}}),a(),{...v,payload:{...v.payload}}},g=()=>(n||(n=se(t)),n);return {provide:u,update:m,provideForPage:i,snapshot:g,get:l=>{if(r({type:"memory.accessed",metadata:{kind:"site",operation:l?"get":"snapshot",path:l??null}}),!l)return se(t);let v=l.split(".").filter(Boolean),h=t;for(let T of v){if(typeof h!="object"||h===null)return;h=h[T];}return h},getForPage:l=>{r({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=z(protocol.SiteMemory.parse(l)),c(),a(),g()),subscribe:l=>(o.add(l),()=>{o.delete(l);})}};var ft=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>{let r={memory:null,etag:null};return {snapshot(){return {memory:r.memory?protocol.SiteMemory.parse(r.memory):null,etag:r.etag}},async sync(){let c=await o(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/memory`,{headers:{authorization:`Bearer ${n}`,...r.etag?{"if-none-match":r.etag}:{}}});if(c.status===304)return this.snapshot();if(!c.ok)throw new Error(`Memory sync failed with status ${c.status}.`);let a=await c.json();return r={memory:protocol.SiteMemory.parse(a.memory??{}),etag:c.headers.get("etag")},this.snapshot()}}};var L="agent-context-",ae="agentronics-site-context",Rn=e=>{try{return JSON.stringify(e)}catch{return "{}"}},J=(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);},q=(e,t)=>{e.querySelectorAll(`meta[name="${t}"]`).forEach(n=>n.remove());},ce=({doc:e=typeof document>"u"?null:document,snapshot:t,schemaType:n="WebSite"})=>{if(!e)return {uninstall:()=>{}};J(e,`${L}version`,t.version),J(e,`${L}updated-at`,t.updatedAt??new Date().toISOString()),t.siteMap?.navigation?.flow&&J(e,`${L}flow`,t.siteMap.navigation.flow),J(e,`${L}workflows`,Object.keys(t.workflows).join(","));let o=e.getElementById(ae);return o||(o=e.createElement("script"),o.type="application/ld+json",o.id=ae,e.head.appendChild(o)),o.textContent=Rn({"@context":"https://schema.org","@type":n,name:"Agentronics Site Memory",agentronics:t}),{uninstall:()=>{q(e,`${L}version`),q(e,`${L}updated-at`),q(e,`${L}flow`),q(e,`${L}workflows`),e.getElementById(ae)?.remove();}}};var ht="agentronics-memory-overlay",En=e=>`
1
+ 'use strict';var protocol=require('@agentronics/protocol');var b="0.1.2";var ee=(e,t)=>typeof e=="object"&&e!==null&&typeof e[t]=="function",H=e=>{let t=e??(typeof globalThis>"u"?null:globalThis);if(!t)return null;let n=t.document?.modelContext;if(ee(n,"registerTool"))return {source:"document",context:n};let o=t.navigator?.modelContext;return ee(o,"registerTool")?{source:"navigator",context:o}:ee(o,"provideContext")?{source:"legacy",context:o}:null},te=null,ne=new Set,oe=(e,t)=>{te={type:e,toolName:t,at:Date.now()},ne.forEach(n=>n(te));},Ee=()=>te,Pe=e=>(ne.add(e),()=>{ne.delete(e);});var Vt=()=>{if(typeof navigator>"u")return null;let e=navigator.modelContext;return !e||typeof e!="object"?null:e.vendor||e.client?e:null},Ft=()=>H()?.source??null,N=async(e={})=>{let{pollMs:t=500}=e,n=Date.now();for(;;){let o=Ee();if(o)return Ht(o);let r=Vt();if(r)return zt(r);if(Date.now()-n>=t)return null;await new Promise(a=>setTimeout(a,50));}},Ce=()=>({class:"webmcp",trust:"detected",confidence:1,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b}),Ht=e=>({...Ce(),vendor:null,signals:{webmcp:true,source:Ft(),event:e.type,tool:e.toolName}}),zt=e=>({...Ce(),vendor:e.vendor??e.client??null,signals:{webmcp:true,source:"legacy-extension",toolCount:Array.isArray(e.tools)?e.tools.length:0}});var Oe=[{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}],G=(e={})=>{let{signatures:t=Oe,disable:n=false,confidence:o=.9}=e;if(n||typeof navigator>"u")return null;let r=navigator.userAgent??"";if(!r)return null;for(let a of t)if(a.pattern.test(r))return {class:"crawler",trust:"detected",confidence:o,vendor:a.name,userAgent:r,detectionVersion:b,signals:{matched:a.name,category:a.category,ua:r}};return null};var Jt=[/HeadlessChrome/i,/Headless/i,/PhantomJS/i,/SlimerJS/i],qt=()=>({hit:(typeof navigator<"u"&&navigator.webdriver)===true,weight:.6,detail:"navigator.webdriver === true"}),Yt=()=>{if(typeof window>"u")return {hit:false,weight:.5};let e=Object.keys(window).filter(t=>t.startsWith("cdc_"));return {hit:e.length>0,weight:.5,detail:`window.${e[0]??"cdc_*"}`}},Xt=["__playwright__binding__","__pwInitScripts","__puppeteer_evaluation_script__","_phantom","callPhantom","__nightmare","domAutomation","domAutomationController","__selenium_unwrapped","__webdriver_evaluate","__driver_evaluate","__fxdriver_unwrapped"],Qt=()=>{if(typeof window>"u")return {hit:false,weight:.6};let e=Xt.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"}},en=()=>{if(typeof navigator>"u")return {hit:false,weight:.7};let e=navigator.userAgent??"",t=Jt.some(n=>n.test(e));return t?{hit:t,weight:.7,detail:`headless UA: ${e}`}:{hit:t,weight:.7}},tn=()=>{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"}},nn=()=>{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"}},on={webdriver:qt,chromedriver:Yt,automationGlobals:Qt,headlessUa:en,languages:tn,permissions:nn,plugins:Zt},U=(e={})=>{let{threshold:t=.4}=e,n={},o=0,r=0;for(let[i,u]of Object.entries(on)){let d=u();o+=d.weight,n[i]={hit:d.hit,weight:d.weight,detail:d.detail},d.hit&&(r+=d.weight);}let a=o===0?0:r/o;return a<t?null:{class:"dom",trust:"detected",confidence:a,vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:n}};var De=()=>[{id:"webmcp.model-context",status:"stable",detect:()=>N({pollMs:0})},{id:"crawler.user-agent",status:"beta",detect:()=>G()},{id:"dom.automation-heuristics",status:"beta",detect:()=>U()}],re=(e=De())=>{let t=new Map(e.map(n=>[n.id,n]));return {register(n){t.set(n.id,n);},list(n){let o=[...t.values()];return n?o.filter(r=>r.status===n):o},async detectAll(n=false){for(let o of t.values()){if(o.status==="research"&&!n)continue;let r=await o.detect();if(r)return r}return null}}};var Le=async(e={})=>{if(e.customDetectors?.length){let t=await re(e.customDetectors).detectAll(!!e.experimental);if(t)return t}if(e.webmcp!==false){let t=await N(e.webmcp??{});if(t)return t}if(e.crawler!==false){let t=G(e.crawler??{});if(t)return t}if(e.dom!==false){let t=U(e.dom??{});if(t)return t}return null};var rn=new Set(["1024x768","1280x800","1280x720","1280x1024","1440x900","1920x1080"]),sn=e=>{if(e.length<6)return null;let t=e.reduce((o,r)=>o+r,0)/e.length;if(t<=0)return null;let n=e.reduce((o,r)=>o+(r-t)**2,0)/e.length;return Math.sqrt(n)/t},$e=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)},_e=(e={})=>{let{threshold:t=.6,minInteractions:n=3,onDetect:o,acceptUntrustedEvents:r=false}=e,a=x=>x.isTrusted||r,i=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},d=Number.NEGATIVE_INFINITY,s=0,p=0,y=[],m=0,f=null,v=i?.defaultView;v&&(u.vmViewport=rn.has(`${v.innerWidth}x${v.innerHeight}`));let l=x=>({class:"screenshot",trust:"detected",confidence:Number(x.toFixed(2)),vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{vision:true,...u}}),h=()=>{if(f||u.clicks+m<n)return;let x=$e(u);x>=t&&(f=l(x),o?.(f));},w=x=>{a(x)&&(u.pointerMoves+=1,d=x.timeStamp);},F=[["pointermove",w],["mousemove",w],["wheel",x=>{a(x)&&(u.wheelEvents+=1);}],["click",x=>{if(!a(x))return;let T=x;u.clicks+=1,x.timeStamp-d>400&&(u.teleportClicks+=1);let W=T.target instanceof Element?T.target:null;if(W&&typeof W.getBoundingClientRect=="function"){let C=W.getBoundingClientRect();if(C.width>8&&C.height>8){let O=Math.abs(T.clientX-(C.left+C.width/2)),D=Math.abs(T.clientY-(C.top+C.height/2));O<=1.5&&D<=1.5&&(u.centreClicks+=1);}}h();}],["keydown",x=>{if(!a(x))return;let T=x.timeStamp;s&&T-s<1500?(y.push(T-s),y.length>60&&y.shift(),u.keyIntervals=y.length,u.keyIntervalCv=sn(y)):m+=1,s=T,p=T;}],["keyup",()=>h()],["input",x=>{if(!a(x))return;let T=x;T.inputType==="insertText"&&T.data&&T.data.length>1&&x.timeStamp-p>200&&(u.insertWithoutKeys+=1,m+=1,h());}]];for(let[x,T]of F)i?.addEventListener(x,T,{capture:true,passive:true});return {signals:()=>({...u}),score:()=>$e(u),detected:()=>f,stop:()=>{for(let[x,T]of F)i?.removeEventListener(x,T,{capture:true});}}};var un=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),je=()=>{let e=null;return {present(t){let n=protocol.IdentityClaim.safeParse(t);if(!n.success)throw new protocol.AgentronicsError("invalid_api_key",`Invalid identity claim: ${n.error.issues[0]?.message??"unknown"}`);let o={claim:n.data,identity:un(n.data)};return e=o,o},clear(){e=null;},preferOver(t){return e?t?protocol.isHigherTrust(e.identity.trust,t.trust)?e.identity:t:e.identity:t},snapshot(){return e}}};var Be=e=>{let t=null;for(let n of e)(!t||protocol.TRUST_RANK[n.trust]>protocol.TRUST_RANK[t.trust])&&(t=n);return t};var Ne=()=>({name:"bearer",async authenticate(e,t){if(!e.bearerToken)return null;let n=await t.verifyToken?.("bearer",e.bearerToken);return {class:e.classHint??"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"bearer",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{bearer:true,verifiedRemotely:!!n}}}});var Ge=()=>({name:"detection",async authenticate(e){return e.detected??null}});var Ue=()=>({name:"extensionToken",async authenticate(e,t){if(!e.extensionToken)return null;let n=await t.verifyToken?.("extensionToken",e.extensionToken);return {class:"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"browser-extension",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{extensionToken:true,verifiedRemotely:!!n}}}});var Ke=()=>({name:"mtls",async authenticate(e,t){if(!e.xfccHeader)return null;let n=await t.verifyToken?.("mtls",e.xfccHeader);return {class:e.classHint??"webmcp",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"mtls",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{mtls:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var Ve=()=>({name:"oauth2",async authenticate(e,t){if(!e.oauth2AccessToken)return null;let n=await t.verifyToken?.("oauth2",e.oauth2AccessToken);return {class:e.classHint??"webmcp",trust:n?e.oauth2Subject&&n.trust!=="detected"&&n.trust!=="declared"?"linked":n.trust:"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"oauth2",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{oauth2:true,subject:e.oauth2Subject??null,verifiedRemotely:!!n}}}});var pn=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),Fe=()=>({name:"selfDeclaration",async authenticate(e){return e.declaration?pn(protocol.IdentityClaim.parse(e.declaration)):null}});var He=()=>({name:"sessionLink",async authenticate(e,t){if(!e.sessionLinkToken)return null;let n=await t.verifyToken?.("sessionLink",e.sessionLinkToken);return {class:e.classHint??"screenshot",trust:n?e.linkedUserId&&n.trust!=="detected"&&n.trust!=="declared"?"linked":n.trust:"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"session-link",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{sessionLink:true,linkedUserId:e.linkedUserId??null,verifiedRemotely:!!n}}}});var ze=()=>({name:"sso",async authenticate(e,t){if(!e.ssoIdToken)return null;let n=await t.verifyToken?.("sso",e.ssoIdToken);return {class:e.classHint??"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"sso",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{sso:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var Je=()=>({name:"spiffe",async authenticate(e,t){if(!e.spiffeJwt)return null;let n=await t.verifyToken?.("spiffe",e.spiffeJwt),o=n?.vendor==="google";return {class:e.classHint??"webmcp",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"spiffe",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{spiffe:true,spiffeId:n?.subject??null,subject:n?.subject??null,verifiedRemotely:!!n,...o?{googleAgent:true}:{},...n?.signals??{}}}}});var qe=()=>({name:"xAgentHeader",async authenticate(e){if(!e.xAgentHeader)return null;let[t="x-agent",n="dom",o]=e.xAgentHeader.split(";"),r=protocol.AgentClass.safeParse(n);return {class:r.success?r.data:"dom",trust:"declared",confidence:o?1:.8,vendor:t,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:b,signals:{xAgentHeader:true,hasProof:!!o}}}});var Xe=new Set(["bearer","extensionToken","sessionLink","oauth2","sso","spiffe","mtls"]),gn=(e,t,n)=>{if(Xe.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},Ye=()=>[Ge(),Fe(),Ne(),qe(),Ue(),He(),Ve()],yn=()=>[ze(),Je(),Ke()],fn={detection:"detection",selfDeclaration:"declaration",bearer:"bearer",xAgentHeader:"x-agent-header",extensionToken:"extension",sessionLink:"session-link",oauth2:"oauth2",sso:"sso",spiffe:"spiffe",mtls:"mtls"},hn=(e,t)=>e==="spiffe"&&t.signals?.googleAgent===true?"google-agent":fn[e],Qe=({compat:e,methods:t=e==="0.6"?[...Ye(),...yn()]:Ye(),context:n={},onTrace:o,onUnverifiedToken:r}={})=>{let a=false;return {async authenticate(i){let u=[],d={};for(let v of t){let l=await v.authenticate(i,n);d[v.name]=!!l,l&&(Xe.has(v.name)&&l.signals?.verifiedRemotely===false&&!n.verifyToken&&!a&&(a=true,r?.(v.name)),e==="0.6"&&(l=gn(v.name,l,i)),u.push({method:v.name,identity:l}));}let s=Be(u.map(v=>v.identity)),p=s?u.find(v=>v.identity===s):void 0,y=p?hn(p.method,p.identity):void 0,m=typeof s?.signals?.subject=="string"?s.signals.subject:void 0,f={type:s?"auth.identity_presented":"sdk.error",agent:s,outcome:s?"success":"error",metadata:{methods:d,...y?{protocol:y}:{},...m?{subject:m}:{}}};return s||(f.error="No auth method produced an identity."),o?.(f),s},methods(){return t.map(i=>i.name)}}};var vn={identity:null,source:"initial",updatedAt:null},Ze=()=>{let e=vn,t=new Set,n=()=>{t.size!==0&&t.forEach(o=>o(e));};return {snapshot(){return e},set(o,r){e={identity:o,source:r,updatedAt:new Date().toISOString()},n();},subscribe(o){return t.add(o),()=>{t.delete(o);}}}};var wn=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,n)=>{e.set(t,n);}}},xn=()=>typeof window>"u"||!window.localStorage?wn():{read:e=>{try{return window.localStorage.getItem(e)}catch{return null}},write:(e,t)=>{try{window.localStorage.setItem(e,t);}catch{}}},bn=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},et=(e=xn())=>({consume(t,n,o=Date.now()){let r=`agtx:rate:${t}`,a=bn(e.read(r)),i=a&&a.resetAt>o?a.resetAt:o+n.windowSeconds*1e3,u=a&&a.resetAt>o?a.count+1:1;return e.write(r,JSON.stringify({count:u,resetAt:i})),{allowed:u<=n.max,remaining:Math.max(0,n.max-u),resetAt:i}}});var Sn=(e,t)=>e==="*"||e===t?true:e.includes("*")?new RegExp("^"+e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*")+"$").test(t):false,Tn=(e,t)=>{let n=e?protocol.TRUST_RANK[e.trust]:-1,o=protocol.TRUST_RANK[t.minTrust];return n>=o},An=(e,t)=>t.allowedClasses.length===0?true:e?t.allowedClasses.includes(e.class):false,ot="allow",kn=(e,t)=>{let n=t?.class??"unknown",o=t?.vendor??"unknown",r=t?.trust??"none";return `${e}:${n}:${o}:${r}`},rt=(e=[],t={})=>{let n=e.map(r=>protocol.PolicyRule.parse(r)),o=t.rateLimiter??et();return {set(r){n=r.map(a=>protocol.PolicyRule.parse(a));},list(){return [...n]},evaluate({tool:r,identity:a}){for(let i of n)if(Sn(i.tool,r)){if(!Tn(a,i))return {decision:"deny",ruleId:i.id,reason:`Rule "${i.id}" requires trust >= ${i.minTrust}.`};if(!An(a,i))return {decision:"deny",ruleId:i.id,reason:`Rule "${i.id}" restricts to classes: ${i.allowedClasses.join(", ")}.`};if(i.rateLimit){let u=o.consume(kn(r,a),i.rateLimit);if(!u.allowed)return {decision:"deny",ruleId:i.id,reason:`Rule "${i.id}" rate limit exceeded. Resets at ${new Date(u.resetAt).toISOString()}.`}}return {decision:i.decision,ruleId:i.id,reason:`Matched rule "${i.id}".`}}return {decision:ot,ruleId:null,reason:`No rule matched tool "${r}". Falling back to "${ot}".`}}}};var it=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>{let r={policies:[],etag:null};return {snapshot(){return {policies:[...r.policies],etag:r.etag}},async sync(){let a=await o(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/policies`,{headers:{authorization:`Bearer ${n}`,...r.etag?{"if-none-match":r.etag}:{}}});if(a.status===304)return this.snapshot();if(!a.ok)throw new Error(`Policy sync failed with status ${a.status}.`);let i=await a.json();return r={policies:protocol.PolicyRule.array().parse(i.policies??[]),etag:a.headers.get("etag")},this.snapshot()}}};var st=({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 at=({policyEngine:e,getIdentity:t,documentRef:n=typeof document>"u"?void 0:document,selector:o="[data-agentronics-tool]"})=>{if(!n)return {uninstall:()=>{}};let r=a=>{let i=a.target instanceof Element?a.target.closest(o):null;if(!(i instanceof HTMLElement))return;let u=i.dataset.agentronicsTool;u&&Promise.resolve(t()).then(d=>{let s=e.evaluate({tool:u,identity:d});s.decision==="deny"&&(a.preventDefault(),a.stopPropagation(),st({message:s.reason,documentRef:n}));});};return n.addEventListener("click",r,true),{uninstall:()=>n.removeEventListener("click",r,true)}};var ie=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,n)=>{e.set(t,n);},remove:t=>{e.delete(t);},keys:()=>[...e.keys()]}},ct=(e,t)=>({read:n=>{try{return e.getItem(t+n)}catch{return null}},write:(n,o)=>{try{e.setItem(t+n,o);}catch{}},remove:n=>{try{e.removeItem(t+n);}catch{}},keys:()=>{let n=[];try{for(let o=0;o<e.length;o++){let r=e.key(o);r&&r.startsWith(t)&&n.push(r.slice(t.length));}}catch{}return n}}),lt="agtx:",ut=()=>{let e=typeof window<"u",t=e&&typeof window.sessionStorage<"u"?ct(window.sessionStorage,lt+"session:"):ie(),n=e&&typeof window.localStorage<"u"?ct(window.localStorage,lt+"user:"):ie();return {session:t,user:n,org:ie()}};var pt=(e,t)=>e.expiresAt!==null&&e.expiresAt<=t,mt=e=>{if(!e)return null;try{let t=JSON.parse(e);return typeof t!="object"||t===null?null:t}catch{return null}},In=e=>JSON.stringify(e),gt=(e={})=>{let t=ut(),n=d=>{e.onTrace?.(d);};return {get:(d,s={})=>{let p=s.scope??"session",y=t[p],m=mt(y.read(d));if(!m){n({type:"memory.accessed",metadata:{operation:"get",key:d,scope:p,hit:false}});return}if(pt(m,Date.now())){y.remove(d),n({type:"memory.accessed",metadata:{operation:"get",key:d,scope:p,hit:false,expired:true}});return}return n({type:"memory.accessed",metadata:{operation:"get",key:d,scope:p,hit:true}}),m.value},set:(d,s,p={})=>{let y=p.scope??"session",m=p.ttlSeconds??null,f=Date.now(),v={value:s,expiresAt:m===null?null:f+m*1e3,updatedAt:new Date(f).toISOString()};return t[y].write(d,In(v)),n({type:"memory.updated",metadata:{operation:"set",key:d,scope:y,ttlSeconds:m}}),protocol.MemoryEntry.parse({key:d,value:s,scope:y,ttlSeconds:m,updatedAt:v.updatedAt})},remove:(d,s={})=>{let p=s.scope??"session";t[p].remove(d),n({type:"memory.updated",metadata:{operation:"remove",key:d,scope:p}});},list:(d={})=>{let s=d.scope??"session",p=t[s],y=Date.now(),m=[];for(let f of p.keys()){let v=mt(p.read(f));if(v){if(pt(v,y)){p.remove(f);continue}m.push(protocol.MemoryEntry.parse({key:f,value:v.value,scope:s,ttlSeconds:v.expiresAt===null?null:Math.max(0,Math.round((v.expiresAt-y)/1e3)),updatedAt:v.updatedAt}));}}return n({type:"memory.accessed",metadata:{operation:"list",scope:s,count:m.length}}),m},clear:(d={})=>{let s=d.scope??"session",p=t[s],y=p.keys().length;for(let m of p.keys())p.remove(m);n({type:"memory.updated",metadata:{operation:"clear",scope:s,count:y}});}}};var se=e=>protocol.SiteMemory.parse(JSON.parse(JSON.stringify(e))),z=e=>({...e,updatedAt:new Date().toISOString()}),yt=(e={})=>{let t=protocol.SiteMemory.parse({...protocol.SITE_MEMORY_DEFAULT,...e.initial??{}}),n=null,o=new Set,r=l=>{e.onTrace?.(l);},a=()=>{n=null;},i=()=>{if(o.size===0)return;let l=se(t);n=l,o.forEach(h=>h(l));},u=l=>{let h=protocol.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=z(h),a(),r({type:"memory.updated",metadata:{kind:"site",operation:"provide",keys:Object.keys(l)}}),i(),p()},d=(l,h)=>{let w=l.split(".").filter(Boolean);if(w.length===0)throw new Error("siteMemory.update() requires a non-empty dot-path.");let A=JSON.parse(JSON.stringify(t)),M=A;for(let R=0;R<w.length-1;R++){let k=w[R],E=M[k];(typeof E!="object"||E===null||Array.isArray(E))&&(M[k]={}),M=M[k];}return M[w[w.length-1]]=h,t=z(protocol.SiteMemory.parse(A)),a(),r({type:"memory.updated",metadata:{kind:"site",operation:"update",path:l}}),i(),p()},s=l=>{let h=protocol.SiteMemoryPageContext.parse({path:l.path,payload:l.payload,updatedAt:new Date().toISOString()});return t=z({...t,pageContexts:{...t.pageContexts,[l.path]:h}}),a(),r({type:"memory.updated",metadata:{kind:"site",operation:"provideForPage",path:l.path}}),i(),{...h,payload:{...h.payload}}},p=()=>(n||(n=se(t)),n);return {provide:u,update:d,provideForPage:s,snapshot:p,get:l=>{if(r({type:"memory.accessed",metadata:{kind:"site",operation:l?"get":"snapshot",path:l??null}}),!l)return se(t);let h=l.split(".").filter(Boolean),w=t;for(let A of h){if(typeof w!="object"||w===null)return;w=w[A];}return w},getForPage:l=>{r({type:"memory.accessed",metadata:{kind:"site",operation:"getForPage",path:l}});let h=t.pageContexts[l];return h?{...h,payload:{...h.payload}}:null},replace:l=>(t=z(protocol.SiteMemory.parse(l)),a(),i(),p()),subscribe:l=>(o.add(l),()=>{o.delete(l);})}};var ht=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>{let r={memory:null,etag:null};return {snapshot(){return {memory:r.memory?protocol.SiteMemory.parse(r.memory):null,etag:r.etag}},async sync(){let a=await o(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/memory`,{headers:{authorization:`Bearer ${n}`,...r.etag?{"if-none-match":r.etag}:{}}});if(a.status===304)return this.snapshot();if(!a.ok)throw new Error(`Memory sync failed with status ${a.status}.`);let i=await a.json();return r={memory:protocol.SiteMemory.parse(i.memory??{}),etag:a.headers.get("etag")},this.snapshot()}}};var L="agent-context-",ae="agentronics-site-context",Pn=e=>{try{return JSON.stringify(e)}catch{return "{}"}},J=(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);},q=(e,t)=>{e.querySelectorAll(`meta[name="${t}"]`).forEach(n=>n.remove());},ce=({doc:e=typeof document>"u"?null:document,snapshot:t,schemaType:n="WebSite"})=>{if(!e)return {uninstall:()=>{}};J(e,`${L}version`,t.version),J(e,`${L}updated-at`,t.updatedAt??new Date().toISOString()),t.siteMap?.navigation?.flow&&J(e,`${L}flow`,t.siteMap.navigation.flow),J(e,`${L}workflows`,Object.keys(t.workflows).join(","));let o=e.getElementById(ae);return o||(o=e.createElement("script"),o.type="application/ld+json",o.id=ae,e.head.appendChild(o)),o.textContent=Pn({"@context":"https://schema.org","@type":n,name:"Agentronics Site Memory",agentronics:t}),{uninstall:()=>{q(e,`${L}version`),q(e,`${L}updated-at`),q(e,`${L}flow`),q(e,`${L}workflows`),e.getElementById(ae)?.remove();}}};var vt="agentronics-memory-overlay",Cn=e=>`
2
2
  position: fixed;
3
3
  bottom: 16px;
4
4
  right: 16px;
@@ -12,7 +12,7 @@ border-radius: 10px;
12
12
  z-index: 2147483647;
13
13
  opacity: ${e?"0":"1"};
14
14
  pointer-events: ${e?"none":"auto"};
15
- `,vt=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}`},le=({doc:e=typeof document>"u"?null:document,snapshot:t,hidden:n=false})=>{if(!e)return {uninstall:()=>{},refresh:()=>{}};let o=e.getElementById(ht);return o||(o=e.createElement("div"),o.id=ht,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",En(n)),o.textContent=vt(t),{uninstall:()=>{o?.remove();},refresh:r=>{o&&(o.textContent=vt(r));}}};var xt="/.well-known/agent-context.json",ue=async({origin:e,fetcher:t=fetch,signal:n}={})=>{let o=(e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:"")+xt;if(!o.startsWith("http"))return null;let r={headers:{accept:"application/json"}};n!==void 0&&(r.signal=n);let c=await t(o,r);if(!c.ok){if(c.status===404)return null;throw new Error(`well-known agent-context fetch failed with status ${c.status}.`)}let a=await c.json();return protocol.SiteMemory.parse(a)};var wt=({evaluate:e,setPolicies:t,listPolicies:n,onTrace:o,identityResolver:r,reviewer:c})=>{let a=new Map,u=new Set,m=i=>{if(!i.authz||!t||!n)return;let g={id:`tool:${i.name}`,tool:i.name,...i.authz,rateLimit:i.rateLimit??i.authz.rateLimit};t([...n().filter(f=>f.id!==g.id),g]);};return {register(i){return a.set(i.name,i),u.delete(i.name),m(i),o?.({type:"tool.registered",tool:i.name,metadata:{version:i.version??null,group:i.group??null,stage:i.stage??null}}),()=>{a.delete(i.name),u.delete(i.name);}},unregister(i){a.delete(i),u.delete(i);},enable(i){!a.has(i)||!u.has(i)||(u.delete(i),o?.({type:"tool.surfaced",tool:i,metadata:{state:"enabled"}}));},disable(i){!a.has(i)||u.has(i)||(u.add(i),o?.({type:"tool.surfaced",tool:i,metadata:{state:"disabled"}}));},isEnabled:i=>a.has(i)&&!u.has(i),list({includeDisabled:i=false}={}){let g=[...a.values()];return i?g:g.filter(f=>!u.has(f.name))},get:i=>a.get(i),async execute(i,g,f,y={}){let x=f===void 0?r?.()??null:f,d=a.get(i);if(!d)throw new Error(`Tool "${i}" is not registered.`);if(u.has(i)){let h={decision:"deny",ruleId:`tool:${i}`,reason:"Tool is disabled."};throw o?.({type:"tool.executed",tool:i,agent:x,policy:h,outcome:"blocked"}),new Error(h.reason)}let l=await e(i,{identity:x});if(l.decision==="deny")throw o?.({type:"tool.executed",tool:i,agent:x,policy:l,outcome:"blocked"}),new Error(l.reason);if(l.decision==="review"){let h={tool:i,input:g,identity:x,reason:l.reason};d.title!==void 0&&(h.title=d.title),d.description!==void 0&&(h.description=d.description);let T=c?await c(h).catch(()=>false):false;if(o?.({type:"authz.evaluated",tool:i,agent:x,policy:l,outcome:T?"success":"blocked",metadata:{review:true,approved:T,reviewer:c?"configured":"none"}}),!T){let I={...l,decision:"deny",reason:c?"The person on the page did not approve this action.":"This action needs review and no reviewer is configured."};throw o?.({type:"tool.executed",tool:i,agent:x,policy:I,outcome:"blocked"}),new Error(I.reason)}l={...l,reason:`${l.reason} Approved by the person on the page.`};}let v=Date.now();try{let h={identity:x};y.signal&&(h.signal=y.signal);let T=await d.execute(g,h);return o?.({type:"tool.executed",tool:i,agent:x,policy:l,outcome:"success",durationMs:Date.now()-v}),T}catch(h){throw o?.({type:"tool.executed",tool:i,agent:x,policy:l,outcome:"error",durationMs:Date.now()-v,error:h instanceof Error?h.message:String(h)}),h}}}};var Y=e=>e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Y).join(",")}]`:`{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${Y(e[n])}`).join(",")}}`,bt=e=>({name:e.name,...e.title?{title:e.title}:{},description:e.description??e.name,...e.inputSchema?{inputSchema:e.inputSchema}:{},...e.annotations?{annotations:e.annotations}:{}}),St=e=>Math.ceil(Y(bt(e)).length/4),Pn=e=>{let t=Y(bt(e)).length;return {name:e.name,characters:t,tokens:Math.ceil(t/4)}},At=e=>{let t=e.map(Pn);return {total:t.reduce((o,r)=>o+r.tokens,0),perTool:t}};var Tt=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=St(e),t},kt=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>({async push(r){let c=r.map(Tt),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:c}})});if(!a.ok)throw new Error(`Tool sync failed with status ${a.status}.`);return c.length}});var Mt=(e,t={})=>{let n=new Map;for(let a of e.stages)n.set(a.name,a);if(!n.has(e.initial))throw new Error(`Initial stage "${e.initial}" is not declared in progression stages.`);let o=e.initial,r=()=>{let a=n.get(o);return a?.enables?[o,...a.enables]:[o]},c=(a,u)=>{let m=o;if(!n.has(a))throw new Error(`Cannot transition to unknown stage "${a}".`);return a===o?{changed:false,from:m,to:a}:(o=a,t.onTrace?.({type:"tool.progressed",metadata:{from:m,to:a,trigger:u}}),{changed:true,from:m,to:a})};return {current:()=>o,enabledStages:()=>r(),notify(a){let m=n.get(o)?.transitions?.find(i=>i.on===a);return m?c(m.to,a):{changed:false,from:o,to:o}},set(a){return c(a,"manual")},reset(){let a=o;o=e.initial,a!==o&&t.onTrace?.({type:"tool.progressed",metadata:{from:a,to:o,trigger:"reset"}});},snapshot:()=>({current:o,enabled:r()})}};var Dn=(e,t)=>{let n=e.authz?.minTrust;return n?t?protocol.TRUST_RANK[t.trust]<protocol.TRUST_RANK[n]?{ok:false,reason:`trust-too-low:${t.trust}<${n}`}:{ok:true,reason:"trust-ok"}:{ok:false,reason:`requires-trust:${n}`}:{ok:true,reason:"no-trust-floor"}},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"},Rt=(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 r=Ln(e,t);return r.ok?e.authz?.decision==="deny"?{tool:e,visible:false,reason:"authz-deny"}:{tool:e,visible:true,reason:"visible"}:{tool:e,visible:false,reason:r.reason}},Et=(e,t)=>e.filter(n=>Rt(n,t).visible),Ct=(e,t)=>e.map(n=>Rt(n,t));var $n="default",Pt=e=>{let t=new Map;for(let n of e){let o=n.group??$n,r=t.get(o)??[];r.push(n),t.set(o,r);}return [...t.entries()].sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>({name:n,tools:o}))};var jn=(e,t)=>e==="legacy",_n=(e,t)=>{let n={name:e.name,description:e.description??e.name,execute:(o,{signal:r})=>t(e,o??{},r)};return e.title!==void 0&&(n.title=e.title),e.inputSchema!==void 0&&(n.inputSchema=e.inputSchema),e.annotations!==void 0&&(n.annotations={...e.annotations}),n},Dt=(e={})=>{let t=e.invoke??(async(i,g)=>i.execute(g,{identity:null})),n=null,o=null,r=null,c=[],a=()=>{let i=e.modelContext??e.provider;return i?{source:typeof i.registerTool=="function"?"document":"legacy",context:i}:H(e.host)},u=()=>{n?.abort(),n=null,o?.revoke(),o=null;},m=i=>{if(r||typeof i.addEventListener!="function")return;let g=y=>oe("activated",y.toolName??""),f=y=>oe("cancelled",y.toolName??"");i.addEventListener("toolactivated",g),i.addEventListener("toolcancel",f),r=()=>{i.removeEventListener?.("toolactivated",g),i.removeEventListener?.("toolcancel",f),r=null;};};return {publish(i){let g=a();if(!g)return {revoked:false,registrations:Promise.resolve([])};if(u(),jn(g.source,g.context))return o=g.context.provideContext({tools:i.map(d=>{let l={name:d.name,invoke:v=>t(d,v)};return d.description!==void 0&&(l.description=d.description),d.inputSchema!==void 0&&(l.inputSchema=d.inputSchema),l})}),c=i.map(d=>({name:d.name,status:"callable"})),{revoked:true,registrations:Promise.resolve(c)};let f=g.context;m(f);let y=new AbortController;return n=y,{revoked:true,registrations:Promise.all(i.map(async d=>{try{let l={signal:y.signal};return d.exposedTo?.length&&(l.exposedTo=d.exposedTo),await f.registerTool(_n(d,t),l),{name:d.name,status:"callable"}}catch(l){return {name:d.name,status:"failed",error:l instanceof Error?`${l.name}: ${l.message}`:String(l)}}})).then(d=>(n===y&&(c=d),d))}},revoke(){u(),r?.(),c=[];},available:()=>!!a(),source:()=>a()?.source??null,status:()=>[...c]}};var Wn=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
- `),Ot=({documentRef:e=typeof document>"u"?void 0:document,timeoutMs:t=12e4}={})=>n=>new Promise(o=>{if(!e?.body)return o(false);let r=e,c=r.createElement("div");c.setAttribute("data-agentronics-review","true"),Object.assign(c.style,{position:"fixed",inset:"0",zIndex:"2147483647",background:"rgba(11,11,12,0.45)",display:"flex",alignItems:"center",justifyContent:"center",padding:"16px"});let a=r.createElement("div");a.setAttribute("role","dialog"),a.setAttribute("aria-modal","true"),a.setAttribute("aria-label","Approve agent action"),Object.assign(a.style,{width:"min(440px, 100%)",background:"#FFFFFF",color:"#0B0B0C",border:"2px solid #0B0B0C",borderRadius:"16px",padding:"20px",boxShadow:"8px 8px 0 #0B0B0C",font:"14px/1.5 system-ui, -apple-system, 'Segoe UI', sans-serif"});let u=r.createElement("div");u.style.fontWeight="700",u.style.fontSize="16px";let m=n.identity?.vendor??"An AI agent";u.textContent=`${m} wants to ${n.title??n.tool}`;let i=r.createElement("div");i.style.margin="8px 0 0",i.style.color="rgba(11,11,12,0.65)",i.textContent=n.description??"Allow this action on your behalf?";let g=r.createElement("pre"),f=Wn(n.input);Object.assign(g.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"}),g.textContent=f;let y=r.createElement("div");Object.assign(y.style,{display:"flex",gap:"8px",justifyContent:"flex-end",marginTop:"16px"});let x=(R,k)=>{let E=r.createElement("button");return E.type="button",E.textContent=R,Object.assign(E.style,{padding:"9px 16px",borderRadius:"10px",border:"2px solid #0B0B0C",background:k?"#D4FF3A":"#FFFFFF",color:"#0B0B0C",boxShadow:k?"3px 3px 0 #0B0B0C":"none",font:"inherit",fontWeight:"650",cursor:"pointer"}),E},d=x("Not now",false),l=x("Allow",true);y.append(d,l),a.append(u,i,g,y),c.append(a);let v=false,h=R=>{v||(v=true,clearTimeout(I),r.removeEventListener("keydown",T,true),c.remove(),o(R));},T=R=>{R.key==="Escape"&&h(false);},I=setTimeout(()=>h(false),t);l.addEventListener("click",()=>h(true)),d.addEventListener("click",()=>h(false)),r.addEventListener("keydown",T,true),r.body.appendChild(c),l.focus();});var de=(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 Lt=(e,t)=>e===void 0?t:Math.max(0,Math.min(1,e)),pe=(e={})=>{let t=Lt(e.traceRate,1),n=Lt(e.errorRate,1),o=e.random??Math.random;return {shouldKeep(r){let c=r.outcome==="error"?n:t;return o()<c}}};var Bn="[REDACTED]",Nn=e=>{if(e!==void 0)return JSON.parse(JSON.stringify(e))},ge=(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 c of e)ge(c,t);return}let r=e;if(n in r){if(o.length===0){r[n]=Bn;return}ge(r[n],o);}},me=(e,t=[])=>{if(t.length===0)return e;let n=Nn(e);for(let o of t)ge(n,o.split(".").filter(Boolean));return n},ye=["metadata.password","metadata.token","metadata.authorization","metadata.cookie"];var Kn=()=>typeof location<"u"&&typeof location.pathname=="string"?location.pathname:void 0,$t=e=>{let t=globalThis.crypto;return t&&"randomUUID"in t?`${e}_${t.randomUUID()}`:`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`},fe=({siteId:e,bufferSize:t,sessionId:n=$t("ses"),scrubPaths:o=ye,exporters:r=[],onExporterError:c,pageProvider:a=Kn,...u})=>{let m=de(t),i=pe(u),g=()=>{try{return a()}catch{return}};return {sessionId:n,async emit(f){let y={...f.metadata};if(y.page===void 0){let d=g();d!==void 0&&(y.page=d);}let x=protocol.TraceEvent.parse(me({id:$t("trc"),siteId:e,sessionId:n,occurredAt:new Date().toISOString(),outcome:f.outcome??"success",...f,metadata:y},o));return i.shouldKeep(x)?(m.add(x),await Promise.all(r.map(async d=>{try{await d.export([x]);}catch(l){c?.(l,d,x);}})),x):null},list:()=>m.list(),clear:()=>m.clear()}};var he=()=>({name:"console",export(e){for(let t of e)console.info("[agentronics:trace]",t.type,t);}});var ve=({gatewayUrl:e,publishableKey:t,fetcher:n=fetch})=>({name:"gateway",async export(o){let r={publishableKey:t,events:o};await n(`${e.replace(/\/$/,"")}/v1/pub/traces`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(r)});}});var Un=e=>new Promise(t=>setTimeout(t,e)),we=({url:e,fetcher:t=fetch,maxRetries:n=2,queueLimit:o=500})=>({name:"webhook",async export(r){let a=[...Vn(e),...r].slice(-o),u=0;for(;;){let m=await t(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({events:a})});if(m.ok){jt(e,[]);return}if(u>=n)throw jt(e,a),new Error(`Webhook exporter failed with status ${m.status}.`);u+=1,await Un(100*u);}}}),xe=e=>`agtx:webhook:${e}`,Vn=e=>{if(typeof window>"u"||!window.localStorage)return [];try{let t=window.localStorage.getItem(xe(e));return t?JSON.parse(t):[]}catch{return []}},jt=(e,t)=>{if(!(typeof window>"u"||!window.localStorage))try{if(t.length===0){window.localStorage.removeItem(xe(e));return}window.localStorage.setItem(xe(e),JSON.stringify(t));}catch{}};var V="https://api.agentronics.dev",qn="https://gateway.agentronics.dev",Yn=e=>{if(e===void 0||e.replace(/\/$/,"")===V||e.replace(/\/$/,"")===qn)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}`)},Xn=e=>{let{publishableKey:t,siteId:n="default",debug:o=false,policies:r=[],trace:c={}}=e,a=Yn(e.gatewayUrl),u=protocol.classifyApiKey(t);if(u==="secret")throw new protocol.AgentronicsError("wrong_key_kind","A secret key was passed to Agentronics.init(). Browser code must use a publishable key (agtx_pk_*).");if(u!=="publishable")throw new protocol.AgentronicsError("invalid_api_key",`Agentronics.init() expected a key starting with "${protocol.PUBLISHABLE_KEY_PREFIX}".`);let m=c.enabled??true,i=[...o?[he()]:[],...c.gateway?[ve({gatewayUrl:a,publishableKey:t})]:[],...c.webhookUrl?[we({url:c.webhookUrl})]:[],...c.exporters??[]],g={siteId:n,exporters:m?i:[],onExporterError:(s,p)=>{o&&console.warn(`[agentronics] trace exporter "${p.name}" failed`,s);}};c.bufferSize!==void 0&&(g.bufferSize=c.bufferSize),c.traceRate!==void 0&&(g.traceRate=c.traceRate),c.errorRate!==void 0&&(g.errorRate=c.errorRate),c.scrubPaths!==void 0&&(g.scrubPaths=c.scrubPaths);let f=fe(g),y=s=>{m&&f.emit(s);},x=je(),d={onTrace:y};e.auth!==void 0&&(d.context=e.auth),e.compat==="0.6"&&(d.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")),d.onUnverifiedToken=s=>{e.compat!=="0.6"&&console.warn(`[agentronics] A ${s} 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 l=Xe(d),v=Qe(),h=ot(r),T=rt({gatewayUrl:a,siteId:n,publishableKey:t}),I=gt({onTrace:y}),R={onTrace:y};e.siteMemory!==void 0&&(R.initial=e.siteMemory);let k=mt(R),E=ft({gatewayUrl:a,siteId:n,publishableKey:t}),F=kt({gatewayUrl:a,siteId:n,publishableKey:t}),w=async s=>{let p=Date.now(),S=await Oe(s),M=x.preferOver(S);return m&&await f.emit({type:M?"agent.detected":"agent.missed",agent:M,durationMs:Date.now()-p,metadata:{detectedClass:S?.class??null,presented:x.snapshot()!==null}}),v.set(M,"detect"),M},A=async(s,p={})=>{let S=Date.now(),M=p.identity!==void 0?p.identity:await w(),C=h.evaluate({tool:s,identity:M});return m&&await f.emit({type:"authz.evaluated",tool:s,agent:M,policy:C,outcome:C.decision==="deny"?"blocked":"success",durationMs:Date.now()-S}),C},W=async()=>true,P=e.review===false?void 0:e.review??(e.compat==="0.6"?W:typeof document>"u"?void 0:Ot()),D=wt({evaluate:A,...P?{reviewer:P}:{},setPolicies:s=>h.set(s),listPolicies:()=>h.list(),onTrace:y,identityResolver:()=>v.snapshot().identity});for(let s of e.tools??[])D.register(s);let O=e.progression?Mt(e.progression,{onTrace:y}):null,be=s=>{let p={identity:s};return O&&(p.stage=O.current(),p.enabledStages=O.enabledStages()),p},Se={...e.toolDescriptions??{}},Wt=s=>s.map(p=>{let S=Se[p.name];return S?{...p,description:S}:p}),$=s=>Wt(Et(D.list(),be(s))),Ae=s=>{Se={...s},j!==null&&(j=null,X($(v.snapshot().identity)));},j=null,Te=s=>s.map(p=>p.name).sort().join(`
17
- `),X=s=>{let p=Te(s);return p===j?null:(j=p,_.publish(s))},ke=s=>{if(!O)return;O.notify(s).changed&&j!==null&&X($(v.snapshot().identity));},Me={class:"webmcp",trust:"detected",confidence:1,vendor:null,userAgent:typeof navigator<"u"?navigator.userAgent:null,detectionVersion:b,signals:{source:"navigator.modelContext"}},_=Dt({invoke:async(s,p,S)=>{Bt(s.name);let M=v.snapshot().identity??Me,C=await D.execute(s.name,p,M,S?{signal:S}:{});return ke(s.name),C}}),Ie=s=>{let p=v.snapshot().identity;if(p&&p.trust!=="detected"||p?.class==="webmcp")return;let S={...Me,signals:{source:_.source()??"document",tool:s}};v.set(S,"detect"),y({type:"agent.detected",agent:S,metadata:{detectedClass:"webmcp",via:"webmcp-activity"}});},Bt=s=>Ie(s);Ee(s=>{s.type==="activated"&&Ie(s.toolName);}),v.subscribe(s=>{j===null||!_.available()||X($(s.identity));});let Q=e.visionDetection??e.autoDetect!==false,Nt=Q===false||typeof document>"u"?null:$e({...Q===true?{}:Q,onDetect:s=>{let p=v.snapshot().identity;p&&(p.trust!=="detected"||p.class==="webmcp")||(v.set(s,"detect"),y({type:"agent.detected",agent:s,metadata:{detectedClass:"screenshot",via:"vision-behaviour"}}));}}),Z=e.autoDetect??true,Gt=Z===false?Promise.resolve(null):(async()=>{let s=Z===true?{}:Z;try{return await w(s)}catch(p){return o&&console.warn("[agentronics] autoDetect failed:",p),null}})();return Object.freeze({publishableKey:t,siteId:n,gatewayUrl:a,debug:o,memory:I,siteMemory:k,memoryCache:E,tracer:f,auth:l,agentContext:v,authz:h,policyCache:T,tools:D,progression:O,webmcp:_,vision:Nt,ready:Gt,detect:w,authenticate:async s=>{let p=await l.authenticate(s);return v.set(p,"authenticate"),p},presentIdentity:s=>{let p=x.present(s);return y({type:"auth.identity_presented",agent:p.identity,metadata:{vendor:p.identity.vendor,class:p.identity.class}}),v.set(p.identity,"declare"),p},clearIdentity:()=>{x.clear(),y({type:"auth.identity_cleared"}),v.set(null,"cleared");},presentedIdentity:()=>x.snapshot(),setPolicies:s=>{h.set(s),y({type:"authz.policies_set",metadata:{count:s.length}});},listPolicies:()=>h.list(),syncPolicies:async()=>{let s=await T.sync();return h.set(s.policies),y({type:"authz.policies_set",metadata:{count:s.policies.length,synced:true}}),s.policies},syncSiteMemory:async()=>{let s=await E.sync();return s.memory&&(k.replace(s.memory),y({type:"memory.updated",metadata:{kind:"site",operation:"sync",etag:s.etag}})),s.memory},syncConfig:async()=>{let s=await fetch(`${a.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(n)}/config`,{headers:{authorization:`Bearer ${t}`}});if(!s.ok)throw new Error(`Config sync failed with status ${s.status}.`);let p=await s.json(),S=protocol.PolicyRule.array().parse(p.policies??[]);h.set(S),y({type:"authz.policies_set",metadata:{count:S.length,synced:true}});let M=p.siteMemory&&typeof p.siteMemory=="object"&&Object.keys(p.siteMemory).length?k.replace(protocol.SiteMemory.parse(p.siteMemory)):null,C=p.toolDescriptions&&typeof p.toolDescriptions=="object"?p.toolDescriptions:{};return Ae(C),{policies:S,toolDescriptions:C,siteMemory:M}},provideSiteMemory:s=>k.provide(s),provideForPage:s=>{k.provideForPage(s);},installMemoryDelivery:({metaTags:s=true,overlay:p=false}={})=>{let S=[];return s&&S.push(ce({snapshot:k.snapshot()})),p&&S.push(le({snapshot:k.snapshot()})),{uninstall:()=>{S.forEach(M=>M.uninstall());}}},fetchWellKnown:async s=>{let p={};s!==void 0&&(p.origin=s);let S=await ue(p);return S&&(k.replace(S),y({type:"memory.updated",metadata:{kind:"site",operation:"wellKnown",origin:s??null}})),S},installDomEnforcer:()=>st({policyEngine:h,getIdentity:()=>w({webmcp:{pollMs:0}})}),registerTool:s=>D.register(s),setToolDescriptions:s=>Ae(s),syncTools:async()=>{let s=D.list({includeDisabled:true}),p=await F.push(s);return y({type:"tool.registered",metadata:{operation:"sync",count:p}}),p},surfaceTools:({identity:s=null}={})=>$(s),explainSurfacing:({identity:s=null}={})=>Ct(D.list(),be(s)),groupedTools:({identity:s=null}={})=>Pt($(s)),estimateTokens:({identity:s=null}={})=>At($(s)),publishToWebMcp:({identity:s=null}={})=>{let p=$(s);j=Te(p);let S=_.publish(p),M=S.registrations.then(C=>(C.forEach(B=>{y({type:"tool.surfaced",tool:B.name,outcome:B.status==="callable"?"success":"error",...B.error?{error:B.error}:{},metadata:{state:B.status==="callable"?"published":"failed",source:_.source(),trust:s?.trust??null}});}),C));return {revoked:S.revoked,surfaced:p.length,registrations:M}},notifyToolInvoked:s=>ke(s),evaluate:A,traces:()=>f.list(),clearTraces:()=>f.clear(),async ping(){try{let s=await fetch(`${a.replace(/\/$/,"")}/v1/pub/health`,{method:"GET",headers:{authorization:`Bearer ${t}`}});if(!s.ok)return {ok:!1,status:s.status,error:`gateway returned ${s.status}`};let p=await s.json().catch(()=>null)??{};return {ok:!0,status:s.status,body:p}}catch(s){return {ok:false,status:0,error:s instanceof Error?s.message:String(s)}}}})};exports.init=Xn;//# sourceMappingURL=init-only.cjs.map
15
+ `,wt=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}`},le=({doc:e=typeof document>"u"?null:document,snapshot:t,hidden:n=false})=>{if(!e)return {uninstall:()=>{},refresh:()=>{}};let o=e.getElementById(vt);return o||(o=e.createElement("div"),o.id=vt,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",Cn(n)),o.textContent=wt(t),{uninstall:()=>{o?.remove();},refresh:r=>{o&&(o.textContent=wt(r));}}};var xt="/.well-known/agent-context.json",ue=async({origin:e,fetcher:t=fetch,signal:n}={})=>{let o=(e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:"")+xt;if(!o.startsWith("http"))return null;let r={headers:{accept:"application/json"}};n!==void 0&&(r.signal=n);let a=await t(o,r);if(!a.ok){if(a.status===404)return null;throw new Error(`well-known agent-context fetch failed with status ${a.status}.`)}let i=await a.json();return protocol.SiteMemory.parse(i)};var bt=({evaluate:e,setPolicies:t,listPolicies:n,onTrace:o,identityResolver:r,reviewer:a})=>{let i=new Map,u=new Set,d=s=>{if(!s.authz||!t||!n)return;let p={id:`tool:${s.name}`,tool:s.name,...s.authz,rateLimit:s.rateLimit??s.authz.rateLimit};t([...n().filter(y=>y.id!==p.id),p]);};return {register(s){return i.set(s.name,s),u.delete(s.name),d(s),o?.({type:"tool.registered",tool:s.name,metadata:{version:s.version??null,group:s.group??null,stage:s.stage??null}}),()=>{i.delete(s.name),u.delete(s.name);}},unregister(s){i.delete(s),u.delete(s);},enable(s){!i.has(s)||!u.has(s)||(u.delete(s),o?.({type:"tool.surfaced",tool:s,metadata:{state:"enabled"}}));},disable(s){!i.has(s)||u.has(s)||(u.add(s),o?.({type:"tool.surfaced",tool:s,metadata:{state:"disabled"}}));},isEnabled:s=>i.has(s)&&!u.has(s),list({includeDisabled:s=false}={}){let p=[...i.values()];return s?p:p.filter(y=>!u.has(y.name))},get:s=>i.get(s),async execute(s,p,y,m={}){let f=y===void 0?r?.()??null:y,v=i.get(s);if(!v)throw new Error(`Tool "${s}" is not registered.`);if(u.has(s)){let w={decision:"deny",ruleId:`tool:${s}`,reason:"Tool is disabled."};throw o?.({type:"tool.executed",tool:s,agent:f,policy:w,outcome:"blocked"}),new Error(w.reason)}let l=await e(s,{identity:f});if(l.decision==="deny")throw o?.({type:"tool.executed",tool:s,agent:f,policy:l,outcome:"blocked"}),new Error(l.reason);if(l.decision==="review"){let w={tool:s,input:p,identity:f,reason:l.reason};v.title!==void 0&&(w.title=v.title),v.description!==void 0&&(w.description=v.description);let A=a?await a(w).catch(()=>false):false;if(o?.({type:"authz.evaluated",tool:s,agent:f,policy:l,outcome:A?"success":"blocked",metadata:{review:true,approved:A,reviewer:a?"configured":"none"}}),!A){let M={...l,decision:"deny",reason:a?"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:s,agent:f,policy:M,outcome:"blocked"}),new Error(M.reason)}l={...l,reason:`${l.reason} Approved by the person on the page.`};}let h=Date.now();try{let w={identity:f};m.signal&&(w.signal=m.signal);let A=await v.execute(p,w);return o?.({type:"tool.executed",tool:s,agent:f,policy:l,outcome:"success",durationMs:Date.now()-h}),A}catch(w){throw o?.({type:"tool.executed",tool:s,agent:f,policy:l,outcome:"error",durationMs:Date.now()-h,error:w instanceof Error?w.message:String(w)}),w}}}};var Y=e=>e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Y).join(",")}]`:`{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${Y(e[n])}`).join(",")}}`,St=e=>({name:e.name,...e.title?{title:e.title}:{},description:e.description??e.name,...e.inputSchema?{inputSchema:e.inputSchema}:{},...e.annotations?{annotations:e.annotations}:{}}),Tt=e=>Math.ceil(Y(St(e)).length/4),Dn=e=>{let t=Y(St(e)).length;return {name:e.name,characters:t,tokens:Math.ceil(t/4)}},At=e=>{let t=e.map(Dn);return {total:t.reduce((o,r)=>o+r.tokens,0),perTool:t}};var kt=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=Tt(e),t},Mt=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:o=fetch})=>({async push(r){let a=r.map(kt),i=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:a}})});if(!i.ok)throw new Error(`Tool sync failed with status ${i.status}.`);return a.length}});var It=(e,t={})=>{let n=new Map;for(let i of e.stages)n.set(i.name,i);if(!n.has(e.initial))throw new Error(`Initial stage "${e.initial}" is not declared in progression stages.`);let o=e.initial,r=()=>{let i=n.get(o);return i?.enables?[o,...i.enables]:[o]},a=(i,u)=>{let d=o;if(!n.has(i))throw new Error(`Cannot transition to unknown stage "${i}".`);return i===o?{changed:false,from:d,to:i}:(o=i,t.onTrace?.({type:"tool.progressed",metadata:{from:d,to:i,trigger:u}}),{changed:true,from:d,to:i})};return {current:()=>o,enabledStages:()=>r(),notify(i){let d=n.get(o)?.transitions?.find(s=>s.on===i);return d?a(d.to,i):{changed:false,from:o,to:o}},set(i){return a(i,"manual")},reset(){let i=o;o=e.initial,i!==o&&t.onTrace?.({type:"tool.progressed",metadata:{from:i,to:o,trigger:"reset"}});},snapshot:()=>({current:o,enabled:r()})}};var Ln=(e,t)=>{let n=e.authz?.minTrust;return n?t?protocol.TRUST_RANK[t.trust]<protocol.TRUST_RANK[n]?{ok:false,reason:`trust-too-low:${t.trust}<${n}`}:{ok:true,reason:"trust-ok"}:{ok:false,reason:`requires-trust:${n}`}:{ok:true,reason:"no-trust-floor"}},$n=(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("|")}`}},_n=(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"},Et=(e,t)=>{let n=Ln(e,t.identity);if(!n.ok)return {tool:e,visible:false,reason:n.reason};let o=$n(e,t.identity);if(!o.ok)return {tool:e,visible:false,reason:o.reason};let r=_n(e,t);return r.ok?e.authz?.decision==="deny"?{tool:e,visible:false,reason:"authz-deny"}:{tool:e,visible:true,reason:"visible"}:{tool:e,visible:false,reason:r.reason}},Pt=(e,t)=>e.filter(n=>Et(n,t).visible),Ct=(e,t)=>e.map(n=>Et(n,t));var jn="default",Ot=e=>{let t=new Map;for(let n of e){let o=n.group??jn,r=t.get(o)??[];r.push(n),t.set(o,r);}return [...t.entries()].sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>({name:n,tools:o}))};var Wn=(e,t)=>e==="legacy",de=3e4,Bn=e=>{let t=e;if(typeof t=="string")try{t=JSON.parse(t);}catch{return {}}return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:{}},Nn=async e=>{if(e===void 0)return {ok:true};if(typeof Response<"u"&&e instanceof Response){let t=await e.text().catch(()=>""),n=t;try{n=JSON.parse(t);}catch{}return e.ok?n:{error:`Request failed (${e.status})`,detail:typeof n=="string"?n.slice(0,2e3):n}}try{return JSON.parse(JSON.stringify(e))??null}catch{return String(e)}},Dt=async(e,t,n,o=de)=>{let r=new AbortController,a=false,i,u=()=>r.abort(n?.reason),d=new Promise((s,p)=>{u=()=>{r.abort(n?.reason),p(n?.reason??new DOMException("The agent cancelled the call.","AbortError"));},n?.aborted?u():n?.addEventListener?.("abort",u,{once:true}),o>0&&(i=setTimeout(()=>{a=true,r.abort(),p(new Error("timeout"));},o));});try{let s=await Promise.race([(async()=>e(Bn(t),r.signal))(),d]);return await Nn(s)}catch(s){if(a)return {error:`The tool didn't finish within ${Math.round(o/1e3)} s.`,hint:"Try again, or with narrower arguments."};if(n?.aborted)throw s;return {error:s instanceof Error?s.message:String(s)}}finally{i!==void 0&&clearTimeout(i),n?.removeEventListener?.("abort",u);}},Gn=(e,t,n=de)=>{let o={name:e.name,description:e.description||e.name,execute:(r,a)=>Dt((i,u)=>t(e,i,u),r,a?.signal,n)};return e.title!==void 0&&(o.title=e.title),e.inputSchema!==void 0&&(o.inputSchema=e.inputSchema),e.annotations!==void 0&&(o.annotations={...e.annotations}),o},Lt=(e={})=>{let t=e.invoke??(async(p,y,m)=>p.execute(y,m?{identity:null,signal:m}:{identity:null})),n=e.toolTimeoutMs??de,o=null,r=null,a=null,i=[],u=()=>{let p=e.modelContext??e.provider;return p?{source:typeof p.registerTool=="function"?"document":"legacy",context:p}:H(e.host)},d=()=>{o?.abort(),o=null,r?.revoke(),r=null;},s=p=>{if(a||typeof p.addEventListener!="function")return;let y=f=>oe("activated",f.toolName??""),m=f=>oe("cancelled",f.toolName??"");p.addEventListener("toolactivated",y),p.addEventListener("toolcancel",m),a=()=>{p.removeEventListener?.("toolactivated",y),p.removeEventListener?.("toolcancel",m),a=null;};};return {publish(p){let y=u();if(!y)return {revoked:false,registrations:Promise.resolve([])};if(d(),Wn(y.source,y.context))return r=y.context.provideContext({tools:p.map(l=>{let h={name:l.name,invoke:w=>Dt((A,M)=>t(l,A,M),w,void 0,n)};return l.description!==void 0&&(h.description=l.description),l.inputSchema!==void 0&&(h.inputSchema=l.inputSchema),h})}),i=p.map(l=>({name:l.name,status:"callable"})),{revoked:true,registrations:Promise.resolve(i)};let m=y.context;s(m);let f=new AbortController;return o=f,{revoked:true,registrations:Promise.all(p.map(async l=>{try{let h={signal:f.signal};return l.exposedTo?.length&&(h.exposedTo=l.exposedTo),await m.registerTool(Gn(l,t,n),h),{name:l.name,status:"callable"}}catch(h){return {name:l.name,status:"failed",error:h instanceof Error?`${h.name}: ${h.message}`:String(h)}}})).then(l=>(o===f&&(i=l),l))}},revoke(){d(),a?.(),i=[];},available:()=>!!u(),source:()=>u()?.source??null,status:()=>[...i]}};var Un=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
+ `),$t=({documentRef:e=typeof document>"u"?void 0:document,timeoutMs:t=12e4}={})=>n=>new Promise(o=>{if(!e?.body)return o(false);let r=e,a=r.createElement("div");a.setAttribute("data-agentronics-review","true"),Object.assign(a.style,{position:"fixed",inset:"0",zIndex:"2147483647",background:"rgba(11,11,12,0.45)",display:"flex",alignItems:"center",justifyContent:"center",padding:"16px"});let i=r.createElement("div");i.setAttribute("role","dialog"),i.setAttribute("aria-modal","true"),i.setAttribute("aria-label","Approve agent action"),Object.assign(i.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=r.createElement("div");u.style.fontWeight="700",u.style.fontSize="16px";let d=n.identity?.vendor??"An AI agent";u.textContent=`${d} wants to ${n.title??n.tool}`;let s=r.createElement("div");s.style.margin="8px 0 0",s.style.color="rgba(11,11,12,0.65)",s.textContent=n.description??"Allow this action on your behalf?";let p=r.createElement("pre"),y=Un(n.input);Object.assign(p.style,{display:y?"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=y;let m=r.createElement("div");Object.assign(m.style,{display:"flex",gap:"8px",justifyContent:"flex-end",marginTop:"16px"});let f=(R,k)=>{let E=r.createElement("button");return E.type="button",E.textContent=R,Object.assign(E.style,{padding:"9px 16px",borderRadius:"10px",border:"2px solid #0B0B0C",background:k?"#D4FF3A":"#FFFFFF",color:"#0B0B0C",boxShadow:k?"3px 3px 0 #0B0B0C":"none",font:"inherit",fontWeight:"650",cursor:"pointer"}),E},v=f("Not now",false),l=f("Allow",true);m.append(v,l),i.append(u,s,p,m),a.append(i);let h=false,w=R=>{h||(h=true,clearTimeout(M),r.removeEventListener("keydown",A,true),a.remove(),o(R));},A=R=>{R.key==="Escape"&&w(false);},M=setTimeout(()=>w(false),t);l.addEventListener("click",()=>w(true)),v.addEventListener("click",()=>w(false)),r.addEventListener("keydown",A,true),r.body.appendChild(a),l.focus();});var pe=(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 _t=(e,t)=>e===void 0?t:Math.max(0,Math.min(1,e)),me=(e={})=>{let t=_t(e.traceRate,1),n=_t(e.errorRate,1),o=e.random??Math.random;return {shouldKeep(r){let a=r.outcome==="error"?n:t;return o()<a}}};var Kn="[REDACTED]",Vn=e=>{if(e!==void 0)return JSON.parse(JSON.stringify(e))},ge=(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 a of e)ge(a,t);return}let r=e;if(n in r){if(o.length===0){r[n]=Kn;return}ge(r[n],o);}},ye=(e,t=[])=>{if(t.length===0)return e;let n=Vn(e);for(let o of t)ge(n,o.split(".").filter(Boolean));return n},fe=["metadata.password","metadata.token","metadata.authorization","metadata.cookie"];var Hn=()=>typeof location<"u"&&typeof location.pathname=="string"?location.pathname:void 0,jt=e=>{let t=globalThis.crypto;return t&&"randomUUID"in t?`${e}_${t.randomUUID()}`:`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`},he=({siteId:e,bufferSize:t,sessionId:n=jt("ses"),scrubPaths:o=fe,exporters:r=[],onExporterError:a,pageProvider:i=Hn,...u})=>{let d=pe(t),s=me(u),p=()=>{try{return i()}catch{return}};return {sessionId:n,async emit(y){let m={...y.metadata};if(m.page===void 0){let v=p();v!==void 0&&(m.page=v);}let f=protocol.TraceEvent.parse(ye({id:jt("trc"),siteId:e,sessionId:n,occurredAt:new Date().toISOString(),outcome:y.outcome??"success",...y,metadata:m},o));return s.shouldKeep(f)?(d.add(f),await Promise.all(r.map(async v=>{try{await v.export([f]);}catch(l){a?.(l,v,f);}})),f):null},list:()=>d.list(),clear:()=>d.clear()}};var ve=()=>({name:"console",export(e){for(let t of e)console.info("[agentronics:trace]",t.type,t);}});var we=({gatewayUrl:e,publishableKey:t,fetcher:n,flushMs:o=2e3,maxBatch:r=50,maxQueue:a=500})=>{let i=`${e.replace(/\/$/,"")}/v1/pub/traces`,u=Math.max(1,Math.min(100,r)),d=[],s=null,p=(m,f)=>{let v=n??(typeof fetch=="function"?fetch:null);if(!v)return Promise.resolve();let l={publishableKey:t,events:m};try{return Promise.resolve(v(i,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(l),...f?{keepalive:!0}:{}})).then(()=>{},()=>{})}catch{return Promise.resolve()}},y=(m=false)=>{s!==null&&(clearTimeout(s),s=null);let f=[];for(;d.length;)f.push(p(d.splice(0,u),m));return Promise.all(f).then(()=>{})};return typeof document<"u"&&typeof document.addEventListener=="function"&&document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&y(true);}),typeof addEventListener=="function"&&addEventListener("pagehide",()=>{y(true);}),{name:"gateway",export(m){d.push(...m),d.length>a&&(d=d.slice(d.length-a)),d.length>=u?y():s===null&&(s=setTimeout(()=>{y();},o));},flush:y}};var zn=e=>new Promise(t=>setTimeout(t,e)),be=({url:e,fetcher:t=fetch,maxRetries:n=2,queueLimit:o=500})=>({name:"webhook",async export(r){let i=[...Jn(e),...r].slice(-o),u=0;for(;;){let d=await t(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({events:i})});if(d.ok){Wt(e,[]);return}if(u>=n)throw Wt(e,i),new Error(`Webhook exporter failed with status ${d.status}.`);u+=1,await zn(100*u);}}}),xe=e=>`agtx:webhook:${e}`,Jn=e=>{if(typeof window>"u"||!window.localStorage)return [];try{let t=window.localStorage.getItem(xe(e));return t?JSON.parse(t):[]}catch{return []}},Wt=(e,t)=>{if(!(typeof window>"u"||!window.localStorage))try{if(t.length===0){window.localStorage.removeItem(xe(e));return}window.localStorage.setItem(xe(e),JSON.stringify(t));}catch{}};var V="https://api.agentronics.dev",Zn="https://gateway.agentronics.dev",eo=e=>{if(e===void 0||e.replace(/\/$/,"")===V||e.replace(/\/$/,"")===Zn)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}`)},to=e=>{let{publishableKey:t,siteId:n="default",debug:o=false,policies:r=[],trace:a={}}=e,i=eo(e.gatewayUrl),u=protocol.classifyApiKey(t);if(u==="secret")throw new protocol.AgentronicsError("wrong_key_kind","A secret key was passed to Agentronics.init(). Browser code must use a publishable key (agtx_pk_*).");if(u!=="publishable")throw new protocol.AgentronicsError("invalid_api_key",`Agentronics.init() expected a key starting with "${protocol.PUBLISHABLE_KEY_PREFIX}".`);let d=a.enabled??true,s=[...o?[ve()]:[],...a.gateway?[we({gatewayUrl:i,publishableKey:t})]:[],...a.webhookUrl?[be({url:a.webhookUrl})]:[],...a.exporters??[]],p={siteId:n,exporters:d?s:[],onExporterError:(c,g)=>{o&&console.warn(`[agentronics] trace exporter "${g.name}" failed`,c);}};a.bufferSize!==void 0&&(p.bufferSize=a.bufferSize),a.traceRate!==void 0&&(p.traceRate=a.traceRate),a.errorRate!==void 0&&(p.errorRate=a.errorRate),a.scrubPaths!==void 0&&(p.scrubPaths=a.scrubPaths);let y=he(p),m=c=>{d&&y.emit(c);},f=je(),v={onTrace:m};e.auth!==void 0&&(v.context=e.auth),e.compat==="0.6"&&(v.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")),v.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 l=Qe(v),h=Ze(),w=rt(r),A=it({gatewayUrl:i,siteId:n,publishableKey:t}),M=gt({onTrace:m}),R={onTrace:m};e.siteMemory!==void 0&&(R.initial=e.siteMemory);let k=yt(R),E=ht({gatewayUrl:i,siteId:n,publishableKey:t}),F=Mt({gatewayUrl:i,siteId:n,publishableKey:t}),x=async c=>{let g=Date.now(),S=await Le(c),I=f.preferOver(S);return d&&await y.emit({type:I?"agent.detected":"agent.missed",agent:I,durationMs:Date.now()-g,metadata:{detectedClass:S?.class??null,presented:f.snapshot()!==null}}),h.set(I,"detect"),I},T=async(c,g={})=>{let S=Date.now(),I=g.identity!==void 0?g.identity:await x(),P=w.evaluate({tool:c,identity:I});return d&&await y.emit({type:"authz.evaluated",tool:c,agent:I,policy:P,outcome:P.decision==="deny"?"blocked":"success",durationMs:Date.now()-S}),P},W=async()=>true,C=e.review===false?void 0:e.review??(e.compat==="0.6"?W:typeof document>"u"?void 0:$t()),O=bt({evaluate:T,...C?{reviewer:C}:{},setPolicies:c=>w.set(c),listPolicies:()=>w.list(),onTrace:m,identityResolver:()=>h.snapshot().identity});for(let c of e.tools??[])O.register(c);let D=e.progression?It(e.progression,{onTrace:m}):null,Se=c=>{let g={identity:c};return D&&(g.stage=D.current(),g.enabledStages=D.enabledStages()),g},Te={...e.toolDescriptions??{}},Nt=c=>c.map(g=>{let S=Te[g.name];return S?{...g,description:S}:g}),$=c=>Nt(Pt(O.list(),Se(c))),Ae=c=>{Te={...c},_!==null&&(_=null,X($(h.snapshot().identity)));},_=null,ke=c=>c.map(g=>g.name).sort().join(`
17
+ `),X=c=>{let g=ke(c);return g===_?null:(_=g,j.publish(c))},Me=c=>{if(!D)return;D.notify(c).changed&&_!==null&&X($(h.snapshot().identity));},Ie={class:"webmcp",trust:"detected",confidence:1,vendor:null,userAgent:typeof navigator<"u"?navigator.userAgent:null,detectionVersion:b,signals:{source:"navigator.modelContext"}},j=Lt({...e.toolTimeoutMs!==void 0?{toolTimeoutMs:e.toolTimeoutMs}:{},invoke:async(c,g,S)=>{Gt(c.name);let I=h.snapshot().identity??Ie,P=await O.execute(c.name,g,I,S?{signal:S}:{});return Me(c.name),P}}),Re=c=>{let g=h.snapshot().identity;if(g&&g.trust!=="detected"||g?.class==="webmcp")return;let S={...Ie,signals:{source:j.source()??"document",tool:c}};h.set(S,"detect"),m({type:"agent.detected",agent:S,metadata:{detectedClass:"webmcp",via:"webmcp-activity"}});},Gt=c=>Re(c);Pe(c=>{c.type==="activated"&&Re(c.toolName);}),h.subscribe(c=>{_===null||!j.available()||X($(c.identity));});let Q=e.visionDetection??e.autoDetect!==false,Ut=Q===false||typeof document>"u"?null:_e({...Q===true?{}:Q,onDetect:c=>{let g=h.snapshot().identity;g&&(g.trust!=="detected"||g.class==="webmcp")||(h.set(c,"detect"),m({type:"agent.detected",agent:c,metadata:{detectedClass:"screenshot",via:"vision-behaviour"}}));}}),Z=e.autoDetect??true,Kt=Z===false?Promise.resolve(null):(async()=>{let c=Z===true?{}:Z;try{return await x(c)}catch(g){return o&&console.warn("[agentronics] autoDetect failed:",g),null}})();return Object.freeze({publishableKey:t,siteId:n,gatewayUrl:i,debug:o,memory:M,siteMemory:k,memoryCache:E,tracer:y,auth:l,agentContext:h,authz:w,policyCache:A,tools:O,progression:D,webmcp:j,vision:Ut,ready:Kt,detect:x,authenticate:async c=>{let g=await l.authenticate(c);return h.set(g,"authenticate"),g},presentIdentity:c=>{let g=f.present(c);return m({type:"auth.identity_presented",agent:g.identity,metadata:{vendor:g.identity.vendor,class:g.identity.class}}),h.set(g.identity,"declare"),g},clearIdentity:()=>{f.clear(),m({type:"auth.identity_cleared"}),h.set(null,"cleared");},presentedIdentity:()=>f.snapshot(),setPolicies:c=>{w.set(c),m({type:"authz.policies_set",metadata:{count:c.length}});},listPolicies:()=>w.list(),syncPolicies:async()=>{let c=await A.sync();return w.set(c.policies),m({type:"authz.policies_set",metadata:{count:c.policies.length,synced:true}}),c.policies},syncSiteMemory:async()=>{let c=await E.sync();return c.memory&&(k.replace(c.memory),m({type:"memory.updated",metadata:{kind:"site",operation:"sync",etag:c.etag}})),c.memory},syncConfig:async()=>{let c=await fetch(`${i.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(n)}/config`,{headers:{authorization:`Bearer ${t}`}});if(!c.ok)throw new Error(`Config sync failed with status ${c.status}.`);let g=await c.json(),S=protocol.PolicyRule.array().parse(g.policies??[]);w.set(S),m({type:"authz.policies_set",metadata:{count:S.length,synced:true}});let I=g.siteMemory&&typeof g.siteMemory=="object"&&Object.keys(g.siteMemory).length?k.replace(protocol.SiteMemory.parse(g.siteMemory)):null,P=g.toolDescriptions&&typeof g.toolDescriptions=="object"?g.toolDescriptions:{};return Ae(P),{policies:S,toolDescriptions:P,siteMemory:I}},provideSiteMemory:c=>k.provide(c),provideForPage:c=>{k.provideForPage(c);},installMemoryDelivery:({metaTags:c=true,overlay:g=false}={})=>{let S=[];return c&&S.push(ce({snapshot:k.snapshot()})),g&&S.push(le({snapshot:k.snapshot()})),{uninstall:()=>{S.forEach(I=>I.uninstall());}}},fetchWellKnown:async c=>{let g={};c!==void 0&&(g.origin=c);let S=await ue(g);return S&&(k.replace(S),m({type:"memory.updated",metadata:{kind:"site",operation:"wellKnown",origin:c??null}})),S},installDomEnforcer:()=>at({policyEngine:w,getIdentity:()=>x({webmcp:{pollMs:0}})}),registerTool:c=>O.register(c),setToolDescriptions:c=>Ae(c),syncTools:async()=>{let c=O.list({includeDisabled:true}),g=await F.push(c);return m({type:"tool.registered",metadata:{operation:"sync",count:g}}),g},surfaceTools:({identity:c=null}={})=>$(c),explainSurfacing:({identity:c=null}={})=>Ct(O.list(),Se(c)),groupedTools:({identity:c=null}={})=>Ot($(c)),estimateTokens:({identity:c=null}={})=>At($(c)),publishToWebMcp:({identity:c=null}={})=>{let g=$(c);_=ke(g);let S=j.publish(g),I=S.registrations.then(P=>(P.forEach(B=>{m({type:"tool.surfaced",tool:B.name,outcome:B.status==="callable"?"success":"error",...B.error?{error:B.error}:{},metadata:{state:B.status==="callable"?"published":"failed",source:j.source(),trust:c?.trust??null}});}),P));return {revoked:S.revoked,surfaced:g.length,registrations:I}},notifyToolInvoked:c=>Me(c),evaluate:T,traces:()=>y.list(),clearTraces:()=>y.clear(),async ping(){try{let c=await fetch(`${i.replace(/\/$/,"")}/v1/pub/health`,{method:"GET",headers:{authorization:`Bearer ${t}`}});if(!c.ok)return {ok:!1,status:c.status,error:`gateway returned ${c.status}`};let g=await c.json().catch(()=>null)??{};return {ok:!0,status:c.status,body:g}}catch(c){return {ok:false,status:0,error:c instanceof Error?c.message:String(c)}}}})};exports.init=to;//# sourceMappingURL=init-only.cjs.map
18
18
  //# sourceMappingURL=init-only.cjs.map