@webless/agent 0.12.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/{chunk-EVWZF34F.js → chunk-HKQFEO6R.js} +5 -1
- package/dist/{chunk-EVWZF34F.js.map → chunk-HKQFEO6R.js.map} +1 -1
- package/dist/embed.cjs +6 -0
- package/dist/embed.cjs.map +1 -1
- package/dist/embed.d.cts +2 -2
- package/dist/embed.d.ts +2 -2
- package/dist/embed.js +3 -1
- package/dist/embed.js.map +1 -1
- package/dist/{panel-controller-CYoivbYB.d.cts → panel-controller-DbDHLs4L.d.cts} +2 -0
- package/dist/{panel-controller-CYoivbYB.d.ts → panel-controller-DbDHLs4L.d.ts} +2 -0
- package/dist/react.cjs +4 -0
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +4 -3
- package/dist/react.d.ts +4 -3
- package/dist/react.js +1 -1
- package/package.json +1 -1
package/dist/embed.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Root } from 'react-dom/client';
|
|
2
|
-
import { w as AgentTagManifest, O as NormalizedAgentTagManifest } from './panel-controller-
|
|
3
|
-
export { f as AgentIndexVersion, k as AgentMountStrategy, l as AgentPanelSubmitOptions, m as AgentPlacementConfig, u as AgentTabSide, v as AgentTabVariant, L as DEFAULT_AGENT_PLACEMENT, a3 as normalizeAgentPlacement, a4 as normalizeAgentTagManifest, a6 as resetAgentPanel, a7 as submitAgentPanel } from './panel-controller-
|
|
2
|
+
import { w as AgentTagManifest, O as NormalizedAgentTagManifest } from './panel-controller-DbDHLs4L.cjs';
|
|
3
|
+
export { f as AgentIndexVersion, k as AgentMountStrategy, l as AgentPanelSubmitOptions, m as AgentPlacementConfig, u as AgentTabSide, v as AgentTabVariant, L as DEFAULT_AGENT_PLACEMENT, a3 as normalizeAgentPlacement, a4 as normalizeAgentTagManifest, a6 as resetAgentPanel, a7 as submitAgentPanel } from './panel-controller-DbDHLs4L.cjs';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'react';
|
|
6
6
|
|
package/dist/embed.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Root } from 'react-dom/client';
|
|
2
|
-
import { w as AgentTagManifest, O as NormalizedAgentTagManifest } from './panel-controller-
|
|
3
|
-
export { f as AgentIndexVersion, k as AgentMountStrategy, l as AgentPanelSubmitOptions, m as AgentPlacementConfig, u as AgentTabSide, v as AgentTabVariant, L as DEFAULT_AGENT_PLACEMENT, a3 as normalizeAgentPlacement, a4 as normalizeAgentTagManifest, a6 as resetAgentPanel, a7 as submitAgentPanel } from './panel-controller-
|
|
2
|
+
import { w as AgentTagManifest, O as NormalizedAgentTagManifest } from './panel-controller-DbDHLs4L.js';
|
|
3
|
+
export { f as AgentIndexVersion, k as AgentMountStrategy, l as AgentPanelSubmitOptions, m as AgentPlacementConfig, u as AgentTabSide, v as AgentTabVariant, L as DEFAULT_AGENT_PLACEMENT, a3 as normalizeAgentPlacement, a4 as normalizeAgentTagManifest, a6 as resetAgentPanel, a7 as submitAgentPanel } from './panel-controller-DbDHLs4L.js';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import 'react';
|
|
6
6
|
|
package/dist/embed.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
resetAgentPanel,
|
|
10
10
|
resolveAgentRuntimeConfig,
|
|
11
11
|
submitAgentPanel
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-HKQFEO6R.js";
|
|
13
13
|
|
|
14
14
|
// src/embed/mount.tsx
|
|
15
15
|
import { createRoot } from "react-dom/client";
|
|
@@ -40,6 +40,7 @@ function AgentWidget2({
|
|
|
40
40
|
customerId: manifest.customerId,
|
|
41
41
|
version: manifest.version,
|
|
42
42
|
runtimeOrigin: manifest.runtimeOrigin,
|
|
43
|
+
handoffEnabled: manifest.handoffEnabled,
|
|
43
44
|
previewBuildId: manifest.version === "unpublished" ? readUnpublishedPreviewBuildId() : void 0,
|
|
44
45
|
placement: manifest.placement,
|
|
45
46
|
pageShift: manifest.pageShift,
|
|
@@ -81,6 +82,7 @@ function normalizeAgentTagManifest(manifest) {
|
|
|
81
82
|
customerId,
|
|
82
83
|
indexId,
|
|
83
84
|
runtimeOrigin: runtime.origin,
|
|
85
|
+
handoffEnabled: manifest.handoffEnabled === true,
|
|
84
86
|
version,
|
|
85
87
|
mount: {
|
|
86
88
|
selector: manifest.mount?.selector?.trim(),
|
package/dist/embed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/embed/mount.tsx","../src/embed/preview-build.ts","../src/embed/AgentWidget.tsx","../src/embed/manifest.ts","../src/embed/iife-bootstrap.ts"],"sourcesContent":["import { createRoot, type Root } from \"react-dom/client\";\nimport { closeAgentPanel, openAgentPanel } from \"./controller\";\nimport { AgentWidget } from \"./AgentWidget\";\nimport {\n normalizeAgentTagManifest,\n type AgentTagManifest,\n type NormalizedAgentTagManifest,\n} from \"./manifest\";\n\nexport type AgentRuntimeHandle = {\n customerId: string;\n manifest: NormalizedAgentTagManifest;\n host: HTMLElement;\n root: Root;\n open: () => void;\n close: () => void;\n unmount: () => void;\n};\n\nconst mountedHandles = new Map<string, AgentRuntimeHandle>();\nlet latestCustomerId: string | null = null;\n\nfunction resolveMountHost(manifest: NormalizedAgentTagManifest, script?: HTMLScriptElement | null) {\n const strategy = manifest.mount.strategy ?? \"body\";\n\n if (strategy === \"script-parent\" && script?.parentElement instanceof HTMLElement) {\n return script.parentElement;\n }\n\n if (strategy === \"selector\" && manifest.mount.selector) {\n const target = document.querySelector(manifest.mount.selector);\n if (target instanceof HTMLElement) return target;\n }\n\n return document.body;\n}\n\nfunction createHost(customerId: string) {\n const host = document.createElement(\"div\");\n host.dataset.weblessAgentCustomerId = customerId;\n host.setAttribute(\"data-webless-agent\", customerId);\n return host;\n}\n\nexport function mountAgent(input: {\n manifest: AgentTagManifest;\n script?: HTMLScriptElement | null;\n}): AgentRuntimeHandle {\n const manifest = normalizeAgentTagManifest(input.manifest);\n const existing = mountedHandles.get(manifest.customerId);\n if (existing) {\n return existing;\n }\n\n const mountTarget = resolveMountHost(manifest, input.script ?? null);\n const host = createHost(manifest.customerId);\n mountTarget.append(host);\n\n const root = createRoot(host);\n root.render(<AgentWidget manifest={manifest} />);\n\n const handle: AgentRuntimeHandle = {\n customerId: manifest.customerId,\n manifest,\n host,\n root,\n open: () => {\n openAgentPanel(manifest.customerId);\n },\n close: () => {\n closeAgentPanel(manifest.customerId);\n },\n unmount: () => {\n root.unmount();\n host.remove();\n mountedHandles.delete(manifest.customerId);\n if (latestCustomerId === manifest.customerId) {\n latestCustomerId = null;\n }\n },\n };\n\n mountedHandles.set(manifest.customerId, handle);\n latestCustomerId = manifest.customerId;\n return handle;\n}\n\nexport function unmountAgent(customerId?: string) {\n const id = customerId ?? latestCustomerId;\n if (!id) return false;\n const handle = mountedHandles.get(id);\n if (!handle) return false;\n handle.unmount();\n return true;\n}\n\nexport function getMountedAgent(customerId?: string) {\n if (customerId) return mountedHandles.get(customerId) ?? null;\n if (latestCustomerId) return mountedHandles.get(latestCustomerId) ?? null;\n return mountedHandles.values().next().value ?? null;\n}\n\nexport function bootstrapAgent(manifest: AgentTagManifest, script?: HTMLScriptElement | null) {\n return mountAgent({ manifest, script });\n}\n","const PREVIEW_BUILD_ID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;\n\nexport function readUnpublishedPreviewBuildId(href?: string) {\n const source =\n href ?? (typeof window === \"undefined\" ? undefined : window.location.href);\n if (!source) return undefined;\n\n try {\n const buildId = new URL(source).searchParams.get(\"v\")?.trim();\n return buildId && PREVIEW_BUILD_ID_PATTERN.test(buildId)\n ? buildId\n : undefined;\n } catch {\n return undefined;\n }\n}\n","import { AgentWidget as WeblessAgentWidget } from \"../react/components/AgentWidget\";\nimport type { NormalizedAgentTagManifest } from \"./manifest\";\nimport { readUnpublishedPreviewBuildId } from \"./preview-build\";\n\nexport function AgentWidget({\n manifest,\n}: {\n manifest: NormalizedAgentTagManifest;\n}) {\n const defaultCollapsed = manifest.version !== \"unpublished\";\n return (\n <WeblessAgentWidget\n indexId={manifest.indexId}\n customerId={manifest.customerId}\n version={manifest.version}\n runtimeOrigin={manifest.runtimeOrigin}\n previewBuildId={\n manifest.version === \"unpublished\"\n ? readUnpublishedPreviewBuildId()\n : undefined\n }\n placement={manifest.placement}\n pageShift={manifest.pageShift}\n colorScheme={manifest.colorScheme}\n branding={manifest.branding}\n analytics={manifest.analytics}\n defaultCollapsed={defaultCollapsed}\n registerPanelController\n />\n );\n}\n","import {\n DEFAULT_RUNTIME_ORIGIN,\n resolveAgentRuntimeConfig,\n} from \"../runtime/config\";\nimport type { AgentIndexVersion } from \"../runtime/types\";\nimport {\n DEFAULT_AGENT_PLACEMENT,\n normalizeAgentPlacement,\n type AgentPlacementConfig,\n} from \"../react/placement\";\nimport type { AgentColorScheme } from \"../react/types/conversation\";\n\nexport type { AgentPlacementConfig };\nexport type AgentMountStrategy = \"body\" | \"selector\" | \"script-parent\";\n\nexport type AgentTabVariant = AgentPlacementConfig[\"variant\"];\nexport type AgentTabSide = AgentPlacementConfig[\"side\"];\n\nexport type AgentBrandingConfig = {\n agentName?: string;\n tabLabel?: string;\n tabSubLabel?: string;\n tabIconUrl?: string;\n logoUrl?: string;\n greeting?: string;\n composerPlaceholder?: string;\n poweredByLabel?: string;\n disclaimer?: string | null;\n disclaimerLink?: string | null;\n answerReceipt?: boolean;\n readAloud?: boolean;\n fontFamily?: string;\n colors?: {\n primary?: string;\n primarySoft?: string;\n primaryForeground?: string;\n surface?: string;\n surfaceMuted?: string;\n text?: string;\n textMuted?: string;\n border?: string;\n };\n};\n\nexport type AgentAnalyticsConfig = {\n companyIndex: string;\n eventUrl: string;\n trackingConsent: boolean;\n};\n\nexport type AgentTagManifest = {\n customerId: string;\n indexId: string;\n runtimeOrigin?: string;\n version?: AgentIndexVersion;\n mount?: {\n selector?: string;\n strategy?: AgentMountStrategy;\n };\n placement?: Partial<AgentPlacementConfig>;\n pageShift?: boolean;\n colorScheme?: AgentColorScheme;\n branding?: AgentBrandingConfig;\n analytics?: AgentAnalyticsConfig;\n};\n\nexport { DEFAULT_AGENT_PLACEMENT, normalizeAgentPlacement };\n\nexport function normalizeAgentTagManifest(manifest: AgentTagManifest) {\n const indexId = manifest.indexId.trim();\n if (!indexId) {\n throw new Error(\"Agent manifest requires indexId.\");\n }\n\n const customerId = manifest.customerId.trim();\n if (!customerId) {\n throw new Error(\"Agent manifest requires customerId.\");\n }\n\n const version = manifest.version ?? \"published\";\n if (version !== \"published\" && version !== \"unpublished\") {\n throw new Error(\"Agent manifest version must be published or unpublished.\");\n }\n\n const colorScheme = manifest.colorScheme ?? \"auto\";\n if (\n colorScheme !== \"auto\" &&\n colorScheme !== \"light\" &&\n colorScheme !== \"dark\"\n ) {\n throw new Error(\"Agent manifest colorScheme must be auto, light, or dark.\");\n }\n\n const runtime = resolveAgentRuntimeConfig({\n indexId,\n version,\n runtimeOrigin: manifest.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN,\n });\n const branding = normalizeAgentBranding(manifest.branding);\n const analytics = normalizeAgentAnalytics(manifest.analytics);\n\n return {\n customerId,\n indexId,\n runtimeOrigin: runtime.origin,\n version,\n mount: {\n selector: manifest.mount?.selector?.trim(),\n strategy: manifest.mount?.strategy ?? \"body\",\n },\n placement: normalizeAgentPlacement(manifest.placement),\n pageShift: manifest.pageShift ?? true,\n colorScheme,\n ...(branding ? { branding } : {}),\n ...(analytics ? { analytics } : {}),\n };\n}\n\nfunction normalizeAgentAnalytics(\n analytics: AgentAnalyticsConfig | undefined\n): AgentAnalyticsConfig | undefined {\n if (!analytics) return undefined;\n const companyIndex = analytics.companyIndex?.trim() ?? \"\";\n const eventUrl = analytics.eventUrl?.trim() ?? \"\";\n if (!companyIndex || !eventUrl) return undefined;\n try {\n const parsed = new URL(eventUrl);\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n return undefined;\n }\n } catch {\n return undefined;\n }\n return {\n companyIndex,\n eventUrl,\n trackingConsent: analytics.trackingConsent === true,\n };\n}\n\nfunction normalizeOptionalValue(value: string | undefined) {\n const normalized = value?.trim();\n return normalized || undefined;\n}\n\nfunction normalizeOptionalHttpUrl(value: string | null | undefined) {\n if (value === null) return null;\n const normalized = value?.trim();\n if (!normalized) return undefined;\n try {\n const url = new URL(normalized);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return undefined;\n }\n return normalized;\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeAgentBranding(\n branding: AgentBrandingConfig | undefined\n): AgentBrandingConfig | undefined {\n if (!branding) return undefined;\n\n const colors = branding.colors\n ? Object.fromEntries(\n Object.entries(branding.colors).flatMap(([key, value]) => {\n const normalized = normalizeOptionalValue(value);\n return normalized ? [[key, normalized]] : [];\n })\n )\n : undefined;\n const normalized = {\n agentName: normalizeOptionalValue(branding.agentName),\n tabLabel: normalizeOptionalValue(branding.tabLabel),\n tabSubLabel: normalizeOptionalValue(branding.tabSubLabel),\n tabIconUrl: normalizeOptionalValue(branding.tabIconUrl),\n logoUrl: normalizeOptionalValue(branding.logoUrl),\n greeting: normalizeOptionalValue(branding.greeting),\n composerPlaceholder: normalizeOptionalValue(branding.composerPlaceholder),\n poweredByLabel: normalizeOptionalValue(branding.poweredByLabel),\n disclaimer:\n branding.disclaimer === null\n ? null\n : normalizeOptionalValue(branding.disclaimer),\n disclaimerLink: normalizeOptionalHttpUrl(branding.disclaimerLink),\n answerReceipt: branding.answerReceipt === true ? true : undefined,\n readAloud: branding.readAloud === true ? true : undefined,\n fontFamily: normalizeOptionalValue(branding.fontFamily),\n colors:\n colors && Object.keys(colors).length > 0\n ? (colors as NonNullable<AgentBrandingConfig[\"colors\"]>)\n : undefined,\n };\n\n return Object.values(normalized).some((value) => value !== undefined)\n ? normalized\n : undefined;\n}\n\nexport type NormalizedAgentTagManifest = ReturnType<\n typeof normalizeAgentTagManifest\n>;\n","import {\n getMountedAgent,\n mountAgent,\n unmountAgent,\n} from \"./mount\";\nimport type { AgentTagManifest } from \"./manifest\";\n\ndeclare global {\n interface Window {\n WeblessAgent?: WeblessAgentPublicApi;\n }\n}\n\nexport type WeblessAgentPublicApi = {\n mount: (options?: Partial<AgentTagManifest>) => ReturnType<typeof mountAgent>;\n unmount: (customerId?: string) => boolean;\n open: (customerId?: string) => void;\n close: (customerId?: string) => void;\n get: (customerId?: string) => ReturnType<typeof getMountedAgent>;\n};\n\nexport function createWeblessAgentPublicApi(manifest: AgentTagManifest): WeblessAgentPublicApi {\n const script = document.currentScript instanceof HTMLScriptElement ? document.currentScript : null;\n\n function mount(options: Partial<AgentTagManifest> = {}) {\n return mountAgent({\n manifest: {\n ...manifest,\n ...options,\n customerId: manifest.customerId,\n },\n script,\n });\n }\n\n function unmount(customerId?: string) {\n return unmountAgent(customerId ?? manifest.customerId);\n }\n\n function open(customerId?: string) {\n getMountedAgent(customerId ?? manifest.customerId)?.open();\n }\n\n function close(customerId?: string) {\n getMountedAgent(customerId ?? manifest.customerId)?.close();\n }\n\n function get(customerId?: string) {\n return getMountedAgent(customerId ?? manifest.customerId);\n }\n\n const api: WeblessAgentPublicApi = {\n mount,\n unmount,\n open,\n close,\n get,\n };\n\n window.WeblessAgent = api;\n\n void (async () => {\n try {\n mount();\n } catch (error) {\n console.error(\"[Webless] Agent mount failed\", error);\n }\n })();\n\n return api;\n}\n"],"mappings":"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","names":["AgentWidget","normalized","jsx","AgentWidget"]}
|
|
1
|
+
{"version":3,"sources":["../src/embed/mount.tsx","../src/embed/preview-build.ts","../src/embed/AgentWidget.tsx","../src/embed/manifest.ts","../src/embed/iife-bootstrap.ts"],"sourcesContent":["import { createRoot, type Root } from \"react-dom/client\";\nimport { closeAgentPanel, openAgentPanel } from \"./controller\";\nimport { AgentWidget } from \"./AgentWidget\";\nimport {\n normalizeAgentTagManifest,\n type AgentTagManifest,\n type NormalizedAgentTagManifest,\n} from \"./manifest\";\n\nexport type AgentRuntimeHandle = {\n customerId: string;\n manifest: NormalizedAgentTagManifest;\n host: HTMLElement;\n root: Root;\n open: () => void;\n close: () => void;\n unmount: () => void;\n};\n\nconst mountedHandles = new Map<string, AgentRuntimeHandle>();\nlet latestCustomerId: string | null = null;\n\nfunction resolveMountHost(manifest: NormalizedAgentTagManifest, script?: HTMLScriptElement | null) {\n const strategy = manifest.mount.strategy ?? \"body\";\n\n if (strategy === \"script-parent\" && script?.parentElement instanceof HTMLElement) {\n return script.parentElement;\n }\n\n if (strategy === \"selector\" && manifest.mount.selector) {\n const target = document.querySelector(manifest.mount.selector);\n if (target instanceof HTMLElement) return target;\n }\n\n return document.body;\n}\n\nfunction createHost(customerId: string) {\n const host = document.createElement(\"div\");\n host.dataset.weblessAgentCustomerId = customerId;\n host.setAttribute(\"data-webless-agent\", customerId);\n return host;\n}\n\nexport function mountAgent(input: {\n manifest: AgentTagManifest;\n script?: HTMLScriptElement | null;\n}): AgentRuntimeHandle {\n const manifest = normalizeAgentTagManifest(input.manifest);\n const existing = mountedHandles.get(manifest.customerId);\n if (existing) {\n return existing;\n }\n\n const mountTarget = resolveMountHost(manifest, input.script ?? null);\n const host = createHost(manifest.customerId);\n mountTarget.append(host);\n\n const root = createRoot(host);\n root.render(<AgentWidget manifest={manifest} />);\n\n const handle: AgentRuntimeHandle = {\n customerId: manifest.customerId,\n manifest,\n host,\n root,\n open: () => {\n openAgentPanel(manifest.customerId);\n },\n close: () => {\n closeAgentPanel(manifest.customerId);\n },\n unmount: () => {\n root.unmount();\n host.remove();\n mountedHandles.delete(manifest.customerId);\n if (latestCustomerId === manifest.customerId) {\n latestCustomerId = null;\n }\n },\n };\n\n mountedHandles.set(manifest.customerId, handle);\n latestCustomerId = manifest.customerId;\n return handle;\n}\n\nexport function unmountAgent(customerId?: string) {\n const id = customerId ?? latestCustomerId;\n if (!id) return false;\n const handle = mountedHandles.get(id);\n if (!handle) return false;\n handle.unmount();\n return true;\n}\n\nexport function getMountedAgent(customerId?: string) {\n if (customerId) return mountedHandles.get(customerId) ?? null;\n if (latestCustomerId) return mountedHandles.get(latestCustomerId) ?? null;\n return mountedHandles.values().next().value ?? null;\n}\n\nexport function bootstrapAgent(manifest: AgentTagManifest, script?: HTMLScriptElement | null) {\n return mountAgent({ manifest, script });\n}\n","const PREVIEW_BUILD_ID_PATTERN =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;\n\nexport function readUnpublishedPreviewBuildId(href?: string) {\n const source =\n href ?? (typeof window === \"undefined\" ? undefined : window.location.href);\n if (!source) return undefined;\n\n try {\n const buildId = new URL(source).searchParams.get(\"v\")?.trim();\n return buildId && PREVIEW_BUILD_ID_PATTERN.test(buildId)\n ? buildId\n : undefined;\n } catch {\n return undefined;\n }\n}\n","import { AgentWidget as WeblessAgentWidget } from \"../react/components/AgentWidget\";\nimport type { NormalizedAgentTagManifest } from \"./manifest\";\nimport { readUnpublishedPreviewBuildId } from \"./preview-build\";\n\nexport function AgentWidget({\n manifest,\n}: {\n manifest: NormalizedAgentTagManifest;\n}) {\n const defaultCollapsed = manifest.version !== \"unpublished\";\n return (\n <WeblessAgentWidget\n indexId={manifest.indexId}\n customerId={manifest.customerId}\n version={manifest.version}\n runtimeOrigin={manifest.runtimeOrigin}\n handoffEnabled={manifest.handoffEnabled}\n previewBuildId={\n manifest.version === \"unpublished\"\n ? readUnpublishedPreviewBuildId()\n : undefined\n }\n placement={manifest.placement}\n pageShift={manifest.pageShift}\n colorScheme={manifest.colorScheme}\n branding={manifest.branding}\n analytics={manifest.analytics}\n defaultCollapsed={defaultCollapsed}\n registerPanelController\n />\n );\n}\n","import {\n DEFAULT_RUNTIME_ORIGIN,\n resolveAgentRuntimeConfig,\n} from \"../runtime/config\";\nimport type { AgentIndexVersion } from \"../runtime/types\";\nimport {\n DEFAULT_AGENT_PLACEMENT,\n normalizeAgentPlacement,\n type AgentPlacementConfig,\n} from \"../react/placement\";\nimport type { AgentColorScheme } from \"../react/types/conversation\";\n\nexport type { AgentPlacementConfig };\nexport type AgentMountStrategy = \"body\" | \"selector\" | \"script-parent\";\n\nexport type AgentTabVariant = AgentPlacementConfig[\"variant\"];\nexport type AgentTabSide = AgentPlacementConfig[\"side\"];\n\nexport type AgentBrandingConfig = {\n agentName?: string;\n tabLabel?: string;\n tabSubLabel?: string;\n tabIconUrl?: string;\n logoUrl?: string;\n greeting?: string;\n composerPlaceholder?: string;\n poweredByLabel?: string;\n disclaimer?: string | null;\n disclaimerLink?: string | null;\n answerReceipt?: boolean;\n readAloud?: boolean;\n fontFamily?: string;\n colors?: {\n primary?: string;\n primarySoft?: string;\n primaryForeground?: string;\n surface?: string;\n surfaceMuted?: string;\n text?: string;\n textMuted?: string;\n border?: string;\n };\n};\n\nexport type AgentAnalyticsConfig = {\n companyIndex: string;\n eventUrl: string;\n trackingConsent: boolean;\n};\n\nexport type AgentTagManifest = {\n customerId: string;\n indexId: string;\n runtimeOrigin?: string;\n handoffEnabled?: boolean;\n version?: AgentIndexVersion;\n mount?: {\n selector?: string;\n strategy?: AgentMountStrategy;\n };\n placement?: Partial<AgentPlacementConfig>;\n pageShift?: boolean;\n colorScheme?: AgentColorScheme;\n branding?: AgentBrandingConfig;\n analytics?: AgentAnalyticsConfig;\n};\n\nexport { DEFAULT_AGENT_PLACEMENT, normalizeAgentPlacement };\n\nexport function normalizeAgentTagManifest(manifest: AgentTagManifest) {\n const indexId = manifest.indexId.trim();\n if (!indexId) {\n throw new Error(\"Agent manifest requires indexId.\");\n }\n\n const customerId = manifest.customerId.trim();\n if (!customerId) {\n throw new Error(\"Agent manifest requires customerId.\");\n }\n\n const version = manifest.version ?? \"published\";\n if (version !== \"published\" && version !== \"unpublished\") {\n throw new Error(\"Agent manifest version must be published or unpublished.\");\n }\n\n const colorScheme = manifest.colorScheme ?? \"auto\";\n if (\n colorScheme !== \"auto\" &&\n colorScheme !== \"light\" &&\n colorScheme !== \"dark\"\n ) {\n throw new Error(\"Agent manifest colorScheme must be auto, light, or dark.\");\n }\n\n const runtime = resolveAgentRuntimeConfig({\n indexId,\n version,\n runtimeOrigin: manifest.runtimeOrigin?.trim() || DEFAULT_RUNTIME_ORIGIN,\n });\n const branding = normalizeAgentBranding(manifest.branding);\n const analytics = normalizeAgentAnalytics(manifest.analytics);\n\n return {\n customerId,\n indexId,\n runtimeOrigin: runtime.origin,\n handoffEnabled: manifest.handoffEnabled === true,\n version,\n mount: {\n selector: manifest.mount?.selector?.trim(),\n strategy: manifest.mount?.strategy ?? \"body\",\n },\n placement: normalizeAgentPlacement(manifest.placement),\n pageShift: manifest.pageShift ?? true,\n colorScheme,\n ...(branding ? { branding } : {}),\n ...(analytics ? { analytics } : {}),\n };\n}\n\nfunction normalizeAgentAnalytics(\n analytics: AgentAnalyticsConfig | undefined\n): AgentAnalyticsConfig | undefined {\n if (!analytics) return undefined;\n const companyIndex = analytics.companyIndex?.trim() ?? \"\";\n const eventUrl = analytics.eventUrl?.trim() ?? \"\";\n if (!companyIndex || !eventUrl) return undefined;\n try {\n const parsed = new URL(eventUrl);\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n return undefined;\n }\n } catch {\n return undefined;\n }\n return {\n companyIndex,\n eventUrl,\n trackingConsent: analytics.trackingConsent === true,\n };\n}\n\nfunction normalizeOptionalValue(value: string | undefined) {\n const normalized = value?.trim();\n return normalized || undefined;\n}\n\nfunction normalizeOptionalHttpUrl(value: string | null | undefined) {\n if (value === null) return null;\n const normalized = value?.trim();\n if (!normalized) return undefined;\n try {\n const url = new URL(normalized);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return undefined;\n }\n return normalized;\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeAgentBranding(\n branding: AgentBrandingConfig | undefined\n): AgentBrandingConfig | undefined {\n if (!branding) return undefined;\n\n const colors = branding.colors\n ? Object.fromEntries(\n Object.entries(branding.colors).flatMap(([key, value]) => {\n const normalized = normalizeOptionalValue(value);\n return normalized ? [[key, normalized]] : [];\n })\n )\n : undefined;\n const normalized = {\n agentName: normalizeOptionalValue(branding.agentName),\n tabLabel: normalizeOptionalValue(branding.tabLabel),\n tabSubLabel: normalizeOptionalValue(branding.tabSubLabel),\n tabIconUrl: normalizeOptionalValue(branding.tabIconUrl),\n logoUrl: normalizeOptionalValue(branding.logoUrl),\n greeting: normalizeOptionalValue(branding.greeting),\n composerPlaceholder: normalizeOptionalValue(branding.composerPlaceholder),\n poweredByLabel: normalizeOptionalValue(branding.poweredByLabel),\n disclaimer:\n branding.disclaimer === null\n ? null\n : normalizeOptionalValue(branding.disclaimer),\n disclaimerLink: normalizeOptionalHttpUrl(branding.disclaimerLink),\n answerReceipt: branding.answerReceipt === true ? true : undefined,\n readAloud: branding.readAloud === true ? true : undefined,\n fontFamily: normalizeOptionalValue(branding.fontFamily),\n colors:\n colors && Object.keys(colors).length > 0\n ? (colors as NonNullable<AgentBrandingConfig[\"colors\"]>)\n : undefined,\n };\n\n return Object.values(normalized).some((value) => value !== undefined)\n ? normalized\n : undefined;\n}\n\nexport type NormalizedAgentTagManifest = ReturnType<\n typeof normalizeAgentTagManifest\n>;\n","import {\n getMountedAgent,\n mountAgent,\n unmountAgent,\n} from \"./mount\";\nimport type { AgentTagManifest } from \"./manifest\";\n\ndeclare global {\n interface Window {\n WeblessAgent?: WeblessAgentPublicApi;\n }\n}\n\nexport type WeblessAgentPublicApi = {\n mount: (options?: Partial<AgentTagManifest>) => ReturnType<typeof mountAgent>;\n unmount: (customerId?: string) => boolean;\n open: (customerId?: string) => void;\n close: (customerId?: string) => void;\n get: (customerId?: string) => ReturnType<typeof getMountedAgent>;\n};\n\nexport function createWeblessAgentPublicApi(manifest: AgentTagManifest): WeblessAgentPublicApi {\n const script = document.currentScript instanceof HTMLScriptElement ? document.currentScript : null;\n\n function mount(options: Partial<AgentTagManifest> = {}) {\n return mountAgent({\n manifest: {\n ...manifest,\n ...options,\n customerId: manifest.customerId,\n },\n script,\n });\n }\n\n function unmount(customerId?: string) {\n return unmountAgent(customerId ?? manifest.customerId);\n }\n\n function open(customerId?: string) {\n getMountedAgent(customerId ?? manifest.customerId)?.open();\n }\n\n function close(customerId?: string) {\n getMountedAgent(customerId ?? manifest.customerId)?.close();\n }\n\n function get(customerId?: string) {\n return getMountedAgent(customerId ?? manifest.customerId);\n }\n\n const api: WeblessAgentPublicApi = {\n mount,\n unmount,\n open,\n close,\n get,\n };\n\n window.WeblessAgent = api;\n\n void (async () => {\n try {\n mount();\n } catch (error) {\n console.error(\"[Webless] Agent mount failed\", error);\n }\n })();\n\n return api;\n}\n"],"mappings":"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","names":["AgentWidget","normalized","jsx","AgentWidget"]}
|
|
@@ -579,6 +579,7 @@ type AgentTagManifest = {
|
|
|
579
579
|
customerId: string;
|
|
580
580
|
indexId: string;
|
|
581
581
|
runtimeOrigin?: string;
|
|
582
|
+
handoffEnabled?: boolean;
|
|
582
583
|
version?: AgentIndexVersion;
|
|
583
584
|
mount?: {
|
|
584
585
|
selector?: string;
|
|
@@ -597,6 +598,7 @@ declare function normalizeAgentTagManifest(manifest: AgentTagManifest): {
|
|
|
597
598
|
customerId: string;
|
|
598
599
|
indexId: string;
|
|
599
600
|
runtimeOrigin: string;
|
|
601
|
+
handoffEnabled: boolean;
|
|
600
602
|
version: AgentIndexVersion;
|
|
601
603
|
mount: {
|
|
602
604
|
selector: string | undefined;
|
|
@@ -579,6 +579,7 @@ type AgentTagManifest = {
|
|
|
579
579
|
customerId: string;
|
|
580
580
|
indexId: string;
|
|
581
581
|
runtimeOrigin?: string;
|
|
582
|
+
handoffEnabled?: boolean;
|
|
582
583
|
version?: AgentIndexVersion;
|
|
583
584
|
mount?: {
|
|
584
585
|
selector?: string;
|
|
@@ -597,6 +598,7 @@ declare function normalizeAgentTagManifest(manifest: AgentTagManifest): {
|
|
|
597
598
|
customerId: string;
|
|
598
599
|
indexId: string;
|
|
599
600
|
runtimeOrigin: string;
|
|
601
|
+
handoffEnabled: boolean;
|
|
600
602
|
version: AgentIndexVersion;
|
|
601
603
|
mount: {
|
|
602
604
|
selector: string | undefined;
|
package/dist/react.cjs
CHANGED
|
@@ -8006,6 +8006,7 @@ function AgentWidget({
|
|
|
8006
8006
|
previewBuildId,
|
|
8007
8007
|
version,
|
|
8008
8008
|
runtimeOrigin,
|
|
8009
|
+
handoffEnabled = false,
|
|
8009
8010
|
placement: placementInput,
|
|
8010
8011
|
defaultCollapsed = true,
|
|
8011
8012
|
pageShift = true,
|
|
@@ -8032,6 +8033,7 @@ function AgentWidget({
|
|
|
8032
8033
|
});
|
|
8033
8034
|
const {
|
|
8034
8035
|
state,
|
|
8036
|
+
handoff,
|
|
8035
8037
|
reset,
|
|
8036
8038
|
retry,
|
|
8037
8039
|
regenerate,
|
|
@@ -8041,6 +8043,7 @@ function AgentWidget({
|
|
|
8041
8043
|
visitorSessionId,
|
|
8042
8044
|
sessionId
|
|
8043
8045
|
} = useAgentChat({
|
|
8046
|
+
handoffEnabled,
|
|
8044
8047
|
customerId,
|
|
8045
8048
|
getUnpublishedPreviewGrant,
|
|
8046
8049
|
indexId,
|
|
@@ -8167,6 +8170,7 @@ function AgentWidget({
|
|
|
8167
8170
|
answerReceipt: branding?.answerReceipt,
|
|
8168
8171
|
readAloud: branding?.readAloud,
|
|
8169
8172
|
state,
|
|
8173
|
+
handoff,
|
|
8170
8174
|
mobileFullscreen: isMobile && !railCollapsed,
|
|
8171
8175
|
expanded: railExpanded,
|
|
8172
8176
|
onCollapse: !isMobile ? () => setRailCollapsed(true) : void 0,
|