@gymmymac/bob-widget 3.2.3 → 3.2.5

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.
@@ -1,11 +1,22 @@
1
1
  # Bob Widget - Complete Documentation
2
2
 
3
- > **Version:** 3.1.19 | **Last Updated:** February 2026
3
+ > **Version:** 3.2.1 | **Last Updated:** February 2026
4
4
 
5
5
  AI-powered automotive parts assistant widget for seamless integration into partner websites.
6
6
 
7
7
  ---
8
8
 
9
+ ## 📖 Documentation Map
10
+
11
+ | Document | What It Covers |
12
+ |----------|---------------|
13
+ | **This file** | Technical reference: props, API, CSS, troubleshooting, 3-stage install |
14
+ | **[README.md](./README.md)** | Quick start, installation, container setup, callbacks |
15
+ | **[CHANGELOG.md](./CHANGELOG.md)** | Version history |
16
+ | **[BOB-COMPLETE-PROCESS-FLOW.md](../../BOB-COMPLETE-PROCESS-FLOW.md)** (project root) | Bob's personality, conversation states, Brain diagnostics, canned speech, customer playbook |
17
+
18
+ ---
19
+
9
20
  ## Table of Contents
10
21
 
11
22
  1. [Overview](#1-overview)
@@ -14,11 +25,10 @@ AI-powered automotive parts assistant widget for seamless integration into partn
14
25
  4. [Props Reference](#4-props-reference)
15
26
  5. [Session Handoff](#5-session-handoff)
16
27
  6. [CSS Customization](#6-css-customization)
17
- 7. [Bob's Behaviour Guidelines](#7-bobs-behaviour-guidelines)
28
+ 7. [Bob's Personality & Behaviour](#7-bobs-personality--behaviour)
18
29
  8. [API Reference](#8-api-reference)
19
30
  9. [Troubleshooting](#9-troubleshooting)
20
31
  10. [CARFIX 3-Stage Installation](#10-carfix-3-stage-installation)
21
- 11. [Changelog Summary](#11-changelog-summary)
22
32
 
23
33
  ---
24
34
 
@@ -394,74 +404,11 @@ This prevents host site styles from bleeding into Bob and vice versa.
394
404
 
395
405
  ---
396
406
 
397
- ## 7. Bob's Behaviour Guidelines
398
-
399
- ### Personality & Voice
400
-
401
- Bob is a friendly, knowledgeable Kiwi auto parts expert with a relaxed, helpful tone.
402
-
403
- | Expression | Meaning | When to Use |
404
- |------------|---------|-------------|
405
- | "Sweet as" | All good, perfect | Confirming something |
406
- | "Mate" | Friendly address | Throughout conversation |
407
- | "Choice" | Excellent | When something is good |
408
- | "Chur" | Thanks/Cool | Quick acknowledgment |
409
- | "She'll be right" | It'll be fine | Reassurance |
410
- | "Yeah nah" | No | Gentle decline |
411
- | "Away laughing" | Sorted, good to go | After solving a problem |
407
+ ## 7. Bob's Personality & Behaviour
412
408
 
413
- ### Response Length Guidelines
414
-
415
- | Situation | Response Style |
416
- |-----------|----------------|
417
- | No vehicle identified yet | SHORT - 1-2 sentences max |
418
- | Vehicle confirmed | Can be slightly longer |
419
- | Product recommendation | 2-3 sentences + point to shelf |
420
- | Checkout/cart | Brief confirmation |
421
-
422
- ### Vehicle Identification Workflow
423
-
424
- 1. **REGO (License Plate)** - Primary identifier, gives exact match
425
- 2. **Make + Model + Year + Engine CC** - Fallback when no REGO
426
-
427
- ```
428
- First ask: "What's your rego, mate?"
429
- If no rego: "No worries - what make, model, and year is she?"
430
- If needed: "What's the engine size? 1.8L, 2.0L...?"
431
- ```
432
-
433
- ### Product Recommendations - Golden Rules
434
-
435
- 1. **NEVER recommend cheapest first** - Lowest margin, lowest quality
436
- 2. **Lead with mid-priced "best value"** option
437
- 3. **Max 2-3 products mentioned verbally** - Let the shelf show the rest
438
- 4. **ONLY recommend products from retrieve_parts results** - Never hallucinate brands
439
-
440
- ### Cart & Checkout Rules (CRITICAL)
441
-
442
- - **NEVER add to cart** unless customer explicitly says:
443
- - "add to cart", "I'll take it", "buy it", "yes please"
444
- - If customer says "that one" or "the first one", **confirm WHICH product** before adding
445
- - **NEVER claim to add products without calling add_to_cart tool**
446
-
447
- ### Things Bob NEVER Does
448
-
449
- | Never Do | Why |
450
- |----------|-----|
451
- | Offer to fit parts | CARFIX only sells parts - DIY or workshop fitment |
452
- | Mention stock status | All displayed parts are in stock |
453
- | List more than 3 products verbally | Let the shelf do the work |
454
- | Recommend cheapest option first | Low margin, low quality perception |
455
- | Hallucinate brands or products | Only recommend from actual tool results |
456
- | Add to cart without explicit request | Customer must say "add", "buy", "take it" |
457
-
458
- ### Anti-Hallucination Rules
459
-
460
- 1. **ONLY mention products that appear in tool responses**
461
- 2. If no tool returned products, **DO NOT invent alternatives**
462
- 3. If search fails or returns empty, say: "I don't have that in my system right now"
463
- 4. **NEVER recommend brands, SKUs, or prices** not retrieved from tools
464
- 5. **NEVER fabricate product names** like "Best Value wipers"
409
+ > **Full reference moved →** See **[BOB-COMPLETE-PROCESS-FLOW.md](../../BOB-COMPLETE-PROCESS-FLOW.md)** for Bob's complete personality guide, conversation states, Brain diagnostics, canned speech triggers, and customer interaction playbook.
410
+ >
411
+ > This section previously duplicated that content. The master document is now the single source of truth for all behavioural guidelines.
465
412
 
466
413
  ---
467
414
 
@@ -605,9 +552,6 @@ After installation, you can find the scripts in:
605
552
  ```
606
553
  node_modules/@gymmymac/bob-widget/
607
554
  ├── bin/bob-widget.mjs # CLI entrypoint
608
- ├── install/carfix/
609
- │ ├── 00-README-PREINSTALL.md # This guide
610
- │ └── 05-runtime-verification-checklist.md
611
555
  ├── BOB-DOCUMENTATION.md # Full documentation
612
556
  └── CHANGELOG.md # Version history
613
557
  ```
@@ -983,67 +927,6 @@ export default function AskBobPage() {
983
927
 
984
928
  ---
985
929
 
986
- ## 11. Changelog Summary
987
-
988
- ### v3.1.9 (Current)
989
- - 🔧 **3-Stage Installation Process**: Complete rewrite of Section 10 with strict sequential stages
990
- - **Stage A: Forensic Removal** - Script now EXITS with error if any Bob files/imports found
991
- - **Stage B: Page Preparation** - Clear template for creating blank container page
992
- - **Stage C: Install & Verify** - Fresh installation with mandatory verification checklist
993
- - 📖 **Documentation Restructure**: Installation and cleanup clearly separated into distinct stages
994
- - ⚠️ **Prevents Legacy Code Interference**: Enhanced cleanup script with comprehensive detection
995
-
996
- ### v3.1.8
997
- - 📖 **Documentation Clarity**: Clarified that Bob container is placed on a page WITH existing CARFIX header/bottom nav
998
- - ⚠️ **Pre-Install Requirements**: Emphasized mandatory forensic cleanup before installation
999
- - 📐 **Page Layout Context**: Added explicit guidance that Bob fits BETWEEN fixed layout elements
1000
-
1001
- ### v3.1.7
1002
- - 📦 **Version Sync**: Prepared release with all version references aligned
1003
-
1004
- ### v3.1.6
1005
- - 📖 **README Update**: Added prominent "Read Before Installing" section
1006
- - 📐 **Layout Corrections**: Documented 144px offset formula with safe-area support
1007
-
1008
- ### v3.1.5
1009
- - 📦 **Version Sync**: Re-released to sync package.json version with GitHub release tag
1010
- - 📐 **Layout Corrections**: Updated CARFIX measurements to 72px header + 72px bottom nav
1011
-
1012
- ### v3.1.4
1013
- - 📦 **Supabase Bundling**: Removed @supabase/supabase-js from external to prevent "module not found" errors
1014
- - 🔒 **HTTPS Validation**: Added programmatic check for PTT - warns users on HTTP connections
1015
- - 🔧 **Debug Logging**: Consolidated all internal logs via bobLog utility respecting debug prop
1016
-
1017
- ### v3.1.3
1018
- - 🎨 **CSS Isolation**: Enhanced with `isolation: isolate` and `all: initial`
1019
- - 📐 **Embedded Mode**: Added `embedded` prop for fullscreen variant in host containers
1020
-
1021
- ### v3.1.2
1022
- - 🔊 **Pre-recorded Audio Clips**: Fixed context property mismatch where `useSpeechSynthesis` was accessing `supabase` instead of `bobSupabase`, causing pre-recorded clips to never play
1023
-
1024
- ### v3.1.1
1025
- - ⚛️ **React Hooks Order Violation**: Fixed hooks being called after conditional returns
1026
- - 🌐 **Allowed Origins**: Added Lovable preview domain support
1027
-
1028
- ### v3.1.0
1029
- - 🎯 **BobStandalone**: Auto-configures from database - 4 lines to integrate
1030
- - 🗄️ **Partner Config System**: All settings in `bob_partners` table
1031
- - 🎨 **CSS Variables**: Customizable blur, opacity, colors
1032
- - 🔍 **Debug Overlay**: Visual diagnostic tool
1033
- - 📦 **Simplified Callbacks**: Only essential callbacks required
1034
-
1035
- ### v3.0.x
1036
- - 🎭 **SwipeableBob**: Gesture-based interactions
1037
- - 🏢 **Multi-Tenant Support**: Configurable looks and animations per tenant
1038
- - 🎬 **RAF Animations**: Smooth 60fps animations
1039
- - ⚡ **MatrixProductLoader**: Cyberpunk-style loading
1040
- - 🔥 **SparkDealBanner**: Animated promotional banners
1041
- - 👋 **Returning User Detection**: Personalized greetings
1042
-
1043
- See [CHANGELOG.md](./CHANGELOG.md) for full version history.
1044
-
1045
- ---
1046
-
1047
930
  ## Dependencies
1048
931
 
1049
932
  Bob Widget v3.1.9 **bundles** its own dependencies. Your project only needs:
package/CHANGELOG.md CHANGED
@@ -5,6 +5,22 @@ All notable changes to the `@gymmymac/bob-widget` package will be documented in
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [v3.2.5] - 2026-03-09
9
+
10
+ ### Fixed
11
+ - 🔇 **Bug #1 — Quick-Reply Speech Stop**: Quick-reply/suggestion buttons now call `onInterrupt()` to stop all active speech before triggering `onNavigate`, preventing jarring audio overlap during navigation
12
+ - 🎛️ **Bug #2 — Imperative Stop Handle**: `BobStandaloneHandle.stopSpeech()` / `.interrupt()` now calls `stopAllAudio` (TTS + canned clips + searching audio) instead of only cancelling TTS — host apps can now fully silence Bob via ref
13
+ - 🎤 **Bug #3 — PTT Interrupt During Canned Audio**: Composite `isSpeaking` state now tracks both TTS and audio controller playback, so the PTT button correctly detects the `speaking` state during pre-recorded clips and interrupts immediately on tap
14
+
15
+ ---
16
+
17
+ ## [v3.2.4] - 2026-03-09
18
+
19
+ ### Fixed
20
+ - 🛒 **Service Package Add-to-Cart**: Fixed `onAddToCart` callback receiving `undefined` fields when adding a service package tier — handler now correctly unwraps `Product[]` arrays passed by `MobileProductColumn`, iterating each item individually so all fields (`product_id`, `product_name`, `sku`, `unit_price`, `brand`, `image_url`) are populated correctly
21
+
22
+ ---
23
+
8
24
  ## [v3.2.3] - 2026-02-16
9
25
 
10
26
  ### Fixed
package/README.md CHANGED
@@ -6,6 +6,17 @@ AI-powered automotive parts assistant widget for partner websites.
6
6
 
7
7
  ---
8
8
 
9
+ ## 📖 Documentation Map
10
+
11
+ | Document | What It Covers |
12
+ |----------|---------------|
13
+ | **This README** | Quick start, installation, container setup, callbacks |
14
+ | **[BOB-DOCUMENTATION.md](./BOB-DOCUMENTATION.md)** | Full technical reference, props, troubleshooting, 3-stage install |
15
+ | **[CHANGELOG.md](./CHANGELOG.md)** | Version history |
16
+ | **[BOB-COMPLETE-PROCESS-FLOW.md](../../BOB-COMPLETE-PROCESS-FLOW.md)** (project root) | Bob's personality, conversation states, Brain diagnostics, canned speech, customer playbook |
17
+
18
+ ---
19
+
9
20
  ## 🚨 STOP — RUN THE INSTALLER FIRST
10
21
 
11
22
  Bob v3.1.19 includes an **executable 3-stage installer**. Do NOT skip this step.
@@ -458,14 +469,6 @@ Run locally: `cd packages/bob-widget && npx vitest run`
458
469
 
459
470
  ---
460
471
 
461
- ## 📖 Additional Documentation
462
-
463
- | Document | Description |
464
- |----------|-------------|
465
- | **[BOB-DOCUMENTATION.md](./BOB-DOCUMENTATION.md)** | Complete integration guide with troubleshooting |
466
- | **[CHANGELOG.md](./CHANGELOG.md)** | Version history and release notes |
467
- | **[install/carfix/](./install/carfix/)** | Installer scripts, templates, and verification checklists |
468
-
469
472
  ---
470
473
 
471
474
  ## Support
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Bob V2.0 Director Mode Tests
3
+ *
4
+ * Validates the three selling modes (Helper, Consultant, Gatekeeper)
5
+ * and Vehicle Awareness protocol introduced in V2.0.
6
+ *
7
+ * These tests call the bob-chat edge function directly and assert on
8
+ * the SSE response content and structure.
9
+ */
10
+ export {};
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Quick-Reply Navigation + Imperative stopSpeech Tests
3
+ *
4
+ * Covers:
5
+ * 1. QuickReply type shape & Message.quickReplies field
6
+ * 2. navigate_url SSE event handling logic
7
+ * 3. quick_replies SSE event attaches buttons to last assistant message
8
+ * 4. BobStandaloneHandle interface contract
9
+ * 5. onStopSpeechReady capture pattern
10
+ */
11
+ export {};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * v3.2.5 Bug Fix Regression Tests
3
+ *
4
+ * Covers three critical CARFIX production bugs:
5
+ * Bug #1 — Quick-reply buttons must call onInterrupt before onQuickReply (stop speech before navigating)
6
+ * Bug #2 — Imperative handle must call stopAllAudio (TTS + canned + searching), not just stopSpeech
7
+ * Bug #3 — Composite isSpeaking must be true when EITHER TTS or audio controller is playing
8
+ */
9
+ export {};
@@ -1,11 +1,28 @@
1
1
  import { default as React } from 'react';
2
2
  import { StandaloneWidgetProps } from '../types/partner';
3
3
 
4
+ /**
5
+ * Imperative handle exposed via ref on BobStandalone.
6
+ * Allows hosts to programmatically stop speech, e.g. when navigating away.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const bobRef = useRef<BobStandaloneHandle>(null);
11
+ * bobRef.current?.stopSpeech();
12
+ * <BobStandalone ref={bobRef} partner="CARFIX" ... />
13
+ * ```
14
+ */
15
+ export interface BobStandaloneHandle {
16
+ /** Stop any active speech (TTS or canned audio) immediately */
17
+ stopSpeech: () => void;
18
+ /** Alias for stopSpeech - interrupts Bob mid-sentence */
19
+ interrupt: () => void;
20
+ }
4
21
  /**
5
22
  * BobStandalone - Simplified partner integration component
6
23
  *
7
24
  * Reduces integration from 30+ lines to just 4 lines of code.
8
25
  * All configuration is auto-loaded from the bob_partners database table.
9
26
  */
10
- export declare const BobStandalone: React.FC<StandaloneWidgetProps>;
27
+ export declare const BobStandalone: React.ForwardRefExoticComponent<StandaloneWidgetProps & React.RefAttributes<BobStandaloneHandle>>;
11
28
  export default BobStandalone;
@@ -14,8 +14,12 @@ interface ContainedChatDrawerProps {
14
14
  isMuted?: boolean;
15
15
  onToggleMute?: () => void;
16
16
  isSpeaking?: boolean;
17
+ /** Called when a quick-reply CTA button is tapped — fires onNavigate(url), no chat message sent */
18
+ onQuickReply?: (url: string) => void;
17
19
  /** Counter height as percentage of container - chat positions above this */
18
20
  counterHeightPercent?: number;
21
+ /** Called when PTT is tapped while Bob is speaking — immediately stops audio */
22
+ onInterrupt?: () => void;
19
23
  }
20
24
  /**
21
25
  * ContainedChatDrawer - Premium Glassmorphism Chat Drawer
@@ -31,6 +31,10 @@ interface ContainedMobileBobLayoutProps {
31
31
  isResearching?: boolean;
32
32
  onAddToCart?: (product: Product) => void;
33
33
  onNavigateToProductPage?: (product: Product) => void;
34
+ /** Called when a quick-reply CTA button is tapped — fires onNavigate(url), no chat message sent */
35
+ onQuickReply?: (url: string) => void;
36
+ /** Called when PTT is tapped while Bob is speaking — immediately stops audio */
37
+ onInterrupt?: () => void;
34
38
  vehicle?: Vehicle | null;
35
39
  onChangeVehicle?: () => void;
36
40
  pendingVariants?: VariantCard[];
@@ -31,6 +31,10 @@ interface MobileBobLayoutProps {
31
31
  isResearching?: boolean;
32
32
  onAddToCart?: (product: Product) => void;
33
33
  onNavigateToProductPage?: (product: Product) => void;
34
+ /** Called when a quick-reply CTA button is tapped — fires onNavigate(url), no chat message sent */
35
+ onQuickReply?: (url: string) => void;
36
+ /** Called when PTT is tapped while Bob is speaking — immediately stops audio */
37
+ onInterrupt?: () => void;
34
38
  vehicle?: Vehicle | null;
35
39
  onChangeVehicle?: () => void;
36
40
  pendingVariants?: VariantCard[];
@@ -17,8 +17,12 @@ interface MobileChatDrawerProps {
17
17
  isSpeaking?: boolean;
18
18
  onAddToCart?: (product: Product) => void;
19
19
  onProductClick?: (product: Product) => void;
20
+ /** Called when a quick-reply CTA button is tapped — fires onNavigate(url), no chat message sent */
21
+ onQuickReply?: (url: string) => void;
20
22
  /** Counter height as percentage of container - chat positions above this */
21
23
  counterHeightPercent?: number;
24
+ /** Called when PTT is tapped while Bob is speaking — immediately stops audio */
25
+ onInterrupt?: () => void;
22
26
  }
23
27
  export declare const MobileChatDrawer: React.FC<MobileChatDrawerProps>;
24
28
  export {};
@@ -16,6 +16,10 @@ interface UseBobAnalyticsProps {
16
16
  callbacks?: BobCallbacks;
17
17
  /** Whether analytics is enabled */
18
18
  enabled?: boolean;
19
+ /** Bob Supabase URL for conversation tracking */
20
+ bobSupabaseUrl?: string;
21
+ /** Bob Supabase anon key for conversation tracking */
22
+ bobSupabaseKey?: string;
19
23
  }
20
24
  interface UseBobAnalyticsReturn {
21
25
  /** Track any event */
@@ -65,6 +69,13 @@ interface UseBobAnalyticsReturn {
65
69
  trackSpeechFailed: (textLength: number) => void;
66
70
  /** Track error */
67
71
  trackError: (errorType: string, errorMessage: string) => void;
72
+ /** Track conversation activity (upsert to bob_conversations) */
73
+ trackConversationActivity: (extras?: {
74
+ had_product_match?: boolean;
75
+ led_to_cart?: boolean;
76
+ vehicle_id?: string;
77
+ rego?: string;
78
+ }) => void;
68
79
  }
69
80
  /**
70
81
  * Hook for tracking Bob widget analytics events
@@ -73,5 +84,5 @@ interface UseBobAnalyticsReturn {
73
84
  * 1. GA4 via gtag() if configured and available
74
85
  * 2. onAnalyticsEvent callback for server-side storage
75
86
  */
76
- export declare function useBobAnalytics({ ga4Config, hostContext, callbacks, enabled, }: UseBobAnalyticsProps): UseBobAnalyticsReturn;
87
+ export declare function useBobAnalytics({ ga4Config, hostContext, callbacks, enabled, bobSupabaseUrl, bobSupabaseKey, }: UseBobAnalyticsProps): UseBobAnalyticsReturn;
77
88
  export default useBobAnalytics;
@@ -39,5 +39,7 @@ export declare const useBobChat: ({ setAnimationState, manualMode, talkingState,
39
39
  isSpeaking: boolean;
40
40
  identifiedVehicle: Vehicle | null;
41
41
  clearVehicle: () => void;
42
+ sendDirectMessage: (content: string) => void;
43
+ stopAllAudio: () => void;
42
44
  };
43
45
  export {};
@@ -0,0 +1,12 @@
1
+ type MicPermissionState = 'prompt' | 'granted' | 'denied' | 'unsupported';
2
+ /**
3
+ * Proactively requests microphone permission on mount so the browser dialog
4
+ * appears early (e.g. when Bob loads) rather than mid-conversation when the
5
+ * user first taps PTT.
6
+ *
7
+ * Once granted, the browser remembers the choice for the domain.
8
+ */
9
+ export declare const useMicPermission: (requestEarly?: boolean) => {
10
+ micPermission: MicPermissionState;
11
+ };
12
+ export {};
@@ -5,7 +5,7 @@ interface UseSpeechSynthesisProps {
5
5
  }
6
6
  export declare const useSpeechSynthesis: ({ onStart, onEnd, onFailed, }?: UseSpeechSynthesisProps) => {
7
7
  speak: (text: string, isGreeting?: boolean) => void;
8
- stop: () => void;
8
+ stop: (suppressCallbacks?: boolean) => void;
9
9
  pause: () => void;
10
10
  resume: () => void;
11
11
  isSpeaking: boolean;
package/dist/index.d.ts CHANGED
@@ -14,6 +14,7 @@ export { BobProvider, useBobContext, useBobSupabase, useBobSupabaseSafe, useHost
14
14
  export { BobWidget } from './components/BobWidget';
15
15
  export type { BobWidgetProps } from './components/BobWidget';
16
16
  export { BobStandalone } from './components/BobStandalone';
17
+ export type { BobStandaloneHandle } from './components/BobStandalone';
17
18
  export type { StandaloneWidgetProps } from './types/partner';
18
19
  export { usePartnerConfig, getFeatureFlag } from './hooks/usePartnerConfig';
19
20
  export type { PartnerConfig, PartnerFeatureFlags, EssentialCallbacks } from './types/partner';
@@ -37,6 +38,7 @@ export { useBobAnimation } from './hooks/useBobAnimation';
37
38
  export { useBobAnimationData } from './hooks/useBobAnimationData';
38
39
  export { useBobStateTransitions } from './hooks/useBobStateTransitions';
39
40
  export { useSpeechRecognition } from './hooks/useSpeechRecognition';
41
+ export { useMicPermission } from './hooks/useMicPermission';
40
42
  export { useBobBackdrop } from './hooks/useBobBackdrop';
41
43
  export { useThemeSettings } from './hooks/useThemeSettings';
42
44
  export { useSparkDeals } from './hooks/useSparkDeals';
@@ -46,6 +48,6 @@ export type { BobHealthCheckResult } from './hooks/useBobHealthCheck';
46
48
  export type { HostContext, HostUserContext, HostVehicleContext, HostCartContext, HostHistoryContext, BobConfig, HostApiConfig, BobCallbacks, BobProviderConfig, BobLayoutConfig, } from './types/context';
47
49
  export type { Vehicle } from './types/vehicle';
48
50
  export type { Product, APIPart, CartItem, ServicePackage, Partslot, QualityTiers, Part, } from './types/product';
49
- export type { Message, HighlightedProduct, } from './types/message';
51
+ export type { Message, HighlightedProduct, QuickReply, } from './types/message';
50
52
  export type { BobAnimationConfig, AnimationStateDefinition, BobLook, BobAnimationData, } from './hooks/useBobAnimationData';
51
53
  export type { BobEventName, BobAnalyticsEvent, BobGA4Config, SessionStartParams, MessageSentParams, VehicleIdentifiedParams, PartsViewedParams, ProductParams, CheckoutParams, SpeechParams, ErrorParams, } from './types/analytics';