@agentronics/sdk 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/detection/webmcp.ts","../src/detection/dom.ts","../src/detection/detectors/registry.ts","../src/detection/declare.ts","../src/detection/detectors/signatureLoader.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/webmcpContext.ts","../src/memory/delivery/metaTags.ts","../src/memory/delivery/overlay.ts","../src/memory/delivery/wellKnownClient.ts","../src/tools/registry.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","../src/index.ts"],"names":["readModelContext","value","detectWebMcp","options","pollMs","start","ctx","buildIdentity","resolve","HEADLESS_UA_PATTERNS","checkWebdriver","checkChromedriver","keys","k","checkPlugins","desktop","empty","checkHeadlessUa","ua","hit","re","checkLanguages","langs","checkPermissions","hasChrome","SIGNALS","detectDom","threshold","signals","totalWeight","hitWeight","name","check","result","confidence","bundledDetectors","createDetectorRegistry","initial","detectors","detector","status","all","includeResearch","identity","declareAgent","input","parsedClass","AgentClass","trust","createSignatureLoader","gatewayUrl","fetcher","etag","signatures","response","detectAgent","custom","webmcp","dom","claim","createIdentityStore","presented","parsed","IdentityClaim","AgentronicsError","next","detected","isHigherTrust","deriveTrustLevel","declared","verified","linked","highestTrust","identities","best","TRUST_RANK","bearer","context","detectionAsAuth","extensionToken","mtls","oauth2","identityFromClaim","selfDeclaration","sessionLink","sso","spiffe","isGoogleFlavor","xAgentHeader","vendor","rawClass","proof","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","siteId","publishableKey","snapshot","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","createWebMcpContextTool","toolName","description","getSnapshot","onAccess","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","serializeWellKnownContext","createToolRegistry","evaluate","setPolicies","listPolicies","tools","disabled","writePolicyFor","item","includeDisabled","policy","output","error","createProgressionStore","config","stageMap","stage","current","enabled","transitionTo","trigger","from","transition","t","previous","passesTrust","minTrust","passesClass","allowed","passesStage","decideSurfacing","cls","surfaceTools","explainSurfacing","DEFAULT_GROUP","groupTools","bucket","a","b","list","listGroupNames","stableStringify","estimateToolTokens","descriptor","characters","estimateBudget","perTool","sum","resolveProvider","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","detect","detectOptions","opts","progression","surfacingContext","surfaceFor","handleToolInvoked","metaTags","overlay","handles","wellKnownOptions","memorySnapshot","surfaced","Agentronics","VERSION"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AgentIdentity } from '@agentronics/protocol'\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: '2026.04',\n signals: {\n webmcp: true,\n toolCount: Array.isArray(ctx.tools) ? ctx.tools.length : 0,\n },\n})\n","import type { AgentIdentity } from '@agentronics/protocol'\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: '2026.04',\n signals,\n }\n}\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { detectDom } from '../dom.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: '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 { AgentClass, type AgentIdentity, type TrustLevel } from '@agentronics/protocol'\n\nexport interface DeclareAgentInput {\n class: 'webmcp' | 'dom' | 'screenshot'\n vendor: string\n /** Optional bearer token returned by the customer's verification endpoint. */\n verificationToken?: string\n}\n\nexport const declareAgent = (input: DeclareAgentInput): AgentIdentity => {\n const parsedClass = AgentClass.parse(input.class)\n const trust: TrustLevel = input.verificationToken ? 'verified' : 'declared'\n\n return {\n class: parsedClass,\n trust,\n confidence: 1,\n vendor: input.vendor,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: '2026.04',\n signals: {\n declared: true,\n hasVerificationToken: Boolean(input.verificationToken),\n },\n }\n}\n","export interface DetectorSignature {\n id: string\n status: 'stable' | 'beta' | 'research'\n version: string\n signals: Record<string, unknown>\n}\n\nexport interface SignatureLoaderOptions {\n gatewayUrl: string\n fetcher?: typeof fetch\n}\n\nexport const createSignatureLoader = ({ gatewayUrl, fetcher = fetch }: SignatureLoaderOptions) => {\n let etag: string | null = null\n let signatures: DetectorSignature[] = []\n\n return {\n snapshot(): DetectorSignature[] {\n return [...signatures]\n },\n async sync(): Promise<DetectorSignature[]> {\n const response = await fetcher(`${gatewayUrl.replace(/\\/$/, '')}/v1/detector-signatures`, {\n headers: etag ? { 'if-none-match': etag } : {},\n })\n if (response.status === 304) return this.snapshot()\n if (!response.ok) throw new Error(`Detector signature sync failed with status ${response.status}.`)\n\n const body = (await response.json()) as { signatures?: DetectorSignature[] }\n signatures = body.signatures ?? []\n etag = response.headers.get('etag')\n return this.snapshot()\n },\n }\n}\n\nexport type SignatureLoader = ReturnType<typeof createSignatureLoader>\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { detectWebMcp, type DetectWebMcpOptions } from './webmcp.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 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 DOM heuristics.\n * Returns `null` 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.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 { 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'\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: '2026.04',\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'\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: '2026.04',\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'\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: '2026.04',\n signals: { extensionToken: true, verifiedRemotely: Boolean(verified) },\n }\n },\n})\n","import type { AuthMethod } from '../engine.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: '2026.04',\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'\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: '2026.04',\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'\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: '2026.04',\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'\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: '2026.04',\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'\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: '2026.04',\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'\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: '2026.04',\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 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: '2026.04',\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\nexport interface WebMcpContextTool {\n name: string\n description: string\n inputSchema: { type: 'object'; properties: Record<string, unknown>; required: string[] }\n invoke(input?: { path?: string }): { content: SiteMemory | unknown }\n}\n\nexport interface WebMcpContextOptions {\n toolName?: string\n description?: string\n getSnapshot: () => SiteMemory\n onAccess?: (path: string | null) => void\n}\n\nexport const createWebMcpContextTool = ({\n toolName = 'getSiteContext',\n description = 'Returns Agentronics site memory: page map, workflows, policies, UI guidance.',\n getSnapshot,\n onAccess,\n}: WebMcpContextOptions): WebMcpContextTool => ({\n name: toolName,\n description,\n inputSchema: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n description: 'Optional dot-path into the site memory (e.g. \"workflows.purchase\").',\n },\n },\n required: [],\n },\n invoke(input = {}) {\n const snapshot = getSnapshot()\n const path = input.path ?? null\n onAccess?.(path)\n if (!path) return { content: snapshot }\n const parts = path.split('.').filter(Boolean)\n let cursor: unknown = snapshot\n for (const key of parts) {\n if (typeof cursor !== 'object' || cursor === null) return { content: undefined }\n cursor = (cursor as Record<string, unknown>)[key]\n }\n return { content: cursor }\n },\n})\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 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\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}: 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 = null\n ): Promise<Output> {\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: identity, policy, outcome: 'blocked' })\n throw new Error(policy.reason)\n }\n const policy = await evaluate(name, { identity })\n if (policy.decision === 'deny') {\n onTrace?.({ type: 'tool.executed', tool: name, agent: identity, 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 })\n onTrace?.({\n type: 'tool.executed',\n tool: name,\n agent: identity,\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: identity,\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 { 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 return win?.navigator?.modelContext ?? null\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 {\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 {\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 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 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 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\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 })\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(null))\n }\n\n const webmcp = createWebMcpAdapter({\n invoke: async (tool, input) => {\n const result = await tools.execute(tool.name, input, null)\n handleToolInvoked(tool.name)\n return result\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 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 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","import { init, type AgentronicsClient, type InitOptions } from './init.js'\nimport {\n declareAgent,\n bundledDetectors,\n createDetectorRegistry,\n createSignatureLoader,\n detectAgent,\n detectDom,\n detectWebMcp,\n type DeclareAgentInput,\n type DetectAgentOptions,\n type DetectDomOptions,\n type DetectWebMcpOptions,\n type Detector,\n type DetectorRegistry,\n type DetectorStatus,\n type DomSignalName,\n} from './detection/index.js'\nimport {\n createIdentityStore,\n type IdentityStore,\n type PresentIdentityOptions,\n type PresentedIdentity,\n} from './auth/identity.js'\nimport { createAuthEngine, type AuthEngine, type AuthInput, type AuthMethod } from './auth/engine.js'\nimport {\n createAgentContextStore,\n type AgentContextStore,\n type AgentContextSnapshot,\n type AgentContextListener,\n} from './auth/agentContext.js'\nimport { deriveTrustLevel, highestTrust } from './auth/trustLevel.js'\nimport { createPolicyEngine, type PolicyEngine } from './authz/engine.js'\nimport { createRateLimiter, type RateLimiter } from './authz/rateLimiter.js'\nimport { createPolicyCache, type PolicyCache } from './authz/policyCache.js'\nimport { installDomEnforcer } from './authz/domEnforcer.js'\nimport { showDenyOverlay } from './authz/overlay.js'\nimport { createMemoryStore, type MemoryStore } from './memory/store.js'\nimport {\n createSiteMemoryStore,\n type SiteMemoryStore,\n type SiteMemoryListener,\n type ProvideForPageInput,\n} from './memory/siteMemory.js'\nimport { createMemoryCache, type MemoryCache } from './memory/memoryCache.js'\nimport {\n createWebMcpContextTool,\n installMetaTags,\n installMemoryOverlay,\n fetchWellKnownContext,\n serializeWellKnownContext,\n WELL_KNOWN_PATH,\n type WebMcpContextTool,\n type WebMcpContextOptions,\n} from './memory/delivery/index.js'\nimport { createToolRegistry, type GovernedTool, type ToolRegistry } from './tools/registry.js'\nimport {\n decideSurfacing,\n surfaceTools,\n explainSurfacing,\n type SurfacingContext,\n type SurfacingDecision,\n} from './tools/surfacing.js'\nimport {\n groupTools,\n listGroupNames,\n DEFAULT_GROUP,\n type ToolGroupSummary,\n} from './tools/groups.js'\nimport {\n createProgressionStore,\n type ProgressionConfig,\n type ProgressionStage,\n type ProgressionStore,\n type ProgressionTransition,\n} from './tools/progression.js'\nimport {\n estimateBudget,\n estimateToolTokens,\n type ToolTokenEstimate,\n type TokenBudgetReport,\n} from './tools/tokenEstimate.js'\nimport {\n createWebMcpAdapter,\n type WebMcpAdapter,\n type WebMcpAdapterOptions,\n type WebMcpToolDescriptor,\n type WebMcpProvider,\n} from './tools/webmcpAdapter.js'\nimport {\n createTracer,\n createTraceBuffer,\n createConsoleExporter,\n createGatewayExporter,\n createWebhookExporter,\n type TraceExporter,\n type TraceInput,\n type Tracer,\n} from './observability/index.js'\n\nexport {\n init,\n declareAgent,\n detectAgent,\n detectDom,\n detectWebMcp,\n createDetectorRegistry,\n bundledDetectors,\n createSignatureLoader,\n createIdentityStore,\n createAuthEngine,\n createAgentContextStore,\n deriveTrustLevel,\n highestTrust,\n createPolicyEngine,\n createRateLimiter,\n createPolicyCache,\n installDomEnforcer,\n showDenyOverlay,\n createToolRegistry,\n decideSurfacing,\n surfaceTools,\n explainSurfacing,\n groupTools,\n listGroupNames,\n DEFAULT_GROUP,\n createProgressionStore,\n estimateBudget,\n estimateToolTokens,\n createWebMcpAdapter,\n createMemoryStore,\n createSiteMemoryStore,\n createMemoryCache,\n createWebMcpContextTool,\n installMetaTags,\n installMemoryOverlay,\n fetchWellKnownContext,\n serializeWellKnownContext,\n WELL_KNOWN_PATH,\n createTracer,\n createTraceBuffer,\n createConsoleExporter,\n createGatewayExporter,\n createWebhookExporter,\n}\nexport type {\n AgentronicsClient,\n AuthEngine,\n AuthInput,\n AuthMethod,\n AgentContextStore,\n AgentContextSnapshot,\n AgentContextListener,\n DeclareAgentInput,\n DetectAgentOptions,\n DetectDomOptions,\n DetectWebMcpOptions,\n DomSignalName,\n IdentityStore,\n InitOptions,\n MemoryStore,\n SiteMemoryStore,\n SiteMemoryListener,\n MemoryCache,\n ProvideForPageInput,\n WebMcpContextTool,\n WebMcpContextOptions,\n GovernedTool,\n ToolRegistry,\n SurfacingContext,\n SurfacingDecision,\n ToolGroupSummary,\n ProgressionConfig,\n ProgressionStage,\n ProgressionStore,\n ProgressionTransition,\n ToolTokenEstimate,\n TokenBudgetReport,\n WebMcpAdapter,\n WebMcpAdapterOptions,\n WebMcpToolDescriptor,\n WebMcpProvider,\n PolicyEngine,\n PolicyCache,\n RateLimiter,\n Detector,\n DetectorRegistry,\n DetectorStatus,\n PresentIdentityOptions,\n PresentedIdentity,\n TraceExporter,\n TraceInput,\n Tracer,\n}\n\nexport const Agentronics = { init, declareAgent, detectAgent }\n\nexport const VERSION = '0.1.0'\n"]}
1
+ {"version":3,"sources":["../src/version.ts","../src/detection/webmcp.ts","../src/detection/dom.ts","../src/detection/detectors/registry.ts","../src/detection/declare.ts","../src/detection/detectors/signatureLoader.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/webmcpContext.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","../src/index.ts"],"names":["SDK_VERSION","readModelContext","value","detectWebMcp","options","pollMs","start","ctx","buildIdentity","resolve","HEADLESS_UA_PATTERNS","checkWebdriver","checkChromedriver","keys","k","checkPlugins","desktop","empty","checkHeadlessUa","ua","hit","re","checkLanguages","langs","checkPermissions","hasChrome","SIGNALS","detectDom","threshold","signals","totalWeight","hitWeight","name","check","result","confidence","bundledDetectors","createDetectorRegistry","initial","detectors","detector","status","all","includeResearch","identity","declareAgent","input","parsedClass","AgentClass","trust","createSignatureLoader","gatewayUrl","fetcher","etag","signatures","response","detectAgent","custom","webmcp","dom","claim","createIdentityStore","presented","parsed","IdentityClaim","AgentronicsError","next","detected","isHigherTrust","deriveTrustLevel","declared","verified","linked","highestTrust","identities","best","TRUST_RANK","bearer","context","detectionAsAuth","extensionToken","mtls","oauth2","identityFromClaim","selfDeclaration","sessionLink","sso","spiffe","isGoogleFlavor","xAgentHeader","vendor","rawClass","proof","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","siteId","publishableKey","snapshot","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","createWebMcpContextTool","toolName","description","getSnapshot","onAccess","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","serializeWellKnownContext","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","transition","t","previous","passesTrust","minTrust","passesClass","allowed","passesStage","decideSurfacing","cls","surfaceTools","explainSurfacing","DEFAULT_GROUP","groupTools","bucket","a","b","list","listGroupNames","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","Agentronics","VERSION"],"mappings":"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","file":"index.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\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 { 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: '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 { AgentClass, type AgentIdentity, type TrustLevel } from '@agentronics/protocol'\nimport { SDK_VERSION } from \"../version.js\"\n\nexport interface DeclareAgentInput {\n class: 'webmcp' | 'dom' | 'screenshot'\n vendor: string\n /** Optional bearer token returned by the customer's verification endpoint. */\n verificationToken?: string\n}\n\nexport const declareAgent = (input: DeclareAgentInput): AgentIdentity => {\n const parsedClass = AgentClass.parse(input.class)\n const trust: TrustLevel = input.verificationToken ? 'verified' : 'declared'\n\n return {\n class: parsedClass,\n trust,\n confidence: 1,\n vendor: input.vendor,\n userAgent: typeof navigator === 'undefined' ? null : navigator.userAgent,\n detectionVersion: SDK_VERSION,\n signals: {\n declared: true,\n hasVerificationToken: Boolean(input.verificationToken),\n },\n }\n}\n","export interface DetectorSignature {\n id: string\n status: 'stable' | 'beta' | 'research'\n version: string\n signals: Record<string, unknown>\n}\n\nexport interface SignatureLoaderOptions {\n gatewayUrl: string\n fetcher?: typeof fetch\n}\n\nexport const createSignatureLoader = ({ gatewayUrl, fetcher = fetch }: SignatureLoaderOptions) => {\n let etag: string | null = null\n let signatures: DetectorSignature[] = []\n\n return {\n snapshot(): DetectorSignature[] {\n return [...signatures]\n },\n async sync(): Promise<DetectorSignature[]> {\n const response = await fetcher(`${gatewayUrl.replace(/\\/$/, '')}/v1/detector-signatures`, {\n headers: etag ? { 'if-none-match': etag } : {},\n })\n if (response.status === 304) return this.snapshot()\n if (!response.ok) throw new Error(`Detector signature sync failed with status ${response.status}.`)\n\n const body = (await response.json()) as { signatures?: DetectorSignature[] }\n signatures = body.signatures ?? []\n etag = response.headers.get('etag')\n return this.snapshot()\n },\n }\n}\n\nexport type SignatureLoader = ReturnType<typeof createSignatureLoader>\n","import type { AgentIdentity } from '@agentronics/protocol'\nimport { detectWebMcp, type DetectWebMcpOptions } from './webmcp.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 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 DOM heuristics.\n * Returns `null` 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.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 { 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\nexport interface WebMcpContextTool {\n name: string\n description: string\n inputSchema: { type: 'object'; properties: Record<string, unknown>; required: string[] }\n invoke(input?: { path?: string }): { content: SiteMemory | unknown }\n}\n\nexport interface WebMcpContextOptions {\n toolName?: string\n description?: string\n getSnapshot: () => SiteMemory\n onAccess?: (path: string | null) => void\n}\n\nexport const createWebMcpContextTool = ({\n toolName = 'getSiteContext',\n description = 'Returns Agentronics site memory: page map, workflows, policies, UI guidance.',\n getSnapshot,\n onAccess,\n}: WebMcpContextOptions): WebMcpContextTool => ({\n name: toolName,\n description,\n inputSchema: {\n type: 'object',\n properties: {\n path: {\n type: 'string',\n description: 'Optional dot-path into the site memory (e.g. \"workflows.purchase\").',\n },\n },\n required: [],\n },\n invoke(input = {}) {\n const snapshot = getSnapshot()\n const path = input.path ?? null\n onAccess?.(path)\n if (!path) return { content: snapshot }\n const parts = path.split('.').filter(Boolean)\n let cursor: unknown = snapshot\n for (const key of parts) {\n if (typeof cursor !== 'object' || cursor === null) return { content: undefined }\n cursor = (cursor as Record<string, unknown>)[key]\n }\n return { content: cursor }\n },\n})\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","import { init, type AgentronicsClient, type InitOptions } from './init.js'\nimport {\n declareAgent,\n bundledDetectors,\n createDetectorRegistry,\n createSignatureLoader,\n detectAgent,\n detectDom,\n detectWebMcp,\n type DeclareAgentInput,\n type DetectAgentOptions,\n type DetectDomOptions,\n type DetectWebMcpOptions,\n type Detector,\n type DetectorRegistry,\n type DetectorStatus,\n type DomSignalName,\n} from './detection/index.js'\nimport {\n createIdentityStore,\n type IdentityStore,\n type PresentIdentityOptions,\n type PresentedIdentity,\n} from './auth/identity.js'\nimport { createAuthEngine, type AuthEngine, type AuthInput, type AuthMethod } from './auth/engine.js'\nimport {\n createAgentContextStore,\n type AgentContextStore,\n type AgentContextSnapshot,\n type AgentContextListener,\n} from './auth/agentContext.js'\nimport { deriveTrustLevel, highestTrust } from './auth/trustLevel.js'\nimport { createPolicyEngine, type PolicyEngine } from './authz/engine.js'\nimport { createRateLimiter, type RateLimiter } from './authz/rateLimiter.js'\nimport { createPolicyCache, type PolicyCache } from './authz/policyCache.js'\nimport { installDomEnforcer } from './authz/domEnforcer.js'\nimport { showDenyOverlay } from './authz/overlay.js'\nimport { createMemoryStore, type MemoryStore } from './memory/store.js'\nimport {\n createSiteMemoryStore,\n type SiteMemoryStore,\n type SiteMemoryListener,\n type ProvideForPageInput,\n} from './memory/siteMemory.js'\nimport { createMemoryCache, type MemoryCache } from './memory/memoryCache.js'\nimport {\n createWebMcpContextTool,\n installMetaTags,\n installMemoryOverlay,\n fetchWellKnownContext,\n serializeWellKnownContext,\n WELL_KNOWN_PATH,\n type WebMcpContextTool,\n type WebMcpContextOptions,\n} from './memory/delivery/index.js'\nimport { createToolRegistry, type GovernedTool, type ToolRegistry } from './tools/registry.js'\nimport {\n decideSurfacing,\n surfaceTools,\n explainSurfacing,\n type SurfacingContext,\n type SurfacingDecision,\n} from './tools/surfacing.js'\nimport {\n groupTools,\n listGroupNames,\n DEFAULT_GROUP,\n type ToolGroupSummary,\n} from './tools/groups.js'\nimport {\n createProgressionStore,\n type ProgressionConfig,\n type ProgressionStage,\n type ProgressionStore,\n type ProgressionTransition,\n} from './tools/progression.js'\nimport {\n estimateBudget,\n estimateToolTokens,\n type ToolTokenEstimate,\n type TokenBudgetReport,\n} from './tools/tokenEstimate.js'\nimport {\n createWebMcpAdapter,\n type WebMcpAdapter,\n type WebMcpAdapterOptions,\n type WebMcpToolDescriptor,\n type WebMcpProvider,\n} from './tools/webmcpAdapter.js'\nimport {\n createTracer,\n createTraceBuffer,\n createConsoleExporter,\n createGatewayExporter,\n createWebhookExporter,\n type TraceExporter,\n type TraceInput,\n type Tracer,\n} from './observability/index.js'\n\nexport {\n init,\n declareAgent,\n detectAgent,\n detectDom,\n detectWebMcp,\n createDetectorRegistry,\n bundledDetectors,\n createSignatureLoader,\n createIdentityStore,\n createAuthEngine,\n createAgentContextStore,\n deriveTrustLevel,\n highestTrust,\n createPolicyEngine,\n createRateLimiter,\n createPolicyCache,\n installDomEnforcer,\n showDenyOverlay,\n createToolRegistry,\n decideSurfacing,\n surfaceTools,\n explainSurfacing,\n groupTools,\n listGroupNames,\n DEFAULT_GROUP,\n createProgressionStore,\n estimateBudget,\n estimateToolTokens,\n createWebMcpAdapter,\n createMemoryStore,\n createSiteMemoryStore,\n createMemoryCache,\n createWebMcpContextTool,\n installMetaTags,\n installMemoryOverlay,\n fetchWellKnownContext,\n serializeWellKnownContext,\n WELL_KNOWN_PATH,\n createTracer,\n createTraceBuffer,\n createConsoleExporter,\n createGatewayExporter,\n createWebhookExporter,\n}\nexport type {\n AgentronicsClient,\n AuthEngine,\n AuthInput,\n AuthMethod,\n AgentContextStore,\n AgentContextSnapshot,\n AgentContextListener,\n DeclareAgentInput,\n DetectAgentOptions,\n DetectDomOptions,\n DetectWebMcpOptions,\n DomSignalName,\n IdentityStore,\n InitOptions,\n MemoryStore,\n SiteMemoryStore,\n SiteMemoryListener,\n MemoryCache,\n ProvideForPageInput,\n WebMcpContextTool,\n WebMcpContextOptions,\n GovernedTool,\n ToolRegistry,\n SurfacingContext,\n SurfacingDecision,\n ToolGroupSummary,\n ProgressionConfig,\n ProgressionStage,\n ProgressionStore,\n ProgressionTransition,\n ToolTokenEstimate,\n TokenBudgetReport,\n WebMcpAdapter,\n WebMcpAdapterOptions,\n WebMcpToolDescriptor,\n WebMcpProvider,\n PolicyEngine,\n PolicyCache,\n RateLimiter,\n Detector,\n DetectorRegistry,\n DetectorStatus,\n PresentIdentityOptions,\n PresentedIdentity,\n TraceExporter,\n TraceInput,\n Tracer,\n}\n\nexport const Agentronics = { init, declareAgent, detectAgent }\n\nexport const VERSION = '0.1.0'\n"]}