@agentronics/sdk 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/chunk-4FLZQPCO.js +18 -0
  2. package/dist/chunk-4FLZQPCO.js.map +1 -0
  3. package/dist/{chunk-X7NFMFN6.js → chunk-6QQS26AP.js} +264 -69
  4. package/dist/chunk-6QQS26AP.js.map +1 -0
  5. package/dist/chunk-BPDWJCPY.js +2 -0
  6. package/dist/chunk-BPDWJCPY.js.map +1 -0
  7. package/dist/index.cjs +8 -7
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +57 -8
  10. package/dist/index.d.ts +57 -8
  11. package/dist/index.global.js +8 -7
  12. package/dist/index.global.js.map +1 -1
  13. package/dist/index.js +1 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/{init-only-7f8_LQAI.d.ts → init-only-C80qhujz.d.ts} +227 -30
  16. package/dist/{init-only-Cwll8MGz.d.cts → init-only-s9E9bVC0.d.cts} +227 -30
  17. package/dist/init-only.cjs +8 -7
  18. package/dist/init-only.cjs.map +1 -1
  19. package/dist/init-only.d.cts +2 -2
  20. package/dist/init-only.d.ts +2 -2
  21. package/dist/init-only.global.js +8 -7
  22. package/dist/init-only.global.js.map +1 -1
  23. package/dist/init-only.js +1 -1
  24. package/dist/lite.cjs +1 -1
  25. package/dist/lite.cjs.map +1 -1
  26. package/dist/lite.d.cts +2 -2
  27. package/dist/lite.d.ts +2 -2
  28. package/dist/lite.global.js +1 -1
  29. package/dist/lite.global.js.map +1 -1
  30. package/dist/lite.js +1 -1
  31. package/dist/middleware-Dd2T772u.d.cts +429 -0
  32. package/dist/middleware-Dd2T772u.d.ts +429 -0
  33. package/dist/next.cjs +239 -64
  34. package/dist/next.cjs.map +1 -1
  35. package/dist/next.d.cts +2 -2
  36. package/dist/next.d.ts +2 -2
  37. package/dist/next.js +2 -2
  38. package/dist/server.cjs +361 -66
  39. package/dist/server.cjs.map +1 -1
  40. package/dist/server.d.cts +103 -308
  41. package/dist/server.d.ts +103 -308
  42. package/dist/server.js +93 -1
  43. package/dist/server.js.map +1 -1
  44. package/dist/webmcp-BgKzHeQ3.d.cts +97 -0
  45. package/dist/webmcp-BgKzHeQ3.d.ts +97 -0
  46. package/package.json +4 -4
  47. package/dist/chunk-LLD3Y2LZ.js +0 -2
  48. package/dist/chunk-LLD3Y2LZ.js.map +0 -1
  49. package/dist/chunk-X7NFMFN6.js.map +0 -1
  50. package/dist/chunk-Y7JYD5RA.js +0 -17
  51. package/dist/chunk-Y7JYD5RA.js.map +0 -1
  52. package/dist/webmcp-C4ikhM4g.d.cts +0 -12
  53. package/dist/webmcp-C4ikhM4g.d.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts","../src/detection/webmcp.ts","../src/detection/crawler.ts","../src/detection/dom.ts","../src/detection/detectors/registry.ts","../src/detection/index.ts","../src/auth/identity.ts","../src/auth/trustLevel.ts","../src/auth/methods/bearer.ts","../src/auth/methods/detectionAsAuth.ts","../src/auth/methods/extensionToken.ts","../src/auth/methods/mtls.ts","../src/auth/methods/oauth2.ts","../src/auth/methods/selfDeclaration.ts","../src/auth/methods/sessionLink.ts","../src/auth/methods/sso.ts","../src/auth/methods/spiffe.ts","../src/auth/methods/xAgentHeader.ts","../src/auth/engine.ts","../src/auth/agentContext.ts","../src/authz/rateLimiter.ts","../src/authz/engine.ts","../src/authz/policyCache.ts","../src/authz/overlay.ts","../src/authz/domEnforcer.ts","../src/memory/storage.ts","../src/memory/store.ts","../src/memory/siteMemory.ts","../src/memory/memoryCache.ts","../src/memory/delivery/metaTags.ts","../src/memory/delivery/overlay.ts","../src/memory/delivery/wellKnownClient.ts","../src/tools/registry.ts","../src/tools/toolSync.ts","../src/tools/progression.ts","../src/tools/surfacing.ts","../src/tools/groups.ts","../src/tools/tokenEstimate.ts","../src/tools/webmcpAdapter.ts","../src/observability/buffer.ts","../src/observability/sampler.ts","../src/observability/scrub.ts","../src/observability/tracer.ts","../src/observability/exporters/console.ts","../src/observability/exporters/gateway.ts","../src/observability/exporters/webhook.ts","../src/init.ts"],"names":["SDK_VERSION","readModelContext","value","detectWebMcp","options","pollMs","start","ctx","buildIdentity","resolve","CRAWLER_SIGNATURES","detectCrawler","signatures","disable","confidence","ua","sig","HEADLESS_UA_PATTERNS","checkWebdriver","checkChromedriver","keys","k","checkPlugins","desktop","empty","checkHeadlessUa","hit","re","checkLanguages","langs","checkPermissions","hasChrome","SIGNALS","detectDom","threshold","signals","totalWeight","hitWeight","name","check","result","bundledDetectors","createDetectorRegistry","initial","detectors","detector","status","all","includeResearch","identity","detectAgent","custom","webmcp","crawler","dom","claim","createIdentityStore","presented","input","parsed","IdentityClaim","AgentronicsError","next","detected","isHigherTrust","highestTrust","identities","best","TRUST_RANK","bearer","context","verified","detectionAsAuth","extensionToken","mtls","oauth2","identityFromClaim","selfDeclaration","sessionLink","sso","spiffe","isGoogleFlavor","xAgentHeader","vendor","rawClass","proof","parsedClass","AgentClass","defaultAuthMethods","METHOD_TO_PROTOCOL","resolveTraceProtocol","methodName","createAuthEngine","methods","onTrace","methodResults","method","winner","entry","winnerEntry","protocol","subject","trace","INITIAL","createAgentContextStore","state","listeners","notify","listener","source","memoryStorage","map","key","browserStorage","decode","raw","createRateLimiter","storage","rule","now","storageKey","existing","resetAt","count","matchTool","pattern","tool","meetsTrust","have","need","meetsClass","DEFAULT_DECISION","rateLimitKey","classPart","vendorPart","trustPart","createPolicyEngine","rules","PolicyRule","rateLimiter","rate","createPolicyCache","gatewayUrl","siteId","publishableKey","fetcher","snapshot","response","body","showDenyOverlay","message","durationMs","documentRef","node","installDomEnforcer","policyEngine","getIdentity","selector","handler","event","target","evaluation","inMemoryBackend","store","webStorageBackend","prefix","out","i","PREFIX","createBackends","hasWindow","session","user","isExpired","record","encode","createMemoryStore","backends","emit","scope","backend","ttl","MemoryEntry","cloneSiteMemory","memory","SiteMemorySchema","stamp","createSiteMemoryStore","SITE_MEMORY_DEFAULT","cachedSnapshot","invalidate","snap","provide","merged","update","path","parts","cursor","provideForPage","SiteMemoryPageContext","found","createMemoryCache","META_PREFIX","JSONLD_ID","safeJson","setMeta","doc","content","tag","removeByName","installMetaTags","schemaType","script","OVERLAY_ID","styles","hidden","summarize","pages","workflows","ui","installMemoryOverlay","host","WELL_KNOWN_PATH","fetchWellKnownContext","origin","signal","fetchInit","payload","createToolRegistry","evaluate","setPolicies","listPolicies","identityResolver","tools","disabled","writePolicyFor","item","includeDisabled","resolvedIdentity","policy","output","error","toToolDescriptor","descriptor","createToolSync","descriptors","createProgressionStore","config","stageMap","stage","current","enabled","transitionTo","trigger","from","toolName","transition","t","previous","passesTrust","minTrust","passesClass","allowed","passesStage","decideSurfacing","trust","cls","surfaceTools","explainSurfacing","DEFAULT_GROUP","groupTools","bucket","a","b","list","stableStringify","estimateToolTokens","characters","estimateBudget","perTool","sum","resolveProvider","candidate","toDescriptor","invoke","createWebMcpAdapter","handle","provider","createTraceBuffer","limit","events","clampRate","fallback","createSampler","traceRate","errorRate","random","REDACTED","cloneJson","redactPath","head","rest","scrubValue","paths","cloned","DEFAULT_SCRUB_PATHS","defaultPageProvider","randomId","cryptoApi","createTracer","bufferSize","sessionId","scrubPaths","exporters","onExporterError","pageProvider","samplerOptions","buffer","sampler","readPage","metadata","page","TraceEvent","exporter","createConsoleExporter","createGatewayExporter","batch","sleep","ms","createWebhookExporter","url","maxRetries","queueLimit","readQueue","attempt","writeQueue","queueKey","DEFAULT_GATEWAY_URL","resolveGatewayUrl","provided","init","debug","policies","kind","classifyApiKey","PUBLISHABLE_KEY_PREFIX","traceEnabled","tracerOptions","tracer","emitTrace","identityStore","authOptions","auth","agentContext","policyCache","siteMemoryOptions","siteMemory","memoryCache","toolSync","detect","detectOptions","opts","progression","surfacingContext","surfaceFor","handleToolInvoked","fallbackWebMcpIdentity","autoDetectOption","ready","detectOpts","err","metaTags","overlay","handles","wellKnownOptions","memorySnapshot","surfaced"],"mappings":"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","file":"init-only.cjs","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","import type { AgentIdentity } from '@agentronics/protocol'\nimport { SDK_VERSION } from \"../version.js\"\n\ninterface ModelContextLike {\n client?: string\n vendor?: string\n tools?: unknown[]\n}\n\nconst readModelContext = (): ModelContextLike | null => {\n if (typeof navigator === 'undefined') return null\n const value = (navigator as unknown as { modelContext?: ModelContextLike }).modelContext\n return value && typeof value === 'object' ? value : null\n}\n\nexport interface DetectWebMcpOptions {\n /**\n * Some extensions inject `navigator.modelContext` after first paint. Poll for this many\n * milliseconds before giving up. Set to 0 to read synchronously and return immediately.\n */\n pollMs?: number\n}\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 ctx = readModelContext()\n if (ctx) return buildIdentity(ctx)\n if (Date.now() - start >= pollMs) return null\n await new Promise((resolve) => setTimeout(resolve, 50))\n }\n}\n\nconst buildIdentity = (ctx: ModelContextLike): AgentIdentity => ({\n class: 'webmcp',\n trust: 'detected',\n confidence: 1,\n vendor: ctx.vendor ?? ctx.client ?? null,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n webmcp: true,\n toolCount: Array.isArray(ctx.tools) ? ctx.tools.length : 0,\n },\n})\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { SDK_VERSION } from '../version.js'\n\nexport type CrawlerCategory = 'ai' | 'search'\n\nexport interface CrawlerSignature {\n /** Stable vendor id, reported as identity.vendor. */\n name: string\n category: CrawlerCategory\n /** Tested against navigator.userAgent. */\n pattern: RegExp\n}\n\n/**\n * Known AI + search crawlers, matched by User-Agent token.\n *\n * Caveats baked into the design:\n * - UA is self-reported and trivially spoofable, so a match is high-confidence\n * but never certain — we report `confidence: 0.9`, not `1`.\n * - This is client-side detection: it only sees crawlers that actually execute\n * JavaScript on the page. The majority of crawlers fetch HTML and never run\n * the SDK, so full coverage needs server/edge UA inspection (a future product).\n *\n * Order matters: more specific tokens (e.g. `Google-Extended`, `Applebot-Extended`)\n * are listed before their broader siblings so the first match wins correctly.\n */\nexport const CRAWLER_SIGNATURES: CrawlerSignature[] = [\n // AI / LLM crawlers\n { name: 'GPTBot', category: 'ai', pattern: /GPTBot/i },\n { name: 'OAI-SearchBot', category: 'ai', pattern: /OAI-SearchBot/i },\n { name: 'ChatGPT-User', category: 'ai', pattern: /ChatGPT-User/i },\n { name: 'ClaudeBot', category: 'ai', pattern: /ClaudeBot/i },\n { name: 'Claude-Web', category: 'ai', pattern: /Claude-Web/i },\n { name: 'anthropic-ai', category: 'ai', pattern: /anthropic-ai/i },\n { name: 'PerplexityBot', category: 'ai', pattern: /PerplexityBot/i },\n { name: 'Google-Extended', category: 'ai', pattern: /Google-Extended/i },\n { name: 'Applebot-Extended', category: 'ai', pattern: /Applebot-Extended/i },\n { name: 'Amazonbot', category: 'ai', pattern: /Amazonbot/i },\n { name: 'Bytespider', category: 'ai', pattern: /Bytespider/i },\n { name: 'CCBot', category: 'ai', pattern: /CCBot/i },\n { name: 'Meta-ExternalAgent', category: 'ai', pattern: /Meta-ExternalAgent/i },\n { name: 'cohere-ai', category: 'ai', pattern: /cohere-ai/i },\n // Search crawlers\n { name: 'Googlebot', category: 'search', pattern: /Googlebot/i },\n { name: 'Bingbot', category: 'search', pattern: /bingbot/i },\n { name: 'DuckDuckBot', category: 'search', pattern: /DuckDuckBot/i },\n { name: 'YandexBot', category: 'search', pattern: /YandexBot/i },\n { name: 'Baiduspider', category: 'search', pattern: /Baiduspider/i },\n { name: 'Applebot', category: 'search', pattern: /Applebot/i },\n]\n\nexport interface DetectCrawlerOptions {\n /** Override the signature table (e.g. to add private/first-party crawlers). */\n signatures?: CrawlerSignature[]\n /** Skip crawler detection entirely. */\n disable?: boolean\n /** Confidence reported on a UA match. Default 0.9 (UA is spoofable). */\n confidence?: number\n}\n\n/**\n * Identify known AI/search crawlers by their User-Agent token. Returns `null`\n * when no signature matches or when there is no `navigator` (server-side).\n */\nexport const detectCrawler = (options: DetectCrawlerOptions = {}): AgentIdentity | null => {\n const { signatures = CRAWLER_SIGNATURES, disable = false, confidence = 0.9 } = options\n if (disable) return null\n if (typeof navigator === 'undefined') return null\n\n const ua = navigator.userAgent ?? ''\n if (!ua) return null\n\n for (const sig of signatures) {\n if (sig.pattern.test(ua)) {\n return {\n class: 'crawler',\n trust: 'detected',\n confidence,\n vendor: sig.name,\n userAgent: ua,\n detectionVersion: SDK_VERSION,\n signals: { matched: sig.name, category: sig.category, ua },\n }\n }\n }\n\n return null\n}\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { SDK_VERSION } from \"../version.js\"\n\ninterface SignalResult {\n hit: boolean\n weight: number\n detail?: string\n}\n\nconst HEADLESS_UA_PATTERNS = [/HeadlessChrome/i, /Headless/i, /PhantomJS/i, /SlimerJS/i]\n\nconst checkWebdriver = (): SignalResult => {\n const value =\n typeof navigator !== 'undefined' && (navigator as Navigator & { webdriver?: boolean }).webdriver\n return { hit: value === true, weight: 0.6, detail: 'navigator.webdriver === true' }\n}\n\nconst checkChromedriver = (): SignalResult => {\n if (typeof window === 'undefined') return { hit: false, weight: 0.5 }\n const keys = Object.keys(window).filter((k) => k.startsWith('cdc_'))\n return { hit: keys.length > 0, weight: 0.5, detail: `window.${keys[0] ?? 'cdc_*'}` }\n}\n\nconst checkPlugins = (): SignalResult => {\n if (typeof navigator === 'undefined' || !navigator.plugins) return { hit: false, weight: 0.2 }\n const desktop = /Win|Mac|Linux/.test(navigator.userAgent ?? '')\n const empty = navigator.plugins.length === 0\n return { hit: desktop && empty, weight: 0.2, detail: 'desktop UA with no plugins' }\n}\n\nconst checkHeadlessUa = (): SignalResult => {\n if (typeof navigator === 'undefined') return { hit: false, weight: 0.7 }\n const ua = navigator.userAgent ?? ''\n const hit = HEADLESS_UA_PATTERNS.some((re) => re.test(ua))\n return hit ? { hit, weight: 0.7, detail: `headless UA: ${ua}` } : { hit, weight: 0.7 }\n}\n\nconst checkLanguages = (): SignalResult => {\n if (typeof navigator === 'undefined') return { hit: false, weight: 0.15 }\n const langs = navigator.languages\n return {\n hit: !langs || langs.length === 0,\n weight: 0.15,\n detail: 'navigator.languages empty',\n }\n}\n\nconst checkPermissions = (): SignalResult => {\n if (typeof navigator === 'undefined') return { hit: false, weight: 0.1 }\n const hasChrome = 'chrome' in window\n const ua = navigator.userAgent ?? ''\n const looksChrome = /Chrome\\//.test(ua) && !/Edg\\//.test(ua)\n return {\n hit: looksChrome && !hasChrome,\n weight: 0.2,\n detail: 'Chrome UA without window.chrome',\n }\n}\n\nconst SIGNALS = {\n webdriver: checkWebdriver,\n chromedriver: checkChromedriver,\n headlessUa: checkHeadlessUa,\n languages: checkLanguages,\n permissions: checkPermissions,\n plugins: checkPlugins,\n} as const\n\nexport type DomSignalName = keyof typeof SIGNALS\n\nexport interface DetectDomOptions {\n /** Floor below which we report no DOM agent. Defaults to 0.4. */\n threshold?: number\n}\n\nexport const detectDom = (options: DetectDomOptions = {}): AgentIdentity | null => {\n const { threshold = 0.4 } = options\n\n const signals: Record<string, unknown> = {}\n let totalWeight = 0\n let hitWeight = 0\n\n for (const [name, check] of Object.entries(SIGNALS)) {\n const result = check()\n totalWeight += result.weight\n signals[name] = { hit: result.hit, weight: result.weight, detail: result.detail }\n if (result.hit) hitWeight += result.weight\n }\n\n const confidence = totalWeight === 0 ? 0 : hitWeight / totalWeight\n if (confidence < threshold) return null\n\n return {\n class: 'dom',\n trust: 'detected',\n confidence,\n vendor: null,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals,\n }\n}\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { detectDom } from '../dom.js'\nimport { detectCrawler } from '../crawler.js'\nimport { detectWebMcp } from '../webmcp.js'\n\nexport type DetectorStatus = 'stable' | 'beta' | 'research'\n\nexport interface Detector {\n id: string\n status: DetectorStatus\n detect(): AgentIdentity | null | Promise<AgentIdentity | null>\n}\n\nexport const bundledDetectors = (): Detector[] => [\n {\n id: 'webmcp.model-context',\n status: 'stable',\n detect: () => detectWebMcp({ pollMs: 0 }),\n },\n {\n id: 'crawler.user-agent',\n status: 'beta',\n detect: () => detectCrawler(),\n },\n {\n id: 'dom.automation-heuristics',\n status: 'beta',\n detect: () => detectDom(),\n },\n]\n\nexport const createDetectorRegistry = (initial: Detector[] = bundledDetectors()) => {\n const detectors = new Map(initial.map((detector) => [detector.id, detector]))\n\n return {\n register(detector: Detector) {\n detectors.set(detector.id, detector)\n },\n list(status?: DetectorStatus): Detector[] {\n const all = [...detectors.values()]\n return status ? all.filter((detector) => detector.status === status) : all\n },\n async detectAll(includeResearch = false): Promise<AgentIdentity | null> {\n for (const detector of detectors.values()) {\n if (detector.status === 'research' && !includeResearch) continue\n const identity = await detector.detect()\n if (identity) return identity\n }\n return null\n },\n }\n}\n\nexport type DetectorRegistry = ReturnType<typeof createDetectorRegistry>\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { detectWebMcp, type DetectWebMcpOptions } from './webmcp.js'\nimport { detectCrawler, type DetectCrawlerOptions } from './crawler.js'\nimport { detectDom, type DetectDomOptions } from './dom.js'\nimport { createDetectorRegistry, type Detector } from './detectors/registry.js'\n\nexport interface DetectAgentOptions {\n webmcp?: DetectWebMcpOptions | false\n crawler?: DetectCrawlerOptions | false\n dom?: DetectDomOptions | false\n customDetectors?: Detector[]\n experimental?: boolean\n}\n\n/**\n * Run the full detection pipeline. WebMCP wins if present (exact match), then a\n * known-crawler User-Agent match, then DOM automation heuristics. Returns `null`\n * if no agent class fires above its threshold — caller should treat as \"human or\n * undetectable agent.\"\n */\nexport const detectAgent = async (\n options: DetectAgentOptions = {}\n): Promise<AgentIdentity | null> => {\n if (options.customDetectors?.length) {\n const custom = await createDetectorRegistry(options.customDetectors).detectAll(Boolean(options.experimental))\n if (custom) return custom\n }\n if (options.webmcp !== false) {\n const webmcp = await detectWebMcp(options.webmcp ?? {})\n if (webmcp) return webmcp\n }\n if (options.crawler !== false) {\n const crawler = detectCrawler(options.crawler ?? {})\n if (crawler) return crawler\n }\n if (options.dom !== false) {\n const dom = detectDom(options.dom ?? {})\n if (dom) return dom\n }\n return null\n}\n\nexport { detectWebMcp } from './webmcp.js'\nexport type { DetectWebMcpOptions } from './webmcp.js'\nexport { detectDom } from './dom.js'\nexport type { DetectDomOptions, DomSignalName } from './dom.js'\nexport { detectCrawler, CRAWLER_SIGNATURES } from './crawler.js'\nexport type { DetectCrawlerOptions, CrawlerSignature, CrawlerCategory } from './crawler.js'\nexport { declareAgent } from './declare.js'\nexport type { DeclareAgentInput } from './declare.js'\nexport { createDetectorRegistry, bundledDetectors } from './detectors/registry.js'\nexport type { Detector, DetectorRegistry, DetectorStatus } from './detectors/registry.js'\nexport { createSignatureLoader } from './detectors/signatureLoader.js'\nexport type { DetectorSignature, SignatureLoader } from './detectors/signatureLoader.js'\n","import {\n AgentronicsError,\n IdentityClaim,\n isHigherTrust,\n type AgentIdentity,\n type IdentityClaim as IdentityClaimType,\n} from '@agentronics/protocol'\nimport { SDK_VERSION } from '../version.js'\n\nexport interface PresentIdentityOptions extends IdentityClaimType {\n /**\n * If false, accept the claim as `declared` (no remote verification).\n * If true, the claim is staged for the gateway to verify; trust is `declared` until then.\n */\n verifyRemotely?: boolean\n}\n\nexport interface PresentedIdentity {\n identity: AgentIdentity\n claim: IdentityClaimType\n}\n\nconst buildIdentity = (claim: IdentityClaimType): AgentIdentity => ({\n class: claim.class,\n trust: 'declared',\n confidence: 1,\n vendor: claim.vendor,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n declared: true,\n hasToken: true,\n tokenExpiresAt: claim.expiresAt ?? null,\n },\n})\n\nexport const createIdentityStore = () => {\n let presented: PresentedIdentity | null = null\n\n return {\n present(input: PresentIdentityOptions): PresentedIdentity {\n const parsed = IdentityClaim.safeParse(input)\n if (!parsed.success) {\n throw new AgentronicsError(\n 'invalid_api_key',\n `Invalid identity claim: ${parsed.error.issues[0]?.message ?? 'unknown'}`\n )\n }\n const next: PresentedIdentity = {\n claim: parsed.data,\n identity: buildIdentity(parsed.data),\n }\n presented = next\n return next\n },\n\n clear() {\n presented = null\n },\n\n /** Return the presented identity if it outranks the supplied detection. */\n preferOver(detected: AgentIdentity | null): AgentIdentity | null {\n if (!presented) return detected\n if (!detected) return presented.identity\n return isHigherTrust(presented.identity.trust, detected.trust)\n ? presented.identity\n : detected\n },\n\n snapshot(): PresentedIdentity | null {\n return presented\n },\n }\n}\n\nexport type IdentityStore = ReturnType<typeof createIdentityStore>\n","import { TRUST_RANK, type TrustLevel } from '@agentronics/protocol'\n\nexport interface TrustDerivationInput {\n detected?: boolean\n declared?: boolean\n verified?: boolean\n linked?: boolean\n}\n\nexport const deriveTrustLevel = ({\n detected,\n declared,\n verified,\n linked,\n}: TrustDerivationInput): TrustLevel => {\n if (linked) return 'linked'\n if (verified) return 'verified'\n if (declared) return 'declared'\n if (detected) return 'detected'\n return 'detected'\n}\n\nexport const highestTrust = <T extends { trust: TrustLevel }>(identities: T[]): T | null => {\n let best: T | null = null\n for (const identity of identities) {\n if (!best || TRUST_RANK[identity.trust] > TRUST_RANK[best.trust]) best = identity\n }\n return best\n}\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\nexport const bearer = (): AuthMethod => ({\n name: 'bearer',\n async authenticate(input, context) {\n if (!input.bearerToken) return null\n const verified = await context.verifyToken?.('bearer', input.bearerToken)\n return {\n class: input.classHint ?? 'dom',\n trust: verified?.trust ?? 'verified',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'bearer',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: { bearer: true, verifiedRemotely: Boolean(verified) },\n }\n },\n})\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport type { AuthMethod } from '../engine.js'\n\nexport const detectionAsAuth = (): AuthMethod => ({\n name: 'detection',\n async authenticate(input) {\n return input.detected ?? null\n },\n})\n\nexport const cloneDetectedIdentity = (identity: AgentIdentity): AgentIdentity => ({\n ...identity,\n signals: { ...identity.signals },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\nexport const extensionToken = (): AuthMethod => ({\n name: 'extensionToken',\n async authenticate(input, context) {\n if (!input.extensionToken) return null\n const verified = await context.verifyToken?.('extensionToken', input.extensionToken)\n return {\n class: 'dom',\n trust: verified?.trust ?? 'verified',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'browser-extension',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: { extensionToken: true, verifiedRemotely: Boolean(verified) },\n }\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\n// mTLS via x-forwarded-client-cert (XFCC). Browser builds never trigger\n// this — JavaScript cannot inspect its own TLS state. Node companions\n// forward the XFCC header value verbatim and the gateway parses + chain-\n// validates against the site's registered roots (D2 policy applies for\n// multi-entry headers). If the XFCC URI SAN carries a `spiffe://` value\n// it is lifted into `signals.spiffeId` so dashboard pivots can correlate\n// X.509-SVID traffic with JWT-SVID traffic from the same workload.\nexport const mtls = (): AuthMethod => ({\n name: 'mtls',\n async authenticate(input, context) {\n if (!input.xfccHeader) return null\n const verified = await context.verifyToken?.('mtls', input.xfccHeader)\n return {\n class: input.classHint ?? 'webmcp',\n trust: verified?.trust ?? 'verified',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'mtls',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n mtls: true,\n subject: verified?.subject ?? null,\n verifiedRemotely: Boolean(verified),\n ...(verified?.signals ?? {}),\n },\n }\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\nexport const oauth2 = (): AuthMethod => ({\n name: 'oauth2',\n async authenticate(input, context) {\n if (!input.oauth2AccessToken) return null\n const verified = await context.verifyToken?.('oauth2', input.oauth2AccessToken)\n return {\n class: input.classHint ?? 'webmcp',\n trust: input.oauth2Subject ? 'linked' : verified?.trust ?? 'verified',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'oauth2',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n oauth2: true,\n subject: input.oauth2Subject ?? null,\n verifiedRemotely: Boolean(verified),\n },\n }\n },\n})\n","import {\n IdentityClaim,\n type AgentIdentity,\n type IdentityClaim as IdentityClaimRecord,\n} from '@agentronics/protocol'\nimport type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from '../../version.js'\n\nconst identityFromClaim = (claim: IdentityClaimRecord): AgentIdentity => ({\n class: claim.class,\n trust: 'declared',\n confidence: 1,\n vendor: claim.vendor,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n declared: true,\n hasToken: true,\n tokenExpiresAt: claim.expiresAt ?? null,\n },\n})\n\nexport const selfDeclaration = (): AuthMethod => ({\n name: 'selfDeclaration',\n async authenticate(input) {\n if (!input.declaration) return null\n return identityFromClaim(IdentityClaim.parse(input.declaration))\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\nexport const sessionLink = (): AuthMethod => ({\n name: 'sessionLink',\n async authenticate(input, context) {\n if (!input.sessionLinkToken) return null\n const verified = await context.verifyToken?.('sessionLink', input.sessionLinkToken)\n return {\n class: input.classHint ?? 'screenshot',\n trust: input.linkedUserId ? 'linked' : verified?.trust ?? 'verified',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'session-link',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n sessionLink: true,\n linkedUserId: input.linkedUserId ?? null,\n verifiedRemotely: Boolean(verified),\n },\n }\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\n// Workforce SSO via OIDC ID tokens. Browser/Node SDKs forward the ID\n// token to the gateway's POST /v1/verify/sso route, which validates the\n// JWT signature + claims against the customer-configured IdP discovery\n// document. SAML is intentionally out of scope for v1.\nexport const sso = (): AuthMethod => ({\n name: 'sso',\n async authenticate(input, context) {\n if (!input.ssoIdToken) return null\n const verified = await context.verifyToken?.('sso', input.ssoIdToken)\n return {\n class: input.classHint ?? 'dom',\n trust: verified?.trust ?? 'verified',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'sso',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n sso: true,\n subject: verified?.subject ?? null,\n verifiedRemotely: Boolean(verified),\n ...(verified?.signals ?? {}),\n },\n }\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\n// SPIFFE JWT-SVID verification. The gateway validates against the site's\n// configured SPIFFE Bundle (JWKS with `use: \"jwt-svid\"`) and returns the\n// SPIFFE ID as `verified.subject`. When the trust domain matches one of\n// the customer-configured Google trust domains (D1), the verifier sets\n// `vendor: 'google'` so we surface `googleAgent: true` and the engine\n// emits `protocol: 'google-agent'` on the trace instead of 'spiffe'.\nexport const spiffe = (): AuthMethod => ({\n name: 'spiffe',\n async authenticate(input, context) {\n if (!input.spiffeJwt) return null\n const verified = await context.verifyToken?.('spiffe', input.spiffeJwt)\n const isGoogleFlavor = verified?.vendor === 'google'\n return {\n class: input.classHint ?? 'webmcp',\n trust: verified?.trust ?? 'verified',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'spiffe',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n spiffe: true,\n spiffeId: verified?.subject ?? null,\n subject: verified?.subject ?? null,\n verifiedRemotely: Boolean(verified),\n ...(isGoogleFlavor ? { googleAgent: true } : {}),\n ...(verified?.signals ?? {}),\n },\n }\n },\n})\n","import { AgentClass } from '@agentronics/protocol'\nimport { SDK_VERSION } from \"../../version.js\"\nimport type { AuthMethod } from '../engine.js'\n\nexport const xAgentHeader = (): AuthMethod => ({\n name: 'xAgentHeader',\n async authenticate(input) {\n if (!input.xAgentHeader) return null\n const [vendor = 'x-agent', rawClass = 'dom', proof] = input.xAgentHeader.split(';')\n const parsedClass = AgentClass.safeParse(rawClass)\n\n return {\n class: parsedClass.success ? parsedClass.data : 'dom',\n trust: proof ? 'verified' : 'declared',\n confidence: proof ? 1 : 0.8,\n vendor,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: { xAgentHeader: true, hasProof: Boolean(proof) },\n }\n },\n})\n","import type {\n AgentClass,\n AgentIdentity,\n AuthProtocol,\n IdentityClaim,\n VerificationResult,\n} from '@agentronics/protocol'\nimport type { TraceInput } from '../observability/tracer.js'\nimport { highestTrust } from './trustLevel.js'\nimport { bearer } from './methods/bearer.js'\nimport { detectionAsAuth } from './methods/detectionAsAuth.js'\nimport { extensionToken } from './methods/extensionToken.js'\nimport { mtls } from './methods/mtls.js'\nimport { oauth2 } from './methods/oauth2.js'\nimport { selfDeclaration } from './methods/selfDeclaration.js'\nimport { sessionLink } from './methods/sessionLink.js'\nimport { sso } from './methods/sso.js'\nimport { spiffe } from './methods/spiffe.js'\nimport { xAgentHeader } from './methods/xAgentHeader.js'\n\nexport type AuthMethodName =\n | 'detection'\n | 'selfDeclaration'\n | 'bearer'\n | 'xAgentHeader'\n | 'extensionToken'\n | 'sessionLink'\n | 'oauth2'\n | 'sso'\n | 'spiffe'\n | 'mtls'\n\nexport interface AuthInput {\n detected?: AgentIdentity | null\n declaration?: IdentityClaim\n bearerToken?: string\n xAgentHeader?: string\n extensionToken?: string\n sessionLinkToken?: string\n linkedUserId?: string\n oauth2AccessToken?: string\n oauth2Subject?: string\n ssoIdToken?: string\n spiffeJwt?: string\n xfccHeader?: string\n vendorHint?: string\n classHint?: AgentClass\n}\n\nexport interface AuthContext {\n verifyToken?: (\n method: Exclude<AuthMethodName, 'detection' | 'selfDeclaration' | 'xAgentHeader'>,\n token: string\n ) => Promise<VerificationResult | null>\n}\n\nexport interface AuthMethod {\n name: AuthMethodName\n authenticate(input: AuthInput, context: AuthContext): Promise<AgentIdentity | null>\n}\n\nexport interface AuthEngineOptions {\n methods?: AuthMethod[]\n context?: AuthContext\n onTrace?: (input: TraceInput) => void\n}\n\nexport const defaultAuthMethods = (): AuthMethod[] => [\n detectionAsAuth(),\n selfDeclaration(),\n bearer(),\n xAgentHeader(),\n extensionToken(),\n sessionLink(),\n oauth2(),\n sso(),\n spiffe(),\n mtls(),\n]\n\n// Method-name → dashboard-facing AuthProtocol label. The spiffe method\n// can override its emitted label to 'google-agent' by setting\n// `signals.googleAgent = true` (see methods/spiffe.ts) — that branch is\n// handled in resolveTraceProtocol() below.\nconst METHOD_TO_PROTOCOL: Record<AuthMethodName, AuthProtocol> = {\n detection: 'detection',\n selfDeclaration: 'declaration',\n bearer: 'bearer',\n xAgentHeader: 'x-agent-header',\n extensionToken: 'extension',\n sessionLink: 'session-link',\n oauth2: 'oauth2',\n sso: 'sso',\n spiffe: 'spiffe',\n mtls: 'mtls',\n}\n\nconst resolveTraceProtocol = (\n methodName: AuthMethodName,\n identity: AgentIdentity\n): AuthProtocol => {\n if (methodName === 'spiffe' && identity.signals?.googleAgent === true) {\n return 'google-agent'\n }\n return METHOD_TO_PROTOCOL[methodName]\n}\n\nexport const createAuthEngine = ({\n methods = defaultAuthMethods(),\n context = {},\n onTrace,\n}: AuthEngineOptions = {}) => ({\n async authenticate(input: AuthInput): Promise<AgentIdentity | null> {\n const identities: Array<{ method: AuthMethodName; identity: AgentIdentity }> = []\n const methodResults: Record<string, boolean> = {}\n\n for (const method of methods) {\n const identity = await method.authenticate(input, context)\n methodResults[method.name] = Boolean(identity)\n if (identity) identities.push({ method: method.name, identity })\n }\n\n const winner = highestTrust(identities.map((entry) => entry.identity))\n const winnerEntry = winner\n ? identities.find((entry) => entry.identity === winner)\n : undefined\n const protocol = winnerEntry\n ? resolveTraceProtocol(winnerEntry.method, winnerEntry.identity)\n : undefined\n const subject =\n typeof winner?.signals?.subject === 'string' ? winner.signals.subject : undefined\n\n const trace: TraceInput = {\n type: winner ? 'auth.identity_presented' : 'sdk.error',\n agent: winner,\n outcome: winner ? 'success' : 'error',\n metadata: {\n methods: methodResults,\n ...(protocol ? { protocol } : {}),\n ...(subject ? { subject } : {}),\n },\n }\n if (!winner) trace.error = 'No auth method produced an identity.'\n onTrace?.(trace)\n return winner\n },\n\n methods(): AuthMethodName[] {\n return methods.map((method) => method.name)\n },\n})\n\nexport type AuthEngine = ReturnType<typeof createAuthEngine>\n","import type { AgentIdentity } from '@agentronics/protocol'\n\nexport interface AgentContextSnapshot {\n identity: AgentIdentity | null\n source: 'detect' | 'declare' | 'authenticate' | 'cleared' | 'initial'\n updatedAt: string | null\n}\n\nexport type AgentContextListener = (snapshot: AgentContextSnapshot) => void\n\nconst INITIAL: AgentContextSnapshot = {\n identity: null,\n source: 'initial',\n updatedAt: null,\n}\n\nexport const createAgentContextStore = () => {\n let state: AgentContextSnapshot = INITIAL\n const listeners = new Set<AgentContextListener>()\n\n const notify = () => {\n if (listeners.size === 0) return\n listeners.forEach((listener) => listener(state))\n }\n\n return {\n snapshot(): AgentContextSnapshot {\n return state\n },\n set(identity: AgentIdentity | null, source: AgentContextSnapshot['source']) {\n state = { identity, source, updatedAt: new Date().toISOString() }\n notify()\n },\n subscribe(listener: AgentContextListener): () => void {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n }\n}\n\nexport type AgentContextStore = ReturnType<typeof createAgentContextStore>\n","export interface RateLimitRule {\n max: number\n windowSeconds: number\n}\n\nexport interface RateLimitResult {\n allowed: boolean\n remaining: number\n resetAt: number\n}\n\ninterface Bucket {\n count: number\n resetAt: number\n}\n\nexport interface RateLimiterStorage {\n read(key: string): string | null\n write(key: string, value: string): void\n}\n\nconst memoryStorage = (): RateLimiterStorage => {\n const map = new Map<string, string>()\n return {\n read: (key) => map.get(key) ?? null,\n write: (key, value) => {\n map.set(key, value)\n },\n }\n}\n\nconst browserStorage = (): RateLimiterStorage => {\n if (typeof window === 'undefined' || !window.localStorage) return memoryStorage()\n return {\n read: (key) => {\n try {\n return window.localStorage.getItem(key)\n } catch {\n return null\n }\n },\n write: (key, value) => {\n try {\n window.localStorage.setItem(key, value)\n } catch {\n // Quota/storage failures should not crash policy evaluation.\n }\n },\n }\n}\n\nconst decode = (raw: string | null): Bucket | null => {\n if (!raw) return null\n try {\n const parsed = JSON.parse(raw) as Bucket\n if (\n typeof parsed === 'object' &&\n parsed !== null &&\n Number.isFinite(parsed.count) &&\n Number.isFinite(parsed.resetAt)\n ) {\n return parsed\n }\n } catch {\n return null\n }\n return null\n}\n\nexport const createRateLimiter = (storage: RateLimiterStorage = browserStorage()) => ({\n consume(key: string, rule: RateLimitRule, now = Date.now()): RateLimitResult {\n const storageKey = `agtx:rate:${key}`\n const existing = decode(storage.read(storageKey))\n const resetAt =\n existing && existing.resetAt > now ? existing.resetAt : now + rule.windowSeconds * 1000\n const count = existing && existing.resetAt > now ? existing.count + 1 : 1\n storage.write(storageKey, JSON.stringify({ count, resetAt }))\n\n return {\n allowed: count <= rule.max,\n remaining: Math.max(0, rule.max - count),\n resetAt,\n }\n },\n})\n\nexport type RateLimiter = ReturnType<typeof createRateLimiter>\n","import {\n PolicyRule,\n TRUST_RANK,\n type AgentIdentity,\n type PolicyDecision,\n type PolicyEvaluation,\n type PolicyRule as PolicyRuleType,\n} from '@agentronics/protocol'\nimport { createRateLimiter, type RateLimiter } from './rateLimiter.js'\n\nconst matchTool = (pattern: string, tool: string): boolean => {\n if (pattern === '*' || pattern === tool) return true\n if (!pattern.includes('*')) return false\n const regex = new RegExp('^' + pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '.*') + '$')\n return regex.test(tool)\n}\n\nconst meetsTrust = (identity: AgentIdentity | null, rule: PolicyRuleType): boolean => {\n const have = identity ? TRUST_RANK[identity.trust] : -1\n const need = TRUST_RANK[rule.minTrust]\n return have >= need\n}\n\nconst meetsClass = (identity: AgentIdentity | null, rule: PolicyRuleType): boolean => {\n if (rule.allowedClasses.length === 0) return true\n if (!identity) return false\n return rule.allowedClasses.includes(identity.class)\n}\n\nconst DEFAULT_DECISION: PolicyDecision = 'review'\n\nexport interface EvaluateInput {\n tool: string\n identity: AgentIdentity | null\n}\n\nconst rateLimitKey = (tool: string, identity: AgentIdentity | null): string => {\n const classPart = identity?.class ?? 'unknown'\n const vendorPart = identity?.vendor ?? 'unknown'\n const trustPart = identity?.trust ?? 'none'\n return `${tool}:${classPart}:${vendorPart}:${trustPart}`\n}\n\nexport interface PolicyEngineOptions {\n rateLimiter?: RateLimiter\n}\n\nexport const createPolicyEngine = (\n initial: PolicyRuleType[] = [],\n options: PolicyEngineOptions = {}\n) => {\n let rules: PolicyRuleType[] = initial.map((rule) => PolicyRule.parse(rule))\n const rateLimiter = options.rateLimiter ?? createRateLimiter()\n\n return {\n set(next: PolicyRuleType[]) {\n rules = next.map((rule) => PolicyRule.parse(rule))\n },\n\n list(): PolicyRuleType[] {\n return [...rules]\n },\n\n evaluate({ tool, identity }: EvaluateInput): PolicyEvaluation {\n for (const rule of rules) {\n if (!matchTool(rule.tool, tool)) continue\n if (!meetsTrust(identity, rule)) {\n return {\n decision: 'deny',\n ruleId: rule.id,\n reason: `Rule \"${rule.id}\" requires trust >= ${rule.minTrust}.`,\n }\n }\n if (!meetsClass(identity, rule)) {\n return {\n decision: 'deny',\n ruleId: rule.id,\n reason: `Rule \"${rule.id}\" restricts to classes: ${rule.allowedClasses.join(', ')}.`,\n }\n }\n if (rule.rateLimit) {\n const rate = rateLimiter.consume(rateLimitKey(tool, identity), rule.rateLimit)\n if (!rate.allowed) {\n return {\n decision: 'deny',\n ruleId: rule.id,\n reason: `Rule \"${rule.id}\" rate limit exceeded. Resets at ${new Date(rate.resetAt).toISOString()}.`,\n }\n }\n }\n return {\n decision: rule.decision,\n ruleId: rule.id,\n reason: `Matched rule \"${rule.id}\".`,\n }\n }\n return {\n decision: DEFAULT_DECISION,\n ruleId: null,\n reason: `No rule matched tool \"${tool}\". Falling back to \"${DEFAULT_DECISION}\".`,\n }\n },\n }\n}\n\nexport type PolicyEngine = ReturnType<typeof createPolicyEngine>\n","import { PolicyRule, type PolicyRule as PolicyRuleRecord } from '@agentronics/protocol'\n\nexport interface PolicyCacheOptions {\n gatewayUrl: string\n siteId: string\n publishableKey: string\n fetcher?: typeof fetch\n}\n\nexport interface PolicyCacheSnapshot {\n policies: PolicyRuleRecord[]\n etag: string | null\n}\n\nexport const createPolicyCache = ({\n gatewayUrl,\n siteId,\n publishableKey,\n fetcher = fetch,\n}: PolicyCacheOptions) => {\n let snapshot: PolicyCacheSnapshot = { policies: [], etag: null }\n\n return {\n snapshot(): PolicyCacheSnapshot {\n return {\n policies: [...snapshot.policies],\n etag: snapshot.etag,\n }\n },\n\n async sync(): Promise<PolicyCacheSnapshot> {\n const response = await fetcher(\n `${gatewayUrl.replace(/\\/$/, '')}/v1/sites/${encodeURIComponent(siteId)}/policies`,\n {\n headers: {\n authorization: `Bearer ${publishableKey}`,\n ...(snapshot.etag ? { 'if-none-match': snapshot.etag } : {}),\n },\n }\n )\n if (response.status === 304) return this.snapshot()\n if (!response.ok) throw new Error(`Policy sync failed with status ${response.status}.`)\n\n const body = (await response.json()) as { policies?: unknown }\n const policies = PolicyRule.array().parse(body.policies ?? [])\n snapshot = {\n policies,\n etag: response.headers.get('etag'),\n }\n return this.snapshot()\n },\n }\n}\n\nexport type PolicyCache = ReturnType<typeof createPolicyCache>\n","export interface DenyOverlayOptions {\n message?: string\n durationMs?: number\n documentRef?: Document\n}\n\nexport const showDenyOverlay = ({\n message = 'Agent action blocked by site policy.',\n durationMs = 2400,\n documentRef = typeof document === 'undefined' ? undefined : document,\n}: DenyOverlayOptions = {}) => {\n if (!documentRef?.body) return null\n\n const node = documentRef.createElement('div')\n node.setAttribute('role', 'status')\n node.setAttribute('data-agentronics-deny-overlay', 'true')\n node.textContent = message\n Object.assign(node.style, {\n position: 'fixed',\n zIndex: '2147483647',\n left: '50%',\n bottom: '24px',\n transform: 'translateX(-50%)',\n maxWidth: 'min(520px, calc(100vw - 32px))',\n padding: '12px 16px',\n borderRadius: '8px',\n background: '#07091A',\n color: '#F4F4F5',\n border: '1px solid #6366F1',\n boxShadow: '0 20px 48px -16px rgba(7,9,26,0.55)',\n font: \"13px/1.45 'Space Mono', ui-monospace, SFMono-Regular, Menlo, monospace\",\n })\n\n documentRef.body.appendChild(node)\n window.setTimeout(() => node.remove(), durationMs)\n return node\n}\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { showDenyOverlay } from './overlay.js'\nimport type { PolicyEngine } from './engine.js'\n\nexport interface DomEnforcerOptions {\n policyEngine: PolicyEngine\n getIdentity: () => AgentIdentity | null | Promise<AgentIdentity | null>\n documentRef?: Document\n selector?: string\n}\n\nexport const installDomEnforcer = ({\n policyEngine,\n getIdentity,\n documentRef = typeof document === 'undefined' ? undefined : document,\n selector = '[data-agentronics-tool]',\n}: DomEnforcerOptions) => {\n if (!documentRef) return { uninstall: () => undefined }\n\n const handler = (event: Event) => {\n const target = event.target instanceof Element ? event.target.closest(selector) : null\n if (!(target instanceof HTMLElement)) return\n const tool = target.dataset.agentronicsTool\n if (!tool) return\n\n void Promise.resolve(getIdentity()).then((identity) => {\n const evaluation = policyEngine.evaluate({ tool, identity })\n if (evaluation.decision !== 'deny') return\n event.preventDefault()\n event.stopPropagation()\n showDenyOverlay({ message: evaluation.reason, documentRef })\n })\n }\n\n documentRef.addEventListener('click', handler, true)\n return {\n uninstall: () => documentRef.removeEventListener('click', handler, true),\n }\n}\n","import type { MemoryScope } from '@agentronics/protocol'\n\nexport interface ScopeBackend {\n read(key: string): string | null\n write(key: string, value: string): void\n remove(key: string): void\n keys(): string[]\n}\n\nconst inMemoryBackend = (): ScopeBackend => {\n const store = new Map<string, string>()\n return {\n read: (key) => store.get(key) ?? null,\n write: (key, value) => {\n store.set(key, value)\n },\n remove: (key) => {\n store.delete(key)\n },\n keys: () => [...store.keys()],\n }\n}\n\nconst webStorageBackend = (storage: Storage, prefix: string): ScopeBackend => ({\n read: (key) => {\n try {\n return storage.getItem(prefix + key)\n } catch {\n return null\n }\n },\n write: (key, value) => {\n try {\n storage.setItem(prefix + key, value)\n } catch {\n // quota exceeded or storage disabled — fail silently, the in-memory fallback is acceptable\n }\n },\n remove: (key) => {\n try {\n storage.removeItem(prefix + key)\n } catch {\n // ignore\n }\n },\n keys: () => {\n const out: string[] = []\n try {\n for (let i = 0; i < storage.length; i++) {\n const k = storage.key(i)\n if (k && k.startsWith(prefix)) out.push(k.slice(prefix.length))\n }\n } catch {\n // ignore\n }\n return out\n },\n})\n\nconst PREFIX = 'agtx:'\n\nexport const createBackends = (): Record<MemoryScope, ScopeBackend> => {\n const hasWindow = typeof window !== 'undefined'\n const session =\n hasWindow && typeof window.sessionStorage !== 'undefined'\n ? webStorageBackend(window.sessionStorage, PREFIX + 'session:')\n : inMemoryBackend()\n const user =\n hasWindow && typeof window.localStorage !== 'undefined'\n ? webStorageBackend(window.localStorage, PREFIX + 'user:')\n : inMemoryBackend()\n return {\n session,\n user,\n org: inMemoryBackend(),\n }\n}\n","import { MemoryEntry, type MemoryScope } from '@agentronics/protocol'\nimport type { TraceInput } from '../observability/tracer.js'\nimport { createBackends, type ScopeBackend } from './storage.js'\n\ninterface StoredRecord {\n value: unknown\n expiresAt: number | null\n updatedAt: string\n}\n\nconst isExpired = (record: StoredRecord, now: number): boolean =>\n record.expiresAt !== null && record.expiresAt <= now\n\nconst decode = (raw: string | null): StoredRecord | null => {\n if (!raw) return null\n try {\n const parsed = JSON.parse(raw) as StoredRecord\n if (typeof parsed !== 'object' || parsed === null) return null\n return parsed\n } catch {\n return null\n }\n}\n\nconst encode = (record: StoredRecord): string => JSON.stringify(record)\n\nexport interface MemoryGetOptions {\n scope?: MemoryScope\n}\n\nexport interface MemorySetOptions {\n scope?: MemoryScope\n ttlSeconds?: number\n}\n\nexport interface MemoryStoreOptions {\n onTrace?: (input: TraceInput) => void\n}\n\nexport const createMemoryStore = (options: MemoryStoreOptions = {}) => {\n const backends: Record<MemoryScope, ScopeBackend> = createBackends()\n const emit = (input: TraceInput) => {\n options.onTrace?.(input)\n }\n\n const get = (key: string, options: MemoryGetOptions = {}): unknown => {\n const scope = options.scope ?? 'session'\n const backend = backends[scope]\n const record = decode(backend.read(key))\n if (!record) {\n emit({ type: 'memory.accessed', metadata: { operation: 'get', key, scope, hit: false } })\n return undefined\n }\n if (isExpired(record, Date.now())) {\n backend.remove(key)\n emit({ type: 'memory.accessed', metadata: { operation: 'get', key, scope, hit: false, expired: true } })\n return undefined\n }\n emit({ type: 'memory.accessed', metadata: { operation: 'get', key, scope, hit: true } })\n return record.value\n }\n\n const set = (key: string, value: unknown, options: MemorySetOptions = {}): MemoryEntry => {\n const scope = options.scope ?? 'session'\n const ttl = options.ttlSeconds ?? null\n const now = Date.now()\n const record: StoredRecord = {\n value,\n expiresAt: ttl === null ? null : now + ttl * 1000,\n updatedAt: new Date(now).toISOString(),\n }\n backends[scope].write(key, encode(record))\n emit({ type: 'memory.updated', metadata: { operation: 'set', key, scope, ttlSeconds: ttl } })\n return MemoryEntry.parse({\n key,\n value,\n scope,\n ttlSeconds: ttl,\n updatedAt: record.updatedAt,\n })\n }\n\n const remove = (key: string, options: MemoryGetOptions = {}) => {\n const scope = options.scope ?? 'session'\n backends[scope].remove(key)\n emit({ type: 'memory.updated', metadata: { operation: 'remove', key, scope } })\n }\n\n const list = (options: MemoryGetOptions = {}): MemoryEntry[] => {\n const scope = options.scope ?? 'session'\n const backend = backends[scope]\n const now = Date.now()\n const out: MemoryEntry[] = []\n for (const key of backend.keys()) {\n const record = decode(backend.read(key))\n if (!record) continue\n if (isExpired(record, now)) {\n backend.remove(key)\n continue\n }\n out.push(\n MemoryEntry.parse({\n key,\n value: record.value,\n scope,\n ttlSeconds:\n record.expiresAt === null ? null : Math.max(0, Math.round((record.expiresAt - now) / 1000)),\n updatedAt: record.updatedAt,\n })\n )\n }\n emit({ type: 'memory.accessed', metadata: { operation: 'list', scope, count: out.length } })\n return out\n }\n\n const clear = (options: MemoryGetOptions = {}) => {\n const scope = options.scope ?? 'session'\n const backend = backends[scope]\n const count = backend.keys().length\n for (const key of backend.keys()) backend.remove(key)\n emit({ type: 'memory.updated', metadata: { operation: 'clear', scope, count } })\n }\n\n return { get, set, remove, list, clear }\n}\n\nexport type MemoryStore = ReturnType<typeof createMemoryStore>\n","import {\n SITE_MEMORY_DEFAULT,\n SiteMemory as SiteMemorySchema,\n SiteMemoryPageContext,\n type SiteMemory,\n} from '@agentronics/protocol'\nimport type { TraceInput } from '../observability/tracer.js'\n\nexport interface SiteMemoryStoreOptions {\n initial?: Partial<SiteMemory>\n onTrace?: (input: TraceInput) => void\n}\n\nexport interface ProvideForPageInput {\n path: string\n payload: Record<string, unknown>\n}\n\nconst cloneSiteMemory = (memory: SiteMemory): SiteMemory =>\n // Round-trip via the schema so callers always receive a validated, defaulted snapshot.\n SiteMemorySchema.parse(JSON.parse(JSON.stringify(memory)))\n\nconst stamp = (memory: SiteMemory): SiteMemory => ({\n ...memory,\n updatedAt: new Date().toISOString(),\n})\n\nexport type SiteMemoryListener = (snapshot: SiteMemory) => void\n\nexport const createSiteMemoryStore = (options: SiteMemoryStoreOptions = {}) => {\n let state: SiteMemory = SiteMemorySchema.parse({\n ...SITE_MEMORY_DEFAULT,\n ...(options.initial ?? {}),\n })\n let cachedSnapshot: SiteMemory | null = null\n const listeners = new Set<SiteMemoryListener>()\n const emit = (input: TraceInput) => {\n options.onTrace?.(input)\n }\n const invalidate = () => {\n cachedSnapshot = null\n }\n const notify = () => {\n if (listeners.size === 0) return\n const snap = cloneSiteMemory(state)\n cachedSnapshot = snap\n listeners.forEach((listener) => listener(snap))\n }\n\n const provide = (next: Partial<SiteMemory>): SiteMemory => {\n const merged = SiteMemorySchema.parse({\n ...state,\n ...next,\n // Workflows/policies/uiGuidance/pageContexts merge by key so partial provides do not nuke siblings.\n workflows: { ...state.workflows, ...(next.workflows ?? {}) },\n policies: { ...state.policies, ...(next.policies ?? {}) },\n uiGuidance: { ...state.uiGuidance, ...(next.uiGuidance ?? {}) },\n pageContexts: { ...state.pageContexts, ...(next.pageContexts ?? {}) },\n })\n state = stamp(merged)\n invalidate()\n emit({\n type: 'memory.updated',\n metadata: { kind: 'site', operation: 'provide', keys: Object.keys(next) },\n })\n notify()\n return snapshot()\n }\n\n const update = (path: string, value: unknown): SiteMemory => {\n const parts = path.split('.').filter(Boolean)\n if (parts.length === 0) {\n throw new Error('siteMemory.update() requires a non-empty dot-path.')\n }\n const next = JSON.parse(JSON.stringify(state)) as Record<string, unknown>\n let cursor: Record<string, unknown> = next\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]!\n const existing = cursor[key]\n if (typeof existing !== 'object' || existing === null || Array.isArray(existing)) {\n cursor[key] = {}\n }\n cursor = cursor[key] as Record<string, unknown>\n }\n cursor[parts[parts.length - 1]!] = value\n state = stamp(SiteMemorySchema.parse(next))\n invalidate()\n emit({ type: 'memory.updated', metadata: { kind: 'site', operation: 'update', path } })\n notify()\n return snapshot()\n }\n\n const provideForPage = (input: ProvideForPageInput): SiteMemoryPageContext => {\n const context = SiteMemoryPageContext.parse({\n path: input.path,\n payload: input.payload,\n updatedAt: new Date().toISOString(),\n })\n state = stamp({\n ...state,\n pageContexts: { ...state.pageContexts, [input.path]: context },\n })\n invalidate()\n emit({\n type: 'memory.updated',\n metadata: { kind: 'site', operation: 'provideForPage', path: input.path },\n })\n notify()\n return { ...context, payload: { ...context.payload } }\n }\n\n const snapshot = (): SiteMemory => {\n if (!cachedSnapshot) cachedSnapshot = cloneSiteMemory(state)\n return cachedSnapshot\n }\n\n const get = (path?: string): unknown => {\n emit({\n type: 'memory.accessed',\n metadata: { kind: 'site', operation: path ? 'get' : 'snapshot', path: path ?? null },\n })\n if (!path) return cloneSiteMemory(state)\n const parts = path.split('.').filter(Boolean)\n let cursor: unknown = state\n for (const key of parts) {\n if (typeof cursor !== 'object' || cursor === null) return undefined\n cursor = (cursor as Record<string, unknown>)[key]\n }\n return cursor\n }\n\n const getForPage = (path: string): SiteMemoryPageContext | null => {\n emit({\n type: 'memory.accessed',\n metadata: { kind: 'site', operation: 'getForPage', path },\n })\n const found = state.pageContexts[path]\n return found ? { ...found, payload: { ...found.payload } } : null\n }\n\n const replace = (next: SiteMemory): SiteMemory => {\n state = stamp(SiteMemorySchema.parse(next))\n invalidate()\n notify()\n return snapshot()\n }\n\n const subscribe = (listener: SiteMemoryListener): (() => void) => {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n }\n\n return { provide, update, provideForPage, snapshot, get, getForPage, replace, subscribe }\n}\n\nexport type SiteMemoryStore = ReturnType<typeof createSiteMemoryStore>\n","import { SiteMemory as SiteMemorySchema, type SiteMemory } from '@agentronics/protocol'\n\nexport interface MemoryCacheOptions {\n gatewayUrl: string\n siteId: string\n publishableKey: string\n fetcher?: typeof fetch\n}\n\nexport interface MemoryCacheSnapshot {\n memory: SiteMemory | null\n etag: string | null\n}\n\nexport const createMemoryCache = ({\n gatewayUrl,\n siteId,\n publishableKey,\n fetcher = fetch,\n}: MemoryCacheOptions) => {\n let snapshot: MemoryCacheSnapshot = { memory: null, etag: null }\n\n return {\n snapshot(): MemoryCacheSnapshot {\n return {\n memory: snapshot.memory ? SiteMemorySchema.parse(snapshot.memory) : null,\n etag: snapshot.etag,\n }\n },\n\n async sync(): Promise<MemoryCacheSnapshot> {\n const response = await fetcher(\n `${gatewayUrl.replace(/\\/$/, '')}/v1/sites/${encodeURIComponent(siteId)}/memory`,\n {\n headers: {\n authorization: `Bearer ${publishableKey}`,\n ...(snapshot.etag ? { 'if-none-match': snapshot.etag } : {}),\n },\n }\n )\n if (response.status === 304) return this.snapshot()\n if (!response.ok) throw new Error(`Memory sync failed with status ${response.status}.`)\n\n const body = (await response.json()) as { memory?: unknown }\n const memory = SiteMemorySchema.parse(body.memory ?? {})\n snapshot = {\n memory,\n etag: response.headers.get('etag'),\n }\n return this.snapshot()\n },\n }\n}\n\nexport type MemoryCache = ReturnType<typeof createMemoryCache>\n","import type { SiteMemory } from '@agentronics/protocol'\n\nconst META_PREFIX = 'agent-context-'\nconst JSONLD_ID = 'agentronics-site-context'\n\nexport interface MetaTagsOptions {\n doc?: Document\n snapshot: SiteMemory\n schemaType?: string\n}\n\nconst safeJson = (value: unknown): string => {\n try {\n return JSON.stringify(value)\n } catch {\n return '{}'\n }\n}\n\nconst setMeta = (doc: Document, name: string, content: string) => {\n let tag = doc.querySelector<HTMLMetaElement>(`meta[name=\"${name}\"]`)\n if (!tag) {\n tag = doc.createElement('meta')\n tag.setAttribute('name', name)\n doc.head.appendChild(tag)\n }\n tag.setAttribute('content', content)\n}\n\nconst removeByName = (doc: Document, name: string) => {\n doc.querySelectorAll(`meta[name=\"${name}\"]`).forEach((node) => node.remove())\n}\n\nexport const installMetaTags = ({\n doc = typeof document === 'undefined' ? (null as unknown as Document) : document,\n snapshot,\n schemaType = 'WebSite',\n}: MetaTagsOptions): { uninstall: () => void } => {\n if (!doc) return { uninstall: () => {} }\n\n setMeta(doc, `${META_PREFIX}version`, snapshot.version)\n setMeta(doc, `${META_PREFIX}updated-at`, snapshot.updatedAt ?? new Date().toISOString())\n if (snapshot.siteMap?.navigation?.flow) {\n setMeta(doc, `${META_PREFIX}flow`, snapshot.siteMap.navigation.flow)\n }\n setMeta(doc, `${META_PREFIX}workflows`, Object.keys(snapshot.workflows).join(','))\n\n let script = doc.getElementById(JSONLD_ID) as HTMLScriptElement | null\n if (!script) {\n script = doc.createElement('script')\n script.type = 'application/ld+json'\n script.id = JSONLD_ID\n doc.head.appendChild(script)\n }\n script.textContent = safeJson({\n '@context': 'https://schema.org',\n '@type': schemaType,\n name: 'Agentronics Site Memory',\n agentronics: snapshot,\n })\n\n return {\n uninstall: () => {\n removeByName(doc, `${META_PREFIX}version`)\n removeByName(doc, `${META_PREFIX}updated-at`)\n removeByName(doc, `${META_PREFIX}flow`)\n removeByName(doc, `${META_PREFIX}workflows`)\n doc.getElementById(JSONLD_ID)?.remove()\n },\n }\n}\n","import type { SiteMemory } from '@agentronics/protocol'\n\nconst OVERLAY_ID = 'agentronics-memory-overlay'\n\nexport interface MemoryOverlayOptions {\n doc?: Document\n snapshot: SiteMemory\n hidden?: boolean\n}\n\nconst styles = (hidden: boolean): string => `\nposition: fixed;\nbottom: 16px;\nright: 16px;\nmax-width: 320px;\npadding: 10px 12px;\nbackground: rgba(17, 24, 39, 0.92);\ncolor: #f9fafb;\nfont: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace;\nborder-radius: 8px;\nz-index: 2147483647;\nopacity: ${hidden ? '0' : '1'};\npointer-events: ${hidden ? 'none' : 'auto'};\nbox-shadow: 0 12px 32px rgba(15, 23, 42, 0.35);\n`\n\nconst summarize = (snapshot: SiteMemory): string => {\n const pages = snapshot.siteMap?.pages?.length ?? 0\n const workflows = Object.keys(snapshot.workflows).length\n const ui = Object.keys(snapshot.uiGuidance).length\n return `Agentronics site memory · pages:${pages} · workflows:${workflows} · ui-hints:${ui}`\n}\n\nexport const installMemoryOverlay = ({\n doc = typeof document === 'undefined' ? (null as unknown as Document) : document,\n snapshot,\n hidden = false,\n}: MemoryOverlayOptions): { uninstall: () => void; refresh: (next: SiteMemory) => void } => {\n if (!doc) return { uninstall: () => {}, refresh: () => {} }\n\n let host = doc.getElementById(OVERLAY_ID) as HTMLDivElement | null\n if (!host) {\n host = doc.createElement('div')\n host.id = OVERLAY_ID\n host.setAttribute('role', 'note')\n host.setAttribute('aria-label', 'Agentronics site memory summary')\n host.setAttribute('data-agent-context', 'overlay')\n doc.body.appendChild(host)\n }\n host.setAttribute('style', styles(hidden))\n host.textContent = summarize(snapshot)\n\n return {\n uninstall: () => {\n host?.remove()\n },\n refresh: (next: SiteMemory) => {\n if (!host) return\n host.textContent = summarize(next)\n },\n }\n}\n","import { SiteMemory as SiteMemorySchema, type SiteMemory } from '@agentronics/protocol'\n\nexport const WELL_KNOWN_PATH = '/.well-known/agent-context.json'\n\nexport interface WellKnownClientOptions {\n origin?: string\n fetcher?: typeof fetch\n signal?: AbortSignal\n}\n\nexport const fetchWellKnownContext = async ({\n origin,\n fetcher = fetch,\n signal,\n}: WellKnownClientOptions = {}): Promise<SiteMemory | null> => {\n const target =\n (origin ? origin.replace(/\\/$/, '') : typeof window !== 'undefined' ? window.location.origin : '') +\n WELL_KNOWN_PATH\n if (!target.startsWith('http')) {\n return null\n }\n const fetchInit: RequestInit = { headers: { accept: 'application/json' } }\n if (signal !== undefined) fetchInit.signal = signal\n const response = await fetcher(target, fetchInit)\n if (!response.ok) {\n if (response.status === 404) return null\n throw new Error(`well-known agent-context fetch failed with status ${response.status}.`)\n }\n const payload = (await response.json()) as unknown\n return SiteMemorySchema.parse(payload)\n}\n\nexport interface ServeWellKnownOptions {\n snapshot: SiteMemory\n}\n\n/**\n * Returns a JSON string suitable for /.well-known/agent-context.json. Hosts proxy this\n * through their CDN/edge so any agent can fetch it with no SDK installed.\n */\nexport const serializeWellKnownContext = ({ snapshot }: ServeWellKnownOptions): string =>\n JSON.stringify(SiteMemorySchema.parse(snapshot))\n","import type { AgentIdentity, PolicyEvaluation, PolicyRule } from '@agentronics/protocol'\nimport type { TraceInput } from '../observability/tracer.js'\n\nexport interface GovernedTool<Input = unknown, Output = unknown> {\n name: string\n version?: string\n group?: string\n description?: string\n inputSchema?: Record<string, unknown>\n outputSchema?: Record<string, unknown>\n stage?: string\n authz?: Omit<PolicyRule, 'id' | 'tool'>\n rateLimit?: PolicyRule['rateLimit']\n execute: (input: Input, context: { identity: AgentIdentity | null }) => Promise<Output> | Output\n}\n\nexport interface ToolRegistryOptions {\n evaluate: (tool: string, options?: { identity?: AgentIdentity | null }) => Promise<PolicyEvaluation>\n setPolicies?: (rules: PolicyRule[]) => void\n listPolicies?: () => PolicyRule[]\n onTrace?: (input: TraceInput) => void\n /**\n * Resolves the ambient agent identity for `execute()` calls that don't pass\n * one explicitly. The SDK wires this to the agentContext snapshot so a\n * button-bound tool fires with the detected agent attached — without\n * forcing every consumer to thread identity through their click handlers.\n *\n * Semantics:\n * - `execute(name, input)` or `execute(name, input, undefined)` → resolver\n * - `execute(name, input, null)` → respected (caller wants anonymous attribution)\n * - `execute(name, input, identity)` → respected\n */\n identityResolver?: () => AgentIdentity | null\n}\n\nexport interface ToolRegistry {\n register(tool: GovernedTool): () => void\n unregister(name: string): void\n enable(name: string): void\n disable(name: string): void\n isEnabled(name: string): boolean\n list(options?: { includeDisabled?: boolean }): GovernedTool[]\n get(name: string): GovernedTool | undefined\n execute<Input, Output>(\n name: string,\n input: Input,\n identity?: AgentIdentity | null\n ): Promise<Output>\n}\n\nexport const createToolRegistry = ({\n evaluate,\n setPolicies,\n listPolicies,\n onTrace,\n identityResolver,\n}: ToolRegistryOptions): ToolRegistry => {\n const tools = new Map<string, GovernedTool>()\n const disabled = new Set<string>()\n\n const writePolicyFor = (tool: GovernedTool) => {\n if (!tool.authz || !setPolicies || !listPolicies) return\n const rule: PolicyRule = {\n id: `tool:${tool.name}`,\n tool: tool.name,\n ...tool.authz,\n rateLimit: tool.rateLimit ?? tool.authz.rateLimit,\n }\n setPolicies([...listPolicies().filter((item) => item.id !== rule.id), rule])\n }\n\n return {\n register(tool) {\n tools.set(tool.name, tool)\n disabled.delete(tool.name)\n writePolicyFor(tool)\n onTrace?.({\n type: 'tool.registered',\n tool: tool.name,\n metadata: {\n version: tool.version ?? null,\n group: tool.group ?? null,\n stage: tool.stage ?? null,\n },\n })\n return () => {\n tools.delete(tool.name)\n disabled.delete(tool.name)\n }\n },\n unregister(name) {\n tools.delete(name)\n disabled.delete(name)\n },\n enable(name) {\n if (!tools.has(name) || !disabled.has(name)) return\n disabled.delete(name)\n onTrace?.({\n type: 'tool.surfaced',\n tool: name,\n metadata: { state: 'enabled' },\n })\n },\n disable(name) {\n if (!tools.has(name) || disabled.has(name)) return\n disabled.add(name)\n onTrace?.({\n type: 'tool.surfaced',\n tool: name,\n metadata: { state: 'disabled' },\n })\n },\n isEnabled: (name) => tools.has(name) && !disabled.has(name),\n list({ includeDisabled = false } = {}) {\n const all = [...tools.values()]\n return includeDisabled ? all : all.filter((tool) => !disabled.has(tool.name))\n },\n get: (name) => tools.get(name),\n async execute<Input, Output>(\n name: string,\n input: Input,\n identity?: AgentIdentity | null\n ): Promise<Output> {\n // `undefined` means \"use the ambient identity\"; explicit `null` means\n // \"anonymous\". This lets button handlers stay as `tools.execute(name,\n // input)` while still being attributed to whatever detect()/declare()\n // resolved into agentContext.\n const resolvedIdentity =\n identity === undefined ? (identityResolver?.() ?? null) : identity\n const tool = tools.get(name) as GovernedTool<Input, Output> | undefined\n if (!tool) throw new Error(`Tool \"${name}\" is not registered.`)\n if (disabled.has(name)) {\n const policy: PolicyEvaluation = {\n decision: 'deny',\n ruleId: `tool:${name}`,\n reason: 'Tool is disabled.',\n }\n onTrace?.({ type: 'tool.executed', tool: name, agent: resolvedIdentity, policy, outcome: 'blocked' })\n throw new Error(policy.reason)\n }\n const policy = await evaluate(name, { identity: resolvedIdentity })\n if (policy.decision === 'deny') {\n onTrace?.({ type: 'tool.executed', tool: name, agent: resolvedIdentity, policy, outcome: 'blocked' })\n throw new Error(policy.reason)\n }\n // Time the execution and trace the outcome either way — a tool that\n // throws is still something the agent did, and the observability /\n // analytics surfaces need both the latency and the error.\n const start = Date.now()\n try {\n const output = await tool.execute(input, { identity: resolvedIdentity })\n onTrace?.({\n type: 'tool.executed',\n tool: name,\n agent: resolvedIdentity,\n policy,\n outcome: 'success',\n durationMs: Date.now() - start,\n })\n return output\n } catch (error) {\n onTrace?.({\n type: 'tool.executed',\n tool: name,\n agent: resolvedIdentity,\n policy,\n outcome: 'error',\n durationMs: Date.now() - start,\n error: error instanceof Error ? error.message : String(error),\n })\n throw error\n }\n },\n }\n}\n","import type { ToolDescriptor } from '@agentronics/protocol'\nimport type { GovernedTool } from './registry.js'\n\n/**\n * Map a registered tool to the wire descriptor the gateway/dashboard consume.\n * `tokens` uses the same rough OpenAI-style rule of thumb the SDK's token\n * budget uses (≈ characters / 4) so the dashboard's per-tool cost matches.\n */\nexport const toToolDescriptor = (tool: GovernedTool): ToolDescriptor => {\n const descriptor: ToolDescriptor = {\n name: tool.name,\n description: tool.description ?? '',\n inputSchema: tool.inputSchema ?? {},\n tokens: 0,\n }\n if (tool.group) descriptor.group = tool.group\n if (tool.stage) descriptor.page = tool.stage\n if (tool.outputSchema) descriptor.outputSchema = tool.outputSchema\n descriptor.tokens = Math.ceil(\n JSON.stringify({\n name: descriptor.name,\n description: descriptor.description,\n inputSchema: descriptor.inputSchema,\n ...(descriptor.outputSchema ? { outputSchema: descriptor.outputSchema } : {}),\n }).length / 4\n )\n return descriptor\n}\n\nexport interface ToolSyncOptions {\n gatewayUrl: string\n siteId: string\n publishableKey: string\n fetcher?: typeof fetch\n}\n\n/** Pushes the full tool registry to the gateway for dashboard display. */\nexport const createToolSync = ({\n gatewayUrl,\n siteId,\n publishableKey,\n fetcher = fetch,\n}: ToolSyncOptions) => ({\n async push(tools: GovernedTool[]): Promise<number> {\n const descriptors = tools.map(toToolDescriptor)\n const response = await fetcher(\n `${gatewayUrl.replace(/\\/$/, '')}/v1/sites/${encodeURIComponent(siteId)}/tools`,\n {\n method: 'PUT',\n headers: {\n authorization: `Bearer ${publishableKey}`,\n 'content-type': 'application/json',\n },\n body: JSON.stringify({ registry: { tools: descriptors } }),\n }\n )\n if (!response.ok) {\n throw new Error(`Tool sync failed with status ${response.status}.`)\n }\n return descriptors.length\n },\n})\n\nexport type ToolSync = ReturnType<typeof createToolSync>\n","import type { TraceInput } from '../observability/tracer.js'\n\nexport interface ProgressionTransition {\n on: string\n to: string\n}\n\nexport interface ProgressionStage {\n name: string\n enables?: string[]\n transitions?: ProgressionTransition[]\n}\n\nexport interface ProgressionConfig {\n initial: string\n stages: ProgressionStage[]\n}\n\nexport interface ProgressionStore {\n current(): string\n enabledStages(): string[]\n notify(toolName: string): { changed: boolean; from: string; to: string }\n set(stage: string): { changed: boolean; from: string; to: string }\n reset(): void\n snapshot(): { current: string; enabled: string[] }\n}\n\nexport const createProgressionStore = (\n config: ProgressionConfig,\n options: { onTrace?: (input: TraceInput) => void } = {}\n): ProgressionStore => {\n const stageMap = new Map<string, ProgressionStage>()\n for (const stage of config.stages) stageMap.set(stage.name, stage)\n if (!stageMap.has(config.initial)) {\n throw new Error(`Initial stage \"${config.initial}\" is not declared in progression stages.`)\n }\n\n let current = config.initial\n\n const enabled = (): string[] => {\n const stage = stageMap.get(current)\n return stage?.enables ? [current, ...stage.enables] : [current]\n }\n\n const transitionTo = (next: string, trigger: string): { changed: boolean; from: string; to: string } => {\n const from = current\n if (!stageMap.has(next)) {\n throw new Error(`Cannot transition to unknown stage \"${next}\".`)\n }\n if (next === current) return { changed: false, from, to: next }\n current = next\n options.onTrace?.({\n type: 'tool.progressed',\n metadata: { from, to: next, trigger },\n })\n return { changed: true, from, to: next }\n }\n\n return {\n current: () => current,\n enabledStages: () => enabled(),\n notify(toolName) {\n const stage = stageMap.get(current)\n const transition = stage?.transitions?.find((t) => t.on === toolName)\n if (!transition) return { changed: false, from: current, to: current }\n return transitionTo(transition.to, toolName)\n },\n set(stage) {\n return transitionTo(stage, 'manual')\n },\n reset() {\n const previous = current\n current = config.initial\n if (previous !== current) {\n options.onTrace?.({\n type: 'tool.progressed',\n metadata: { from: previous, to: current, trigger: 'reset' },\n })\n }\n },\n snapshot: () => ({ current, enabled: enabled() }),\n }\n}\n","import type { AgentIdentity, TrustLevel } from '@agentronics/protocol'\nimport { TRUST_RANK } from '@agentronics/protocol'\nimport type { GovernedTool } from './registry.js'\n\nexport interface SurfacingContext {\n identity: AgentIdentity | null\n stage?: string | null\n enabledStages?: string[]\n}\n\nexport interface SurfacingDecision {\n tool: GovernedTool\n visible: boolean\n reason: string\n}\n\nconst passesTrust = (tool: GovernedTool, identity: AgentIdentity | null): { ok: boolean; reason: string } => {\n const minTrust = tool.authz?.minTrust as TrustLevel | undefined\n if (!minTrust) return { ok: true, reason: 'no-trust-floor' }\n if (!identity) return { ok: false, reason: `requires-trust:${minTrust}` }\n if (TRUST_RANK[identity.trust] < TRUST_RANK[minTrust]) {\n return { ok: false, reason: `trust-too-low:${identity.trust}<${minTrust}` }\n }\n return { ok: true, reason: 'trust-ok' }\n}\n\nconst passesClass = (tool: GovernedTool, identity: AgentIdentity | null): { ok: boolean; reason: string } => {\n const allowed = tool.authz?.allowedClasses ?? []\n if (allowed.length === 0) return { ok: true, reason: 'no-class-restriction' }\n if (!identity) return { ok: false, reason: `requires-class:${allowed.join('|')}` }\n if (!allowed.includes(identity.class)) {\n return { ok: false, reason: `class-not-allowed:${identity.class}` }\n }\n return { ok: true, reason: 'class-ok' }\n}\n\nconst passesStage = (tool: GovernedTool, context: SurfacingContext): { ok: boolean; reason: string } => {\n if (!tool.stage) return { ok: true, reason: 'no-stage' }\n if (context.enabledStages && context.enabledStages.includes(tool.stage)) {\n return { ok: true, reason: `stage-enabled:${tool.stage}` }\n }\n if (context.stage === tool.stage) return { ok: true, reason: `stage-active:${tool.stage}` }\n return { ok: false, reason: `stage-locked:${tool.stage}` }\n}\n\nexport const decideSurfacing = (\n tool: GovernedTool,\n context: SurfacingContext\n): SurfacingDecision => {\n const trust = passesTrust(tool, context.identity)\n if (!trust.ok) return { tool, visible: false, reason: trust.reason }\n const cls = passesClass(tool, context.identity)\n if (!cls.ok) return { tool, visible: false, reason: cls.reason }\n const stage = passesStage(tool, context)\n if (!stage.ok) return { tool, visible: false, reason: stage.reason }\n if (tool.authz?.decision === 'deny') {\n return { tool, visible: false, reason: 'authz-deny' }\n }\n return { tool, visible: true, reason: 'visible' }\n}\n\nexport const surfaceTools = (\n tools: GovernedTool[],\n context: SurfacingContext\n): GovernedTool[] => tools.filter((tool) => decideSurfacing(tool, context).visible)\n\nexport const explainSurfacing = (\n tools: GovernedTool[],\n context: SurfacingContext\n): SurfacingDecision[] => tools.map((tool) => decideSurfacing(tool, context))\n","import type { GovernedTool } from './registry.js'\n\nexport const DEFAULT_GROUP = 'default'\n\nexport interface ToolGroupSummary {\n name: string\n tools: GovernedTool[]\n}\n\nexport const groupTools = (tools: GovernedTool[]): ToolGroupSummary[] => {\n const map = new Map<string, GovernedTool[]>()\n for (const tool of tools) {\n const key = tool.group ?? DEFAULT_GROUP\n const bucket = map.get(key) ?? []\n bucket.push(tool)\n map.set(key, bucket)\n }\n return [...map.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([name, list]) => ({ name, tools: list }))\n}\n\nexport const listGroupNames = (tools: GovernedTool[]): string[] =>\n [...new Set(tools.map((tool) => tool.group ?? DEFAULT_GROUP))].sort()\n","import type { GovernedTool } from './registry.js'\n\nconst APPROX_CHARS_PER_TOKEN = 4\n\nconst stableStringify = (value: unknown): string => {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableStringify).join(',')}]`\n const keys = Object.keys(value as Record<string, unknown>).sort()\n return `{${keys\n .map((key) => `${JSON.stringify(key)}:${stableStringify((value as Record<string, unknown>)[key])}`)\n .join(',')}}`\n}\n\nexport interface ToolTokenEstimate {\n name: string\n characters: number\n tokens: number\n}\n\nexport interface TokenBudgetReport {\n total: number\n perTool: ToolTokenEstimate[]\n}\n\nexport const estimateToolTokens = (tool: GovernedTool): ToolTokenEstimate => {\n const descriptor = {\n name: tool.name,\n version: tool.version ?? null,\n group: tool.group ?? null,\n description: tool.description ?? null,\n inputSchema: tool.inputSchema ?? null,\n authz: tool.authz ?? null,\n rateLimit: tool.rateLimit ?? null,\n }\n const characters = stableStringify(descriptor).length\n return { name: tool.name, characters, tokens: Math.ceil(characters / APPROX_CHARS_PER_TOKEN) }\n}\n\nexport const estimateBudget = (tools: GovernedTool[]): TokenBudgetReport => {\n const perTool = tools.map(estimateToolTokens)\n const total = perTool.reduce((sum, entry) => sum + entry.tokens, 0)\n return { total, perTool }\n}\n","import type { GovernedTool } from './registry.js'\n\nexport interface WebMcpToolDescriptor {\n name: string\n description?: string\n inputSchema?: Record<string, unknown>\n invoke(input?: unknown): Promise<unknown>\n}\n\nexport interface WebMcpProvider {\n provideContext(payload: { tools: WebMcpToolDescriptor[] }): { revoke: () => void }\n}\n\nexport interface WebMcpAdapterOptions {\n provider?: WebMcpProvider\n doc?: { defaultView?: WindowLike | null } | null\n invoke?: (tool: GovernedTool, input: unknown) => Promise<unknown>\n}\n\ninterface WindowLike {\n navigator?: { modelContext?: WebMcpProvider }\n}\n\nconst resolveProvider = (options: WebMcpAdapterOptions): WebMcpProvider | null => {\n if (options.provider) return options.provider\n const win = options.doc?.defaultView ?? (typeof globalThis !== 'undefined' ? (globalThis as WindowLike) : null)\n const candidate = win?.navigator?.modelContext\n if (!candidate) return null\n // Some polyfills / browser extensions patch `navigator.modelContext` with a\n // different shape (e.g. `setTools` instead of `provideContext`). Only accept\n // the object as a provider when it exposes the method we actually call;\n // otherwise the rest of the SDK falls back to no-op publishing instead of\n // throwing `provideContext is not a function` at runtime.\n if (typeof (candidate as Partial<WebMcpProvider>).provideContext !== 'function') {\n return null\n }\n return candidate\n}\n\nconst toDescriptor = (\n tool: GovernedTool,\n invoke: (tool: GovernedTool, input: unknown) => Promise<unknown>\n): WebMcpToolDescriptor => {\n const descriptor: WebMcpToolDescriptor = {\n name: tool.name,\n invoke: (input) => invoke(tool, input),\n }\n if (tool.description !== undefined) descriptor.description = tool.description\n if (tool.inputSchema !== undefined) descriptor.inputSchema = tool.inputSchema\n return descriptor\n}\n\nexport interface WebMcpAdapter {\n publish(tools: GovernedTool[]): { revoked: boolean }\n revoke(): void\n available(): boolean\n}\n\nexport const createWebMcpAdapter = (options: WebMcpAdapterOptions = {}): WebMcpAdapter => {\n const invoke = options.invoke ?? (async (tool, input) => tool.execute(input as never, { identity: null }))\n let handle: { revoke: () => void } | null = null\n\n return {\n publish(tools) {\n const provider = resolveProvider(options)\n if (!provider) return { revoked: false }\n handle?.revoke()\n handle = provider.provideContext({ tools: tools.map((tool) => toDescriptor(tool, invoke)) })\n return { revoked: true }\n },\n revoke() {\n handle?.revoke()\n handle = null\n },\n available: () => Boolean(resolveProvider(options)),\n }\n}\n","import type { TraceEvent as TraceEventRecord } from '@agentronics/protocol'\n\nexport interface TraceBuffer {\n add(event: TraceEventRecord): void\n list(): TraceEventRecord[]\n clear(): void\n}\n\nexport const createTraceBuffer = (limit = 500): TraceBuffer => {\n const events: TraceEventRecord[] = []\n\n return {\n add(event) {\n events.push(event)\n if (events.length > limit) events.splice(0, events.length - limit)\n },\n list() {\n return [...events]\n },\n clear() {\n events.length = 0\n },\n }\n}\n","import type { TraceEvent as TraceEventRecord } from '@agentronics/protocol'\n\nexport interface SamplerOptions {\n traceRate?: number\n errorRate?: number\n random?: () => number\n}\n\nconst clampRate = (value: number | undefined, fallback: number): number => {\n if (value === undefined) return fallback\n return Math.max(0, Math.min(1, value))\n}\n\nexport const createSampler = (options: SamplerOptions = {}) => {\n const traceRate = clampRate(options.traceRate, 1)\n const errorRate = clampRate(options.errorRate, 1)\n const random = options.random ?? Math.random\n\n return {\n shouldKeep(event: Pick<TraceEventRecord, 'outcome'>): boolean {\n const rate = event.outcome === 'error' ? errorRate : traceRate\n return random() < rate\n },\n }\n}\n\nexport type TraceSampler = ReturnType<typeof createSampler>\n","const REDACTED = '[REDACTED]'\n\nconst cloneJson = (value: unknown): unknown => {\n if (value === undefined) return undefined\n return JSON.parse(JSON.stringify(value)) as unknown\n}\n\nconst redactPath = (target: unknown, parts: string[]): void => {\n if (parts.length === 0 || typeof target !== 'object' || target === null) return\n const [head, ...rest] = parts\n if (!head) return\n\n if (Array.isArray(target)) {\n for (const item of target) redactPath(item, parts)\n return\n }\n\n const record = target as Record<string, unknown>\n if (!(head in record)) return\n if (rest.length === 0) {\n record[head] = REDACTED\n return\n }\n redactPath(record[head], rest)\n}\n\nexport const scrubValue = <T>(value: T, paths: string[] = []): T => {\n if (paths.length === 0) return value\n const cloned = cloneJson(value) as T\n for (const path of paths) redactPath(cloned, path.split('.').filter(Boolean))\n return cloned\n}\n\nexport const DEFAULT_SCRUB_PATHS = [\n 'metadata.password',\n 'metadata.token',\n 'metadata.authorization',\n 'metadata.cookie',\n]\n","import {\n TraceEvent,\n type TraceEvent as TraceEventRecord,\n type TraceEventType,\n} from '@agentronics/protocol'\nimport { createTraceBuffer, type TraceBuffer } from './buffer.js'\nimport { createSampler, type SamplerOptions } from './sampler.js'\nimport { DEFAULT_SCRUB_PATHS, scrubValue } from './scrub.js'\n\nexport interface TraceExporter {\n name: string\n export(events: TraceEventRecord[]): Promise<void> | void\n}\n\nexport interface TraceInput {\n type: TraceEventType\n outcome?: TraceEventRecord['outcome']\n tool?: string\n agent?: TraceEventRecord['agent']\n policy?: TraceEventRecord['policy']\n durationMs?: number\n error?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface TracerOptions extends SamplerOptions {\n siteId: string\n bufferSize?: number\n sessionId?: string\n scrubPaths?: string[]\n exporters?: TraceExporter[]\n onExporterError?: (error: unknown, exporter: TraceExporter, event: TraceEventRecord) => void\n /**\n * Resolves the page each emitted event belongs to — stamped into\n * `metadata.page` (a reserved trace metadata key) unless the caller already\n * set it. The dashboard groups WebMCP tools and agent activity by this.\n * Defaults to `location.pathname`; returns `undefined` outside a browser\n * (SSR / Node tests), in which case no `page` key is written.\n */\n pageProvider?: () => string | undefined\n}\n\nconst defaultPageProvider = (): string | undefined =>\n typeof location !== 'undefined' && typeof location.pathname === 'string'\n ? location.pathname\n : undefined\n\nexport interface Tracer {\n readonly sessionId: string\n emit(input: TraceInput): Promise<TraceEventRecord | null>\n list(): TraceEventRecord[]\n clear(): void\n}\n\nconst randomId = (prefix: string): string => {\n const cryptoApi = globalThis.crypto\n if (cryptoApi && 'randomUUID' in cryptoApi) return `${prefix}_${cryptoApi.randomUUID()}`\n return `${prefix}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`\n}\n\nexport const createTracer = ({\n siteId,\n bufferSize,\n sessionId = randomId('ses'),\n scrubPaths = DEFAULT_SCRUB_PATHS,\n exporters = [],\n onExporterError,\n pageProvider = defaultPageProvider,\n ...samplerOptions\n}: TracerOptions): Tracer => {\n const buffer: TraceBuffer = createTraceBuffer(bufferSize)\n const sampler = createSampler(samplerOptions)\n\n // A host-supplied provider must never break tracing — swallow throws.\n const readPage = (): string | undefined => {\n try {\n return pageProvider()\n } catch {\n return undefined\n }\n }\n\n return {\n sessionId,\n async emit(input) {\n const metadata: Record<string, unknown> = { ...input.metadata }\n if (metadata.page === undefined) {\n const page = readPage()\n if (page !== undefined) metadata.page = page\n }\n const event = TraceEvent.parse(\n scrubValue(\n {\n id: randomId('trc'),\n siteId,\n sessionId,\n occurredAt: new Date().toISOString(),\n outcome: input.outcome ?? 'success',\n ...input,\n metadata,\n },\n scrubPaths\n )\n )\n\n if (!sampler.shouldKeep(event)) return null\n buffer.add(event)\n\n await Promise.all(\n exporters.map(async (exporter) => {\n try {\n await exporter.export([event])\n } catch (error) {\n onExporterError?.(error, exporter, event)\n }\n })\n )\n\n return event\n },\n list: () => buffer.list(),\n clear: () => buffer.clear(),\n }\n}\n","import type { TraceEvent as TraceEventRecord } from '@agentronics/protocol'\nimport type { TraceExporter } from '../tracer.js'\n\nexport const createConsoleExporter = (): TraceExporter => ({\n name: 'console',\n export(events: TraceEventRecord[]) {\n for (const event of events) {\n console.info('[agentronics:trace]', event.type, event)\n }\n },\n})\n","import type { TraceBatch, TraceEvent as TraceEventRecord } from '@agentronics/protocol'\nimport type { TraceExporter } from '../tracer.js'\n\nexport interface GatewayExporterOptions {\n gatewayUrl: string\n publishableKey: string\n fetcher?: typeof fetch\n}\n\nexport const createGatewayExporter = ({\n gatewayUrl,\n publishableKey,\n fetcher = fetch,\n}: GatewayExporterOptions): TraceExporter => ({\n name: 'gateway',\n async export(events: TraceEventRecord[]) {\n const batch: TraceBatch = { publishableKey, events }\n await fetcher(`${gatewayUrl.replace(/\\/$/, '')}/v1/traces`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${publishableKey}`,\n },\n body: JSON.stringify(batch),\n })\n },\n})\n","import type { TraceEvent as TraceEventRecord } from '@agentronics/protocol'\nimport type { TraceExporter } from '../tracer.js'\n\nexport interface WebhookExporterOptions {\n url: string\n fetcher?: typeof fetch\n maxRetries?: number\n queueLimit?: number\n}\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\n\nexport const createWebhookExporter = ({\n url,\n fetcher = fetch,\n maxRetries = 2,\n queueLimit = 500,\n}: WebhookExporterOptions): TraceExporter => ({\n name: 'webhook',\n async export(events: TraceEventRecord[]) {\n const queued = readQueue(url)\n const batch = [...queued, ...events].slice(-queueLimit)\n let attempt = 0\n while (true) {\n const response = await fetcher(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ events: batch }),\n })\n if (response.ok) {\n writeQueue(url, [])\n return\n }\n if (attempt >= maxRetries) {\n writeQueue(url, batch)\n throw new Error(`Webhook exporter failed with status ${response.status}.`)\n }\n attempt += 1\n await sleep(100 * attempt)\n }\n },\n})\n\nconst queueKey = (url: string) => `agtx:webhook:${url}`\n\nconst readQueue = (url: string): TraceEventRecord[] => {\n if (typeof window === 'undefined' || !window.localStorage) return []\n try {\n const raw = window.localStorage.getItem(queueKey(url))\n return raw ? (JSON.parse(raw) as TraceEventRecord[]) : []\n } catch {\n return []\n }\n}\n\nconst writeQueue = (url: string, events: TraceEventRecord[]): void => {\n if (typeof window === 'undefined' || !window.localStorage) return\n try {\n if (events.length === 0) {\n window.localStorage.removeItem(queueKey(url))\n return\n }\n window.localStorage.setItem(queueKey(url), JSON.stringify(events))\n } catch {\n // If storage is unavailable, webhook export failure still surfaces via the thrown error.\n }\n}\n","import {\n AgentronicsError,\n classifyApiKey,\n PUBLISHABLE_KEY_PREFIX,\n type AgentIdentity,\n type PolicyEvaluation,\n type PolicyRule,\n type TraceEvent,\n} from '@agentronics/protocol'\nimport { detectAgent, type DetectAgentOptions } from './detection/index.js'\nimport { SDK_VERSION } from './version.js'\nimport {\n createIdentityStore,\n type PresentedIdentity,\n type PresentIdentityOptions,\n} from './auth/identity.js'\nimport { createAuthEngine, type AuthContext, type AuthEngine, type AuthInput } from './auth/engine.js'\nimport { createAgentContextStore, type AgentContextStore } from './auth/agentContext.js'\nimport { createPolicyEngine, type PolicyEngine } from './authz/engine.js'\nimport { createPolicyCache, type PolicyCache } from './authz/policyCache.js'\nimport { installDomEnforcer } from './authz/domEnforcer.js'\nimport { createMemoryStore, type MemoryStore } from './memory/store.js'\nimport {\n createSiteMemoryStore,\n type SiteMemoryStore,\n type ProvideForPageInput,\n} from './memory/siteMemory.js'\nimport { createMemoryCache, type MemoryCache } from './memory/memoryCache.js'\nimport {\n installMetaTags,\n installMemoryOverlay,\n fetchWellKnownContext,\n} from './memory/delivery/index.js'\nimport { createToolRegistry, type GovernedTool, type ToolRegistry } from './tools/registry.js'\nimport { createToolSync } from './tools/toolSync.js'\nimport {\n createProgressionStore,\n type ProgressionConfig,\n type ProgressionStore,\n} from './tools/progression.js'\nimport { surfaceTools, explainSurfacing, type SurfacingDecision } from './tools/surfacing.js'\nimport { groupTools, type ToolGroupSummary } from './tools/groups.js'\nimport { estimateBudget, type TokenBudgetReport } from './tools/tokenEstimate.js'\nimport { createWebMcpAdapter, type WebMcpAdapter } from './tools/webmcpAdapter.js'\nimport type { SiteMemory } from '@agentronics/protocol'\nimport {\n createConsoleExporter,\n createGatewayExporter,\n createTracer,\n createWebhookExporter,\n type TraceExporter,\n type Tracer,\n} from './observability/index.js'\n\nexport interface InitOptions {\n publishableKey: string\n siteId?: string\n /**\n * Override the gateway URL the SDK calls. **Reserved for local development\n * only** — the only accepted values are `localhost` / `127.0.0.1` URLs (so\n * `pnpm dev` against a local gateway works). Any other value throws at\n * `init()` time.\n *\n * Production deployments must omit this option. The SDK is hard-coded to\n * call `https://gateway.agentronics.dev`. Custom backends are not\n * supported, by design — see the project README + LICENSE NOTICE.\n *\n * @internal — kept on the public type only so dev tooling type-checks.\n */\n gatewayUrl?: string\n debug?: boolean\n policies?: PolicyRule[]\n siteMemory?: Partial<SiteMemory>\n auth?: AuthContext\n progression?: ProgressionConfig\n tools?: GovernedTool[]\n /**\n * Run agent detection automatically on init and keep the resulting\n * identity in agentContext so every subsequent tools.execute() call gets\n * attributed without the host page passing identity through. Default\n * `true` — opt out with `false` for privacy-mode hosts, or pass\n * DetectAgentOptions to tune the detectors (e.g. raise the DOM threshold).\n *\n * The first detection cycle runs synchronously where possible (DOM\n * heuristics) and continues asynchronously for WebMCP polling, so very\n * early click handlers may see identity=null for a single frame; the\n * `ready` promise on the returned client resolves once the cycle finishes.\n */\n autoDetect?: boolean | DetectAgentOptions\n trace?: {\n enabled?: boolean\n bufferSize?: number\n traceRate?: number\n errorRate?: number\n scrubPaths?: string[]\n exporters?: TraceExporter[]\n gateway?: boolean\n webhookUrl?: string\n }\n}\n\nexport interface AgentronicsClient {\n readonly publishableKey: string\n readonly siteId: string\n readonly gatewayUrl: string\n readonly debug: boolean\n readonly memory: MemoryStore\n readonly siteMemory: SiteMemoryStore\n readonly memoryCache: MemoryCache\n readonly tracer: Tracer\n readonly auth: AuthEngine\n readonly agentContext: AgentContextStore\n readonly authz: PolicyEngine\n readonly policyCache: PolicyCache\n readonly tools: ToolRegistry\n readonly progression: ProgressionStore | null\n readonly webmcp: WebMcpAdapter\n /**\n * Resolves once the initial autoDetect cycle finishes. Rejects only if the\n * autoDetect configuration itself is invalid; detection failures resolve to\n * `null` (treated as \"human or undetectable agent\"). When `autoDetect` was\n * disabled the promise resolves immediately to `null`.\n */\n readonly ready: Promise<AgentIdentity | null>\n detect(options?: DetectAgentOptions): Promise<AgentIdentity | null>\n authenticate(input: AuthInput): Promise<AgentIdentity | null>\n presentIdentity(input: PresentIdentityOptions): PresentedIdentity\n clearIdentity(): void\n presentedIdentity(): PresentedIdentity | null\n setPolicies(rules: PolicyRule[]): void\n listPolicies(): PolicyRule[]\n evaluate(tool: string, options?: { identity?: AgentIdentity | null }): Promise<PolicyEvaluation>\n syncPolicies(): Promise<PolicyRule[]>\n syncSiteMemory(): Promise<SiteMemory | null>\n provideSiteMemory(memory: Partial<SiteMemory>): SiteMemory\n provideForPage(input: ProvideForPageInput): void\n installMemoryDelivery(options?: {\n metaTags?: boolean\n overlay?: boolean\n }): { uninstall: () => void }\n fetchWellKnown(origin?: string): Promise<SiteMemory | null>\n installDomEnforcer(): { uninstall: () => void }\n registerTool(tool: GovernedTool): () => void\n /** Push the full tool registry to the gateway so the dashboard can render\n * the page-wise view (schemas, per-tool tokens, context fullness). */\n syncTools(): Promise<number>\n surfaceTools(options?: { identity?: AgentIdentity | null }): GovernedTool[]\n explainSurfacing(options?: { identity?: AgentIdentity | null }): SurfacingDecision[]\n groupedTools(options?: { identity?: AgentIdentity | null }): ToolGroupSummary[]\n estimateTokens(options?: { identity?: AgentIdentity | null }): TokenBudgetReport\n publishToWebMcp(options?: { identity?: AgentIdentity | null }): { revoked: boolean; surfaced: number }\n notifyToolInvoked(toolName: string): void\n traces(): TraceEvent[]\n clearTraces(): void\n /**\n * Sanity-check the publishable key + gateway URL. Hits `GET /v1/health` and\n * resolves to `{ ok: true, ... }` on 2xx, `{ ok: false, status, error }`\n * otherwise. Doesn't throw — designed for \"did my key wire up correctly?\"\n * UX without forcing the host page into a try/catch.\n */\n ping(): Promise<{ ok: true; status: number; body: unknown } | { ok: false; status: number; error: string }>\n}\n\nconst DEFAULT_GATEWAY_URL = 'https://gateway.agentronics.dev'\n\n/**\n * Lock the SDK to the canonical Agentronics gateway. The only override\n * accepted is a localhost / 127.0.0.1 URL — purely so contributors running\n * `pnpm dev` can hit a local gateway. Any other value (a competing host, a\n * proxy, an MITM target) throws synchronously, before any traces are\n * emitted.\n *\n * The Agentronics SDK is licensed under Apache 2.0 but is designed to\n * operate exclusively against the Agentronics service. Self-hosted /\n * third-party backends are not supported.\n */\nconst resolveGatewayUrl = (provided: string | undefined): string => {\n if (provided === undefined) return DEFAULT_GATEWAY_URL\n if (provided === DEFAULT_GATEWAY_URL) return provided\n let parsed: URL\n try {\n parsed = new URL(provided)\n } catch {\n throw new Error(\n `Agentronics SDK: \\`gatewayUrl\\` is not a valid URL: ${provided}`\n )\n }\n if (parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1') {\n return provided\n }\n throw new Error(\n `Agentronics SDK does not support custom gateway URLs. ` +\n `Omit \\`gatewayUrl\\` to use the canonical https://gateway.agentronics.dev. ` +\n `The only accepted override is a localhost / 127.0.0.1 URL for local development. ` +\n `Got: ${provided}`\n )\n}\n\nexport const init = (options: InitOptions): AgentronicsClient => {\n const {\n publishableKey,\n siteId = 'default',\n debug = false,\n policies = [],\n trace = {},\n } = options\n const gatewayUrl = resolveGatewayUrl(options.gatewayUrl)\n\n const kind = classifyApiKey(publishableKey)\n if (kind === 'secret') {\n throw new AgentronicsError(\n 'wrong_key_kind',\n 'A secret key was passed to Agentronics.init(). Browser code must use a publishable key (agtx_pk_*).'\n )\n }\n if (kind !== 'publishable') {\n throw new AgentronicsError(\n 'invalid_api_key',\n `Agentronics.init() expected a key starting with \"${PUBLISHABLE_KEY_PREFIX}\".`\n )\n }\n\n const traceEnabled = trace.enabled ?? true\n const exporters = [\n ...(debug ? [createConsoleExporter()] : []),\n ...(trace.gateway ? [createGatewayExporter({ gatewayUrl, publishableKey })] : []),\n ...(trace.webhookUrl ? [createWebhookExporter({ url: trace.webhookUrl })] : []),\n ...(trace.exporters ?? []),\n ]\n const tracerOptions: Parameters<typeof createTracer>[0] = {\n siteId,\n exporters: traceEnabled ? exporters : [],\n onExporterError: (error, exporter) => {\n if (debug) console.warn(`[agentronics] trace exporter \"${exporter.name}\" failed`, error)\n },\n }\n if (trace.bufferSize !== undefined) tracerOptions.bufferSize = trace.bufferSize\n if (trace.traceRate !== undefined) tracerOptions.traceRate = trace.traceRate\n if (trace.errorRate !== undefined) tracerOptions.errorRate = trace.errorRate\n if (trace.scrubPaths !== undefined) tracerOptions.scrubPaths = trace.scrubPaths\n const tracer = createTracer(tracerOptions)\n const emitTrace = (input: Parameters<Tracer['emit']>[0]) => {\n if (!traceEnabled) return\n void tracer.emit(input)\n }\n const identityStore = createIdentityStore()\n const authOptions: Parameters<typeof createAuthEngine>[0] = {\n onTrace: emitTrace,\n }\n if (options.auth !== undefined) authOptions.context = options.auth\n const auth = createAuthEngine(authOptions)\n const agentContext = createAgentContextStore()\n const policyEngine = createPolicyEngine(policies)\n const policyCache = createPolicyCache({ gatewayUrl, siteId, publishableKey })\n const memory = createMemoryStore({ onTrace: emitTrace })\n const siteMemoryOptions: Parameters<typeof createSiteMemoryStore>[0] = {\n onTrace: emitTrace,\n }\n if (options.siteMemory !== undefined) siteMemoryOptions.initial = options.siteMemory\n const siteMemory = createSiteMemoryStore(siteMemoryOptions)\n const memoryCache = createMemoryCache({ gatewayUrl, siteId, publishableKey })\n const toolSync = createToolSync({ gatewayUrl, siteId, publishableKey })\n\n const detect = async (detectOptions?: DetectAgentOptions) => {\n const start = Date.now()\n const detected = await detectAgent(detectOptions)\n const identity = identityStore.preferOver(detected)\n if (traceEnabled) {\n await tracer.emit({\n type: identity ? 'agent.detected' : 'agent.missed',\n agent: identity,\n durationMs: Date.now() - start,\n metadata: {\n detectedClass: detected?.class ?? null,\n presented: identityStore.snapshot() !== null,\n },\n })\n }\n agentContext.set(identity, 'detect')\n return identity\n }\n const evaluate = async (tool: string, opts: { identity?: AgentIdentity | null } = {}) => {\n const start = Date.now()\n const identity = opts.identity !== undefined ? opts.identity : await detect()\n const policy = policyEngine.evaluate({ tool, identity })\n if (traceEnabled) {\n await tracer.emit({\n type: 'authz.evaluated',\n tool,\n agent: identity,\n policy,\n outcome: policy.decision === 'deny' ? 'blocked' : 'success',\n durationMs: Date.now() - start,\n })\n }\n return policy\n }\n const tools = createToolRegistry({\n evaluate,\n setPolicies: (rules) => policyEngine.set(rules),\n listPolicies: () => policyEngine.list(),\n onTrace: emitTrace,\n // Every tools.execute() call without an explicit identity gets the\n // current detected/declared/authenticated agent. Button-bound tools\n // become attributable without their handlers having to know about\n // agents.\n identityResolver: () => agentContext.snapshot().identity,\n })\n for (const tool of options.tools ?? []) tools.register(tool)\n\n const progression = options.progression\n ? createProgressionStore(options.progression, { onTrace: emitTrace })\n : null\n\n const surfacingContext = (identity: AgentIdentity | null) => {\n const ctx: { identity: AgentIdentity | null; stage?: string; enabledStages?: string[] } = {\n identity,\n }\n if (progression) {\n ctx.stage = progression.current()\n ctx.enabledStages = progression.enabledStages()\n }\n return ctx\n }\n\n const surfaceFor = (identity: AgentIdentity | null) =>\n surfaceTools(tools.list(), surfacingContext(identity))\n\n const handleToolInvoked = (toolName: string) => {\n if (!progression) return\n const transition = progression.notify(toolName)\n if (transition.changed) webmcp.publish(surfaceFor(agentContext.snapshot().identity))\n }\n\n // Fallback identity used only when no detection has fired yet AND the call\n // arrives through navigator.modelContext — a call through that channel is\n // by definition an agent call, even if the specific vendor wasn't matched.\n const fallbackWebMcpIdentity: AgentIdentity = {\n class: 'webmcp',\n trust: 'detected',\n confidence: 1,\n vendor: null,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : null,\n detectionVersion: SDK_VERSION,\n signals: { source: 'navigator.modelContext' },\n }\n\n const webmcp = createWebMcpAdapter({\n invoke: async (tool, input) => {\n const identity = agentContext.snapshot().identity ?? fallbackWebMcpIdentity\n const result = await tools.execute(tool.name, input, identity)\n handleToolInvoked(tool.name)\n return result\n },\n })\n\n // When the ambient identity changes (late WebMCP polyfill, declared\n // identity, successful authenticate()), re-publish the WebMCP surface so\n // any agent currently bound to navigator.modelContext sees the\n // identity-gated tool set rather than the stale anonymous one.\n agentContext.subscribe((snapshot) => {\n if (!webmcp.available()) return\n webmcp.publish(surfaceFor(snapshot.identity))\n })\n\n // Kick off the initial detection cycle if the host opted in. Default is\n // on so /traces is populated with class/trust/signals without the host\n // page having to call detect() manually before each interaction.\n const autoDetectOption = options.autoDetect ?? true\n const ready: Promise<AgentIdentity | null> = autoDetectOption === false\n ? Promise.resolve(null)\n : (async () => {\n const detectOpts: DetectAgentOptions =\n autoDetectOption === true ? {} : autoDetectOption\n try {\n return await detect(detectOpts)\n } catch (err) {\n // Detection problems shouldn't crash the host's init() — log when\n // debug is on, otherwise swallow and treat as \"human or\n // undetectable agent.\"\n if (debug) console.warn('[agentronics] autoDetect failed:', err)\n return null\n }\n })()\n\n return Object.freeze({\n publishableKey,\n siteId,\n gatewayUrl,\n debug,\n memory,\n siteMemory,\n memoryCache,\n tracer,\n auth,\n agentContext,\n authz: policyEngine,\n policyCache,\n tools,\n progression,\n webmcp,\n ready,\n detect,\n authenticate: async (input: AuthInput) => {\n const identity = await auth.authenticate(input)\n agentContext.set(identity, 'authenticate')\n return identity\n },\n presentIdentity: (input: PresentIdentityOptions) => {\n const presented = identityStore.present(input)\n emitTrace({\n type: 'auth.identity_presented',\n agent: presented.identity,\n metadata: { vendor: presented.identity.vendor, class: presented.identity.class },\n })\n agentContext.set(presented.identity, 'declare')\n return presented\n },\n clearIdentity: () => {\n identityStore.clear()\n emitTrace({ type: 'auth.identity_cleared' })\n agentContext.set(null, 'cleared')\n },\n presentedIdentity: () => identityStore.snapshot(),\n setPolicies: (rules: PolicyRule[]) => {\n policyEngine.set(rules)\n emitTrace({ type: 'authz.policies_set', metadata: { count: rules.length } })\n },\n listPolicies: () => policyEngine.list(),\n syncPolicies: async () => {\n const snapshot = await policyCache.sync()\n policyEngine.set(snapshot.policies)\n emitTrace({ type: 'authz.policies_set', metadata: { count: snapshot.policies.length, synced: true } })\n return snapshot.policies\n },\n syncSiteMemory: async () => {\n const snapshot = await memoryCache.sync()\n if (snapshot.memory) {\n siteMemory.replace(snapshot.memory)\n emitTrace({\n type: 'memory.updated',\n metadata: { kind: 'site', operation: 'sync', etag: snapshot.etag },\n })\n }\n return snapshot.memory\n },\n provideSiteMemory: (next: Partial<SiteMemory>) => siteMemory.provide(next),\n provideForPage: (input: ProvideForPageInput) => {\n siteMemory.provideForPage(input)\n },\n installMemoryDelivery: ({ metaTags = true, overlay = false } = {}) => {\n const handles: Array<{ uninstall: () => void }> = []\n if (metaTags) handles.push(installMetaTags({ snapshot: siteMemory.snapshot() }))\n if (overlay) handles.push(installMemoryOverlay({ snapshot: siteMemory.snapshot() }))\n return {\n uninstall: () => {\n handles.forEach((handle) => handle.uninstall())\n },\n }\n },\n fetchWellKnown: async (origin?: string) => {\n const wellKnownOptions: Parameters<typeof fetchWellKnownContext>[0] = {}\n if (origin !== undefined) wellKnownOptions.origin = origin\n const memorySnapshot = await fetchWellKnownContext(wellKnownOptions)\n if (memorySnapshot) {\n siteMemory.replace(memorySnapshot)\n emitTrace({\n type: 'memory.updated',\n metadata: { kind: 'site', operation: 'wellKnown', origin: origin ?? null },\n })\n }\n return memorySnapshot\n },\n installDomEnforcer: () =>\n installDomEnforcer({\n policyEngine,\n getIdentity: () => detect({ webmcp: { pollMs: 0 } }),\n }),\n registerTool: (tool: GovernedTool) => tools.register(tool),\n syncTools: async () => {\n const all = tools.list({ includeDisabled: true })\n const count = await toolSync.push(all)\n emitTrace({ type: 'tool.registered', metadata: { operation: 'sync', count } })\n return count\n },\n surfaceTools: ({ identity = null }: { identity?: AgentIdentity | null } = {}) => surfaceFor(identity),\n explainSurfacing: ({ identity = null }: { identity?: AgentIdentity | null } = {}) =>\n explainSurfacing(tools.list(), surfacingContext(identity)),\n groupedTools: ({ identity = null }: { identity?: AgentIdentity | null } = {}) => groupTools(surfaceFor(identity)),\n estimateTokens: ({ identity = null }: { identity?: AgentIdentity | null } = {}) => estimateBudget(surfaceFor(identity)),\n publishToWebMcp: ({ identity = null }: { identity?: AgentIdentity | null } = {}) => {\n const surfaced = surfaceFor(identity)\n const result = webmcp.publish(surfaced)\n surfaced.forEach((tool) => {\n emitTrace({\n type: 'tool.surfaced',\n tool: tool.name,\n metadata: { state: 'published', trust: identity?.trust ?? null, group: tool.group ?? null },\n })\n })\n return { revoked: result.revoked, surfaced: surfaced.length }\n },\n notifyToolInvoked: (toolName: string) => handleToolInvoked(toolName),\n evaluate,\n traces: () => tracer.list(),\n clearTraces: () => tracer.clear(),\n async ping() {\n try {\n const response = await fetch(`${gatewayUrl.replace(/\\/$/, '')}/v1/health`, {\n method: 'GET',\n headers: { authorization: `Bearer ${publishableKey}` },\n })\n if (!response.ok) {\n return { ok: false as const, status: response.status, error: `gateway returned ${response.status}` }\n }\n const body = (await response.json().catch(() => null)) ?? {}\n return { ok: true as const, status: response.status, body }\n } catch (error) {\n return {\n ok: false as const,\n status: 0,\n error: error instanceof Error ? error.message : String(error),\n }\n }\n },\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/version.ts","../src/tools/modelContext.ts","../src/detection/webmcp.ts","../src/detection/crawler.ts","../src/detection/dom.ts","../src/detection/detectors/registry.ts","../src/detection/index.ts","../src/detection/vision.ts","../src/auth/identity.ts","../src/auth/trustLevel.ts","../src/auth/methods/bearer.ts","../src/auth/methods/detectionAsAuth.ts","../src/auth/methods/extensionToken.ts","../src/auth/methods/mtls.ts","../src/auth/methods/oauth2.ts","../src/auth/methods/selfDeclaration.ts","../src/auth/methods/sessionLink.ts","../src/auth/methods/sso.ts","../src/auth/methods/spiffe.ts","../src/auth/methods/xAgentHeader.ts","../src/auth/engine.ts","../src/auth/agentContext.ts","../src/authz/rateLimiter.ts","../src/authz/engine.ts","../src/authz/policyCache.ts","../src/authz/overlay.ts","../src/authz/domEnforcer.ts","../src/memory/storage.ts","../src/memory/store.ts","../src/memory/siteMemory.ts","../src/memory/memoryCache.ts","../src/memory/delivery/metaTags.ts","../src/memory/delivery/overlay.ts","../src/memory/delivery/wellKnownClient.ts","../src/tools/registry.ts","../src/tools/tokenEstimate.ts","../src/tools/toolSync.ts","../src/tools/progression.ts","../src/tools/surfacing.ts","../src/tools/groups.ts","../src/tools/webmcpAdapter.ts","../src/authz/reviewPrompt.ts","../src/observability/buffer.ts","../src/observability/sampler.ts","../src/observability/scrub.ts","../src/observability/tracer.ts","../src/observability/exporters/console.ts","../src/observability/exporters/gateway.ts","../src/observability/exporters/webhook.ts","../src/init.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","CRAWLER_SIGNATURES","detectCrawler","signatures","disable","confidence","ua","sig","HEADLESS_UA_PATTERNS","checkWebdriver","checkChromedriver","keys","k","AUTOMATION_GLOBALS","checkAutomationGlobals","found","checkPlugins","desktop","empty","checkHeadlessUa","hit","re","checkLanguages","langs","checkPermissions","hasChrome","SIGNALS","detectDom","threshold","signals","totalWeight","hitWeight","name","check","result","bundledDetectors","createDetectorRegistry","initial","detectors","detector","status","all","includeResearch","identity","detectAgent","custom","webmcp","crawler","dom","VM_VIEWPORTS","coefficientOfVariation","values","mean","s","v","variance","scoreVisionSignals","score","createVisionDetector","minInteractions","onDetect","acceptUntrustedEvents","trusted","e","doc","lastMoveAt","lastKeyAt","lastKeyDownAt","intervals","typingBursts","reported","view","evaluate","onMove","listeners","m","target","r","dx","dy","t","ie","fn","buildIdentity","claim","createIdentityStore","presented","input","parsed","IdentityClaim","AgentronicsError","next","detected","isHigherTrust","highestTrust","identities","best","TRUST_RANK","bearer","context","verified","detectionAsAuth","extensionToken","mtls","oauth2","identityFromClaim","selfDeclaration","sessionLink","sso","spiffe","isGoogleFlavor","xAgentHeader","vendor","rawClass","proof","parsedClass","AgentClass","TOKEN_METHODS","legacyTrust","method","linked","defaultAuthMethods","previewAuthMethods","METHOD_TO_PROTOCOL","resolveTraceProtocol","methodName","createAuthEngine","compat","methods","onTrace","onUnverifiedToken","warned","methodResults","winner","entry","winnerEntry","protocol","subject","trace","INITIAL","createAgentContextStore","state","notify","source","memoryStorage","map","browserStorage","decode","raw","createRateLimiter","storage","rule","now","storageKey","existing","resetAt","count","matchTool","pattern","tool","meetsTrust","have","need","meetsClass","DEFAULT_DECISION","rateLimitKey","classPart","vendorPart","trustPart","createPolicyEngine","rules","PolicyRule","rateLimiter","rate","createPolicyCache","gatewayUrl","siteId","publishableKey","fetcher","snapshot","response","body","showDenyOverlay","message","durationMs","documentRef","node","installDomEnforcer","policyEngine","getIdentity","selector","handler","event","evaluation","inMemoryBackend","store","webStorageBackend","prefix","out","i","PREFIX","createBackends","hasWindow","session","user","isExpired","record","encode","createMemoryStore","backends","emit","scope","backend","ttl","MemoryEntry","cloneSiteMemory","memory","SiteMemorySchema","stamp","createSiteMemoryStore","SITE_MEMORY_DEFAULT","cachedSnapshot","invalidate","snap","provide","merged","update","path","parts","cursor","provideForPage","SiteMemoryPageContext","createMemoryCache","META_PREFIX","JSONLD_ID","safeJson","setMeta","content","tag","removeByName","installMetaTags","schemaType","script","OVERLAY_ID","styles","hidden","summarize","pages","workflows","ui","installMemoryOverlay","WELL_KNOWN_PATH","fetchWellKnownContext","origin","signal","fetchInit","payload","createToolRegistry","setPolicies","listPolicies","identityResolver","reviewer","tools","disabled","writePolicyFor","item","includeDisabled","resolvedIdentity","policy","request","approved","refused","output","error","stableStringify","modelFacingDescriptor","descriptorTokens","estimateToolTokens","characters","estimateBudget","perTool","sum","toToolDescriptor","descriptor","createToolSync","descriptors","createProgressionStore","config","stageMap","stage","current","enabled","transitionTo","trigger","from","transition","previous","passesTrust","minTrust","passesClass","allowed","passesStage","decideSurfacing","trust","cls","surfaceTools","explainSurfacing","DEFAULT_GROUP","groupTools","bucket","a","b","list","isLegacy","_ctx","toModelContextTool","invoke","createWebMcpAdapter","controller","legacyHandle","detachEvents","lastStatus","explicit","withdraw","attachEvents","activated","cancelled","resolved","d","registerOptions","summarise","createReviewPrompt","timeoutMs","backdrop","dialog","heading","who","details","summary","row","button","label","primary","deny","allow","settled","finish","ok","timer","onKey","createTraceBuffer","limit","events","clampRate","fallback","createSampler","traceRate","errorRate","random","REDACTED","cloneJson","redactPath","head","rest","scrubValue","paths","cloned","DEFAULT_SCRUB_PATHS","defaultPageProvider","randomId","cryptoApi","createTracer","bufferSize","sessionId","scrubPaths","exporters","onExporterError","pageProvider","samplerOptions","buffer","sampler","readPage","metadata","page","TraceEvent","exporter","createConsoleExporter","createGatewayExporter","flushMs","maxBatch","maxQueue","url","batchSize","queue","send","keepalive","doFetch","batch","flush","sends","sleep","ms","createWebhookExporter","maxRetries","queueLimit","readQueue","attempt","writeQueue","queueKey","DEFAULT_GATEWAY_URL","RETIRED_GATEWAY_URL","resolveGatewayUrl","provided","init","debug","policies","kind","classifyApiKey","PUBLISHABLE_KEY_PREFIX","traceEnabled","tracerOptions","tracer","emitTrace","identityStore","authOptions","auth","agentContext","policyCache","siteMemoryOptions","siteMemory","memoryCache","toolSync","detect","detectOptions","opts","legacyReviewer","progression","surfacingContext","toolDescriptions","withDescriptions","description","surfaceFor","applyToolDescriptions","descriptions","publishedKey","republish","keyOf","handleToolInvoked","fallbackWebMcpIdentity","noteWebMcpCall","adoptWebMcpAgent","visionOption","vision","autoDetectOption","ready","detectOpts","err","PolicyRuleSchema","metaTags","overlay","handles","handle","wellKnownOptions","memorySnapshot","surfaced","registrations"],"mappings":"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","file":"init-only.cjs","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 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","import type { AgentIdentity } from '@agentronics/protocol'\nimport { SDK_VERSION } from '../version.js'\n\nexport type CrawlerCategory = 'ai' | 'search'\n\nexport interface CrawlerSignature {\n /** Stable vendor id, reported as identity.vendor. */\n name: string\n category: CrawlerCategory\n /** Tested against navigator.userAgent. */\n pattern: RegExp\n}\n\n/**\n * Known AI + search crawlers, matched by User-Agent token.\n *\n * Caveats baked into the design:\n * - UA is self-reported and trivially spoofable, so a match is high-confidence\n * but never certain — we report `confidence: 0.9`, not `1`.\n * - This is client-side detection: it only sees crawlers that actually execute\n * JavaScript on the page. The majority of crawlers fetch HTML and never run\n * the SDK, so full coverage needs server/edge UA inspection (a future product).\n *\n * Order matters: more specific tokens (e.g. `Google-Extended`, `Applebot-Extended`)\n * are listed before their broader siblings so the first match wins correctly.\n */\nexport const CRAWLER_SIGNATURES: CrawlerSignature[] = [\n // AI / LLM crawlers\n { name: 'GPTBot', category: 'ai', pattern: /GPTBot/i },\n { name: 'OAI-SearchBot', category: 'ai', pattern: /OAI-SearchBot/i },\n { name: 'ChatGPT-User', category: 'ai', pattern: /ChatGPT-User/i },\n { name: 'Claude-User', category: 'ai', pattern: /Claude-User/i },\n { name: 'Claude-SearchBot', category: 'ai', pattern: /Claude-SearchBot/i },\n { name: 'ClaudeBot', category: 'ai', pattern: /ClaudeBot/i },\n { name: 'Claude-Web', category: 'ai', pattern: /Claude-Web/i },\n { name: 'anthropic-ai', category: 'ai', pattern: /anthropic-ai/i },\n { name: 'Perplexity-User', category: 'ai', pattern: /Perplexity-User/i },\n { name: 'PerplexityBot', category: 'ai', pattern: /PerplexityBot/i },\n { name: 'Google-Extended', category: 'ai', pattern: /Google-Extended/i },\n { name: 'Applebot-Extended', category: 'ai', pattern: /Applebot-Extended/i },\n { name: 'Amazonbot', category: 'ai', pattern: /Amazonbot/i },\n { name: 'Bytespider', category: 'ai', pattern: /Bytespider/i },\n { name: 'CCBot', category: 'ai', pattern: /CCBot/i },\n { name: 'Meta-ExternalAgent', category: 'ai', pattern: /Meta-ExternalAgent/i },\n { name: 'cohere-ai', category: 'ai', pattern: /cohere-ai/i },\n // Search crawlers\n { name: 'Googlebot', category: 'search', pattern: /Googlebot/i },\n { name: 'Bingbot', category: 'search', pattern: /bingbot/i },\n { name: 'DuckDuckBot', category: 'search', pattern: /DuckDuckBot/i },\n { name: 'YandexBot', category: 'search', pattern: /YandexBot/i },\n { name: 'Baiduspider', category: 'search', pattern: /Baiduspider/i },\n { name: 'Applebot', category: 'search', pattern: /Applebot/i },\n]\n\nexport interface DetectCrawlerOptions {\n /** Override the signature table (e.g. to add private/first-party crawlers). */\n signatures?: CrawlerSignature[]\n /** Skip crawler detection entirely. */\n disable?: boolean\n /** Confidence reported on a UA match. Default 0.9 (UA is spoofable). */\n confidence?: number\n}\n\n/**\n * Identify known AI/search crawlers by their User-Agent token. Returns `null`\n * when no signature matches or when there is no `navigator` (server-side).\n */\nexport const detectCrawler = (options: DetectCrawlerOptions = {}): AgentIdentity | null => {\n const { signatures = CRAWLER_SIGNATURES, disable = false, confidence = 0.9 } = options\n if (disable) return null\n if (typeof navigator === 'undefined') return null\n\n const ua = navigator.userAgent ?? ''\n if (!ua) return null\n\n for (const sig of signatures) {\n if (sig.pattern.test(ua)) {\n return {\n class: 'crawler',\n trust: 'detected',\n confidence,\n vendor: sig.name,\n userAgent: ua,\n detectionVersion: SDK_VERSION,\n signals: { matched: sig.name, category: sig.category, ua },\n }\n }\n }\n\n return null\n}\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { SDK_VERSION } from \"../version.js\"\n\ninterface SignalResult {\n hit: boolean\n weight: number\n detail?: string\n}\n\nconst HEADLESS_UA_PATTERNS = [/HeadlessChrome/i, /Headless/i, /PhantomJS/i, /SlimerJS/i]\n\nconst checkWebdriver = (): SignalResult => {\n const value =\n typeof navigator !== 'undefined' && (navigator as Navigator & { webdriver?: boolean }).webdriver\n return { hit: value === true, weight: 0.6, detail: 'navigator.webdriver === true' }\n}\n\nconst checkChromedriver = (): SignalResult => {\n if (typeof window === 'undefined') return { hit: false, weight: 0.5 }\n const keys = Object.keys(window).filter((k) => k.startsWith('cdc_'))\n return { hit: keys.length > 0, weight: 0.5, detail: `window.${keys[0] ?? 'cdc_*'}` }\n}\n\n// Globals that automation frameworks leave on the page.\nconst AUTOMATION_GLOBALS = [\n '__playwright__binding__',\n '__pwInitScripts',\n '__puppeteer_evaluation_script__',\n '_phantom',\n 'callPhantom',\n '__nightmare',\n 'domAutomation',\n 'domAutomationController',\n '__selenium_unwrapped',\n '__webdriver_evaluate',\n '__driver_evaluate',\n '__fxdriver_unwrapped',\n]\n\nconst checkAutomationGlobals = (): SignalResult => {\n if (typeof window === 'undefined') return { hit: false, weight: 0.6 }\n const found = AUTOMATION_GLOBALS.find((k) => k in window)\n return found ? { hit: true, weight: 0.6, detail: `window.${found}` } : { hit: false, weight: 0.6 }\n}\n\nconst checkPlugins = (): SignalResult => {\n if (typeof navigator === 'undefined' || !navigator.plugins) return { hit: false, weight: 0.2 }\n const desktop = /Win|Mac|Linux/.test(navigator.userAgent ?? '')\n const empty = navigator.plugins.length === 0\n return { hit: desktop && empty, weight: 0.2, detail: 'desktop UA with no plugins' }\n}\n\nconst checkHeadlessUa = (): SignalResult => {\n if (typeof navigator === 'undefined') return { hit: false, weight: 0.7 }\n const ua = navigator.userAgent ?? ''\n const hit = HEADLESS_UA_PATTERNS.some((re) => re.test(ua))\n return hit ? { hit, weight: 0.7, detail: `headless UA: ${ua}` } : { hit, weight: 0.7 }\n}\n\nconst checkLanguages = (): SignalResult => {\n if (typeof navigator === 'undefined') return { hit: false, weight: 0.15 }\n const langs = navigator.languages\n return {\n hit: !langs || langs.length === 0,\n weight: 0.15,\n detail: 'navigator.languages empty',\n }\n}\n\nconst checkPermissions = (): SignalResult => {\n if (typeof navigator === 'undefined') return { hit: false, weight: 0.1 }\n const hasChrome = 'chrome' in window\n const ua = navigator.userAgent ?? ''\n const looksChrome = /Chrome\\//.test(ua) && !/Edg\\//.test(ua)\n return {\n hit: looksChrome && !hasChrome,\n weight: 0.2,\n detail: 'Chrome UA without window.chrome',\n }\n}\n\nconst SIGNALS = {\n webdriver: checkWebdriver,\n chromedriver: checkChromedriver,\n automationGlobals: checkAutomationGlobals,\n headlessUa: checkHeadlessUa,\n languages: checkLanguages,\n permissions: checkPermissions,\n plugins: checkPlugins,\n} as const\n\nexport type DomSignalName = keyof typeof SIGNALS\n\nexport interface DetectDomOptions {\n /** Floor below which we report no DOM agent. Defaults to 0.4. */\n threshold?: number\n}\n\nexport const detectDom = (options: DetectDomOptions = {}): AgentIdentity | null => {\n const { threshold = 0.4 } = options\n\n const signals: Record<string, unknown> = {}\n let totalWeight = 0\n let hitWeight = 0\n\n for (const [name, check] of Object.entries(SIGNALS)) {\n const result = check()\n totalWeight += result.weight\n signals[name] = { hit: result.hit, weight: result.weight, detail: result.detail }\n if (result.hit) hitWeight += result.weight\n }\n\n const confidence = totalWeight === 0 ? 0 : hitWeight / totalWeight\n if (confidence < threshold) return null\n\n return {\n class: 'dom',\n trust: 'detected',\n confidence,\n vendor: null,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals,\n }\n}\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { detectDom } from '../dom.js'\nimport { detectCrawler } from '../crawler.js'\nimport { detectWebMcp } from '../webmcp.js'\n\nexport type DetectorStatus = 'stable' | 'beta' | 'research'\n\nexport interface Detector {\n id: string\n status: DetectorStatus\n detect(): AgentIdentity | null | Promise<AgentIdentity | null>\n}\n\nexport const bundledDetectors = (): Detector[] => [\n {\n id: 'webmcp.model-context',\n status: 'stable',\n detect: () => detectWebMcp({ pollMs: 0 }),\n },\n {\n id: 'crawler.user-agent',\n status: 'beta',\n detect: () => detectCrawler(),\n },\n {\n id: 'dom.automation-heuristics',\n status: 'beta',\n detect: () => detectDom(),\n },\n]\n\nexport const createDetectorRegistry = (initial: Detector[] = bundledDetectors()) => {\n const detectors = new Map(initial.map((detector) => [detector.id, detector]))\n\n return {\n register(detector: Detector) {\n detectors.set(detector.id, detector)\n },\n list(status?: DetectorStatus): Detector[] {\n const all = [...detectors.values()]\n return status ? all.filter((detector) => detector.status === status) : all\n },\n async detectAll(includeResearch = false): Promise<AgentIdentity | null> {\n for (const detector of detectors.values()) {\n if (detector.status === 'research' && !includeResearch) continue\n const identity = await detector.detect()\n if (identity) return identity\n }\n return null\n },\n }\n}\n\nexport type DetectorRegistry = ReturnType<typeof createDetectorRegistry>\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { detectWebMcp, type DetectWebMcpOptions } from './webmcp.js'\nimport { detectCrawler, type DetectCrawlerOptions } from './crawler.js'\nimport { detectDom, type DetectDomOptions } from './dom.js'\nimport { createDetectorRegistry, type Detector } from './detectors/registry.js'\n\nexport interface DetectAgentOptions {\n webmcp?: DetectWebMcpOptions | false\n crawler?: DetectCrawlerOptions | false\n dom?: DetectDomOptions | false\n customDetectors?: Detector[]\n experimental?: boolean\n}\n\n/**\n * Run the full detection pipeline. WebMCP wins if present (exact match), then a\n * known-crawler User-Agent match, then DOM automation heuristics. Returns `null`\n * if no agent class fires above its threshold — caller should treat as \"human or\n * undetectable agent.\"\n */\nexport const detectAgent = async (\n options: DetectAgentOptions = {}\n): Promise<AgentIdentity | null> => {\n if (options.customDetectors?.length) {\n const custom = await createDetectorRegistry(options.customDetectors).detectAll(Boolean(options.experimental))\n if (custom) return custom\n }\n if (options.webmcp !== false) {\n const webmcp = await detectWebMcp(options.webmcp ?? {})\n if (webmcp) return webmcp\n }\n if (options.crawler !== false) {\n const crawler = detectCrawler(options.crawler ?? {})\n if (crawler) return crawler\n }\n if (options.dom !== false) {\n const dom = detectDom(options.dom ?? {})\n if (dom) return dom\n }\n return null\n}\n\nexport { detectWebMcp } from './webmcp.js'\nexport type { DetectWebMcpOptions } from './webmcp.js'\nexport { detectDom } from './dom.js'\nexport type { DetectDomOptions, DomSignalName } from './dom.js'\nexport { detectCrawler, CRAWLER_SIGNATURES } from './crawler.js'\nexport type { DetectCrawlerOptions, CrawlerSignature, CrawlerCategory } from './crawler.js'\nexport { declareAgent } from './declare.js'\nexport type { DeclareAgentInput } from './declare.js'\nexport { createDetectorRegistry, bundledDetectors } from './detectors/registry.js'\nexport type { Detector, DetectorRegistry, DetectorStatus } from './detectors/registry.js'\nexport { createSignatureLoader } from './detectors/signatureLoader.js'\nexport type { DetectorSignature, SignatureLoader } from './detectors/signatureLoader.js'\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { SDK_VERSION } from '../version.js'\n\n/**\n * Vision-model (\"screenshot\") agents — computer-use agents that look at\n * screenshots and drive a real browser with synthetic mouse and keyboard\n * input (ChatGPT agent, Claude computer use, Gemini computer use, …).\n *\n * They run in ordinary browsers, so DOM automation flags often don't fire.\n * What gives them away is how they interact:\n *\n * - **teleport clicks** — a click with no pointer movement leading up to it\n * (the cursor jumps straight to the coordinates the model picked);\n * - **centre clicks** — clicks landing within a pixel or two of an element's\n * exact centre, again and again;\n * - **metronome typing** — key intervals with almost no variance, or text\n * inserted with no key events at all;\n * - **no hover or wheel** — clicks and scroll jumps without any mousemove or\n * wheel activity in between;\n * - **VM-shaped viewport** — exact sizes agent sandboxes use (1024×768, 1280×800…).\n *\n * Each signal is weak alone. The monitor scores them over a short window and\n * reports a `screenshot` agent only when several agree after enough\n * interactions. It reads event coordinates and timing only — never key values\n * or text.\n */\n\nexport interface VisionDetectorOptions {\n /** Score (0–1) at which to report an agent. Default 0.6. */\n threshold?: number\n /** Interactions (clicks + typing bursts) needed before scoring. Default 3. */\n minInteractions?: number\n documentRef?: Document\n /** Called once, when the score first crosses the threshold. */\n onDetect?: (identity: AgentIdentity) => void\n /** @internal Tests only: count synthetic (isTrusted=false) events. */\n acceptUntrustedEvents?: boolean\n}\n\nexport interface VisionSignals {\n clicks: number\n teleportClicks: number\n centreClicks: number\n keyIntervals: number\n keyIntervalCv: number | null\n insertWithoutKeys: number\n pointerMoves: number\n wheelEvents: number\n vmViewport: boolean\n}\n\nconst VM_VIEWPORTS = new Set(['1024x768', '1280x800', '1280x720', '1280x1024', '1440x900', '1920x1080'])\n// Window sizes humans rarely hit exactly when the page fills a maximised\n// browser; agent sandboxes set them precisely. Only counts with other signals.\n\nconst coefficientOfVariation = (values: number[]): number | null => {\n if (values.length < 6) return null\n const mean = values.reduce((s, v) => s + v, 0) / values.length\n if (mean <= 0) return null\n const variance = values.reduce((s, v) => s + (v - mean) ** 2, 0) / values.length\n return Math.sqrt(variance) / mean\n}\n\n/** 0–1 score from the collected signals (exported for tests and the console's explanation). */\nexport const scoreVisionSignals = (s: VisionSignals): number => {\n let score = 0\n if (s.clicks >= 2) {\n score += 0.35 * (s.teleportClicks / s.clicks)\n score += 0.25 * (s.centreClicks / s.clicks)\n if (s.pointerMoves === 0) score += 0.15\n }\n if (s.keyIntervalCv !== null && s.keyIntervalCv < 0.15) score += 0.2\n if (s.insertWithoutKeys > 0) score += 0.15\n if (s.wheelEvents === 0 && s.clicks >= 3) score += 0.05\n if (s.vmViewport) score += 0.1\n return Math.min(1, score)\n}\n\n/**\n * Watch the page for vision-agent interaction patterns. Returns a handle with\n * the live signals and score; `onDetect` fires once when the threshold is met.\n */\nexport const createVisionDetector = (options: VisionDetectorOptions = {}) => {\n const { threshold = 0.6, minInteractions = 3, onDetect, acceptUntrustedEvents = false } = options\n const trusted = (e: Event) => e.isTrusted || acceptUntrustedEvents\n const doc = options.documentRef ?? (typeof document === 'undefined' ? undefined : document)\n const signals: VisionSignals = {\n clicks: 0,\n teleportClicks: 0,\n centreClicks: 0,\n keyIntervals: 0,\n keyIntervalCv: null,\n insertWithoutKeys: 0,\n pointerMoves: 0,\n wheelEvents: 0,\n vmViewport: false,\n }\n let lastMoveAt = Number.NEGATIVE_INFINITY\n let lastKeyAt = 0\n let lastKeyDownAt = 0\n const intervals: number[] = []\n let typingBursts = 0\n let reported: AgentIdentity | null = null\n\n const view = doc?.defaultView\n if (view) signals.vmViewport = VM_VIEWPORTS.has(`${view.innerWidth}x${view.innerHeight}`)\n\n const identity = (score: number): AgentIdentity => ({\n class: 'screenshot',\n trust: 'detected',\n confidence: Number(score.toFixed(2)),\n vendor: null,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: { vision: true, ...signals },\n })\n\n const evaluate = () => {\n if (reported || signals.clicks + typingBursts < minInteractions) return\n const score = scoreVisionSignals(signals)\n if (score >= threshold) {\n reported = identity(score)\n onDetect?.(reported)\n }\n }\n\n const onMove = (e: Event) => {\n if (!trusted(e)) return\n signals.pointerMoves += 1\n lastMoveAt = e.timeStamp\n }\n const onWheel = (e: Event) => {\n if (trusted(e)) signals.wheelEvents += 1\n }\n const onClick = (e: Event) => {\n if (!trusted(e)) return // scripted clicks are DOM automation, not vision agents\n const m = e as MouseEvent\n signals.clicks += 1\n if (e.timeStamp - lastMoveAt > 400) signals.teleportClicks += 1\n const target = m.target instanceof Element ? m.target : null\n if (target && typeof target.getBoundingClientRect === 'function') {\n const r = target.getBoundingClientRect()\n if (r.width > 8 && r.height > 8) {\n const dx = Math.abs(m.clientX - (r.left + r.width / 2))\n const dy = Math.abs(m.clientY - (r.top + r.height / 2))\n if (dx <= 1.5 && dy <= 1.5) signals.centreClicks += 1\n }\n }\n evaluate()\n }\n const onKeyDown = (e: Event) => {\n if (!trusted(e)) return\n const t = e.timeStamp\n if (lastKeyAt && t - lastKeyAt < 1500) {\n intervals.push(t - lastKeyAt)\n if (intervals.length > 60) intervals.shift()\n signals.keyIntervals = intervals.length\n signals.keyIntervalCv = coefficientOfVariation(intervals)\n } else {\n typingBursts += 1\n }\n lastKeyAt = t\n lastKeyDownAt = t\n }\n const onInput = (e: Event) => {\n if (!trusted(e)) return\n const ie = e as InputEvent\n // Text inserted with no keydown just before it: CDP Input.insertText / IME-less paste-free typing.\n if (ie.inputType === 'insertText' && ie.data && ie.data.length > 1 && e.timeStamp - lastKeyDownAt > 200) {\n signals.insertWithoutKeys += 1\n typingBursts += 1\n evaluate()\n }\n }\n const onKeyUp = () => evaluate()\n\n const listeners: Array<[string, (e: Event) => void]> = [\n ['pointermove', onMove],\n ['mousemove', onMove],\n ['wheel', onWheel],\n ['click', onClick],\n ['keydown', onKeyDown],\n ['keyup', onKeyUp],\n ['input', onInput],\n ]\n for (const [type, fn] of listeners) doc?.addEventListener(type, fn, { capture: true, passive: true })\n\n return {\n signals: (): VisionSignals => ({ ...signals }),\n score: () => scoreVisionSignals(signals),\n detected: () => reported,\n stop: () => {\n for (const [type, fn] of listeners) doc?.removeEventListener(type, fn, { capture: true })\n },\n }\n}\n\nexport type VisionDetector = ReturnType<typeof createVisionDetector>\n","import {\n AgentronicsError,\n IdentityClaim,\n isHigherTrust,\n type AgentIdentity,\n type IdentityClaim as IdentityClaimType,\n} from '@agentronics/protocol'\nimport { SDK_VERSION } from '../version.js'\n\nexport interface PresentIdentityOptions extends IdentityClaimType {\n /**\n * If false, accept the claim as `declared` (no remote verification).\n * If true, the claim is staged for the gateway to verify; trust is `declared` until then.\n */\n verifyRemotely?: boolean\n}\n\nexport interface PresentedIdentity {\n identity: AgentIdentity\n claim: IdentityClaimType\n}\n\nconst buildIdentity = (claim: IdentityClaimType): AgentIdentity => ({\n class: claim.class,\n trust: 'declared',\n confidence: 1,\n vendor: claim.vendor,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n declared: true,\n hasToken: true,\n tokenExpiresAt: claim.expiresAt ?? null,\n },\n})\n\nexport const createIdentityStore = () => {\n let presented: PresentedIdentity | null = null\n\n return {\n present(input: PresentIdentityOptions): PresentedIdentity {\n const parsed = IdentityClaim.safeParse(input)\n if (!parsed.success) {\n throw new AgentronicsError(\n 'invalid_api_key',\n `Invalid identity claim: ${parsed.error.issues[0]?.message ?? 'unknown'}`\n )\n }\n const next: PresentedIdentity = {\n claim: parsed.data,\n identity: buildIdentity(parsed.data),\n }\n presented = next\n return next\n },\n\n clear() {\n presented = null\n },\n\n /** Return the presented identity if it outranks the supplied detection. */\n preferOver(detected: AgentIdentity | null): AgentIdentity | null {\n if (!presented) return detected\n if (!detected) return presented.identity\n return isHigherTrust(presented.identity.trust, detected.trust)\n ? presented.identity\n : detected\n },\n\n snapshot(): PresentedIdentity | null {\n return presented\n },\n }\n}\n\nexport type IdentityStore = ReturnType<typeof createIdentityStore>\n","import { TRUST_RANK, type TrustLevel } from '@agentronics/protocol'\n\nexport interface TrustDerivationInput {\n detected?: boolean\n declared?: boolean\n verified?: boolean\n linked?: boolean\n}\n\nexport const deriveTrustLevel = ({\n detected,\n declared,\n verified,\n linked,\n}: TrustDerivationInput): TrustLevel => {\n if (linked) return 'linked'\n if (verified) return 'verified'\n if (declared) return 'declared'\n if (detected) return 'detected'\n return 'detected'\n}\n\nexport const highestTrust = <T extends { trust: TrustLevel }>(identities: T[]): T | null => {\n let best: T | null = null\n for (const identity of identities) {\n if (!best || TRUST_RANK[identity.trust] > TRUST_RANK[best.trust]) best = identity\n }\n return best\n}\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\nexport const bearer = (): AuthMethod => ({\n name: 'bearer',\n async authenticate(input, context) {\n if (!input.bearerToken) return null\n const verified = await context.verifyToken?.('bearer', input.bearerToken)\n return {\n class: input.classHint ?? 'dom',\n // Nothing checked the token → only a claim. A verifier (auth.verifyToken) decides the real trust.\n trust: verified?.trust ?? 'declared',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'bearer',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: { bearer: true, verifiedRemotely: Boolean(verified) },\n }\n },\n})\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport type { AuthMethod } from '../engine.js'\n\nexport const detectionAsAuth = (): AuthMethod => ({\n name: 'detection',\n async authenticate(input) {\n return input.detected ?? null\n },\n})\n\nexport const cloneDetectedIdentity = (identity: AgentIdentity): AgentIdentity => ({\n ...identity,\n signals: { ...identity.signals },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\nexport const extensionToken = (): AuthMethod => ({\n name: 'extensionToken',\n async authenticate(input, context) {\n if (!input.extensionToken) return null\n const verified = await context.verifyToken?.('extensionToken', input.extensionToken)\n return {\n class: 'dom',\n // Nothing checked the token → only a claim. A verifier (auth.verifyToken) decides the real trust.\n trust: verified?.trust ?? 'declared',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'browser-extension',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: { extensionToken: true, verifiedRemotely: Boolean(verified) },\n }\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\n// mTLS via x-forwarded-client-cert (XFCC). Browser builds never trigger\n// this — JavaScript cannot inspect its own TLS state. Node companions\n// forward the XFCC header value verbatim and the gateway parses + chain-\n// validates against the site's registered roots (D2 policy applies for\n// multi-entry headers). If the XFCC URI SAN carries a `spiffe://` value\n// it is lifted into `signals.spiffeId` so dashboard pivots can correlate\n// X.509-SVID traffic with JWT-SVID traffic from the same workload.\nexport const mtls = (): AuthMethod => ({\n name: 'mtls',\n async authenticate(input, context) {\n if (!input.xfccHeader) return null\n const verified = await context.verifyToken?.('mtls', input.xfccHeader)\n return {\n class: input.classHint ?? 'webmcp',\n // Nothing checked the token → only a claim. A verifier (auth.verifyToken) decides the real trust.\n trust: verified?.trust ?? 'declared',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'mtls',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n mtls: true,\n subject: verified?.subject ?? null,\n verifiedRemotely: Boolean(verified),\n ...(verified?.signals ?? {}),\n },\n }\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\nexport const oauth2 = (): AuthMethod => ({\n name: 'oauth2',\n async authenticate(input, context) {\n if (!input.oauth2AccessToken) return null\n const verified = await context.verifyToken?.('oauth2', input.oauth2AccessToken)\n return {\n class: input.classHint ?? 'webmcp',\n // A user subject only links the session once a verifier has accepted the token.\n trust: verified ? (input.oauth2Subject && verified.trust !== 'detected' && verified.trust !== 'declared' ? 'linked' : verified.trust) : 'declared',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'oauth2',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n oauth2: true,\n subject: input.oauth2Subject ?? null,\n verifiedRemotely: Boolean(verified),\n },\n }\n },\n})\n","import {\n IdentityClaim,\n type AgentIdentity,\n type IdentityClaim as IdentityClaimRecord,\n} from '@agentronics/protocol'\nimport type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from '../../version.js'\n\nconst identityFromClaim = (claim: IdentityClaimRecord): AgentIdentity => ({\n class: claim.class,\n trust: 'declared',\n confidence: 1,\n vendor: claim.vendor,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n declared: true,\n hasToken: true,\n tokenExpiresAt: claim.expiresAt ?? null,\n },\n})\n\nexport const selfDeclaration = (): AuthMethod => ({\n name: 'selfDeclaration',\n async authenticate(input) {\n if (!input.declaration) return null\n return identityFromClaim(IdentityClaim.parse(input.declaration))\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\nexport const sessionLink = (): AuthMethod => ({\n name: 'sessionLink',\n async authenticate(input, context) {\n if (!input.sessionLinkToken) return null\n const verified = await context.verifyToken?.('sessionLink', input.sessionLinkToken)\n return {\n class: input.classHint ?? 'screenshot',\n trust: verified ? (input.linkedUserId && verified.trust !== 'detected' && verified.trust !== 'declared' ? 'linked' : verified.trust) : 'declared',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'session-link',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n sessionLink: true,\n linkedUserId: input.linkedUserId ?? null,\n verifiedRemotely: Boolean(verified),\n },\n }\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\n// Workforce SSO via OIDC ID tokens. Browser/Node SDKs forward the ID\n// token to the gateway's POST /v1/verify/sso route, which validates the\n// JWT signature + claims against the customer-configured IdP discovery\n// document. SAML is intentionally out of scope for v1.\nexport const sso = (): AuthMethod => ({\n name: 'sso',\n async authenticate(input, context) {\n if (!input.ssoIdToken) return null\n const verified = await context.verifyToken?.('sso', input.ssoIdToken)\n return {\n class: input.classHint ?? 'dom',\n // Nothing checked the token → only a claim. A verifier (auth.verifyToken) decides the real trust.\n trust: verified?.trust ?? 'declared',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'sso',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n sso: true,\n subject: verified?.subject ?? null,\n verifiedRemotely: Boolean(verified),\n ...(verified?.signals ?? {}),\n },\n }\n },\n})\n","import type { AuthMethod } from '../engine.js'\nimport { SDK_VERSION } from \"../../version.js\"\n\n// SPIFFE JWT-SVID verification. The gateway validates against the site's\n// configured SPIFFE Bundle (JWKS with `use: \"jwt-svid\"`) and returns the\n// SPIFFE ID as `verified.subject`. When the trust domain matches one of\n// the customer-configured Google trust domains (D1), the verifier sets\n// `vendor: 'google'` so we surface `googleAgent: true` and the engine\n// emits `protocol: 'google-agent'` on the trace instead of 'spiffe'.\nexport const spiffe = (): AuthMethod => ({\n name: 'spiffe',\n async authenticate(input, context) {\n if (!input.spiffeJwt) return null\n const verified = await context.verifyToken?.('spiffe', input.spiffeJwt)\n const isGoogleFlavor = verified?.vendor === 'google'\n return {\n class: input.classHint ?? 'webmcp',\n // Nothing checked the token → only a claim. A verifier (auth.verifyToken) decides the real trust.\n trust: verified?.trust ?? 'declared',\n confidence: 1,\n vendor: verified?.vendor ?? input.vendorHint ?? 'spiffe',\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n spiffe: true,\n spiffeId: verified?.subject ?? null,\n subject: verified?.subject ?? null,\n verifiedRemotely: Boolean(verified),\n ...(isGoogleFlavor ? { googleAgent: true } : {}),\n ...(verified?.signals ?? {}),\n },\n }\n },\n})\n","import { AgentClass } from '@agentronics/protocol'\nimport { SDK_VERSION } from \"../../version.js\"\nimport type { AuthMethod } from '../engine.js'\n\nexport const xAgentHeader = (): AuthMethod => ({\n name: 'xAgentHeader',\n async authenticate(input) {\n if (!input.xAgentHeader) return null\n const [vendor = 'x-agent', rawClass = 'dom', proof] = input.xAgentHeader.split(';')\n const parsedClass = AgentClass.safeParse(rawClass)\n\n return {\n class: parsedClass.success ? parsedClass.data : 'dom',\n // The proof segment is not checked client-side, so the header is a claim.\n trust: 'declared',\n confidence: proof ? 1 : 0.8,\n vendor,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: { xAgentHeader: true, hasProof: Boolean(proof) },\n }\n },\n})\n","import type {\n AgentClass,\n AgentIdentity,\n AuthProtocol,\n IdentityClaim,\n VerificationResult,\n} from '@agentronics/protocol'\nimport type { TraceInput } from '../observability/tracer.js'\nimport { highestTrust } from './trustLevel.js'\nimport { bearer } from './methods/bearer.js'\nimport { detectionAsAuth } from './methods/detectionAsAuth.js'\nimport { extensionToken } from './methods/extensionToken.js'\nimport { mtls } from './methods/mtls.js'\nimport { oauth2 } from './methods/oauth2.js'\nimport { selfDeclaration } from './methods/selfDeclaration.js'\nimport { sessionLink } from './methods/sessionLink.js'\nimport { sso } from './methods/sso.js'\nimport { spiffe } from './methods/spiffe.js'\nimport { xAgentHeader } from './methods/xAgentHeader.js'\n\nexport type AuthMethodName =\n | 'detection'\n | 'selfDeclaration'\n | 'bearer'\n | 'xAgentHeader'\n | 'extensionToken'\n | 'sessionLink'\n | 'oauth2'\n | 'sso'\n | 'spiffe'\n | 'mtls'\n\nexport interface AuthInput {\n detected?: AgentIdentity | null\n declaration?: IdentityClaim\n bearerToken?: string\n xAgentHeader?: string\n extensionToken?: string\n sessionLinkToken?: string\n linkedUserId?: string\n oauth2AccessToken?: string\n oauth2Subject?: string\n ssoIdToken?: string\n spiffeJwt?: string\n xfccHeader?: string\n vendorHint?: string\n classHint?: AgentClass\n}\n\nexport interface AuthContext {\n verifyToken?: (\n method: Exclude<AuthMethodName, 'detection' | 'selfDeclaration' | 'xAgentHeader'>,\n token: string\n ) => Promise<VerificationResult | null>\n}\n\nexport interface AuthMethod {\n name: AuthMethodName\n authenticate(input: AuthInput, context: AuthContext): Promise<AgentIdentity | null>\n}\n\nexport interface AuthEngineOptions {\n methods?: AuthMethod[]\n context?: AuthContext\n onTrace?: (input: TraceInput) => void\n /**\n * `'0.6'` restores the pre-0.7 behaviour: tokens nothing has verified count\n * as `verified` (or `linked` with a user id), and SSO / SPIFFE / mTLS are in\n * the default methods. Insecure — for upgrading without changes; remove it\n * once `auth.verifyToken` is wired. See the 0.7 upgrade guide.\n */\n compat?: '0.6'\n /** Called once, the first time a credential arrives with no verifier configured. */\n onUnverifiedToken?: (method: AuthMethodName) => void\n}\n\nconst TOKEN_METHODS = new Set<AuthMethodName>(['bearer', 'extensionToken', 'sessionLink', 'oauth2', 'sso', 'spiffe', 'mtls'])\n\n/** Pre-0.7 trust for an identity no verifier checked (compat '0.6' only). */\nconst legacyTrust = (method: AuthMethodName, identity: AgentIdentity, input: AuthInput): AgentIdentity => {\n if (TOKEN_METHODS.has(method) && identity.signals?.verifiedRemotely === false) {\n const linked = (method === 'oauth2' && input.oauth2Subject) || (method === 'sessionLink' && input.linkedUserId)\n return { ...identity, trust: linked ? 'linked' : 'verified', signals: { ...identity.signals, compat: '0.6' } }\n }\n if (method === 'xAgentHeader' && identity.signals?.hasProof === true) {\n return { ...identity, trust: 'verified', confidence: 1, signals: { ...identity.signals, compat: '0.6' } }\n }\n return identity\n}\n\n/**\n * Methods on by default. SSO, SPIFFE (incl. Google Agent Identity) and mTLS are\n * kept but off until they ship — pass `methods: [...defaultAuthMethods(),\n * ...previewAuthMethods()]` to try them.\n */\nexport const defaultAuthMethods = (): AuthMethod[] => [\n detectionAsAuth(),\n selfDeclaration(),\n bearer(),\n xAgentHeader(),\n extensionToken(),\n sessionLink(),\n oauth2(),\n]\n\n/** Coming later: enterprise agent SSO, workload identity (SPIFFE) and mTLS. */\nexport const previewAuthMethods = (): AuthMethod[] => [sso(), spiffe(), mtls()]\n\n// Method-name → dashboard-facing AuthProtocol label. The spiffe method\n// can override its emitted label to 'google-agent' by setting\n// `signals.googleAgent = true` (see methods/spiffe.ts) — that branch is\n// handled in resolveTraceProtocol() below.\nconst METHOD_TO_PROTOCOL: Record<AuthMethodName, AuthProtocol> = {\n detection: 'detection',\n selfDeclaration: 'declaration',\n bearer: 'bearer',\n xAgentHeader: 'x-agent-header',\n extensionToken: 'extension',\n sessionLink: 'session-link',\n oauth2: 'oauth2',\n sso: 'sso',\n spiffe: 'spiffe',\n mtls: 'mtls',\n}\n\nconst resolveTraceProtocol = (\n methodName: AuthMethodName,\n identity: AgentIdentity\n): AuthProtocol => {\n if (methodName === 'spiffe' && identity.signals?.googleAgent === true) {\n return 'google-agent'\n }\n return METHOD_TO_PROTOCOL[methodName]\n}\n\nexport const createAuthEngine = ({\n compat,\n methods = compat === '0.6' ? [...defaultAuthMethods(), ...previewAuthMethods()] : defaultAuthMethods(),\n context = {},\n onTrace,\n onUnverifiedToken,\n}: AuthEngineOptions = {}) => {\n let warned = false\n return {\n async authenticate(input: AuthInput): Promise<AgentIdentity | null> {\n const identities: Array<{ method: AuthMethodName; identity: AgentIdentity }> = []\n const methodResults: Record<string, boolean> = {}\n\n for (const method of methods) {\n let identity = await method.authenticate(input, context)\n methodResults[method.name] = Boolean(identity)\n if (!identity) continue\n if (TOKEN_METHODS.has(method.name) && identity.signals?.verifiedRemotely === false && !context.verifyToken && !warned) {\n warned = true\n onUnverifiedToken?.(method.name)\n }\n if (compat === '0.6') identity = legacyTrust(method.name, identity, input)\n identities.push({ method: method.name, identity })\n }\n\n const winner = highestTrust(identities.map((entry) => entry.identity))\n const winnerEntry = winner\n ? identities.find((entry) => entry.identity === winner)\n : undefined\n const protocol = winnerEntry\n ? resolveTraceProtocol(winnerEntry.method, winnerEntry.identity)\n : undefined\n const subject =\n typeof winner?.signals?.subject === 'string' ? winner.signals.subject : undefined\n\n const trace: TraceInput = {\n type: winner ? 'auth.identity_presented' : 'sdk.error',\n agent: winner,\n outcome: winner ? 'success' : 'error',\n metadata: {\n methods: methodResults,\n ...(protocol ? { protocol } : {}),\n ...(subject ? { subject } : {}),\n },\n }\n if (!winner) trace.error = 'No auth method produced an identity.'\n onTrace?.(trace)\n return winner\n },\n\n methods(): AuthMethodName[] {\n return methods.map((method) => method.name)\n },\n }\n}\n\nexport type AuthEngine = ReturnType<typeof createAuthEngine>\n","import type { AgentIdentity } from '@agentronics/protocol'\n\nexport interface AgentContextSnapshot {\n identity: AgentIdentity | null\n source: 'detect' | 'declare' | 'authenticate' | 'cleared' | 'initial'\n updatedAt: string | null\n}\n\nexport type AgentContextListener = (snapshot: AgentContextSnapshot) => void\n\nconst INITIAL: AgentContextSnapshot = {\n identity: null,\n source: 'initial',\n updatedAt: null,\n}\n\nexport const createAgentContextStore = () => {\n let state: AgentContextSnapshot = INITIAL\n const listeners = new Set<AgentContextListener>()\n\n const notify = () => {\n if (listeners.size === 0) return\n listeners.forEach((listener) => listener(state))\n }\n\n return {\n snapshot(): AgentContextSnapshot {\n return state\n },\n set(identity: AgentIdentity | null, source: AgentContextSnapshot['source']) {\n state = { identity, source, updatedAt: new Date().toISOString() }\n notify()\n },\n subscribe(listener: AgentContextListener): () => void {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n }\n}\n\nexport type AgentContextStore = ReturnType<typeof createAgentContextStore>\n","export interface RateLimitRule {\n max: number\n windowSeconds: number\n}\n\nexport interface RateLimitResult {\n allowed: boolean\n remaining: number\n resetAt: number\n}\n\ninterface Bucket {\n count: number\n resetAt: number\n}\n\nexport interface RateLimiterStorage {\n read(key: string): string | null\n write(key: string, value: string): void\n}\n\nconst memoryStorage = (): RateLimiterStorage => {\n const map = new Map<string, string>()\n return {\n read: (key) => map.get(key) ?? null,\n write: (key, value) => {\n map.set(key, value)\n },\n }\n}\n\nconst browserStorage = (): RateLimiterStorage => {\n if (typeof window === 'undefined' || !window.localStorage) return memoryStorage()\n return {\n read: (key) => {\n try {\n return window.localStorage.getItem(key)\n } catch {\n return null\n }\n },\n write: (key, value) => {\n try {\n window.localStorage.setItem(key, value)\n } catch {\n // Quota/storage failures should not crash policy evaluation.\n }\n },\n }\n}\n\nconst decode = (raw: string | null): Bucket | null => {\n if (!raw) return null\n try {\n const parsed = JSON.parse(raw) as Bucket\n if (\n typeof parsed === 'object' &&\n parsed !== null &&\n Number.isFinite(parsed.count) &&\n Number.isFinite(parsed.resetAt)\n ) {\n return parsed\n }\n } catch {\n return null\n }\n return null\n}\n\nexport const createRateLimiter = (storage: RateLimiterStorage = browserStorage()) => ({\n consume(key: string, rule: RateLimitRule, now = Date.now()): RateLimitResult {\n const storageKey = `agtx:rate:${key}`\n const existing = decode(storage.read(storageKey))\n const resetAt =\n existing && existing.resetAt > now ? existing.resetAt : now + rule.windowSeconds * 1000\n const count = existing && existing.resetAt > now ? existing.count + 1 : 1\n storage.write(storageKey, JSON.stringify({ count, resetAt }))\n\n return {\n allowed: count <= rule.max,\n remaining: Math.max(0, rule.max - count),\n resetAt,\n }\n },\n})\n\nexport type RateLimiter = ReturnType<typeof createRateLimiter>\n","import {\n PolicyRule,\n TRUST_RANK,\n type AgentIdentity,\n type PolicyDecision,\n type PolicyEvaluation,\n type PolicyRule as PolicyRuleType,\n} from '@agentronics/protocol'\nimport { createRateLimiter, type RateLimiter } from './rateLimiter.js'\n\nconst matchTool = (pattern: string, tool: string): boolean => {\n if (pattern === '*' || pattern === tool) return true\n if (!pattern.includes('*')) return false\n const regex = new RegExp('^' + pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '.*') + '$')\n return regex.test(tool)\n}\n\nconst meetsTrust = (identity: AgentIdentity | null, rule: PolicyRuleType): boolean => {\n const have = identity ? TRUST_RANK[identity.trust] : -1\n const need = TRUST_RANK[rule.minTrust]\n return have >= need\n}\n\nconst meetsClass = (identity: AgentIdentity | null, rule: PolicyRuleType): boolean => {\n if (rule.allowedClasses.length === 0) return true\n if (!identity) return false\n return rule.allowedClasses.includes(identity.class)\n}\n\n// No matching rule means the site hasn't restricted the tool: it stays callable.\nconst DEFAULT_DECISION: PolicyDecision = 'allow'\n\nexport interface EvaluateInput {\n tool: string\n identity: AgentIdentity | null\n}\n\nconst rateLimitKey = (tool: string, identity: AgentIdentity | null): string => {\n const classPart = identity?.class ?? 'unknown'\n const vendorPart = identity?.vendor ?? 'unknown'\n const trustPart = identity?.trust ?? 'none'\n return `${tool}:${classPart}:${vendorPart}:${trustPart}`\n}\n\nexport interface PolicyEngineOptions {\n rateLimiter?: RateLimiter\n}\n\nexport const createPolicyEngine = (\n initial: PolicyRuleType[] = [],\n options: PolicyEngineOptions = {}\n) => {\n let rules: PolicyRuleType[] = initial.map((rule) => PolicyRule.parse(rule))\n const rateLimiter = options.rateLimiter ?? createRateLimiter()\n\n return {\n set(next: PolicyRuleType[]) {\n rules = next.map((rule) => PolicyRule.parse(rule))\n },\n\n list(): PolicyRuleType[] {\n return [...rules]\n },\n\n evaluate({ tool, identity }: EvaluateInput): PolicyEvaluation {\n for (const rule of rules) {\n if (!matchTool(rule.tool, tool)) continue\n if (!meetsTrust(identity, rule)) {\n return {\n decision: 'deny',\n ruleId: rule.id,\n reason: `Rule \"${rule.id}\" requires trust >= ${rule.minTrust}.`,\n }\n }\n if (!meetsClass(identity, rule)) {\n return {\n decision: 'deny',\n ruleId: rule.id,\n reason: `Rule \"${rule.id}\" restricts to classes: ${rule.allowedClasses.join(', ')}.`,\n }\n }\n if (rule.rateLimit) {\n const rate = rateLimiter.consume(rateLimitKey(tool, identity), rule.rateLimit)\n if (!rate.allowed) {\n return {\n decision: 'deny',\n ruleId: rule.id,\n reason: `Rule \"${rule.id}\" rate limit exceeded. Resets at ${new Date(rate.resetAt).toISOString()}.`,\n }\n }\n }\n return {\n decision: rule.decision,\n ruleId: rule.id,\n reason: `Matched rule \"${rule.id}\".`,\n }\n }\n return {\n decision: DEFAULT_DECISION,\n ruleId: null,\n reason: `No rule matched tool \"${tool}\". Falling back to \"${DEFAULT_DECISION}\".`,\n }\n },\n }\n}\n\nexport type PolicyEngine = ReturnType<typeof createPolicyEngine>\n","import { PolicyRule, type PolicyRule as PolicyRuleRecord } from '@agentronics/protocol'\n\nexport interface PolicyCacheOptions {\n gatewayUrl: string\n siteId: string\n publishableKey: string\n fetcher?: typeof fetch\n}\n\nexport interface PolicyCacheSnapshot {\n policies: PolicyRuleRecord[]\n etag: string | null\n}\n\nexport const createPolicyCache = ({\n gatewayUrl,\n siteId,\n publishableKey,\n fetcher = fetch,\n}: PolicyCacheOptions) => {\n let snapshot: PolicyCacheSnapshot = { policies: [], etag: null }\n\n return {\n snapshot(): PolicyCacheSnapshot {\n return {\n policies: [...snapshot.policies],\n etag: snapshot.etag,\n }\n },\n\n async sync(): Promise<PolicyCacheSnapshot> {\n const response = await fetcher(\n `${gatewayUrl.replace(/\\/$/, '')}/v1/pub/sites/${encodeURIComponent(siteId)}/policies`,\n {\n headers: {\n authorization: `Bearer ${publishableKey}`,\n ...(snapshot.etag ? { 'if-none-match': snapshot.etag } : {}),\n },\n }\n )\n if (response.status === 304) return this.snapshot()\n if (!response.ok) throw new Error(`Policy sync failed with status ${response.status}.`)\n\n const body = (await response.json()) as { policies?: unknown }\n const policies = PolicyRule.array().parse(body.policies ?? [])\n snapshot = {\n policies,\n etag: response.headers.get('etag'),\n }\n return this.snapshot()\n },\n }\n}\n\nexport type PolicyCache = ReturnType<typeof createPolicyCache>\n","export interface DenyOverlayOptions {\n message?: string\n durationMs?: number\n documentRef?: Document\n}\n\nexport const showDenyOverlay = ({\n message = 'Agent action blocked by site policy.',\n durationMs = 2400,\n documentRef = typeof document === 'undefined' ? undefined : document,\n}: DenyOverlayOptions = {}) => {\n if (!documentRef?.body) return null\n\n const node = documentRef.createElement('div')\n node.setAttribute('role', 'status')\n node.setAttribute('data-agentronics-deny-overlay', 'true')\n node.textContent = message\n Object.assign(node.style, {\n position: 'fixed',\n zIndex: '2147483647',\n left: '50%',\n bottom: '24px',\n transform: 'translateX(-50%)',\n maxWidth: 'min(520px, calc(100vw - 32px))',\n padding: '12px 16px',\n borderRadius: '12px',\n // ink with the design system's red, the colour for \"deny\"\n background: '#0B0B0C',\n color: '#FFFFFF',\n border: '2px solid #FF4D1F',\n font: '13px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace',\n })\n\n documentRef.body.appendChild(node)\n window.setTimeout(() => node.remove(), durationMs)\n return node\n}\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { showDenyOverlay } from './overlay.js'\nimport type { PolicyEngine } from './engine.js'\n\nexport interface DomEnforcerOptions {\n policyEngine: PolicyEngine\n getIdentity: () => AgentIdentity | null | Promise<AgentIdentity | null>\n documentRef?: Document\n selector?: string\n}\n\nexport const installDomEnforcer = ({\n policyEngine,\n getIdentity,\n documentRef = typeof document === 'undefined' ? undefined : document,\n selector = '[data-agentronics-tool]',\n}: DomEnforcerOptions) => {\n if (!documentRef) return { uninstall: () => undefined }\n\n const handler = (event: Event) => {\n const target = event.target instanceof Element ? event.target.closest(selector) : null\n if (!(target instanceof HTMLElement)) return\n const tool = target.dataset.agentronicsTool\n if (!tool) return\n\n void Promise.resolve(getIdentity()).then((identity) => {\n const evaluation = policyEngine.evaluate({ tool, identity })\n if (evaluation.decision !== 'deny') return\n event.preventDefault()\n event.stopPropagation()\n showDenyOverlay({ message: evaluation.reason, documentRef })\n })\n }\n\n documentRef.addEventListener('click', handler, true)\n return {\n uninstall: () => documentRef.removeEventListener('click', handler, true),\n }\n}\n","import type { MemoryScope } from '@agentronics/protocol'\n\nexport interface ScopeBackend {\n read(key: string): string | null\n write(key: string, value: string): void\n remove(key: string): void\n keys(): string[]\n}\n\nconst inMemoryBackend = (): ScopeBackend => {\n const store = new Map<string, string>()\n return {\n read: (key) => store.get(key) ?? null,\n write: (key, value) => {\n store.set(key, value)\n },\n remove: (key) => {\n store.delete(key)\n },\n keys: () => [...store.keys()],\n }\n}\n\nconst webStorageBackend = (storage: Storage, prefix: string): ScopeBackend => ({\n read: (key) => {\n try {\n return storage.getItem(prefix + key)\n } catch {\n return null\n }\n },\n write: (key, value) => {\n try {\n storage.setItem(prefix + key, value)\n } catch {\n // quota exceeded or storage disabled — fail silently, the in-memory fallback is acceptable\n }\n },\n remove: (key) => {\n try {\n storage.removeItem(prefix + key)\n } catch {\n // ignore\n }\n },\n keys: () => {\n const out: string[] = []\n try {\n for (let i = 0; i < storage.length; i++) {\n const k = storage.key(i)\n if (k && k.startsWith(prefix)) out.push(k.slice(prefix.length))\n }\n } catch {\n // ignore\n }\n return out\n },\n})\n\nconst PREFIX = 'agtx:'\n\nexport const createBackends = (): Record<MemoryScope, ScopeBackend> => {\n const hasWindow = typeof window !== 'undefined'\n const session =\n hasWindow && typeof window.sessionStorage !== 'undefined'\n ? webStorageBackend(window.sessionStorage, PREFIX + 'session:')\n : inMemoryBackend()\n const user =\n hasWindow && typeof window.localStorage !== 'undefined'\n ? webStorageBackend(window.localStorage, PREFIX + 'user:')\n : inMemoryBackend()\n return {\n session,\n user,\n org: inMemoryBackend(),\n }\n}\n","import { MemoryEntry, type MemoryScope } from '@agentronics/protocol'\nimport type { TraceInput } from '../observability/tracer.js'\nimport { createBackends, type ScopeBackend } from './storage.js'\n\ninterface StoredRecord {\n value: unknown\n expiresAt: number | null\n updatedAt: string\n}\n\nconst isExpired = (record: StoredRecord, now: number): boolean =>\n record.expiresAt !== null && record.expiresAt <= now\n\nconst decode = (raw: string | null): StoredRecord | null => {\n if (!raw) return null\n try {\n const parsed = JSON.parse(raw) as StoredRecord\n if (typeof parsed !== 'object' || parsed === null) return null\n return parsed\n } catch {\n return null\n }\n}\n\nconst encode = (record: StoredRecord): string => JSON.stringify(record)\n\nexport interface MemoryGetOptions {\n scope?: MemoryScope\n}\n\nexport interface MemorySetOptions {\n scope?: MemoryScope\n ttlSeconds?: number\n}\n\nexport interface MemoryStoreOptions {\n onTrace?: (input: TraceInput) => void\n}\n\nexport const createMemoryStore = (options: MemoryStoreOptions = {}) => {\n const backends: Record<MemoryScope, ScopeBackend> = createBackends()\n const emit = (input: TraceInput) => {\n options.onTrace?.(input)\n }\n\n const get = (key: string, options: MemoryGetOptions = {}): unknown => {\n const scope = options.scope ?? 'session'\n const backend = backends[scope]\n const record = decode(backend.read(key))\n if (!record) {\n emit({ type: 'memory.accessed', metadata: { operation: 'get', key, scope, hit: false } })\n return undefined\n }\n if (isExpired(record, Date.now())) {\n backend.remove(key)\n emit({ type: 'memory.accessed', metadata: { operation: 'get', key, scope, hit: false, expired: true } })\n return undefined\n }\n emit({ type: 'memory.accessed', metadata: { operation: 'get', key, scope, hit: true } })\n return record.value\n }\n\n const set = (key: string, value: unknown, options: MemorySetOptions = {}): MemoryEntry => {\n const scope = options.scope ?? 'session'\n const ttl = options.ttlSeconds ?? null\n const now = Date.now()\n const record: StoredRecord = {\n value,\n expiresAt: ttl === null ? null : now + ttl * 1000,\n updatedAt: new Date(now).toISOString(),\n }\n backends[scope].write(key, encode(record))\n emit({ type: 'memory.updated', metadata: { operation: 'set', key, scope, ttlSeconds: ttl } })\n return MemoryEntry.parse({\n key,\n value,\n scope,\n ttlSeconds: ttl,\n updatedAt: record.updatedAt,\n })\n }\n\n const remove = (key: string, options: MemoryGetOptions = {}) => {\n const scope = options.scope ?? 'session'\n backends[scope].remove(key)\n emit({ type: 'memory.updated', metadata: { operation: 'remove', key, scope } })\n }\n\n const list = (options: MemoryGetOptions = {}): MemoryEntry[] => {\n const scope = options.scope ?? 'session'\n const backend = backends[scope]\n const now = Date.now()\n const out: MemoryEntry[] = []\n for (const key of backend.keys()) {\n const record = decode(backend.read(key))\n if (!record) continue\n if (isExpired(record, now)) {\n backend.remove(key)\n continue\n }\n out.push(\n MemoryEntry.parse({\n key,\n value: record.value,\n scope,\n ttlSeconds:\n record.expiresAt === null ? null : Math.max(0, Math.round((record.expiresAt - now) / 1000)),\n updatedAt: record.updatedAt,\n })\n )\n }\n emit({ type: 'memory.accessed', metadata: { operation: 'list', scope, count: out.length } })\n return out\n }\n\n const clear = (options: MemoryGetOptions = {}) => {\n const scope = options.scope ?? 'session'\n const backend = backends[scope]\n const count = backend.keys().length\n for (const key of backend.keys()) backend.remove(key)\n emit({ type: 'memory.updated', metadata: { operation: 'clear', scope, count } })\n }\n\n return { get, set, remove, list, clear }\n}\n\nexport type MemoryStore = ReturnType<typeof createMemoryStore>\n","import {\n SITE_MEMORY_DEFAULT,\n SiteMemory as SiteMemorySchema,\n SiteMemoryPageContext,\n type SiteMemory,\n} from '@agentronics/protocol'\nimport type { TraceInput } from '../observability/tracer.js'\n\nexport interface SiteMemoryStoreOptions {\n initial?: Partial<SiteMemory>\n onTrace?: (input: TraceInput) => void\n}\n\nexport interface ProvideForPageInput {\n path: string\n payload: Record<string, unknown>\n}\n\nconst cloneSiteMemory = (memory: SiteMemory): SiteMemory =>\n // Round-trip via the schema so callers always receive a validated, defaulted snapshot.\n SiteMemorySchema.parse(JSON.parse(JSON.stringify(memory)))\n\nconst stamp = (memory: SiteMemory): SiteMemory => ({\n ...memory,\n updatedAt: new Date().toISOString(),\n})\n\nexport type SiteMemoryListener = (snapshot: SiteMemory) => void\n\nexport const createSiteMemoryStore = (options: SiteMemoryStoreOptions = {}) => {\n let state: SiteMemory = SiteMemorySchema.parse({\n ...SITE_MEMORY_DEFAULT,\n ...(options.initial ?? {}),\n })\n let cachedSnapshot: SiteMemory | null = null\n const listeners = new Set<SiteMemoryListener>()\n const emit = (input: TraceInput) => {\n options.onTrace?.(input)\n }\n const invalidate = () => {\n cachedSnapshot = null\n }\n const notify = () => {\n if (listeners.size === 0) return\n const snap = cloneSiteMemory(state)\n cachedSnapshot = snap\n listeners.forEach((listener) => listener(snap))\n }\n\n const provide = (next: Partial<SiteMemory>): SiteMemory => {\n const merged = SiteMemorySchema.parse({\n ...state,\n ...next,\n // Workflows/policies/uiGuidance/pageContexts merge by key so partial provides do not nuke siblings.\n workflows: { ...state.workflows, ...(next.workflows ?? {}) },\n policies: { ...state.policies, ...(next.policies ?? {}) },\n uiGuidance: { ...state.uiGuidance, ...(next.uiGuidance ?? {}) },\n pageContexts: { ...state.pageContexts, ...(next.pageContexts ?? {}) },\n })\n state = stamp(merged)\n invalidate()\n emit({\n type: 'memory.updated',\n metadata: { kind: 'site', operation: 'provide', keys: Object.keys(next) },\n })\n notify()\n return snapshot()\n }\n\n const update = (path: string, value: unknown): SiteMemory => {\n const parts = path.split('.').filter(Boolean)\n if (parts.length === 0) {\n throw new Error('siteMemory.update() requires a non-empty dot-path.')\n }\n const next = JSON.parse(JSON.stringify(state)) as Record<string, unknown>\n let cursor: Record<string, unknown> = next\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]!\n const existing = cursor[key]\n if (typeof existing !== 'object' || existing === null || Array.isArray(existing)) {\n cursor[key] = {}\n }\n cursor = cursor[key] as Record<string, unknown>\n }\n cursor[parts[parts.length - 1]!] = value\n state = stamp(SiteMemorySchema.parse(next))\n invalidate()\n emit({ type: 'memory.updated', metadata: { kind: 'site', operation: 'update', path } })\n notify()\n return snapshot()\n }\n\n const provideForPage = (input: ProvideForPageInput): SiteMemoryPageContext => {\n const context = SiteMemoryPageContext.parse({\n path: input.path,\n payload: input.payload,\n updatedAt: new Date().toISOString(),\n })\n state = stamp({\n ...state,\n pageContexts: { ...state.pageContexts, [input.path]: context },\n })\n invalidate()\n emit({\n type: 'memory.updated',\n metadata: { kind: 'site', operation: 'provideForPage', path: input.path },\n })\n notify()\n return { ...context, payload: { ...context.payload } }\n }\n\n const snapshot = (): SiteMemory => {\n if (!cachedSnapshot) cachedSnapshot = cloneSiteMemory(state)\n return cachedSnapshot\n }\n\n const get = (path?: string): unknown => {\n emit({\n type: 'memory.accessed',\n metadata: { kind: 'site', operation: path ? 'get' : 'snapshot', path: path ?? null },\n })\n if (!path) return cloneSiteMemory(state)\n const parts = path.split('.').filter(Boolean)\n let cursor: unknown = state\n for (const key of parts) {\n if (typeof cursor !== 'object' || cursor === null) return undefined\n cursor = (cursor as Record<string, unknown>)[key]\n }\n return cursor\n }\n\n const getForPage = (path: string): SiteMemoryPageContext | null => {\n emit({\n type: 'memory.accessed',\n metadata: { kind: 'site', operation: 'getForPage', path },\n })\n const found = state.pageContexts[path]\n return found ? { ...found, payload: { ...found.payload } } : null\n }\n\n const replace = (next: SiteMemory): SiteMemory => {\n state = stamp(SiteMemorySchema.parse(next))\n invalidate()\n notify()\n return snapshot()\n }\n\n const subscribe = (listener: SiteMemoryListener): (() => void) => {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n }\n\n return { provide, update, provideForPage, snapshot, get, getForPage, replace, subscribe }\n}\n\nexport type SiteMemoryStore = ReturnType<typeof createSiteMemoryStore>\n","import { SiteMemory as SiteMemorySchema, type SiteMemory } from '@agentronics/protocol'\n\nexport interface MemoryCacheOptions {\n gatewayUrl: string\n siteId: string\n publishableKey: string\n fetcher?: typeof fetch\n}\n\nexport interface MemoryCacheSnapshot {\n memory: SiteMemory | null\n etag: string | null\n}\n\nexport const createMemoryCache = ({\n gatewayUrl,\n siteId,\n publishableKey,\n fetcher = fetch,\n}: MemoryCacheOptions) => {\n let snapshot: MemoryCacheSnapshot = { memory: null, etag: null }\n\n return {\n snapshot(): MemoryCacheSnapshot {\n return {\n memory: snapshot.memory ? SiteMemorySchema.parse(snapshot.memory) : null,\n etag: snapshot.etag,\n }\n },\n\n async sync(): Promise<MemoryCacheSnapshot> {\n const response = await fetcher(\n `${gatewayUrl.replace(/\\/$/, '')}/v1/pub/sites/${encodeURIComponent(siteId)}/memory`,\n {\n headers: {\n authorization: `Bearer ${publishableKey}`,\n ...(snapshot.etag ? { 'if-none-match': snapshot.etag } : {}),\n },\n }\n )\n if (response.status === 304) return this.snapshot()\n if (!response.ok) throw new Error(`Memory sync failed with status ${response.status}.`)\n\n const body = (await response.json()) as { memory?: unknown }\n const memory = SiteMemorySchema.parse(body.memory ?? {})\n snapshot = {\n memory,\n etag: response.headers.get('etag'),\n }\n return this.snapshot()\n },\n }\n}\n\nexport type MemoryCache = ReturnType<typeof createMemoryCache>\n","import type { SiteMemory } from '@agentronics/protocol'\n\nconst META_PREFIX = 'agent-context-'\nconst JSONLD_ID = 'agentronics-site-context'\n\nexport interface MetaTagsOptions {\n doc?: Document\n snapshot: SiteMemory\n schemaType?: string\n}\n\nconst safeJson = (value: unknown): string => {\n try {\n return JSON.stringify(value)\n } catch {\n return '{}'\n }\n}\n\nconst setMeta = (doc: Document, name: string, content: string) => {\n let tag = doc.querySelector<HTMLMetaElement>(`meta[name=\"${name}\"]`)\n if (!tag) {\n tag = doc.createElement('meta')\n tag.setAttribute('name', name)\n doc.head.appendChild(tag)\n }\n tag.setAttribute('content', content)\n}\n\nconst removeByName = (doc: Document, name: string) => {\n doc.querySelectorAll(`meta[name=\"${name}\"]`).forEach((node) => node.remove())\n}\n\nexport const installMetaTags = ({\n doc = typeof document === 'undefined' ? (null as unknown as Document) : document,\n snapshot,\n schemaType = 'WebSite',\n}: MetaTagsOptions): { uninstall: () => void } => {\n if (!doc) return { uninstall: () => {} }\n\n setMeta(doc, `${META_PREFIX}version`, snapshot.version)\n setMeta(doc, `${META_PREFIX}updated-at`, snapshot.updatedAt ?? new Date().toISOString())\n if (snapshot.siteMap?.navigation?.flow) {\n setMeta(doc, `${META_PREFIX}flow`, snapshot.siteMap.navigation.flow)\n }\n setMeta(doc, `${META_PREFIX}workflows`, Object.keys(snapshot.workflows).join(','))\n\n let script = doc.getElementById(JSONLD_ID) as HTMLScriptElement | null\n if (!script) {\n script = doc.createElement('script')\n script.type = 'application/ld+json'\n script.id = JSONLD_ID\n doc.head.appendChild(script)\n }\n script.textContent = safeJson({\n '@context': 'https://schema.org',\n '@type': schemaType,\n name: 'Agentronics Site Memory',\n agentronics: snapshot,\n })\n\n return {\n uninstall: () => {\n removeByName(doc, `${META_PREFIX}version`)\n removeByName(doc, `${META_PREFIX}updated-at`)\n removeByName(doc, `${META_PREFIX}flow`)\n removeByName(doc, `${META_PREFIX}workflows`)\n doc.getElementById(JSONLD_ID)?.remove()\n },\n }\n}\n","import type { SiteMemory } from '@agentronics/protocol'\n\nconst OVERLAY_ID = 'agentronics-memory-overlay'\n\nexport interface MemoryOverlayOptions {\n doc?: Document\n snapshot: SiteMemory\n hidden?: boolean\n}\n\nconst styles = (hidden: boolean): string => `\nposition: fixed;\nbottom: 16px;\nright: 16px;\nmax-width: 320px;\npadding: 10px 12px;\nbackground: rgba(11, 11, 12, 0.92);\ncolor: #ffffff;\nfont: 12px/1.45 ui-monospace, SFMono-Regular, Menlo, monospace;\nborder: 1px solid rgba(255, 255, 255, 0.15);\nborder-radius: 10px;\nz-index: 2147483647;\nopacity: ${hidden ? '0' : '1'};\npointer-events: ${hidden ? 'none' : 'auto'};\n`\n\nconst summarize = (snapshot: SiteMemory): string => {\n const pages = snapshot.siteMap?.pages?.length ?? 0\n const workflows = Object.keys(snapshot.workflows).length\n const ui = Object.keys(snapshot.uiGuidance).length\n return `Agentronics site memory · pages:${pages} · workflows:${workflows} · ui-hints:${ui}`\n}\n\nexport const installMemoryOverlay = ({\n doc = typeof document === 'undefined' ? (null as unknown as Document) : document,\n snapshot,\n hidden = false,\n}: MemoryOverlayOptions): { uninstall: () => void; refresh: (next: SiteMemory) => void } => {\n if (!doc) return { uninstall: () => {}, refresh: () => {} }\n\n let host = doc.getElementById(OVERLAY_ID) as HTMLDivElement | null\n if (!host) {\n host = doc.createElement('div')\n host.id = OVERLAY_ID\n host.setAttribute('role', 'note')\n host.setAttribute('aria-label', 'Agentronics site memory summary')\n host.setAttribute('data-agent-context', 'overlay')\n doc.body.appendChild(host)\n }\n host.setAttribute('style', styles(hidden))\n host.textContent = summarize(snapshot)\n\n return {\n uninstall: () => {\n host?.remove()\n },\n refresh: (next: SiteMemory) => {\n if (!host) return\n host.textContent = summarize(next)\n },\n }\n}\n","import { SiteMemory as SiteMemorySchema, type SiteMemory } from '@agentronics/protocol'\n\nexport const WELL_KNOWN_PATH = '/.well-known/agent-context.json'\n\nexport interface WellKnownClientOptions {\n origin?: string\n fetcher?: typeof fetch\n signal?: AbortSignal\n}\n\nexport const fetchWellKnownContext = async ({\n origin,\n fetcher = fetch,\n signal,\n}: WellKnownClientOptions = {}): Promise<SiteMemory | null> => {\n const target =\n (origin ? origin.replace(/\\/$/, '') : typeof window !== 'undefined' ? window.location.origin : '') +\n WELL_KNOWN_PATH\n if (!target.startsWith('http')) {\n return null\n }\n const fetchInit: RequestInit = { headers: { accept: 'application/json' } }\n if (signal !== undefined) fetchInit.signal = signal\n const response = await fetcher(target, fetchInit)\n if (!response.ok) {\n if (response.status === 404) return null\n throw new Error(`well-known agent-context fetch failed with status ${response.status}.`)\n }\n const payload = (await response.json()) as unknown\n return SiteMemorySchema.parse(payload)\n}\n\nexport interface ServeWellKnownOptions {\n snapshot: SiteMemory\n}\n\n/**\n * Returns a JSON string suitable for /.well-known/agent-context.json. Hosts proxy this\n * through their CDN/edge so any agent can fetch it with no SDK installed.\n */\nexport const serializeWellKnownContext = ({ snapshot }: ServeWellKnownOptions): string =>\n JSON.stringify(SiteMemorySchema.parse(snapshot))\n","import type { AgentIdentity, PolicyEvaluation, PolicyRule } from '@agentronics/protocol'\nimport type { TraceInput } from '../observability/tracer.js'\nimport type { Reviewer } from '../authz/reviewPrompt.js'\nimport type { ToolAnnotations } from './modelContext.js'\n\nexport interface GovernedTool<Input = unknown, Output = unknown> {\n name: string\n /** Human-readable name agents and browsers may show (WebMCP `title`). */\n title?: string\n version?: string\n group?: string\n description?: string\n /** WebMCP hints: readOnlyHint, consequentialHint, untrustedContentHint. */\n annotations?: ToolAnnotations\n /** Other origins whose agents may see this tool (WebMCP `exposedTo`). */\n exposedTo?: string[]\n inputSchema?: Record<string, unknown>\n outputSchema?: Record<string, unknown>\n stage?: string\n authz?: Omit<PolicyRule, 'id' | 'tool'>\n rateLimit?: PolicyRule['rateLimit']\n execute: (\n input: Input,\n context: { identity: AgentIdentity | null; signal?: AbortSignal }\n ) => Promise<Output> | Output\n}\n\nexport interface ToolRegistryOptions {\n evaluate: (tool: string, options?: { identity?: AgentIdentity | null }) => Promise<PolicyEvaluation>\n setPolicies?: (rules: PolicyRule[]) => void\n listPolicies?: () => PolicyRule[]\n onTrace?: (input: TraceInput) => void\n /**\n * Resolves the ambient agent identity for `execute()` calls that don't pass\n * one explicitly. The SDK wires this to the agentContext snapshot so a\n * button-bound tool fires with the detected agent attached — without\n * forcing every consumer to thread identity through their click handlers.\n *\n * Semantics:\n * - `execute(name, input)` or `execute(name, input, undefined)` → resolver\n * - `execute(name, input, null)` → respected (caller wants anonymous attribution)\n * - `execute(name, input, identity)` → respected\n */\n identityResolver?: () => AgentIdentity | null\n /**\n * Asks a person to approve a call whose policy decision is `review`. Without\n * one, review calls are refused (never silently run).\n */\n reviewer?: Reviewer\n}\n\nexport interface ExecuteOptions {\n /** Aborted when the agent cancels the call (WebMCP passes one per call). */\n signal?: AbortSignal\n}\n\nexport interface ToolRegistry {\n register(tool: GovernedTool): () => void\n unregister(name: string): void\n enable(name: string): void\n disable(name: string): void\n isEnabled(name: string): boolean\n list(options?: { includeDisabled?: boolean }): GovernedTool[]\n get(name: string): GovernedTool | undefined\n execute<Input, Output>(\n name: string,\n input: Input,\n identity?: AgentIdentity | null,\n options?: ExecuteOptions\n ): Promise<Output>\n}\n\nexport const createToolRegistry = ({\n evaluate,\n setPolicies,\n listPolicies,\n onTrace,\n identityResolver,\n reviewer,\n}: ToolRegistryOptions): ToolRegistry => {\n const tools = new Map<string, GovernedTool>()\n const disabled = new Set<string>()\n\n const writePolicyFor = (tool: GovernedTool) => {\n if (!tool.authz || !setPolicies || !listPolicies) return\n const rule: PolicyRule = {\n id: `tool:${tool.name}`,\n tool: tool.name,\n ...tool.authz,\n rateLimit: tool.rateLimit ?? tool.authz.rateLimit,\n }\n setPolicies([...listPolicies().filter((item) => item.id !== rule.id), rule])\n }\n\n return {\n register(tool) {\n tools.set(tool.name, tool)\n disabled.delete(tool.name)\n writePolicyFor(tool)\n onTrace?.({\n type: 'tool.registered',\n tool: tool.name,\n metadata: {\n version: tool.version ?? null,\n group: tool.group ?? null,\n stage: tool.stage ?? null,\n },\n })\n return () => {\n tools.delete(tool.name)\n disabled.delete(tool.name)\n }\n },\n unregister(name) {\n tools.delete(name)\n disabled.delete(name)\n },\n enable(name) {\n if (!tools.has(name) || !disabled.has(name)) return\n disabled.delete(name)\n onTrace?.({\n type: 'tool.surfaced',\n tool: name,\n metadata: { state: 'enabled' },\n })\n },\n disable(name) {\n if (!tools.has(name) || disabled.has(name)) return\n disabled.add(name)\n onTrace?.({\n type: 'tool.surfaced',\n tool: name,\n metadata: { state: 'disabled' },\n })\n },\n isEnabled: (name) => tools.has(name) && !disabled.has(name),\n list({ includeDisabled = false } = {}) {\n const all = [...tools.values()]\n return includeDisabled ? all : all.filter((tool) => !disabled.has(tool.name))\n },\n get: (name) => tools.get(name),\n async execute<Input, Output>(\n name: string,\n input: Input,\n identity?: AgentIdentity | null,\n options: ExecuteOptions = {}\n ): Promise<Output> {\n // `undefined` means \"use the ambient identity\"; explicit `null` means\n // \"anonymous\". This lets button handlers stay as `tools.execute(name,\n // input)` while still being attributed to whatever detect()/declare()\n // resolved into agentContext.\n const resolvedIdentity =\n identity === undefined ? (identityResolver?.() ?? null) : identity\n const tool = tools.get(name) as GovernedTool<Input, Output> | undefined\n if (!tool) throw new Error(`Tool \"${name}\" is not registered.`)\n if (disabled.has(name)) {\n const policy: PolicyEvaluation = {\n decision: 'deny',\n ruleId: `tool:${name}`,\n reason: 'Tool is disabled.',\n }\n onTrace?.({ type: 'tool.executed', tool: name, agent: resolvedIdentity, policy, outcome: 'blocked' })\n throw new Error(policy.reason)\n }\n let policy = await evaluate(name, { identity: resolvedIdentity })\n if (policy.decision === 'deny') {\n onTrace?.({ type: 'tool.executed', tool: name, agent: resolvedIdentity, policy, outcome: 'blocked' })\n throw new Error(policy.reason)\n }\n if (policy.decision === 'review') {\n const request: Parameters<Reviewer>[0] = { tool: name, input, identity: resolvedIdentity, reason: policy.reason }\n if (tool.title !== undefined) request.title = tool.title\n if (tool.description !== undefined) request.description = tool.description\n const approved = reviewer ? await reviewer(request).catch(() => false) : false\n onTrace?.({\n type: 'authz.evaluated',\n tool: name,\n agent: resolvedIdentity,\n policy,\n outcome: approved ? 'success' : 'blocked',\n metadata: { review: true, approved, reviewer: reviewer ? 'configured' : 'none' },\n })\n if (!approved) {\n const refused: PolicyEvaluation = {\n ...policy,\n decision: 'deny',\n reason: reviewer ? 'The person on the page did not approve this action.' : 'This action needs review and no reviewer is configured.',\n }\n onTrace?.({ type: 'tool.executed', tool: name, agent: resolvedIdentity, policy: refused, outcome: 'blocked' })\n throw new Error(refused.reason)\n }\n policy = { ...policy, reason: `${policy.reason} Approved by the person on the page.` }\n }\n // Time the execution and trace the outcome either way — a tool that\n // throws is still something the agent did, and the observability /\n // analytics surfaces need both the latency and the error.\n const start = Date.now()\n try {\n const context: { identity: AgentIdentity | null; signal?: AbortSignal } = { identity: resolvedIdentity }\n if (options.signal) context.signal = options.signal\n const output = await tool.execute(input, context)\n onTrace?.({\n type: 'tool.executed',\n tool: name,\n agent: resolvedIdentity,\n policy,\n outcome: 'success',\n durationMs: Date.now() - start,\n })\n return output\n } catch (error) {\n onTrace?.({\n type: 'tool.executed',\n tool: name,\n agent: resolvedIdentity,\n policy,\n outcome: 'error',\n durationMs: Date.now() - start,\n error: error instanceof Error ? error.message : String(error),\n })\n throw error\n }\n },\n }\n}\n","import type { GovernedTool } from './registry.js'\n\nconst APPROX_CHARS_PER_TOKEN = 4\n\nconst stableStringify = (value: unknown): string => {\n if (value === null || typeof value !== 'object') return JSON.stringify(value)\n if (Array.isArray(value)) return `[${value.map(stableStringify).join(',')}]`\n const keys = Object.keys(value as Record<string, unknown>).sort()\n return `{${keys\n .map((key) => `${JSON.stringify(key)}:${stableStringify((value as Record<string, unknown>)[key])}`)\n .join(',')}}`\n}\n\nexport interface ToolTokenEstimate {\n name: string\n characters: number\n tokens: number\n}\n\nexport interface TokenBudgetReport {\n total: number\n perTool: ToolTokenEstimate[]\n}\n\n/**\n * What an agent actually receives for a tool — the fields registered with\n * WebMCP (`name`, `title`, `description`, `inputSchema`, `annotations`).\n * Policy, version and grouping stay on the site and cost the agent nothing.\n */\nexport const modelFacingDescriptor = (tool: Pick<GovernedTool, 'name' | 'title' | 'description' | 'inputSchema' | 'annotations'>) => ({\n name: tool.name,\n ...(tool.title ? { title: tool.title } : {}),\n description: tool.description ?? tool.name,\n ...(tool.inputSchema ? { inputSchema: tool.inputSchema } : {}),\n ...(tool.annotations ? { annotations: tool.annotations } : {}),\n})\n\n/** ≈ characters / 4 of the model-facing descriptor. */\nexport const descriptorTokens = (tool: Parameters<typeof modelFacingDescriptor>[0]): number =>\n Math.ceil(stableStringify(modelFacingDescriptor(tool)).length / APPROX_CHARS_PER_TOKEN)\n\nexport const estimateToolTokens = (tool: GovernedTool): ToolTokenEstimate => {\n const characters = stableStringify(modelFacingDescriptor(tool)).length\n return { name: tool.name, characters, tokens: Math.ceil(characters / APPROX_CHARS_PER_TOKEN) }\n}\n\nexport const estimateBudget = (tools: GovernedTool[]): TokenBudgetReport => {\n const perTool = tools.map(estimateToolTokens)\n const total = perTool.reduce((sum, entry) => sum + entry.tokens, 0)\n return { total, perTool }\n}\n","import type { ToolDescriptor } from '@agentronics/protocol'\nimport type { GovernedTool } from './registry.js'\nimport { descriptorTokens } from './tokenEstimate.js'\n\n/**\n * Map a registered tool to the wire descriptor the gateway/dashboard consume.\n * `tokens` is the SDK's estimate (≈ characters / 4) of the model-facing\n * descriptor, so the console's per-tool cost matches `estimateTokens()`.\n */\nexport const toToolDescriptor = (tool: GovernedTool): ToolDescriptor => {\n const descriptor: ToolDescriptor = {\n name: tool.name,\n description: tool.description ?? '',\n inputSchema: tool.inputSchema ?? {},\n tokens: 0,\n }\n if (tool.title) descriptor.title = tool.title\n if (tool.annotations) descriptor.annotations = { ...tool.annotations } as Record<string, boolean>\n if (tool.group) descriptor.group = tool.group\n if (tool.stage) descriptor.page = tool.stage\n if (tool.outputSchema) descriptor.outputSchema = tool.outputSchema\n // Same count the browser reports: what agents receive (output schemas aren't sent).\n descriptor.tokens = descriptorTokens(tool)\n return descriptor\n}\n\nexport interface ToolSyncOptions {\n gatewayUrl: string\n siteId: string\n publishableKey: string\n fetcher?: typeof fetch\n}\n\n/** Pushes the full tool registry to the Agentronics API (publishable key; the key's allowed origins only). */\nexport const createToolSync = ({\n gatewayUrl,\n siteId,\n publishableKey,\n fetcher = fetch,\n}: ToolSyncOptions) => ({\n async push(tools: GovernedTool[]): Promise<number> {\n const descriptors = tools.map(toToolDescriptor)\n const response = await fetcher(\n `${gatewayUrl.replace(/\\/$/, '')}/v1/pub/sites/${encodeURIComponent(siteId)}/tools`,\n {\n method: 'PUT',\n headers: {\n authorization: `Bearer ${publishableKey}`,\n 'content-type': 'application/json',\n },\n body: JSON.stringify({ registry: { tools: descriptors } }),\n }\n )\n if (!response.ok) {\n throw new Error(`Tool sync failed with status ${response.status}.`)\n }\n return descriptors.length\n },\n})\n\nexport type ToolSync = ReturnType<typeof createToolSync>\n","import type { TraceInput } from '../observability/tracer.js'\n\nexport interface ProgressionTransition {\n on: string\n to: string\n}\n\nexport interface ProgressionStage {\n name: string\n enables?: string[]\n transitions?: ProgressionTransition[]\n}\n\nexport interface ProgressionConfig {\n initial: string\n stages: ProgressionStage[]\n}\n\nexport interface ProgressionStore {\n current(): string\n enabledStages(): string[]\n notify(toolName: string): { changed: boolean; from: string; to: string }\n set(stage: string): { changed: boolean; from: string; to: string }\n reset(): void\n snapshot(): { current: string; enabled: string[] }\n}\n\nexport const createProgressionStore = (\n config: ProgressionConfig,\n options: { onTrace?: (input: TraceInput) => void } = {}\n): ProgressionStore => {\n const stageMap = new Map<string, ProgressionStage>()\n for (const stage of config.stages) stageMap.set(stage.name, stage)\n if (!stageMap.has(config.initial)) {\n throw new Error(`Initial stage \"${config.initial}\" is not declared in progression stages.`)\n }\n\n let current = config.initial\n\n const enabled = (): string[] => {\n const stage = stageMap.get(current)\n return stage?.enables ? [current, ...stage.enables] : [current]\n }\n\n const transitionTo = (next: string, trigger: string): { changed: boolean; from: string; to: string } => {\n const from = current\n if (!stageMap.has(next)) {\n throw new Error(`Cannot transition to unknown stage \"${next}\".`)\n }\n if (next === current) return { changed: false, from, to: next }\n current = next\n options.onTrace?.({\n type: 'tool.progressed',\n metadata: { from, to: next, trigger },\n })\n return { changed: true, from, to: next }\n }\n\n return {\n current: () => current,\n enabledStages: () => enabled(),\n notify(toolName) {\n const stage = stageMap.get(current)\n const transition = stage?.transitions?.find((t) => t.on === toolName)\n if (!transition) return { changed: false, from: current, to: current }\n return transitionTo(transition.to, toolName)\n },\n set(stage) {\n return transitionTo(stage, 'manual')\n },\n reset() {\n const previous = current\n current = config.initial\n if (previous !== current) {\n options.onTrace?.({\n type: 'tool.progressed',\n metadata: { from: previous, to: current, trigger: 'reset' },\n })\n }\n },\n snapshot: () => ({ current, enabled: enabled() }),\n }\n}\n","import type { AgentIdentity, TrustLevel } from '@agentronics/protocol'\nimport { TRUST_RANK } from '@agentronics/protocol'\nimport type { GovernedTool } from './registry.js'\n\nexport interface SurfacingContext {\n identity: AgentIdentity | null\n stage?: string | null\n enabledStages?: string[]\n}\n\nexport interface SurfacingDecision {\n tool: GovernedTool\n visible: boolean\n reason: string\n}\n\nconst passesTrust = (tool: GovernedTool, identity: AgentIdentity | null): { ok: boolean; reason: string } => {\n const minTrust = tool.authz?.minTrust as TrustLevel | undefined\n if (!minTrust) return { ok: true, reason: 'no-trust-floor' }\n if (!identity) return { ok: false, reason: `requires-trust:${minTrust}` }\n if (TRUST_RANK[identity.trust] < TRUST_RANK[minTrust]) {\n return { ok: false, reason: `trust-too-low:${identity.trust}<${minTrust}` }\n }\n return { ok: true, reason: 'trust-ok' }\n}\n\nconst passesClass = (tool: GovernedTool, identity: AgentIdentity | null): { ok: boolean; reason: string } => {\n const allowed = tool.authz?.allowedClasses ?? []\n if (allowed.length === 0) return { ok: true, reason: 'no-class-restriction' }\n if (!identity) return { ok: false, reason: `requires-class:${allowed.join('|')}` }\n if (!allowed.includes(identity.class)) {\n return { ok: false, reason: `class-not-allowed:${identity.class}` }\n }\n return { ok: true, reason: 'class-ok' }\n}\n\nconst passesStage = (tool: GovernedTool, context: SurfacingContext): { ok: boolean; reason: string } => {\n if (!tool.stage) return { ok: true, reason: 'no-stage' }\n if (context.enabledStages && context.enabledStages.includes(tool.stage)) {\n return { ok: true, reason: `stage-enabled:${tool.stage}` }\n }\n if (context.stage === tool.stage) return { ok: true, reason: `stage-active:${tool.stage}` }\n return { ok: false, reason: `stage-locked:${tool.stage}` }\n}\n\nexport const decideSurfacing = (\n tool: GovernedTool,\n context: SurfacingContext\n): SurfacingDecision => {\n const trust = passesTrust(tool, context.identity)\n if (!trust.ok) return { tool, visible: false, reason: trust.reason }\n const cls = passesClass(tool, context.identity)\n if (!cls.ok) return { tool, visible: false, reason: cls.reason }\n const stage = passesStage(tool, context)\n if (!stage.ok) return { tool, visible: false, reason: stage.reason }\n if (tool.authz?.decision === 'deny') {\n return { tool, visible: false, reason: 'authz-deny' }\n }\n return { tool, visible: true, reason: 'visible' }\n}\n\nexport const surfaceTools = (\n tools: GovernedTool[],\n context: SurfacingContext\n): GovernedTool[] => tools.filter((tool) => decideSurfacing(tool, context).visible)\n\nexport const explainSurfacing = (\n tools: GovernedTool[],\n context: SurfacingContext\n): SurfacingDecision[] => tools.map((tool) => decideSurfacing(tool, context))\n","import type { GovernedTool } from './registry.js'\n\nexport const DEFAULT_GROUP = 'default'\n\nexport interface ToolGroupSummary {\n name: string\n tools: GovernedTool[]\n}\n\nexport const groupTools = (tools: GovernedTool[]): ToolGroupSummary[] => {\n const map = new Map<string, GovernedTool[]>()\n for (const tool of tools) {\n const key = tool.group ?? DEFAULT_GROUP\n const bucket = map.get(key) ?? []\n bucket.push(tool)\n map.set(key, bucket)\n }\n return [...map.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([name, list]) => ({ name, tools: list }))\n}\n\nexport const listGroupNames = (tools: GovernedTool[]): string[] =>\n [...new Set(tools.map((tool) => tool.group ?? DEFAULT_GROUP))].sort()\n","import type { GovernedTool } from './registry.js'\nimport {\n noteWebMcpActivity,\n resolveModelContext,\n type LegacyProvider,\n type ModelContextLike,\n type ModelContextSource,\n type ModelContextTool,\n} from './modelContext.js'\n\n/** @deprecated The pre-2026 `provideContext()` shape; kept for old polyfills. */\nexport type WebMcpProvider = LegacyProvider\n\nexport interface WebMcpToolDescriptor {\n name: string\n description?: string\n inputSchema?: Record<string, unknown>\n invoke(input?: unknown): Promise<unknown>\n}\n\nexport interface WebMcpAdapterOptions {\n /** Explicit ModelContext (tests, or a host that isn't `globalThis`). */\n modelContext?: ModelContextLike | LegacyProvider\n /** @deprecated use `modelContext`. */\n provider?: LegacyProvider\n /** Where to look for `document.modelContext` / `navigator.modelContext`. */\n host?: { document?: { modelContext?: unknown } | null; navigator?: { modelContext?: unknown } | null } | null\n invoke?: (tool: GovernedTool, input: unknown, signal?: AbortSignal) => Promise<unknown>\n}\n\n/** Per-tool result of the last publish — the \"callable / failed\" status the console shows. */\nexport interface WebMcpRegistration {\n name: string\n status: 'callable' | 'failed'\n error?: string\n}\n\nexport interface WebMcpPublishResult {\n /** True when a WebMCP surface was found and the previous registrations were withdrawn. */\n revoked: boolean\n /** Resolves once every tool's registerTool() settled. Empty when WebMCP is unavailable. */\n registrations: Promise<WebMcpRegistration[]>\n}\n\nexport interface WebMcpAdapter {\n publish(tools: GovernedTool[]): WebMcpPublishResult\n revoke(): void\n available(): boolean\n /** Which surface was used: document.modelContext, the navigator alias, or a legacy polyfill. */\n source(): ModelContextSource | null\n /** Registration status from the most recent publish. */\n status(): WebMcpRegistration[]\n}\n\nconst isLegacy = (source: ModelContextSource, _ctx: ModelContextLike | LegacyProvider): _ctx is LegacyProvider =>\n source === 'legacy'\n\nexport const toModelContextTool = (\n tool: GovernedTool,\n invoke: (tool: GovernedTool, input: unknown, signal?: AbortSignal) => Promise<unknown>\n): ModelContextTool => {\n const descriptor: ModelContextTool = {\n name: tool.name,\n // The spec requires a description; fall back to the name rather than fail registration.\n description: tool.description ?? tool.name,\n execute: (input, { signal }) => invoke(tool, input ?? {}, signal),\n }\n if (tool.title !== undefined) descriptor.title = tool.title\n if (tool.inputSchema !== undefined) descriptor.inputSchema = tool.inputSchema\n if (tool.annotations !== undefined) descriptor.annotations = { ...tool.annotations }\n return descriptor\n}\n\nexport const createWebMcpAdapter = (options: WebMcpAdapterOptions = {}): WebMcpAdapter => {\n const invoke =\n options.invoke ?? (async (tool, input) => tool.execute(input as never, { identity: null }))\n let controller: AbortController | null = null\n let legacyHandle: { revoke: () => void } | null = null\n let detachEvents: (() => void) | null = null\n let lastStatus: WebMcpRegistration[] = []\n\n const resolve = () => {\n const explicit = options.modelContext ?? options.provider\n if (explicit) {\n const source: ModelContextSource =\n typeof (explicit as Partial<ModelContextLike>).registerTool === 'function' ? 'document' : 'legacy'\n return { source, context: explicit }\n }\n return resolveModelContext(options.host)\n }\n\n const withdraw = () => {\n controller?.abort()\n controller = null\n legacyHandle?.revoke()\n legacyHandle = null\n }\n\n const attachEvents = (context: ModelContextLike) => {\n if (detachEvents || typeof context.addEventListener !== 'function') return\n const activated = (event: Event) => noteWebMcpActivity('activated', (event as Event & { toolName?: string }).toolName ?? '')\n const cancelled = (event: Event) => noteWebMcpActivity('cancelled', (event as Event & { toolName?: string }).toolName ?? '')\n context.addEventListener('toolactivated', activated)\n context.addEventListener('toolcancel', cancelled)\n detachEvents = () => {\n context.removeEventListener?.('toolactivated', activated)\n context.removeEventListener?.('toolcancel', cancelled)\n detachEvents = null\n }\n }\n\n return {\n publish(tools) {\n const resolved = resolve()\n if (!resolved) return { revoked: false, registrations: Promise.resolve([]) }\n withdraw()\n\n if (isLegacy(resolved.source, resolved.context)) {\n legacyHandle = resolved.context.provideContext({\n tools: tools.map((tool) => {\n const d: WebMcpToolDescriptor = { name: tool.name, invoke: (input) => invoke(tool, input) }\n if (tool.description !== undefined) d.description = tool.description\n if (tool.inputSchema !== undefined) d.inputSchema = tool.inputSchema\n return d\n }),\n })\n lastStatus = tools.map((tool) => ({ name: tool.name, status: 'callable' }))\n return { revoked: true, registrations: Promise.resolve(lastStatus) }\n }\n\n const context = resolved.context\n attachEvents(context)\n const current = new AbortController()\n controller = current\n const registrations = Promise.all(\n tools.map(async (tool): Promise<WebMcpRegistration> => {\n try {\n const registerOptions: { signal: AbortSignal; exposedTo?: string[] } = { signal: current.signal }\n if (tool.exposedTo?.length) registerOptions.exposedTo = tool.exposedTo\n await context.registerTool(toModelContextTool(tool, invoke), registerOptions)\n return { name: tool.name, status: 'callable' }\n } catch (error) {\n return { name: tool.name, status: 'failed', error: error instanceof Error ? `${error.name}: ${error.message}` : String(error) }\n }\n })\n ).then((result) => {\n // A newer publish replaced this one; don't overwrite its status.\n if (controller === current) lastStatus = result\n return result\n })\n return { revoked: true, registrations }\n },\n revoke() {\n withdraw()\n detachEvents?.()\n lastStatus = []\n },\n available: () => Boolean(resolve()),\n source: () => resolve()?.source ?? null,\n status: () => [...lastStatus],\n }\n}\n","import type { AgentIdentity } from '@agentronics/protocol'\n\n/** What a \"review\" decision asks the person on the page to approve. */\nexport interface ReviewRequest {\n tool: string\n title?: string\n description?: string\n input: unknown\n identity: AgentIdentity | null\n reason: string\n}\n\n/** Return true to let the tool run, false to refuse it. */\nexport type Reviewer = (request: ReviewRequest) => Promise<boolean>\n\nexport interface ReviewPromptOptions {\n documentRef?: Document\n /** Refuse automatically if nobody answers. Default 120 s. */\n timeoutMs?: number\n}\n\nconst summarise = (input: unknown): string => {\n if (input === null || typeof input !== 'object') return ''\n const lines = Object.entries(input as Record<string, unknown>)\n .slice(0, 6)\n .map(([k, v]) => `${k}: ${typeof v === 'string' ? v : JSON.stringify(v)}`.slice(0, 90))\n return lines.join('\\n')\n}\n\n/**\n * The default browser reviewer: a small modal asking the visitor to allow or\n * refuse the agent's action. Resolves false without a document (server), on\n * \"Not now\", on Escape, or after the timeout.\n */\nexport const createReviewPrompt = ({\n documentRef = typeof document === 'undefined' ? undefined : document,\n timeoutMs = 120_000,\n}: ReviewPromptOptions = {}): Reviewer => {\n return (request) =>\n new Promise<boolean>((resolve) => {\n if (!documentRef?.body) return resolve(false)\n const doc = documentRef\n\n const backdrop = doc.createElement('div')\n backdrop.setAttribute('data-agentronics-review', 'true')\n Object.assign(backdrop.style, {\n position: 'fixed',\n inset: '0',\n zIndex: '2147483647',\n background: 'rgba(11,11,12,0.45)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '16px',\n })\n\n const dialog = doc.createElement('div')\n dialog.setAttribute('role', 'dialog')\n dialog.setAttribute('aria-modal', 'true')\n dialog.setAttribute('aria-label', 'Approve agent action')\n Object.assign(dialog.style, {\n width: 'min(440px, 100%)',\n background: '#FFFFFF',\n color: '#0B0B0C',\n border: '2px solid #0B0B0C',\n borderRadius: '16px',\n padding: '20px',\n boxShadow: '8px 8px 0 #0B0B0C',\n font: \"14px/1.5 system-ui, -apple-system, 'Segoe UI', sans-serif\",\n })\n\n const heading = doc.createElement('div')\n heading.style.fontWeight = '700'\n heading.style.fontSize = '16px'\n const who = request.identity?.vendor ?? 'An AI agent'\n heading.textContent = `${who} wants to ${request.title ?? request.tool}`\n\n const body = doc.createElement('div')\n body.style.margin = '8px 0 0'\n body.style.color = 'rgba(11,11,12,0.65)'\n body.textContent = request.description ?? 'Allow this action on your behalf?'\n\n const details = doc.createElement('pre')\n const summary = summarise(request.input)\n Object.assign(details.style, {\n display: summary ? 'block' : 'none',\n margin: '12px 0 0',\n padding: '10px 12px',\n background: 'rgba(11,11,12,0.06)',\n borderRadius: '10px',\n fontSize: '12px',\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n })\n details.textContent = summary\n\n const row = doc.createElement('div')\n Object.assign(row.style, { display: 'flex', gap: '8px', justifyContent: 'flex-end', marginTop: '16px' })\n const button = (label: string, primary: boolean) => {\n const b = doc.createElement('button')\n b.type = 'button'\n b.textContent = label\n Object.assign(b.style, {\n padding: '9px 16px',\n borderRadius: '10px',\n border: '2px solid #0B0B0C',\n // Agentronics design system: lime is the \"go\" action, always with ink text\n background: primary ? '#D4FF3A' : '#FFFFFF',\n color: '#0B0B0C',\n boxShadow: primary ? '3px 3px 0 #0B0B0C' : 'none',\n font: 'inherit',\n fontWeight: '650',\n cursor: 'pointer',\n })\n return b\n }\n const deny = button('Not now', false)\n const allow = button('Allow', true)\n row.append(deny, allow)\n dialog.append(heading, body, details, row)\n backdrop.append(dialog)\n\n let settled = false\n const finish = (ok: boolean) => {\n if (settled) return\n settled = true\n clearTimeout(timer)\n doc.removeEventListener('keydown', onKey, true)\n backdrop.remove()\n resolve(ok)\n }\n const onKey = (event: KeyboardEvent) => {\n if (event.key === 'Escape') finish(false)\n }\n const timer = setTimeout(() => finish(false), timeoutMs)\n allow.addEventListener('click', () => finish(true))\n deny.addEventListener('click', () => finish(false))\n doc.addEventListener('keydown', onKey, true)\n doc.body.appendChild(backdrop)\n allow.focus()\n })\n}\n","import type { TraceEvent as TraceEventRecord } from '@agentronics/protocol'\n\nexport interface TraceBuffer {\n add(event: TraceEventRecord): void\n list(): TraceEventRecord[]\n clear(): void\n}\n\nexport const createTraceBuffer = (limit = 500): TraceBuffer => {\n const events: TraceEventRecord[] = []\n\n return {\n add(event) {\n events.push(event)\n if (events.length > limit) events.splice(0, events.length - limit)\n },\n list() {\n return [...events]\n },\n clear() {\n events.length = 0\n },\n }\n}\n","import type { TraceEvent as TraceEventRecord } from '@agentronics/protocol'\n\nexport interface SamplerOptions {\n traceRate?: number\n errorRate?: number\n random?: () => number\n}\n\nconst clampRate = (value: number | undefined, fallback: number): number => {\n if (value === undefined) return fallback\n return Math.max(0, Math.min(1, value))\n}\n\nexport const createSampler = (options: SamplerOptions = {}) => {\n const traceRate = clampRate(options.traceRate, 1)\n const errorRate = clampRate(options.errorRate, 1)\n const random = options.random ?? Math.random\n\n return {\n shouldKeep(event: Pick<TraceEventRecord, 'outcome'>): boolean {\n const rate = event.outcome === 'error' ? errorRate : traceRate\n return random() < rate\n },\n }\n}\n\nexport type TraceSampler = ReturnType<typeof createSampler>\n","const REDACTED = '[REDACTED]'\n\nconst cloneJson = (value: unknown): unknown => {\n if (value === undefined) return undefined\n return JSON.parse(JSON.stringify(value)) as unknown\n}\n\nconst redactPath = (target: unknown, parts: string[]): void => {\n if (parts.length === 0 || typeof target !== 'object' || target === null) return\n const [head, ...rest] = parts\n if (!head) return\n\n if (Array.isArray(target)) {\n for (const item of target) redactPath(item, parts)\n return\n }\n\n const record = target as Record<string, unknown>\n if (!(head in record)) return\n if (rest.length === 0) {\n record[head] = REDACTED\n return\n }\n redactPath(record[head], rest)\n}\n\nexport const scrubValue = <T>(value: T, paths: string[] = []): T => {\n if (paths.length === 0) return value\n const cloned = cloneJson(value) as T\n for (const path of paths) redactPath(cloned, path.split('.').filter(Boolean))\n return cloned\n}\n\nexport const DEFAULT_SCRUB_PATHS = [\n 'metadata.password',\n 'metadata.token',\n 'metadata.authorization',\n 'metadata.cookie',\n]\n","import {\n TraceEvent,\n type TraceEvent as TraceEventRecord,\n type TraceEventType,\n} from '@agentronics/protocol'\nimport { createTraceBuffer, type TraceBuffer } from './buffer.js'\nimport { createSampler, type SamplerOptions } from './sampler.js'\nimport { DEFAULT_SCRUB_PATHS, scrubValue } from './scrub.js'\n\nexport interface TraceExporter {\n name: string\n export(events: TraceEventRecord[]): Promise<void> | void\n}\n\nexport interface TraceInput {\n type: TraceEventType\n outcome?: TraceEventRecord['outcome']\n tool?: string\n agent?: TraceEventRecord['agent']\n policy?: TraceEventRecord['policy']\n durationMs?: number\n error?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface TracerOptions extends SamplerOptions {\n siteId: string\n bufferSize?: number\n sessionId?: string\n scrubPaths?: string[]\n exporters?: TraceExporter[]\n onExporterError?: (error: unknown, exporter: TraceExporter, event: TraceEventRecord) => void\n /**\n * Resolves the page each emitted event belongs to — stamped into\n * `metadata.page` (a reserved trace metadata key) unless the caller already\n * set it. The dashboard groups WebMCP tools and agent activity by this.\n * Defaults to `location.pathname`; returns `undefined` outside a browser\n * (SSR / Node tests), in which case no `page` key is written.\n */\n pageProvider?: () => string | undefined\n}\n\nconst defaultPageProvider = (): string | undefined =>\n typeof location !== 'undefined' && typeof location.pathname === 'string'\n ? location.pathname\n : undefined\n\nexport interface Tracer {\n readonly sessionId: string\n emit(input: TraceInput): Promise<TraceEventRecord | null>\n list(): TraceEventRecord[]\n clear(): void\n}\n\nconst randomId = (prefix: string): string => {\n const cryptoApi = globalThis.crypto\n if (cryptoApi && 'randomUUID' in cryptoApi) return `${prefix}_${cryptoApi.randomUUID()}`\n return `${prefix}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`\n}\n\nexport const createTracer = ({\n siteId,\n bufferSize,\n sessionId = randomId('ses'),\n scrubPaths = DEFAULT_SCRUB_PATHS,\n exporters = [],\n onExporterError,\n pageProvider = defaultPageProvider,\n ...samplerOptions\n}: TracerOptions): Tracer => {\n const buffer: TraceBuffer = createTraceBuffer(bufferSize)\n const sampler = createSampler(samplerOptions)\n\n // A host-supplied provider must never break tracing — swallow throws.\n const readPage = (): string | undefined => {\n try {\n return pageProvider()\n } catch {\n return undefined\n }\n }\n\n return {\n sessionId,\n async emit(input) {\n const metadata: Record<string, unknown> = { ...input.metadata }\n if (metadata.page === undefined) {\n const page = readPage()\n if (page !== undefined) metadata.page = page\n }\n const event = TraceEvent.parse(\n scrubValue(\n {\n id: randomId('trc'),\n siteId,\n sessionId,\n occurredAt: new Date().toISOString(),\n outcome: input.outcome ?? 'success',\n ...input,\n metadata,\n },\n scrubPaths\n )\n )\n\n if (!sampler.shouldKeep(event)) return null\n buffer.add(event)\n\n await Promise.all(\n exporters.map(async (exporter) => {\n try {\n await exporter.export([event])\n } catch (error) {\n onExporterError?.(error, exporter, event)\n }\n })\n )\n\n return event\n },\n list: () => buffer.list(),\n clear: () => buffer.clear(),\n }\n}\n","import type { TraceEvent as TraceEventRecord } from '@agentronics/protocol'\nimport type { TraceExporter } from '../tracer.js'\n\nexport const createConsoleExporter = (): TraceExporter => ({\n name: 'console',\n export(events: TraceEventRecord[]) {\n for (const event of events) {\n console.info('[agentronics:trace]', event.type, event)\n }\n },\n})\n","import type { TraceBatch, TraceEvent as TraceEventRecord } from '@agentronics/protocol'\nimport type { TraceExporter } from '../tracer.js'\n\nexport interface GatewayExporterOptions {\n gatewayUrl: string\n publishableKey: string\n fetcher?: typeof fetch\n /** Send queued events this often (ms). Default 2000. */\n flushMs?: number\n /** Events per request; the API accepts at most 100. Default 50. */\n maxBatch?: number\n /** Events kept while the API is unreachable; the oldest are dropped first. Default 500. */\n maxQueue?: number\n}\n\nexport interface GatewayExporter extends TraceExporter {\n /** Send everything queued now (`keepalive` lets it outlive the page); settles when the requests do. */\n flush(keepalive?: boolean): Promise<void>\n}\n\n/**\n * Sends traces to the Agentronics API from the browser. Events are queued and\n * sent in batches — every couple of seconds, when a batch fills, and when the\n * page is hidden or closed — rather than one request per event, so a busy page\n * stays within the API's per-visitor rate limit. Never throws into the page:\n * a failed send drops that batch.\n */\nexport const createGatewayExporter = ({\n gatewayUrl,\n publishableKey,\n fetcher,\n flushMs = 2000,\n maxBatch = 50,\n maxQueue = 500,\n}: GatewayExporterOptions): GatewayExporter => {\n const url = `${gatewayUrl.replace(/\\/$/, '')}/v1/pub/traces`\n const batchSize = Math.max(1, Math.min(100, maxBatch))\n let queue: TraceEventRecord[] = []\n let timer: ReturnType<typeof setTimeout> | null = null\n\n const send = (events: TraceEventRecord[], keepalive: boolean): Promise<void> => {\n const doFetch = fetcher ?? (typeof fetch === 'function' ? fetch : null)\n if (!doFetch) return Promise.resolve()\n const batch: TraceBatch = { publishableKey, events }\n try {\n return Promise.resolve(\n doFetch(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json', authorization: `Bearer ${publishableKey}` },\n body: JSON.stringify(batch),\n ...(keepalive ? { keepalive: true } : {}),\n }),\n ).then(\n () => undefined,\n () => undefined,\n )\n } catch {\n /* a fetch that throws synchronously (blocked, polyfilled) loses this batch only */\n return Promise.resolve()\n }\n }\n\n const flush = (keepalive = false): Promise<void> => {\n if (timer !== null) {\n clearTimeout(timer)\n timer = null\n }\n const sends: Promise<void>[] = []\n while (queue.length) sends.push(send(queue.splice(0, batchSize), keepalive))\n return Promise.all(sends).then(() => undefined)\n }\n\n // Don't lose the last events when the visitor leaves.\n if (typeof document !== 'undefined' && typeof document.addEventListener === 'function') {\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden') void flush(true)\n })\n }\n if (typeof addEventListener === 'function') addEventListener('pagehide', () => void flush(true))\n\n return {\n name: 'gateway',\n export(events: TraceEventRecord[]) {\n queue.push(...events)\n if (queue.length > maxQueue) queue = queue.slice(queue.length - maxQueue)\n if (queue.length >= batchSize) void flush()\n else if (timer === null) timer = setTimeout(() => void flush(), flushMs)\n },\n flush,\n }\n}\n","import type { TraceEvent as TraceEventRecord } from '@agentronics/protocol'\nimport type { TraceExporter } from '../tracer.js'\n\nexport interface WebhookExporterOptions {\n url: string\n fetcher?: typeof fetch\n maxRetries?: number\n queueLimit?: number\n}\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\n\nexport const createWebhookExporter = ({\n url,\n fetcher = fetch,\n maxRetries = 2,\n queueLimit = 500,\n}: WebhookExporterOptions): TraceExporter => ({\n name: 'webhook',\n async export(events: TraceEventRecord[]) {\n const queued = readQueue(url)\n const batch = [...queued, ...events].slice(-queueLimit)\n let attempt = 0\n while (true) {\n const response = await fetcher(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ events: batch }),\n })\n if (response.ok) {\n writeQueue(url, [])\n return\n }\n if (attempt >= maxRetries) {\n writeQueue(url, batch)\n throw new Error(`Webhook exporter failed with status ${response.status}.`)\n }\n attempt += 1\n await sleep(100 * attempt)\n }\n },\n})\n\nconst queueKey = (url: string) => `agtx:webhook:${url}`\n\nconst readQueue = (url: string): TraceEventRecord[] => {\n if (typeof window === 'undefined' || !window.localStorage) return []\n try {\n const raw = window.localStorage.getItem(queueKey(url))\n return raw ? (JSON.parse(raw) as TraceEventRecord[]) : []\n } catch {\n return []\n }\n}\n\nconst writeQueue = (url: string, events: TraceEventRecord[]): void => {\n if (typeof window === 'undefined' || !window.localStorage) return\n try {\n if (events.length === 0) {\n window.localStorage.removeItem(queueKey(url))\n return\n }\n window.localStorage.setItem(queueKey(url), JSON.stringify(events))\n } catch {\n // If storage is unavailable, webhook export failure still surfaces via the thrown error.\n }\n}\n","import {\n AgentronicsError,\n classifyApiKey,\n PUBLISHABLE_KEY_PREFIX,\n type AgentIdentity,\n type PolicyEvaluation,\n type PolicyRule,\n PolicyRule as PolicyRuleSchema,\n SiteMemory as SiteMemorySchema,\n type TraceEvent,\n} from '@agentronics/protocol'\nimport { detectAgent, type DetectAgentOptions } from './detection/index.js'\nimport { createVisionDetector, type VisionDetector, type VisionDetectorOptions } from './detection/vision.js'\nimport { SDK_VERSION } from './version.js'\nimport {\n createIdentityStore,\n type PresentedIdentity,\n type PresentIdentityOptions,\n} from './auth/identity.js'\nimport { createAuthEngine, type AuthContext, type AuthEngine, type AuthInput } from './auth/engine.js'\nimport { createAgentContextStore, type AgentContextStore } from './auth/agentContext.js'\nimport { createPolicyEngine, type PolicyEngine } from './authz/engine.js'\nimport { createPolicyCache, type PolicyCache } from './authz/policyCache.js'\nimport { installDomEnforcer } from './authz/domEnforcer.js'\nimport { createMemoryStore, type MemoryStore } from './memory/store.js'\nimport {\n createSiteMemoryStore,\n type SiteMemoryStore,\n type ProvideForPageInput,\n} from './memory/siteMemory.js'\nimport { createMemoryCache, type MemoryCache } from './memory/memoryCache.js'\nimport {\n installMetaTags,\n installMemoryOverlay,\n fetchWellKnownContext,\n} from './memory/delivery/index.js'\nimport { createToolRegistry, type GovernedTool, type ToolRegistry } from './tools/registry.js'\nimport { createToolSync } from './tools/toolSync.js'\nimport {\n createProgressionStore,\n type ProgressionConfig,\n type ProgressionStore,\n} from './tools/progression.js'\nimport { surfaceTools, explainSurfacing, type SurfacingDecision } from './tools/surfacing.js'\nimport { groupTools, type ToolGroupSummary } from './tools/groups.js'\nimport { estimateBudget, type TokenBudgetReport } from './tools/tokenEstimate.js'\nimport { createWebMcpAdapter, type WebMcpAdapter, type WebMcpRegistration } from './tools/webmcpAdapter.js'\nimport { onWebMcpActivity } from './tools/modelContext.js'\nimport { createReviewPrompt, type Reviewer } from './authz/reviewPrompt.js'\nimport type { SiteMemory } from '@agentronics/protocol'\nimport {\n createConsoleExporter,\n createGatewayExporter,\n createTracer,\n createWebhookExporter,\n type TraceExporter,\n type Tracer,\n} from './observability/index.js'\n\nexport interface InitOptions {\n publishableKey: string\n siteId?: string\n /**\n * Override the Agentronics API URL the SDK calls. **Reserved for local\n * development only** — the only accepted values are `localhost` /\n * `127.0.0.1` URLs (so `pnpm dev` against a local API works). Any other\n * value throws at `init()` time.\n *\n * Production deployments must omit this option. The SDK calls\n * `https://api.agentronics.dev` (the retired `gateway.agentronics.dev` is\n * accepted and mapped to it). Custom backends are not supported, by\n * design — see the project README + LICENSE NOTICE.\n *\n * @internal — kept on the public type only so dev tooling type-checks.\n */\n gatewayUrl?: string\n debug?: boolean\n policies?: PolicyRule[]\n siteMemory?: Partial<SiteMemory>\n auth?: AuthContext\n progression?: ProgressionConfig\n tools?: GovernedTool[]\n /**\n * Who approves tool calls whose policy decision is `review`. Default in the\n * browser: a small \"Allow / Not now\" dialog for the person on the page.\n * Pass your own function to use your UI, or `false` to refuse every review.\n */\n review?: Reviewer | false\n /**\n * `'0.6'` keeps the pre-0.7 behaviour while you upgrade: unverified tokens\n * count as `verified`, SSO / SPIFFE / mTLS are on, and `review` rules run\n * without asking. Insecure and temporary — see the 0.7 upgrade guide.\n * @deprecated Remove once you've moved to the 0.7 behaviour.\n */\n compat?: '0.6'\n /**\n * Approved tool descriptions from the console's Procedural memory page\n * (`createDashboardSync().pullConfig().toolDescriptions`). They replace the\n * code's description when tools are published to agents.\n */\n toolDescriptions?: Record<string, string>\n /**\n * Run agent detection automatically on init and keep the resulting\n * identity in agentContext so every subsequent tools.execute() call gets\n * attributed without the host page passing identity through. Default\n * `true` — opt out with `false` for privacy-mode hosts, or pass\n * DetectAgentOptions to tune the detectors (e.g. raise the DOM threshold).\n *\n * The first detection cycle runs synchronously where possible (DOM\n * heuristics) and continues asynchronously for WebMCP polling, so very\n * early click handlers may see identity=null for a single frame; the\n * `ready` promise on the returned client resolves once the cycle finishes.\n */\n autoDetect?: boolean | DetectAgentOptions\n /**\n * Watch interactions for vision-model (\"screenshot\") agents — teleport and\n * centre clicks, metronome typing. On by default in the browser whenever\n * `autoDetect` is on; reads timing and coordinates only, never keystrokes.\n */\n visionDetection?: boolean | Omit<VisionDetectorOptions, 'onDetect'>\n trace?: {\n enabled?: boolean\n bufferSize?: number\n traceRate?: number\n errorRate?: number\n scrubPaths?: string[]\n exporters?: TraceExporter[]\n gateway?: boolean\n webhookUrl?: string\n }\n}\n\nexport interface AgentronicsClient {\n readonly publishableKey: string\n readonly siteId: string\n readonly gatewayUrl: string\n readonly debug: boolean\n readonly memory: MemoryStore\n readonly siteMemory: SiteMemoryStore\n readonly memoryCache: MemoryCache\n readonly tracer: Tracer\n readonly auth: AuthEngine\n readonly agentContext: AgentContextStore\n readonly authz: PolicyEngine\n readonly policyCache: PolicyCache\n readonly tools: ToolRegistry\n readonly progression: ProgressionStore | null\n readonly webmcp: WebMcpAdapter\n /** The vision-agent monitor, when running. */\n readonly vision: VisionDetector | null\n /**\n * Resolves once the initial autoDetect cycle finishes. Rejects only if the\n * autoDetect configuration itself is invalid; detection failures resolve to\n * `null` (treated as \"human or undetectable agent\"). When `autoDetect` was\n * disabled the promise resolves immediately to `null`.\n */\n readonly ready: Promise<AgentIdentity | null>\n detect(options?: DetectAgentOptions): Promise<AgentIdentity | null>\n authenticate(input: AuthInput): Promise<AgentIdentity | null>\n presentIdentity(input: PresentIdentityOptions): PresentedIdentity\n clearIdentity(): void\n presentedIdentity(): PresentedIdentity | null\n setPolicies(rules: PolicyRule[]): void\n listPolicies(): PolicyRule[]\n evaluate(tool: string, options?: { identity?: AgentIdentity | null }): Promise<PolicyEvaluation>\n syncPolicies(): Promise<PolicyRule[]>\n syncSiteMemory(): Promise<SiteMemory | null>\n /**\n * Pull everything the console manages for this site with the publishable\n * key alone — authorization rules, approved tool descriptions and site\n * memory — and apply it (re-publishing WebMCP tools if they changed).\n */\n syncConfig(): Promise<{ policies: PolicyRule[]; toolDescriptions: Record<string, string>; siteMemory: SiteMemory | null }>\n provideSiteMemory(memory: Partial<SiteMemory>): SiteMemory\n provideForPage(input: ProvideForPageInput): void\n installMemoryDelivery(options?: {\n metaTags?: boolean\n overlay?: boolean\n }): { uninstall: () => void }\n fetchWellKnown(origin?: string): Promise<SiteMemory | null>\n installDomEnforcer(): { uninstall: () => void }\n registerTool(tool: GovernedTool): () => void\n /** Replace the description overrides (see `toolDescriptions`). */\n setToolDescriptions(descriptions: Record<string, string>): void\n /** Push the full tool registry to the gateway so the dashboard can render\n * the page-wise view (schemas, per-tool tokens, context fullness). */\n syncTools(): Promise<number>\n surfaceTools(options?: { identity?: AgentIdentity | null }): GovernedTool[]\n explainSurfacing(options?: { identity?: AgentIdentity | null }): SurfacingDecision[]\n groupedTools(options?: { identity?: AgentIdentity | null }): ToolGroupSummary[]\n estimateTokens(options?: { identity?: AgentIdentity | null }): TokenBudgetReport\n /**\n * Register the surfaced tools with `document.modelContext`. `registrations`\n * resolves with each tool's status (callable / failed) once the browser\n * has accepted or rejected it.\n */\n publishToWebMcp(options?: { identity?: AgentIdentity | null }): {\n revoked: boolean\n surfaced: number\n registrations: Promise<WebMcpRegistration[]>\n }\n notifyToolInvoked(toolName: string): void\n traces(): TraceEvent[]\n clearTraces(): void\n /**\n * Sanity-check the publishable key + gateway URL. Hits `GET /v1/health` and\n * resolves to `{ ok: true, ... }` on 2xx, `{ ok: false, status, error }`\n * otherwise. Doesn't throw — designed for \"did my key wire up correctly?\"\n * UX without forcing the host page into a try/catch.\n */\n ping(): Promise<{ ok: true; status: number; body: unknown } | { ok: false; status: number; error: string }>\n}\n\nconst DEFAULT_GATEWAY_URL = 'https://api.agentronics.dev'\n/** The retired gateway host; still accepted so old configs keep working. */\nconst RETIRED_GATEWAY_URL = 'https://gateway.agentronics.dev'\n\n/**\n * Lock the SDK to the canonical Agentronics API. The only override\n * accepted is a localhost / 127.0.0.1 URL — purely so contributors running\n * `pnpm dev` can hit a local gateway. Any other value (a competing host, a\n * proxy, an MITM target) throws synchronously, before any traces are\n * emitted.\n *\n * The Agentronics SDK is licensed under Apache 2.0 but is designed to\n * operate exclusively against the Agentronics service. Self-hosted /\n * third-party backends are not supported.\n */\nconst resolveGatewayUrl = (provided: string | undefined): string => {\n if (provided === undefined) return DEFAULT_GATEWAY_URL\n if (provided.replace(/\\/$/, '') === DEFAULT_GATEWAY_URL) return DEFAULT_GATEWAY_URL\n if (provided.replace(/\\/$/, '') === RETIRED_GATEWAY_URL) return DEFAULT_GATEWAY_URL\n let parsed: URL\n try {\n parsed = new URL(provided)\n } catch {\n throw new Error(\n `Agentronics SDK: \\`gatewayUrl\\` is not a valid URL: ${provided}`\n )\n }\n if (parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1') {\n return provided\n }\n throw new Error(\n `Agentronics SDK does not support custom API URLs. ` +\n `Omit \\`gatewayUrl\\` to use the canonical ${DEFAULT_GATEWAY_URL}. ` +\n `The only accepted override is a localhost / 127.0.0.1 URL for local development. ` +\n `Got: ${provided}`\n )\n}\n\nexport const init = (options: InitOptions): AgentronicsClient => {\n const {\n publishableKey,\n siteId = 'default',\n debug = false,\n policies = [],\n trace = {},\n } = options\n const gatewayUrl = resolveGatewayUrl(options.gatewayUrl)\n\n const kind = classifyApiKey(publishableKey)\n if (kind === 'secret') {\n throw new AgentronicsError(\n 'wrong_key_kind',\n 'A secret key was passed to Agentronics.init(). Browser code must use a publishable key (agtx_pk_*).'\n )\n }\n if (kind !== 'publishable') {\n throw new AgentronicsError(\n 'invalid_api_key',\n `Agentronics.init() expected a key starting with \"${PUBLISHABLE_KEY_PREFIX}\".`\n )\n }\n\n const traceEnabled = trace.enabled ?? true\n const exporters = [\n ...(debug ? [createConsoleExporter()] : []),\n ...(trace.gateway ? [createGatewayExporter({ gatewayUrl, publishableKey })] : []),\n ...(trace.webhookUrl ? [createWebhookExporter({ url: trace.webhookUrl })] : []),\n ...(trace.exporters ?? []),\n ]\n const tracerOptions: Parameters<typeof createTracer>[0] = {\n siteId,\n exporters: traceEnabled ? exporters : [],\n onExporterError: (error, exporter) => {\n if (debug) console.warn(`[agentronics] trace exporter \"${exporter.name}\" failed`, error)\n },\n }\n if (trace.bufferSize !== undefined) tracerOptions.bufferSize = trace.bufferSize\n if (trace.traceRate !== undefined) tracerOptions.traceRate = trace.traceRate\n if (trace.errorRate !== undefined) tracerOptions.errorRate = trace.errorRate\n if (trace.scrubPaths !== undefined) tracerOptions.scrubPaths = trace.scrubPaths\n const tracer = createTracer(tracerOptions)\n const emitTrace = (input: Parameters<Tracer['emit']>[0]) => {\n if (!traceEnabled) return\n void tracer.emit(input)\n }\n const identityStore = createIdentityStore()\n const authOptions: Parameters<typeof createAuthEngine>[0] = {\n onTrace: emitTrace,\n }\n if (options.auth !== undefined) authOptions.context = options.auth\n if (options.compat === '0.6') {\n authOptions.compat = '0.6'\n console.warn(\n \"[agentronics] compat: '0.6' is on — unverified tokens are trusted and review rules run without asking. \" +\n 'Remove it once you have upgraded: https://agentronics.dev/docs/guides/upgrade-0-7'\n )\n }\n authOptions.onUnverifiedToken = (method) => {\n if (options.compat === '0.6') return\n console.warn(\n `[agentronics] A ${method} credential was presented but nothing verifies it, so the agent is 'declared', not 'verified'. ` +\n 'Wire auth.verifyToken to your backend: https://agentronics.dev/docs/auth/overview#in-the-browser'\n )\n }\n const auth = createAuthEngine(authOptions)\n const agentContext = createAgentContextStore()\n const policyEngine = createPolicyEngine(policies)\n const policyCache = createPolicyCache({ gatewayUrl, siteId, publishableKey })\n const memory = createMemoryStore({ onTrace: emitTrace })\n const siteMemoryOptions: Parameters<typeof createSiteMemoryStore>[0] = {\n onTrace: emitTrace,\n }\n if (options.siteMemory !== undefined) siteMemoryOptions.initial = options.siteMemory\n const siteMemory = createSiteMemoryStore(siteMemoryOptions)\n const memoryCache = createMemoryCache({ gatewayUrl, siteId, publishableKey })\n const toolSync = createToolSync({ gatewayUrl, siteId, publishableKey })\n\n const detect = async (detectOptions?: DetectAgentOptions) => {\n const start = Date.now()\n const detected = await detectAgent(detectOptions)\n const identity = identityStore.preferOver(detected)\n if (traceEnabled) {\n await tracer.emit({\n type: identity ? 'agent.detected' : 'agent.missed',\n agent: identity,\n durationMs: Date.now() - start,\n metadata: {\n detectedClass: detected?.class ?? null,\n presented: identityStore.snapshot() !== null,\n },\n })\n }\n agentContext.set(identity, 'detect')\n return identity\n }\n const evaluate = async (tool: string, opts: { identity?: AgentIdentity | null } = {}) => {\n const start = Date.now()\n const identity = opts.identity !== undefined ? opts.identity : await detect()\n const policy = policyEngine.evaluate({ tool, identity })\n if (traceEnabled) {\n await tracer.emit({\n type: 'authz.evaluated',\n tool,\n agent: identity,\n policy,\n outcome: policy.decision === 'deny' ? 'blocked' : 'success',\n durationMs: Date.now() - start,\n })\n }\n return policy\n }\n // compat '0.6': review rules ran the tool without asking before 0.7.\n const legacyReviewer: Reviewer = async () => true\n const reviewer: Reviewer | undefined =\n options.review === false\n ? undefined\n : (options.review ??\n (options.compat === '0.6' ? legacyReviewer : typeof document === 'undefined' ? undefined : createReviewPrompt()))\n const tools = createToolRegistry({\n evaluate,\n ...(reviewer ? { reviewer } : {}),\n setPolicies: (rules) => policyEngine.set(rules),\n listPolicies: () => policyEngine.list(),\n onTrace: emitTrace,\n // Every tools.execute() call without an explicit identity gets the\n // current detected/declared/authenticated agent. Button-bound tools\n // become attributable without their handlers having to know about\n // agents.\n identityResolver: () => agentContext.snapshot().identity,\n })\n for (const tool of options.tools ?? []) tools.register(tool)\n\n const progression = options.progression\n ? createProgressionStore(options.progression, { onTrace: emitTrace })\n : null\n\n const surfacingContext = (identity: AgentIdentity | null) => {\n const ctx: { identity: AgentIdentity | null; stage?: string; enabledStages?: string[] } = {\n identity,\n }\n if (progression) {\n ctx.stage = progression.current()\n ctx.enabledStages = progression.enabledStages()\n }\n return ctx\n }\n\n let toolDescriptions: Record<string, string> = { ...(options.toolDescriptions ?? {}) }\n const withDescriptions = (list: GovernedTool[]) =>\n list.map((tool) => {\n const description = toolDescriptions[tool.name]\n return description ? { ...tool, description } : tool\n })\n const surfaceFor = (identity: AgentIdentity | null) =>\n withDescriptions(surfaceTools(tools.list(), surfacingContext(identity)))\n const applyToolDescriptions = (descriptions: Record<string, string>) => {\n toolDescriptions = { ...descriptions }\n if (publishedKey !== null) {\n publishedKey = null // descriptions changed: re-register even if the names didn't\n republish(surfaceFor(agentContext.snapshot().identity))\n }\n }\n\n // Names of the last published set; null until the host first publishes.\n let publishedKey: string | null = null\n const keyOf = (list: GovernedTool[]) => list.map((tool) => tool.name).sort().join('\\n')\n const republish = (list: GovernedTool[]) => {\n const key = keyOf(list)\n if (key === publishedKey) return null\n publishedKey = key\n return webmcp.publish(list)\n }\n\n const handleToolInvoked = (toolName: string) => {\n if (!progression) return\n const transition = progression.notify(toolName)\n if (transition.changed && publishedKey !== null) republish(surfaceFor(agentContext.snapshot().identity))\n }\n\n // Fallback identity used only when no detection has fired yet AND the call\n // arrives through navigator.modelContext — a call through that channel is\n // by definition an agent call, even if the specific vendor wasn't matched.\n const fallbackWebMcpIdentity: AgentIdentity = {\n class: 'webmcp',\n trust: 'detected',\n confidence: 1,\n vendor: null,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : null,\n detectionVersion: SDK_VERSION,\n signals: { source: 'navigator.modelContext' },\n }\n\n const webmcp = createWebMcpAdapter({\n invoke: async (tool, input, signal) => {\n noteWebMcpCall(tool.name)\n const identity = agentContext.snapshot().identity ?? fallbackWebMcpIdentity\n const result = await tools.execute(tool.name, input, identity, signal ? { signal } : {})\n handleToolInvoked(tool.name)\n return result\n },\n })\n\n // A tool call or `toolactivated` event through document.modelContext is the\n // WebMCP agent announcing itself: attribute the session to it unless a\n // stronger identity (declared / authenticated) is already in place.\n const adoptWebMcpAgent = (toolName: string) => {\n const current = agentContext.snapshot().identity\n if (current && current.trust !== 'detected') return\n if (current?.class === 'webmcp') return\n const identity: AgentIdentity = {\n ...fallbackWebMcpIdentity,\n signals: { source: webmcp.source() ?? 'document', tool: toolName },\n }\n agentContext.set(identity, 'detect')\n emitTrace({ type: 'agent.detected', agent: identity, metadata: { detectedClass: 'webmcp', via: 'webmcp-activity' } })\n }\n const noteWebMcpCall = (toolName: string) => adoptWebMcpAgent(toolName)\n onWebMcpActivity((activity) => {\n if (activity.type === 'activated') adoptWebMcpAgent(activity.toolName)\n })\n\n // When the ambient identity changes (late WebMCP polyfill, declared\n // identity, successful authenticate()), re-publish the WebMCP surface so\n // any agent currently bound to navigator.modelContext sees the\n // identity-gated tool set rather than the stale anonymous one.\n // Only once the host has published, and only when the identity-gated set\n // actually changed: re-registering aborts the current registrations.\n agentContext.subscribe((snapshot) => {\n if (publishedKey === null || !webmcp.available()) return\n republish(surfaceFor(snapshot.identity))\n })\n\n const visionOption = options.visionDetection ?? options.autoDetect !== false\n const vision: VisionDetector | null =\n visionOption === false || typeof document === 'undefined'\n ? null\n : createVisionDetector({\n ...(visionOption === true ? {} : visionOption),\n onDetect: (identity) => {\n const current = agentContext.snapshot().identity\n // Never replace a declared/verified identity or a WebMCP agent with a heuristic.\n if (current && (current.trust !== 'detected' || current.class === 'webmcp')) return\n agentContext.set(identity, 'detect')\n emitTrace({ type: 'agent.detected', agent: identity, metadata: { detectedClass: 'screenshot', via: 'vision-behaviour' } })\n },\n })\n\n // Kick off the initial detection cycle if the host opted in. Default is\n // on so /traces is populated with class/trust/signals without the host\n // page having to call detect() manually before each interaction.\n const autoDetectOption = options.autoDetect ?? true\n const ready: Promise<AgentIdentity | null> = autoDetectOption === false\n ? Promise.resolve(null)\n : (async () => {\n const detectOpts: DetectAgentOptions =\n autoDetectOption === true ? {} : autoDetectOption\n try {\n return await detect(detectOpts)\n } catch (err) {\n // Detection problems shouldn't crash the host's init() — log when\n // debug is on, otherwise swallow and treat as \"human or\n // undetectable agent.\"\n if (debug) console.warn('[agentronics] autoDetect failed:', err)\n return null\n }\n })()\n\n return Object.freeze({\n publishableKey,\n siteId,\n gatewayUrl,\n debug,\n memory,\n siteMemory,\n memoryCache,\n tracer,\n auth,\n agentContext,\n authz: policyEngine,\n policyCache,\n tools,\n progression,\n webmcp,\n vision,\n ready,\n detect,\n authenticate: async (input: AuthInput) => {\n const identity = await auth.authenticate(input)\n agentContext.set(identity, 'authenticate')\n return identity\n },\n presentIdentity: (input: PresentIdentityOptions) => {\n const presented = identityStore.present(input)\n emitTrace({\n type: 'auth.identity_presented',\n agent: presented.identity,\n metadata: { vendor: presented.identity.vendor, class: presented.identity.class },\n })\n agentContext.set(presented.identity, 'declare')\n return presented\n },\n clearIdentity: () => {\n identityStore.clear()\n emitTrace({ type: 'auth.identity_cleared' })\n agentContext.set(null, 'cleared')\n },\n presentedIdentity: () => identityStore.snapshot(),\n setPolicies: (rules: PolicyRule[]) => {\n policyEngine.set(rules)\n emitTrace({ type: 'authz.policies_set', metadata: { count: rules.length } })\n },\n listPolicies: () => policyEngine.list(),\n syncPolicies: async () => {\n const snapshot = await policyCache.sync()\n policyEngine.set(snapshot.policies)\n emitTrace({ type: 'authz.policies_set', metadata: { count: snapshot.policies.length, synced: true } })\n return snapshot.policies\n },\n syncSiteMemory: async () => {\n const snapshot = await memoryCache.sync()\n if (snapshot.memory) {\n siteMemory.replace(snapshot.memory)\n emitTrace({\n type: 'memory.updated',\n metadata: { kind: 'site', operation: 'sync', etag: snapshot.etag },\n })\n }\n return snapshot.memory\n },\n syncConfig: async () => {\n const response = await fetch(\n `${gatewayUrl.replace(/\\/$/, '')}/v1/pub/sites/${encodeURIComponent(siteId)}/config`,\n { headers: { authorization: `Bearer ${publishableKey}` } }\n )\n if (!response.ok) throw new Error(`Config sync failed with status ${response.status}.`)\n const body = (await response.json()) as {\n policies?: unknown\n toolDescriptions?: Record<string, string>\n siteMemory?: unknown\n }\n const rules = PolicyRuleSchema.array().parse(body.policies ?? [])\n policyEngine.set(rules)\n emitTrace({ type: 'authz.policies_set', metadata: { count: rules.length, synced: true } })\n const memory = body.siteMemory && typeof body.siteMemory === 'object' && Object.keys(body.siteMemory).length\n ? siteMemory.replace(SiteMemorySchema.parse(body.siteMemory))\n : null\n const descriptions = body.toolDescriptions && typeof body.toolDescriptions === 'object' ? body.toolDescriptions : {}\n applyToolDescriptions(descriptions)\n return { policies: rules, toolDescriptions: descriptions, siteMemory: memory }\n },\n provideSiteMemory: (next: Partial<SiteMemory>) => siteMemory.provide(next),\n provideForPage: (input: ProvideForPageInput) => {\n siteMemory.provideForPage(input)\n },\n installMemoryDelivery: ({ metaTags = true, overlay = false } = {}) => {\n const handles: Array<{ uninstall: () => void }> = []\n if (metaTags) handles.push(installMetaTags({ snapshot: siteMemory.snapshot() }))\n if (overlay) handles.push(installMemoryOverlay({ snapshot: siteMemory.snapshot() }))\n return {\n uninstall: () => {\n handles.forEach((handle) => handle.uninstall())\n },\n }\n },\n fetchWellKnown: async (origin?: string) => {\n const wellKnownOptions: Parameters<typeof fetchWellKnownContext>[0] = {}\n if (origin !== undefined) wellKnownOptions.origin = origin\n const memorySnapshot = await fetchWellKnownContext(wellKnownOptions)\n if (memorySnapshot) {\n siteMemory.replace(memorySnapshot)\n emitTrace({\n type: 'memory.updated',\n metadata: { kind: 'site', operation: 'wellKnown', origin: origin ?? null },\n })\n }\n return memorySnapshot\n },\n installDomEnforcer: () =>\n installDomEnforcer({\n policyEngine,\n getIdentity: () => detect({ webmcp: { pollMs: 0 } }),\n }),\n registerTool: (tool: GovernedTool) => tools.register(tool),\n setToolDescriptions: (descriptions: Record<string, string>) => applyToolDescriptions(descriptions),\n syncTools: async () => {\n const all = tools.list({ includeDisabled: true })\n const count = await toolSync.push(all)\n emitTrace({ type: 'tool.registered', metadata: { operation: 'sync', count } })\n return count\n },\n surfaceTools: ({ identity = null }: { identity?: AgentIdentity | null } = {}) => surfaceFor(identity),\n explainSurfacing: ({ identity = null }: { identity?: AgentIdentity | null } = {}) =>\n explainSurfacing(tools.list(), surfacingContext(identity)),\n groupedTools: ({ identity = null }: { identity?: AgentIdentity | null } = {}) => groupTools(surfaceFor(identity)),\n estimateTokens: ({ identity = null }: { identity?: AgentIdentity | null } = {}) => estimateBudget(surfaceFor(identity)),\n publishToWebMcp: ({ identity = null }: { identity?: AgentIdentity | null } = {}) => {\n const surfaced = surfaceFor(identity)\n publishedKey = keyOf(surfaced)\n const result = webmcp.publish(surfaced)\n const registrations = result.registrations.then((list) => {\n list.forEach((r) => {\n emitTrace({\n type: 'tool.surfaced',\n tool: r.name,\n outcome: r.status === 'callable' ? 'success' : 'error',\n ...(r.error ? { error: r.error } : {}),\n metadata: { state: r.status === 'callable' ? 'published' : 'failed', source: webmcp.source(), trust: identity?.trust ?? null },\n })\n })\n return list\n })\n return { revoked: result.revoked, surfaced: surfaced.length, registrations }\n },\n notifyToolInvoked: (toolName: string) => handleToolInvoked(toolName),\n evaluate,\n traces: () => tracer.list(),\n clearTraces: () => tracer.clear(),\n async ping() {\n try {\n const response = await fetch(`${gatewayUrl.replace(/\\/$/, '')}/v1/pub/health`, {\n method: 'GET',\n headers: { authorization: `Bearer ${publishableKey}` },\n })\n if (!response.ok) {\n return { ok: false as const, status: response.status, error: `gateway returned ${response.status}` }\n }\n const body = (await response.json().catch(() => null)) ?? {}\n return { ok: true as const, status: response.status, body }\n } catch (error) {\n return {\n ok: false as const,\n status: 0,\n error: error instanceof Error ? error.message : String(error),\n }\n }\n },\n })\n}\n"]}