@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.
@@ -1,2 +1,2 @@
1
- var s="0.1.2";var i=(e,t)=>typeof e=="object"&&e!==null&&typeof e[t]=="function",a=e=>{let t=e??(typeof globalThis>"u"?null:globalThis);if(!t)return null;let o=t.document?.modelContext;if(i(o,"registerTool"))return {source:"document",context:o};let n=t.navigator?.modelContext;return i(n,"registerTool")?{source:"navigator",context:n}:i(n,"provideContext")?{source:"legacy",context:n}:null},r=null,c=new Set,f=(e,t)=>{r={type:e,toolName:t,at:Date.now()},c.forEach(o=>o(r));},u=()=>r,b=e=>(c.add(e),()=>{c.delete(e);});var g=()=>{if(typeof navigator>"u")return null;let e=navigator.modelContext;return !e||typeof e!="object"?null:e.vendor||e.client?e:null},v=()=>a()?.source??null,w=async(e={})=>{let{pollMs:t=500}=e,o=Date.now();for(;;){let n=u();if(n)return y(n);let l=g();if(l)return x(l);if(Date.now()-o>=t)return null;await new Promise(p=>setTimeout(p,50));}},d=()=>({class:"webmcp",trust:"detected",confidence:1,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:s}),y=e=>({...d(),vendor:null,signals:{webmcp:true,source:v(),event:e.type,tool:e.toolName}}),x=e=>({...d(),vendor:e.vendor??e.client??null,signals:{webmcp:true,source:"legacy-extension",toolCount:Array.isArray(e.tools)?e.tools.length:0}});export{s as a,a as b,f as c,b as d,v as e,w as f};//# sourceMappingURL=chunk-BPDWJCPY.js.map
2
- //# sourceMappingURL=chunk-BPDWJCPY.js.map
1
+ var s="0.1.2";var i=(e,t)=>typeof e=="object"&&e!==null&&typeof e[t]=="function",a=e=>{let t=e??(typeof globalThis>"u"?null:globalThis);if(!t)return null;let o=t.document?.modelContext;if(i(o,"registerTool"))return {source:"document",context:o};let n=t.navigator?.modelContext;return i(n,"registerTool")?{source:"navigator",context:n}:i(n,"provideContext")?{source:"legacy",context:n}:null},r=null,c=new Set,f=(e,t)=>{r={type:e,toolName:t,at:Date.now()},c.forEach(o=>o(r));},u=()=>r,b=e=>(c.add(e),()=>{c.delete(e);});var g=()=>{if(typeof navigator>"u")return null;let e=navigator.modelContext;return !e||typeof e!="object"?null:e.vendor||e.client?e:null},v=()=>a()?.source??null,w=async(e={})=>{let{pollMs:t=500}=e,o=Date.now();for(;;){let n=u();if(n)return y(n);let l=g();if(l)return x(l);if(Date.now()-o>=t)return null;await new Promise(p=>setTimeout(p,50));}},d=()=>({class:"webmcp",trust:"detected",confidence:1,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:s}),y=e=>({...d(),vendor:null,signals:{webmcp:true,source:v(),event:e.type,tool:e.toolName}}),x=e=>({...d(),vendor:e.vendor??e.client??null,signals:{webmcp:true,source:"legacy-extension",toolCount:Array.isArray(e.tools)?e.tools.length:0}});export{s as a,a as b,f as c,b as d,v as e,w as f};//# sourceMappingURL=chunk-DYCRZCCT.js.map
2
+ //# sourceMappingURL=chunk-DYCRZCCT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/version.ts","../src/tools/modelContext.ts","../src/detection/webmcp.ts"],"names":["SDK_VERSION","hasFn","value","key","resolveModelContext","host","h","fromDocument","fromNavigator","lastActivity","activityListeners","noteWebMcpActivity","type","toolName","listener","lastWebMcpActivity","onWebMcpActivity","readLegacyInjected","webMcpSupport","detectWebMcp","options","pollMs","start","activity","fromActivity","legacy","fromLegacy","resolve","base","ctx"],"mappings":"AAKO,IAAMA,CAAAA,CAAc,QCqE3B,IAAMC,CAAAA,CAAQ,CAACC,CAAAA,CAAgBC,CAAAA,GAC7B,OAAOD,CAAAA,EAAU,QAAA,EAAYA,CAAAA,GAAU,IAAA,EAAQ,OAAQA,EAAkCC,CAAG,CAAA,EAAM,UAAA,CAGvFC,CAAAA,CAAuBC,CAAAA,EAAwD,CAC1F,IAAMC,CAAAA,CAAqBD,IAAS,OAAO,UAAA,CAAe,GAAA,CAAc,IAAA,CAAQ,UAAA,CAAA,CAChF,GAAI,CAACC,CAAAA,CAAG,OAAO,IAAA,CACf,IAAMC,CAAAA,CAAeD,CAAAA,CAAE,QAAA,EAAU,YAAA,CACjC,GAAIL,CAAAA,CAAMM,EAAc,cAAc,CAAA,CAAG,OAAO,CAAE,MAAA,CAAQ,UAAA,CAAY,OAAA,CAASA,CAAiC,EAChH,IAAMC,CAAAA,CAAgBF,CAAAA,CAAE,SAAA,EAAW,YAAA,CACnC,OAAIL,CAAAA,CAAMO,CAAAA,CAAe,cAAc,CAAA,CAAU,CAAE,MAAA,CAAQ,WAAA,CAAa,OAAA,CAASA,CAAkC,CAAA,CAC/GP,CAAAA,CAAMO,EAAe,gBAAgB,CAAA,CAAU,CAAE,MAAA,CAAQ,QAAA,CAAU,OAAA,CAASA,CAAgC,CAAA,CACzG,IACT,CAAA,CAYIC,CAAAA,CAAsC,IAAA,CACpCC,CAAAA,CAAoB,IAAI,GAAA,CAEjBC,CAAAA,CAAqB,CAACC,EAA8BC,CAAAA,GAAqB,CACpFJ,CAAAA,CAAe,CAAE,IAAA,CAAAG,CAAAA,CAAM,QAAA,CAAAC,CAAAA,CAAU,GAAI,IAAA,CAAK,GAAA,EAAM,CAAA,CAChDH,CAAAA,CAAkB,OAAA,CAASI,CAAAA,EAAaA,CAAAA,CAASL,CAAa,CAAC,EACjE,CAAA,CAEaM,CAAAA,CAAqB,IAAMN,CAAAA,CAE3BO,CAAAA,CAAoBF,CAAAA,GAC/BJ,EAAkB,GAAA,CAAII,CAAQ,CAAA,CACvB,IAAM,CACXJ,CAAAA,CAAkB,MAAA,CAAOI,CAAQ,EACnC,CAAA,EC1FF,IAAMG,CAAAA,CAAqB,IAAoC,CAC7D,GAAI,OAAO,SAAA,CAAc,IAAa,OAAO,IAAA,CAC7C,IAAMf,CAAAA,CAAS,SAAA,CAAkE,YAAA,CACjF,OAAI,CAACA,GAAS,OAAOA,CAAAA,EAAU,QAAA,CAAiB,IAAA,CACzCA,CAAAA,CAAM,MAAA,EAAUA,CAAAA,CAAM,MAAA,CAASA,EAAQ,IAChD,CAAA,CAWagB,CAAAA,CAAgB,IAAMd,CAAAA,EAAoB,EAAG,MAAA,EAAU,IAAA,CAEvDe,EAAe,MAC1BC,CAAAA,CAA+B,EAAC,GACE,CAClC,GAAM,CAAE,MAAA,CAAAC,EAAS,GAAI,CAAA,CAAID,CAAAA,CACnBE,CAAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CAEvB,OAAa,CACX,IAAMC,CAAAA,CAAWR,CAAAA,EAAmB,CACpC,GAAIQ,CAAAA,CAAU,OAAOC,CAAAA,CAAaD,CAAQ,CAAA,CAC1C,IAAME,CAAAA,CAASR,CAAAA,EAAmB,CAClC,GAAIQ,CAAAA,CAAQ,OAAOC,EAAWD,CAAM,CAAA,CACpC,GAAI,IAAA,CAAK,GAAA,EAAI,CAAIH,CAAAA,EAASD,CAAAA,CAAQ,OAAO,IAAA,CACzC,MAAM,IAAI,OAAA,CAASM,CAAAA,EAAY,UAAA,CAAWA,CAAAA,CAAS,EAAE,CAAC,EACxD,CACF,CAAA,CAEMC,CAAAA,CAAO,KAAkD,CAC7D,KAAA,CAAO,QAAA,CACP,MAAO,UAAA,CACP,UAAA,CAAY,CAAA,CACZ,SAAA,CAAW,OAAO,SAAA,CAAc,GAAA,CAAc,IAAA,CAAO,UAAU,SAAA,CAC/D,gBAAA,CAAkB5B,CACpB,CAAA,CAAA,CAEMwB,CAAAA,CAAgBD,CAAAA,GAA6C,CACjE,GAAGK,GAAK,CACR,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,CAAE,MAAA,CAAQ,IAAA,CAAM,MAAA,CAAQV,GAAc,CAAG,KAAA,CAAOK,CAAAA,CAAS,IAAA,CAAM,IAAA,CAAMA,CAAAA,CAAS,QAAS,CAClG,GAEMG,CAAAA,CAAcG,CAAAA,GAA+C,CACjE,GAAGD,CAAAA,EAAK,CACR,MAAA,CAAQC,CAAAA,CAAI,QAAUA,CAAAA,CAAI,MAAA,EAAU,IAAA,CACpC,OAAA,CAAS,CACP,MAAA,CAAQ,IAAA,CACR,MAAA,CAAQ,mBACR,SAAA,CAAW,KAAA,CAAM,OAAA,CAAQA,CAAAA,CAAI,KAAK,CAAA,CAAIA,CAAAA,CAAI,KAAA,CAAM,MAAA,CAAS,CAC3D,CACF,CAAA","file":"chunk-DYCRZCCT.js","sourcesContent":["// Single source of truth for the SDK build version, surfaced on every\n// AgentIdentity as `detectionVersion` so traces can be filtered by SDK\n// generation. tsup inlines a pkg-version replacement at build time;\n// the literal here is the dev/test fallback. Bump this when you cut a\n// new SDK release.\nexport const SDK_VERSION = '0.1.2'\n","/**\n * The WebMCP `ModelContext` surface, per the W3C WebMCP draft (Oct 2026):\n *\n * await document.modelContext.registerTool(tool, { signal, exposedTo })\n *\n * - The getter lives on `document`. `navigator.modelContext` was the old name;\n * Chrome 150 kept it as an alias and Chrome 152 removed it, so it's read\n * only as a fallback.\n * - `registerTool()` is async. There is no `unregisterTool()`; aborting the\n * `signal` passed at registration unregisters the tool.\n * - `toolactivated` / `toolcancel` events fire on the ModelContext when an\n * agent starts or cancels a tool call — the only reliable \"an agent is here\"\n * signal, because the API itself exists for every visitor of a WebMCP browser.\n * - The declarative form API (`<form toolname>`) was removed from the spec\n * (Oct 8, 2026) and lives on only as an explainer; the SDK registers every\n * tool imperatively.\n */\n\nexport interface ToolAnnotations {\n /** The tool only reads; agents may call it without asking the user. */\n readOnlyHint?: boolean\n /** The tool's output includes content the site didn't author (reviews, messages, …). */\n untrustedContentHint?: boolean\n /** Payments, deletes, sends — the agent should confirm with the user first. */\n consequentialHint?: boolean\n /** Exposed only to agent debugging tools. */\n debugging?: boolean\n}\n\nexport interface ToolExecuteOptions {\n signal: AbortSignal\n}\n\nexport interface ModelContextTool {\n name: string\n title?: string\n description: string\n inputSchema?: Record<string, unknown>\n annotations?: ToolAnnotations\n /** Agents and polyfills may leave `options` out. */\n execute: (input: Record<string, unknown>, options?: ToolExecuteOptions) => Promise<unknown>\n}\n\nexport interface RegisterToolOptions {\n signal?: AbortSignal\n /** Origins (besides this one) whose agents may see the tool. */\n exposedTo?: string[]\n}\n\nexport interface ModelContextLike {\n registerTool(tool: ModelContextTool, options?: RegisterToolOptions): Promise<void> | void\n addEventListener?: (type: string, listener: (event: Event) => void) => void\n removeEventListener?: (type: string, listener: (event: Event) => void) => void\n}\n\n/** Very old polyfills exposed `provideContext({ tools })` instead of `registerTool`. */\nexport interface LegacyProvider {\n provideContext(payload: {\n tools: Array<{ name: string; description?: string; inputSchema?: Record<string, unknown>; invoke(input?: unknown): Promise<unknown> }>\n }): { revoke: () => void }\n}\n\nexport type ModelContextSource = 'document' | 'navigator' | 'legacy'\n\nexport interface ResolvedModelContext {\n source: ModelContextSource\n context: ModelContextLike | LegacyProvider\n}\n\ninterface HostLike {\n document?: { modelContext?: unknown } | null\n navigator?: { modelContext?: unknown } | null\n}\n\nconst hasFn = (value: unknown, key: string): boolean =>\n typeof value === 'object' && value !== null && typeof (value as Record<string, unknown>)[key] === 'function'\n\n/** Find the page's ModelContext: `document.modelContext`, then the legacy names. */\nexport const resolveModelContext = (host?: HostLike | null): ResolvedModelContext | null => {\n const h: HostLike | null = host ?? (typeof globalThis === 'undefined' ? null : (globalThis as HostLike))\n if (!h) return null\n const fromDocument = h.document?.modelContext\n if (hasFn(fromDocument, 'registerTool')) return { source: 'document', context: fromDocument as ModelContextLike }\n const fromNavigator = h.navigator?.modelContext\n if (hasFn(fromNavigator, 'registerTool')) return { source: 'navigator', context: fromNavigator as ModelContextLike }\n if (hasFn(fromNavigator, 'provideContext')) return { source: 'legacy', context: fromNavigator as LegacyProvider }\n return null\n}\n\n// ---- agent activity ------------------------------------------------------------\n// Shared by the adapter (which sees tool calls) and detection (which reports\n// a WebMCP agent once one has acted).\n\nexport interface WebMcpActivity {\n type: 'activated' | 'cancelled' | 'executed'\n toolName: string\n at: number\n}\n\nlet lastActivity: WebMcpActivity | null = null\nconst activityListeners = new Set<(activity: WebMcpActivity) => void>()\n\nexport const noteWebMcpActivity = (type: WebMcpActivity['type'], toolName: string) => {\n lastActivity = { type, toolName, at: Date.now() }\n activityListeners.forEach((listener) => listener(lastActivity!))\n}\n\nexport const lastWebMcpActivity = () => lastActivity\n\nexport const onWebMcpActivity = (listener: (activity: WebMcpActivity) => void) => {\n activityListeners.add(listener)\n return () => {\n activityListeners.delete(listener)\n }\n}\n\n/** @internal test helper */\nexport const __resetWebMcpActivity = () => {\n lastActivity = null\n activityListeners.clear()\n}\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { SDK_VERSION } from '../version.js'\nimport { lastWebMcpActivity, resolveModelContext, type WebMcpActivity } from '../tools/modelContext.js'\n\n/**\n * WebMCP agent detection.\n *\n * `document.modelContext` exists for every visitor of a WebMCP-capable browser,\n * so its presence alone is NOT an agent — it only means the page can serve\n * tools. An agent is detected once it acts: a `toolactivated` event or a tool\n * call through the ModelContext (both recorded by the WebMCP adapter).\n *\n * Old browser-extension polyfills injected `navigator.modelContext` with a\n * `vendor`/`client` field only while an agent was attached; that is still\n * honoured as an agent signal.\n */\n\ninterface LegacyInjectedContext {\n client?: string\n vendor?: string\n tools?: unknown[]\n}\n\nconst readLegacyInjected = (): LegacyInjectedContext | null => {\n if (typeof navigator === 'undefined') return null\n const value = (navigator as unknown as { modelContext?: LegacyInjectedContext }).modelContext\n if (!value || typeof value !== 'object') return null\n return value.vendor || value.client ? value : null\n}\n\nexport interface DetectWebMcpOptions {\n /**\n * Wait up to this many milliseconds for an agent to act (or an extension to\n * inject itself). 0 reads once and returns immediately.\n */\n pollMs?: number\n}\n\n/** Whether this page can serve WebMCP tools, and through which surface. */\nexport const webMcpSupport = () => resolveModelContext()?.source ?? null\n\nexport const detectWebMcp = async (\n options: DetectWebMcpOptions = {}\n): Promise<AgentIdentity | null> => {\n const { pollMs = 500 } = options\n const start = Date.now()\n\n while (true) {\n const activity = lastWebMcpActivity()\n if (activity) return fromActivity(activity)\n const legacy = readLegacyInjected()\n if (legacy) return fromLegacy(legacy)\n if (Date.now() - start >= pollMs) return null\n await new Promise((resolve) => setTimeout(resolve, 50))\n }\n}\n\nconst base = (): Omit<AgentIdentity, 'vendor' | 'signals'> => ({\n class: 'webmcp',\n trust: 'detected',\n confidence: 1,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n})\n\nconst fromActivity = (activity: WebMcpActivity): AgentIdentity => ({\n ...base(),\n vendor: null,\n signals: { webmcp: true, source: webMcpSupport(), event: activity.type, tool: activity.toolName },\n})\n\nconst fromLegacy = (ctx: LegacyInjectedContext): AgentIdentity => ({\n ...base(),\n vendor: ctx.vendor ?? ctx.client ?? null,\n signals: {\n webmcp: true,\n source: 'legacy-extension',\n toolCount: Array.isArray(ctx.tools) ? ctx.tools.length : 0,\n },\n})\n"]}
@@ -0,0 +1,18 @@
1
+ import {a,f,d,b,c}from'./chunk-DYCRZCCT.js';import {AgentClass,isHigherTrust,IdentityClaim,AgentronicsError,PolicyRule,MemoryEntry,SiteMemory,SITE_MEMORY_DEFAULT,TraceEvent,classifyApiKey,PUBLISHABLE_KEY_PREFIX,TRUST_RANK,SiteMemoryPageContext}from'@agentronics/protocol';var Ee=[{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=Ee,disable:n=false,confidence:r=.9}=e;if(n||typeof navigator>"u")return null;let o=navigator.userAgent??"";if(!o)return null;for(let a$1 of t)if(a$1.pattern.test(o))return {class:"crawler",trust:"detected",confidence:r,vendor:a$1.name,userAgent:o,detectionVersion:a,signals:{matched:a$1.name,category:a$1.category,ua:o}};return null};var Vt=[/HeadlessChrome/i,/Headless/i,/PhantomJS/i,/SlimerJS/i],Ft=()=>({hit:(typeof navigator<"u"&&navigator.webdriver)===true,weight:.6,detail:"navigator.webdriver === true"}),Ht=()=>{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_*"}`}},zt=["__playwright__binding__","__pwInitScripts","__puppeteer_evaluation_script__","_phantom","callPhantom","__nightmare","domAutomation","domAutomationController","__selenium_unwrapped","__webdriver_evaluate","__driver_evaluate","__fxdriver_unwrapped"],Jt=()=>{if(typeof window>"u")return {hit:false,weight:.6};let e=zt.find(t=>t in window);return e?{hit:true,weight:.6,detail:`window.${e}`}:{hit:false,weight:.6}},qt=()=>{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"}},Yt=()=>{if(typeof navigator>"u")return {hit:false,weight:.7};let e=navigator.userAgent??"",t=Vt.some(n=>n.test(e));return t?{hit:t,weight:.7,detail:`headless UA: ${e}`}:{hit:t,weight:.7}},Xt=()=>{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"}},Qt=()=>{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"}},Zt={webdriver:Ft,chromedriver:Ht,automationGlobals:Jt,headlessUa:Yt,languages:Xt,permissions:Qt,plugins:qt},U=(e={})=>{let{threshold:t=.4}=e,n={},r=0,o=0;for(let[s,u]of Object.entries(Zt)){let l=u();r+=l.weight,n[s]={hit:l.hit,weight:l.weight,detail:l.detail},l.hit&&(o+=l.weight);}let a$1=r===0?0:o/r;return a$1<t?null:{class:"dom",trust:"detected",confidence:a$1,vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:n}};var Re=()=>[{id:"webmcp.model-context",status:"stable",detect:()=>f({pollMs:0})},{id:"crawler.user-agent",status:"beta",detect:()=>G()},{id:"dom.automation-heuristics",status:"beta",detect:()=>U()}],ee=(e=Re())=>{let t=new Map(e.map(n=>[n.id,n]));return {register(n){t.set(n.id,n);},list(n){let r=[...t.values()];return n?r.filter(o=>o.status===n):r},async detectAll(n=false){for(let r of t.values()){if(r.status==="research"&&!n)continue;let o=await r.detect();if(o)return o}return null}}};var tn=e=>{let t=AgentClass.parse(e.class),n=e.verificationToken?"verified":"declared";return {class:t,trust:n,confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{declared:true,hasVerificationToken:!!e.verificationToken}}};var nn=({gatewayUrl:e,publishableKey:t,fetcher:n=fetch})=>{let r=null,o=[];return {snapshot(){return [...o]},async sync(){let a=await n(`${e.replace(/\/$/,"")}/v1/pub/detector-signatures`,{headers:{...t?{authorization:`Bearer ${t}`}:{},...r?{"if-none-match":r}:{}}});if(a.status===304)return this.snapshot();if(!a.ok)throw new Error(`Detector signature sync failed with status ${a.status}.`);return o=(await a.json()).signatures??[],r=a.headers.get("etag"),this.snapshot()}}};var Pe=async(e={})=>{if(e.customDetectors?.length){let t=await ee(e.customDetectors).detectAll(!!e.experimental);if(t)return t}if(e.webmcp!==false){let t=await f(e.webmcp??{});if(t)return t}if(e.crawler!==false){let t=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"]),on=e=>{if(e.length<6)return null;let t=e.reduce((r,o)=>r+o,0)/e.length;if(t<=0)return null;let n=e.reduce((r,o)=>r+(o-t)**2,0)/e.length;return Math.sqrt(n)/t},Ce=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)},Oe=(e={})=>{let{threshold:t=.6,minInteractions:n=3,onDetect:r,acceptUntrustedEvents:o=false}=e,a$1=b=>b.isTrusted||o,s=e.documentRef??(typeof document>"u"?void 0:document),u={clicks:0,teleportClicks:0,centreClicks:0,keyIntervals:0,keyIntervalCv:null,insertWithoutKeys:0,pointerMoves:0,wheelEvents:0,vmViewport:false},l=Number.NEGATIVE_INFINITY,i=0,p=0,g=[],m=0,f=null,v=s?.defaultView;v&&(u.vmViewport=rn.has(`${v.innerWidth}x${v.innerHeight}`));let d=b=>({class:"screenshot",trust:"detected",confidence:Number(b.toFixed(2)),vendor:null,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{vision:true,...u}}),h=()=>{if(f||u.clicks+m<n)return;let b=Ce(u);b>=t&&(f=d(b),r?.(f));},w=b=>{a$1(b)&&(u.pointerMoves+=1,l=b.timeStamp);},F=[["pointermove",w],["mousemove",w],["wheel",b=>{a$1(b)&&(u.wheelEvents+=1);}],["click",b=>{if(!a$1(b))return;let T=b;u.clicks+=1,b.timeStamp-l>400&&(u.teleportClicks+=1);let B=T.target instanceof Element?T.target:null;if(B&&typeof B.getBoundingClientRect=="function"){let C=B.getBoundingClientRect();if(C.width>8&&C.height>8){let 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",b=>{if(!a$1(b))return;let T=b.timeStamp;i&&T-i<1500?(g.push(T-i),g.length>60&&g.shift(),u.keyIntervals=g.length,u.keyIntervalCv=on(g)):m+=1,i=T,p=T;}],["keyup",()=>h()],["input",b=>{if(!a$1(b))return;let T=b;T.inputType==="insertText"&&T.data&&T.data.length>1&&b.timeStamp-p>200&&(u.insertWithoutKeys+=1,m+=1,h());}]];for(let[b,T]of F)s?.addEventListener(b,T,{capture:true,passive:true});return {signals:()=>({...u}),score:()=>Ce(u),detected:()=>f,stop:()=>{for(let[b,T]of F)s?.removeEventListener(b,T,{capture:true});}}};var ln=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),De=()=>{let e=null;return {present(t){let n=IdentityClaim.safeParse(t);if(!n.success)throw new AgentronicsError("invalid_api_key",`Invalid identity claim: ${n.error.issues[0]?.message??"unknown"}`);let r={claim:n.data,identity:ln(n.data)};return e=r,r},clear(){e=null;},preferOver(t){return e?t?isHigherTrust(e.identity.trust,t.trust)?e.identity:t:e.identity:t},snapshot(){return e}}};var Cr=({detected:e,declared:t,verified:n,linked:r})=>r?"linked":n?"verified":t?"declared":"detected",$e=e=>{let t=null;for(let n of e)(!t||TRUST_RANK[n.trust]>TRUST_RANK[t.trust])&&(t=n);return t};var _e=()=>({name:"bearer",async authenticate(e,t){if(!e.bearerToken)return null;let n=await t.verifyToken?.("bearer",e.bearerToken);return {class:e.classHint??"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"bearer",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{bearer:true,verifiedRemotely:!!n}}}});var je=()=>({name:"detection",async authenticate(e){return e.detected??null}});var Be=()=>({name:"extensionToken",async authenticate(e,t){if(!e.extensionToken)return null;let n=await t.verifyToken?.("extensionToken",e.extensionToken);return {class:"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"browser-extension",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{extensionToken:true,verifiedRemotely:!!n}}}});var We=()=>({name:"mtls",async authenticate(e,t){if(!e.xfccHeader)return null;let n=await t.verifyToken?.("mtls",e.xfccHeader);return {class:e.classHint??"webmcp",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"mtls",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{mtls:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var Ne=()=>({name:"oauth2",async authenticate(e,t){if(!e.oauth2AccessToken)return null;let n=await t.verifyToken?.("oauth2",e.oauth2AccessToken);return {class:e.classHint??"webmcp",trust:n?e.oauth2Subject&&n.trust!=="detected"&&n.trust!=="declared"?"linked":n.trust:"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"oauth2",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{oauth2:true,subject:e.oauth2Subject??null,verifiedRemotely:!!n}}}});var dn=e=>({class:e.class,trust:"declared",confidence:1,vendor:e.vendor,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{declared:true,hasToken:true,tokenExpiresAt:e.expiresAt??null}}),Ge=()=>({name:"selfDeclaration",async authenticate(e){return e.declaration?dn(IdentityClaim.parse(e.declaration)):null}});var Ue=()=>({name:"sessionLink",async authenticate(e,t){if(!e.sessionLinkToken)return null;let n=await t.verifyToken?.("sessionLink",e.sessionLinkToken);return {class:e.classHint??"screenshot",trust:n?e.linkedUserId&&n.trust!=="detected"&&n.trust!=="declared"?"linked":n.trust:"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"session-link",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{sessionLink:true,linkedUserId:e.linkedUserId??null,verifiedRemotely:!!n}}}});var Ke=()=>({name:"sso",async authenticate(e,t){if(!e.ssoIdToken)return null;let n=await t.verifyToken?.("sso",e.ssoIdToken);return {class:e.classHint??"dom",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"sso",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{sso:true,subject:n?.subject??null,verifiedRemotely:!!n,...n?.signals??{}}}}});var Ve=()=>({name:"spiffe",async authenticate(e,t){if(!e.spiffeJwt)return null;let n=await t.verifyToken?.("spiffe",e.spiffeJwt),r=n?.vendor==="google";return {class:e.classHint??"webmcp",trust:n?.trust??"declared",confidence:1,vendor:n?.vendor??e.vendorHint??"spiffe",userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{spiffe:true,spiffeId:n?.subject??null,subject:n?.subject??null,verifiedRemotely:!!n,...r?{googleAgent:true}:{},...n?.signals??{}}}}});var Fe=()=>({name:"xAgentHeader",async authenticate(e){if(!e.xAgentHeader)return null;let[t="x-agent",n="dom",r]=e.xAgentHeader.split(";"),o=AgentClass.safeParse(n);return {class:o.success?o.data:"dom",trust:"declared",confidence:r?1:.8,vendor:t,userAgent:typeof navigator>"u"?null:navigator.userAgent,detectionVersion:a,signals:{xAgentHeader:true,hasProof:!!r}}}});var ze=new Set(["bearer","extensionToken","sessionLink","oauth2","sso","spiffe","mtls"]),mn=(e,t,n)=>{if(ze.has(e)&&t.signals?.verifiedRemotely===false){let r=e==="oauth2"&&n.oauth2Subject||e==="sessionLink"&&n.linkedUserId;return {...t,trust:r?"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},He=()=>[je(),Ge(),_e(),Fe(),Be(),Ue(),Ne()],gn=()=>[Ke(),Ve(),We()],yn={detection:"detection",selfDeclaration:"declaration",bearer:"bearer",xAgentHeader:"x-agent-header",extensionToken:"extension",sessionLink:"session-link",oauth2:"oauth2",sso:"sso",spiffe:"spiffe",mtls:"mtls"},fn=(e,t)=>e==="spiffe"&&t.signals?.googleAgent===true?"google-agent":yn[e],Je=({compat:e,methods:t=e==="0.6"?[...He(),...gn()]:He(),context:n={},onTrace:r,onUnverifiedToken:o}={})=>{let a=false;return {async authenticate(s){let u=[],l={};for(let v of t){let d=await v.authenticate(s,n);l[v.name]=!!d,d&&(ze.has(v.name)&&d.signals?.verifiedRemotely===false&&!n.verifyToken&&!a&&(a=true,o?.(v.name)),e==="0.6"&&(d=mn(v.name,d,s)),u.push({method:v.name,identity:d}));}let i=$e(u.map(v=>v.identity)),p=i?u.find(v=>v.identity===i):void 0,g=p?fn(p.method,p.identity):void 0,m=typeof i?.signals?.subject=="string"?i.signals.subject:void 0,f={type:i?"auth.identity_presented":"sdk.error",agent:i,outcome:i?"success":"error",metadata:{methods:l,...g?{protocol:g}:{},...m?{subject:m}:{}}};return i||(f.error="No auth method produced an identity."),r?.(f),i},methods(){return t.map(s=>s.name)}}};var hn={identity:null,source:"initial",updatedAt:null},qe=()=>{let e=hn,t=new Set,n=()=>{t.size!==0&&t.forEach(r=>r(e));};return {snapshot(){return e},set(r,o){e={identity:r,source:o,updatedAt:new Date().toISOString()},n();},subscribe(r){return t.add(r),()=>{t.delete(r);}}}};var vn=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,n)=>{e.set(t,n);}}},wn=()=>typeof window>"u"||!window.localStorage?vn():{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},Ye=(e=wn())=>({consume(t,n,r=Date.now()){let o=`agtx:rate:${t}`,a=bn(e.read(o)),s=a&&a.resetAt>r?a.resetAt:r+n.windowSeconds*1e3,u=a&&a.resetAt>r?a.count+1:1;return e.write(o,JSON.stringify({count:u,resetAt:s})),{allowed:u<=n.max,remaining:Math.max(0,n.max-u),resetAt:s}}});var xn=(e,t)=>e==="*"||e===t?true:e.includes("*")?new RegExp("^"+e.replace(/[.+?^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*")+"$").test(t):false,Sn=(e,t)=>{let n=e?TRUST_RANK[e.trust]:-1,r=TRUST_RANK[t.minTrust];return n>=r},Tn=(e,t)=>t.allowedClasses.length===0?true:e?t.allowedClasses.includes(e.class):false,Ze="allow",An=(e,t)=>{let n=t?.class??"unknown",r=t?.vendor??"unknown",o=t?.trust??"none";return `${e}:${n}:${r}:${o}`},et=(e=[],t={})=>{let n=e.map(o=>PolicyRule.parse(o)),r=t.rateLimiter??Ye();return {set(o){n=o.map(a=>PolicyRule.parse(a));},list(){return [...n]},evaluate({tool:o,identity:a}){for(let s of n)if(xn(s.tool,o)){if(!Sn(a,s))return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" requires trust >= ${s.minTrust}.`};if(!Tn(a,s))return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" restricts to classes: ${s.allowedClasses.join(", ")}.`};if(s.rateLimit){let u=r.consume(An(o,a),s.rateLimit);if(!u.allowed)return {decision:"deny",ruleId:s.id,reason:`Rule "${s.id}" rate limit exceeded. Resets at ${new Date(u.resetAt).toISOString()}.`}}return {decision:s.decision,ruleId:s.id,reason:`Matched rule "${s.id}".`}}return {decision:Ze,ruleId:null,reason:`No rule matched tool "${o}". Falling back to "${Ze}".`}}}};var tt=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:r=fetch})=>{let o={policies:[],etag:null};return {snapshot(){return {policies:[...o.policies],etag:o.etag}},async sync(){let a=await r(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/policies`,{headers:{authorization:`Bearer ${n}`,...o.etag?{"if-none-match":o.etag}:{}}});if(a.status===304)return this.snapshot();if(!a.ok)throw new Error(`Policy sync failed with status ${a.status}.`);let s=await a.json();return o={policies:PolicyRule.array().parse(s.policies??[]),etag:a.headers.get("etag")},this.snapshot()}}};var nt=({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 r=n.createElement("div");return r.setAttribute("role","status"),r.setAttribute("data-agentronics-deny-overlay","true"),r.textContent=e,Object.assign(r.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(r),window.setTimeout(()=>r.remove(),t),r};var rt=({policyEngine:e,getIdentity:t,documentRef:n=typeof document>"u"?void 0:document,selector:r="[data-agentronics-tool]"})=>{if(!n)return {uninstall:()=>{}};let o=a=>{let s=a.target instanceof Element?a.target.closest(r):null;if(!(s instanceof HTMLElement))return;let u=s.dataset.agentronicsTool;u&&Promise.resolve(t()).then(l=>{let i=e.evaluate({tool:u,identity:l});i.decision==="deny"&&(a.preventDefault(),a.stopPropagation(),nt({message:i.reason,documentRef:n}));});};return n.addEventListener("click",o,true),{uninstall:()=>n.removeEventListener("click",o,true)}};var te=()=>{let e=new Map;return {read:t=>e.get(t)??null,write:(t,n)=>{e.set(t,n);},remove:t=>{e.delete(t);},keys:()=>[...e.keys()]}},ot=(e,t)=>({read:n=>{try{return e.getItem(t+n)}catch{return null}},write:(n,r)=>{try{e.setItem(t+n,r);}catch{}},remove:n=>{try{e.removeItem(t+n);}catch{}},keys:()=>{let n=[];try{for(let r=0;r<e.length;r++){let o=e.key(r);o&&o.startsWith(t)&&n.push(o.slice(t.length));}}catch{}return n}}),it="agtx:",st=()=>{let e=typeof window<"u",t=e&&typeof window.sessionStorage<"u"?ot(window.sessionStorage,it+"session:"):te(),n=e&&typeof window.localStorage<"u"?ot(window.localStorage,it+"user:"):te();return {session:t,user:n,org:te()}};var ct=(e,t)=>e.expiresAt!==null&&e.expiresAt<=t,lt=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),ut=(e={})=>{let t=st(),n=l=>{e.onTrace?.(l);};return {get:(l,i={})=>{let p=i.scope??"session",g=t[p],m=lt(g.read(l));if(!m){n({type:"memory.accessed",metadata:{operation:"get",key:l,scope:p,hit:false}});return}if(ct(m,Date.now())){g.remove(l),n({type:"memory.accessed",metadata:{operation:"get",key:l,scope:p,hit:false,expired:true}});return}return n({type:"memory.accessed",metadata:{operation:"get",key:l,scope:p,hit:true}}),m.value},set:(l,i,p={})=>{let g=p.scope??"session",m=p.ttlSeconds??null,f=Date.now(),v={value:i,expiresAt:m===null?null:f+m*1e3,updatedAt:new Date(f).toISOString()};return t[g].write(l,In(v)),n({type:"memory.updated",metadata:{operation:"set",key:l,scope:g,ttlSeconds:m}}),MemoryEntry.parse({key:l,value:i,scope:g,ttlSeconds:m,updatedAt:v.updatedAt})},remove:(l,i={})=>{let p=i.scope??"session";t[p].remove(l),n({type:"memory.updated",metadata:{operation:"remove",key:l,scope:p}});},list:(l={})=>{let i=l.scope??"session",p=t[i],g=Date.now(),m=[];for(let f of p.keys()){let v=lt(p.read(f));if(v){if(ct(v,g)){p.remove(f);continue}m.push(MemoryEntry.parse({key:f,value:v.value,scope:i,ttlSeconds:v.expiresAt===null?null:Math.max(0,Math.round((v.expiresAt-g)/1e3)),updatedAt:v.updatedAt}));}}return n({type:"memory.accessed",metadata:{operation:"list",scope:i,count:m.length}}),m},clear:(l={})=>{let i=l.scope??"session",p=t[i],g=p.keys().length;for(let m of p.keys())p.remove(m);n({type:"memory.updated",metadata:{operation:"clear",scope:i,count:g}});}}};var ne=e=>SiteMemory.parse(JSON.parse(JSON.stringify(e))),H=e=>({...e,updatedAt:new Date().toISOString()}),dt=(e={})=>{let t=SiteMemory.parse({...SITE_MEMORY_DEFAULT,...e.initial??{}}),n=null,r=new Set,o=d=>{e.onTrace?.(d);},a=()=>{n=null;},s=()=>{if(r.size===0)return;let d=ne(t);n=d,r.forEach(h=>h(d));},u=d=>{let h=SiteMemory.parse({...t,...d,workflows:{...t.workflows,...d.workflows??{}},policies:{...t.policies,...d.policies??{}},uiGuidance:{...t.uiGuidance,...d.uiGuidance??{}},pageContexts:{...t.pageContexts,...d.pageContexts??{}}});return t=H(h),a(),o({type:"memory.updated",metadata:{kind:"site",operation:"provide",keys:Object.keys(d)}}),s(),p()},l=(d,h)=>{let w=d.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)),I=A;for(let E=0;E<w.length-1;E++){let k=w[E],R=I[k];(typeof R!="object"||R===null||Array.isArray(R))&&(I[k]={}),I=I[k];}return I[w[w.length-1]]=h,t=H(SiteMemory.parse(A)),a(),o({type:"memory.updated",metadata:{kind:"site",operation:"update",path:d}}),s(),p()},i=d=>{let h=SiteMemoryPageContext.parse({path:d.path,payload:d.payload,updatedAt:new Date().toISOString()});return t=H({...t,pageContexts:{...t.pageContexts,[d.path]:h}}),a(),o({type:"memory.updated",metadata:{kind:"site",operation:"provideForPage",path:d.path}}),s(),{...h,payload:{...h.payload}}},p=()=>(n||(n=ne(t)),n);return {provide:u,update:l,provideForPage:i,snapshot:p,get:d=>{if(o({type:"memory.accessed",metadata:{kind:"site",operation:d?"get":"snapshot",path:d??null}}),!d)return ne(t);let h=d.split(".").filter(Boolean),w=t;for(let A of h){if(typeof w!="object"||w===null)return;w=w[A];}return w},getForPage:d=>{o({type:"memory.accessed",metadata:{kind:"site",operation:"getForPage",path:d}});let h=t.pageContexts[d];return h?{...h,payload:{...h.payload}}:null},replace:d=>(t=H(SiteMemory.parse(d)),a(),s(),p()),subscribe:d=>(r.add(d),()=>{r.delete(d);})}};var mt=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:r=fetch})=>{let o={memory:null,etag:null};return {snapshot(){return {memory:o.memory?SiteMemory.parse(o.memory):null,etag:o.etag}},async sync(){let a=await r(`${e.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(t)}/memory`,{headers:{authorization:`Bearer ${n}`,...o.etag?{"if-none-match":o.etag}:{}}});if(a.status===304)return this.snapshot();if(!a.ok)throw new Error(`Memory sync failed with status ${a.status}.`);let s=await a.json();return o={memory:SiteMemory.parse(s.memory??{}),etag:a.headers.get("etag")},this.snapshot()}}};var Rn=({toolName:e="getSiteContext",description:t="Returns Agentronics site memory: page map, workflows, policies, UI guidance.",getSnapshot:n,onAccess:r})=>({name:e,description:t,inputSchema:{type:"object",properties:{path:{type:"string",description:'Optional dot-path into the site memory (e.g. "workflows.purchase").'}},required:[]},invoke(o={}){let a=n(),s=o.path??null;if(r?.(s),!s)return {content:a};let u=s.split(".").filter(Boolean),l=a;for(let i of u){if(typeof l!="object"||l===null)return {content:void 0};l=l[i];}return {content:l}}});var L="agent-context-",re="agentronics-site-context",Pn=e=>{try{return JSON.stringify(e)}catch{return "{}"}},z=(e,t,n)=>{let r=e.querySelector(`meta[name="${t}"]`);r||(r=e.createElement("meta"),r.setAttribute("name",t),e.head.appendChild(r)),r.setAttribute("content",n);},J=(e,t)=>{e.querySelectorAll(`meta[name="${t}"]`).forEach(n=>n.remove());},oe=({doc:e=typeof document>"u"?null:document,snapshot:t,schemaType:n="WebSite"})=>{if(!e)return {uninstall:()=>{}};z(e,`${L}version`,t.version),z(e,`${L}updated-at`,t.updatedAt??new Date().toISOString()),t.siteMap?.navigation?.flow&&z(e,`${L}flow`,t.siteMap.navigation.flow),z(e,`${L}workflows`,Object.keys(t.workflows).join(","));let r=e.getElementById(re);return r||(r=e.createElement("script"),r.type="application/ld+json",r.id=re,e.head.appendChild(r)),r.textContent=Pn({"@context":"https://schema.org","@type":n,name:"Agentronics Site Memory",agentronics:t}),{uninstall:()=>{J(e,`${L}version`),J(e,`${L}updated-at`),J(e,`${L}flow`),J(e,`${L}workflows`),e.getElementById(re)?.remove();}}};var gt="agentronics-memory-overlay",Cn=e=>`
2
+ position: fixed;
3
+ bottom: 16px;
4
+ right: 16px;
5
+ max-width: 320px;
6
+ padding: 10px 12px;
7
+ background: rgba(11, 11, 12, 0.92);
8
+ color: #ffffff;
9
+ font: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace;
10
+ border: 1px solid rgba(255, 255, 255, 0.15);
11
+ border-radius: 10px;
12
+ z-index: 2147483647;
13
+ opacity: ${e?"0":"1"};
14
+ pointer-events: ${e?"none":"auto"};
15
+ `,yt=e=>{let t=e.siteMap?.pages?.length??0,n=Object.keys(e.workflows).length,r=Object.keys(e.uiGuidance).length;return `Agentronics site memory \xB7 pages:${t} \xB7 workflows:${n} \xB7 ui-hints:${r}`},ie=({doc:e=typeof document>"u"?null:document,snapshot:t,hidden:n=false})=>{if(!e)return {uninstall:()=>{},refresh:()=>{}};let r=e.getElementById(gt);return r||(r=e.createElement("div"),r.id=gt,r.setAttribute("role","note"),r.setAttribute("aria-label","Agentronics site memory summary"),r.setAttribute("data-agent-context","overlay"),e.body.appendChild(r)),r.setAttribute("style",Cn(n)),r.textContent=yt(t),{uninstall:()=>{r?.remove();},refresh:o=>{r&&(r.textContent=yt(o));}}};var ht="/.well-known/agent-context.json",se=async({origin:e,fetcher:t=fetch,signal:n}={})=>{let r=(e?e.replace(/\/$/,""):typeof window<"u"?window.location.origin:"")+ht;if(!r.startsWith("http"))return null;let o={headers:{accept:"application/json"}};n!==void 0&&(o.signal=n);let a=await t(r,o);if(!a.ok){if(a.status===404)return null;throw new Error(`well-known agent-context fetch failed with status ${a.status}.`)}let s=await a.json();return SiteMemory.parse(s)},On=({snapshot:e})=>JSON.stringify(SiteMemory.parse(e));var vt=({evaluate:e,setPolicies:t,listPolicies:n,onTrace:r,identityResolver:o,reviewer:a})=>{let s=new Map,u=new Set,l=i=>{if(!i.authz||!t||!n)return;let p={id:`tool:${i.name}`,tool:i.name,...i.authz,rateLimit:i.rateLimit??i.authz.rateLimit};t([...n().filter(g=>g.id!==p.id),p]);};return {register(i){return s.set(i.name,i),u.delete(i.name),l(i),r?.({type:"tool.registered",tool:i.name,metadata:{version:i.version??null,group:i.group??null,stage:i.stage??null}}),()=>{s.delete(i.name),u.delete(i.name);}},unregister(i){s.delete(i),u.delete(i);},enable(i){!s.has(i)||!u.has(i)||(u.delete(i),r?.({type:"tool.surfaced",tool:i,metadata:{state:"enabled"}}));},disable(i){!s.has(i)||u.has(i)||(u.add(i),r?.({type:"tool.surfaced",tool:i,metadata:{state:"disabled"}}));},isEnabled:i=>s.has(i)&&!u.has(i),list({includeDisabled:i=false}={}){let p=[...s.values()];return i?p:p.filter(g=>!u.has(g.name))},get:i=>s.get(i),async execute(i,p,g,m={}){let f=g===void 0?o?.()??null:g,v=s.get(i);if(!v)throw new Error(`Tool "${i}" is not registered.`);if(u.has(i)){let w={decision:"deny",ruleId:`tool:${i}`,reason:"Tool is disabled."};throw r?.({type:"tool.executed",tool:i,agent:f,policy:w,outcome:"blocked"}),new Error(w.reason)}let d=await e(i,{identity:f});if(d.decision==="deny")throw r?.({type:"tool.executed",tool:i,agent:f,policy:d,outcome:"blocked"}),new Error(d.reason);if(d.decision==="review"){let w={tool:i,input:p,identity:f,reason:d.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(r?.({type:"authz.evaluated",tool:i,agent:f,policy:d,outcome:A?"success":"blocked",metadata:{review:true,approved:A,reviewer:a?"configured":"none"}}),!A){let I={...d,decision:"deny",reason:a?"The person on the page did not approve this action.":"This action needs review and no reviewer is configured."};throw r?.({type:"tool.executed",tool:i,agent:f,policy:I,outcome:"blocked"}),new Error(I.reason)}d={...d,reason:`${d.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 r?.({type:"tool.executed",tool:i,agent:f,policy:d,outcome:"success",durationMs:Date.now()-h}),A}catch(w){throw r?.({type:"tool.executed",tool:i,agent:f,policy:d,outcome:"error",durationMs:Date.now()-h,error:w instanceof Error?w.message:String(w)}),w}}}};var q=e=>e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(q).join(",")}]`:`{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${q(e[n])}`).join(",")}}`,wt=e=>({name:e.name,...e.title?{title:e.title}:{},description:e.description??e.name,...e.inputSchema?{inputSchema:e.inputSchema}:{},...e.annotations?{annotations:e.annotations}:{}}),bt=e=>Math.ceil(q(wt(e)).length/4),Dn=e=>{let t=q(wt(e)).length;return {name:e.name,characters:t,tokens:Math.ceil(t/4)}},xt=e=>{let t=e.map(Dn);return {total:t.reduce((r,o)=>r+o.tokens,0),perTool:t}};var St=(e,t={})=>{let n=new Map;for(let s of e.stages)n.set(s.name,s);if(!n.has(e.initial))throw new Error(`Initial stage "${e.initial}" is not declared in progression stages.`);let r=e.initial,o=()=>{let s=n.get(r);return s?.enables?[r,...s.enables]:[r]},a=(s,u)=>{let l=r;if(!n.has(s))throw new Error(`Cannot transition to unknown stage "${s}".`);return s===r?{changed:false,from:l,to:s}:(r=s,t.onTrace?.({type:"tool.progressed",metadata:{from:l,to:s,trigger:u}}),{changed:true,from:l,to:s})};return {current:()=>r,enabledStages:()=>o(),notify(s){let l=n.get(r)?.transitions?.find(i=>i.on===s);return l?a(l.to,s):{changed:false,from:r,to:r}},set(s){return a(s,"manual")},reset(){let s=r;r=e.initial,s!==r&&t.onTrace?.({type:"tool.progressed",metadata:{from:s,to:r,trigger:"reset"}});},snapshot:()=>({current:r,enabled:o()})}};var Ln=(e,t)=>{let n=e.authz?.minTrust;return n?t?TRUST_RANK[t.trust]<TRUST_RANK[n]?{ok:false,reason:`trust-too-low:${t.trust}<${n}`}:{ok:true,reason:"trust-ok"}:{ok:false,reason:`requires-trust:${n}`}:{ok:true,reason:"no-trust-floor"}},$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"},At=(e,t)=>{let n=Ln(e,t.identity);if(!n.ok)return {tool:e,visible:false,reason:n.reason};let r=$n(e,t.identity);if(!r.ok)return {tool:e,visible:false,reason:r.reason};let o=_n(e,t);return o.ok?e.authz?.decision==="deny"?{tool:e,visible:false,reason:"authz-deny"}:{tool:e,visible:true,reason:"visible"}:{tool:e,visible:false,reason:o.reason}},kt=(e,t)=>e.filter(n=>At(n,t).visible),It=(e,t)=>e.map(n=>At(n,t));var Mt="default",Et=e=>{let t=new Map;for(let n of e){let r=n.group??Mt,o=t.get(r)??[];o.push(n),t.set(r,o);}return [...t.entries()].sort(([n],[r])=>n.localeCompare(r)).map(([n,r])=>({name:n,tools:r}))},Ho=e=>[...new Set(e.map(t=>t.group??Mt))].sort();var jn=(e,t)=>e==="legacy",ae=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:{}},Wn=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)}},Rt=async(e,t,n,r=ae)=>{let o=new AbortController,a=false,s,u=()=>o.abort(n?.reason),l=new Promise((i,p)=>{u=()=>{o.abort(n?.reason),p(n?.reason??new DOMException("The agent cancelled the call.","AbortError"));},n?.aborted?u():n?.addEventListener?.("abort",u,{once:true}),r>0&&(s=setTimeout(()=>{a=true,o.abort(),p(new Error("timeout"));},r));});try{let i=await Promise.race([(async()=>e(Bn(t),o.signal))(),l]);return await Wn(i)}catch(i){if(a)return {error:`The tool didn't finish within ${Math.round(r/1e3)} s.`,hint:"Try again, or with narrower arguments."};if(n?.aborted)throw i;return {error:i instanceof Error?i.message:String(i)}}finally{s!==void 0&&clearTimeout(s),n?.removeEventListener?.("abort",u);}},Nn=(e,t,n=ae)=>{let r={name:e.name,description:e.description||e.name,execute:(o,a)=>Rt((s,u)=>t(e,s,u),o,a?.signal,n)};return e.title!==void 0&&(r.title=e.title),e.inputSchema!==void 0&&(r.inputSchema=e.inputSchema),e.annotations!==void 0&&(r.annotations={...e.annotations}),r},Pt=(e={})=>{let t=e.invoke??(async(p,g,m)=>p.execute(g,m?{identity:null,signal:m}:{identity:null})),n=e.toolTimeoutMs??ae,r=null,o=null,a=null,s=[],u=()=>{let p=e.modelContext??e.provider;return p?{source:typeof p.registerTool=="function"?"document":"legacy",context:p}:b(e.host)},l=()=>{r?.abort(),r=null,o?.revoke(),o=null;},i=p=>{if(a||typeof p.addEventListener!="function")return;let g=f=>c("activated",f.toolName??""),m=f=>c("cancelled",f.toolName??"");p.addEventListener("toolactivated",g),p.addEventListener("toolcancel",m),a=()=>{p.removeEventListener?.("toolactivated",g),p.removeEventListener?.("toolcancel",m),a=null;};};return {publish(p){let g=u();if(!g)return {revoked:false,registrations:Promise.resolve([])};if(l(),jn(g.source,g.context))return o=g.context.provideContext({tools:p.map(d=>{let h={name:d.name,invoke:w=>Rt((A,I)=>t(d,A,I),w,void 0,n)};return d.description!==void 0&&(h.description=d.description),d.inputSchema!==void 0&&(h.inputSchema=d.inputSchema),h})}),s=p.map(d=>({name:d.name,status:"callable"})),{revoked:true,registrations:Promise.resolve(s)};let m=g.context;i(m);let f=new AbortController;return r=f,{revoked:true,registrations:Promise.all(p.map(async d=>{try{let h={signal:f.signal};return d.exposedTo?.length&&(h.exposedTo=d.exposedTo),await m.registerTool(Nn(d,t,n),h),{name:d.name,status:"callable"}}catch(h){return {name:d.name,status:"failed",error:h instanceof Error?`${h.name}: ${h.message}`:String(h)}}})).then(d=>(r===f&&(s=d),d))}},revoke(){l(),a?.(),s=[];},available:()=>!!u(),source:()=>u()?.source??null,status:()=>[...s]}};var Gn=e=>e===null||typeof e!="object"?"":Object.entries(e).slice(0,6).map(([n,r])=>`${n}: ${typeof r=="string"?r:JSON.stringify(r)}`.slice(0,90)).join(`
16
+ `),Ct=({documentRef:e=typeof document>"u"?void 0:document,timeoutMs:t=12e4}={})=>n=>new Promise(r=>{if(!e?.body)return r(false);let o=e,a=o.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 s=o.createElement("div");s.setAttribute("role","dialog"),s.setAttribute("aria-modal","true"),s.setAttribute("aria-label","Approve agent action"),Object.assign(s.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=o.createElement("div");u.style.fontWeight="700",u.style.fontSize="16px";let l=n.identity?.vendor??"An AI agent";u.textContent=`${l} wants to ${n.title??n.tool}`;let i=o.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 p=o.createElement("pre"),g=Gn(n.input);Object.assign(p.style,{display:g?"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=g;let m=o.createElement("div");Object.assign(m.style,{display:"flex",gap:"8px",justifyContent:"flex-end",marginTop:"16px"});let f=(E,k)=>{let R=o.createElement("button");return R.type="button",R.textContent=E,Object.assign(R.style,{padding:"9px 16px",borderRadius:"10px",border:"2px solid #0B0B0C",background:k?"#D4FF3A":"#FFFFFF",color:"#0B0B0C",boxShadow:k?"3px 3px 0 #0B0B0C":"none",font:"inherit",fontWeight:"650",cursor:"pointer"}),R},v=f("Not now",false),d=f("Allow",true);m.append(v,d),s.append(u,i,p,m),a.append(s);let h=false,w=E=>{h||(h=true,clearTimeout(I),o.removeEventListener("keydown",A,true),a.remove(),r(E));},A=E=>{E.key==="Escape"&&w(false);},I=setTimeout(()=>w(false),t);d.addEventListener("click",()=>w(true)),v.addEventListener("click",()=>w(false)),o.addEventListener("keydown",A,true),o.body.appendChild(a),d.focus();});var ce=(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 Ot=(e,t)=>e===void 0?t:Math.max(0,Math.min(1,e)),le=(e={})=>{let t=Ot(e.traceRate,1),n=Ot(e.errorRate,1),r=e.random??Math.random;return {shouldKeep(o){let a=o.outcome==="error"?n:t;return r()<a}}};var Un="[REDACTED]",Kn=e=>{if(e!==void 0)return JSON.parse(JSON.stringify(e))},ue=(e,t)=>{if(t.length===0||typeof e!="object"||e===null)return;let[n,...r]=t;if(!n)return;if(Array.isArray(e)){for(let a of e)ue(a,t);return}let o=e;if(n in o){if(r.length===0){o[n]=Un;return}ue(o[n],r);}},de=(e,t=[])=>{if(t.length===0)return e;let n=Kn(e);for(let r of t)ue(n,r.split(".").filter(Boolean));return n},pe=["metadata.password","metadata.token","metadata.authorization","metadata.cookie"];var Fn=()=>typeof location<"u"&&typeof location.pathname=="string"?location.pathname:void 0,Dt=e=>{let t=globalThis.crypto;return t&&"randomUUID"in t?`${e}_${t.randomUUID()}`:`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`},me=({siteId:e,bufferSize:t,sessionId:n=Dt("ses"),scrubPaths:r=pe,exporters:o=[],onExporterError:a,pageProvider:s=Fn,...u})=>{let l=ce(t),i=le(u),p=()=>{try{return s()}catch{return}};return {sessionId:n,async emit(g){let m={...g.metadata};if(m.page===void 0){let v=p();v!==void 0&&(m.page=v);}let f=TraceEvent.parse(de({id:Dt("trc"),siteId:e,sessionId:n,occurredAt:new Date().toISOString(),outcome:g.outcome??"success",...g,metadata:m},r));return i.shouldKeep(f)?(l.add(f),await Promise.all(o.map(async v=>{try{await v.export([f]);}catch(d){a?.(d,v,f);}})),f):null},list:()=>l.list(),clear:()=>l.clear()}};var ge=()=>({name:"console",export(e){for(let t of e)console.info("[agentronics:trace]",t.type,t);}});var ye=({gatewayUrl:e,publishableKey:t,fetcher:n,flushMs:r=2e3,maxBatch:o=50,maxQueue:a=500})=>{let s=`${e.replace(/\/$/,"")}/v1/pub/traces`,u=Math.max(1,Math.min(100,o)),l=[],i=null,p=(m,f)=>{let v=n??(typeof fetch=="function"?fetch:null);if(!v)return Promise.resolve();let d={publishableKey:t,events:m};try{return Promise.resolve(v(s,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(d),...f?{keepalive:!0}:{}})).then(()=>{},()=>{})}catch{return Promise.resolve()}},g=(m=false)=>{i!==null&&(clearTimeout(i),i=null);let f=[];for(;l.length;)f.push(p(l.splice(0,u),m));return Promise.all(f).then(()=>{})};return typeof document<"u"&&typeof document.addEventListener=="function"&&document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&g(true);}),typeof addEventListener=="function"&&addEventListener("pagehide",()=>{g(true);}),{name:"gateway",export(m){l.push(...m),l.length>a&&(l=l.slice(l.length-a)),l.length>=u?g():i===null&&(i=setTimeout(()=>{g();},r));},flush:g}};var Hn=e=>new Promise(t=>setTimeout(t,e)),he=({url:e,fetcher:t=fetch,maxRetries:n=2,queueLimit:r=500})=>({name:"webhook",async export(o){let s=[...zn(e),...o].slice(-r),u=0;for(;;){let l=await t(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({events:s})});if(l.ok){Lt(e,[]);return}if(u>=n)throw Lt(e,s),new Error(`Webhook exporter failed with status ${l.status}.`);u+=1,await Hn(100*u);}}}),fe=e=>`agtx:webhook:${e}`,zn=e=>{if(typeof window>"u"||!window.localStorage)return [];try{let t=window.localStorage.getItem(fe(e));return t?JSON.parse(t):[]}catch{return []}},Lt=(e,t)=>{if(!(typeof window>"u"||!window.localStorage))try{if(t.length===0){window.localStorage.removeItem(fe(e));return}window.localStorage.setItem(fe(e),JSON.stringify(t));}catch{}};var ve=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=bt(e),t},$t=({gatewayUrl:e,siteId:t,publishableKey:n,fetcher:r=fetch})=>({async push(o){let a=o.map(ve),s=await r(`${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(!s.ok)throw new Error(`Tool sync failed with status ${s.status}.`);return a.length}});var _t="/v1/sdk/events",jt=({url:e,ingestKey:t,fetcher:n=fetch})=>{let r=e.replace(/\/$/,""),o=r.endsWith(_t)?r:`${r}${_t}`;return {name:"intel",async export(a){let s={events:a},u=await n(o,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(s)});if(!u.ok)throw new Error(`Intel exporter failed with status ${u.status}.`)}}},Bt=({url:e,ingestKey:t,siteId:n,fetcher:r=fetch})=>{let o=e.replace(/\/$/,""),a=async(l,i)=>{let p=await r(`${o}${l}`,{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify(i)});if(!p.ok)throw new Error(`Intel sync ${l} failed with status ${p.status}.`);return p},s=async(l,i)=>{await a(l,i);},u=new Map;return {async pushTools(l){let i=l.map(ve);return await s("/v1/sdk/tools",{siteId:n,tools:i}),i.length},async pushMemory(l,i){await s("/v1/sdk/memory",{siteId:n,snapshot:l,...typeof i=="number"?{score:i}:{}});},async pullConfig(){let l=await(await a("/v1/sdk/config",{siteId:n})).json();return {policies:Array.isArray(l.policies)?l.policies:[],toolDescriptions:l.toolDescriptions&&typeof l.toolDescriptions=="object"?l.toolDescriptions:{},siteMemory:l.siteMemory&&typeof l.siteMemory=="object"?l.siteMemory:null,fetchedAt:typeof l.fetchedAt=="string"?l.fetchedAt:new Date().toISOString()}},keyVerifier({cacheSeconds:l=60}={}){return async i=>{let p=u.get(i);if(p&&p.until>Date.now())return p.value;let g=null;try{let m=await(await a("/v1/sdk/agent-keys/verify",{key:i})).json();m.valid&&m.agentId&&(g={agentId:m.agentId},m.name&&(g.name=m.name),m.vendor&&(g.vendor=m.vendor));}catch{return p?p.value:null}return u.size>5e3&&u.delete(u.keys().next().value),u.set(i,{value:g,until:Date.now()+l*1e3}),g}}}},Jn=jt,qn=Bt;var V="https://api.agentronics.dev",er="https://gateway.agentronics.dev",tr=e=>{if(e===void 0||e.replace(/\/$/,"")===V||e.replace(/\/$/,"")===er)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}`)},Fi=e=>{let{publishableKey:t,siteId:n="default",debug:r=false,policies:o=[],trace:a$1={}}=e,s=tr(e.gatewayUrl),u=classifyApiKey(t);if(u==="secret")throw new AgentronicsError("wrong_key_kind","A secret key was passed to Agentronics.init(). Browser code must use a publishable key (agtx_pk_*).");if(u!=="publishable")throw new AgentronicsError("invalid_api_key",`Agentronics.init() expected a key starting with "${PUBLISHABLE_KEY_PREFIX}".`);let l=a$1.enabled??true,i=[...r?[ge()]:[],...a$1.gateway?[ye({gatewayUrl:s,publishableKey:t})]:[],...a$1.webhookUrl?[he({url:a$1.webhookUrl})]:[],...a$1.exporters??[]],p={siteId:n,exporters:l?i:[],onExporterError:(c,y)=>{r&&console.warn(`[agentronics] trace exporter "${y.name}" failed`,c);}};a$1.bufferSize!==void 0&&(p.bufferSize=a$1.bufferSize),a$1.traceRate!==void 0&&(p.traceRate=a$1.traceRate),a$1.errorRate!==void 0&&(p.errorRate=a$1.errorRate),a$1.scrubPaths!==void 0&&(p.scrubPaths=a$1.scrubPaths);let g=me(p),m=c=>{l&&g.emit(c);},f=De(),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 d$1=Je(v),h=qe(),w=et(o),A=tt({gatewayUrl:s,siteId:n,publishableKey:t}),I=ut({onTrace:m}),E={onTrace:m};e.siteMemory!==void 0&&(E.initial=e.siteMemory);let k=dt(E),R=mt({gatewayUrl:s,siteId:n,publishableKey:t}),F=$t({gatewayUrl:s,siteId:n,publishableKey:t}),b=async c=>{let y=Date.now(),S=await Pe(c),M=f.preferOver(S);return l&&await g.emit({type:M?"agent.detected":"agent.missed",agent:M,durationMs:Date.now()-y,metadata:{detectedClass:S?.class??null,presented:f.snapshot()!==null}}),h.set(M,"detect"),M},T=async(c,y={})=>{let S=Date.now(),M=y.identity!==void 0?y.identity:await b(),P=w.evaluate({tool:c,identity:M});return l&&await g.emit({type:"authz.evaluated",tool:c,agent:M,policy:P,outcome:P.decision==="deny"?"blocked":"success",durationMs:Date.now()-S}),P},B=async()=>true,C=e.review===false?void 0:e.review??(e.compat==="0.6"?B:typeof document>"u"?void 0:Ct()),O=vt({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?St(e.progression,{onTrace:m}):null,we=c=>{let y={identity:c};return D&&(y.stage=D.current(),y.enabledStages=D.enabledStages()),y},be={...e.toolDescriptions??{}},Nt=c=>c.map(y=>{let S=be[y.name];return S?{...y,description:S}:y}),$=c=>Nt(kt(O.list(),we(c))),xe=c=>{be={...c},_!==null&&(_=null,Y($(h.snapshot().identity)));},_=null,Se=c=>c.map(y=>y.name).sort().join(`
17
+ `),Y=c=>{let y=Se(c);return y===_?null:(_=y,j.publish(c))},Te=c=>{if(!D)return;D.notify(c).changed&&_!==null&&Y($(h.snapshot().identity));},Ae={class:"webmcp",trust:"detected",confidence:1,vendor:null,userAgent:typeof navigator<"u"?navigator.userAgent:null,detectionVersion:a,signals:{source:"navigator.modelContext"}},j=Pt({...e.toolTimeoutMs!==void 0?{toolTimeoutMs:e.toolTimeoutMs}:{},invoke:async(c,y,S)=>{Gt(c.name);let M=h.snapshot().identity??Ae,P=await O.execute(c.name,y,M,S?{signal:S}:{});return Te(c.name),P}}),ke=c=>{let y=h.snapshot().identity;if(y&&y.trust!=="detected"||y?.class==="webmcp")return;let S={...Ae,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=>ke(c);d(c=>{c.type==="activated"&&ke(c.toolName);}),h.subscribe(c=>{_===null||!j.available()||Y($(c.identity));});let X=e.visionDetection??e.autoDetect!==false,Ut=X===false||typeof document>"u"?null:Oe({...X===true?{}:X,onDetect:c=>{let y=h.snapshot().identity;y&&(y.trust!=="detected"||y.class==="webmcp")||(h.set(c,"detect"),m({type:"agent.detected",agent:c,metadata:{detectedClass:"screenshot",via:"vision-behaviour"}}));}}),Q=e.autoDetect??true,Kt=Q===false?Promise.resolve(null):(async()=>{let c=Q===true?{}:Q;try{return await b(c)}catch(y){return r&&console.warn("[agentronics] autoDetect failed:",y),null}})();return Object.freeze({publishableKey:t,siteId:n,gatewayUrl:s,debug:r,memory:I,siteMemory:k,memoryCache:R,tracer:g,auth:d$1,agentContext:h,authz:w,policyCache:A,tools:O,progression:D,webmcp:j,vision:Ut,ready:Kt,detect:b,authenticate:async c=>{let y=await d$1.authenticate(c);return h.set(y,"authenticate"),y},presentIdentity:c=>{let y=f.present(c);return m({type:"auth.identity_presented",agent:y.identity,metadata:{vendor:y.identity.vendor,class:y.identity.class}}),h.set(y.identity,"declare"),y},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 R.sync();return c.memory&&(k.replace(c.memory),m({type:"memory.updated",metadata:{kind:"site",operation:"sync",etag:c.etag}})),c.memory},syncConfig:async()=>{let c=await fetch(`${s.replace(/\/$/,"")}/v1/pub/sites/${encodeURIComponent(n)}/config`,{headers:{authorization:`Bearer ${t}`}});if(!c.ok)throw new Error(`Config sync failed with status ${c.status}.`);let y=await c.json(),S=PolicyRule.array().parse(y.policies??[]);w.set(S),m({type:"authz.policies_set",metadata:{count:S.length,synced:true}});let M=y.siteMemory&&typeof y.siteMemory=="object"&&Object.keys(y.siteMemory).length?k.replace(SiteMemory.parse(y.siteMemory)):null,P=y.toolDescriptions&&typeof y.toolDescriptions=="object"?y.toolDescriptions:{};return xe(P),{policies:S,toolDescriptions:P,siteMemory:M}},provideSiteMemory:c=>k.provide(c),provideForPage:c=>{k.provideForPage(c);},installMemoryDelivery:({metaTags:c=true,overlay:y=false}={})=>{let S=[];return c&&S.push(oe({snapshot:k.snapshot()})),y&&S.push(ie({snapshot:k.snapshot()})),{uninstall:()=>{S.forEach(M=>M.uninstall());}}},fetchWellKnown:async c=>{let y={};c!==void 0&&(y.origin=c);let S=await se(y);return S&&(k.replace(S),m({type:"memory.updated",metadata:{kind:"site",operation:"wellKnown",origin:c??null}})),S},installDomEnforcer:()=>rt({policyEngine:w,getIdentity:()=>b({webmcp:{pollMs:0}})}),registerTool:c=>O.register(c),setToolDescriptions:c=>xe(c),syncTools:async()=>{let c=O.list({includeDisabled:true}),y=await F.push(c);return m({type:"tool.registered",metadata:{operation:"sync",count:y}}),y},surfaceTools:({identity:c=null}={})=>$(c),explainSurfacing:({identity:c=null}={})=>It(O.list(),we(c)),groupedTools:({identity:c=null}={})=>Et($(c)),estimateTokens:({identity:c=null}={})=>xt($(c)),publishToWebMcp:({identity:c=null}={})=>{let y=$(c);_=Se(y);let S=j.publish(y),M=S.registrations.then(P=>(P.forEach(W=>{m({type:"tool.surfaced",tool:W.name,outcome:W.status==="callable"?"success":"error",...W.error?{error:W.error}:{},metadata:{state:W.status==="callable"?"published":"failed",source:j.source(),trust:c?.trust??null}});}),P));return {revoked:S.revoked,surfaced:y.length,registrations:M}},notifyToolInvoked:c=>Te(c),evaluate:T,traces:()=>g.list(),clearTraces:()=>g.clear(),async ping(){try{let c=await fetch(`${s.replace(/\/$/,"")}/v1/pub/health`,{method:"GET",headers:{authorization:`Bearer ${t}`}});if(!c.ok)return {ok:!1,status:c.status,error:`gateway returned ${c.status}`};let y=await c.json().catch(()=>null)??{};return {ok:!0,status:c.status,body:y}}catch(c){return {ok:false,status:0,error:c instanceof Error?c.message:String(c)}}}})};export{qn as $,oe as A,ie as B,ht as C,se as D,On as E,vt as F,wt as G,bt as H,Dn as I,xt as J,St as K,At as L,kt as M,It as N,Mt as O,Et as P,Ho as Q,Pt as R,Ct as S,ce as T,me as U,ge as V,ye as W,he as X,jt as Y,Bt as Z,Jn as _,Ee as a,Fi as aa,G as b,U as c,Re as d,ee as e,tn as f,nn as g,Pe as h,Ce as i,Oe as j,De as k,Cr as l,$e as m,He as n,gn as o,Je as p,qe as q,Ye as r,et as s,tt as t,nt as u,rt as v,ut as w,dt as x,mt as y,Rn as z};//# sourceMappingURL=chunk-JR5YRLTH.js.map
18
+ //# sourceMappingURL=chunk-JR5YRLTH.js.map