@mushi-mushi/web 0.2.1 → 0.3.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.
- package/dist/index.cjs +55 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/i18n/en.ts","../src/i18n/ja.ts","../src/i18n/th.ts","../src/i18n/es.ts","../src/i18n/index.ts","../src/styles.ts","../src/widget.ts","../src/capture/console.ts","../src/capture/network.ts","../src/capture/screenshot.ts","../src/capture/performance.ts","../src/capture/element-selector.ts","../src/sentry.ts","../src/proactive-triggers.ts","../src/proactive-manager.ts","../src/mushi.ts"],"names":["MAX_ENTRIES","handleClick","handleError","handleUnhandledRejection"],"mappings":"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","file":"index.js","sourcesContent":["import type { MushiLocale } from './types';\n\nexport const en: MushiLocale = {\n widget: {\n trigger: 'Report Issue',\n title: 'Report an Issue',\n close: 'Close',\n back: 'Back',\n submit: 'Submit',\n submitting: 'Submitting…',\n submitted: 'Thank you! Your report has been submitted.',\n error: 'Something went wrong. Please try again.',\n },\n step1: {\n heading: 'What kind of issue?',\n categories: {\n bug: 'Bug',\n slow: 'Slow / Laggy',\n visual: 'Visual Glitch',\n confusing: 'Confusing',\n other: 'Other',\n },\n categoryDescriptions: {\n bug: 'Something is broken or not working',\n slow: 'Performance issue or slow loading',\n visual: 'Layout, styling, or display problem',\n confusing: 'Hard to understand or navigate',\n other: 'Something else',\n },\n },\n step2: {\n heading: 'What happened?',\n intents: {\n bug: ['Crash', 'Unresponsive', 'Data loss', 'Wrong result', 'Other'],\n slow: ['Page load', 'Interaction', 'API call', 'Animation', 'Other'],\n visual: ['Layout broken', 'Overlapping', 'Missing element', 'Wrong color/font', 'Other'],\n confusing: ['Unclear label', 'Missing help', 'Unexpected flow', 'Lost navigation', 'Other'],\n other: ['Feature request', 'Accessibility', 'Typo', 'Other'],\n },\n },\n step3: {\n heading: 'Tell us more',\n descriptionPlaceholder: 'Describe what happened…',\n screenshotButton: 'Attach Screenshot',\n screenshotAttached: 'Screenshot attached',\n elementButton: 'Select Element',\n elementSelected: 'Element selected',\n optional: '(optional)',\n },\n};\n","import type { MushiLocale } from './types';\n\nexport const ja: MushiLocale = {\n widget: {\n trigger: '問題を報告',\n title: '問題を報告する',\n close: '閉じる',\n back: '戻る',\n submit: '送信',\n submitting: '送信中…',\n submitted: 'ありがとうございます!レポートが送信されました。',\n error: 'エラーが発生しました。もう一度お試しください。',\n },\n step1: {\n heading: 'どのような問題ですか?',\n categories: {\n bug: 'バグ',\n slow: '遅い・重い',\n visual: '表示の問題',\n confusing: 'わかりにくい',\n other: 'その他',\n },\n categoryDescriptions: {\n bug: '動作しない、壊れている',\n slow: 'パフォーマンスが悪い、読み込みが遅い',\n visual: 'レイアウト、デザイン、表示の問題',\n confusing: '理解しにくい、操作がわかりにくい',\n other: 'その他の問題',\n },\n },\n step2: {\n heading: '何が起きましたか?',\n intents: {\n bug: ['クラッシュ', '無反応', 'データ消失', '誤った結果', 'その他'],\n slow: ['ページ読込', '操作反応', 'API通信', 'アニメーション', 'その他'],\n visual: ['レイアウト崩れ', '要素の重なり', '要素が表示されない', '色/フォントが違う', 'その他'],\n confusing: ['ラベルが不明瞭', 'ヘルプがない', '予想外のフロー', 'ナビゲーション迷子', 'その他'],\n other: ['機能要望', 'アクセシビリティ', '誤字脱字', 'その他'],\n },\n },\n step3: {\n heading: '詳細を教えてください',\n descriptionPlaceholder: '何が起きたか説明してください…',\n screenshotButton: 'スクリーンショット添付',\n screenshotAttached: 'スクリーンショット添付済み',\n elementButton: '要素を選択',\n elementSelected: '要素選択済み',\n optional: '(任意)',\n },\n};\n","import type { MushiLocale } from './types';\n\nexport const th: MushiLocale = {\n widget: {\n trigger: 'รายงานปัญหา',\n title: 'รายงานปัญหา',\n close: 'ปิด',\n back: 'กลับ',\n submit: 'ส่ง',\n submitting: 'กำลังส่ง…',\n submitted: 'ขอบคุณครับ/ค่ะ! รายงานของคุณถูกส่งแล้ว',\n error: 'เกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้ง',\n },\n step1: {\n heading: 'ปัญหาประเภทไหน?',\n categories: {\n bug: 'บัก',\n slow: 'ช้า / แลค',\n visual: 'แสดงผลผิดปกติ',\n confusing: 'สับสน',\n other: 'อื่นๆ',\n },\n categoryDescriptions: {\n bug: 'มีบางอย่างเสียหรือทำงานไม่ถูกต้อง',\n slow: 'ปัญหาประสิทธิภาพหรือโหลดช้า',\n visual: 'ปัญหาเลย์เอาต์ สไตล์ หรือการแสดงผล',\n confusing: 'เข้าใจยากหรือนำทางยาก',\n other: 'อย่างอื่น',\n },\n },\n step2: {\n heading: 'เกิดอะไรขึ้น?',\n intents: {\n bug: ['แครช', 'ไม่ตอบสนอง', 'ข้อมูลหาย', 'ผลลัพธ์ผิด', 'อื่นๆ'],\n slow: ['โหลดหน้า', 'การโต้ตอบ', 'API', 'แอนิเมชัน', 'อื่นๆ'],\n visual: ['เลย์เอาต์เสีย', 'ซ้อนทับ', 'องค์ประกอบหาย', 'สี/ฟอนต์ผิด', 'อื่นๆ'],\n confusing: ['ป้ายไม่ชัด', 'ไม่มีคำแนะนำ', 'ขั้นตอนไม่คาดคิด', 'หลงทาง', 'อื่นๆ'],\n other: ['ขอฟีเจอร์', 'การเข้าถึง', 'พิมพ์ผิด', 'อื่นๆ'],\n },\n },\n step3: {\n heading: 'บอกเราเพิ่มเติม',\n descriptionPlaceholder: 'อธิบายสิ่งที่เกิดขึ้น…',\n screenshotButton: 'แนบสกรีนช็อต',\n screenshotAttached: 'แนบสกรีนช็อตแล้ว',\n elementButton: 'เลือกองค์ประกอบ',\n elementSelected: 'เลือกองค์ประกอบแล้ว',\n optional: '(ไม่บังคับ)',\n },\n};\n","import type { MushiLocale } from './types';\n\nexport const es: MushiLocale = {\n widget: {\n trigger: 'Reportar problema',\n title: 'Reportar un problema',\n close: 'Cerrar',\n back: 'Volver',\n submit: 'Enviar',\n submitting: 'Enviando…',\n submitted: '¡Gracias! Tu reporte ha sido enviado.',\n error: 'Algo salió mal. Por favor, inténtalo de nuevo.',\n },\n step1: {\n heading: '¿Qué tipo de problema?',\n categories: {\n bug: 'Error',\n slow: 'Lento',\n visual: 'Problema visual',\n confusing: 'Confuso',\n other: 'Otro',\n },\n categoryDescriptions: {\n bug: 'Algo está roto o no funciona',\n slow: 'Problema de rendimiento o carga lenta',\n visual: 'Problema de diseño, estilo o visualización',\n confusing: 'Difícil de entender o navegar',\n other: 'Otro problema',\n },\n },\n step2: {\n heading: '¿Qué pasó?',\n intents: {\n bug: ['Crash', 'Sin respuesta', 'Pérdida de datos', 'Resultado incorrecto', 'Otro'],\n slow: ['Carga de página', 'Interacción', 'Llamada API', 'Animación', 'Otro'],\n visual: ['Layout roto', 'Superposición', 'Elemento faltante', 'Color/fuente incorrecta', 'Otro'],\n confusing: ['Etiqueta confusa', 'Sin ayuda', 'Flujo inesperado', 'Navegación perdida', 'Otro'],\n other: ['Solicitud de función', 'Accesibilidad', 'Error tipográfico', 'Otro'],\n },\n },\n step3: {\n heading: 'Cuéntanos más',\n descriptionPlaceholder: 'Describe lo que pasó…',\n screenshotButton: 'Adjuntar captura',\n screenshotAttached: 'Captura adjunta',\n elementButton: 'Seleccionar elemento',\n elementSelected: 'Elemento seleccionado',\n optional: '(opcional)',\n },\n};\n","import type { MushiLocale } from './types';\nimport { en } from './en';\nimport { ja } from './ja';\nimport { th } from './th';\nimport { es } from './es';\n\nexport type { MushiLocale } from './types';\n\nconst locales: Record<string, MushiLocale> = { en, ja, th, es };\n\nexport function getLocale(code?: string): MushiLocale {\n if (!code) return en;\n const base = code.split('-')[0].toLowerCase();\n return locales[base] ?? en;\n}\n\nexport function getAvailableLocales(): string[] {\n return Object.keys(locales);\n}\n","export function getWidgetStyles(theme: 'light' | 'dark'): string {\n const isDark = theme === 'dark';\n const accent = '#7c3aed';\n const accentHover = '#6d28d9';\n const accentBgLight = isDark ? '#2e2440' : '#f5f3ff';\n const accentBgSelected = isDark ? '#2e2440' : '#ede9fe';\n const border = isDark ? '#3f3f46' : '#e4e4e7';\n const bgSurface = isDark ? '#18181b' : '#ffffff';\n const bgMuted = isDark ? '#27272a' : '#fafafa';\n const textMuted = isDark ? '#a1a1aa' : '#71717a';\n\n return `\n :host {\n all: initial;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: ${isDark ? '#e4e4e7' : '#18181b'};\n }\n\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n /* Trigger button */\n .mushi-trigger {\n position: fixed;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 22px;\n background: ${bgMuted};\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n }\n .mushi-trigger:hover {\n transform: scale(1.08);\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);\n }\n .mushi-trigger.bottom-right { bottom: 20px; right: 20px; }\n .mushi-trigger.bottom-left { bottom: 20px; left: 20px; }\n .mushi-trigger.top-right { top: 20px; right: 20px; }\n .mushi-trigger.top-left { top: 20px; left: 20px; }\n\n /* Panel */\n .mushi-panel {\n position: fixed;\n width: 380px;\n max-height: 560px;\n border-radius: 12px;\n background: ${bgSurface};\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18);\n border: 1px solid ${border};\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .mushi-panel.open {\n animation: mushi-slide-in 0.25s ease forwards;\n }\n .mushi-panel.closed { display: none; }\n .mushi-panel.bottom-right { bottom: 76px; right: 20px; }\n .mushi-panel.bottom-left { bottom: 76px; left: 20px; }\n .mushi-panel.top-right { top: 76px; right: 20px; }\n .mushi-panel.top-left { top: 76px; left: 20px; }\n\n @keyframes mushi-slide-in {\n from { opacity: 0; transform: translateY(8px) scale(0.98); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n\n /* Header */\n .mushi-header {\n padding: 14px 16px;\n border-bottom: 1px solid ${border};\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mushi-header h3 {\n font-size: 15px;\n font-weight: 600;\n flex: 1;\n }\n .mushi-close, .mushi-back {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 18px;\n color: ${textMuted};\n padding: 4px;\n border-radius: 4px;\n line-height: 1;\n }\n .mushi-close:hover, .mushi-back:hover {\n background: ${bgMuted};\n }\n\n /* Body */\n .mushi-body {\n padding: 12px 16px;\n overflow-y: auto;\n flex: 1;\n }\n\n /* Step 1: Category options */\n .mushi-option-btn {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 12px 14px;\n margin-bottom: 8px;\n border-radius: 10px;\n border: 1px solid ${border};\n background: ${bgMuted};\n cursor: pointer;\n font-size: 14px;\n color: inherit;\n text-align: left;\n transition: border-color 0.15s, background 0.15s, transform 0.1s;\n }\n .mushi-option-btn:hover {\n border-color: ${isDark ? '#a78bfa' : accent};\n background: ${accentBgLight};\n transform: translateX(2px);\n }\n .mushi-option-btn:focus-visible {\n outline: 2px solid ${accent};\n outline-offset: 2px;\n }\n .mushi-option-icon { font-size: 20px; flex-shrink: 0; }\n .mushi-option-text { display: flex; flex-direction: column; gap: 2px; }\n .mushi-option-label { font-weight: 500; }\n .mushi-option-desc { font-size: 12px; color: ${textMuted}; }\n\n /* Step 2: Intent chips */\n .mushi-selected-category {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 8px;\n background: ${accentBgSelected};\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n }\n .mushi-intents {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n .mushi-intent-btn {\n padding: 8px 16px;\n border-radius: 20px;\n border: 1px solid ${border};\n background: ${bgMuted};\n cursor: pointer;\n font-size: 13px;\n color: inherit;\n transition: border-color 0.15s, background 0.15s;\n }\n .mushi-intent-btn:hover {\n border-color: ${isDark ? '#a78bfa' : accent};\n background: ${accentBgLight};\n }\n .mushi-intent-btn:focus-visible {\n outline: 2px solid ${accent};\n outline-offset: 2px;\n }\n\n /* Step 3: Details */\n .mushi-textarea {\n width: 100%;\n min-height: 90px;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid ${border};\n background: ${bgMuted};\n color: inherit;\n font-family: inherit;\n font-size: 14px;\n resize: vertical;\n outline: none;\n transition: border-color 0.15s, box-shadow 0.15s;\n }\n .mushi-textarea:focus {\n border-color: ${isDark ? '#a78bfa' : accent};\n box-shadow: 0 0 0 2px ${isDark ? 'rgba(167,139,250,0.2)' : 'rgba(124,58,237,0.1)'};\n }\n\n .mushi-attachments {\n display: flex;\n gap: 8px;\n margin-top: 10px;\n }\n .mushi-attach-btn {\n padding: 6px 12px;\n border-radius: 6px;\n border: 1px solid ${border};\n background: none;\n cursor: pointer;\n font-size: 12px;\n color: ${textMuted};\n transition: border-color 0.15s, color 0.15s;\n }\n .mushi-attach-btn:hover {\n border-color: ${isDark ? '#a78bfa' : accent};\n color: inherit;\n }\n .mushi-attach-btn.active {\n border-color: ${isDark ? '#a78bfa' : accent};\n color: ${isDark ? '#a78bfa' : accent};\n background: ${accentBgLight};\n }\n\n /* Footer */\n .mushi-footer {\n padding: 12px 16px;\n border-top: 1px solid ${border};\n display: flex;\n align-items: center;\n justify-content: flex-end;\n }\n .mushi-submit {\n padding: 8px 24px;\n border-radius: 8px;\n border: none;\n background: ${accent};\n color: #ffffff;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s;\n }\n .mushi-submit:hover { background: ${accentHover}; }\n .mushi-submit:disabled { opacity: 0.5; cursor: not-allowed; }\n .mushi-submit:focus-visible {\n outline: 2px solid ${accent};\n outline-offset: 2px;\n }\n\n /* Step indicator dots */\n .mushi-step-indicator {\n display: flex;\n justify-content: center;\n gap: 6px;\n padding: 10px;\n }\n .mushi-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: ${border};\n transition: background 0.2s, transform 0.2s;\n }\n .mushi-dot.active {\n background: ${accent};\n transform: scale(1.3);\n }\n .mushi-dot.done {\n background: ${isDark ? '#a78bfa' : '#8b5cf6'};\n }\n\n /* Success */\n .mushi-success {\n text-align: center;\n padding: 32px 16px;\n }\n .mushi-success-icon {\n font-size: 40px;\n margin-bottom: 12px;\n }\n .mushi-success p {\n color: ${textMuted};\n font-size: 14px;\n }\n\n /* Error */\n .mushi-error {\n color: #ef4444;\n font-size: 12px;\n margin-top: 8px;\n }\n `;\n}\n","import type { MushiReportCategory, MushiWidgetConfig } from '@mushi-mushi/core';\nimport { getLocale, type MushiLocale } from './i18n';\nimport { getWidgetStyles } from './styles';\n\ntype WidgetStep = 'category' | 'intent' | 'details' | 'success';\n\nconst CATEGORY_ICONS: Record<MushiReportCategory, string> = {\n bug: '\\u26A0\\uFE0F',\n slow: '\\uD83D\\uDC0C',\n visual: '\\uD83C\\uDFA8',\n confusing: '\\uD83D\\uDE15',\n other: '\\uD83D\\uDCDD',\n};\n\nexport interface WidgetCallbacks {\n onSubmit(data: { category: MushiReportCategory; description: string; intent?: string }): void;\n onOpen(): void;\n onClose(): void;\n onScreenshotRequest(): void;\n onElementSelectorRequest?(): void;\n}\n\nexport class MushiWidget {\n private host: HTMLElement;\n private shadow: ShadowRoot;\n private config: Required<MushiWidgetConfig>;\n private callbacks: WidgetCallbacks;\n private locale: MushiLocale;\n private isOpen = false;\n private step: WidgetStep = 'category';\n private selectedCategory: MushiReportCategory | null = null;\n private selectedIntent: string | null = null;\n private screenshotAttached = false;\n private elementSelected = false;\n private submitting = false;\n\n constructor(config: MushiWidgetConfig = {}, callbacks: WidgetCallbacks) {\n this.config = {\n position: config.position ?? 'bottom-right',\n theme: config.theme ?? 'auto',\n triggerText: config.triggerText ?? '\\uD83D\\uDC1B',\n expandedTitle: config.expandedTitle ?? '',\n mode: config.mode ?? 'conversational',\n locale: config.locale ?? 'auto',\n zIndex: config.zIndex ?? 99999,\n };\n this.callbacks = callbacks;\n this.locale = getLocale(this.config.locale === 'auto' ? undefined : this.config.locale);\n\n this.host = document.createElement('div');\n this.host.id = 'mushi-mushi-widget';\n this.shadow = this.host.attachShadow({ mode: 'closed' });\n }\n\n mount(): void {\n document.body.appendChild(this.host);\n this.render();\n }\n\n open(options?: { category?: MushiReportCategory }): void {\n if (this.isOpen) return;\n this.isOpen = true;\n this.screenshotAttached = false;\n this.elementSelected = false;\n this.submitting = false;\n\n if (options?.category) {\n this.selectedCategory = options.category;\n this.selectedIntent = null;\n this.step = 'intent';\n } else {\n this.selectedCategory = null;\n this.selectedIntent = null;\n this.step = 'category';\n }\n\n this.render();\n this.callbacks.onOpen();\n }\n\n close(): void {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.render();\n this.callbacks.onClose();\n }\n\n getIsOpen(): boolean {\n return this.isOpen;\n }\n\n setScreenshotAttached(attached: boolean): void {\n this.screenshotAttached = attached;\n if (this.isOpen) this.render();\n }\n\n setElementSelected(selected: boolean): void {\n this.elementSelected = selected;\n if (this.isOpen) this.render();\n }\n\n destroy(): void {\n this.host.remove();\n }\n\n private getTheme(): 'light' | 'dark' {\n if (this.config.theme !== 'auto') return this.config.theme;\n if (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n return 'light';\n }\n\n private render(): void {\n const theme = this.getTheme();\n const pos = this.config.position;\n const t = this.locale;\n\n this.shadow.innerHTML = '';\n\n const style = document.createElement('style');\n style.textContent = getWidgetStyles(theme);\n this.shadow.appendChild(style);\n\n const trigger = document.createElement('button');\n trigger.className = `mushi-trigger ${pos}`;\n trigger.textContent = this.config.triggerText;\n trigger.setAttribute('aria-label', t.widget.trigger);\n trigger.style.zIndex = String(this.config.zIndex);\n trigger.addEventListener('click', () => {\n if (this.isOpen) this.close();\n else this.open();\n });\n this.shadow.appendChild(trigger);\n\n const panel = document.createElement('div');\n panel.className = `mushi-panel ${pos}${this.isOpen ? ' open' : ' closed'}`;\n panel.setAttribute('role', 'dialog');\n panel.setAttribute('aria-label', t.widget.title);\n panel.style.zIndex = String(this.config.zIndex + 1);\n\n if (this.isOpen) {\n panel.innerHTML = this.renderStep();\n this.shadow.appendChild(panel);\n this.attachHandlers(panel);\n this.trapFocus(panel);\n }\n }\n\n private renderStep(): string {\n switch (this.step) {\n case 'category': return this.renderCategoryStep();\n case 'intent': return this.renderIntentStep();\n case 'details': return this.renderDetailsStep();\n case 'success': return this.renderSuccessStep();\n }\n }\n\n private renderHeader(title: string, showBack = false): string {\n const t = this.locale;\n return `\n <div class=\"mushi-header\">\n ${showBack ? `<button class=\"mushi-back\" data-action=\"back\" aria-label=\"${t.widget.back}\">\\u2190</button>` : ''}\n <h3>${title}</h3>\n <button class=\"mushi-close\" data-action=\"close\" aria-label=\"${t.widget.close}\">\\u2715</button>\n </div>\n `;\n }\n\n private renderCategoryStep(): string {\n const t = this.locale;\n const categories = (['bug', 'slow', 'visual', 'confusing', 'other'] as MushiReportCategory[])\n .map((id) => `\n <button class=\"mushi-option-btn\" data-category=\"${id}\" role=\"radio\" aria-checked=\"false\">\n <span class=\"mushi-option-icon\">${CATEGORY_ICONS[id]}</span>\n <div class=\"mushi-option-text\">\n <span class=\"mushi-option-label\">${t.step1.categories[id]}</span>\n <span class=\"mushi-option-desc\">${t.step1.categoryDescriptions[id]}</span>\n </div>\n </button>\n `).join('');\n\n return `\n ${this.renderHeader(t.step1.heading)}\n <div class=\"mushi-body\" role=\"radiogroup\" aria-label=\"${t.step1.heading}\">\n ${categories}\n </div>\n <div class=\"mushi-step-indicator\">\n <span class=\"mushi-dot active\"></span>\n <span class=\"mushi-dot\"></span>\n <span class=\"mushi-dot\"></span>\n </div>\n `;\n }\n\n private renderIntentStep(): string {\n const t = this.locale;\n const cat = this.selectedCategory!;\n const intents = t.step2.intents[cat] || [];\n\n const options = intents.map((intent) => `\n <button class=\"mushi-intent-btn\" data-intent=\"${intent}\">\n ${intent}\n </button>\n `).join('');\n\n return `\n ${this.renderHeader(t.step2.heading, true)}\n <div class=\"mushi-body\">\n <div class=\"mushi-selected-category\">\n <span>${CATEGORY_ICONS[cat]}</span>\n <span>${t.step1.categories[cat]}</span>\n </div>\n <div class=\"mushi-intents\">\n ${options}\n </div>\n </div>\n <div class=\"mushi-step-indicator\">\n <span class=\"mushi-dot done\"></span>\n <span class=\"mushi-dot active\"></span>\n <span class=\"mushi-dot\"></span>\n </div>\n `;\n }\n\n private renderDetailsStep(): string {\n const t = this.locale;\n\n return `\n ${this.renderHeader(t.step3.heading, true)}\n <div class=\"mushi-body\">\n <textarea\n class=\"mushi-textarea\"\n placeholder=\"${t.step3.descriptionPlaceholder}\"\n rows=\"4\"\n aria-label=\"${t.step3.heading}\"\n autofocus\n ></textarea>\n <div class=\"mushi-attachments\">\n <button class=\"mushi-attach-btn${this.screenshotAttached ? ' active' : ''}\" data-action=\"screenshot\">\n \\uD83D\\uDCF8 ${this.screenshotAttached ? t.step3.screenshotAttached : t.step3.screenshotButton}\n </button>\n <button class=\"mushi-attach-btn${this.elementSelected ? ' active' : ''}\" data-action=\"element\">\n \\uD83C\\uDFAF ${this.elementSelected ? t.step3.elementSelected : t.step3.elementButton}\n </button>\n </div>\n <div class=\"mushi-error\" style=\"display:none\" role=\"alert\"></div>\n </div>\n <div class=\"mushi-footer\">\n <button class=\"mushi-submit\" data-action=\"submit\"${this.submitting ? ' disabled' : ''}>\n ${this.submitting ? t.widget.submitting : t.widget.submit}\n </button>\n </div>\n <div class=\"mushi-step-indicator\">\n <span class=\"mushi-dot done\"></span>\n <span class=\"mushi-dot done\"></span>\n <span class=\"mushi-dot active\"></span>\n </div>\n `;\n }\n\n private renderSuccessStep(): string {\n const t = this.locale;\n return `\n ${this.renderHeader(t.widget.title)}\n <div class=\"mushi-body\">\n <div class=\"mushi-success\">\n <div class=\"mushi-success-icon\">\\u2705</div>\n <p>${t.widget.submitted}</p>\n </div>\n </div>\n `;\n }\n\n private attachHandlers(panel: HTMLElement): void {\n const t = this.locale;\n\n panel.querySelector('[data-action=\"close\"]')?.addEventListener('click', () => this.close());\n panel.querySelector('[data-action=\"back\"]')?.addEventListener('click', () => {\n if (this.step === 'intent') { this.step = 'category'; this.selectedCategory = null; }\n else if (this.step === 'details') { this.step = 'intent'; this.selectedIntent = null; }\n this.render();\n });\n\n panel.querySelectorAll('[data-category]').forEach((btn) => {\n btn.addEventListener('click', () => {\n this.selectedCategory = (btn as HTMLElement).dataset.category as MushiReportCategory;\n this.step = 'intent';\n this.render();\n });\n });\n\n panel.querySelectorAll('[data-intent]').forEach((btn) => {\n btn.addEventListener('click', () => {\n this.selectedIntent = (btn as HTMLElement).dataset.intent ?? null;\n this.step = 'details';\n this.render();\n });\n });\n\n panel.querySelector('[data-action=\"screenshot\"]')?.addEventListener('click', () => {\n this.callbacks.onScreenshotRequest();\n });\n\n panel.querySelector('[data-action=\"element\"]')?.addEventListener('click', () => {\n this.callbacks.onElementSelectorRequest?.();\n });\n\n panel.querySelector('[data-action=\"submit\"]')?.addEventListener('click', () => {\n const textarea = panel.querySelector('.mushi-textarea') as HTMLTextAreaElement | null;\n const description = textarea?.value?.trim() ?? '';\n const errorEl = panel.querySelector('.mushi-error') as HTMLElement | null;\n\n // V5.3 §2.1: increased from 5 to 20 to filter low-value \"doesn't work\"\n // submissions that the LLM cannot meaningfully classify. Empirically this\n // removed ~30% of unactionable reports without measurable drop in valid ones.\n const MIN_DESCRIPTION_LENGTH = 20;\n if (description.length < MIN_DESCRIPTION_LENGTH) {\n if (errorEl) {\n errorEl.textContent = `${t.widget.error} (${description.length}/${MIN_DESCRIPTION_LENGTH})`;\n errorEl.style.display = 'block';\n }\n return;\n }\n\n this.submitting = true;\n this.render();\n\n this.callbacks.onSubmit({\n category: this.selectedCategory!,\n description,\n intent: this.selectedIntent ?? undefined,\n });\n\n setTimeout(() => {\n this.submitting = false;\n this.step = 'success';\n this.render();\n setTimeout(() => { if (this.step === 'success') this.close(); }, 2500);\n }, 500);\n });\n\n panel.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') this.close();\n });\n }\n\n private trapFocus(panel: HTMLElement): void {\n requestAnimationFrame(() => {\n const focusable = panel.querySelectorAll('button, textarea, [tabindex]');\n if (focusable.length > 0) (focusable[0] as HTMLElement).focus();\n });\n }\n}\n","import type { MushiConsoleEntry } from '@mushi-mushi/core';\n\nconst MAX_ENTRIES = 50;\nconst MAX_MESSAGE_LENGTH = 500;\n\nexport interface ConsoleCapture {\n getEntries(): MushiConsoleEntry[];\n clear(): void;\n destroy(): void;\n}\n\nexport function createConsoleCapture(): ConsoleCapture {\n const entries: MushiConsoleEntry[] = [];\n const originals: Partial<Record<string, (...args: unknown[]) => void>> = {};\n const levels: Array<MushiConsoleEntry['level']> = ['log', 'warn', 'error', 'info', 'debug'];\n\n for (const level of levels) {\n const original = console[level];\n originals[level] = original;\n\n console[level] = (...args: unknown[]) => {\n const message = args\n .map((arg) => {\n try {\n return typeof arg === 'string' ? arg : JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n })\n .join(' ')\n .slice(0, MAX_MESSAGE_LENGTH);\n\n const entry: MushiConsoleEntry = {\n level,\n message,\n timestamp: Date.now(),\n };\n\n if (level === 'error' && args[0] instanceof Error) {\n entry.stack = (args[0] as Error).stack?.slice(0, 1000);\n }\n\n entries.push(entry);\n if (entries.length > MAX_ENTRIES) {\n entries.shift();\n }\n\n original.call(console, ...args);\n };\n }\n\n return {\n getEntries() {\n return [...entries];\n },\n clear() {\n entries.length = 0;\n },\n destroy() {\n for (const level of levels) {\n if (originals[level]) {\n console[level] = originals[level] as typeof console.log;\n }\n }\n },\n };\n}\n","import type { MushiNetworkEntry } from '@mushi-mushi/core';\n\nconst MAX_ENTRIES = 30;\n\nexport interface NetworkCapture {\n getEntries(): MushiNetworkEntry[];\n clear(): void;\n destroy(): void;\n}\n\nexport function createNetworkCapture(): NetworkCapture {\n const entries: MushiNetworkEntry[] = [];\n const originalFetch = globalThis.fetch;\n\n globalThis.fetch = async function mushiFetchInterceptor(\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const startTime = Date.now();\n const method = init?.method?.toUpperCase() ?? 'GET';\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n\n try {\n const response = await originalFetch.call(globalThis, input, init);\n\n addEntry({\n method,\n url: truncateUrl(url),\n status: response.status,\n duration: Date.now() - startTime,\n timestamp: startTime,\n });\n\n return response;\n } catch (error) {\n addEntry({\n method,\n url: truncateUrl(url),\n status: 0,\n duration: Date.now() - startTime,\n timestamp: startTime,\n error: error instanceof Error ? error.message : 'Network error',\n });\n throw error;\n }\n };\n\n function addEntry(entry: MushiNetworkEntry): void {\n entries.push(entry);\n if (entries.length > MAX_ENTRIES) {\n entries.shift();\n }\n }\n\n return {\n getEntries() {\n return [...entries];\n },\n clear() {\n entries.length = 0;\n },\n destroy() {\n globalThis.fetch = originalFetch;\n },\n };\n}\n\nfunction truncateUrl(url: string): string {\n try {\n const parsed = new URL(url);\n const path = parsed.pathname + parsed.search;\n if (path.length > 200) {\n return parsed.origin + path.slice(0, 200) + '...';\n }\n return parsed.origin + path;\n } catch {\n return url.slice(0, 200);\n }\n}\n","export interface ScreenshotCapture {\n take(): Promise<string | null>;\n}\n\nexport function createScreenshotCapture(): ScreenshotCapture {\n async function take(): Promise<string | null> {\n try {\n if (typeof document === 'undefined') return null;\n\n // Prefer native getDisplayMedia if available (requires user gesture)\n // Fall back to simple canvas-based capture of visible viewport\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n const width = window.innerWidth;\n const height = window.innerHeight;\n const dpr = Math.min(window.devicePixelRatio || 1, 2);\n\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n\n // Capture via SVG foreignObject — works for most DOM content\n const svgData = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">\n <foreignObject width=\"100%\" height=\"100%\">\n <div xmlns=\"http://www.w3.org/1999/xhtml\">\n ${new XMLSerializer().serializeToString(document.documentElement)}\n </div>\n </foreignObject>\n </svg>\n `;\n\n const img = new Image();\n const blob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n\n return new Promise((resolve) => {\n img.onload = () => {\n ctx.drawImage(img, 0, 0, width, height);\n URL.revokeObjectURL(url);\n try {\n const dataUrl = canvas.toDataURL('image/jpeg', 0.7);\n resolve(dataUrl);\n } catch {\n resolve(null);\n }\n };\n img.onerror = () => {\n URL.revokeObjectURL(url);\n resolve(null);\n };\n img.src = url;\n });\n } catch {\n return null;\n }\n }\n\n return { take };\n}\n","import type { MushiPerformanceMetrics } from '@mushi-mushi/core';\n\nexport interface PerformanceCapture {\n getMetrics(): MushiPerformanceMetrics;\n destroy(): void;\n}\n\nexport function createPerformanceCapture(): PerformanceCapture {\n const metrics: MushiPerformanceMetrics = {};\n const observers: PerformanceObserver[] = [];\n\n if (typeof PerformanceObserver !== 'undefined') {\n try {\n const paintObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.name === 'first-contentful-paint') {\n metrics.fcp = entry.startTime;\n }\n }\n });\n paintObserver.observe({ type: 'paint', buffered: true });\n observers.push(paintObserver);\n } catch {\n // paint observer not supported\n }\n\n try {\n const lcpObserver = new PerformanceObserver((list) => {\n const entries = list.getEntries();\n if (entries.length > 0) {\n metrics.lcp = entries[entries.length - 1]!.startTime;\n }\n });\n lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });\n observers.push(lcpObserver);\n } catch {\n // LCP not supported\n }\n\n try {\n let clsValue = 0;\n const clsObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!(entry as PerformanceEntry & { hadRecentInput?: boolean }).hadRecentInput) {\n clsValue += (entry as PerformanceEntry & { value?: number }).value ?? 0;\n metrics.cls = clsValue;\n }\n }\n });\n clsObserver.observe({ type: 'layout-shift', buffered: true });\n observers.push(clsObserver);\n } catch {\n // CLS not supported\n }\n\n try {\n let longTaskCount = 0;\n const longTaskObserver = new PerformanceObserver((list) => {\n longTaskCount += list.getEntries().length;\n metrics.longTasks = longTaskCount;\n });\n longTaskObserver.observe({ type: 'longtask', buffered: true });\n observers.push(longTaskObserver);\n } catch {\n // longtask not supported\n }\n }\n\n // Navigation timing for TTFB\n if (typeof performance !== 'undefined' && performance.getEntriesByType) {\n try {\n const navEntries = performance.getEntriesByType('navigation') as PerformanceNavigationTiming[];\n if (navEntries.length > 0 && navEntries[0]) {\n metrics.ttfb = navEntries[0].responseStart - navEntries[0].requestStart;\n }\n } catch {\n // navigation timing not available\n }\n }\n\n return {\n getMetrics() {\n return { ...metrics };\n },\n destroy() {\n for (const obs of observers) {\n obs.disconnect();\n }\n observers.length = 0;\n },\n };\n}\n","import type { MushiSelectedElement } from '@mushi-mushi/core';\n\nexport interface ElementSelector {\n activate(): Promise<MushiSelectedElement | null>;\n deactivate(): void;\n isActive(): boolean;\n}\n\nexport function createElementSelector(): ElementSelector {\n let active = false;\n let overlay: HTMLDivElement | null = null;\n let resolvePromise: ((el: MushiSelectedElement | null) => void) | null = null;\n\n function getXPath(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n while (current && current !== document.body) {\n let index = 1;\n let sibling: Element | null = current.previousElementSibling;\n while (sibling) {\n if (sibling.tagName === current.tagName) index++;\n sibling = sibling.previousElementSibling;\n }\n const tag = current.tagName.toLowerCase();\n parts.unshift(index > 1 ? `${tag}[${index}]` : tag);\n current = current.parentElement;\n }\n return '//' + parts.join('/');\n }\n\n function captureElement(el: Element): MushiSelectedElement {\n const rect = el.getBoundingClientRect();\n return {\n tagName: el.tagName.toLowerCase(),\n id: el.id || undefined,\n className: el.className || undefined,\n textContent: el.textContent?.trim().slice(0, 200) || undefined,\n xpath: getXPath(el),\n rect: {\n x: Math.round(rect.x),\n y: Math.round(rect.y),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n },\n };\n }\n\n function createOverlay(): HTMLDivElement {\n const el = document.createElement('div');\n el.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 2147483647;\n border: 2px solid #6366f1;\n background: rgba(99, 102, 241, 0.1);\n border-radius: 4px;\n transition: all 0.1s ease;\n display: none;\n `;\n document.body.appendChild(el);\n return el;\n }\n\n function positionOverlay(target: Element) {\n if (!overlay) return;\n const rect = target.getBoundingClientRect();\n overlay.style.left = `${rect.left}px`;\n overlay.style.top = `${rect.top}px`;\n overlay.style.width = `${rect.width}px`;\n overlay.style.height = `${rect.height}px`;\n overlay.style.display = 'block';\n }\n\n function handleMouseMove(e: MouseEvent) {\n const target = e.target as Element;\n if (target === overlay) return;\n positionOverlay(target);\n }\n\n function handleClick(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n const target = e.target as Element;\n if (target === overlay) return;\n const captured = captureElement(target);\n finish(captured);\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n finish(null);\n }\n }\n\n function finish(result: MushiSelectedElement | null) {\n deactivate();\n resolvePromise?.(result);\n resolvePromise = null;\n }\n\n function activate(): Promise<MushiSelectedElement | null> {\n if (active) deactivate();\n\n return new Promise((resolve) => {\n resolvePromise = resolve;\n active = true;\n overlay = createOverlay();\n document.body.style.cursor = 'crosshair';\n\n document.addEventListener('mousemove', handleMouseMove, true);\n document.addEventListener('click', handleClick, true);\n document.addEventListener('keydown', handleKeyDown, true);\n });\n }\n\n function deactivate() {\n if (!active) return;\n active = false;\n document.body.style.cursor = '';\n document.removeEventListener('mousemove', handleMouseMove, true);\n document.removeEventListener('click', handleClick, true);\n document.removeEventListener('keydown', handleKeyDown, true);\n\n if (overlay) {\n overlay.remove();\n overlay = null;\n }\n }\n\n return { activate, deactivate, isActive: () => active };\n}\n","import type { MushiSentryConfig } from '@mushi-mushi/core';\n\nexport interface SentryContext {\n eventId?: string;\n replayId?: string;\n traceId?: string;\n release?: string;\n environment?: string;\n}\n\ninterface SentryHub {\n getClient?(): { getOptions?(): { release?: string; environment?: string } } | undefined;\n getScope?(): { getLastEventId?(): string | undefined } | undefined;\n}\n\ninterface SentryReplayIntegration {\n getReplayId?(): string | undefined;\n}\n\nfunction getSentryGlobal(): SentryHub | undefined {\n try {\n const win = globalThis as Record<string, unknown>;\n if (win.__SENTRY__) {\n const sentry = win.__SENTRY__ as Record<string, unknown>;\n const hub = sentry.hub as SentryHub | undefined;\n return hub;\n }\n\n if (win.Sentry) {\n return win.Sentry as SentryHub;\n }\n } catch {\n // Sentry not available\n }\n return undefined;\n}\n\nexport function captureSentryContext(_config: MushiSentryConfig): SentryContext {\n const context: SentryContext = {};\n\n try {\n const hub = getSentryGlobal();\n if (!hub) return context;\n\n const scope = hub.getScope?.();\n if (scope) {\n context.eventId = scope.getLastEventId?.() ?? undefined;\n }\n\n const client = hub.getClient?.();\n if (client) {\n const options = client.getOptions?.();\n context.release = options?.release;\n context.environment = options?.environment;\n }\n\n const win = globalThis as Record<string, unknown>;\n if (win.__SENTRY_REPLAY__) {\n const replay = win.__SENTRY_REPLAY__ as SentryReplayIntegration;\n context.replayId = replay.getReplayId?.() ?? undefined;\n }\n } catch {\n // Sentry access failed silently\n }\n\n return context;\n}\n\nexport interface SentryFeedbackInterceptor {\n start(): void;\n stop(): void;\n}\n\nexport function createSentryFeedbackInterceptor(\n _config: MushiSentryConfig,\n onFeedback: (feedback: { eventId?: string; message: string; email?: string; name?: string }) => void,\n): SentryFeedbackInterceptor {\n let observer: MutationObserver | null = null;\n\n function start() {\n if (typeof MutationObserver === 'undefined') return;\n\n observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof HTMLElement && node.getAttribute('data-sentry-feedback')) {\n interceptFeedbackForm(node);\n }\n }\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n }\n\n function interceptFeedbackForm(container: HTMLElement) {\n const form = container.querySelector('form');\n if (!form) return;\n\n form.addEventListener('submit', () => {\n const formData = new FormData(form);\n onFeedback({\n message: formData.get('message') as string ?? '',\n email: formData.get('email') as string ?? undefined,\n name: formData.get('name') as string ?? undefined,\n });\n });\n }\n\n function stop() {\n observer?.disconnect();\n observer = null;\n }\n\n return { start, stop };\n}\n","export interface ProactiveTriggerConfig {\n rageClick?: boolean\n longTask?: boolean\n apiCascade?: boolean\n errorBoundary?: boolean\n}\n\nexport interface ProactiveTriggerCallbacks {\n onTrigger: (type: string, context: Record<string, unknown>) => void\n}\n\nexport interface ProactiveTriggerCleanup {\n destroy: () => void\n}\n\nexport function setupProactiveTriggers(\n callbacks: ProactiveTriggerCallbacks,\n config: ProactiveTriggerConfig = {},\n): ProactiveTriggerCleanup {\n const cleanups: Array<() => void> = []\n\n // --- Rage Click Detection ---\n if (config.rageClick !== false) {\n let clickTimes: number[] = []\n let lastClickTarget: EventTarget | null = null\n\n function handleClick(e: MouseEvent) {\n const now = Date.now()\n if (e.target === lastClickTarget) {\n clickTimes.push(now)\n clickTimes = clickTimes.filter(t => now - t < 500)\n if (clickTimes.length >= 3) {\n const el = e.target as HTMLElement\n callbacks.onTrigger('rage_click', {\n element: el.tagName,\n id: el.id,\n text: el.textContent?.slice(0, 50),\n })\n clickTimes = []\n }\n } else {\n lastClickTarget = e.target\n clickTimes = [now]\n }\n }\n document.addEventListener('click', handleClick, true)\n cleanups.push(() => document.removeEventListener('click', handleClick, true))\n }\n\n // --- Long Task Detection ---\n if (config.longTask !== false && typeof PerformanceObserver !== 'undefined') {\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.duration > 5000) {\n callbacks.onTrigger('long_task', {\n duration: Math.round(entry.duration),\n startTime: Math.round(entry.startTime),\n })\n }\n }\n })\n observer.observe({ entryTypes: ['longtask'] })\n cleanups.push(() => observer.disconnect())\n } catch {\n // longtask not supported\n }\n }\n\n // --- API Cascade Failure ---\n if (config.apiCascade !== false) {\n const failedRequests: number[] = []\n const origFetch = globalThis.fetch\n\n globalThis.fetch = async function (this: unknown, ...args: Parameters<typeof fetch>) {\n try {\n const res = await origFetch.apply(this, args)\n if (!res.ok && res.status >= 400) {\n const now = Date.now()\n failedRequests.push(now)\n const recentFailures = failedRequests.filter(t => now - t < 10000)\n if (recentFailures.length >= 3) {\n callbacks.onTrigger('api_cascade', {\n failureCount: recentFailures.length,\n windowMs: 10000,\n })\n failedRequests.length = 0\n }\n }\n return res\n } catch (err) {\n const now = Date.now()\n failedRequests.push(now)\n const recentFailures = failedRequests.filter(t => now - t < 10000)\n if (recentFailures.length >= 3) {\n callbacks.onTrigger('api_cascade', {\n failureCount: recentFailures.length,\n windowMs: 10000,\n })\n failedRequests.length = 0\n }\n throw err\n }\n } as typeof fetch\n\n cleanups.push(() => { globalThis.fetch = origFetch })\n }\n\n // --- Global Error Boundary ---\n if (config.errorBoundary) {\n function handleError(event: ErrorEvent) {\n callbacks.onTrigger('error_boundary', {\n message: event.message,\n filename: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n })\n }\n function handleUnhandledRejection(event: PromiseRejectionEvent) {\n callbacks.onTrigger('error_boundary', {\n message: event.reason instanceof Error ? event.reason.message : String(event.reason),\n type: 'unhandled_rejection',\n })\n }\n window.addEventListener('error', handleError)\n window.addEventListener('unhandledrejection', handleUnhandledRejection)\n cleanups.push(() => {\n window.removeEventListener('error', handleError)\n window.removeEventListener('unhandledrejection', handleUnhandledRejection)\n })\n }\n\n return {\n destroy() {\n cleanups.forEach(fn => fn())\n },\n }\n}\n","export interface ProactiveConfig {\n maxProactivePerSession: number\n dismissCooldownHours: number\n suppressAfterDismissals: number\n}\n\nexport interface ProactiveManager {\n shouldShow(triggerType: string): boolean\n recordDismissal(): void\n recordSubmission(): void\n reset(): void\n}\n\nconst STORAGE_KEY_LAST_DISMISS = 'mushi:lastDismiss'\nconst STORAGE_KEY_CONSEC_DISMISS = 'mushi:consecDismiss'\n\nfunction readStorage(key: string): string | null {\n try { return localStorage.getItem(key) } catch { return null }\n}\n\nfunction writeStorage(key: string, value: string): void {\n try { localStorage.setItem(key, value) } catch { /* noop */ }\n}\n\nexport function createProactiveManager(\n config: Partial<ProactiveConfig> = {},\n): ProactiveManager {\n const maxPerSession = config.maxProactivePerSession ?? 2\n const cooldownHours = config.dismissCooldownHours ?? 24\n const suppressThreshold = config.suppressAfterDismissals ?? 3\n\n let sessionPromptCount = 0\n const sessionTriggerTypes = new Set<string>()\n\n function shouldShow(triggerType: string): boolean {\n // Permanent suppression check\n const consecDismissals = parseInt(readStorage(STORAGE_KEY_CONSEC_DISMISS) ?? '0', 10)\n if (consecDismissals >= suppressThreshold) return false\n\n // Cooldown check\n const lastDismiss = readStorage(STORAGE_KEY_LAST_DISMISS)\n if (lastDismiss) {\n const elapsed = Date.now() - parseInt(lastDismiss, 10)\n if (elapsed < cooldownHours * 60 * 60 * 1000) return false\n }\n\n // Session limit\n if (sessionPromptCount >= maxPerSession) return false\n\n // Dedup: same trigger type not shown twice per session\n if (sessionTriggerTypes.has(triggerType)) return false\n\n sessionTriggerTypes.add(triggerType)\n sessionPromptCount++\n return true\n }\n\n function recordDismissal(): void {\n writeStorage(STORAGE_KEY_LAST_DISMISS, String(Date.now()))\n const current = parseInt(readStorage(STORAGE_KEY_CONSEC_DISMISS) ?? '0', 10)\n writeStorage(STORAGE_KEY_CONSEC_DISMISS, String(current + 1))\n }\n\n function recordSubmission(): void {\n writeStorage(STORAGE_KEY_CONSEC_DISMISS, '0')\n }\n\n function reset(): void {\n sessionPromptCount = 0\n sessionTriggerTypes.clear()\n }\n\n return { shouldShow, recordDismissal, recordSubmission, reset }\n}\n","import {\n type MushiConfig,\n type MushiReport,\n type MushiReportCategory,\n type MushiEventType,\n type MushiEventHandler,\n type MushiSDKInstance,\n createApiClient,\n createPreFilter,\n createOfflineQueue,\n captureEnvironment,\n getReporterToken,\n getDeviceFingerprintHash,\n getSessionId,\n createRateLimiter,\n createPiiScrubber,\n createLogger,\n noopLogger,\n} from '@mushi-mushi/core';\n\nimport { MushiWidget } from './widget';\nimport {\n createConsoleCapture,\n createNetworkCapture,\n createScreenshotCapture,\n createPerformanceCapture,\n createElementSelector,\n} from './capture';\nimport { captureSentryContext } from './sentry';\nimport { setupProactiveTriggers, type ProactiveTriggerCleanup } from './proactive-triggers';\nimport { createProactiveManager, type ProactiveManager } from './proactive-manager';\n\nlet instance: MushiSDKInstance | null = null;\n\nexport class Mushi {\n private constructor() {}\n\n static init(config: MushiConfig): MushiSDKInstance {\n if (instance) {\n createLogger({ scope: 'mushi', level: 'warn', format: 'pretty' })\n .warn('Already initialized — call destroy() first to reinitialize');\n return instance;\n }\n\n if (!config.projectId) {\n throw new Error('[mushi] projectId is required');\n }\n\n if (!config.apiKey) {\n throw new Error('[mushi] apiKey is required');\n }\n\n if (config.enabled === false) {\n return createNoopInstance();\n }\n\n instance = createInstance(config);\n return instance;\n }\n\n static getInstance(): MushiSDKInstance | null {\n return instance;\n }\n\n static destroy(): void {\n instance?.destroy();\n instance = null;\n }\n}\n\nfunction createInstance(config: MushiConfig): MushiSDKInstance {\n const log = (config.debug ?? false)\n ? createLogger({ scope: 'mushi', level: 'debug', format: 'pretty' })\n : noopLogger;\n\n const apiClient = createApiClient({\n projectId: config.projectId,\n apiKey: config.apiKey,\n ...(config.apiEndpoint ? { apiEndpoint: config.apiEndpoint } : {}),\n });\n\n const preFilter = createPreFilter(config.preFilter);\n const offlineQueue = createOfflineQueue(config.offline);\n const rateLimiter = createRateLimiter({ maxBurst: 10, refillRate: 1, refillIntervalMs: 5_000 });\n const piiScrubber = createPiiScrubber();\n const consoleCap = config.capture?.console !== false ? createConsoleCapture() : null;\n const networkCap = config.capture?.network !== false ? createNetworkCapture() : null;\n const perfCap = config.capture?.performance !== false ? createPerformanceCapture() : null;\n const screenshotCap = config.capture?.screenshot !== 'off' ? createScreenshotCapture() : null;\n const elementSelector = config.capture?.elementSelector !== false ? createElementSelector() : null;\n\n const listeners = new Map<MushiEventType, Set<MushiEventHandler>>();\n function emit(type: MushiEventType, data?: unknown) {\n listeners.get(type)?.forEach((handler) => handler({ type, data }));\n }\n\n let userInfo: { id: string; email?: string; name?: string } | null = null;\n const customMetadata: Record<string, unknown> = {};\n let pendingScreenshot: string | null = null;\n let pendingElement: { tagName: string; id?: string; className?: string; xpath?: string } | null = null;\n let pendingProactiveTrigger: string | null = null;\n\n const widget = new MushiWidget(config.widget, {\n onSubmit: async ({ category, description, intent }) => {\n log.info('Report submitted', { category, intent });\n proactiveManager?.recordSubmission();\n await submitReport(category, description, intent);\n },\n onOpen: () => {\n log.debug('Widget opened');\n emit('widget:opened');\n },\n onClose: () => {\n log.debug('Widget closed');\n if (pendingProactiveTrigger) {\n proactiveManager?.recordDismissal();\n emit('proactive:dismissed', { type: pendingProactiveTrigger });\n }\n pendingScreenshot = null;\n pendingElement = null;\n pendingProactiveTrigger = null;\n emit('widget:closed');\n },\n onScreenshotRequest: async () => {\n if (!screenshotCap) return;\n log.debug('Taking screenshot');\n pendingScreenshot = await screenshotCap.take();\n widget.setScreenshotAttached(pendingScreenshot !== null);\n },\n onElementSelectorRequest: async () => {\n if (!elementSelector) return;\n log.debug('Element selector activated');\n const el = await elementSelector.activate();\n if (el) {\n pendingElement = el;\n widget.setElementSelected(true);\n log.debug('Element selected', { tagName: el.tagName, xpath: el.xpath });\n }\n },\n });\n\n if (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => widget.mount());\n } else {\n widget.mount();\n }\n }\n\n // --- Proactive triggers + fatigue prevention ---\n let proactiveTriggers: ProactiveTriggerCleanup | null = null;\n let proactiveManager: ProactiveManager | null = null;\n\n const proactiveCfg = config.proactive;\n const hasAnyProactive = proactiveCfg\n && (proactiveCfg.rageClick !== false\n || proactiveCfg.longTask !== false\n || proactiveCfg.apiCascade !== false\n || proactiveCfg.errorBoundary === true);\n\n if (hasAnyProactive && typeof document !== 'undefined') {\n proactiveManager = createProactiveManager(proactiveCfg?.cooldown);\n\n proactiveTriggers = setupProactiveTriggers(\n {\n onTrigger: (type, context) => {\n if (!proactiveManager!.shouldShow(type)) {\n log.debug('Proactive trigger suppressed by fatigue prevention', { type });\n return;\n }\n log.info('Proactive trigger fired', { type, context });\n pendingProactiveTrigger = type;\n emit('proactive:triggered', { type, context });\n widget.open();\n },\n },\n {\n rageClick: proactiveCfg?.rageClick,\n longTask: proactiveCfg?.longTask,\n apiCascade: proactiveCfg?.apiCascade,\n errorBoundary: proactiveCfg?.errorBoundary,\n },\n );\n\n log.debug('Proactive triggers enabled', {\n rageClick: proactiveCfg?.rageClick !== false,\n longTask: proactiveCfg?.longTask !== false,\n apiCascade: proactiveCfg?.apiCascade !== false,\n errorBoundary: proactiveCfg?.errorBoundary === true,\n });\n }\n\n offlineQueue.startAutoSync(apiClient);\n offlineQueue.flush(apiClient).then((result) => {\n if (result.sent > 0) log.info('Synced offline reports', { sent: result.sent });\n });\n\n log.info('Initialized', { projectId: config.projectId });\n\n async function submitReport(category: MushiReportCategory, description: string, intent?: string) {\n const filterResult = preFilter.check(description);\n if (!filterResult.passed) {\n log.info('Report blocked by pre-filter', { reason: filterResult.reason });\n return;\n }\n\n const wasm = config.preFilter?.wasmClassifier;\n if (wasm) {\n try {\n const verdict = await wasm.classify({\n description,\n category,\n url: typeof location !== 'undefined' ? location.href : undefined,\n hasScreenshot: pendingScreenshot !== null,\n hasSelectedElement: pendingElement !== null,\n hasNetworkErrors: networkCap?.getEntries()?.some((e) => e.status >= 400 || !!e.error) ?? false,\n hasConsoleErrors: consoleCap?.getEntries()?.some((e) => e.level === 'error') ?? false,\n proactiveTrigger: pendingProactiveTrigger ?? undefined,\n });\n if (verdict.verdict === 'block') {\n log.info('Report blocked by on-device classifier', {\n modelId: verdict.modelId,\n confidence: verdict.confidence,\n reason: verdict.reason,\n });\n return;\n }\n log.debug('On-device classifier verdict', { ...verdict });\n } catch (err) {\n log.warn('On-device classifier threw — falling through to server', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n if (!rateLimiter.tryConsume()) {\n log.warn('Report throttled — rate limit exceeded');\n return;\n }\n\n const scrubbedDescription = piiScrubber.scrub(preFilter.truncate(description));\n\n const sentryCtx = config.sentry ? captureSentryContext(config.sentry) : undefined;\n const fingerprintHash = await getDeviceFingerprintHash().catch(() => null);\n\n const report: MushiReport = {\n id: crypto.randomUUID?.() ?? `mushi_${Date.now()}_${Math.random().toString(36).slice(2)}`,\n projectId: config.projectId,\n category,\n description: scrubbedDescription,\n userIntent: intent,\n environment: captureEnvironment(),\n consoleLogs: consoleCap?.getEntries(),\n networkLogs: networkCap?.getEntries(),\n performanceMetrics: perfCap?.getMetrics(),\n screenshotDataUrl: pendingScreenshot ?? undefined,\n selectedElement: pendingElement ?? undefined,\n metadata: {\n ...customMetadata,\n ...(userInfo ? { user: userInfo } : {}),\n ...(sentryCtx?.release ? { sentryRelease: sentryCtx.release } : {}),\n },\n sessionId: getSessionId(),\n reporterToken: getReporterToken(),\n ...(fingerprintHash ? { fingerprintHash } : {}),\n appVersion: config.integrations?.vercel?.analyticsId,\n proactiveTrigger: pendingProactiveTrigger ?? undefined,\n sentryEventId: sentryCtx?.eventId,\n sentryReplayId: sentryCtx?.replayId,\n createdAt: new Date().toISOString(),\n };\n\n if (config.integrations?.custom) {\n const builder = {\n addMetadata(key: string, value: unknown) {\n (report.metadata as Record<string, unknown>)[key] = value;\n },\n setCategory(cat: MushiReportCategory) {\n report.category = cat;\n },\n setDescription(desc: string) {\n report.description = desc;\n },\n };\n config.integrations.custom(builder);\n }\n\n emit('report:submitted', { reportId: report.id });\n\n if (typeof navigator !== 'undefined' && !navigator.onLine) {\n await offlineQueue.enqueue(report);\n log.info('Offline — report queued', { reportId: report.id });\n emit('report:queued', { reportId: report.id });\n return;\n }\n\n const result = await apiClient.submitReport(report);\n if (result.ok) {\n log.info('Report sent', { reportId: result.data?.reportId });\n emit('report:sent', { reportId: result.data?.reportId });\n } else {\n log.warn('Report failed, queuing for retry', { reportId: report.id, error: result.error });\n await offlineQueue.enqueue(report);\n emit('report:failed', { reportId: report.id, error: result.error });\n }\n\n pendingScreenshot = null;\n pendingElement = null;\n pendingProactiveTrigger = null;\n }\n\n const sdk: MushiSDKInstance = {\n report(options) {\n widget.open(options);\n },\n\n on(event: MushiEventType, handler: MushiEventHandler) {\n if (!listeners.has(event)) listeners.set(event, new Set());\n listeners.get(event)!.add(handler);\n return () => listeners.get(event)?.delete(handler);\n },\n\n setUser(user) {\n userInfo = user;\n },\n\n setMetadata(key, value) {\n customMetadata[key] = value;\n },\n\n isOpen() {\n return widget.getIsOpen();\n },\n\n open() {\n widget.open();\n },\n\n close() {\n widget.close();\n },\n\n destroy() {\n proactiveTriggers?.destroy();\n proactiveManager?.reset();\n widget.destroy();\n consoleCap?.destroy();\n networkCap?.destroy();\n perfCap?.destroy();\n elementSelector?.deactivate();\n offlineQueue.stopAutoSync();\n listeners.clear();\n instance = null;\n log.debug('Destroyed');\n },\n };\n\n return sdk;\n}\n\nfunction createNoopInstance(): MushiSDKInstance {\n return {\n report: () => {},\n on: () => () => {},\n setUser: () => {},\n setMetadata: () => {},\n isOpen: () => false,\n open: () => {},\n close: () => {},\n destroy: () => {\n instance = null;\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/i18n/en.ts","../src/i18n/ja.ts","../src/i18n/th.ts","../src/i18n/es.ts","../src/i18n/index.ts","../src/styles.ts","../src/widget.ts","../src/capture/console.ts","../src/capture/network.ts","../src/capture/screenshot.ts","../src/capture/performance.ts","../src/capture/element-selector.ts","../src/sentry.ts","../src/proactive-triggers.ts","../src/proactive-manager.ts","../src/mushi.ts"],"names":["MAX_ENTRIES","handleClick","handleError","handleUnhandledRejection"],"mappings":"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","file":"index.js","sourcesContent":["import type { MushiLocale } from './types';\n\nexport const en: MushiLocale = {\n widget: {\n trigger: 'Report Issue',\n title: 'Report an Issue',\n close: 'Close',\n back: 'Back',\n submit: 'Submit',\n submitting: 'Submitting…',\n submitted: 'Thank you! Your report has been submitted.',\n error: 'Something went wrong. Please try again.',\n },\n step1: {\n heading: 'What kind of issue?',\n categories: {\n bug: 'Bug',\n slow: 'Slow / Laggy',\n visual: 'Visual Glitch',\n confusing: 'Confusing',\n other: 'Other',\n },\n categoryDescriptions: {\n bug: 'Something is broken or not working',\n slow: 'Performance issue or slow loading',\n visual: 'Layout, styling, or display problem',\n confusing: 'Hard to understand or navigate',\n other: 'Something else',\n },\n },\n step2: {\n heading: 'What happened?',\n intents: {\n bug: ['Crash', 'Unresponsive', 'Data loss', 'Wrong result', 'Other'],\n slow: ['Page load', 'Interaction', 'API call', 'Animation', 'Other'],\n visual: ['Layout broken', 'Overlapping', 'Missing element', 'Wrong color/font', 'Other'],\n confusing: ['Unclear label', 'Missing help', 'Unexpected flow', 'Lost navigation', 'Other'],\n other: ['Feature request', 'Accessibility', 'Typo', 'Other'],\n },\n },\n step3: {\n heading: 'Tell us more',\n descriptionPlaceholder: 'Describe what happened…',\n screenshotButton: 'Attach Screenshot',\n screenshotAttached: 'Screenshot attached',\n elementButton: 'Select Element',\n elementSelected: 'Element selected',\n optional: '(optional)',\n },\n};\n","import type { MushiLocale } from './types';\n\nexport const ja: MushiLocale = {\n widget: {\n trigger: '問題を報告',\n title: '問題を報告する',\n close: '閉じる',\n back: '戻る',\n submit: '送信',\n submitting: '送信中…',\n submitted: 'ありがとうございます!レポートが送信されました。',\n error: 'エラーが発生しました。もう一度お試しください。',\n },\n step1: {\n heading: 'どのような問題ですか?',\n categories: {\n bug: 'バグ',\n slow: '遅い・重い',\n visual: '表示の問題',\n confusing: 'わかりにくい',\n other: 'その他',\n },\n categoryDescriptions: {\n bug: '動作しない、壊れている',\n slow: 'パフォーマンスが悪い、読み込みが遅い',\n visual: 'レイアウト、デザイン、表示の問題',\n confusing: '理解しにくい、操作がわかりにくい',\n other: 'その他の問題',\n },\n },\n step2: {\n heading: '何が起きましたか?',\n intents: {\n bug: ['クラッシュ', '無反応', 'データ消失', '誤った結果', 'その他'],\n slow: ['ページ読込', '操作反応', 'API通信', 'アニメーション', 'その他'],\n visual: ['レイアウト崩れ', '要素の重なり', '要素が表示されない', '色/フォントが違う', 'その他'],\n confusing: ['ラベルが不明瞭', 'ヘルプがない', '予想外のフロー', 'ナビゲーション迷子', 'その他'],\n other: ['機能要望', 'アクセシビリティ', '誤字脱字', 'その他'],\n },\n },\n step3: {\n heading: '詳細を教えてください',\n descriptionPlaceholder: '何が起きたか説明してください…',\n screenshotButton: 'スクリーンショット添付',\n screenshotAttached: 'スクリーンショット添付済み',\n elementButton: '要素を選択',\n elementSelected: '要素選択済み',\n optional: '(任意)',\n },\n};\n","import type { MushiLocale } from './types';\n\nexport const th: MushiLocale = {\n widget: {\n trigger: 'รายงานปัญหา',\n title: 'รายงานปัญหา',\n close: 'ปิด',\n back: 'กลับ',\n submit: 'ส่ง',\n submitting: 'กำลังส่ง…',\n submitted: 'ขอบคุณครับ/ค่ะ! รายงานของคุณถูกส่งแล้ว',\n error: 'เกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้ง',\n },\n step1: {\n heading: 'ปัญหาประเภทไหน?',\n categories: {\n bug: 'บัก',\n slow: 'ช้า / แลค',\n visual: 'แสดงผลผิดปกติ',\n confusing: 'สับสน',\n other: 'อื่นๆ',\n },\n categoryDescriptions: {\n bug: 'มีบางอย่างเสียหรือทำงานไม่ถูกต้อง',\n slow: 'ปัญหาประสิทธิภาพหรือโหลดช้า',\n visual: 'ปัญหาเลย์เอาต์ สไตล์ หรือการแสดงผล',\n confusing: 'เข้าใจยากหรือนำทางยาก',\n other: 'อย่างอื่น',\n },\n },\n step2: {\n heading: 'เกิดอะไรขึ้น?',\n intents: {\n bug: ['แครช', 'ไม่ตอบสนอง', 'ข้อมูลหาย', 'ผลลัพธ์ผิด', 'อื่นๆ'],\n slow: ['โหลดหน้า', 'การโต้ตอบ', 'API', 'แอนิเมชัน', 'อื่นๆ'],\n visual: ['เลย์เอาต์เสีย', 'ซ้อนทับ', 'องค์ประกอบหาย', 'สี/ฟอนต์ผิด', 'อื่นๆ'],\n confusing: ['ป้ายไม่ชัด', 'ไม่มีคำแนะนำ', 'ขั้นตอนไม่คาดคิด', 'หลงทาง', 'อื่นๆ'],\n other: ['ขอฟีเจอร์', 'การเข้าถึง', 'พิมพ์ผิด', 'อื่นๆ'],\n },\n },\n step3: {\n heading: 'บอกเราเพิ่มเติม',\n descriptionPlaceholder: 'อธิบายสิ่งที่เกิดขึ้น…',\n screenshotButton: 'แนบสกรีนช็อต',\n screenshotAttached: 'แนบสกรีนช็อตแล้ว',\n elementButton: 'เลือกองค์ประกอบ',\n elementSelected: 'เลือกองค์ประกอบแล้ว',\n optional: '(ไม่บังคับ)',\n },\n};\n","import type { MushiLocale } from './types';\n\nexport const es: MushiLocale = {\n widget: {\n trigger: 'Reportar problema',\n title: 'Reportar un problema',\n close: 'Cerrar',\n back: 'Volver',\n submit: 'Enviar',\n submitting: 'Enviando…',\n submitted: '¡Gracias! Tu reporte ha sido enviado.',\n error: 'Algo salió mal. Por favor, inténtalo de nuevo.',\n },\n step1: {\n heading: '¿Qué tipo de problema?',\n categories: {\n bug: 'Error',\n slow: 'Lento',\n visual: 'Problema visual',\n confusing: 'Confuso',\n other: 'Otro',\n },\n categoryDescriptions: {\n bug: 'Algo está roto o no funciona',\n slow: 'Problema de rendimiento o carga lenta',\n visual: 'Problema de diseño, estilo o visualización',\n confusing: 'Difícil de entender o navegar',\n other: 'Otro problema',\n },\n },\n step2: {\n heading: '¿Qué pasó?',\n intents: {\n bug: ['Crash', 'Sin respuesta', 'Pérdida de datos', 'Resultado incorrecto', 'Otro'],\n slow: ['Carga de página', 'Interacción', 'Llamada API', 'Animación', 'Otro'],\n visual: ['Layout roto', 'Superposición', 'Elemento faltante', 'Color/fuente incorrecta', 'Otro'],\n confusing: ['Etiqueta confusa', 'Sin ayuda', 'Flujo inesperado', 'Navegación perdida', 'Otro'],\n other: ['Solicitud de función', 'Accesibilidad', 'Error tipográfico', 'Otro'],\n },\n },\n step3: {\n heading: 'Cuéntanos más',\n descriptionPlaceholder: 'Describe lo que pasó…',\n screenshotButton: 'Adjuntar captura',\n screenshotAttached: 'Captura adjunta',\n elementButton: 'Seleccionar elemento',\n elementSelected: 'Elemento seleccionado',\n optional: '(opcional)',\n },\n};\n","import type { MushiLocale } from './types';\nimport { en } from './en';\nimport { ja } from './ja';\nimport { th } from './th';\nimport { es } from './es';\n\nexport type { MushiLocale } from './types';\n\nconst locales: Record<string, MushiLocale> = { en, ja, th, es };\n\nexport function getLocale(code?: string): MushiLocale {\n if (!code) return en;\n const base = code.split('-')[0].toLowerCase();\n return locales[base] ?? en;\n}\n\nexport function getAvailableLocales(): string[] {\n return Object.keys(locales);\n}\n","export function getWidgetStyles(theme: 'light' | 'dark'): string {\n const isDark = theme === 'dark';\n const accent = '#7c3aed';\n const accentHover = '#6d28d9';\n const accentBgLight = isDark ? '#2e2440' : '#f5f3ff';\n const accentBgSelected = isDark ? '#2e2440' : '#ede9fe';\n const border = isDark ? '#3f3f46' : '#e4e4e7';\n const bgSurface = isDark ? '#18181b' : '#ffffff';\n const bgMuted = isDark ? '#27272a' : '#fafafa';\n const textMuted = isDark ? '#a1a1aa' : '#71717a';\n\n return `\n :host {\n all: initial;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: ${isDark ? '#e4e4e7' : '#18181b'};\n }\n\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n /* Trigger button */\n .mushi-trigger {\n position: fixed;\n width: 48px;\n height: 48px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 22px;\n background: ${bgMuted};\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n }\n .mushi-trigger:hover {\n transform: scale(1.08);\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);\n }\n .mushi-trigger.bottom-right { bottom: 20px; right: 20px; }\n .mushi-trigger.bottom-left { bottom: 20px; left: 20px; }\n .mushi-trigger.top-right { top: 20px; right: 20px; }\n .mushi-trigger.top-left { top: 20px; left: 20px; }\n\n /* Panel */\n .mushi-panel {\n position: fixed;\n width: 380px;\n max-height: 560px;\n border-radius: 12px;\n background: ${bgSurface};\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18);\n border: 1px solid ${border};\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .mushi-panel.open {\n animation: mushi-slide-in 0.25s ease forwards;\n }\n .mushi-panel.closed { display: none; }\n .mushi-panel.bottom-right { bottom: 76px; right: 20px; }\n .mushi-panel.bottom-left { bottom: 76px; left: 20px; }\n .mushi-panel.top-right { top: 76px; right: 20px; }\n .mushi-panel.top-left { top: 76px; left: 20px; }\n\n @keyframes mushi-slide-in {\n from { opacity: 0; transform: translateY(8px) scale(0.98); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n\n /* Header */\n .mushi-header {\n padding: 14px 16px;\n border-bottom: 1px solid ${border};\n display: flex;\n align-items: center;\n gap: 8px;\n }\n .mushi-header h3 {\n font-size: 15px;\n font-weight: 600;\n flex: 1;\n }\n .mushi-close, .mushi-back {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 18px;\n color: ${textMuted};\n padding: 4px;\n border-radius: 4px;\n line-height: 1;\n }\n .mushi-close:hover, .mushi-back:hover {\n background: ${bgMuted};\n }\n\n /* Body */\n .mushi-body {\n padding: 12px 16px;\n overflow-y: auto;\n flex: 1;\n }\n\n /* Step 1: Category options */\n .mushi-option-btn {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n padding: 12px 14px;\n margin-bottom: 8px;\n border-radius: 10px;\n border: 1px solid ${border};\n background: ${bgMuted};\n cursor: pointer;\n font-size: 14px;\n color: inherit;\n text-align: left;\n transition: border-color 0.15s, background 0.15s, transform 0.1s;\n }\n .mushi-option-btn:hover {\n border-color: ${isDark ? '#a78bfa' : accent};\n background: ${accentBgLight};\n transform: translateX(2px);\n }\n .mushi-option-btn:focus-visible {\n outline: 2px solid ${accent};\n outline-offset: 2px;\n }\n .mushi-option-icon { font-size: 20px; flex-shrink: 0; }\n .mushi-option-text { display: flex; flex-direction: column; gap: 2px; }\n .mushi-option-label { font-weight: 500; }\n .mushi-option-desc { font-size: 12px; color: ${textMuted}; }\n\n /* Step 2: Intent chips */\n .mushi-selected-category {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 8px;\n background: ${accentBgSelected};\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n }\n .mushi-intents {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n .mushi-intent-btn {\n padding: 8px 16px;\n border-radius: 20px;\n border: 1px solid ${border};\n background: ${bgMuted};\n cursor: pointer;\n font-size: 13px;\n color: inherit;\n transition: border-color 0.15s, background 0.15s;\n }\n .mushi-intent-btn:hover {\n border-color: ${isDark ? '#a78bfa' : accent};\n background: ${accentBgLight};\n }\n .mushi-intent-btn:focus-visible {\n outline: 2px solid ${accent};\n outline-offset: 2px;\n }\n\n /* Step 3: Details */\n .mushi-textarea {\n width: 100%;\n min-height: 90px;\n padding: 10px 12px;\n border-radius: 8px;\n border: 1px solid ${border};\n background: ${bgMuted};\n color: inherit;\n font-family: inherit;\n font-size: 14px;\n resize: vertical;\n outline: none;\n transition: border-color 0.15s, box-shadow 0.15s;\n }\n .mushi-textarea:focus {\n border-color: ${isDark ? '#a78bfa' : accent};\n box-shadow: 0 0 0 2px ${isDark ? 'rgba(167,139,250,0.2)' : 'rgba(124,58,237,0.1)'};\n }\n\n .mushi-attachments {\n display: flex;\n gap: 8px;\n margin-top: 10px;\n }\n .mushi-attach-btn {\n padding: 6px 12px;\n border-radius: 6px;\n border: 1px solid ${border};\n background: none;\n cursor: pointer;\n font-size: 12px;\n color: ${textMuted};\n transition: border-color 0.15s, color 0.15s;\n }\n .mushi-attach-btn:hover {\n border-color: ${isDark ? '#a78bfa' : accent};\n color: inherit;\n }\n .mushi-attach-btn.active {\n border-color: ${isDark ? '#a78bfa' : accent};\n color: ${isDark ? '#a78bfa' : accent};\n background: ${accentBgLight};\n }\n\n /* Footer */\n .mushi-footer {\n padding: 12px 16px;\n border-top: 1px solid ${border};\n display: flex;\n align-items: center;\n justify-content: flex-end;\n }\n .mushi-submit {\n padding: 8px 24px;\n border-radius: 8px;\n border: none;\n background: ${accent};\n color: #ffffff;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s;\n }\n .mushi-submit:hover { background: ${accentHover}; }\n .mushi-submit:disabled { opacity: 0.5; cursor: not-allowed; }\n .mushi-submit:focus-visible {\n outline: 2px solid ${accent};\n outline-offset: 2px;\n }\n\n /* Step indicator dots */\n .mushi-step-indicator {\n display: flex;\n justify-content: center;\n gap: 6px;\n padding: 10px;\n }\n .mushi-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: ${border};\n transition: background 0.2s, transform 0.2s;\n }\n .mushi-dot.active {\n background: ${accent};\n transform: scale(1.3);\n }\n .mushi-dot.done {\n background: ${isDark ? '#a78bfa' : '#8b5cf6'};\n }\n\n /* Success */\n .mushi-success {\n text-align: center;\n padding: 32px 16px;\n }\n .mushi-success-icon {\n font-size: 40px;\n margin-bottom: 12px;\n }\n .mushi-success p {\n color: ${textMuted};\n font-size: 14px;\n }\n\n /* Error */\n .mushi-error {\n color: #ef4444;\n font-size: 12px;\n margin-top: 8px;\n }\n `;\n}\n","import type { MushiReportCategory, MushiWidgetConfig } from '@mushi-mushi/core';\nimport { getLocale, type MushiLocale } from './i18n';\nimport { getWidgetStyles } from './styles';\n\ntype WidgetStep = 'category' | 'intent' | 'details' | 'success';\n\nconst CATEGORY_ICONS: Record<MushiReportCategory, string> = {\n bug: '\\u26A0\\uFE0F',\n slow: '\\uD83D\\uDC0C',\n visual: '\\uD83C\\uDFA8',\n confusing: '\\uD83D\\uDE15',\n other: '\\uD83D\\uDCDD',\n};\n\nexport interface WidgetCallbacks {\n onSubmit(data: { category: MushiReportCategory; description: string; intent?: string }): void;\n onOpen(): void;\n onClose(): void;\n onScreenshotRequest(): void;\n onElementSelectorRequest?(): void;\n}\n\nexport class MushiWidget {\n private host: HTMLElement;\n private shadow: ShadowRoot;\n private config: Required<MushiWidgetConfig>;\n private callbacks: WidgetCallbacks;\n private locale: MushiLocale;\n private isOpen = false;\n private step: WidgetStep = 'category';\n private selectedCategory: MushiReportCategory | null = null;\n private selectedIntent: string | null = null;\n private screenshotAttached = false;\n private elementSelected = false;\n private submitting = false;\n\n constructor(config: MushiWidgetConfig = {}, callbacks: WidgetCallbacks) {\n this.config = {\n position: config.position ?? 'bottom-right',\n theme: config.theme ?? 'auto',\n triggerText: config.triggerText ?? '\\uD83D\\uDC1B',\n expandedTitle: config.expandedTitle ?? '',\n mode: config.mode ?? 'conversational',\n locale: config.locale ?? 'auto',\n zIndex: config.zIndex ?? 99999,\n };\n this.callbacks = callbacks;\n this.locale = getLocale(this.config.locale === 'auto' ? undefined : this.config.locale);\n\n this.host = document.createElement('div');\n this.host.id = 'mushi-mushi-widget';\n this.shadow = this.host.attachShadow({ mode: 'closed' });\n }\n\n mount(): void {\n document.body.appendChild(this.host);\n this.render();\n }\n\n open(options?: { category?: MushiReportCategory }): void {\n if (this.isOpen) return;\n this.isOpen = true;\n this.screenshotAttached = false;\n this.elementSelected = false;\n this.submitting = false;\n\n if (options?.category) {\n this.selectedCategory = options.category;\n this.selectedIntent = null;\n this.step = 'intent';\n } else {\n this.selectedCategory = null;\n this.selectedIntent = null;\n this.step = 'category';\n }\n\n this.render();\n this.callbacks.onOpen();\n }\n\n close(): void {\n if (!this.isOpen) return;\n this.isOpen = false;\n this.render();\n this.callbacks.onClose();\n }\n\n getIsOpen(): boolean {\n return this.isOpen;\n }\n\n setScreenshotAttached(attached: boolean): void {\n this.screenshotAttached = attached;\n if (this.isOpen) this.render();\n }\n\n setElementSelected(selected: boolean): void {\n this.elementSelected = selected;\n if (this.isOpen) this.render();\n }\n\n destroy(): void {\n this.host.remove();\n }\n\n private getTheme(): 'light' | 'dark' {\n if (this.config.theme !== 'auto') return this.config.theme;\n if (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n return 'dark';\n }\n return 'light';\n }\n\n private render(): void {\n const theme = this.getTheme();\n const pos = this.config.position;\n const t = this.locale;\n\n this.shadow.innerHTML = '';\n\n const style = document.createElement('style');\n style.textContent = getWidgetStyles(theme);\n this.shadow.appendChild(style);\n\n const trigger = document.createElement('button');\n trigger.className = `mushi-trigger ${pos}`;\n trigger.textContent = this.config.triggerText;\n trigger.setAttribute('aria-label', t.widget.trigger);\n trigger.style.zIndex = String(this.config.zIndex);\n trigger.addEventListener('click', () => {\n if (this.isOpen) this.close();\n else this.open();\n });\n this.shadow.appendChild(trigger);\n\n const panel = document.createElement('div');\n panel.className = `mushi-panel ${pos}${this.isOpen ? ' open' : ' closed'}`;\n panel.setAttribute('role', 'dialog');\n panel.setAttribute('aria-label', t.widget.title);\n panel.style.zIndex = String(this.config.zIndex + 1);\n\n if (this.isOpen) {\n panel.innerHTML = this.renderStep();\n this.shadow.appendChild(panel);\n this.attachHandlers(panel);\n this.trapFocus(panel);\n }\n }\n\n private renderStep(): string {\n switch (this.step) {\n case 'category': return this.renderCategoryStep();\n case 'intent': return this.renderIntentStep();\n case 'details': return this.renderDetailsStep();\n case 'success': return this.renderSuccessStep();\n }\n }\n\n private renderHeader(title: string, showBack = false): string {\n const t = this.locale;\n return `\n <div class=\"mushi-header\">\n ${showBack ? `<button class=\"mushi-back\" data-action=\"back\" aria-label=\"${t.widget.back}\">\\u2190</button>` : ''}\n <h3>${title}</h3>\n <button class=\"mushi-close\" data-action=\"close\" aria-label=\"${t.widget.close}\">\\u2715</button>\n </div>\n `;\n }\n\n private renderCategoryStep(): string {\n const t = this.locale;\n const categories = (['bug', 'slow', 'visual', 'confusing', 'other'] as MushiReportCategory[])\n .map((id) => `\n <button class=\"mushi-option-btn\" data-category=\"${id}\" role=\"radio\" aria-checked=\"false\">\n <span class=\"mushi-option-icon\">${CATEGORY_ICONS[id]}</span>\n <div class=\"mushi-option-text\">\n <span class=\"mushi-option-label\">${t.step1.categories[id]}</span>\n <span class=\"mushi-option-desc\">${t.step1.categoryDescriptions[id]}</span>\n </div>\n </button>\n `).join('');\n\n return `\n ${this.renderHeader(t.step1.heading)}\n <div class=\"mushi-body\" role=\"radiogroup\" aria-label=\"${t.step1.heading}\">\n ${categories}\n </div>\n <div class=\"mushi-step-indicator\">\n <span class=\"mushi-dot active\"></span>\n <span class=\"mushi-dot\"></span>\n <span class=\"mushi-dot\"></span>\n </div>\n `;\n }\n\n private renderIntentStep(): string {\n const t = this.locale;\n const cat = this.selectedCategory!;\n const intents = t.step2.intents[cat] || [];\n\n const options = intents.map((intent) => `\n <button class=\"mushi-intent-btn\" data-intent=\"${intent}\">\n ${intent}\n </button>\n `).join('');\n\n return `\n ${this.renderHeader(t.step2.heading, true)}\n <div class=\"mushi-body\">\n <div class=\"mushi-selected-category\">\n <span>${CATEGORY_ICONS[cat]}</span>\n <span>${t.step1.categories[cat]}</span>\n </div>\n <div class=\"mushi-intents\">\n ${options}\n </div>\n </div>\n <div class=\"mushi-step-indicator\">\n <span class=\"mushi-dot done\"></span>\n <span class=\"mushi-dot active\"></span>\n <span class=\"mushi-dot\"></span>\n </div>\n `;\n }\n\n private renderDetailsStep(): string {\n const t = this.locale;\n\n return `\n ${this.renderHeader(t.step3.heading, true)}\n <div class=\"mushi-body\">\n <textarea\n class=\"mushi-textarea\"\n placeholder=\"${t.step3.descriptionPlaceholder}\"\n rows=\"4\"\n aria-label=\"${t.step3.heading}\"\n autofocus\n ></textarea>\n <div class=\"mushi-attachments\">\n <button class=\"mushi-attach-btn${this.screenshotAttached ? ' active' : ''}\" data-action=\"screenshot\">\n \\uD83D\\uDCF8 ${this.screenshotAttached ? t.step3.screenshotAttached : t.step3.screenshotButton}\n </button>\n <button class=\"mushi-attach-btn${this.elementSelected ? ' active' : ''}\" data-action=\"element\">\n \\uD83C\\uDFAF ${this.elementSelected ? t.step3.elementSelected : t.step3.elementButton}\n </button>\n </div>\n <div class=\"mushi-error\" style=\"display:none\" role=\"alert\"></div>\n </div>\n <div class=\"mushi-footer\">\n <button class=\"mushi-submit\" data-action=\"submit\"${this.submitting ? ' disabled' : ''}>\n ${this.submitting ? t.widget.submitting : t.widget.submit}\n </button>\n </div>\n <div class=\"mushi-step-indicator\">\n <span class=\"mushi-dot done\"></span>\n <span class=\"mushi-dot done\"></span>\n <span class=\"mushi-dot active\"></span>\n </div>\n `;\n }\n\n private renderSuccessStep(): string {\n const t = this.locale;\n return `\n ${this.renderHeader(t.widget.title)}\n <div class=\"mushi-body\">\n <div class=\"mushi-success\">\n <div class=\"mushi-success-icon\">\\u2705</div>\n <p>${t.widget.submitted}</p>\n </div>\n </div>\n `;\n }\n\n private attachHandlers(panel: HTMLElement): void {\n const t = this.locale;\n\n panel.querySelector('[data-action=\"close\"]')?.addEventListener('click', () => this.close());\n panel.querySelector('[data-action=\"back\"]')?.addEventListener('click', () => {\n if (this.step === 'intent') { this.step = 'category'; this.selectedCategory = null; }\n else if (this.step === 'details') { this.step = 'intent'; this.selectedIntent = null; }\n this.render();\n });\n\n panel.querySelectorAll('[data-category]').forEach((btn) => {\n btn.addEventListener('click', () => {\n this.selectedCategory = (btn as HTMLElement).dataset.category as MushiReportCategory;\n this.step = 'intent';\n this.render();\n });\n });\n\n panel.querySelectorAll('[data-intent]').forEach((btn) => {\n btn.addEventListener('click', () => {\n this.selectedIntent = (btn as HTMLElement).dataset.intent ?? null;\n this.step = 'details';\n this.render();\n });\n });\n\n panel.querySelector('[data-action=\"screenshot\"]')?.addEventListener('click', () => {\n this.callbacks.onScreenshotRequest();\n });\n\n panel.querySelector('[data-action=\"element\"]')?.addEventListener('click', () => {\n this.callbacks.onElementSelectorRequest?.();\n });\n\n panel.querySelector('[data-action=\"submit\"]')?.addEventListener('click', () => {\n const textarea = panel.querySelector('.mushi-textarea') as HTMLTextAreaElement | null;\n const description = textarea?.value?.trim() ?? '';\n const errorEl = panel.querySelector('.mushi-error') as HTMLElement | null;\n\n // V5.3 §2.1: increased from 5 to 20 to filter low-value \"doesn't work\"\n // submissions that the LLM cannot meaningfully classify. Empirically this\n // removed ~30% of unactionable reports without measurable drop in valid ones.\n const MIN_DESCRIPTION_LENGTH = 20;\n if (description.length < MIN_DESCRIPTION_LENGTH) {\n if (errorEl) {\n errorEl.textContent = `${t.widget.error} (${description.length}/${MIN_DESCRIPTION_LENGTH})`;\n errorEl.style.display = 'block';\n }\n return;\n }\n\n this.submitting = true;\n this.render();\n\n this.callbacks.onSubmit({\n category: this.selectedCategory!,\n description,\n intent: this.selectedIntent ?? undefined,\n });\n\n setTimeout(() => {\n this.submitting = false;\n this.step = 'success';\n this.render();\n setTimeout(() => { if (this.step === 'success') this.close(); }, 2500);\n }, 500);\n });\n\n panel.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') this.close();\n });\n }\n\n private trapFocus(panel: HTMLElement): void {\n requestAnimationFrame(() => {\n const focusable = panel.querySelectorAll('button, textarea, [tabindex]');\n if (focusable.length > 0) (focusable[0] as HTMLElement).focus();\n });\n }\n}\n","import type { MushiConsoleEntry } from '@mushi-mushi/core';\n\nconst MAX_ENTRIES = 50;\nconst MAX_MESSAGE_LENGTH = 500;\n\nexport interface ConsoleCapture {\n getEntries(): MushiConsoleEntry[];\n clear(): void;\n destroy(): void;\n}\n\nexport function createConsoleCapture(): ConsoleCapture {\n const entries: MushiConsoleEntry[] = [];\n const originals: Partial<Record<string, (...args: unknown[]) => void>> = {};\n const levels: Array<MushiConsoleEntry['level']> = ['log', 'warn', 'error', 'info', 'debug'];\n\n for (const level of levels) {\n const original = console[level];\n originals[level] = original;\n\n console[level] = (...args: unknown[]) => {\n const message = args\n .map((arg) => {\n try {\n return typeof arg === 'string' ? arg : JSON.stringify(arg);\n } catch {\n return String(arg);\n }\n })\n .join(' ')\n .slice(0, MAX_MESSAGE_LENGTH);\n\n const entry: MushiConsoleEntry = {\n level,\n message,\n timestamp: Date.now(),\n };\n\n if (level === 'error' && args[0] instanceof Error) {\n entry.stack = (args[0] as Error).stack?.slice(0, 1000);\n }\n\n entries.push(entry);\n if (entries.length > MAX_ENTRIES) {\n entries.shift();\n }\n\n original.call(console, ...args);\n };\n }\n\n return {\n getEntries() {\n return [...entries];\n },\n clear() {\n entries.length = 0;\n },\n destroy() {\n for (const level of levels) {\n if (originals[level]) {\n console[level] = originals[level] as typeof console.log;\n }\n }\n },\n };\n}\n","import type { MushiNetworkEntry } from '@mushi-mushi/core';\n\nconst MAX_ENTRIES = 30;\n\nexport interface NetworkCapture {\n getEntries(): MushiNetworkEntry[];\n clear(): void;\n destroy(): void;\n}\n\nexport function createNetworkCapture(): NetworkCapture {\n const entries: MushiNetworkEntry[] = [];\n const originalFetch = globalThis.fetch;\n\n globalThis.fetch = async function mushiFetchInterceptor(\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> {\n const startTime = Date.now();\n const method = init?.method?.toUpperCase() ?? 'GET';\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;\n\n try {\n const response = await originalFetch.call(globalThis, input, init);\n\n addEntry({\n method,\n url: truncateUrl(url),\n status: response.status,\n duration: Date.now() - startTime,\n timestamp: startTime,\n });\n\n return response;\n } catch (error) {\n addEntry({\n method,\n url: truncateUrl(url),\n status: 0,\n duration: Date.now() - startTime,\n timestamp: startTime,\n error: error instanceof Error ? error.message : 'Network error',\n });\n throw error;\n }\n };\n\n function addEntry(entry: MushiNetworkEntry): void {\n entries.push(entry);\n if (entries.length > MAX_ENTRIES) {\n entries.shift();\n }\n }\n\n return {\n getEntries() {\n return [...entries];\n },\n clear() {\n entries.length = 0;\n },\n destroy() {\n globalThis.fetch = originalFetch;\n },\n };\n}\n\nfunction truncateUrl(url: string): string {\n try {\n const parsed = new URL(url);\n const path = parsed.pathname + parsed.search;\n if (path.length > 200) {\n return parsed.origin + path.slice(0, 200) + '...';\n }\n return parsed.origin + path;\n } catch {\n return url.slice(0, 200);\n }\n}\n","export interface ScreenshotCapture {\n take(): Promise<string | null>;\n}\n\nexport function createScreenshotCapture(): ScreenshotCapture {\n async function take(): Promise<string | null> {\n try {\n if (typeof document === 'undefined') return null;\n\n // Prefer native getDisplayMedia if available (requires user gesture)\n // Fall back to simple canvas-based capture of visible viewport\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n\n const width = window.innerWidth;\n const height = window.innerHeight;\n const dpr = Math.min(window.devicePixelRatio || 1, 2);\n\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n\n // Capture via SVG foreignObject — works for most DOM content\n const svgData = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\">\n <foreignObject width=\"100%\" height=\"100%\">\n <div xmlns=\"http://www.w3.org/1999/xhtml\">\n ${new XMLSerializer().serializeToString(document.documentElement)}\n </div>\n </foreignObject>\n </svg>\n `;\n\n const img = new Image();\n const blob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' });\n const url = URL.createObjectURL(blob);\n\n return new Promise((resolve) => {\n img.onload = () => {\n ctx.drawImage(img, 0, 0, width, height);\n URL.revokeObjectURL(url);\n try {\n const dataUrl = canvas.toDataURL('image/jpeg', 0.7);\n resolve(dataUrl);\n } catch {\n resolve(null);\n }\n };\n img.onerror = () => {\n URL.revokeObjectURL(url);\n resolve(null);\n };\n img.src = url;\n });\n } catch {\n return null;\n }\n }\n\n return { take };\n}\n","import type { MushiPerformanceMetrics } from '@mushi-mushi/core';\n\nexport interface PerformanceCapture {\n getMetrics(): MushiPerformanceMetrics;\n destroy(): void;\n}\n\nexport function createPerformanceCapture(): PerformanceCapture {\n const metrics: MushiPerformanceMetrics = {};\n const observers: PerformanceObserver[] = [];\n\n if (typeof PerformanceObserver !== 'undefined') {\n try {\n const paintObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.name === 'first-contentful-paint') {\n metrics.fcp = entry.startTime;\n }\n }\n });\n paintObserver.observe({ type: 'paint', buffered: true });\n observers.push(paintObserver);\n } catch {\n // paint observer not supported\n }\n\n try {\n const lcpObserver = new PerformanceObserver((list) => {\n const entries = list.getEntries();\n if (entries.length > 0) {\n metrics.lcp = entries[entries.length - 1]!.startTime;\n }\n });\n lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });\n observers.push(lcpObserver);\n } catch {\n // LCP not supported\n }\n\n try {\n let clsValue = 0;\n const clsObserver = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (!(entry as PerformanceEntry & { hadRecentInput?: boolean }).hadRecentInput) {\n clsValue += (entry as PerformanceEntry & { value?: number }).value ?? 0;\n metrics.cls = clsValue;\n }\n }\n });\n clsObserver.observe({ type: 'layout-shift', buffered: true });\n observers.push(clsObserver);\n } catch {\n // CLS not supported\n }\n\n try {\n let longTaskCount = 0;\n const longTaskObserver = new PerformanceObserver((list) => {\n longTaskCount += list.getEntries().length;\n metrics.longTasks = longTaskCount;\n });\n longTaskObserver.observe({ type: 'longtask', buffered: true });\n observers.push(longTaskObserver);\n } catch {\n // longtask not supported\n }\n }\n\n // Navigation timing for TTFB\n if (typeof performance !== 'undefined' && performance.getEntriesByType) {\n try {\n const navEntries = performance.getEntriesByType('navigation') as PerformanceNavigationTiming[];\n if (navEntries.length > 0 && navEntries[0]) {\n metrics.ttfb = navEntries[0].responseStart - navEntries[0].requestStart;\n }\n } catch {\n // navigation timing not available\n }\n }\n\n return {\n getMetrics() {\n return { ...metrics };\n },\n destroy() {\n for (const obs of observers) {\n obs.disconnect();\n }\n observers.length = 0;\n },\n };\n}\n","import type { MushiSelectedElement } from '@mushi-mushi/core';\n\nexport interface ElementSelector {\n activate(): Promise<MushiSelectedElement | null>;\n deactivate(): void;\n isActive(): boolean;\n}\n\nexport function createElementSelector(): ElementSelector {\n let active = false;\n let overlay: HTMLDivElement | null = null;\n let resolvePromise: ((el: MushiSelectedElement | null) => void) | null = null;\n\n function getXPath(el: Element): string {\n const parts: string[] = [];\n let current: Element | null = el;\n while (current && current !== document.body) {\n let index = 1;\n let sibling: Element | null = current.previousElementSibling;\n while (sibling) {\n if (sibling.tagName === current.tagName) index++;\n sibling = sibling.previousElementSibling;\n }\n const tag = current.tagName.toLowerCase();\n parts.unshift(index > 1 ? `${tag}[${index}]` : tag);\n current = current.parentElement;\n }\n return '//' + parts.join('/');\n }\n\n function captureElement(el: Element): MushiSelectedElement {\n const rect = el.getBoundingClientRect();\n return {\n tagName: el.tagName.toLowerCase(),\n id: el.id || undefined,\n className: el.className || undefined,\n textContent: el.textContent?.trim().slice(0, 200) || undefined,\n xpath: getXPath(el),\n rect: {\n x: Math.round(rect.x),\n y: Math.round(rect.y),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n },\n };\n }\n\n function createOverlay(): HTMLDivElement {\n const el = document.createElement('div');\n el.style.cssText = `\n position: fixed;\n pointer-events: none;\n z-index: 2147483647;\n border: 2px solid #6366f1;\n background: rgba(99, 102, 241, 0.1);\n border-radius: 4px;\n transition: all 0.1s ease;\n display: none;\n `;\n document.body.appendChild(el);\n return el;\n }\n\n function positionOverlay(target: Element) {\n if (!overlay) return;\n const rect = target.getBoundingClientRect();\n overlay.style.left = `${rect.left}px`;\n overlay.style.top = `${rect.top}px`;\n overlay.style.width = `${rect.width}px`;\n overlay.style.height = `${rect.height}px`;\n overlay.style.display = 'block';\n }\n\n function handleMouseMove(e: MouseEvent) {\n const target = e.target as Element;\n if (target === overlay) return;\n positionOverlay(target);\n }\n\n function handleClick(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n const target = e.target as Element;\n if (target === overlay) return;\n const captured = captureElement(target);\n finish(captured);\n }\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n finish(null);\n }\n }\n\n function finish(result: MushiSelectedElement | null) {\n deactivate();\n resolvePromise?.(result);\n resolvePromise = null;\n }\n\n function activate(): Promise<MushiSelectedElement | null> {\n if (active) deactivate();\n\n return new Promise((resolve) => {\n resolvePromise = resolve;\n active = true;\n overlay = createOverlay();\n document.body.style.cursor = 'crosshair';\n\n document.addEventListener('mousemove', handleMouseMove, true);\n document.addEventListener('click', handleClick, true);\n document.addEventListener('keydown', handleKeyDown, true);\n });\n }\n\n function deactivate() {\n if (!active) return;\n active = false;\n document.body.style.cursor = '';\n document.removeEventListener('mousemove', handleMouseMove, true);\n document.removeEventListener('click', handleClick, true);\n document.removeEventListener('keydown', handleKeyDown, true);\n\n if (overlay) {\n overlay.remove();\n overlay = null;\n }\n }\n\n return { activate, deactivate, isActive: () => active };\n}\n","import type { MushiSentryConfig } from '@mushi-mushi/core';\n\nexport interface SentryContext {\n eventId?: string;\n replayId?: string;\n traceId?: string;\n release?: string;\n environment?: string;\n}\n\ninterface SentryHub {\n getClient?(): { getOptions?(): { release?: string; environment?: string } } | undefined;\n getScope?(): { getLastEventId?(): string | undefined } | undefined;\n}\n\ninterface SentryReplayIntegration {\n getReplayId?(): string | undefined;\n}\n\nfunction getSentryGlobal(): SentryHub | undefined {\n try {\n const win = globalThis as Record<string, unknown>;\n if (win.__SENTRY__) {\n const sentry = win.__SENTRY__ as Record<string, unknown>;\n const hub = sentry.hub as SentryHub | undefined;\n return hub;\n }\n\n if (win.Sentry) {\n return win.Sentry as SentryHub;\n }\n } catch {\n // Sentry not available\n }\n return undefined;\n}\n\nexport function captureSentryContext(_config: MushiSentryConfig): SentryContext {\n const context: SentryContext = {};\n\n try {\n const hub = getSentryGlobal();\n if (!hub) return context;\n\n const scope = hub.getScope?.();\n if (scope) {\n context.eventId = scope.getLastEventId?.() ?? undefined;\n }\n\n const client = hub.getClient?.();\n if (client) {\n const options = client.getOptions?.();\n context.release = options?.release;\n context.environment = options?.environment;\n }\n\n const win = globalThis as Record<string, unknown>;\n if (win.__SENTRY_REPLAY__) {\n const replay = win.__SENTRY_REPLAY__ as SentryReplayIntegration;\n context.replayId = replay.getReplayId?.() ?? undefined;\n }\n } catch {\n // Sentry access failed silently\n }\n\n return context;\n}\n\nexport interface SentryFeedbackInterceptor {\n start(): void;\n stop(): void;\n}\n\nexport function createSentryFeedbackInterceptor(\n _config: MushiSentryConfig,\n onFeedback: (feedback: { eventId?: string; message: string; email?: string; name?: string }) => void,\n): SentryFeedbackInterceptor {\n let observer: MutationObserver | null = null;\n\n function start() {\n if (typeof MutationObserver === 'undefined') return;\n\n observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node instanceof HTMLElement && node.getAttribute('data-sentry-feedback')) {\n interceptFeedbackForm(node);\n }\n }\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n }\n\n function interceptFeedbackForm(container: HTMLElement) {\n const form = container.querySelector('form');\n if (!form) return;\n\n form.addEventListener('submit', () => {\n const formData = new FormData(form);\n onFeedback({\n message: formData.get('message') as string ?? '',\n email: formData.get('email') as string ?? undefined,\n name: formData.get('name') as string ?? undefined,\n });\n });\n }\n\n function stop() {\n observer?.disconnect();\n observer = null;\n }\n\n return { start, stop };\n}\n","export interface ProactiveTriggerConfig {\n rageClick?: boolean\n longTask?: boolean\n apiCascade?: boolean\n errorBoundary?: boolean\n}\n\nexport interface ProactiveTriggerCallbacks {\n onTrigger: (type: string, context: Record<string, unknown>) => void\n}\n\nexport interface ProactiveTriggerCleanup {\n destroy: () => void\n}\n\nexport function setupProactiveTriggers(\n callbacks: ProactiveTriggerCallbacks,\n config: ProactiveTriggerConfig = {},\n): ProactiveTriggerCleanup {\n const cleanups: Array<() => void> = []\n\n // --- Rage Click Detection ---\n if (config.rageClick !== false) {\n let clickTimes: number[] = []\n let lastClickTarget: EventTarget | null = null\n\n function handleClick(e: MouseEvent) {\n const now = Date.now()\n if (e.target === lastClickTarget) {\n clickTimes.push(now)\n clickTimes = clickTimes.filter(t => now - t < 500)\n if (clickTimes.length >= 3) {\n const el = e.target as HTMLElement\n callbacks.onTrigger('rage_click', {\n element: el.tagName,\n id: el.id,\n text: el.textContent?.slice(0, 50),\n })\n clickTimes = []\n }\n } else {\n lastClickTarget = e.target\n clickTimes = [now]\n }\n }\n document.addEventListener('click', handleClick, true)\n cleanups.push(() => document.removeEventListener('click', handleClick, true))\n }\n\n // --- Long Task Detection ---\n if (config.longTask !== false && typeof PerformanceObserver !== 'undefined') {\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n if (entry.duration > 5000) {\n callbacks.onTrigger('long_task', {\n duration: Math.round(entry.duration),\n startTime: Math.round(entry.startTime),\n })\n }\n }\n })\n observer.observe({ entryTypes: ['longtask'] })\n cleanups.push(() => observer.disconnect())\n } catch {\n // longtask not supported\n }\n }\n\n // --- API Cascade Failure ---\n if (config.apiCascade !== false) {\n const failedRequests: number[] = []\n const origFetch = globalThis.fetch\n\n globalThis.fetch = async function (this: unknown, ...args: Parameters<typeof fetch>) {\n try {\n const res = await origFetch.apply(this, args)\n if (!res.ok && res.status >= 400) {\n const now = Date.now()\n failedRequests.push(now)\n const recentFailures = failedRequests.filter(t => now - t < 10000)\n if (recentFailures.length >= 3) {\n callbacks.onTrigger('api_cascade', {\n failureCount: recentFailures.length,\n windowMs: 10000,\n })\n failedRequests.length = 0\n }\n }\n return res\n } catch (err) {\n const now = Date.now()\n failedRequests.push(now)\n const recentFailures = failedRequests.filter(t => now - t < 10000)\n if (recentFailures.length >= 3) {\n callbacks.onTrigger('api_cascade', {\n failureCount: recentFailures.length,\n windowMs: 10000,\n })\n failedRequests.length = 0\n }\n throw err\n }\n } as typeof fetch\n\n cleanups.push(() => { globalThis.fetch = origFetch })\n }\n\n // --- Global Error Boundary ---\n if (config.errorBoundary) {\n function handleError(event: ErrorEvent) {\n callbacks.onTrigger('error_boundary', {\n message: event.message,\n filename: event.filename,\n lineno: event.lineno,\n colno: event.colno,\n })\n }\n function handleUnhandledRejection(event: PromiseRejectionEvent) {\n callbacks.onTrigger('error_boundary', {\n message: event.reason instanceof Error ? event.reason.message : String(event.reason),\n type: 'unhandled_rejection',\n })\n }\n window.addEventListener('error', handleError)\n window.addEventListener('unhandledrejection', handleUnhandledRejection)\n cleanups.push(() => {\n window.removeEventListener('error', handleError)\n window.removeEventListener('unhandledrejection', handleUnhandledRejection)\n })\n }\n\n return {\n destroy() {\n cleanups.forEach(fn => fn())\n },\n }\n}\n","export interface ProactiveConfig {\n maxProactivePerSession: number\n dismissCooldownHours: number\n suppressAfterDismissals: number\n}\n\nexport interface ProactiveManager {\n shouldShow(triggerType: string): boolean\n recordDismissal(): void\n recordSubmission(): void\n reset(): void\n}\n\nconst STORAGE_KEY_LAST_DISMISS = 'mushi:lastDismiss'\nconst STORAGE_KEY_CONSEC_DISMISS = 'mushi:consecDismiss'\n\nfunction readStorage(key: string): string | null {\n try { return localStorage.getItem(key) } catch { return null }\n}\n\nfunction writeStorage(key: string, value: string): void {\n try { localStorage.setItem(key, value) } catch { /* noop */ }\n}\n\nexport function createProactiveManager(\n config: Partial<ProactiveConfig> = {},\n): ProactiveManager {\n const maxPerSession = config.maxProactivePerSession ?? 2\n const cooldownHours = config.dismissCooldownHours ?? 24\n const suppressThreshold = config.suppressAfterDismissals ?? 3\n\n let sessionPromptCount = 0\n const sessionTriggerTypes = new Set<string>()\n\n function shouldShow(triggerType: string): boolean {\n // Permanent suppression check\n const consecDismissals = parseInt(readStorage(STORAGE_KEY_CONSEC_DISMISS) ?? '0', 10)\n if (consecDismissals >= suppressThreshold) return false\n\n // Cooldown check\n const lastDismiss = readStorage(STORAGE_KEY_LAST_DISMISS)\n if (lastDismiss) {\n const elapsed = Date.now() - parseInt(lastDismiss, 10)\n if (elapsed < cooldownHours * 60 * 60 * 1000) return false\n }\n\n // Session limit\n if (sessionPromptCount >= maxPerSession) return false\n\n // Dedup: same trigger type not shown twice per session\n if (sessionTriggerTypes.has(triggerType)) return false\n\n sessionTriggerTypes.add(triggerType)\n sessionPromptCount++\n return true\n }\n\n function recordDismissal(): void {\n writeStorage(STORAGE_KEY_LAST_DISMISS, String(Date.now()))\n const current = parseInt(readStorage(STORAGE_KEY_CONSEC_DISMISS) ?? '0', 10)\n writeStorage(STORAGE_KEY_CONSEC_DISMISS, String(current + 1))\n }\n\n function recordSubmission(): void {\n writeStorage(STORAGE_KEY_CONSEC_DISMISS, '0')\n }\n\n function reset(): void {\n sessionPromptCount = 0\n sessionTriggerTypes.clear()\n }\n\n return { shouldShow, recordDismissal, recordSubmission, reset }\n}\n","import {\n type MushiConfig,\n type MushiReport,\n type MushiReportCategory,\n type MushiEventType,\n type MushiEventHandler,\n type MushiSDKInstance,\n createApiClient,\n createPreFilter,\n createOfflineQueue,\n captureEnvironment,\n getReporterToken,\n getDeviceFingerprintHash,\n getSessionId,\n createRateLimiter,\n createPiiScrubber,\n createLogger,\n noopLogger,\n} from '@mushi-mushi/core';\n\nimport { MushiWidget } from './widget';\nimport {\n createConsoleCapture,\n createNetworkCapture,\n createScreenshotCapture,\n createPerformanceCapture,\n createElementSelector,\n} from './capture';\nimport { captureSentryContext } from './sentry';\nimport { setupProactiveTriggers, type ProactiveTriggerCleanup } from './proactive-triggers';\nimport { createProactiveManager, type ProactiveManager } from './proactive-manager';\n\nlet instance: MushiSDKInstance | null = null;\n\nexport class Mushi {\n private constructor() {}\n\n static init(config: MushiConfig): MushiSDKInstance {\n if (instance) {\n createLogger({ scope: 'mushi', level: 'warn', format: 'pretty' })\n .warn('Already initialized — call destroy() first to reinitialize');\n return instance;\n }\n\n if (!config.projectId) {\n throw new Error('[mushi] projectId is required');\n }\n\n if (!config.apiKey) {\n throw new Error('[mushi] apiKey is required');\n }\n\n if (config.enabled === false) {\n return createNoopInstance();\n }\n\n instance = createInstance(config);\n return instance;\n }\n\n static getInstance(): MushiSDKInstance | null {\n return instance;\n }\n\n static destroy(): void {\n instance?.destroy();\n instance = null;\n }\n}\n\nfunction createInstance(config: MushiConfig): MushiSDKInstance {\n const log = (config.debug ?? false)\n ? createLogger({ scope: 'mushi', level: 'debug', format: 'pretty' })\n : noopLogger;\n\n const apiClient = createApiClient({\n projectId: config.projectId,\n apiKey: config.apiKey,\n ...(config.apiEndpoint ? { apiEndpoint: config.apiEndpoint } : {}),\n });\n\n const preFilter = createPreFilter(config.preFilter);\n const offlineQueue = createOfflineQueue(config.offline);\n const rateLimiter = createRateLimiter({ maxBurst: 10, refillRate: 1, refillIntervalMs: 5_000 });\n const piiScrubber = createPiiScrubber();\n const consoleCap = config.capture?.console !== false ? createConsoleCapture() : null;\n const networkCap = config.capture?.network !== false ? createNetworkCapture() : null;\n const perfCap = config.capture?.performance !== false ? createPerformanceCapture() : null;\n const screenshotCap = config.capture?.screenshot !== 'off' ? createScreenshotCapture() : null;\n const elementSelector = config.capture?.elementSelector !== false ? createElementSelector() : null;\n\n const listeners = new Map<MushiEventType, Set<MushiEventHandler>>();\n function emit(type: MushiEventType, data?: unknown) {\n listeners.get(type)?.forEach((handler) => handler({ type, data }));\n }\n\n let userInfo: { id: string; email?: string; name?: string } | null = null;\n const customMetadata: Record<string, unknown> = {};\n let pendingScreenshot: string | null = null;\n let pendingElement: { tagName: string; id?: string; className?: string; xpath?: string } | null = null;\n let pendingProactiveTrigger: string | null = null;\n\n const widget = new MushiWidget(config.widget, {\n onSubmit: async ({ category, description, intent }) => {\n log.info('Report submitted', { category, intent });\n proactiveManager?.recordSubmission();\n await submitReport(category, description, intent);\n },\n onOpen: () => {\n log.debug('Widget opened');\n emit('widget:opened');\n },\n onClose: () => {\n log.debug('Widget closed');\n if (pendingProactiveTrigger) {\n proactiveManager?.recordDismissal();\n emit('proactive:dismissed', { type: pendingProactiveTrigger });\n }\n pendingScreenshot = null;\n pendingElement = null;\n pendingProactiveTrigger = null;\n emit('widget:closed');\n },\n onScreenshotRequest: async () => {\n if (!screenshotCap) return;\n log.debug('Taking screenshot');\n pendingScreenshot = await screenshotCap.take();\n widget.setScreenshotAttached(pendingScreenshot !== null);\n },\n onElementSelectorRequest: async () => {\n if (!elementSelector) return;\n log.debug('Element selector activated');\n const el = await elementSelector.activate();\n if (el) {\n pendingElement = el;\n widget.setElementSelected(true);\n log.debug('Element selected', { tagName: el.tagName, xpath: el.xpath });\n }\n },\n });\n\n if (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => widget.mount());\n } else {\n widget.mount();\n }\n }\n\n // --- Proactive triggers + fatigue prevention ---\n let proactiveTriggers: ProactiveTriggerCleanup | null = null;\n let proactiveManager: ProactiveManager | null = null;\n\n const proactiveCfg = config.proactive;\n const hasAnyProactive = proactiveCfg\n && (proactiveCfg.rageClick !== false\n || proactiveCfg.longTask !== false\n || proactiveCfg.apiCascade !== false\n || proactiveCfg.errorBoundary === true);\n\n if (hasAnyProactive && typeof document !== 'undefined') {\n proactiveManager = createProactiveManager(proactiveCfg?.cooldown);\n\n proactiveTriggers = setupProactiveTriggers(\n {\n onTrigger: (type, context) => {\n if (!proactiveManager!.shouldShow(type)) {\n log.debug('Proactive trigger suppressed by fatigue prevention', { type });\n return;\n }\n log.info('Proactive trigger fired', { type, context });\n pendingProactiveTrigger = type;\n emit('proactive:triggered', { type, context });\n widget.open();\n },\n },\n {\n rageClick: proactiveCfg?.rageClick,\n longTask: proactiveCfg?.longTask,\n apiCascade: proactiveCfg?.apiCascade,\n errorBoundary: proactiveCfg?.errorBoundary,\n },\n );\n\n log.debug('Proactive triggers enabled', {\n rageClick: proactiveCfg?.rageClick !== false,\n longTask: proactiveCfg?.longTask !== false,\n apiCascade: proactiveCfg?.apiCascade !== false,\n errorBoundary: proactiveCfg?.errorBoundary === true,\n });\n }\n\n offlineQueue.startAutoSync(apiClient);\n offlineQueue.flush(apiClient).then((result) => {\n if (result.sent > 0) log.info('Synced offline reports', { sent: result.sent });\n });\n\n log.info('Initialized', { projectId: config.projectId });\n\n async function submitReport(category: MushiReportCategory, description: string, intent?: string) {\n const filterResult = preFilter.check(description);\n if (!filterResult.passed) {\n log.info('Report blocked by pre-filter', { reason: filterResult.reason });\n return;\n }\n\n const wasm = config.preFilter?.wasmClassifier;\n if (wasm) {\n try {\n const verdict = await wasm.classify({\n description,\n category,\n url: typeof location !== 'undefined' ? location.href : undefined,\n hasScreenshot: pendingScreenshot !== null,\n hasSelectedElement: pendingElement !== null,\n hasNetworkErrors: networkCap?.getEntries()?.some((e) => e.status >= 400 || !!e.error) ?? false,\n hasConsoleErrors: consoleCap?.getEntries()?.some((e) => e.level === 'error') ?? false,\n proactiveTrigger: pendingProactiveTrigger ?? undefined,\n });\n if (verdict.verdict === 'block') {\n log.info('Report blocked by on-device classifier', {\n modelId: verdict.modelId,\n confidence: verdict.confidence,\n reason: verdict.reason,\n });\n return;\n }\n log.debug('On-device classifier verdict', { ...verdict });\n } catch (err) {\n log.warn('On-device classifier threw — falling through to server', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n if (!rateLimiter.tryConsume()) {\n log.warn('Report throttled — rate limit exceeded');\n return;\n }\n\n const scrubbedDescription = piiScrubber.scrub(preFilter.truncate(description));\n\n const sentryCtx = config.sentry ? captureSentryContext(config.sentry) : undefined;\n const fingerprintHash = await getDeviceFingerprintHash().catch(() => null);\n\n const report: MushiReport = {\n id: crypto.randomUUID?.() ?? `mushi_${Date.now()}_${Math.random().toString(36).slice(2)}`,\n projectId: config.projectId,\n category,\n description: scrubbedDescription,\n userIntent: intent,\n environment: captureEnvironment(),\n consoleLogs: consoleCap?.getEntries(),\n networkLogs: networkCap?.getEntries(),\n performanceMetrics: perfCap?.getMetrics(),\n screenshotDataUrl: pendingScreenshot ?? undefined,\n selectedElement: pendingElement ?? undefined,\n metadata: {\n ...customMetadata,\n ...(userInfo ? { user: userInfo } : {}),\n ...(sentryCtx?.release ? { sentryRelease: sentryCtx.release } : {}),\n },\n sessionId: getSessionId(),\n reporterToken: getReporterToken(),\n ...(fingerprintHash ? { fingerprintHash } : {}),\n appVersion: config.integrations?.vercel?.analyticsId,\n proactiveTrigger: pendingProactiveTrigger ?? undefined,\n sentryEventId: sentryCtx?.eventId,\n sentryReplayId: sentryCtx?.replayId,\n createdAt: new Date().toISOString(),\n };\n\n if (config.integrations?.custom) {\n const builder = {\n addMetadata(key: string, value: unknown) {\n (report.metadata as Record<string, unknown>)[key] = value;\n },\n setCategory(cat: MushiReportCategory) {\n report.category = cat;\n },\n setDescription(desc: string) {\n report.description = desc;\n },\n };\n config.integrations.custom(builder);\n }\n\n emit('report:submitted', { reportId: report.id });\n\n if (typeof navigator !== 'undefined' && !navigator.onLine) {\n await offlineQueue.enqueue(report);\n log.info('Offline — report queued', { reportId: report.id });\n emit('report:queued', { reportId: report.id });\n return;\n }\n\n const result = await apiClient.submitReport(report);\n if (result.ok) {\n log.info('Report sent', { reportId: result.data?.reportId });\n emit('report:sent', { reportId: result.data?.reportId });\n } else {\n log.warn('Report failed, queuing for retry', { reportId: report.id, error: result.error });\n await offlineQueue.enqueue(report);\n emit('report:failed', { reportId: report.id, error: result.error });\n }\n\n pendingScreenshot = null;\n pendingElement = null;\n pendingProactiveTrigger = null;\n }\n\n const sdk: MushiSDKInstance = {\n report(options) {\n widget.open(options);\n },\n\n on(event: MushiEventType, handler: MushiEventHandler) {\n if (!listeners.has(event)) listeners.set(event, new Set());\n listeners.get(event)!.add(handler);\n return () => listeners.get(event)?.delete(handler);\n },\n\n setUser(user) {\n userInfo = user;\n },\n\n setMetadata(key, value) {\n customMetadata[key] = value;\n },\n\n isOpen() {\n return widget.getIsOpen();\n },\n\n open() {\n widget.open();\n },\n\n close() {\n widget.close();\n },\n\n destroy() {\n proactiveTriggers?.destroy();\n proactiveManager?.reset();\n widget.destroy();\n consoleCap?.destroy();\n networkCap?.destroy();\n perfCap?.destroy();\n elementSelector?.deactivate();\n offlineQueue.stopAutoSync();\n listeners.clear();\n instance = null;\n log.debug('Destroyed');\n },\n\n // Wave G4 — unified `captureEvent` API for programmatic/adapter-driven\n // reports. Skips the widget, runs the same PII scrub + rate limit +\n // offline-queue path as `submit()`, and returns the server report id.\n async captureEvent(input) {\n if (!rateLimiter.tryConsume()) {\n log.warn('captureEvent throttled — rate limit exceeded');\n return null;\n }\n const description = piiScrubber.scrub(preFilter.truncate(input.description));\n const category = input.category ?? 'bug';\n const report: MushiReport = {\n id: crypto.randomUUID?.() ?? `mushi_${Date.now()}_${Math.random().toString(36).slice(2)}`,\n projectId: config.projectId,\n category,\n description,\n environment: captureEnvironment(),\n metadata: {\n ...(input.metadata ?? {}),\n ...(userInfo ? { user: userInfo } : {}),\n ...(input.tags ? { tags: input.tags } : {}),\n ...(input.error ? { error: input.error } : {}),\n ...(input.severity ? { severity: input.severity } : {}),\n ...(input.component ? { component: input.component } : {}),\n ...(input.source ? { source: input.source } : { source: 'captureEvent' }),\n },\n sessionId: getSessionId(),\n reporterToken: getReporterToken(),\n createdAt: new Date().toISOString(),\n };\n emit('report:submitted', { reportId: report.id });\n if (typeof navigator !== 'undefined' && !navigator.onLine) {\n await offlineQueue.enqueue(report);\n emit('report:queued', { reportId: report.id });\n return null;\n }\n const res = await apiClient.submitReport(report);\n if (res.ok) {\n emit('report:sent', { reportId: res.data?.reportId });\n return res.data?.reportId ?? null;\n }\n await offlineQueue.enqueue(report);\n emit('report:failed', { reportId: report.id, error: res.error });\n return null;\n },\n\n identify(userId, traits) {\n userInfo = { id: userId, ...(traits?.email ? { email: traits.email } : {}), ...(traits?.name ? { name: traits.name } : {}) };\n if (traits) {\n for (const [k, v] of Object.entries(traits)) {\n if (k !== 'email' && k !== 'name') customMetadata[`user.${k}`] = v;\n }\n }\n },\n };\n\n return sdk;\n}\n\nfunction createNoopInstance(): MushiSDKInstance {\n return {\n report: () => {},\n on: () => () => {},\n setUser: () => {},\n setMetadata: () => {},\n isOpen: () => false,\n open: () => {},\n close: () => {},\n destroy: () => {\n instance = null;\n },\n captureEvent: async () => null,\n identify: () => {},\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mushi-mushi/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Mushi Mushi browser SDK — embeddable bug reporting widget with Shadow DOM isolation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
}
|
|
64
64
|
],
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@mushi-mushi/core": "^0.
|
|
66
|
+
"@mushi-mushi/core": "^0.3.0"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@size-limit/file": "^12.1.0",
|