@asiyst/sdk 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors/index.ts","../src/types/index.ts","../src/core/constants.ts","../src/security/selectors.ts","../src/security/sanitize.ts","../src/config/schema.ts","../src/events/EventBus.ts","../src/communication/HttpTransport.ts","../src/communication/CloudClient.ts","../src/storage/NamespacedStorage.ts","../src/config/ConfigCache.ts","../src/config/ConfigManager.ts","../src/analytics/Analytics.ts","../src/core/HostRoot.ts","../src/dom/semantics.ts","../src/dom/visibility.ts","../src/dom/inspect.ts","../src/utils/timing.ts","../src/dom/DomObserver.ts","../src/dom/TargetResolver.ts","../src/website-map/WebsiteMap.ts","../src/navigation/HistoryObserver.ts","../src/highlighting/HighlightLayer.ts","../src/avatar/CssAvatarRenderer.ts","../src/accessibility/a11y.ts","../src/navigation/scroll.ts","../src/utils/geometry.ts","../src/movement/MovementEngine.ts","../src/avatar/AvatarController.ts","../src/interaction/permissions.ts","../src/interaction/InteractionEngine.ts","../src/task/states.ts","../src/task/TaskEngine.ts","../src/workflow/WorkflowEngine.ts","../src/client/ConversationPanel.ts","../src/core/isolate.ts","../src/core/Runtime.ts","../src/client/Asiyst.ts"],"names":["elementId"],"mappings":"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","file":"index.js","sourcesContent":["export class AsiystError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.name = \"AsiystError\";\n this.code = code;\n }\n}\n\nexport class ConfigurationError extends AsiystError {\n constructor(message: string) {\n super(\"configuration_error\", message);\n this.name = \"ConfigurationError\";\n }\n}\n\nexport class AuthenticationError extends AsiystError {\n constructor(message: string) {\n super(\"authentication_error\", message);\n this.name = \"AuthenticationError\";\n }\n}\n\nexport class InitializationError extends AsiystError {\n constructor(message: string) {\n super(\"initialization_error\", message);\n this.name = \"InitializationError\";\n }\n}\n\nexport class TargetNotFoundError extends AsiystError {\n constructor(message: string) {\n super(\"target_not_found\", message);\n this.name = \"TargetNotFoundError\";\n }\n}\n\nexport class ActionNotAllowedError extends AsiystError {\n constructor(message: string) {\n super(\"action_not_allowed\", message);\n this.name = \"ActionNotAllowedError\";\n }\n}\n\nexport class NetworkError extends AsiystError {\n constructor(message: string) {\n super(\"network_error\", message);\n this.name = \"NetworkError\";\n }\n}\n\nexport class TaskExecutionError extends AsiystError {\n constructor(message: string) {\n super(\"task_execution_error\", message);\n this.name = \"TaskExecutionError\";\n }\n}\n","export type AnchorPosition =\n | \"bottom-right\"\n | \"bottom-left\"\n | \"top-right\"\n | \"top-left\";\n\nexport type AssistantMode = \"guided\" | \"assist\";\n\nexport type ActionKind =\n | \"navigate\"\n | \"click\"\n | \"highlight\"\n | \"scroll\"\n | \"type\"\n | \"select\"\n | \"open-menu\"\n | \"open-modal\"\n | \"search\"\n | \"wait\"\n | \"explain\"\n | \"complete\";\n\nexport const ALL_ACTION_KINDS: readonly ActionKind[] = [\n \"navigate\",\n \"click\",\n \"highlight\",\n \"scroll\",\n \"type\",\n \"select\",\n \"open-menu\",\n \"open-modal\",\n \"search\",\n \"wait\",\n \"explain\",\n \"complete\",\n] as const;\n\nexport type HighlightStyle =\n | \"spotlight\"\n | \"outline\"\n | \"glow\"\n | \"pointer\"\n | \"pulse\"\n | \"dim\";\n\nexport type ElementKind =\n | \"button\"\n | \"link\"\n | \"input\"\n | \"select\"\n | \"textarea\"\n | \"form\"\n | \"navigation\"\n | \"heading\"\n | \"menu\"\n | \"dialog\"\n | \"tab\"\n | \"card\"\n | \"search\"\n | \"section\"\n | \"other\";\n\nexport type TargetSource = \"developer\" | \"cloud\" | \"local\";\n\nexport interface TargetRef {\n id?: string;\n role?: string;\n text?: string;\n selector?: string;\n}\n\nexport type TargetInput = string | TargetRef;\n\nexport interface InitOptions {\n projectId: string;\n publicKey: string;\n apiBaseUrl?: string;\n mode?: AssistantMode;\n allowedActions?: ActionKind[];\n observeHistory?: boolean;\n}\n\nexport interface ThemeConfig {\n accent?: string;\n background?: string;\n text?: string;\n}\n\nexport interface BehaviorConfig {\n walkingSpeed?: number;\n idleAnimation?: string;\n pointingAnimation?: string;\n greetingAnimation?: string;\n thinkingAnimation?: string;\n successAnimation?: string;\n voiceSpeed?: number;\n speechBubble?: boolean;\n}\n\nexport interface ProjectConfig {\n schemaVersion: number;\n version: number;\n avatarName: string;\n avatar: string;\n size: number;\n position: AnchorPosition;\n voice?: string;\n animation?: string;\n theme: ThemeConfig;\n personality: Record<string, string>;\n behavior: BehaviorConfig;\n mode: AssistantMode;\n allowedActions: ActionKind[];\n elementSelectors: Record<string, string>;\n}\n\nexport interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface ViewportBox {\n width: number;\n height: number;\n scrollX: number;\n scrollY: number;\n}\n\nexport interface SafeInsets {\n top: number;\n right: number;\n bottom: number;\n left: number;\n}\n\nexport interface MappedElement {\n id: string;\n kind: ElementKind;\n tagName: string;\n role: string | null;\n text: string;\n label: string;\n href: string | null;\n pageUrl: string;\n rect: Rect;\n visible: boolean;\n enabled: boolean;\n developerDefined: boolean;\n description: string | null;\n section: string | null;\n}\n\nexport interface WebsiteMapSnapshot {\n pageUrl: string;\n path: string;\n title: string;\n capturedAt: number;\n elements: MappedElement[];\n}\n\nexport interface TaskStep {\n id: string;\n action: ActionKind;\n target?: TargetRef;\n message?: string;\n url?: string;\n value?: string;\n waitForUser?: boolean;\n timeoutMs?: number;\n highlightStyle?: HighlightStyle;\n}\n\nexport interface TaskDefinition {\n id: string;\n title?: string;\n steps: TaskStep[];\n}\n\nexport interface WorkflowDefinition {\n id: string;\n title?: string;\n steps: TaskStep[];\n}\n\nexport interface ConversationMessage {\n role: \"user\" | \"assistant\";\n text: string;\n}\n\nexport type { AsiystEventMap } from \"../events/types\";\n","export const SDK_VERSION = \"0.1.0\";\nexport const DEFAULT_API_BASE_URL = \"https://api.asiyst.com\";\nexport const CONFIG_SCHEMA_VERSION = 1;\nexport const HOST_ELEMENT_ID = \"asiyst-host\";\nexport const DATA_ATTR = \"data-asiyst\";\nexport const DATA_ATTR_DESCRIPTION = \"data-asiyst-description\";\nexport const STORAGE_PREFIX = \"asiyst\";\nexport const ANALYTICS_FLUSH_INTERVAL_MS = 4000;\nexport const ANALYTICS_BATCH_SIZE = 12;\nexport const DOM_SCAN_DEBOUNCE_MS = 350;\nexport const VIEWPORT_HANDLER_THROTTLE_MS = 80;\nexport const AVATAR_VIEWPORT_PADDING = 12;\nexport const AVATAR_TARGET_GAP = 16;\nexport const TEXT_MATCH_MAX_LENGTH = 240;\nexport const WEBSITE_MAP_TEXT_LIMIT = 80;\nexport const CONFIG_CACHE_TTL_MS = 1000 * 60 * 10;\n","const DANGEROUS_SELECTOR =\n /javascript:|expression\\(|@import|url\\s*\\(|behavior:|binding:|<script/i;\nconst FORBIDDEN_SELECTOR_TOKENS = /[;{}]|\\)\\s*\\[/;\n\nexport function isSafeSelector(selector: string): boolean {\n const trimmed = selector.trim();\n if (!trimmed || trimmed.length > 240) {\n return false;\n }\n if (DANGEROUS_SELECTOR.test(trimmed) || FORBIDDEN_SELECTOR_TOKENS.test(trimmed)) {\n return false;\n }\n return true;\n}\n\nexport function querySafeSelector(\n root: ParentNode,\n selector: string,\n): Element | null {\n if (!isSafeSelector(selector)) {\n return null;\n }\n try {\n return root.querySelector(selector);\n } catch {\n return null;\n }\n}\n","const CONTROL_CHARS = /[\\u0000-\\u0008\\u000B\\u000C\\u000E-\\u001F\\u007F]/g;\n\nexport function sanitizeText(input: string, maxLength = 2000): string {\n return input.replace(CONTROL_CHARS, \"\").replace(/\\s+/g, \" \").trim().slice(0, maxLength);\n}\n\nexport function renderSafeText(node: HTMLElement, text: string): void {\n node.textContent = sanitizeText(text);\n}\n","import type { ActionKind, AnchorPosition, BehaviorConfig, ProjectConfig, ThemeConfig } from \"../types\";\nimport { ALL_ACTION_KINDS } from \"../types\";\nimport { ConfigurationError } from \"../errors\";\nimport { CONFIG_SCHEMA_VERSION } from \"../core/constants\";\nimport { isSafeSelector } from \"../security/selectors\";\nimport { sanitizeText } from \"../security/sanitize\";\n\nconst ANCHORS: AnchorPosition[] = [\n \"bottom-right\",\n \"bottom-left\",\n \"top-right\",\n \"top-left\",\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction asString(value: unknown, fallback: string, max = 80): string {\n if (typeof value !== \"string\") {\n return fallback;\n }\n return sanitizeText(value, max) || fallback;\n}\n\nfunction asNumber(value: unknown, fallback: number, min: number, max: number): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return fallback;\n }\n return Math.min(max, Math.max(min, value));\n}\n\nfunction parseAllowedActions(value: unknown, fallback: ActionKind[]): ActionKind[] {\n if (!Array.isArray(value)) {\n return [...fallback];\n }\n const allowed = new Set(ALL_ACTION_KINDS);\n const next: ActionKind[] = [];\n for (const item of value) {\n if (typeof item === \"string\" && allowed.has(item as ActionKind)) {\n next.push(item as ActionKind);\n }\n }\n return next.length > 0 ? next : [...fallback];\n}\n\nfunction parseTheme(value: unknown): ThemeConfig {\n if (!isRecord(value)) {\n return {};\n }\n return {\n accent: typeof value.accent === \"string\" ? sanitizeText(value.accent, 32) : undefined,\n background: typeof value.background === \"string\" ? sanitizeText(value.background, 32) : undefined,\n text: typeof value.text === \"string\" ? sanitizeText(value.text, 32) : undefined,\n };\n}\n\nfunction parsePersonality(value: unknown): Record<string, string> {\n if (!isRecord(value)) {\n return {};\n }\n const result: Record<string, string> = {};\n for (const [key, entry] of Object.entries(value)) {\n if (typeof entry === \"string\" && key.length < 40) {\n result[sanitizeText(key, 40)] = sanitizeText(entry, 120);\n }\n }\n return result;\n}\n\nfunction parseBehavior(value: unknown): BehaviorConfig {\n if (!isRecord(value)) {\n return {};\n }\n return {\n walkingSpeed: asNumber(value.walkingSpeed, 1, 0.2, 4),\n idleAnimation: typeof value.idleAnimation === \"string\" ? sanitizeText(value.idleAnimation, 40) : undefined,\n pointingAnimation:\n typeof value.pointingAnimation === \"string\" ? sanitizeText(value.pointingAnimation, 40) : undefined,\n greetingAnimation:\n typeof value.greetingAnimation === \"string\" ? sanitizeText(value.greetingAnimation, 40) : undefined,\n thinkingAnimation:\n typeof value.thinkingAnimation === \"string\" ? sanitizeText(value.thinkingAnimation, 40) : undefined,\n successAnimation:\n typeof value.successAnimation === \"string\" ? sanitizeText(value.successAnimation, 40) : undefined,\n voiceSpeed: asNumber(value.voiceSpeed, 1, 0.5, 2),\n speechBubble: typeof value.speechBubble === \"boolean\" ? value.speechBubble : true,\n };\n}\n\nfunction parseElementSelectors(value: unknown): Record<string, string> {\n if (!isRecord(value)) {\n return {};\n }\n const result: Record<string, string> = {};\n for (const [id, selector] of Object.entries(value)) {\n if (typeof selector === \"string\" && isSafeSelector(selector)) {\n result[sanitizeText(id, 64)] = selector.trim();\n }\n }\n return result;\n}\n\nexport function fallbackConfig(): ProjectConfig {\n return {\n schemaVersion: CONFIG_SCHEMA_VERSION,\n version: 0,\n avatarName: \"Asiyst\",\n avatar: \"avatar_default\",\n size: 96,\n position: \"bottom-right\",\n animation: \"friendly\",\n theme: {\n accent: \"#2563eb\",\n background: \"#0f172a\",\n text: \"#f8fafc\",\n },\n personality: {},\n behavior: {\n walkingSpeed: 1,\n speechBubble: true,\n },\n mode: \"guided\",\n allowedActions: [\"navigate\", \"highlight\", \"scroll\", \"wait\", \"explain\", \"complete\"],\n elementSelectors: {},\n };\n}\n\nexport function normalizeProjectConfig(raw: unknown): ProjectConfig {\n const base = fallbackConfig();\n if (!isRecord(raw)) {\n return base;\n }\n\n const position = ANCHORS.includes(raw.position as AnchorPosition)\n ? (raw.position as AnchorPosition)\n : base.position;\n\n return {\n schemaVersion: CONFIG_SCHEMA_VERSION,\n version: asNumber(raw.version, base.version, 0, Number.MAX_SAFE_INTEGER),\n avatarName: asString(raw.avatarName, base.avatarName, 40),\n avatar: asString(raw.avatar, base.avatar, 64),\n size: asNumber(raw.size, base.size, 48, 220),\n position,\n voice: typeof raw.voice === \"string\" ? sanitizeText(raw.voice, 64) : undefined,\n animation: asString(raw.animation, base.animation ?? \"friendly\", 40),\n theme: { ...base.theme, ...parseTheme(raw.theme) },\n personality: parsePersonality(raw.personality),\n behavior: { ...base.behavior, ...parseBehavior(raw.behavior) },\n mode: raw.mode === \"assist\" ? \"assist\" : \"guided\",\n allowedActions: parseAllowedActions(raw.allowedActions, base.allowedActions),\n elementSelectors: parseElementSelectors(raw.elementSelectors),\n };\n}\n\nexport function validateInitOptions(options: {\n projectId?: unknown;\n publicKey?: unknown;\n}): { projectId: string; publicKey: string } {\n if (typeof options.projectId !== \"string\" || !options.projectId.trim()) {\n throw new ConfigurationError(\"projectId is required\");\n }\n if (typeof options.publicKey !== \"string\" || !options.publicKey.trim()) {\n throw new ConfigurationError(\"publicKey is required\");\n }\n if (options.projectId.length > 128 || options.publicKey.length > 256) {\n throw new ConfigurationError(\"project credentials exceed allowed length\");\n }\n return {\n projectId: options.projectId.trim(),\n publicKey: options.publicKey.trim(),\n };\n}\n","import type { AsiystEventMap } from \"./types\";\n\ntype Handler<K extends keyof AsiystEventMap> = (payload: AsiystEventMap[K]) => void;\n\nexport class EventBus {\n private readonly listeners = new Map<string, Set<(payload: unknown) => void>>();\n\n on<K extends keyof AsiystEventMap>(event: K, handler: Handler<K>): () => void {\n const set = this.listeners.get(event) ?? new Set();\n set.add(handler as (payload: unknown) => void);\n this.listeners.set(event, set);\n return () => this.off(event, handler);\n }\n\n off<K extends keyof AsiystEventMap>(event: K, handler: Handler<K>): void {\n this.listeners.get(event)?.delete(handler as (payload: unknown) => void);\n }\n\n emit<K extends keyof AsiystEventMap>(event: K, payload: AsiystEventMap[K]): void {\n const handlers = this.listeners.get(event);\n if (!handlers) {\n return;\n }\n for (const handler of [...handlers]) {\n try {\n handler(payload);\n } catch {\n // Subscriber failures must not break the host page or other listeners.\n }\n }\n }\n\n removeAll(): void {\n this.listeners.clear();\n }\n}\n","import { NetworkError } from \"../errors\";\nimport { SDK_VERSION } from \"../core/constants\";\nimport type { CloudRequest, CloudResponse, CloudTransport } from \"./types\";\n\nexport interface HttpTransportOptions {\n apiBaseUrl: string;\n projectId: string;\n publicKey: string;\n}\n\nexport class HttpTransport implements CloudTransport {\n constructor(private readonly options: HttpTransportOptions) {}\n\n async request<T>(req: CloudRequest): Promise<CloudResponse<T>> {\n const url = `${this.options.apiBaseUrl.replace(/\\/$/, \"\")}${req.path}`;\n let response: Response;\n try {\n response = await fetch(url, {\n method: req.method,\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n \"X-Asiyst-Project-Id\": this.options.projectId,\n \"X-Asiyst-Public-Key\": this.options.publicKey,\n \"X-Asiyst-SDK-Version\": SDK_VERSION,\n },\n body: req.body === undefined ? undefined : JSON.stringify(req.body),\n signal: req.signal,\n });\n } catch {\n throw new NetworkError(\"Asiyst Cloud is unreachable\");\n }\n\n let data: T | null = null;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"application/json\")) {\n try {\n data = (await response.json()) as T;\n } catch {\n data = null;\n }\n }\n\n if (!response.ok) {\n return { ok: false, status: response.status, data };\n }\n\n return { ok: true, status: response.status, data };\n }\n}\n","import type { ProjectConfig, TaskDefinition, WebsiteMapSnapshot, WorkflowDefinition } from \"../types\";\nimport { AuthenticationError, NetworkError } from \"../errors\";\nimport { normalizeProjectConfig } from \"../config/schema\";\nimport type { CloudTransport, ConversationReply } from \"./types\";\n\nexport class CloudClient {\n constructor(\n private readonly transport: CloudTransport,\n private readonly projectId: string,\n ) {}\n\n async fetchConfig(): Promise<ProjectConfig> {\n const response = await this.transport.request<{ config?: unknown }> ({\n path: `/v1/projects/${encodeURIComponent(this.projectId)}/config`,\n method: \"GET\",\n });\n if (response.status === 401 || response.status === 403) {\n throw new AuthenticationError(\"Project credentials were rejected\");\n }\n if (!response.ok || !response.data) {\n throw new NetworkError(\"Project configuration could not be loaded\");\n }\n return normalizeProjectConfig(response.data.config ?? response.data);\n }\n\n async requestTask(userText: string, pageUrl: string): Promise<TaskDefinition> {\n const response = await this.transport.request<{ task?: TaskDefinition }>({\n path: \"/v1/tasks\",\n method: \"POST\",\n body: {\n projectId: this.projectId,\n text: userText,\n pageUrl,\n },\n });\n if (!response.ok || !response.data?.task?.id || !Array.isArray(response.data.task.steps)) {\n throw new NetworkError(\"Task planning is unavailable\");\n }\n return response.data.task;\n }\n\n async fetchWorkflow(workflowId: string): Promise<WorkflowDefinition> {\n const response = await this.transport.request<{ workflow?: WorkflowDefinition }>({\n path: `/v1/workflows/${encodeURIComponent(workflowId)}`,\n method: \"GET\",\n });\n if (!response.ok || !response.data?.workflow?.id || !Array.isArray(response.data.workflow.steps)) {\n throw new NetworkError(\"Workflow is unavailable\");\n }\n return response.data.workflow;\n }\n\n async sendConversationMessage(\n text: string,\n pageUrl: string,\n ): Promise<ConversationReply> {\n const response = await this.transport.request<ConversationReply>({\n path: \"/v1/conversations/messages\",\n method: \"POST\",\n body: { projectId: this.projectId, text, pageUrl },\n });\n if (!response.ok || !response.data?.message?.text) {\n throw new NetworkError(\"Conversation service is unavailable\");\n }\n return response.data;\n }\n\n async sendWebsiteMap(snapshot: WebsiteMapSnapshot): Promise<void> {\n await this.safePost(\"/v1/website-maps\", snapshot);\n }\n\n async sendAnalytics(events: unknown[]): Promise<void> {\n await this.safePost(\"/v1/analytics\", { events });\n }\n\n async sendTaskUpdate(taskId: string, status: string, stepId?: string): Promise<void> {\n await this.safePost(`/v1/tasks/${encodeURIComponent(taskId)}/events`, {\n status,\n stepId,\n });\n }\n\n private async safePost(path: string, body: unknown): Promise<void> {\n try {\n await this.transport.request({ path, method: \"POST\", body });\n } catch {\n // Cloud ingestion failures are swallowed at the transport caller.\n }\n }\n}\n","import { STORAGE_PREFIX } from \"../core/constants\";\n\nexport class NamespacedStorage {\n constructor(\n private readonly projectId: string,\n private readonly store: Storage | null,\n ) {}\n\n private key(suffix: string): string {\n return `${STORAGE_PREFIX}:${this.projectId}:${suffix}`;\n }\n\n read(suffix: string): string | null {\n if (!this.store) {\n return null;\n }\n try {\n return this.store.getItem(this.key(suffix));\n } catch {\n return null;\n }\n }\n\n write(suffix: string, value: string): void {\n if (!this.store) {\n return;\n }\n try {\n this.store.setItem(this.key(suffix), value);\n } catch {\n // Quota or private-mode failures must not break the host.\n }\n }\n\n remove(suffix: string): void {\n if (!this.store) {\n return;\n }\n try {\n this.store.removeItem(this.key(suffix));\n } catch {\n // ignore\n }\n }\n}\n\nexport function browserLocalStorage(): Storage | null {\n try {\n return typeof localStorage === \"undefined\" ? null : localStorage;\n } catch {\n return null;\n }\n}\n","import type { ProjectConfig } from \"../types\";\nimport { CONFIG_CACHE_TTL_MS, CONFIG_SCHEMA_VERSION } from \"../core/constants\";\nimport { NamespacedStorage } from \"../storage/NamespacedStorage\";\nimport { normalizeProjectConfig } from \"./schema\";\n\ninterface CachedEnvelope {\n schemaVersion: number;\n projectId: string;\n fetchedAt: number;\n config: ProjectConfig;\n}\n\nexport class ConfigCache {\n constructor(private readonly storage: NamespacedStorage) {}\n\n read(projectId: string): ProjectConfig | null {\n const raw = this.storage.read(\"config\");\n if (!raw) {\n return null;\n }\n try {\n const parsed = JSON.parse(raw) as CachedEnvelope;\n if (parsed.schemaVersion !== CONFIG_SCHEMA_VERSION || parsed.projectId !== projectId) {\n return null;\n }\n if (Date.now() - parsed.fetchedAt > CONFIG_CACHE_TTL_MS) {\n return null;\n }\n return normalizeProjectConfig(parsed.config);\n } catch {\n return null;\n }\n }\n\n write(projectId: string, config: ProjectConfig): void {\n const envelope: CachedEnvelope = {\n schemaVersion: CONFIG_SCHEMA_VERSION,\n projectId,\n fetchedAt: Date.now(),\n config,\n };\n this.storage.write(\"config\", JSON.stringify(envelope));\n }\n}\n","import type { InitOptions, ProjectConfig } from \"../types\";\nimport { EventBus } from \"../events/EventBus\";\nimport { CloudClient } from \"../communication/CloudClient\";\nimport { browserLocalStorage, NamespacedStorage } from \"../storage/NamespacedStorage\";\nimport { ConfigCache } from \"./ConfigCache\";\nimport { fallbackConfig, normalizeProjectConfig, validateInitOptions } from \"./schema\";\n\nexport class ConfigManager {\n private current: ProjectConfig;\n private readonly cache: ConfigCache;\n\n constructor(\n private readonly options: InitOptions,\n private readonly cloud: CloudClient,\n private readonly events: EventBus,\n ) {\n const credentials = validateInitOptions(options);\n this.options = { ...options, ...credentials };\n this.cache = new ConfigCache(\n new NamespacedStorage(credentials.projectId, browserLocalStorage()),\n );\n const cached = this.cache.read(credentials.projectId);\n this.current = cached ?? this.localFallback();\n }\n\n get(): ProjectConfig {\n return this.current;\n }\n\n async refresh(): Promise<ProjectConfig> {\n try {\n const remote = await this.cloud.fetchConfig();\n this.current = normalizeProjectConfig(remote);\n this.cache.write(this.options.projectId, this.current);\n return this.current;\n } catch (error) {\n this.events.emit(\"asiyst:error\", {\n code: \"config_refresh_failed\",\n message: error instanceof Error ? error.message : \"Failed to refresh configuration\",\n });\n return this.current;\n }\n }\n\n private localFallback(): ProjectConfig {\n const base = fallbackConfig();\n return {\n ...base,\n mode: this.options.mode ?? base.mode,\n allowedActions: this.options.allowedActions ?? base.allowedActions,\n };\n }\n}\n","import { ANALYTICS_BATCH_SIZE, ANALYTICS_FLUSH_INTERVAL_MS } from \"../core/constants\";\nimport { CloudClient } from \"../communication/CloudClient\";\n\nexport type AnalyticsName =\n | \"assistant_opened\"\n | \"assistant_closed\"\n | \"question_started\"\n | \"question_completed\"\n | \"task_started\"\n | \"task_completed\"\n | \"task_failed\"\n | \"guide_started\"\n | \"guide_completed\"\n | \"element_highlighted\"\n | \"user_clicked_instructed_element\"\n | \"target_not_found\";\n\nexport interface AnalyticsEvent {\n name: AnalyticsName;\n at: number;\n projectId: string;\n properties?: Record<string, string | number | boolean>;\n}\n\nexport class Analytics {\n private queue: AnalyticsEvent[] = [];\n private timer: ReturnType<typeof setInterval> | undefined;\n private destroyed = false;\n\n constructor(\n private readonly projectId: string,\n private readonly cloud: CloudClient,\n ) {}\n\n start(): void {\n if (this.timer) {\n return;\n }\n this.timer = setInterval(() => {\n void this.flush();\n }, ANALYTICS_FLUSH_INTERVAL_MS);\n }\n\n track(name: AnalyticsName, properties?: AnalyticsEvent[\"properties\"]): void {\n if (this.destroyed) {\n return;\n }\n this.queue.push({\n name,\n at: Date.now(),\n projectId: this.projectId,\n properties,\n });\n if (this.queue.length >= ANALYTICS_BATCH_SIZE) {\n void this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.queue.length === 0) {\n return;\n }\n const batch = this.queue.slice(0, ANALYTICS_BATCH_SIZE);\n this.queue = this.queue.slice(batch.length);\n try {\n await this.cloud.sendAnalytics(batch);\n } catch {\n this.queue = batch.concat(this.queue).slice(0, 100);\n }\n }\n\n async destroy(): Promise<void> {\n this.destroyed = true;\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n await this.flush();\n }\n\n pendingCount(): number {\n return this.queue.length;\n }\n}\n","import { HOST_ELEMENT_ID } from \"./constants\";\n\nexport class HostRoot {\n readonly host: HTMLDivElement;\n readonly shadow: ShadowRoot;\n readonly overlay: HTMLDivElement;\n readonly chrome: HTMLDivElement;\n\n constructor(doc: Document) {\n this.host = doc.createElement(\"div\");\n this.host.id = HOST_ELEMENT_ID;\n this.host.setAttribute(\"data-asiyst-root\", \"true\");\n this.host.style.all = \"initial\";\n this.host.style.position = \"relative\";\n this.host.style.zIndex = \"2147483646\";\n this.shadow = this.host.attachShadow({ mode: \"open\" });\n\n this.overlay = doc.createElement(\"div\");\n this.overlay.setAttribute(\"data-asiyst-layer\", \"overlay\");\n this.chrome = doc.createElement(\"div\");\n this.chrome.setAttribute(\"data-asiyst-layer\", \"chrome\");\n this.shadow.append(this.overlay, this.chrome);\n doc.body.appendChild(this.host);\n }\n\n destroy(): void {\n this.host.remove();\n }\n}\n","import type { ElementKind } from \"../types\";\n\nconst SEARCH_HINT = /search|query|find/i;\n\nexport function classifyElement(el: Element): ElementKind {\n const tag = el.tagName.toLowerCase();\n const role = el.getAttribute(\"role\");\n const type = (el.getAttribute(\"type\") ?? \"\").toLowerCase();\n const asiystId = el.getAttribute(\"data-asiyst\") ?? \"\";\n\n if (asiystId === \"search\" || SEARCH_HINT.test(asiystId) || type === \"search\") {\n return \"search\";\n }\n if (tag === \"dialog\" || role === \"dialog\" || role === \"alertdialog\") {\n return \"dialog\";\n }\n if (tag === \"nav\" || role === \"navigation\") {\n return \"navigation\";\n }\n if (tag === \"form\") {\n return \"form\";\n }\n if (tag === \"select\") {\n return \"select\";\n }\n if (tag === \"textarea\") {\n return \"textarea\";\n }\n if (tag === \"input\") {\n return \"input\";\n }\n if (tag === \"a\") {\n return \"link\";\n }\n if (tag === \"button\" || role === \"button\" || type === \"button\" || type === \"submit\") {\n return \"button\";\n }\n if (role === \"tab\") {\n return \"tab\";\n }\n if (role === \"menu\" || role === \"menubar\") {\n return \"menu\";\n }\n if (/^h[1-6]$/.test(tag)) {\n return \"heading\";\n }\n if (el.getAttribute(\"data-asiyst-kind\") === \"card\" || /\\bcard\\b/i.test(el.className)) {\n return \"card\";\n }\n if (tag === \"header\" || tag === \"main\" || tag === \"footer\" || tag === \"section\" || tag === \"aside\") {\n return \"section\";\n }\n return \"other\";\n}\n\nexport function accessibleLabel(el: Element): string {\n const labelledBy = el.getAttribute(\"aria-labelledby\");\n if (labelledBy && el.ownerDocument) {\n const labels = labelledBy\n .split(/\\s+/)\n .map((id) => el.ownerDocument.getElementById(id)?.textContent?.trim())\n .filter((text): text is string => Boolean(text));\n if (labels.length > 0) {\n return labels.join(\" \");\n }\n }\n return (\n el.getAttribute(\"aria-label\") ||\n el.getAttribute(\"title\") ||\n (el as HTMLInputElement).placeholder ||\n \"\"\n ).trim();\n}\n\nexport function visibleText(el: Element, max = 240): string {\n const text = (el.textContent ?? \"\").replace(/\\s+/g, \" \").trim();\n return text.slice(0, max);\n}\n\nexport function isDisabled(el: Element): boolean {\n return (\n el.hasAttribute(\"disabled\") ||\n el.getAttribute(\"aria-disabled\") === \"true\" ||\n (el instanceof HTMLInputElement && el.disabled)\n );\n}\n\nexport function isSkippable(el: Element): boolean {\n const tag = el.tagName.toLowerCase();\n if (tag === \"script\" || tag === \"style\" || tag === \"noscript\" || tag === \"link\" || tag === \"meta\") {\n return true;\n }\n if (el.id === \"asiyst-host\" || el.closest(\"#asiyst-host\")) {\n return true;\n }\n return false;\n}\n","export function isElementVisible(el: Element): boolean {\n if (!(el instanceof HTMLElement)) {\n return false;\n }\n if (el.hidden || el.getAttribute(\"aria-hidden\") === \"true\") {\n return false;\n }\n const style = el.ownerDocument.defaultView?.getComputedStyle(el);\n if (!style) {\n return true;\n }\n if (style.display === \"none\" || style.visibility === \"hidden\" || style.opacity === \"0\") {\n return false;\n }\n const rect = el.getBoundingClientRect();\n return rect.width > 0 && rect.height > 0;\n}\n\nexport function toViewportRect(el: Element): { x: number; y: number; width: number; height: number } {\n const rect = el.getBoundingClientRect();\n return { x: rect.left, y: rect.top, width: rect.width, height: rect.height };\n}\n","import type { MappedElement } from \"../types\";\nimport { DATA_ATTR, DATA_ATTR_DESCRIPTION, HOST_ELEMENT_ID, WEBSITE_MAP_TEXT_LIMIT } from \"../core/constants\";\nimport { accessibleLabel, classifyElement, isDisabled, isSkippable, visibleText } from \"./semantics\";\nimport { isElementVisible, toViewportRect } from \"./visibility\";\n\nconst CANDIDATE_SELECTOR = [\n `[${DATA_ATTR}]`,\n \"a[href]\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"form\",\n \"nav\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"[role='button']\",\n \"[role='link']\",\n \"[role='navigation']\",\n \"[role='dialog']\",\n \"[role='tab']\",\n \"[role='menu']\",\n \"[role='search']\",\n].join(\",\");\n\nfunction sectionName(el: Element): string | null {\n const section = el.closest(\"header, nav, main, footer, aside, section, [data-asiyst-section]\");\n if (!section) {\n return null;\n }\n return (\n section.getAttribute(\"data-asiyst-section\") ||\n section.getAttribute(\"aria-label\") ||\n section.tagName.toLowerCase()\n );\n}\n\nfunction elementId(el: Element, index: number): string {\n const explicit = el.getAttribute(DATA_ATTR);\n if (explicit) {\n return explicit;\n }\n const attrId = el.getAttribute(\"id\");\n if (attrId) {\n return `dom:${attrId}`;\n }\n return `auto:${el.tagName.toLowerCase()}:${index}`;\n}\n\nexport function inspectDocument(doc: Document): MappedElement[] {\n const pageUrl = doc.location?.href ?? \"\";\n const nodes = Array.from(doc.querySelectorAll(CANDIDATE_SELECTOR));\n const results: MappedElement[] = [];\n const seen = new Set<Element>();\n\n nodes.forEach((el, index) => {\n if (seen.has(el) || isSkippable(el) || el.closest(`#${HOST_ELEMENT_ID}`)) {\n return;\n }\n seen.add(el);\n const kind = classifyElement(el);\n const developerDefined = el.hasAttribute(DATA_ATTR);\n if (kind === \"other\" && !developerDefined) {\n return;\n }\n const text = visibleText(el, WEBSITE_MAP_TEXT_LIMIT);\n const label = accessibleLabel(el).slice(0, WEBSITE_MAP_TEXT_LIMIT);\n results.push({\n id: elementId(el, index),\n kind,\n tagName: el.tagName.toLowerCase(),\n role: el.getAttribute(\"role\"),\n text,\n label,\n href: el instanceof HTMLAnchorElement ? el.getAttribute(\"href\") : null,\n pageUrl,\n rect: toViewportRect(el),\n visible: isElementVisible(el),\n enabled: !isDisabled(el),\n developerDefined,\n description: el.getAttribute(DATA_ATTR_DESCRIPTION),\n section: sectionName(el),\n });\n });\n\n return results;\n}\n\nexport function findElementByAsiystId(doc: Document, id: string): Element | null {\n return doc.querySelector(`[${DATA_ATTR}=\"${cssEscape(id)}\"]`);\n}\n\nfunction cssEscape(value: string): string {\n if (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") {\n return CSS.escape(value);\n }\n return value.replace(/\"/g, '\\\\\"');\n}\n","export function debounce<T extends (...args: never[]) => void>(\n fn: T,\n waitMs: number,\n): T & { cancel: () => void } {\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const wrapped = ((...args: never[]) => {\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n fn(...args);\n }, waitMs);\n }) as T & { cancel: () => void };\n\n wrapped.cancel = () => {\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n };\n\n return wrapped;\n}\n\nexport function throttle<T extends (...args: never[]) => void>(\n fn: T,\n waitMs: number,\n): T & { cancel: () => void } {\n let last = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let pending: never[] | undefined;\n\n const invoke = (args: never[]) => {\n last = Date.now();\n fn(...args);\n };\n\n const wrapped = ((...args: never[]) => {\n const now = Date.now();\n const remaining = waitMs - (now - last);\n pending = args;\n if (remaining <= 0) {\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n invoke(args);\n return;\n }\n if (!timer) {\n timer = setTimeout(() => {\n timer = undefined;\n if (pending) {\n invoke(pending);\n }\n }, remaining);\n }\n }) as T & { cancel: () => void };\n\n wrapped.cancel = () => {\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n pending = undefined;\n };\n\n return wrapped;\n}\n","import { DOM_SCAN_DEBOUNCE_MS } from \"../core/constants\";\nimport { debounce } from \"../utils/timing\";\n\nexport class DomObserver {\n private observer: MutationObserver | undefined;\n private readonly notify: ReturnType<typeof debounce>;\n\n constructor(onChange: () => void) {\n this.notify = debounce(onChange, DOM_SCAN_DEBOUNCE_MS);\n }\n\n start(root: Node): void {\n this.stop();\n this.observer = new MutationObserver(() => this.notify());\n this.observer.observe(root, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\", \"aria-hidden\", \"data-asiyst\", \"disabled\"],\n });\n }\n\n stop(): void {\n this.observer?.disconnect();\n this.observer = undefined;\n this.notify.cancel();\n }\n}\n","import type { MappedElement, TargetInput, TargetRef, TargetSource } from \"../types\";\nimport { TargetNotFoundError } from \"../errors\";\nimport { querySafeSelector } from \"../security/selectors\";\nimport { findElementByAsiystId } from \"./inspect\";\nimport { isDisabled } from \"./semantics\";\nimport { isElementVisible } from \"./visibility\";\n\nexport interface ResolveResult {\n element: Element;\n mapped: MappedElement;\n}\n\nfunction asRef(input: TargetInput): TargetRef {\n if (typeof input === \"string\") {\n return { id: input };\n }\n return input;\n}\n\nfunction normalize(text: string): string {\n return text.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nexport class TargetResolver {\n constructor(\n private readonly doc: Document,\n private readonly configuredSelectors: () => Record<string, string>,\n private readonly mappedElements: () => MappedElement[],\n ) {}\n\n resolve(input: TargetInput, source: TargetSource): ResolveResult {\n const ref = asRef(input);\n const element = this.findElement(ref, source);\n if (!element || !isElementVisible(element) || isDisabled(element)) {\n throw new TargetNotFoundError(\"Target does not exist or is not interactable\");\n }\n const mapped = this.mappedElements().find((item) => this.matchesMapped(item, element, ref));\n return {\n element,\n mapped: mapped ?? this.adHocMapped(element, ref),\n };\n }\n\n tryResolve(input: TargetInput, source: TargetSource): ResolveResult | null {\n try {\n return this.resolve(input, source);\n } catch {\n return null;\n }\n }\n\n private findElement(ref: TargetRef, source: TargetSource): Element | null {\n if (ref.id) {\n const byAttr = findElementByAsiystId(this.doc, ref.id);\n if (byAttr) {\n return byAttr;\n }\n const configured = this.configuredSelectors()[ref.id];\n if (configured) {\n const found = querySafeSelector(this.doc, configured);\n if (found) {\n return found;\n }\n }\n const mapped = this.mappedElements().find((item) => item.id === ref.id);\n if (mapped) {\n const byMapped = findElementByAsiystId(this.doc, mapped.id) ?? this.doc.getElementById(mapped.id.replace(/^dom:/, \"\"));\n if (byMapped) {\n return byMapped;\n }\n }\n }\n\n if (ref.selector && source === \"developer\") {\n return querySafeSelector(this.doc, ref.selector);\n }\n\n if (ref.selector && source === \"cloud\") {\n const allowed = Object.values(this.configuredSelectors());\n if (allowed.includes(ref.selector)) {\n return querySafeSelector(this.doc, ref.selector);\n }\n return null;\n }\n\n return this.matchBySemantics(ref);\n }\n\n private matchBySemantics(ref: TargetRef): Element | null {\n const wantedText = ref.text ? normalize(ref.text) : \"\";\n const wantedRole = ref.role ? normalize(ref.role) : \"\";\n let best: MappedElement | undefined;\n let bestScore = 0;\n\n for (const item of this.mappedElements()) {\n if (!item.visible || !item.enabled) {\n continue;\n }\n let score = 0;\n if (wantedRole && (normalize(item.role ?? \"\") === wantedRole || item.kind === wantedRole)) {\n score += 2;\n }\n const haystack = normalize(`${item.label} ${item.text} ${item.description ?? \"\"}`);\n if (wantedText && haystack.includes(wantedText)) {\n score += 3;\n }\n if (score > bestScore) {\n bestScore = score;\n best = item;\n }\n }\n\n if (!best || bestScore < 2) {\n return null;\n }\n return findElementByAsiystId(this.doc, best.id) ?? this.doc.querySelector(`[id=\"${best.id.replace(/^dom:/, \"\")}\"]`);\n }\n\n private matchesMapped(item: MappedElement, element: Element, ref: TargetRef): boolean {\n if (ref.id && item.id === ref.id) {\n return true;\n }\n return element.getAttribute(\"data-asiyst\") === item.id;\n }\n\n private adHocMapped(element: Element, ref: TargetRef): MappedElement {\n return {\n id: ref.id ?? element.getAttribute(\"data-asiyst\") ?? \"unknown\",\n kind: \"other\",\n tagName: element.tagName.toLowerCase(),\n role: element.getAttribute(\"role\"),\n text: (element.textContent ?? \"\").trim().slice(0, 80),\n label: element.getAttribute(\"aria-label\") ?? \"\",\n href: element.getAttribute(\"href\"),\n pageUrl: this.doc.location?.href ?? \"\",\n rect: { x: 0, y: 0, width: 0, height: 0 },\n visible: true,\n enabled: true,\n developerDefined: element.hasAttribute(\"data-asiyst\"),\n description: element.getAttribute(\"data-asiyst-description\"),\n section: null,\n };\n }\n}\n","import type { MappedElement, WebsiteMapSnapshot } from \"../types\";\n\nexport class WebsiteMap {\n private elements: MappedElement[] = [];\n\n replace(elements: MappedElement[]): void {\n this.elements = elements;\n }\n\n list(): MappedElement[] {\n return this.elements;\n }\n\n snapshot(doc: Document): WebsiteMapSnapshot {\n const url = new URL(doc.location?.href ?? \"https://invalid.local/\");\n url.search = \"\";\n url.hash = \"\";\n return {\n pageUrl: url.toString(),\n path: url.pathname,\n title: (doc.title ?? \"\").slice(0, 120),\n capturedAt: Date.now(),\n elements: this.elements\n .filter((el) => el.visible)\n .map((el) => ({\n ...el,\n href: el.href && !el.href.toLowerCase().startsWith(\"javascript:\") ? el.href : null,\n })),\n };\n }\n}\n","export class HistoryObserver {\n private wrapped = false;\n private originalPush?: History[\"pushState\"];\n private originalReplace?: History[\"replaceState\"];\n private readonly onChange: () => void;\n\n constructor(onChange: () => void) {\n this.onChange = onChange;\n }\n\n start(win: Window, observeHistory: boolean): void {\n win.addEventListener(\"popstate\", this.onChange);\n win.addEventListener(\"hashchange\", this.onChange);\n if (!observeHistory || this.wrapped) {\n return;\n }\n this.originalPush = win.history.pushState.bind(win.history);\n this.originalReplace = win.history.replaceState.bind(win.history);\n const notify = this.onChange;\n win.history.pushState = (...args) => {\n this.originalPush?.(...args);\n notify();\n };\n win.history.replaceState = (...args) => {\n this.originalReplace?.(...args);\n notify();\n };\n this.wrapped = true;\n }\n\n stop(win: Window): void {\n win.removeEventListener(\"popstate\", this.onChange);\n win.removeEventListener(\"hashchange\", this.onChange);\n if (this.wrapped && this.originalPush && this.originalReplace) {\n win.history.pushState = this.originalPush;\n win.history.replaceState = this.originalReplace;\n }\n this.wrapped = false;\n }\n}\n","import type { HighlightStyle } from \"../types\";\nimport { VIEWPORT_HANDLER_THROTTLE_MS } from \"../core/constants\";\nimport { throttle } from \"../utils/timing\";\n\nconst STYLE_TEXT = `\n.asiyst-highlight-root { position: fixed; inset: 0; pointer-events: none; z-index: 2147483646; }\n.asiyst-dim { position: absolute; inset: 0; background: rgba(2, 6, 23, 0.45); }\n.asiyst-box {\n position: absolute;\n border-radius: 10px;\n box-sizing: border-box;\n transition: top 80ms linear, left 80ms linear, width 80ms linear, height 80ms linear;\n}\n.asiyst-outline { border: 2px solid #38bdf8; box-shadow: 0 0 0 2px rgba(56, 189, 248, 0.25); }\n.asiyst-glow { box-shadow: 0 0 0 4px rgba(56, 189, 248, 0.35), 0 0 24px rgba(56, 189, 248, 0.55); }\n.asiyst-pulse { border: 2px solid #38bdf8; animation: asiyst-pulse 1.4s ease-in-out infinite; }\n.asiyst-spotlight {\n box-shadow: 0 0 0 9999px rgba(2, 6, 23, 0.55);\n border: 2px solid #f8fafc;\n}\n.asiyst-pointer::after {\n content: \"\";\n position: absolute;\n left: 50%;\n top: -18px;\n width: 10px;\n height: 10px;\n margin-left: -5px;\n border-radius: 50%;\n background: #38bdf8;\n}\n@keyframes asiyst-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 rgba(56, 189, 248, 0.55); }\n 50% { box-shadow: 0 0 0 10px rgba(56, 189, 248, 0); }\n}\n@media (prefers-reduced-motion: reduce) {\n .asiyst-box, .asiyst-pulse { animation: none; transition: none; }\n}\n`;\n\nexport class HighlightLayer {\n private box: HTMLDivElement | undefined;\n private dim: HTMLDivElement | undefined;\n private target: Element | undefined;\n private readonly onViewport: ReturnType<typeof throttle>;\n\n constructor(\n private readonly root: HTMLElement,\n private readonly win: Window,\n ) {\n const style = root.ownerDocument.createElement(\"style\");\n style.textContent = STYLE_TEXT;\n root.appendChild(style);\n this.onViewport = throttle(() => this.sync(), VIEWPORT_HANDLER_THROTTLE_MS);\n }\n\n start(): void {\n this.win.addEventListener(\"scroll\", this.onViewport, true);\n this.win.addEventListener(\"resize\", this.onViewport);\n }\n\n show(target: Element, style: HighlightStyle): void {\n this.target = target;\n if (!this.box) {\n this.box = this.root.ownerDocument.createElement(\"div\");\n this.box.className = \"asiyst-box\";\n this.root.appendChild(this.box);\n }\n this.box.className = `asiyst-box asiyst-${style === \"dim\" ? \"outline\" : style}`;\n if (style === \"dim\" || style === \"spotlight\") {\n if (!this.dim) {\n this.dim = this.root.ownerDocument.createElement(\"div\");\n this.dim.className = \"asiyst-dim\";\n this.root.insertBefore(this.dim, this.box);\n }\n this.dim.style.display = style === \"dim\" ? \"block\" : \"none\";\n } else if (this.dim) {\n this.dim.style.display = \"none\";\n }\n this.sync();\n }\n\n hide(): void {\n this.target = undefined;\n if (this.box) {\n this.box.style.display = \"none\";\n }\n if (this.dim) {\n this.dim.style.display = \"none\";\n }\n }\n\n isShowing(): boolean {\n return Boolean(this.target);\n }\n\n stop(): void {\n this.hide();\n this.win.removeEventListener(\"scroll\", this.onViewport, true);\n this.win.removeEventListener(\"resize\", this.onViewport);\n this.onViewport.cancel();\n }\n\n private sync(): void {\n if (!this.box || !this.target) {\n return;\n }\n const rect = this.target.getBoundingClientRect();\n this.box.style.display = \"block\";\n this.box.style.left = `${rect.left - 4}px`;\n this.box.style.top = `${rect.top - 4}px`;\n this.box.style.width = `${rect.width + 8}px`;\n this.box.style.height = `${rect.height + 8}px`;\n }\n}\n","import type { ProjectConfig } from \"../types\";\nimport { renderSafeText } from \"../security/sanitize\";\nimport type { AvatarPose, AvatarRenderer } from \"../movement/MovementEngine\";\n\nconst AVATAR_CSS = `\n.asiyst-avatar {\n position: fixed;\n z-index: 2147483647;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n pointer-events: auto;\n user-select: none;\n}\n.asiyst-avatar.asiyst-animate {\n transition: left 420ms cubic-bezier(0.22, 1, 0.36, 1), top 420ms cubic-bezier(0.22, 1, 0.36, 1);\n}\n.asiyst-figure {\n border-radius: 28px;\n display: grid;\n place-items: center;\n color: #fff;\n font: 700 14px/1.2 system-ui, sans-serif;\n box-shadow: 0 10px 30px rgba(15, 23, 42, 0.28);\n}\n.asiyst-figure[data-pose=\"point\"] { transform: rotate(-12deg); }\n.asiyst-figure[data-pose=\"think\"] { opacity: 0.85; }\n.asiyst-figure[data-pose=\"celebrate\"] { transform: scale(1.08); }\n.asiyst-bubble {\n max-width: 220px;\n background: #0f172a;\n color: #f8fafc;\n border-radius: 12px;\n padding: 8px 10px;\n font: 13px/1.4 system-ui, sans-serif;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.2);\n}\n.asiyst-name { font: 600 12px/1 system-ui, sans-serif; color: #0f172a; }\n@media (prefers-reduced-motion: reduce) {\n .asiyst-avatar.asiyst-animate { transition: none; }\n}\n`;\n\nexport class CssAvatarRenderer implements AvatarRenderer {\n private root: HTMLElement | undefined;\n private figure: HTMLElement | undefined;\n private bubble: HTMLElement | undefined;\n private nameEl: HTMLElement | undefined;\n private size = 96;\n private hidden = false;\n private facing: \"left\" | \"right\" = \"right\";\n private pose: AvatarPose = \"idle\";\n\n mount(container: HTMLElement, config: ProjectConfig): void {\n const doc = container.ownerDocument;\n const style = doc.createElement(\"style\");\n style.textContent = AVATAR_CSS;\n container.appendChild(style);\n\n this.root = doc.createElement(\"div\");\n this.root.className = \"asiyst-avatar asiyst-animate\";\n this.root.setAttribute(\"role\", \"img\");\n\n this.figure = doc.createElement(\"button\");\n this.figure.type = \"button\";\n this.figure.className = \"asiyst-figure\";\n this.figure.setAttribute(\"aria-label\", `${config.avatarName} assistant`);\n\n this.nameEl = doc.createElement(\"div\");\n this.nameEl.className = \"asiyst-name\";\n\n this.bubble = doc.createElement(\"div\");\n this.bubble.className = \"asiyst-bubble\";\n this.bubble.hidden = true;\n\n this.root.append(this.bubble, this.figure, this.nameEl);\n container.appendChild(this.root);\n this.applyConfig(config);\n }\n\n unmount(): void {\n this.root?.remove();\n this.root = undefined;\n }\n\n applyConfig(config: ProjectConfig): void {\n this.size = config.size;\n if (this.figure) {\n this.figure.style.width = `${config.size}px`;\n this.figure.style.height = `${config.size}px`;\n this.figure.style.background = config.theme.accent ?? \"#2563eb\";\n renderSafeText(this.figure, config.avatarName.slice(0, 1).toUpperCase());\n }\n if (this.nameEl) {\n renderSafeText(this.nameEl, config.avatarName);\n }\n if (this.root) {\n this.root.setAttribute(\"aria-label\", config.avatarName);\n }\n }\n\n setPosition(x: number, y: number, animate: boolean): void {\n if (!this.root) {\n return;\n }\n this.root.classList.toggle(\"asiyst-animate\", animate);\n this.root.style.left = `${x}px`;\n this.root.style.top = `${y}px`;\n }\n\n setFacing(direction: \"left\" | \"right\"): void {\n this.facing = direction;\n this.syncTransform();\n }\n\n setPose(pose: AvatarPose): void {\n this.pose = pose;\n this.figure?.setAttribute(\"data-pose\", pose);\n this.syncTransform();\n }\n\n private syncTransform(): void {\n if (!this.figure) {\n return;\n }\n const face = this.facing === \"left\" ? \"scaleX(-1)\" : \"\";\n const pose =\n this.pose === \"point\" ? \"rotate(-12deg)\" : this.pose === \"celebrate\" ? \"scale(1.08)\" : \"\";\n this.figure.style.transform = `${face} ${pose}`.trim();\n }\n\n setSpeech(text: string | null): void {\n if (!this.bubble) {\n return;\n }\n if (!text) {\n this.bubble.hidden = true;\n this.bubble.textContent = \"\";\n return;\n }\n this.bubble.hidden = false;\n renderSafeText(this.bubble, text);\n }\n\n getSize(): { width: number; height: number } {\n return { width: this.size, height: this.size + 28 };\n }\n\n setHidden(hidden: boolean): void {\n this.hidden = hidden;\n if (this.root) {\n this.root.hidden = hidden;\n }\n }\n\n isHidden(): boolean {\n return this.hidden;\n }\n\n getFigure(): HTMLElement | undefined {\n return this.figure;\n }\n}\n","export function prefersReducedMotion(windowLike: Pick<Window, \"matchMedia\"> | null): boolean {\n if (!windowLike || typeof windowLike.matchMedia !== \"function\") {\n return false;\n }\n try {\n return windowLike.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n } catch {\n return false;\n }\n}\n\nexport function createLiveRegion(root: ShadowRoot): HTMLElement {\n const region = root.ownerDocument.createElement(\"div\");\n region.setAttribute(\"role\", \"status\");\n region.setAttribute(\"aria-live\", \"polite\");\n region.setAttribute(\"aria-atomic\", \"true\");\n region.style.position = \"absolute\";\n region.style.width = \"1px\";\n region.style.height = \"1px\";\n region.style.overflow = \"hidden\";\n region.style.clipPath = \"inset(50%)\";\n root.appendChild(region);\n return region;\n}\n","import type { SafeInsets } from \"../types\";\n\nexport function estimateSafeInsets(doc: Document): SafeInsets {\n const insets: SafeInsets = { top: 0, right: 0, bottom: 0, left: 0 };\n const view = doc.defaultView;\n if (!view) {\n return insets;\n }\n\n const candidates = Array.from(doc.querySelectorAll(\"body *\")).slice(0, 200);\n for (const el of candidates) {\n if (!(el instanceof HTMLElement) || el.id === \"asiyst-host\") {\n continue;\n }\n const style = view.getComputedStyle(el);\n const position = style.position;\n if (position !== \"fixed\" && position !== \"sticky\") {\n continue;\n }\n const rect = el.getBoundingClientRect();\n if (rect.height <= 0 || rect.width <= 0) {\n continue;\n }\n if (rect.top <= 8 && rect.height < view.innerHeight / 3) {\n insets.top = Math.max(insets.top, Math.min(rect.bottom, 160));\n }\n if (rect.bottom >= view.innerHeight - 8 && rect.height < view.innerHeight / 3) {\n insets.bottom = Math.max(insets.bottom, Math.min(view.innerHeight - rect.top, 120));\n }\n }\n\n return insets;\n}\n\nexport async function scrollWindowTo(\n win: Window,\n left: number,\n top: number,\n reducedMotion: boolean,\n): Promise<void> {\n win.scrollTo({\n left,\n top,\n behavior: reducedMotion ? \"auto\" : \"smooth\",\n });\n if (!reducedMotion) {\n await waitForScrollIdle(win);\n }\n}\n\nfunction waitForScrollIdle(win: Window): Promise<void> {\n return new Promise((resolve) => {\n let last = win.scrollY;\n let stable = 0;\n const timer = win.setInterval(() => {\n if (Math.abs(win.scrollY - last) < 1) {\n stable += 1;\n } else {\n stable = 0;\n last = win.scrollY;\n }\n if (stable >= 3) {\n win.clearInterval(timer);\n resolve();\n }\n }, 50);\n win.setTimeout(() => {\n win.clearInterval(timer);\n resolve();\n }, 1200);\n });\n}\n","import type { Rect, SafeInsets, ViewportBox } from \"../types\";\nimport { AVATAR_TARGET_GAP, AVATAR_VIEWPORT_PADDING } from \"../core/constants\";\n\nexport interface MovementPlan {\n avatarX: number;\n avatarY: number;\n facing: \"left\" | \"right\";\n needsScroll: boolean;\n scrollLeft: number;\n scrollTop: number;\n}\n\nexport interface MovementInput {\n target: Rect;\n viewport: ViewportBox;\n avatarSize: { width: number; height: number };\n insets: SafeInsets;\n gap?: number;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nexport function isRectInComfortableView(\n target: Rect,\n viewport: ViewportBox,\n insets: SafeInsets,\n): boolean {\n const top = insets.top + 8;\n const left = insets.left + 8;\n const right = viewport.width - insets.right - 8;\n const bottom = viewport.height - insets.bottom - 8;\n return (\n target.x >= left &&\n target.y >= top &&\n target.x + target.width <= right &&\n target.y + target.height <= bottom\n );\n}\n\nexport function computeScrollTarget(\n target: Rect,\n viewport: ViewportBox,\n insets: SafeInsets,\n): { left: number; top: number } {\n const visibleHeight = viewport.height - insets.top - insets.bottom;\n const visibleWidth = viewport.width - insets.left - insets.right;\n const desiredTop = target.y + viewport.scrollY - insets.top - visibleHeight / 2 + target.height / 2;\n const desiredLeft = target.x + viewport.scrollX - insets.left - visibleWidth / 2 + target.width / 2;\n return {\n left: Math.max(0, desiredLeft),\n top: Math.max(0, desiredTop),\n };\n}\n\nexport function computeAvatarDestination(input: MovementInput): MovementPlan {\n const gap = input.gap ?? AVATAR_TARGET_GAP;\n const padding = AVATAR_VIEWPORT_PADDING;\n const { target, viewport, avatarSize, insets } = input;\n\n const minX = insets.left + padding;\n const minY = insets.top + padding;\n const maxX = viewport.width - insets.right - avatarSize.width - padding;\n const maxY = viewport.height - insets.bottom - avatarSize.height - padding;\n\n const leftCandidate = target.x - avatarSize.width - gap;\n const rightCandidate = target.x + target.width + gap;\n const centeredY = target.y + target.height / 2 - avatarSize.height / 2;\n\n let avatarX: number;\n let facing: \"left\" | \"right\";\n\n if (leftCandidate >= minX) {\n avatarX = leftCandidate;\n facing = \"right\";\n } else if (rightCandidate + avatarSize.width <= maxX + avatarSize.width) {\n avatarX = rightCandidate;\n facing = \"left\";\n } else {\n avatarX = minX;\n facing = \"right\";\n }\n\n const avatarY = clamp(centeredY, minY, Math.max(minY, maxY));\n avatarX = clamp(avatarX, minX, Math.max(minX, maxX));\n\n const needsScroll = !isRectInComfortableView(target, viewport, insets);\n const scroll = needsScroll ? computeScrollTarget(target, viewport, insets) : {\n left: viewport.scrollX,\n top: viewport.scrollY,\n };\n\n return {\n avatarX,\n avatarY,\n facing,\n needsScroll,\n scrollLeft: scroll.left,\n scrollTop: scroll.top,\n };\n}\n\nexport function anchorToViewport(\n position: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\",\n viewport: ViewportBox,\n avatarSize: { width: number; height: number },\n insets: SafeInsets,\n): { x: number; y: number } {\n const padding = AVATAR_VIEWPORT_PADDING;\n const xLeft = insets.left + padding;\n const yTop = insets.top + padding;\n const xRight = viewport.width - insets.right - avatarSize.width - padding;\n const yBottom = viewport.height - insets.bottom - avatarSize.height - padding;\n\n switch (position) {\n case \"bottom-left\":\n return { x: xLeft, y: Math.max(yTop, yBottom) };\n case \"top-right\":\n return { x: Math.max(xLeft, xRight), y: yTop };\n case \"top-left\":\n return { x: xLeft, y: yTop };\n case \"bottom-right\":\n default:\n return { x: Math.max(xLeft, xRight), y: Math.max(yTop, yBottom) };\n }\n}\n\nexport function rectsOverlap(a: Rect, b: Rect): boolean {\n return a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y;\n}\n","import type { ProjectConfig, Rect, TargetInput, TargetSource } from \"../types\";\nimport { prefersReducedMotion } from \"../accessibility/a11y\";\nimport { TargetResolver } from \"../dom/TargetResolver\";\nimport { EventBus } from \"../events/EventBus\";\nimport { estimateSafeInsets, scrollWindowTo } from \"../navigation/scroll\";\nimport { anchorToViewport, computeAvatarDestination } from \"../utils/geometry\";\nimport { VIEWPORT_HANDLER_THROTTLE_MS } from \"../core/constants\";\nimport { throttle } from \"../utils/timing\";\n\nexport type AvatarPose = \"idle\" | \"point\" | \"think\" | \"celebrate\" | \"speak\" | \"walk\";\n\nexport interface AvatarRenderer {\n mount(container: HTMLElement, config: ProjectConfig): void;\n unmount(): void;\n applyConfig(config: ProjectConfig): void;\n setPosition(x: number, y: number, animate: boolean): void;\n setFacing(direction: \"left\" | \"right\"): void;\n setPose(pose: AvatarPose): void;\n setSpeech(text: string | null): void;\n getSize(): { width: number; height: number };\n}\n\nexport class MovementEngine {\n private x = 0;\n private y = 0;\n private readonly onViewport: ReturnType<typeof throttle>;\n private followTarget: Element | undefined;\n\n constructor(\n private readonly win: Window,\n private readonly doc: Document,\n private readonly renderer: AvatarRenderer,\n private readonly resolver: TargetResolver,\n private readonly events: EventBus,\n private readonly getConfig: () => ProjectConfig,\n ) {\n this.onViewport = throttle(() => {\n if (this.followTarget) {\n this.placeBeside(this.followTarget, false);\n }\n }, VIEWPORT_HANDLER_THROTTLE_MS);\n }\n\n start(): void {\n this.win.addEventListener(\"scroll\", this.onViewport, true);\n this.win.addEventListener(\"resize\", this.onViewport);\n }\n\n stop(): void {\n this.win.removeEventListener(\"scroll\", this.onViewport, true);\n this.win.removeEventListener(\"resize\", this.onViewport);\n this.onViewport.cancel();\n }\n\n goToAnchor(): void {\n const config = this.getConfig();\n const size = this.renderer.getSize();\n const viewport = this.viewport();\n const point = anchorToViewport(config.position, viewport, size, estimateSafeInsets(this.doc));\n this.setPosition(point.x, point.y, !prefersReducedMotion(this.win));\n }\n\n async moveTo(target: TargetInput, source: TargetSource): Promise<Rect> {\n const resolved = this.resolver.resolve(target, source);\n this.events.emit(\"asiyst:target:found\", { target: typeof target === \"string\" ? { id: target } : target, elementId: resolved.mapped.id });\n await this.placeBeside(resolved.element, true);\n this.followTarget = resolved.element;\n return resolved.mapped.rect;\n }\n\n async pointAt(target: TargetInput, source: TargetSource): Promise<void> {\n await this.moveTo(target, source);\n this.renderer.setPose(\"point\");\n }\n\n private async placeBeside(element: Element, mayScroll: boolean): Promise<void> {\n const reduced = prefersReducedMotion(this.win);\n const size = this.renderer.getSize();\n const viewport = this.viewport();\n const insets = estimateSafeInsets(this.doc);\n const rect = element.getBoundingClientRect();\n const plan = computeAvatarDestination({\n target: { x: rect.left, y: rect.top, width: rect.width, height: rect.height },\n viewport,\n avatarSize: size,\n insets,\n });\n\n if (mayScroll && plan.needsScroll) {\n await scrollWindowTo(this.win, plan.scrollLeft, plan.scrollTop, reduced);\n return this.placeBeside(element, false);\n }\n\n this.renderer.setFacing(plan.facing);\n this.renderer.setPose(\"walk\");\n this.setPosition(plan.avatarX, plan.avatarY, !reduced);\n this.renderer.setPose(\"idle\");\n }\n\n setPosition(x: number, y: number, animate: boolean): void {\n this.x = x;\n this.y = y;\n this.renderer.setPosition(x, y, animate);\n this.events.emit(\"asiyst:avatar:moved\", { x, y });\n }\n\n currentPosition(): { x: number; y: number } {\n return { x: this.x, y: this.y };\n }\n\n private viewport() {\n return {\n width: this.win.innerWidth,\n height: this.win.innerHeight,\n scrollX: this.win.scrollX,\n scrollY: this.win.scrollY,\n };\n }\n}\n","import type { HighlightStyle, ProjectConfig, TargetInput, TargetSource } from \"../types\";\nimport { TargetResolver } from \"../dom/TargetResolver\";\nimport { EventBus } from \"../events/EventBus\";\nimport { HighlightLayer } from \"../highlighting/HighlightLayer\";\nimport { MovementEngine } from \"../movement/MovementEngine\";\nimport { CssAvatarRenderer } from \"./CssAvatarRenderer\";\nimport { renderSafeText } from \"../security/sanitize\";\n\nexport class AvatarController {\n constructor(\n private readonly renderer: CssAvatarRenderer,\n private readonly movement: MovementEngine,\n private readonly highlights: HighlightLayer,\n private readonly resolver: TargetResolver,\n private readonly events: EventBus,\n private readonly liveRegion: HTMLElement,\n private readonly getConfig: () => ProjectConfig,\n ) {}\n\n show(): void {\n this.renderer.setHidden(false);\n this.movement.goToAnchor();\n this.events.emit(\"asiyst:avatar:shown\", { name: this.getConfig().avatarName });\n }\n\n hide(): void {\n this.renderer.setHidden(true);\n this.highlights.hide();\n this.events.emit(\"asiyst:avatar:hidden\", { name: this.getConfig().avatarName });\n }\n\n async moveTo(target: TargetInput, source: TargetSource = \"developer\"): Promise<void> {\n await this.movement.moveTo(target, source);\n }\n\n async pointAt(target: TargetInput, source: TargetSource = \"developer\"): Promise<void> {\n await this.movement.pointAt(target, source);\n }\n\n async highlight(\n target: TargetInput,\n style: HighlightStyle = \"outline\",\n source: TargetSource = \"developer\",\n ): Promise<string> {\n const resolved = this.resolver.resolve(target, source);\n await this.movement.moveTo(target, source);\n this.highlights.show(resolved.element, style);\n this.events.emit(\"asiyst:target:highlighted\", {\n elementId: resolved.mapped.id,\n style,\n });\n return resolved.mapped.id;\n }\n\n speak(message: string): void {\n const text = message.trim();\n this.renderer.setSpeech(text || null);\n this.renderer.setPose(\"speak\");\n renderSafeText(this.liveRegion, text);\n }\n\n think(): void {\n this.renderer.setPose(\"think\");\n }\n\n celebrate(): void {\n this.renderer.setPose(\"celebrate\");\n }\n\n setPosition(x: number, y: number): void {\n this.movement.setPosition(x, y, true);\n }\n\n applyConfig(config: ProjectConfig): void {\n this.renderer.applyConfig(config);\n }\n\n getFigure(): HTMLElement | undefined {\n return this.renderer.getFigure();\n }\n}\n","import type { ActionKind, AssistantMode, ProjectConfig } from \"../types\";\nimport { ActionNotAllowedError } from \"../errors\";\n\nexport const DEFAULT_ALLOWED: ActionKind[] = [\n \"navigate\",\n \"highlight\",\n \"scroll\",\n \"wait\",\n \"explain\",\n \"complete\",\n];\n\nexport function isActionAllowed(\n action: ActionKind,\n config: ProjectConfig,\n source: \"developer\" | \"cloud\" | \"local\",\n): boolean {\n if (source === \"developer\") {\n return true;\n }\n return config.allowedActions.includes(action);\n}\n\nexport function assertActionAllowed(\n action: ActionKind,\n config: ProjectConfig,\n source: \"developer\" | \"cloud\" | \"local\",\n): void {\n if (!isActionAllowed(action, config, source)) {\n throw new ActionNotAllowedError(`Action \"${action}\" is not permitted for this project`);\n }\n}\n\nexport function shouldWaitForUser(action: ActionKind, mode: AssistantMode, waitForUser?: boolean): boolean {\n if (waitForUser === true) {\n return true;\n }\n if (waitForUser === false) {\n return false;\n }\n if (mode === \"guided\" && (action === \"click\" || action === \"type\" || action === \"select\" || action === \"navigate\")) {\n return true;\n }\n return false;\n}\n","import type { ActionKind, HighlightStyle, TargetInput, TargetSource, TaskStep } from \"../types\";\nimport { TaskExecutionError } from \"../errors\";\nimport { AvatarController } from \"../avatar/AvatarController\";\nimport { TargetResolver } from \"../dom/TargetResolver\";\nimport { assertActionAllowed, shouldWaitForUser } from \"./permissions\";\nimport type { ProjectConfig } from \"../types\";\n\nexport interface ActionResult {\n ok: boolean;\n waitedForUser: boolean;\n elementId?: string;\n}\n\nexport class InteractionEngine {\n private stopWait: (() => void) | undefined;\n\n constructor(\n private readonly avatar: AvatarController,\n private readonly resolver: TargetResolver,\n private readonly getConfig: () => ProjectConfig,\n private readonly win: Window,\n ) {}\n\n cancelWait(): void {\n this.stopWait?.();\n }\n\n async execute(step: TaskStep, source: TargetSource): Promise<ActionResult> {\n const config = this.getConfig();\n assertActionAllowed(step.action, config, source);\n const wait = shouldWaitForUser(step.action, config.mode, step.waitForUser);\n\n switch (step.action) {\n case \"explain\":\n case \"wait\":\n if (step.message) {\n this.avatar.speak(step.message);\n }\n return { ok: true, waitedForUser: false };\n case \"highlight\":\n return this.highlight(step, source, wait);\n case \"scroll\":\n case \"click\":\n case \"open-menu\":\n case \"open-modal\":\n case \"search\":\n case \"type\":\n case \"select\":\n return this.guideToward(step, source, wait);\n case \"navigate\":\n return this.navigate(step, source, wait);\n case \"complete\":\n this.avatar.celebrate();\n if (step.message) {\n this.avatar.speak(step.message);\n }\n return { ok: true, waitedForUser: false };\n default:\n throw new TaskExecutionError(\"Unsupported action\");\n }\n }\n\n private async highlight(step: TaskStep, source: TargetSource, wait: boolean): Promise<ActionResult> {\n if (!step.target) {\n throw new TaskExecutionError(\"Highlight requires a target\");\n }\n const style: HighlightStyle = step.highlightStyle ?? \"outline\";\n const elementId = await this.avatar.highlight(step.target, style, source);\n if (step.message) {\n this.avatar.speak(step.message);\n }\n return { ok: true, waitedForUser: wait, elementId };\n }\n\n private async guideToward(step: TaskStep, source: TargetSource, wait: boolean): Promise<ActionResult> {\n if (!step.target) {\n throw new TaskExecutionError(`${step.action} requires a target`);\n }\n if (step.action === \"type\" || step.action === \"select\" || step.action === \"click\") {\n if (!wait) {\n throw new TaskExecutionError(`${step.action} may only run when the user performs it or waitForUser is enabled`);\n }\n }\n const elementId = await this.avatar.highlight(step.target, step.highlightStyle ?? \"pulse\", source);\n if (step.message) {\n this.avatar.speak(step.message);\n } else {\n this.avatar.speak(defaultInstruction(step.action, step.target));\n }\n return { ok: true, waitedForUser: true, elementId };\n }\n\n private async navigate(step: TaskStep, source: TargetSource, wait: boolean): Promise<ActionResult> {\n if (step.target) {\n return this.guideToward(step, source, wait);\n }\n if (!step.url) {\n throw new TaskExecutionError(\"Navigate requires a target or url\");\n }\n if (!wait) {\n throw new TaskExecutionError(\"Automatic navigation is not enabled\");\n }\n if (step.message) {\n this.avatar.speak(step.message);\n }\n return { ok: true, waitedForUser: true };\n }\n\n waitForElementClick(elementId: string, timeoutMs: number): Promise<boolean> {\n return new Promise((resolve) => {\n const resolved = this.resolver.tryResolve(elementId, \"local\");\n if (!resolved) {\n resolve(false);\n return;\n }\n\n const finish = (clicked: boolean) => {\n this.win.clearTimeout(timer);\n this.win.removeEventListener(\"click\", onClick, true);\n this.stopWait = undefined;\n resolve(clicked);\n };\n\n const timer = this.win.setTimeout(() => finish(false), timeoutMs);\n const onClick = (event: Event) => {\n const node = event.target;\n if (!(node instanceof Element)) {\n return;\n }\n if (node === resolved.element || resolved.element.contains(node)) {\n finish(true);\n }\n };\n\n this.stopWait = () => finish(false);\n this.win.addEventListener(\"click\", onClick, true);\n });\n }\n}\n\nfunction defaultInstruction(action: ActionKind, target: TargetInput): string {\n const name = typeof target === \"string\" ? target : target.id ?? target.text ?? \"this control\";\n switch (action) {\n case \"type\":\n return `Type into ${name}.`;\n case \"select\":\n return `Choose an option in ${name}.`;\n case \"navigate\":\n return `Open ${name}.`;\n default:\n return `Click ${name}.`;\n }\n}\n","export const TaskStatus = {\n Idle: \"idle\",\n UserRequest: \"user_request\",\n IntentDetected: \"intent_detected\",\n TaskCreated: \"task_created\",\n TargetResolved: \"target_resolved\",\n ActionStarted: \"action_started\",\n WaitingForUser: \"waiting_for_user\",\n UserActionDetected: \"user_action_detected\",\n StepCompleted: \"step_completed\",\n NextStep: \"next_step\",\n TaskCompleted: \"task_completed\",\n Failed: \"failed\",\n Cancelled: \"cancelled\",\n Timeout: \"timeout\",\n TargetNotFound: \"target_not_found\",\n} as const;\n\nexport type TaskStatus = (typeof TaskStatus)[keyof typeof TaskStatus];\n\nconst TRANSITIONS: Record<TaskStatus, readonly TaskStatus[]> = {\n [TaskStatus.Idle]: [TaskStatus.UserRequest],\n [TaskStatus.UserRequest]: [TaskStatus.IntentDetected, TaskStatus.Failed, TaskStatus.Cancelled],\n [TaskStatus.IntentDetected]: [TaskStatus.TaskCreated, TaskStatus.Failed, TaskStatus.Cancelled],\n [TaskStatus.TaskCreated]: [TaskStatus.TargetResolved, TaskStatus.ActionStarted, TaskStatus.Failed, TaskStatus.Cancelled, TaskStatus.TargetNotFound],\n [TaskStatus.TargetResolved]: [\n TaskStatus.ActionStarted,\n TaskStatus.Failed,\n TaskStatus.Cancelled,\n TaskStatus.TargetNotFound,\n ],\n [TaskStatus.ActionStarted]: [\n TaskStatus.WaitingForUser,\n TaskStatus.StepCompleted,\n TaskStatus.Failed,\n TaskStatus.Cancelled,\n TaskStatus.Timeout,\n TaskStatus.TargetNotFound,\n ],\n [TaskStatus.WaitingForUser]: [\n TaskStatus.UserActionDetected,\n TaskStatus.Timeout,\n TaskStatus.Cancelled,\n TaskStatus.Failed,\n ],\n [TaskStatus.UserActionDetected]: [TaskStatus.StepCompleted, TaskStatus.Failed, TaskStatus.Cancelled],\n [TaskStatus.StepCompleted]: [TaskStatus.NextStep, TaskStatus.TaskCompleted, TaskStatus.Cancelled],\n [TaskStatus.NextStep]: [TaskStatus.TargetResolved, TaskStatus.ActionStarted, TaskStatus.Failed, TaskStatus.Cancelled, TaskStatus.TargetNotFound],\n [TaskStatus.TaskCompleted]: [TaskStatus.Idle],\n [TaskStatus.Failed]: [TaskStatus.Idle],\n [TaskStatus.Cancelled]: [TaskStatus.Idle],\n [TaskStatus.Timeout]: [TaskStatus.Idle, TaskStatus.Failed],\n [TaskStatus.TargetNotFound]: [TaskStatus.Idle, TaskStatus.Failed],\n};\n\nexport function canTransition(from: TaskStatus, to: TaskStatus): boolean {\n return TRANSITIONS[from].includes(to);\n}\n\nexport function transition(from: TaskStatus, to: TaskStatus): TaskStatus {\n if (!canTransition(from, to)) {\n throw new Error(`Invalid task transition: ${from} -> ${to}`);\n }\n return to;\n}\n","import { canTransition, TaskStatus, transition } from \"./states\";\nimport type { TaskDefinition, TargetSource } from \"../types\";\nimport { TargetNotFoundError } from \"../errors\";\nimport { Analytics } from \"../analytics/Analytics\";\nimport { CloudClient } from \"../communication/CloudClient\";\nimport { EventBus } from \"../events/EventBus\";\nimport { InteractionEngine } from \"../interaction/InteractionEngine\";\n\nexport class TaskEngine {\n private status: TaskStatus = TaskStatus.Idle;\n private active: TaskDefinition | undefined;\n private abort = false;\n\n constructor(\n private readonly interaction: InteractionEngine,\n private readonly events: EventBus,\n private readonly analytics: Analytics,\n private readonly cloud: CloudClient,\n ) {}\n\n getStatus(): TaskStatus {\n return this.status;\n }\n\n async run(task: TaskDefinition, source: TargetSource): Promise<TaskStatus> {\n this.abort = false;\n this.active = task;\n this.move(TaskStatus.UserRequest);\n this.move(TaskStatus.IntentDetected);\n this.move(TaskStatus.TaskCreated);\n this.events.emit(\"asiyst:task:started\", { taskId: task.id });\n this.analytics.track(\"task_started\", { taskId: task.id });\n this.analytics.track(\"guide_started\", { taskId: task.id });\n void this.cloud.sendTaskUpdate(task.id, this.status);\n\n try {\n for (const [index, step] of task.steps.entries()) {\n if (this.abort) {\n return TaskStatus.Cancelled;\n }\n if (index > 0) {\n this.move(TaskStatus.NextStep);\n }\n if (step.target) {\n this.move(TaskStatus.TargetResolved);\n }\n this.move(TaskStatus.ActionStarted);\n\n const result = await this.interaction.execute(step, source);\n if (result.waitedForUser && result.elementId) {\n this.move(TaskStatus.WaitingForUser);\n const clicked = await this.interaction.waitForElementClick(result.elementId, step.timeoutMs ?? 30_000);\n if (this.abort) {\n return TaskStatus.Cancelled;\n }\n if (!clicked) {\n this.move(TaskStatus.Timeout);\n return this.finish(TaskStatus.Failed, \"Timed out waiting for the user\");\n }\n this.move(TaskStatus.UserActionDetected);\n this.events.emit(\"asiyst:user:clicked\", { elementId: result.elementId });\n this.analytics.track(\"user_clicked_instructed_element\", { elementId: result.elementId });\n }\n\n this.move(TaskStatus.StepCompleted);\n this.events.emit(\"asiyst:task:step-completed\", { taskId: task.id, stepId: step.id });\n void this.cloud.sendTaskUpdate(task.id, this.status, step.id);\n }\n\n this.move(TaskStatus.TaskCompleted);\n this.events.emit(\"asiyst:task:completed\", { taskId: task.id });\n this.analytics.track(\"task_completed\", { taskId: task.id });\n this.analytics.track(\"guide_completed\", { taskId: task.id });\n void this.cloud.sendTaskUpdate(task.id, this.status);\n this.move(TaskStatus.Idle);\n return TaskStatus.TaskCompleted;\n } catch (error) {\n if (error instanceof TargetNotFoundError) {\n if (canTransition(this.status, TaskStatus.TargetNotFound)) {\n this.move(TaskStatus.TargetNotFound);\n }\n this.events.emit(\"asiyst:target:not-found\", { target: {} });\n this.analytics.track(\"target_not_found\", { taskId: task.id });\n return this.finish(TaskStatus.Failed, error.message);\n }\n const message = error instanceof Error ? error.message : \"Task failed\";\n return this.finish(TaskStatus.Failed, message);\n }\n }\n\n cancel(): void {\n this.abort = true;\n this.interaction.cancelWait();\n if (this.status !== TaskStatus.Idle) {\n this.finish(TaskStatus.Cancelled);\n }\n }\n\n private finish(terminal: TaskStatus, reason?: string): TaskStatus {\n const taskId = this.active?.id ?? \"unknown\";\n if (this.status !== terminal && canTransition(this.status, terminal)) {\n this.move(terminal);\n }\n if (terminal === TaskStatus.Cancelled) {\n this.events.emit(\"asiyst:task:cancelled\", { taskId });\n } else if (terminal !== TaskStatus.TaskCompleted) {\n this.events.emit(\"asiyst:task:failed\", { taskId, reason: reason ?? terminal });\n this.analytics.track(\"task_failed\", { taskId });\n }\n if (canTransition(this.status, TaskStatus.Idle)) {\n this.move(TaskStatus.Idle);\n } else {\n this.status = TaskStatus.Idle;\n }\n return terminal;\n }\n\n private move(next: TaskStatus): void {\n this.status = transition(this.status, next);\n }\n}\n","import type { TargetSource, WorkflowDefinition } from \"../types\";\nimport { CloudClient } from \"../communication/CloudClient\";\nimport { TaskEngine } from \"../task/TaskEngine\";\n\nexport class WorkflowEngine {\n constructor(\n private readonly cloud: CloudClient,\n private readonly tasks: TaskEngine,\n ) {}\n\n async start(workflowId: string, source: TargetSource = \"developer\"): Promise<void> {\n const workflow = await this.cloud.fetchWorkflow(workflowId);\n await this.run(workflow, source);\n }\n\n async run(workflow: WorkflowDefinition, source: TargetSource): Promise<void> {\n await this.tasks.run(\n {\n id: workflow.id,\n title: workflow.title,\n steps: workflow.steps,\n },\n source,\n );\n }\n}\n","import { renderSafeText, sanitizeText } from \"../security/sanitize\";\n\nexport class ConversationPanel {\n private readonly panel: HTMLElement;\n private readonly log: HTMLElement;\n private readonly input: HTMLInputElement;\n private readonly form: HTMLFormElement;\n private conversationId = \"\";\n private openState = false;\n\n constructor(\n root: HTMLElement,\n private readonly onSubmit: (text: string) => Promise<void>,\n private readonly onToggle: (open: boolean) => void,\n ) {\n const doc = root.ownerDocument;\n const style = doc.createElement(\"style\");\n style.textContent = `\n .asiyst-panel {\n position: fixed;\n right: 16px;\n bottom: 16px;\n width: min(360px, calc(100vw - 32px));\n max-height: min(480px, 70vh);\n background: #fff;\n color: #0f172a;\n border-radius: 16px;\n box-shadow: 0 16px 50px rgba(15, 23, 42, 0.22);\n display: flex;\n flex-direction: column;\n font: 14px/1.45 system-ui, sans-serif;\n overflow: hidden;\n }\n .asiyst-panel[hidden] { display: none; }\n .asiyst-panel header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 14px;\n background: #0f172a;\n color: #f8fafc;\n }\n .asiyst-log { flex: 1; overflow: auto; padding: 12px; display: flex; flex-direction: column; gap: 8px; }\n .asiyst-msg { padding: 8px 10px; border-radius: 10px; max-width: 90%; }\n .asiyst-msg[data-role=\"user\"] { align-self: flex-end; background: #dbeafe; }\n .asiyst-msg[data-role=\"assistant\"] { align-self: flex-start; background: #f1f5f9; }\n .asiyst-form { display: flex; gap: 8px; padding: 10px; border-top: 1px solid #e2e8f0; }\n .asiyst-form input { flex: 1; border: 1px solid #cbd5e1; border-radius: 8px; padding: 8px; }\n .asiyst-form button, .asiyst-close {\n border: 0; border-radius: 8px; padding: 8px 10px; background: #2563eb; color: #fff; cursor: pointer;\n }\n .asiyst-close { background: transparent; color: #f8fafc; }\n `;\n root.appendChild(style);\n\n this.panel = doc.createElement(\"section\");\n this.panel.className = \"asiyst-panel\";\n this.panel.hidden = true;\n this.panel.setAttribute(\"role\", \"dialog\");\n this.panel.setAttribute(\"aria-modal\", \"false\");\n this.panel.setAttribute(\"aria-label\", \"Asiyst assistant\");\n\n const header = doc.createElement(\"header\");\n const title = doc.createElement(\"strong\");\n title.textContent = \"Asiyst\";\n const close = doc.createElement(\"button\");\n close.type = \"button\";\n close.className = \"asiyst-close\";\n close.textContent = \"Close\";\n close.addEventListener(\"click\", () => this.close());\n header.append(title, close);\n\n this.log = doc.createElement(\"div\");\n this.log.className = \"asiyst-log\";\n\n this.form = doc.createElement(\"form\");\n this.form.className = \"asiyst-form\";\n this.input = doc.createElement(\"input\");\n this.input.type = \"text\";\n this.input.setAttribute(\"aria-label\", \"Message Asiyst\");\n this.input.autocomplete = \"off\";\n const send = doc.createElement(\"button\");\n send.type = \"submit\";\n send.textContent = \"Send\";\n this.form.append(this.input, send);\n this.form.addEventListener(\"submit\", (event) => {\n event.preventDefault();\n void this.submit();\n });\n\n this.panel.append(header, this.log, this.form);\n root.appendChild(this.panel);\n\n doc.addEventListener(\"keydown\", (event) => {\n if (event.key === \"Escape\" && this.openState) {\n this.close();\n }\n });\n }\n\n isOpen(): boolean {\n return this.openState;\n }\n\n getConversationId(): string {\n return this.conversationId;\n }\n\n open(): void {\n if (!this.conversationId) {\n this.conversationId = `conv_${Date.now().toString(36)}`;\n }\n this.openState = true;\n this.panel.hidden = false;\n this.input.focus();\n this.onToggle(true);\n }\n\n close(): void {\n this.openState = false;\n this.panel.hidden = true;\n this.onToggle(false);\n }\n\n append(role: \"user\" | \"assistant\", text: string): void {\n const item = this.log.ownerDocument.createElement(\"div\");\n item.className = \"asiyst-msg\";\n item.setAttribute(\"data-role\", role);\n renderSafeText(item, text);\n this.log.appendChild(item);\n this.log.scrollTop = this.log.scrollHeight;\n }\n\n private async submit(): Promise<void> {\n const text = sanitizeText(this.input.value);\n if (!text) {\n return;\n }\n this.input.value = \"\";\n this.append(\"user\", text);\n await this.onSubmit(text);\n }\n}\n","export function isolate<T>(fn: () => T, fallback: T): T {\n try {\n return fn();\n } catch {\n return fallback;\n }\n}\n\nexport async function isolateAsync<T>(fn: () => Promise<T>, fallback: T): Promise<T> {\n try {\n return await fn();\n } catch {\n return fallback;\n }\n}\n\nexport function withIsolation(fn: () => void): void {\n try {\n fn();\n } catch {\n // Host pages must keep running if Asiyst throws.\n }\n}\n","import type { InitOptions, ProjectConfig, TargetInput, TaskDefinition, WorkflowDefinition } from \"../types\";\nimport { DEFAULT_API_BASE_URL } from \"./constants\";\nimport { InitializationError } from \"../errors\";\nimport { EventBus } from \"../events/EventBus\";\nimport type { AsiystEventMap } from \"../events/types\";\nimport { HttpTransport } from \"../communication/HttpTransport\";\nimport { CloudClient } from \"../communication/CloudClient\";\nimport { ConfigManager } from \"../config/ConfigManager\";\nimport { Analytics } from \"../analytics/Analytics\";\nimport { HostRoot } from \"./HostRoot\";\nimport { inspectDocument } from \"../dom/inspect\";\nimport { DomObserver } from \"../dom/DomObserver\";\nimport { TargetResolver } from \"../dom/TargetResolver\";\nimport { WebsiteMap } from \"../website-map/WebsiteMap\";\nimport { HistoryObserver } from \"../navigation/HistoryObserver\";\nimport { HighlightLayer } from \"../highlighting/HighlightLayer\";\nimport { CssAvatarRenderer } from \"../avatar/CssAvatarRenderer\";\nimport { MovementEngine } from \"../movement/MovementEngine\";\nimport { AvatarController } from \"../avatar/AvatarController\";\nimport { InteractionEngine } from \"../interaction/InteractionEngine\";\nimport { TaskEngine } from \"../task/TaskEngine\";\nimport { WorkflowEngine } from \"../workflow/WorkflowEngine\";\nimport { ConversationPanel } from \"../client/ConversationPanel\";\nimport { createLiveRegion } from \"../accessibility/a11y\";\nimport { debounce } from \"../utils/timing\";\nimport { DOM_SCAN_DEBOUNCE_MS } from \"./constants\";\nimport { isolateAsync, withIsolation } from \"./isolate\";\n\nexport class AsiystRuntime {\n readonly events = new EventBus();\n private readonly options: InitOptions;\n private readonly cloud: CloudClient;\n private readonly config: ConfigManager;\n private readonly analytics: Analytics;\n private readonly host: HostRoot;\n private readonly map = new WebsiteMap();\n private readonly observer = new DomObserver(() => this.rescan());\n private readonly history: HistoryObserver;\n private readonly resolver: TargetResolver;\n private readonly avatar: AvatarController;\n private readonly movement: MovementEngine;\n private readonly highlights: HighlightLayer;\n private readonly tasks: TaskEngine;\n private readonly workflows: WorkflowEngine;\n private readonly panel: ConversationPanel;\n private readonly renderer: CssAvatarRenderer;\n private destroyed = false;\n private readonly rescanDebounced = debounce(() => this.rescan(), DOM_SCAN_DEBOUNCE_MS);\n\n constructor(options: InitOptions, doc: Document, win: Window) {\n if (!doc.body) {\n throw new InitializationError(\"document.body is not available\");\n }\n this.options = options;\n const transport = new HttpTransport({\n apiBaseUrl: options.apiBaseUrl ?? DEFAULT_API_BASE_URL,\n projectId: options.projectId,\n publicKey: options.publicKey,\n });\n this.cloud = new CloudClient(transport, options.projectId);\n this.config = new ConfigManager(options, this.cloud, this.events);\n this.analytics = new Analytics(options.projectId, this.cloud);\n this.host = new HostRoot(doc);\n this.resolver = new TargetResolver(\n doc,\n () => this.config.get().elementSelectors,\n () => this.map.list(),\n );\n this.renderer = new CssAvatarRenderer();\n this.renderer.mount(this.host.chrome, this.config.get());\n this.highlights = new HighlightLayer(this.host.overlay, win);\n this.movement = new MovementEngine(win, doc, this.renderer, this.resolver, this.events, () => this.config.get());\n const live = createLiveRegion(this.host.shadow);\n this.avatar = new AvatarController(\n this.renderer,\n this.movement,\n this.highlights,\n this.resolver,\n this.events,\n live,\n () => this.config.get(),\n );\n const interaction = new InteractionEngine(this.avatar, this.resolver, () => this.config.get(), win);\n this.tasks = new TaskEngine(interaction, this.events, this.analytics, this.cloud);\n this.workflows = new WorkflowEngine(this.cloud, this.tasks);\n this.panel = new ConversationPanel(\n this.host.chrome,\n (text) => this.handleUserMessage(text, doc),\n (open) => {\n if (open) {\n this.analytics.track(\"assistant_opened\");\n this.events.emit(\"asiyst:conversation:started\", { conversationId: this.panel.getConversationId() });\n } else {\n this.analytics.track(\"assistant_closed\");\n this.events.emit(\"asiyst:conversation:closed\", { conversationId: this.panel.getConversationId() });\n }\n },\n );\n this.history = new HistoryObserver(() => this.rescanDebounced());\n this.history.start(win, options.observeHistory !== false);\n this.observer.start(doc.documentElement);\n this.highlights.start();\n this.movement.start();\n this.analytics.start();\n this.rescan();\n this.avatar.show();\n this.renderer.getFigure()?.addEventListener(\"click\", () => this.open());\n win.addEventListener(\"pagehide\", () => {\n void this.analytics.flush();\n });\n }\n\n async start(): Promise<void> {\n this.events.emit(\"asiyst:initialized\", { projectId: this.options.projectId });\n const cfg = await isolateAsync(() => this.config.refresh(), this.config.get());\n this.avatar.applyConfig(cfg);\n this.avatar.show();\n this.events.emit(\"asiyst:ready\", { projectId: this.options.projectId, configVersion: cfg.version });\n }\n\n getConfig(): ProjectConfig {\n return this.config.get();\n }\n\n open(): void {\n this.panel.open();\n this.avatar.show();\n }\n\n close(): void {\n this.panel.close();\n }\n\n avatarApi() {\n return this.avatar;\n }\n\n async startTaskFromText(text: string, doc: Document): Promise<void> {\n this.analytics.track(\"question_started\");\n const task = await this.cloud.requestTask(text, doc.location.href);\n const result = await this.tasks.run(task, \"cloud\");\n if (result === \"task_completed\") {\n this.analytics.track(\"question_completed\");\n }\n }\n\n async startTask(task: TaskDefinition): Promise<void> {\n await this.tasks.run(task, \"developer\");\n }\n\n cancelTask(): void {\n this.tasks.cancel();\n }\n\n async startWorkflow(id: string): Promise<void> {\n await this.workflows.start(id, \"cloud\");\n }\n\n async startWorkflowDefinition(workflow: WorkflowDefinition): Promise<void> {\n await this.workflows.run(workflow, \"developer\");\n }\n\n on<K extends keyof AsiystEventMap>(event: K, handler: (payload: AsiystEventMap[K]) => void): () => void {\n return this.events.on(event, handler);\n }\n\n off<K extends keyof AsiystEventMap>(event: K, handler: (payload: AsiystEventMap[K]) => void): void {\n this.events.off(event, handler);\n }\n\n async destroy(win: Window): Promise<void> {\n if (this.destroyed) {\n return;\n }\n this.destroyed = true;\n this.observer.stop();\n this.history.stop(win);\n this.movement.stop();\n this.highlights.stop();\n this.rescanDebounced.cancel();\n this.renderer.unmount();\n this.host.destroy();\n this.events.emit(\"asiyst:destroyed\", { projectId: this.options.projectId });\n this.events.removeAll();\n await this.analytics.destroy();\n }\n\n private rescan(): void {\n withIsolation(() => {\n const doc = this.host.host.ownerDocument;\n this.map.replace(inspectDocument(doc));\n void this.cloud.sendWebsiteMap(this.map.snapshot(doc));\n });\n }\n\n private async handleUserMessage(text: string, doc: Document): Promise<void> {\n this.events.emit(\"asiyst:conversation:message\", { role: \"user\", text });\n this.avatar.think();\n try {\n const reply = await this.cloud.sendConversationMessage(text, doc.location.href);\n this.panel.append(\"assistant\", reply.message.text);\n this.avatar.speak(reply.message.text);\n this.events.emit(\"asiyst:conversation:message\", { role: \"assistant\", text: reply.message.text });\n await this.startTaskFromText(text, doc);\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Asiyst Cloud is unavailable\";\n this.panel.append(\"assistant\", message);\n this.events.emit(\"asiyst:error\", { code: \"conversation_failed\", message });\n this.avatar.speak(message);\n }\n }\n}\n","import type { HighlightStyle, InitOptions, ProjectConfig, TargetInput, TaskDefinition } from \"../types\";\nimport { InitializationError } from \"../errors\";\nimport { validateInitOptions } from \"../config/schema\";\nimport type { AsiystEventMap } from \"../events/types\";\nimport { AsiystRuntime } from \"../core/Runtime\";\nimport { withIsolation } from \"../core/isolate\";\n\nlet runtime: AsiystRuntime | undefined;\nlet initPromise: Promise<void> | undefined;\n\nfunction requireRuntime(): AsiystRuntime {\n if (!runtime) {\n throw new InitializationError(\"Call Asiyst.init() before using the SDK\");\n }\n return runtime;\n}\n\nexport const Asiyst = {\n async init(options: InitOptions): Promise<void> {\n if (runtime) {\n throw new InitializationError(\"Asiyst is already initialized\");\n }\n const credentials = validateInitOptions(options);\n const doc = document;\n const win = window;\n runtime = new AsiystRuntime({ ...options, ...credentials }, doc, win);\n initPromise = runtime.start();\n await initPromise;\n },\n\n async destroy(): Promise<void> {\n if (!runtime) {\n return;\n }\n const current = runtime;\n runtime = undefined;\n initPromise = undefined;\n await current.destroy(window);\n },\n\n open(): void {\n withIsolation(() => requireRuntime().open());\n },\n\n close(): void {\n withIsolation(() => requireRuntime().close());\n },\n\n getConfig(): ProjectConfig {\n return requireRuntime().getConfig();\n },\n\n avatar: {\n show(): void {\n withIsolation(() => requireRuntime().avatarApi().show());\n },\n hide(): void {\n withIsolation(() => requireRuntime().avatarApi().hide());\n },\n async moveTo(target: TargetInput): Promise<void> {\n await requireRuntime().avatarApi().moveTo(target, \"developer\");\n },\n async pointAt(target: TargetInput): Promise<void> {\n await requireRuntime().avatarApi().pointAt(target, \"developer\");\n },\n async highlight(target: TargetInput, style?: HighlightStyle): Promise<void> {\n await requireRuntime().avatarApi().highlight(target, style ?? \"outline\", \"developer\");\n },\n speak(message: string): void {\n withIsolation(() => requireRuntime().avatarApi().speak(message));\n },\n think(): void {\n withIsolation(() => requireRuntime().avatarApi().think());\n },\n celebrate(): void {\n withIsolation(() => requireRuntime().avatarApi().celebrate());\n },\n setPosition(x: number, y: number): void {\n withIsolation(() => requireRuntime().avatarApi().setPosition(x, y));\n },\n },\n\n task: {\n async start(input: string | TaskDefinition): Promise<void> {\n const current = requireRuntime();\n if (typeof input === \"string\") {\n await current.startTaskFromText(input, document);\n return;\n }\n await current.startTask(input);\n },\n cancel(): void {\n withIsolation(() => requireRuntime().cancelTask());\n },\n },\n\n workflow: {\n async start(workflowId: string): Promise<void> {\n await requireRuntime().startWorkflow(workflowId);\n },\n },\n\n on<K extends keyof AsiystEventMap>(event: K, handler: (payload: AsiystEventMap[K]) => void): () => void {\n return requireRuntime().on(event, handler);\n },\n\n off<K extends keyof AsiystEventMap>(event: K, handler: (payload: AsiystEventMap[K]) => void): void {\n requireRuntime().off(event, handler);\n },\n};\n"]}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@asiyst/sdk",
3
+ "version": "0.1.0",
4
+ "description": "Client-side runtime that connects a website to Asiyst Cloud",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.cjs",
8
+ "module": "./dist/index.js",
9
+ "types": "./dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/index.cjs"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md"
20
+ ],
21
+ "sideEffects": false,
22
+ "scripts": {
23
+ "build": "tsup",
24
+ "typecheck": "tsc --noEmit",
25
+ "test": "vitest run",
26
+ "test:watch": "vitest"
27
+ },
28
+ "engines": {
29
+ "node": ">=18.18.0"
30
+ },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/Asiyst/asiyst-sdk.git",
34
+ "directory": "packages/sdk"
35
+ },
36
+ "homepage": "https://asiyst.com",
37
+ "bugs": {
38
+ "url": "https://github.com/Asiyst/asiyst-sdk/issues"
39
+ },
40
+ "keywords": [
41
+ "asiyst",
42
+ "sdk",
43
+ "assistant",
44
+ "website"
45
+ ],
46
+ "devDependencies": {
47
+ "jsdom": "^25.0.1",
48
+ "tsup": "^8.3.5",
49
+ "typescript": "^5.7.2",
50
+ "vitest": "^2.1.8"
51
+ }
52
+ }