@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/{chunk-BPDWJCPY.js → chunk-DYCRZCCT.js} +2 -2
- package/dist/chunk-DYCRZCCT.js.map +1 -0
- package/dist/chunk-JR5YRLTH.js +18 -0
- package/dist/chunk-JR5YRLTH.js.map +1 -0
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -4
- package/dist/index.d.ts +21 -4
- package/dist/index.global.js +4 -4
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/{init-only-C80qhujz.d.ts → init-only-CRvqRvNI.d.ts} +8 -1
- package/dist/{init-only-s9E9bVC0.d.cts → init-only-Cif87Qbc.d.cts} +8 -1
- package/dist/init-only.cjs +4 -4
- package/dist/init-only.cjs.map +1 -1
- package/dist/init-only.d.cts +2 -2
- package/dist/init-only.d.ts +2 -2
- package/dist/init-only.global.js +4 -4
- package/dist/init-only.global.js.map +1 -1
- package/dist/init-only.js +1 -1
- package/dist/lite.d.cts +2 -2
- package/dist/lite.d.ts +2 -2
- package/dist/lite.js +1 -1
- package/dist/{webmcp-BgKzHeQ3.d.cts → webmcp-C5uwNbnJ.d.cts} +2 -1
- package/dist/{webmcp-BgKzHeQ3.d.ts → webmcp-C5uwNbnJ.d.ts} +2 -1
- package/package.json +3 -3
- package/dist/chunk-3WPDIMJP.js +0 -18
- package/dist/chunk-3WPDIMJP.js.map +0 -1
- package/dist/chunk-BPDWJCPY.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {h,f,aa}from'./chunk-
|
|
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-
|
|
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-
|
|
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
|
package/dist/init-only.cjs
CHANGED
|
@@ -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
|
-
`)
|
|
17
|
-
`),X=
|
|
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
|