{"version":3,"file":"threadplane-telemetry.mjs","sources":["../../../../../libs/telemetry/src/browser/tokens.ts","../../../../../libs/telemetry/src/browser/service.ts","../../../../../libs/telemetry/src/browser/provide.ts","../../../../../libs/telemetry/src/browser/properties.ts","../../../../../libs/telemetry/src/browser/development/types.ts","../../../../../libs/telemetry/src/browser/development/session.ts","../../../../../libs/telemetry/src/browser/development/announcements.ts","../../../../../libs/telemetry/src/browser/development/collector.ts","../../../../../libs/telemetry/src/browser/development/runtime.ts","../../../../../libs/telemetry/src/browser/threadplane-telemetry.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport type ThreadplaneTelemetryEvent =\n  | 'tplane:browser_provided'\n  | 'tplane:browser_chat_init'\n  | 'tplane:runtime_instance_created'\n  | 'tplane:runtime_request_created'\n  | 'tplane:stream_started'\n  | 'tplane:stream_ended'\n  | 'tplane:stream_errored';\n\nexport interface ThreadplaneTelemetryEventPayload {\n  event: ThreadplaneTelemetryEvent;\n  properties?: Record<string, unknown>;\n}\n\nexport type ThreadplaneTelemetrySink = (payload: ThreadplaneTelemetryEventPayload) => void | Promise<void>;\n\nexport interface ThreadplaneTelemetryConfig {\n  enabled: boolean;\n  /**\n   * Preferred app-owned delivery hook. Use this when the consuming app wants\n   * to forward events through its own analytics boundary.\n   */\n  sink?: ThreadplaneTelemetrySink;\n  /**\n   * Preferred app-owned ingest URL. The browser service POSTs neutral event\n   * payloads here; the endpoint decides where they ultimately go.\n   */\n  endpoint?: string;\n  /** @deprecated Prefer sink or endpoint so public app code is vendor-neutral. */\n  posthogKey?: string;\n  /** @deprecated Prefer sink or endpoint so public app code is vendor-neutral. */\n  posthogHost?: string;\n  sampleRate?: number;\n}\n\nexport const THREADPLANE_TELEMETRY_CONFIG = new InjectionToken<ThreadplaneTelemetryConfig | null>(\n  'THREADPLANE_TELEMETRY_CONFIG',\n);\n","import { Injectable, inject } from '@angular/core';\nimport {\n  THREADPLANE_TELEMETRY_CONFIG,\n  type ThreadplaneTelemetryConfig,\n  type ThreadplaneTelemetryEvent,\n} from './tokens';\n\n// Inlined from shared/events.ts: ng-packagr enforces rootDir at the entry-file\n// level (src/browser/), so the browser entry cannot import from ../shared/.\n// Keep this type in sync with shared/events.ts.\nexport type ThreadplaneBrowserEvent = ThreadplaneTelemetryEvent;\n\n/** Runtime lifecycle properties captured from browser-side agent adapters. */\nexport interface ThreadplaneBrowserRuntimeTelemetry {\n  /** Runtime transport, such as `langgraph` or `ag-ui`. */\n  transport: string;\n  /** Optional product or app surface tag. */\n  surface?: string;\n  /** Optional model provider name. */\n  provider?: string;\n  /** Optional model name. */\n  model?: string;\n}\n\n/** Stream telemetry properties captured from browser-side agent adapters. */\nexport interface ThreadplaneBrowserStreamTelemetry extends ThreadplaneBrowserRuntimeTelemetry {\n  /** Stream duration in milliseconds, when known. */\n  durationMs?: number;\n}\n\n/** Stream error telemetry. The raw error is reduced to an error class. */\nexport interface ThreadplaneBrowserStreamErrorTelemetry extends ThreadplaneBrowserStreamTelemetry {\n  /** Raw error object or value; capture sends only `errorClass`. */\n  error?: unknown;\n}\n\nfunction normalizeSampleRate(sampleRate: number | undefined): number {\n  if (sampleRate === undefined) return 1;\n  if (!Number.isFinite(sampleRate)) return 1;\n  if (sampleRate <= 0) return 0;\n  if (sampleRate >= 1) return 1;\n  return sampleRate;\n}\n\nfunction errorClass(error: unknown): string {\n  if (error instanceof Error && error.name) return error.name;\n  if (error && typeof error === 'object' && 'name' in error && typeof error.name === 'string') {\n    return error.name;\n  }\n  return 'UnknownError';\n}\n\n/**\n * Browser-side telemetry service.\n *\n * The service no-ops unless `provideThreadplaneTelemetry({ enabled: true })`\n * configured it. It enriches sent events with `sample_weight`, then delivers\n * them through `sink`, `endpoint`, or legacy PostHog configuration.\n */\n@Injectable({ providedIn: 'root' })\nexport class ThreadplaneTelemetryService {\n  private config: ThreadplaneTelemetryConfig | null = inject(THREADPLANE_TELEMETRY_CONFIG, { optional: true });\n  private postHogPromise: Promise<typeof import('posthog-js')['default'] | null> | null = null;\n  private distinctId: string | null = null;\n\n  /** Capture an arbitrary enabled browser telemetry event. */\n  async capture(event: ThreadplaneTelemetryEvent, properties?: Record<string, unknown>): Promise<void> {\n    if (!this.config?.enabled) return;\n    const sampleRate = normalizeSampleRate(this.config.sampleRate);\n    if (sampleRate === 0) return;\n    if (sampleRate < 1 && Math.random() >= sampleRate) return;\n\n    const enrichedProperties = {\n      ...(properties ?? {}),\n      sample_weight: properties?.['sample_weight'] ?? 1 / sampleRate,\n    };\n\n    try {\n      if (this.config.sink) {\n        await this.config.sink({ event, properties: enrichedProperties });\n        return;\n      }\n      if (this.config.endpoint) {\n        await this.captureEndpoint(event, enrichedProperties);\n        return;\n      }\n      if (!this.config.posthogKey) return;\n      const ph = await this.loadPostHog();\n      if (!ph) return;\n      ph.capture(event, enrichedProperties);\n    } catch {\n      // silent fail\n    }\n  }\n\n  /** Capture a runtime construction event. */\n  captureRuntimeInstanceCreated(input: ThreadplaneBrowserRuntimeTelemetry): Promise<void> {\n    return this.capture('tplane:runtime_instance_created', { ...input });\n  }\n\n  /** Capture a runtime request creation event. */\n  captureRuntimeRequestCreated(input: ThreadplaneBrowserRuntimeTelemetry & { requestType: string }): Promise<void> {\n    return this.capture('tplane:runtime_request_created', { ...input });\n  }\n\n  /** Capture a stream-start event. */\n  captureStreamStarted(input: ThreadplaneBrowserStreamTelemetry): Promise<void> {\n    return this.capture('tplane:stream_started', { ...input });\n  }\n\n  /** Capture a stream-end event. */\n  captureStreamEnded(input: ThreadplaneBrowserStreamTelemetry): Promise<void> {\n    return this.capture('tplane:stream_ended', { ...input });\n  }\n\n  /** Capture a stream-error event, sending only the derived error class. */\n  captureStreamErrored(input: ThreadplaneBrowserStreamErrorTelemetry): Promise<void> {\n    const { error, ...rest } = input;\n    return this.capture('tplane:stream_errored', {\n      ...rest,\n      errorClass: errorClass(error),\n    });\n  }\n\n  private async captureEndpoint(event: ThreadplaneTelemetryEvent, properties: Record<string, unknown>): Promise<void> {\n    if (typeof fetch !== 'function' || !this.config?.endpoint) return;\n    await fetch(this.config.endpoint, {\n      method: 'POST',\n      headers: { 'content-type': 'application/json' },\n      keepalive: true,\n      body: JSON.stringify({\n        event,\n        distinctId: this.getDistinctId(),\n        properties,\n      }),\n    });\n  }\n\n  private getDistinctId(): string {\n    if (!this.distinctId) {\n      const cryptoApi = globalThis.crypto as Crypto | undefined;\n      const value = typeof cryptoApi?.randomUUID === 'function'\n        ? cryptoApi.randomUUID()\n        : Math.random().toString(36).slice(2, 12);\n      this.distinctId = `browser:${value}`;\n    }\n    return this.distinctId;\n  }\n\n  private loadPostHog(): Promise<typeof import('posthog-js')['default'] | null> {\n    if (!this.postHogPromise) {\n      this.postHogPromise = import('posthog-js').then((mod) => {\n        if (!this.config?.posthogKey) return null;\n        mod.default.init(this.config.posthogKey, {\n          api_host: this.config.posthogHost ?? 'https://us.i.posthog.com',\n        });\n        return mod.default;\n      }).catch(() => null);\n    }\n    return this.postHogPromise;\n  }\n}\n","import { makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';\nimport { THREADPLANE_TELEMETRY_CONFIG, type ThreadplaneTelemetryConfig } from './tokens';\nimport { ThreadplaneTelemetryService } from './service';\n\n/**\n * Provide browser telemetry configuration for an Angular app.\n *\n * Browser telemetry remains off unless this provider is installed with\n * `enabled: true`. Delivery goes through `sink`, `endpoint`, or the legacy\n * PostHog options configured on `ThreadplaneTelemetryConfig`.\n */\nexport function provideThreadplaneTelemetry(config: ThreadplaneTelemetryConfig): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    { provide: THREADPLANE_TELEMETRY_CONFIG, useValue: config },\n    ThreadplaneTelemetryService,\n  ]);\n}\n","// Note: kept self-contained (no `../shared` import) so ng-packagr can compile\n// this entry point in isolation. The trim+truncate hardening is duplicated\n// from shared/properties.ts on purpose — it's a few lines, and the alternative\n// is a secondary ng-packagr entry point for shared, which is heavier.\nfunction toSafeString(value: unknown, maxLength: number): string | undefined {\n  if (typeof value !== 'string') return undefined;\n  const trimmed = value.trim();\n  if (!trimmed) return undefined;\n  return trimmed.slice(0, maxLength);\n}\n\nexport type CaptureConfig = {\n  token?: string;\n  captureLocal?: boolean;\n  host?: string;\n};\n\nexport function isLocalAnalyticsHost(host: unknown): boolean {\n  const value = toSafeString(host, 300)?.toLowerCase();\n  if (!value) return false;\n\n  // IPv6 literal `::1` or `[::1]:port` — don't naively split on `:`.\n  if (value === '::1' || value.startsWith('[::1]')) return true;\n\n  const hostname = value.split(':')[0];\n  return hostname === 'localhost' || hostname === '127.0.0.1';\n}\n\nexport function shouldCaptureAnalytics({ token, captureLocal = false, host }: CaptureConfig): boolean {\n  if (!toSafeString(token, 500)) return false;\n  if (isLocalAnalyticsHost(host) && !captureLocal) return false;\n  return true;\n}\n","export type DevelopmentIntegration = 'langgraph' | 'ag-ui' | 'render';\nexport type DevelopmentMilestone =\n  | 'transport.connected'\n  | 'runtime.first_stream_completed'\n  | 'thread.persisted'\n  | 'interrupt.handled'\n  | 'generative_ui.rendered';\nexport interface DevelopmentRuntimeOptions {\n  integration: DevelopmentIntegration;\n  packageName:\n    | '@threadplane/langgraph'\n    | '@threadplane/ag-ui'\n    | '@threadplane/render';\n  packageVersion: string;\n  /** Opaque package-local correlation, never identity or authorization. */\n  installationToken?: string | null;\n  enabled?: () => boolean;\n}\nexport interface DevelopmentRuntime {\n  touch(): void;\n  milestone(kind: DevelopmentMilestone, durationMs?: number): void;\n  dispose(): void;\n}\nexport interface RuntimeOwner {\n  options: DevelopmentRuntimeOptions;\n  allowed(): boolean;\n}\nexport interface RuntimeEvent {\n  installationToken?: string;\n  eventId: string;\n  kind: 'runtime.session_started' | DevelopmentMilestone;\n  occurredAt: string;\n  collectorVersion: '1';\n  subject: {\n    id: string;\n    namespace: 'development_browser';\n    scope: 'persistent' | 'memory';\n  };\n  sessionId: string;\n  properties: Record<string, string>;\n}\nexport const MILESTONES: readonly DevelopmentMilestone[] = [\n  'transport.connected',\n  'runtime.first_stream_completed',\n  'thread.persisted',\n  'interrupt.handled',\n  'generative_ui.rendered',\n];\nexport const MAX_AGE = 24 * 60 * 60 * 1000;\nexport const SESSION_IDLE = 30 * 60 * 1000;\nexport const UUID =\n  /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n","import {\n  MAX_AGE,\n  MILESTONES,\n  SESSION_IDLE,\n  UUID,\n  type DevelopmentRuntimeOptions,\n  type RuntimeEvent,\n} from './types';\n\nconst IDENTITY_KEY = 'threadplane.growth.browser.v1';\nconst SESSION_KEY = 'threadplane.growth.session.v1';\ninterface Start {\n  installationToken?: string;\n  eventId: string;\n  occurredAt: string;\n  packageVersion: string;\n}\ninterface Session {\n  id: string;\n  subjectId: string;\n  lastActive: number;\n  seen: string[];\n  starts: Record<string, Start>;\n}\nconst validKeys = new Set(\n  ['langgraph', 'ag-ui', 'render'].flatMap((integration) =>\n    ['runtime.session_started', ...MILESTONES].map(\n      (kind) => `${integration}:${kind}`\n    )\n  )\n);\n\n/** Browser storage is best-effort; no collector state represents a person or repository. */\nexport class DevelopmentSession {\n  private subject?: RuntimeEvent['subject'];\n  private session?: Session;\n  private memoryOnly = false;\n\n  private read(key: string): string | null {\n    if (this.memoryOnly) return null;\n    try {\n      return window.localStorage.getItem(key);\n    } catch {\n      this.memoryOnly = true;\n      return null;\n    }\n  }\n  private write(key: string, value: string): boolean {\n    if (this.memoryOnly) return false;\n    try {\n      window.localStorage.setItem(key, value);\n      return true;\n    } catch {\n      this.memoryOnly = true;\n      return false;\n    }\n  }\n  touch(now: number): { subject: RuntimeEvent['subject']; sessionId: string } {\n    if (!this.subject) {\n      const saved = this.read(IDENTITY_KEY);\n      const id = saved && UUID.test(saved) ? saved : window.crypto.randomUUID();\n      const persistent = saved === id || this.write(IDENTITY_KEY, id);\n      this.subject = {\n        id,\n        namespace: 'development_browser',\n        scope: persistent ? 'persistent' : 'memory',\n      };\n    }\n    const raw = this.read(SESSION_KEY);\n    if (raw && raw.length <= 4096) {\n      try {\n        const candidate = JSON.parse(raw) as Session;\n        if (\n          UUID.test(candidate.id) &&\n          candidate.subjectId === this.subject.id &&\n          Number.isFinite(candidate.lastActive) &&\n          candidate.lastActive <= now &&\n          now - candidate.lastActive < SESSION_IDLE &&\n          Array.isArray(candidate.seen) &&\n          candidate.seen.length <= validKeys.size &&\n          candidate.seen.every((key) => validKeys.has(key))\n        ) {\n          const starts: Record<string, Start> = {};\n          for (const integration of ['langgraph', 'ag-ui', 'render']) {\n            const start = candidate.starts?.[integration];\n            if (\n              start &&\n              UUID.test(start.eventId) &&\n              typeof start.occurredAt === 'string' &&\n              /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/u.test(\n                start.occurredAt\n              ) &&\n              Date.parse(start.occurredAt) <= now &&\n              now - Date.parse(start.occurredAt) < MAX_AGE &&\n              typeof start.packageVersion === 'string' &&\n              start.packageVersion.length <= 64 &&\n              /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/u.test(\n                start.packageVersion\n              ) &&\n              (start.installationToken === undefined ||\n                (typeof start.installationToken === 'string' &&\n                  UUID.test(start.installationToken)))\n            )\n              starts[integration] = {\n                eventId: start.eventId,\n                occurredAt: start.occurredAt,\n                packageVersion: start.packageVersion,\n                ...(start.installationToken\n                  ? { installationToken: start.installationToken }\n                  : {}),\n              };\n          }\n          this.session = {\n            id: candidate.id,\n            subjectId: candidate.subjectId,\n            lastActive: candidate.lastActive,\n            seen: [...new Set(candidate.seen)],\n            starts,\n          };\n        }\n      } catch {\n        /* Invalid local state starts a fresh session if necessary. */\n      }\n    }\n    if (\n      !this.session ||\n      now - this.session.lastActive >= SESSION_IDLE ||\n      now < this.session.lastActive\n    ) {\n      this.session = {\n        id: window.crypto.randomUUID(),\n        subjectId: this.subject.id,\n        lastActive: now,\n        seen: [],\n        starts: {},\n      };\n    }\n    this.session.lastActive = now;\n    this.write(SESSION_KEY, JSON.stringify(this.session));\n    return { subject: { ...this.subject }, sessionId: this.session.id };\n  }\n  initialization(\n    options: DevelopmentRuntimeOptions,\n    identity: { subject: RuntimeEvent['subject']; sessionId: string },\n    now: number\n  ): RuntimeEvent {\n    const session = this.session;\n    if (!session) throw new Error('uninitialized_session');\n    let start = session.starts[options.integration];\n    if (\n      !start ||\n      start.packageVersion !== options.packageVersion ||\n      start.installationToken !== options.installationToken ||\n      now - Date.parse(start.occurredAt) >= MAX_AGE\n    ) {\n      start = {\n        eventId: window.crypto.randomUUID(),\n        occurredAt: new Date(now).toISOString(),\n        packageVersion: options.packageVersion,\n        ...(options.installationToken\n          ? { installationToken: options.installationToken }\n          : {}),\n      };\n      session.starts[options.integration] = start;\n      this.write(SESSION_KEY, JSON.stringify(session));\n    }\n    return {\n      eventId: start.eventId,\n      occurredAt: start.occurredAt,\n      kind: 'runtime.session_started',\n      collectorVersion: '1',\n      ...(start.installationToken\n        ? { installationToken: start.installationToken }\n        : {}),\n      ...identity,\n      properties: {\n        integration: options.integration,\n        packageName: options.packageName,\n        packageVersion: start.packageVersion,\n      },\n    };\n  }\n  claim(key: string): boolean {\n    if (!this.session || this.session.seen.includes(key) || !validKeys.has(key))\n      return false;\n    this.session.seen.push(key);\n    this.write(SESSION_KEY, JSON.stringify(this.session));\n    return true;\n  }\n}\n","import type { RuntimeEvent } from './types';\n\nconst ID = /^[a-z0-9][a-z0-9_-]{0,79}$/u;\nconst VERSION = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$/u;\nfunction version(value: unknown): number[] | undefined {\n  if (typeof value !== 'string' || value.length > 64 || !VERSION.test(value))\n    return undefined;\n  const result = value.split('.').map(Number);\n  return result.every(Number.isSafeInteger) ? result : undefined;\n}\nfunction compare(a: number[], b: number[]): number {\n  for (let i = 0; i < 3; i++) if (a[i] !== b[i]) return a[i] - b[i];\n  return 0;\n}\nfunction publicText(value: unknown): value is string {\n  return (\n    typeof value === 'string' &&\n    value.trim().length > 0 &&\n    value.length <= 500 &&\n    ![...value].some((character) => {\n      const code = character.charCodeAt(0);\n      return (code < 32 && code !== 9 && code !== 10) || code === 127;\n    })\n  );\n}\n\n/** Console data only; remote text never becomes a format string, HTML, or executable code. */\nexport class DevelopmentAnnouncements {\n  private identity?: string;\n  private seen = new Set<string>();\n\n  display(input: unknown, events: RuntimeEvent[]): void {\n    try {\n      this.displaySafely(input, events);\n    } catch {\n      /* A committed acknowledgment is independent of display. */\n    }\n  }\n  private displaySafely(input: unknown, events: RuntimeEvent[]): void {\n    if (!Array.isArray(input) || input.length > 5 || !events.length) return;\n    const identity = events[0].subject.id;\n    const key = `threadplane.growth.announcements.v1:${identity}`;\n    if (this.identity !== identity) {\n      this.identity = identity;\n      this.seen = new Set();\n    }\n    try {\n      const raw = window.localStorage.getItem(key);\n      const saved: unknown = raw && raw.length <= 8500 ? JSON.parse(raw) : [];\n      if (\n        Array.isArray(saved) &&\n        saved.length <= 100 &&\n        saved.every((id) => typeof id === 'string' && ID.test(id))\n      ) {\n        this.seen = new Set([...this.seen, ...saved].slice(-100));\n      }\n    } catch {\n      /* Page memory still deduplicates when persistence is blocked. */\n    }\n    for (const item of input) {\n      if (\n        !item ||\n        typeof item !== 'object' ||\n        typeof item.id !== 'string' ||\n        !ID.test(item.id) ||\n        this.seen.has(item.id)\n      )\n        continue;\n      if (\n        !publicText(item.text) ||\n        typeof item.expiresAt !== 'string' ||\n        !Number.isFinite(Date.parse(item.expiresAt)) ||\n        Date.parse(item.expiresAt) <= Date.now()\n      )\n        continue;\n      if (\n        !Array.isArray(item.packageNames) ||\n        item.packageNames.length > 4 ||\n        !item.packageNames.every((p: unknown) =>\n          [\n            '@threadplane/chat',\n            '@threadplane/langgraph',\n            '@threadplane/ag-ui',\n            '@threadplane/render',\n          ].includes(p as string)\n        )\n      )\n        continue;\n      const min = version(item.minVersion);\n      const max =\n        item.maxVersion === undefined ? undefined : version(item.maxVersion);\n      if (!min || (item.maxVersion !== undefined && !max)) continue;\n      if (\n        !events.some((event) => {\n          const actual = version(event.properties['packageVersion']);\n          return (\n            item.packageNames.includes(event.properties['packageName']) &&\n            actual &&\n            compare(actual, min) >= 0 &&\n            (!max || compare(actual, max) < 0)\n          );\n        })\n      )\n        continue;\n      if (\n        item.documentationUrl !== undefined &&\n        (typeof item.documentationUrl !== 'string' ||\n          item.documentationUrl.length > 300 ||\n          !/^https:\\/\\/threadplane\\.ai\\/docs(?:\\/[a-zA-Z0-9._~-]+)*\\/?$/u.test(\n            item.documentationUrl\n          ))\n      )\n        continue;\n      // Remember before printing: repeated blocked console calls must not become a retry loop.\n      this.seen.add(item.id);\n      if (this.seen.size > 100) {\n        const oldest = this.seen.values().next().value;\n        if (oldest) this.seen.delete(oldest);\n      }\n      try {\n        window.localStorage.setItem(key, JSON.stringify([...this.seen]));\n      } catch {\n        /* Memory fallback. */\n      }\n      try {\n        console.info(\n          '[Threadplane] %s',\n          item.text +\n            (item.documentationUrl ? `\\n${item.documentationUrl}` : '')\n        );\n      } catch {\n        /* Console availability cannot change ingestion. */\n      }\n    }\n  }\n}\n","import { DevelopmentSession } from './session';\nimport { DevelopmentAnnouncements } from './announcements';\nimport {\n  MAX_AGE,\n  type DevelopmentMilestone,\n  type RuntimeEvent,\n  type RuntimeOwner,\n} from './types';\n\nconst ENDPOINT = 'https://threadplane.ai/api/growth/collect/v1/runtime';\nconst MIN_INTERVAL = 10000;\nconst ACTIVE_INTERVAL = 300000;\ninterface Pending {\n  event: RuntimeEvent;\n  owner: RuntimeOwner;\n  attempts: number;\n  nextAt: number;\n  acknowledged?: boolean;\n}\n\n/** Owns only bounded page-local work. Public wrappers perform framework/browser gating. */\nexport class DevelopmentCollector {\n  private readonly session = new DevelopmentSession();\n  private readonly announcements = new DevelopmentAnnouncements();\n  private pending: Pending[] = [];\n  private readonly latest = new Map<string, RuntimeEvent>();\n  private readonly initialized = new Map<string, Pending>();\n  private timer?: ReturnType<typeof setTimeout>;\n  private inFlight?: { controller: AbortController; batch: Pending[] };\n  private lastRequest = -Infinity;\n  private nextAllowed = 0;\n  private generation = 0;\n  private readonly counts = { discarded: 0, failures: 0, acknowledged: 0 };\n\n  diagnostics() {\n    return { ...this.counts, pending: this.pending.length };\n  }\n  clear(): void {\n    this.generation++;\n    clearTimeout(this.timer);\n    this.timer = undefined;\n    this.inFlight?.controller.abort();\n    this.inFlight = undefined;\n    this.pending = [];\n    this.latest.clear();\n    this.initialized.clear();\n  }\n  prune(): void {\n    this.pending = this.pending.filter((p) => {\n      if (!p.owner.allowed()) return false;\n      if (\n        Date.now() - Date.parse(p.event.occurredAt) >= MAX_AGE ||\n        (p.attempts >= 3 && !this.inFlight?.batch.includes(p))\n      ) {\n        this.counts.discarded++;\n        return false;\n      }\n      return true;\n    });\n    for (const [key, event] of this.latest)\n      if (Date.now() - Date.parse(event.occurredAt) >= MAX_AGE)\n        this.latest.delete(key);\n    if (this.inFlight?.batch.every((p) => !p.owner.allowed()))\n      this.inFlight.controller.abort();\n  }\n  touch(\n    owner: RuntimeOwner,\n    kind?: DevelopmentMilestone,\n    durationMs?: number\n  ): void {\n    if (!owner.allowed()) {\n      this.prune();\n      return;\n    }\n    const now = Date.now();\n    const identity = this.session.touch(now);\n    const initialization = this.session.initialization(\n      owner.options,\n      identity,\n      now\n    );\n    const enqueue = (eventKind: RuntimeEvent['kind']) => {\n      if (!this.session.claim(`${owner.options.integration}:${eventKind}`))\n        return;\n      const properties: Record<string, string> = {\n        integration: owner.options.integration,\n        packageName: owner.options.packageName,\n        packageVersion: owner.options.packageVersion,\n      };\n      if (\n        eventKind === 'runtime.first_stream_completed' &&\n        durationMs !== undefined &&\n        Number.isFinite(durationMs) &&\n        durationMs >= 0\n      ) {\n        properties['durationBucket'] =\n          durationMs < 1000\n            ? 'lt_1s'\n            : durationMs < 5000\n            ? '1s_to_5s'\n            : durationMs < 30000\n            ? '5s_to_30s'\n            : '30s_plus';\n      }\n      this.pending.push({\n        owner,\n        attempts: 0,\n        nextAt: now,\n        event: {\n          eventId: window.crypto.randomUUID(),\n          kind: eventKind,\n          occurredAt: new Date(now).toISOString(),\n          collectorVersion: '1',\n          ...(owner.options.installationToken\n            ? { installationToken: owner.options.installationToken }\n            : {}),\n          ...identity,\n          properties,\n        },\n      });\n    };\n    this.prune();\n    let initial = this.initialized.get(owner.options.integration);\n    if (!initial || initial.event.eventId !== initialization.eventId) {\n      initial = { event: initialization, owner, attempts: 0, nextAt: now };\n      this.initialized.set(owner.options.integration, initial);\n    }\n    initial.owner = owner;\n    if (\n      !initial.acknowledged &&\n      initial.attempts < 3 &&\n      !this.pending.includes(initial)\n    )\n      this.pending.push(initial);\n    if (kind) enqueue(kind);\n    const latest = this.latest.get(owner.options.integration);\n    if (\n      !this.pending.length &&\n      latest &&\n      latest.sessionId === identity.sessionId &&\n      latest.properties['packageVersion'] === owner.options.packageVersion &&\n      latest.installationToken === owner.options.installationToken &&\n      now - this.lastRequest >= ACTIVE_INTERVAL\n    ) {\n      // Replay a committed event solely as the nonempty exchange envelope. No new activity is invented.\n      this.pending.push({ event: latest, owner, attempts: 0, nextAt: now });\n    }\n    if (this.pending.length > 50) {\n      this.counts.discarded += this.pending.length - 50;\n      this.pending.splice(0, this.pending.length - 50);\n    }\n    this.schedule();\n  }\n  private schedule(): void {\n    if (this.timer !== undefined || this.inFlight || !this.pending.length)\n      return;\n    const at = Math.max(\n      this.lastRequest + MIN_INTERVAL,\n      this.nextAllowed,\n      Math.min(...this.pending.map((p) => p.nextAt))\n    );\n    this.timer = setTimeout(() => {\n      this.timer = undefined;\n      void this.send();\n    }, Math.min(2147483647, Math.max(0, at - Date.now())));\n  }\n  private async send(): Promise<void> {\n    this.prune();\n    const batch = this.pending\n      .filter((p) => p.nextAt <= Date.now())\n      .slice(0, 20);\n    if (!batch.length) {\n      this.schedule();\n      return;\n    }\n    const generation = this.generation;\n    const controller = new AbortController();\n    this.inFlight = { controller, batch };\n    this.lastRequest = Date.now();\n    for (const pending of batch) pending.attempts++;\n    let timeout: ReturnType<typeof setTimeout> | undefined;\n    try {\n      const result = await Promise.race([\n        this.exchange(batch, controller),\n        new Promise<never>((_, reject) => {\n          timeout = setTimeout(() => {\n            controller.abort();\n            reject(new Error('timeout'));\n          }, 3000);\n        }),\n      ]);\n      if (generation !== this.generation || controller.signal.aborted) return;\n      const allowed = batch.filter((p) => p.owner.allowed());\n      const ids = new Set(allowed.map((p) => p.event.eventId));\n      if (\n        !result ||\n        result.schemaVersion !== 1 ||\n        !Array.isArray(result.events) ||\n        result.events.length > batch.length\n      )\n        throw new Error('invalid_ack');\n      const acknowledged = new Set<string>();\n      for (const ack of result.events) {\n        if (\n          !ack ||\n          typeof ack.eventId !== 'string' ||\n          !batch.some((p) => p.event.eventId === ack.eventId) ||\n          acknowledged.has(ack.eventId) ||\n          !['accepted', 'duplicate', 'redacted'].includes(ack.disposition)\n        )\n          throw new Error('invalid_ack');\n        acknowledged.add(ack.eventId);\n      }\n      for (const pending of allowed) {\n        if (!acknowledged.has(pending.event.eventId)) continue;\n        pending.acknowledged = true;\n        this.counts.acknowledged++;\n        if (\n          result.events.find((a) => a.eventId === pending.event.eventId)\n            ?.disposition !== 'redacted'\n        )\n          this.latest.set(\n            pending.event.properties['integration'],\n            pending.event\n          );\n      }\n      this.pending = this.pending.filter(\n        (p) => !(ids.has(p.event.eventId) && acknowledged.has(p.event.eventId))\n      );\n      // Display is deliberately independent of durable acknowledgment processing.\n      if (allowed.length)\n        this.announcements.display(\n          result.announcements,\n          allowed.map((p) => p.event)\n        );\n    } catch {\n      if (generation === this.generation) this.counts.failures++;\n    } finally {\n      clearTimeout(timeout);\n      controller.abort();\n      if (generation === this.generation) {\n        for (const pending of batch)\n          pending.nextAt = Math.max(\n            this.nextAllowed,\n            this.lastRequest + MIN_INTERVAL * 2 ** (pending.attempts - 1)\n          );\n        this.inFlight = undefined;\n        this.prune();\n        this.schedule();\n      }\n    }\n  }\n  private async exchange(\n    batch: Pending[],\n    controller: AbortController\n  ): Promise<{\n    schemaVersion?: unknown;\n    events?: { eventId: string; disposition: string }[];\n    announcements?: unknown;\n  }> {\n    const response = await fetch(ENDPOINT, {\n      method: 'POST',\n      credentials: 'omit',\n      redirect: 'error',\n      referrerPolicy: 'no-referrer',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        schemaVersion: 1,\n        events: batch.map((p) => p.event),\n      }),\n      signal: controller.signal,\n    });\n    if (controller.signal.aborted) {\n      void response.body?.cancel().catch(() => undefined);\n      throw new Error('cancelled');\n    }\n    if (!response.ok) {\n      if (response.status === 429 || response.status >= 500) {\n        const raw = response.headers.get('Retry-After');\n        const until =\n          raw && /^\\d+$/u.test(raw)\n            ? Date.now() + Number(raw) * 1000\n            : Date.parse(raw ?? '');\n        if (Number.isFinite(until))\n          this.nextAllowed = Math.max(this.nextAllowed, until);\n      } else {\n        for (const pending of batch) pending.attempts = 3;\n      }\n      void response.body?.cancel().catch(() => undefined);\n      throw new Error('response');\n    }\n    const reader = response.body?.getReader();\n    if (!reader) throw new Error('empty_response');\n    const abort = () => {\n      void reader.cancel().catch(() => undefined);\n    };\n    controller.signal.addEventListener('abort', abort, { once: true });\n    try {\n      let bytes = 0;\n      let content = '';\n      const decoder = new TextDecoder();\n      while (true) {\n        const part = await reader.read();\n        if (part.done) break;\n        bytes += part.value.byteLength;\n        if (bytes > 32768) throw new Error('response_limit');\n        content += decoder.decode(part.value, { stream: true });\n      }\n      return JSON.parse(content + decoder.decode());\n    } finally {\n      controller.signal.removeEventListener('abort', abort);\n      await reader.cancel().catch(() => undefined);\n      reader.releaseLock();\n    }\n  }\n}\n","import { InjectionToken, isDevMode } from '@angular/core';\nimport { DevelopmentCollector } from './collector';\nimport {\n  MILESTONES,\n  UUID,\n  type DevelopmentRuntime,\n  type DevelopmentRuntimeOptions,\n  type RuntimeOwner,\n} from './types';\n\nlet enabled = true;\nlet collector: DevelopmentCollector | undefined;\nconst policies = new WeakMap<object, () => boolean>();\n\n/** Optional subtree policy, evaluated at use time. App-owned render trees may provide this token. */\nexport const DEVELOPMENT_COLLECTION_POLICY = new InjectionToken<() => boolean>(\n  'DEVELOPMENT_COLLECTION_POLICY'\n);\n\n/** Immediately stops automatic development collection and clears pending work in this page. */\nexport function setDevelopmentCollectionEnabled(value: boolean): void {\n  enabled = value === true;\n  if (!enabled) collector?.clear();\n}\n/** Aggregate local counters only; never returns identities or event content. */\nexport function getDevelopmentCollectionDiagnostics() {\n  return (\n    collector?.diagnostics() ?? {\n      discarded: 0,\n      failures: 0,\n      acknowledged: 0,\n      pending: 0,\n    }\n  );\n}\n/** @internal Carries adapter destination policy to nested supported renderers. */\nexport function registerDevelopmentRuntimePolicy<T extends object>(\n  agent: T,\n  policy: () => boolean\n): T {\n  policies.set(agent, policy);\n  return agent;\n}\n/** @internal Unknown app-owned agents do not opt nested renderers into a second destination. */\nexport function isDevelopmentRuntimeEnabled(agent: object): boolean {\n  try {\n    return policies.get(agent)?.() === true;\n  } catch {\n    return false;\n  }\n}\nfunction browserAllowed(): boolean {\n  if (\n    !enabled ||\n    !isDevMode() ||\n    typeof window === 'undefined' ||\n    typeof document === 'undefined'\n  )\n    return false;\n  // Automated browsers do not represent a developer using the runtime.\n  if (typeof navigator !== 'undefined' && navigator.webdriver === true)\n    return false;\n  if (\n    (window as Window & { __THREADPLANE_TELEMETRY_DISABLED__?: boolean })\n      .__THREADPLANE_TELEMETRY_DISABLED__ === true\n  )\n    return false;\n  try {\n    if (window.localStorage.getItem('THREADPLANE_TELEMETRY_DISABLED') === '1')\n      return false;\n  } catch {\n    /* Identity storage will fall back to memory. */\n  }\n  return (\n    typeof window.crypto?.randomUUID === 'function' &&\n    typeof fetch === 'function'\n  );\n}\n/** Inert until an integration calls touch() or reports a milestone; never initialize this at module import. */\nexport function createDevelopmentRuntime(\n  options: DevelopmentRuntimeOptions\n): DevelopmentRuntime {\n  let disposed = false;\n  const owner: RuntimeOwner = {\n    options: {\n      ...options,\n      installationToken:\n        typeof options.installationToken === 'string' &&\n        UUID.test(options.installationToken)\n          ? options.installationToken\n          : undefined,\n    },\n    allowed: () => {\n      try {\n        return (\n          !disposed &&\n          (options.enabled?.() ?? true) &&\n          ['langgraph', 'ag-ui', 'render'].includes(options.integration) &&\n          options.packageName === `@threadplane/${options.integration}` &&\n          /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/u.test(options.packageVersion) &&\n          options.packageVersion.length <= 64 &&\n          browserAllowed()\n        );\n      } catch {\n        return false;\n      }\n    },\n  };\n  const use = (\n    kind?: Parameters<DevelopmentRuntime['milestone']>[0],\n    durationMs?: number\n  ) => {\n    try {\n      if (!owner.allowed()) {\n        collector?.prune();\n        return;\n      }\n      collector ??= new DevelopmentCollector();\n      collector.touch(owner, kind, durationMs);\n    } catch {\n      /* Optional collection must never affect application behavior. */\n    }\n  };\n  return {\n    touch: () => use(),\n    milestone: (kind, durationMs) => {\n      if (MILESTONES.includes(kind)) use(kind, durationMs);\n    },\n    dispose: () => {\n      disposed = true;\n      collector?.prune();\n    },\n  };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}