@convai/web-sdk 1.8.0-beta.6 → 1.8.0-beta.8
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 +303 -1
- package/dist/core/ConvaiClient.d.ts +59 -2
- package/dist/core/ConvaiClient.d.ts.map +1 -1
- package/dist/core/ConvaiClient.js +457 -6
- package/dist/core/ConvaiClient.js.map +1 -1
- package/dist/core/MessageHandler.d.ts +11 -0
- package/dist/core/MessageHandler.d.ts.map +1 -1
- package/dist/core/MessageHandler.js +325 -30
- package/dist/core/MessageHandler.js.map +1 -1
- package/dist/core/SSESession.js +2 -2
- package/dist/core/SSESession.js.map +1 -1
- package/dist/core/connectRequest.d.ts +38 -3
- package/dist/core/connectRequest.d.ts.map +1 -1
- package/dist/core/connectRequest.js +57 -11
- package/dist/core/connectRequest.js.map +1 -1
- package/dist/core/index.d.ts +5 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +8 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/logicalTurn.d.ts +4 -1
- package/dist/core/logicalTurn.d.ts.map +1 -1
- package/dist/core/logicalTurn.js +35 -4
- package/dist/core/logicalTurn.js.map +1 -1
- package/dist/core/modelOutput.d.ts +40 -0
- package/dist/core/modelOutput.d.ts.map +1 -0
- package/dist/core/modelOutput.js +187 -0
- package/dist/core/modelOutput.js.map +1 -0
- package/dist/core/publishedChat.d.ts +9 -0
- package/dist/core/publishedChat.d.ts.map +1 -0
- package/dist/core/publishedChat.js +13 -0
- package/dist/core/publishedChat.js.map +1 -0
- package/dist/core/types.d.ts +225 -25
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/embed/ConvaiChatElement.d.ts +103 -0
- package/dist/embed/ConvaiChatElement.d.ts.map +1 -0
- package/dist/embed/ConvaiChatElement.js +679 -0
- package/dist/embed/ConvaiChatElement.js.map +1 -0
- package/dist/embed/browser.d.ts +3 -0
- package/dist/embed/browser.d.ts.map +1 -0
- package/dist/embed/browser.js +5 -0
- package/dist/embed/browser.js.map +1 -0
- package/dist/embed/chat-embed-v1.js +200 -0
- package/dist/embed/chat-embed-v1.js.map +7 -0
- package/dist/embed/index.d.ts +9 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +9 -0
- package/dist/embed/index.js.map +1 -0
- package/dist/embed/publicationApi.d.ts +23 -0
- package/dist/embed/publicationApi.d.ts.map +1 -0
- package/dist/embed/publicationApi.js +141 -0
- package/dist/embed/publicationApi.js.map +1 -0
- package/dist/react/components/ConvaiWidget.d.ts +11 -1
- package/dist/react/components/ConvaiWidget.d.ts.map +1 -1
- package/dist/react/components/ConvaiWidget.js +67 -11
- package/dist/react/components/ConvaiWidget.js.map +1 -1
- package/dist/react/components/rtc-widget/components/MarkdownRenderer.d.ts +7 -0
- package/dist/react/components/rtc-widget/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/react/components/rtc-widget/components/MarkdownRenderer.js +111 -17
- package/dist/react/components/rtc-widget/components/MarkdownRenderer.js.map +1 -1
- package/dist/react/components/rtc-widget/components/UserMessage.js +1 -1
- package/dist/react/components/rtc-widget/components/UserMessage.js.map +1 -1
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.d.ts +1 -1
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.d.ts.map +1 -1
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.js +2 -2
- package/dist/react/components/rtc-widget/components/conviComponents/SettingsTray.js.map +1 -1
- package/dist/react/hooks/useConvaiClient.d.ts +2 -0
- package/dist/react/hooks/useConvaiClient.d.ts.map +1 -1
- package/dist/react/hooks/useConvaiClient.js +8 -0
- package/dist/react/hooks/useConvaiClient.js.map +1 -1
- package/dist/react/index.d.ts +4 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +8 -1
- package/dist/react/index.js.map +1 -1
- package/dist/utils/inlineMarkdown.d.ts +22 -0
- package/dist/utils/inlineMarkdown.d.ts.map +1 -1
- package/dist/utils/inlineMarkdown.js +84 -7
- package/dist/utils/inlineMarkdown.js.map +1 -1
- package/dist/vanilla/ConvaiWidget.d.ts.map +1 -1
- package/dist/vanilla/ConvaiWidget.js +290 -43
- package/dist/vanilla/ConvaiWidget.js.map +1 -1
- package/dist/vanilla/WidgetEventSubscriptions.d.ts +15 -0
- package/dist/vanilla/WidgetEventSubscriptions.d.ts.map +1 -0
- package/dist/vanilla/WidgetEventSubscriptions.js +37 -0
- package/dist/vanilla/WidgetEventSubscriptions.js.map +1 -0
- package/dist/vanilla/index.d.ts +3 -1
- package/dist/vanilla/index.d.ts.map +1 -1
- package/dist/vanilla/index.js +3 -1
- package/dist/vanilla/index.js.map +1 -1
- package/dist/vanilla/styles.d.ts.map +1 -1
- package/dist/vanilla/styles.js +12 -0
- package/dist/vanilla/styles.js.map +1 -1
- package/dist/vanilla/types.d.ts +8 -1
- package/dist/vanilla/types.d.ts.map +1 -1
- package/dist/vanilla/types.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +48 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConvaiChatElement.js","sourceRoot":"","sources":["../../src/embed/ConvaiChatElement.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConvaiClient } from \"../core/ConvaiClient\";\nimport type { ChatMessage, ConvaiClientState } from \"../core/types\";\nimport {\n loadPublishedChatSession,\n parsePublishedChatUrl,\n type PublishedChatDescriptor,\n} from \"./publicationApi\";\n\nconst VISIBLE_MESSAGE_TYPES = new Set([\n \"user-llm-text\",\n \"user-transcription\",\n \"bot-llm-text\",\n \"bot-output\",\n]);\n\n/** Placeholder session id the client reports before the server assigns one. */\nconst UNASSIGNED_SESSION_ID = \"-1\";\n\nconst COPY_ICON = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"9\" y=\"9\" width=\"11\" height=\"11\" rx=\"2\"/><path d=\"M5 15V6a2 2 0 0 1 2-2h9\"/></svg>`;\nconst RESET_ICON = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M3 12a9 9 0 1 0 3-6.7M3 4v5h5\"/></svg>`;\nconst SEND_ICON = `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" aria-hidden=\"true\"><path d=\"M5 12h14M13 6l6 6-6 6\"/></svg>`;\n\n/**\n * Every colour, radius and font is a custom property so an embedder can retheme\n * the widget from the host page without reaching into the shadow root. The\n * defaults match the Convai playground chat.\n */\nconst styles = `\n :host {\n --convai-chat-bg: #0F1113;\n --convai-chat-surface: #181A1D;\n --convai-chat-raised: #24272B;\n --convai-chat-border: rgba(145, 158, 171, 0.20);\n --convai-chat-text: #FFFFFF;\n --convai-chat-muted: #919EAB;\n --convai-chat-faint: #637381;\n --convai-chat-accent: #00A76F;\n --convai-chat-accent-strong: #5BE49B;\n --convai-chat-on-accent: #FFFFFF;\n --convai-chat-user-bubble: #BCDBC7;\n --convai-chat-user-text: #0F1113;\n --convai-chat-danger: #FFAC82;\n /* The widget's own corner. Radii inside the chat — bubbles, the composer\n pill, the circular avatars and send button — are part of its shape, not\n its theme, and are fixed. */\n --convai-chat-radius: 16px;\n --convai-chat-font: \"Public Sans\", Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n\n color-scheme: dark;\n display: block;\n min-height: 560px;\n width: 100%;\n font-family: var(--convai-chat-font);\n }\n :host([full-window]) { min-height: 100dvh; }\n * { box-sizing: border-box; }\n\n .shell {\n background: var(--convai-chat-bg);\n border: 1px solid var(--convai-chat-border);\n border-radius: var(--convai-chat-radius);\n color: var(--convai-chat-text);\n display: grid;\n grid-template-rows: auto minmax(0, 1fr) auto;\n height: 100%;\n min-height: inherit;\n overflow: hidden;\n }\n :host([full-window]) .shell { border: 0; border-radius: 0; }\n\n header {\n align-items: center;\n background: var(--convai-chat-surface);\n border-bottom: 1px solid var(--convai-chat-border);\n display: flex;\n gap: 12px;\n padding: 12px 18px;\n }\n .avatar {\n background: var(--convai-chat-accent);\n border-radius: 50%;\n flex: none;\n height: 40px;\n object-fit: cover;\n width: 40px;\n }\n .avatar-fallback { align-items: center; color: var(--convai-chat-on-accent); display: inline-flex; font-size: 12px; font-weight: 600; justify-content: center; text-transform: uppercase; }\n .identity { min-width: 0; }\n h2 { font-size: 15px; font-weight: 600; line-height: 1.3; margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .status { color: var(--convai-chat-muted); font-size: 12px; margin: 2px 0 0; }\n .header-actions { display: flex; gap: 2px; margin-left: auto; }\n .icon-button {\n align-items: center;\n background: transparent;\n border: 0;\n border-radius: 8px;\n color: var(--convai-chat-muted);\n cursor: pointer;\n display: inline-flex;\n height: 34px;\n justify-content: center;\n padding: 0;\n width: 34px;\n }\n .icon-button:hover:not(:disabled) { background: var(--convai-chat-raised); color: var(--convai-chat-text); }\n .icon-button:disabled { cursor: default; opacity: .4; }\n .icon-button svg { height: 17px; width: 17px; }\n\n .messages { display: flex; flex-direction: column; gap: 14px; overflow-y: auto; padding: 20px 18px; }\n\n .intro { align-items: center; align-self: center; display: flex; flex-direction: column; gap: 8px; margin: auto 0; max-width: 44ch; text-align: center; }\n .intro .avatar { height: 56px; width: 56px; }\n .intro-name { font-size: 16px; font-weight: 600; }\n .intro-description { color: var(--convai-chat-muted); font-size: 13px; margin: 0; }\n\n .row { align-items: flex-end; display: flex; gap: 10px; max-width: 82%; }\n .row.user { align-self: flex-end; flex-direction: row-reverse; }\n .row.character { align-self: flex-start; }\n .row .avatar { height: 26px; width: 26px; }\n .bubble { border-radius: 14px; line-height: 1.5; overflow-wrap: anywhere; padding: 10px 14px; white-space: pre-wrap; }\n .row.user .bubble { background: var(--convai-chat-user-bubble); border-bottom-right-radius: 4px; color: var(--convai-chat-user-text); }\n .row.character .bubble { background: var(--convai-chat-raised); border-bottom-left-radius: 4px; }\n\n .typing { display: inline-flex; gap: 4px; padding: 13px 14px; }\n .typing span { animation: convai-blink 1.2s infinite; background: var(--convai-chat-muted); border-radius: 50%; height: 6px; width: 6px; }\n .typing span:nth-child(2) { animation-delay: .2s; }\n .typing span:nth-child(3) { animation-delay: .4s; }\n @keyframes convai-blink { 0%, 80%, 100% { opacity: .25 } 40% { opacity: 1 } }\n\n .error { color: var(--convai-chat-danger); font-size: 13px; margin: 0; padding: 0 18px 10px; }\n .retry { align-self: center; margin-top: 12px; }\n\n footer { background: var(--convai-chat-surface); border-top: 1px solid var(--convai-chat-border); display: grid; gap: 8px; padding: 12px 18px 10px; }\n form { align-items: center; background: var(--convai-chat-bg); border: 1px solid var(--convai-chat-border); border-radius: 999px; display: flex; gap: 8px; padding: 4px 4px 4px 16px; }\n input { background: transparent; border: 0; color: var(--convai-chat-text); flex: 1; font: inherit; min-width: 0; outline: none; padding: 9px 0; }\n /* The input drops its own outline, so the pill carries keyboard focus. */\n form:focus-within { border-color: var(--convai-chat-accent); box-shadow: 0 0 0 2px var(--convai-chat-accent-strong); }\n input::placeholder { color: var(--convai-chat-faint); }\n button { background: var(--convai-chat-accent); border: 0; border-radius: 999px; color: var(--convai-chat-on-accent); cursor: pointer; font: inherit; font-weight: 600; padding: 9px 16px; }\n button:disabled { cursor: default; opacity: .45; }\n .send { align-items: center; border-radius: 50%; display: inline-flex; height: 38px; justify-content: center; padding: 0; width: 38px; }\n .send svg { height: 17px; width: 17px; }\n .interrupt { background: var(--convai-chat-raised); color: var(--convai-chat-text); padding: 8px 14px; }\n\n .meta { align-items: center; color: var(--convai-chat-faint); display: flex; font-size: 11px; gap: 8px; justify-content: space-between; }\n .session { background: transparent; border: 0; border-radius: 4px; color: var(--convai-chat-faint); cursor: pointer; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 11px; font-weight: 400; padding: 2px 6px; }\n .session:hover { background: var(--convai-chat-raised); color: var(--convai-chat-muted); }\n .session[hidden] { display: none; }\n\n @media (max-width: 560px) {\n :host { min-height: 100dvh; }\n .shell { border: 0; border-radius: 0; }\n .messages { padding: 16px; }\n .row { max-width: 90%; }\n }\n @media (prefers-reduced-motion: reduce) {\n .typing span { animation: none; }\n }\n`;\n\nfunction errorText(error: unknown): string {\n return error instanceof Error && error.message\n ? error.message\n : \"Published chat is temporarily unavailable\";\n}\n\n/** Short, copy-friendly form for a long opaque session id. */\nfunction shortSessionId(sessionId: string): string {\n return sessionId.length > 12\n ? `${sessionId.slice(0, 4)}…${sessionId.slice(-4)}`\n : sessionId;\n}\n\nexport class ConvaiChatElement extends HTMLElement {\n private client: ConvaiClient | null = null;\n private controller: AbortController | null = null;\n private unsubs: Array<() => void> = [];\n private mounted = false;\n private ready = false;\n private messages: ChatMessage[] = [];\n private descriptor: PublishedChatDescriptor | null = null;\n private failureReported = false;\n /** A session that could still produce a reply: set when the client is wired\n * up, cleared when it ends. Not a wait flag — see `isAwaitingReply()`. */\n private sessionLive = false;\n private sessionId: string | null = null;\n private retryVisible = false;\n\n connectedCallback(): void {\n if (this.mounted) return;\n this.mounted = true;\n this.renderShell();\n void this.start();\n }\n\n disconnectedCallback(): void {\n this.mounted = false;\n this.controller?.abort();\n this.controller = null;\n void this.cleanupClient();\n }\n\n private requireAttribute(name: string): string {\n const value = this.getAttribute(name)?.trim();\n if (!value) throw new Error(`${name} is required`);\n return value;\n }\n\n private renderShell(): void {\n const root = this.shadowRoot ?? this.attachShadow({ mode: \"open\" });\n root.innerHTML = `\n <style>${styles}</style>\n <section class=\"shell\" aria-label=\"Convai character chat\">\n <header>\n <img class=\"avatar\" alt=\"\" hidden />\n <div class=\"identity\">\n <h2>Character chat</h2>\n <p class=\"status\" role=\"status\">Preparing chat…</p>\n </div>\n <div class=\"header-actions\">\n <button class=\"icon-button copy-chat\" type=\"button\" title=\"Copy chat\" aria-label=\"Copy chat\" disabled>${COPY_ICON}</button>\n <button class=\"icon-button reset-session\" type=\"button\" title=\"Reset session\" aria-label=\"Reset session\" disabled>${RESET_ICON}</button>\n </div>\n </header>\n <div class=\"messages\" aria-live=\"polite\"></div>\n <p class=\"error\" role=\"alert\" hidden></p>\n <footer>\n <form>\n <input aria-label=\"Chat message\" maxlength=\"4000\" placeholder=\"Preparing chat…\" disabled />\n <button class=\"interrupt\" type=\"button\" hidden>Stop</button>\n <button class=\"send\" type=\"submit\" aria-label=\"Send\" disabled>${SEND_ICON}</button>\n </form>\n <div class=\"meta\">\n <span class=\"powered\">Powered by Convai</span>\n <button class=\"session\" type=\"button\" title=\"Copy session ID\" hidden></button>\n </div>\n </footer>\n </section>\n `;\n const input = root.querySelector<HTMLInputElement>(\"input\");\n const sendButton = root.querySelector<HTMLButtonElement>(\".send\");\n if (input) {\n input.addEventListener(\"input\", () => {\n if (sendButton) {\n sendButton.disabled = !this.client?.state.isConnected || !input.value.trim();\n }\n });\n }\n root.querySelector(\"form\")?.addEventListener(\"submit\", (event) => {\n event.preventDefault();\n if (!input) return;\n const text = input.value.trim();\n if (!text || !this.client?.state.isConnected) return;\n this.client.sendUserTextMessage(text);\n input.value = \"\";\n this.updateControls(true);\n });\n root.querySelector(\".interrupt\")?.addEventListener(\"click\", () => {\n this.client?.sendInterruptMessage();\n this.setResponding(false);\n this.finalizeOpenTurn();\n });\n root.querySelector(\".copy-chat\")?.addEventListener(\"click\", () => {\n void this.copyTranscript();\n });\n root.querySelector(\".reset-session\")?.addEventListener(\"click\", () => {\n this.resetSession();\n });\n root.querySelector(\".session\")?.addEventListener(\"click\", () => {\n if (this.sessionId) void this.writeToClipboard(this.sessionId);\n });\n this.renderDescriptor();\n this.renderMessages();\n }\n\n private async start(): Promise<void> {\n this.controller?.abort();\n const controller = new AbortController();\n this.controller = controller;\n\n // Retire the previous session before awaiting anything. `cleanupClient()`\n // waits on the room teardown, and until that resolves the visitor would\n // otherwise keep a live composer, a Stop control and a typing row driven\n // by a client that has already gone.\n this.ready = false;\n this.failureReported = false;\n this.messages = [];\n this.sessionLive = false;\n this.setResponding(false);\n this.retryVisible = false;\n // A reused element may now point at a different publication. Drop the old\n // descriptor so the header falls back to the host's seed (or the generic\n // title) instead of showing the previous character until the fetch lands.\n this.descriptor = null;\n this.setSessionId(null);\n this.renderDescriptor();\n this.renderMessages();\n this.setError(\"\");\n this.setStatus(\"Preparing chat…\");\n this.updateControls(false);\n\n await this.cleanupClient();\n if (controller.signal.aborted || this.controller !== controller || !this.mounted) return;\n\n try {\n const publicationId = this.requireAttribute(\"publication-id\");\n const publicationApiUrl = this.getAttribute(\"publication-api-url\")?.trim();\n const coreUrlValue = this.getAttribute(\"core-url\")?.trim();\n const coreUrl = coreUrlValue\n ? parsePublishedChatUrl(coreUrlValue, \"core-url\").toString().replace(/\\/$/, \"\")\n : undefined;\n\n const { descriptor, launchToken } = await loadPublishedChatSession(\n publicationId,\n publicationApiUrl || undefined,\n fetch,\n controller.signal,\n );\n if (controller.signal.aborted || this.controller !== controller || !this.mounted) return;\n this.descriptor = descriptor;\n this.renderDescriptor();\n this.renderMessages();\n\n const client = new ConvaiClient();\n this.client = client;\n this.unsubs = [\n client.on(\"messagesChange\", (messages: ChatMessage[]) => {\n this.messages = [...messages];\n this.renderMessages();\n }),\n client.on(\"stateChange\", (state: ConvaiClientState) => {\n this.setResponding(state.isThinking || state.isSpeaking);\n }),\n client.on(\"characterSessionId\", (sessionId: string) => {\n this.setSessionId(sessionId);\n }),\n // The abstain marker in the transcript ends the wait on its own; this\n // only retires the Stop control, which no frame lowers.\n client.on(\"llmNoResponse\", () => this.setResponding(false)),\n client.on(\"botReady\", () => {\n this.ready = true;\n this.setStatus(\"Ready to chat\");\n this.updateControls(true);\n this.dispatch(\"convai-ready\");\n }),\n client.on(\"disconnect\", () => {\n this.endSession();\n this.setStatus(\"Session ended\");\n this.updateControls(false);\n this.showRetry();\n this.dispatch(\"convai-disconnect\");\n }),\n client.on(\"error\", (error: unknown) => {\n if (!controller.signal.aborted && this.controller === controller) {\n void this.fail(error);\n }\n }),\n ];\n\n // Messages can arrive from here on, so the session is live before the\n // connect resolves.\n this.sessionLive = true;\n this.setStatus(\"Connecting…\");\n await client.connectWithPublicationGrant(\n launchToken,\n { ...(coreUrl ? { url: coreUrl } : {}), signal: controller.signal },\n );\n // The published connect path assigns the character session id from the\n // connection response without emitting `characterSessionId`, so the\n // listener above never sees the initial value. Read it once here; the\n // listener still covers later changes.\n this.setSessionId(client.characterSessionId);\n if (!this.ready) this.setStatus(\"Connected; waiting for character…\");\n } catch (error) {\n if (controller.signal.aborted || this.controller !== controller || !this.mounted) return;\n await this.fail(error);\n }\n }\n\n private async fail(error: unknown): Promise<void> {\n if (this.failureReported) return;\n this.failureReported = true;\n const message = errorText(error);\n // cleanupClient() removes the state listener before disconnecting, so the\n // session has to be closed out here or nothing else will.\n this.endSession();\n this.setStatus(\"Unable to connect\");\n this.setError(message);\n this.updateControls(false);\n this.showRetry();\n this.dispatch(\"convai-error\", { message });\n await this.cleanupClient();\n }\n\n private async cleanupClient(): Promise<void> {\n this.sessionLive = false;\n this.unsubs.splice(0).forEach((unsubscribe) => unsubscribe());\n const client = this.client;\n this.client = null;\n if (client) await client.disconnect().catch(() => undefined);\n }\n\n /**\n * A host that already knows who the character is can seed the header through\n * `display-name` and `image-url`, so the identity paints before the\n * publication descriptor resolves. The fetched descriptor always wins.\n */\n private displayName(): string {\n if (this.descriptor) return this.descriptor.display_name || \"Character chat\";\n return this.getAttribute(\"display-name\")?.trim() || \"Character chat\";\n }\n\n /** `null` is a valid descriptor value, so a loaded descriptor without an\n * image clears the seed rather than falling back to it. */\n private imageUrl(): string | null {\n if (this.descriptor) return this.descriptor.image_url;\n return this.getAttribute(\"image-url\")?.trim() || null;\n }\n\n private renderDescriptor(): void {\n const root = this.shadowRoot;\n if (!root) return;\n const title = root.querySelector(\"h2\");\n if (title) title.textContent = this.displayName();\n const imageUrl = this.imageUrl();\n root.querySelectorAll<HTMLImageElement>(\"header .avatar\").forEach((avatar) => {\n if (imageUrl) {\n avatar.src = imageUrl;\n avatar.alt = \"\";\n avatar.hidden = false;\n return;\n }\n avatar.removeAttribute(\"src\");\n avatar.hidden = true;\n });\n }\n\n /**\n * The character's own avatar, reused as the icon beside each of its replies.\n * Without an image this is the character's initial on the accent disc, not a\n * bare `<img>` — which the avatar rule would paint as an empty disc.\n */\n private avatarElement(): HTMLElement {\n const imageUrl = this.imageUrl();\n if (imageUrl) {\n const avatar = document.createElement(\"img\");\n avatar.className = \"avatar\";\n avatar.alt = \"\";\n avatar.src = imageUrl;\n return avatar;\n }\n const fallback = document.createElement(\"span\");\n fallback.className = \"avatar avatar-fallback\";\n fallback.setAttribute(\"aria-hidden\", \"true\");\n fallback.textContent = this.displayName().trim().charAt(0) || \"?\";\n return fallback;\n }\n\n /**\n * Whether the character owes a reply that has produced no text yet — the\n * question the typing indicator asks.\n *\n * Derived from the message list on every render rather than tracked as\n * state, because the list already records every event that starts or ends a\n * wait: a send appends a `user-llm-text` row synchronously\n * (`MessageHandler.addUserTextMessage`), a turn begins as an empty\n * `bot-llm-text` row (`bot-llm-started`), the first token fills that row,\n * and an abstain appends `llm-no-response`. Held as flags instead, each of\n * those events needed its own handler and every one I missed was a bug:\n * dots through an entire reply, no dots for a character-initiated greeting\n * or a follow-up turn, dots forever after an abstain.\n *\n * The scan reads the unfiltered list: the rows that mark a turn's start and\n * its abstain are exactly the ones the transcript hides. An empty bot row\n * means the turn is open only while it is still streaming — `bot-llm-stopped`\n * finalizes the row in place, so an empty finalized row is a turn that ended\n * without text (an interrupt, or a stop before the first token).\n */\n private isAwaitingReply(): boolean {\n if (!this.sessionLive) return false;\n for (let index = this.messages.length - 1; index >= 0; index -= 1) {\n const message = this.messages[index];\n // The character ended its turn without saying anything.\n if (message.type === \"llm-no-response\") return false;\n if (!VISIBLE_MESSAGE_TYPES.has(message.type)) continue;\n if (message.type.startsWith(\"user\")) return true;\n return Boolean(message.isStreaming) && !message.content?.trim();\n }\n return false;\n }\n\n /**\n * Close the open turn in this element's own copy of the transcript.\n *\n * `sendInterruptMessage()` transmits the interrupt; it does not finalize the\n * empty streaming row, which stays open until a `bot-llm-stopped` frame\n * arrives — delayed, or never, if the acknowledgement is lost. The visitor\n * asked the character to stop, so the wait ends with the click. A later\n * `messagesChange` replaces this array wholesale, so nothing diverges.\n */\n private finalizeOpenTurn(): void {\n for (let index = this.messages.length - 1; index >= 0; index -= 1) {\n const message = this.messages[index];\n if (!VISIBLE_MESSAGE_TYPES.has(message.type)) continue;\n if (message.type.startsWith(\"user\")) return;\n if (message.isStreaming) {\n this.messages[index] = { ...message, isStreaming: false };\n this.renderMessages();\n }\n return;\n }\n }\n\n private visibleMessages(): ChatMessage[] {\n return this.messages.filter(\n (message) =>\n VISIBLE_MESSAGE_TYPES.has(message.type) && Boolean(message.content?.trim()),\n );\n }\n\n private renderMessages(): void {\n const container = this.shadowRoot?.querySelector(\".messages\");\n if (!container) return;\n container.replaceChildren();\n const visible = this.visibleMessages();\n const awaiting = this.isAwaitingReply();\n if (visible.length === 0) {\n container.appendChild(this.introElement());\n // A character-initiated greeting is an empty bot row the transcript\n // hides, so the opening state can be waiting too.\n if (awaiting) container.appendChild(this.typingElement());\n if (this.retryVisible) container.appendChild(this.retryElement());\n this.updateTranscriptControls();\n return;\n }\n visible.forEach((message) => {\n const isUser = message.type.startsWith(\"user\");\n const row = document.createElement(\"div\");\n row.className = `row ${isUser ? \"user\" : \"character\"}`;\n if (!isUser) row.appendChild(this.avatarElement());\n const bubble = document.createElement(\"div\");\n bubble.className = \"bubble\";\n bubble.textContent = message.content;\n row.appendChild(bubble);\n container.appendChild(row);\n });\n if (awaiting) container.appendChild(this.typingElement());\n if (this.retryVisible) container.appendChild(this.retryElement());\n container.scrollTop = container.scrollHeight;\n this.updateTranscriptControls();\n }\n\n /** Opening state: who the visitor is talking to, not a bare instruction. */\n private introElement(): HTMLElement {\n const intro = document.createElement(\"div\");\n intro.className = \"intro\";\n intro.appendChild(this.avatarElement());\n const name = document.createElement(\"div\");\n name.className = \"intro-name\";\n name.textContent = this.displayName();\n intro.appendChild(name);\n const description = document.createElement(\"p\");\n description.className = \"intro-description\";\n description.textContent =\n this.descriptor?.description?.trim() || \"Send a message to start a private conversation.\";\n intro.appendChild(description);\n return intro;\n }\n\n private typingElement(): HTMLElement {\n const row = document.createElement(\"div\");\n row.className = \"row character\";\n row.appendChild(this.avatarElement());\n const typing = document.createElement(\"div\");\n typing.className = \"bubble typing\";\n typing.setAttribute(\"aria-label\", \"Character is replying\");\n for (let index = 0; index < 3; index += 1) typing.appendChild(document.createElement(\"span\"));\n row.appendChild(typing);\n return row;\n }\n\n private setStatus(message: string): void {\n const status = this.shadowRoot?.querySelector(\".status\");\n if (status) status.textContent = message;\n }\n\n private setError(message: string): void {\n const error = this.shadowRoot?.querySelector<HTMLElement>(\".error\");\n if (!error) return;\n error.textContent = message;\n error.hidden = !message;\n }\n\n private setSessionId(sessionId: string | null): void {\n const assigned =\n sessionId && sessionId !== UNASSIGNED_SESSION_ID ? sessionId : null;\n this.sessionId = assigned;\n const button = this.shadowRoot?.querySelector<HTMLButtonElement>(\".session\");\n if (!button) return;\n button.hidden = !assigned;\n button.textContent = assigned ? `Session ${shortSessionId(assigned)}` : \"\";\n }\n\n private updateControls(enabled: boolean): void {\n const input = this.shadowRoot?.querySelector<HTMLInputElement>(\"input\");\n const button = this.shadowRoot?.querySelector<HTMLButtonElement>(\".send\");\n const reset = this.shadowRoot?.querySelector<HTMLButtonElement>(\".reset-session\");\n if (input) {\n input.disabled = !enabled;\n input.placeholder = enabled\n ? `Message ${this.displayName()}…`\n : \"Preparing chat…\";\n }\n if (button) button.disabled = !enabled || !input?.value.trim();\n if (reset) reset.disabled = !enabled;\n this.updateTranscriptControls();\n }\n\n private updateTranscriptControls(): void {\n const copy = this.shadowRoot?.querySelector<HTMLButtonElement>(\".copy-chat\");\n if (copy) copy.disabled = this.visibleMessages().length === 0;\n }\n\n /** Shows or hides Stop. The typing indicator no longer rides on this. */\n private setResponding(responding: boolean): void {\n const interrupt = this.shadowRoot?.querySelector<HTMLButtonElement>(\".interrupt\");\n if (interrupt) interrupt.hidden = !responding;\n }\n\n /** The session can no longer produce a reply: stop waiting, stop offering\n * Stop, and redraw so the transcript agrees. */\n private endSession(): void {\n this.sessionLive = false;\n this.setResponding(false);\n this.renderMessages();\n }\n\n /** Same `Author: text` shape the playground's Copy chat produces. */\n private async copyTranscript(): Promise<void> {\n const characterName = this.displayName();\n const transcript = this.visibleMessages()\n .map(\n (message) =>\n `${message.type.startsWith(\"user\") ? \"User\" : characterName}: ${message.content}`,\n )\n .join(\"\\n\");\n if (transcript) await this.writeToClipboard(transcript);\n }\n\n private async writeToClipboard(value: string): Promise<void> {\n try {\n await navigator.clipboard.writeText(value);\n this.dispatch(\"convai-copy\", { value });\n } catch {\n this.setError(\"Could not copy to the clipboard\");\n }\n }\n\n /**\n * A published session is bound to the room it connected with: the character\n * session id travels in the connect request, not in each `user_text_message`,\n * so `ConvaiClient.resetSession()` would clear the transcript while the server\n * kept the previous conversation. Reconnecting on a fresh launch grant is the\n * only reset the published flow supports, and `start()` already tears the old\n * client down before requesting one.\n */\n private resetSession(): void {\n if (!this.client?.state.isConnected) return;\n this.dispatch(\"convai-session-reset\");\n void this.start();\n }\n\n private retryElement(): HTMLButtonElement {\n const retry = document.createElement(\"button\");\n retry.className = \"retry\";\n retry.type = \"button\";\n retry.textContent = \"Try again\";\n retry.addEventListener(\"click\", () => void this.start(), { once: true });\n return retry;\n }\n\n /** Held as state, not a one-off append: a typing or message re-render would\n * otherwise clear the only control left after a failed connection. */\n private showRetry(): void {\n if (this.retryVisible) return;\n this.retryVisible = true;\n this.renderMessages();\n }\n\n private dispatch(name: string, detail?: Record<string, string>): void {\n this.dispatchEvent(\n new CustomEvent(name, { bubbles: true, composed: true, detail }),\n );\n }\n}\n\nexport function defineConvaiChatElement(\n registry: CustomElementRegistry = customElements,\n): void {\n if (!registry.get(\"convai-chat\")) {\n registry.define(\"convai-chat\", ConvaiChatElement);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/embed/browser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACjF,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/embed/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,uBAAuB,EAAE,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACjF,cAAc,kBAAkB,CAAC","sourcesContent":["import { defineConvaiChatElement } from \"./ConvaiChatElement\";\n\ndefineConvaiChatElement();\n\nexport { ConvaiChatElement, defineConvaiChatElement } from \"./ConvaiChatElement\";\nexport * from \"./publicationApi\";\n"]}
|