@astermind/chatbot-template 1.0.0 → 2.1.2
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/CHANGELOG.md +97 -0
- package/README.md +196 -185
- package/dist/astermind-chatbot.esm.js +89 -252
- package/dist/astermind-chatbot.esm.js.map +1 -1
- package/dist/astermind-chatbot.min.js +3 -3
- package/dist/astermind-chatbot.min.js.map +1 -1
- package/dist/astermind-chatbot.umd.js +96 -256
- package/dist/astermind-chatbot.umd.js.map +1 -1
- package/dist/components/ChatbotWidget.d.ts +4 -0
- package/dist/components/ChatbotWidget.d.ts.map +1 -1
- package/dist/components/SourceCitation.d.ts +1 -1
- package/dist/components/SourceCitation.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useCybernetic.d.ts +44 -0
- package/dist/hooks/useCybernetic.d.ts.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/init.d.ts +26 -2
- package/dist/init.d.ts.map +1 -1
- package/dist/types.d.ts +8 -57
- package/dist/types.d.ts.map +1 -1
- package/package.json +10 -3
- package/dist/hooks/useOmega.d.ts +0 -27
- package/dist/hooks/useOmega.d.ts.map +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [1.0.1] - 2026-01-17
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Auto-increment version script (`scripts/bump-version.js`) that bumps patch version on each build
|
|
14
|
+
- New npm scripts for improved developer experience:
|
|
15
|
+
- `build:prod` - Clean build from scratch
|
|
16
|
+
- `clean` - Remove dist folder
|
|
17
|
+
- `lint:fix` - ESLint with auto-fix
|
|
18
|
+
- `verify` - Full verification (build + typecheck + test + audit)
|
|
19
|
+
- `version:minor` - Bump minor version
|
|
20
|
+
- `version:major` - Bump major version
|
|
21
|
+
- CHANGELOG.md following Keep a Changelog format
|
|
22
|
+
- NPMDEPLOYMENT.md with comprehensive publishing guide
|
|
23
|
+
- GITHUBDETAILS.md documenting repository configuration
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- `prepublishOnly` now runs full verification (`npm run verify`) before publishing
|
|
27
|
+
- Updated vitest from v1.x to v4.0.17 to resolve security vulnerabilities
|
|
28
|
+
- Improved .npmignore to exclude all internal files (scripts, templates, configs)
|
|
29
|
+
|
|
30
|
+
### Security
|
|
31
|
+
- Fixed moderate severity vulnerability in esbuild by upgrading vitest
|
|
32
|
+
|
|
33
|
+
## [1.0.0] - 2026-01-17
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
- Initial release of @astermind/chatbot-template
|
|
37
|
+
- **Core Widget Features**
|
|
38
|
+
- Embeddable floating chat bubble with 4 position options
|
|
39
|
+
- React components library (11 components)
|
|
40
|
+
- Vanilla JS standalone bundle (IIFE with React bundled)
|
|
41
|
+
- Full TypeScript support with exported types
|
|
42
|
+
- **React Components**
|
|
43
|
+
- `ChatbotWidget` - Main widget component
|
|
44
|
+
- `ChatBubble` - Floating trigger button
|
|
45
|
+
- `ChatWindow` - Chat window container
|
|
46
|
+
- `ChatHeader` - Window header with title/subtitle
|
|
47
|
+
- `ChatInput` - Message input with send button
|
|
48
|
+
- `MessageList` - Scrollable message container
|
|
49
|
+
- `MessageBubble` - Individual message bubble
|
|
50
|
+
- `ActionCard` - Agentic action confirmation card
|
|
51
|
+
- `SourceCitation` - Source reference component
|
|
52
|
+
- `StatusIndicator` - Connection status display
|
|
53
|
+
- `TypingIndicator` - Typing/loading animation
|
|
54
|
+
- **React Hooks**
|
|
55
|
+
- `useOmega` - Direct API client access
|
|
56
|
+
- `useChat` - Chat state management
|
|
57
|
+
- `useTheme` - Theme customization
|
|
58
|
+
- `useScrollToBottom` - Auto-scroll behavior
|
|
59
|
+
- **RAG Integration**
|
|
60
|
+
- AsterMind backend integration (`/api/external/chat` endpoints)
|
|
61
|
+
- Streaming responses via Server-Sent Events (SSE)
|
|
62
|
+
- Source citations with collapsible references
|
|
63
|
+
- Session management with automatic sessionId handling
|
|
64
|
+
- Confidence level indicators
|
|
65
|
+
- **Agentic Capabilities**
|
|
66
|
+
- Navigation actions
|
|
67
|
+
- Form filling
|
|
68
|
+
- Element clicking
|
|
69
|
+
- Modal triggering
|
|
70
|
+
- Scrolling to elements
|
|
71
|
+
- Element highlighting
|
|
72
|
+
- Custom action handlers
|
|
73
|
+
- Action cards UI with confirm/cancel
|
|
74
|
+
- Confidence thresholds for auto-execution
|
|
75
|
+
- Site map configuration
|
|
76
|
+
- **Theming & Customization**
|
|
77
|
+
- 20+ CSS custom properties
|
|
78
|
+
- JavaScript theme configuration object
|
|
79
|
+
- Configurable dimensions (width, height, bubble size)
|
|
80
|
+
- Full color customization
|
|
81
|
+
- Typography settings
|
|
82
|
+
- Border radius and shadow effects
|
|
83
|
+
- **Offline Support**
|
|
84
|
+
- Graceful degradation when offline
|
|
85
|
+
- Custom offline message configuration
|
|
86
|
+
- Connection status indicator
|
|
87
|
+
- Optional local RAG fallback
|
|
88
|
+
|
|
89
|
+
### Technical
|
|
90
|
+
- ESM, UMD, and IIFE build outputs
|
|
91
|
+
- Tree-shakeable with `sideEffects` configuration
|
|
92
|
+
- React 17, 18, and 19 peer dependency support
|
|
93
|
+
- Node.js >= 18.0.0 engine requirement
|
|
94
|
+
|
|
95
|
+
[Unreleased]: https://github.com/AsterMindAI/chatbot-template/compare/v1.0.1...HEAD
|
|
96
|
+
[1.0.1]: https://github.com/AsterMindAI/chatbot-template/compare/v1.0.0...v1.0.1
|
|
97
|
+
[1.0.0]: https://github.com/AsterMindAI/chatbot-template/releases/tag/v1.0.0
|
package/README.md
CHANGED
|
@@ -9,11 +9,12 @@ Embeddable AI chatbot widget for [AsterMind](https://astermind.ai) RAG - a drop-
|
|
|
9
9
|
|
|
10
10
|
## Table of Contents
|
|
11
11
|
|
|
12
|
+
- [Architecture](#architecture)
|
|
12
13
|
- [Features](#features)
|
|
13
14
|
- [Installation](#installation)
|
|
14
15
|
- [Quick Start](#quick-start)
|
|
16
|
+
- [Configuration in Your Application](#configuration-in-your-application)
|
|
15
17
|
- [Configuration Reference](#configuration-reference)
|
|
16
|
-
- [Cybernetic Chatbot Integration](#cybernetic-chatbot-integration)
|
|
17
18
|
- [Theming](#theming)
|
|
18
19
|
- [React Hooks API](#react-hooks-api)
|
|
19
20
|
- [Components API](#components-api)
|
|
@@ -24,24 +25,63 @@ Embeddable AI chatbot widget for [AsterMind](https://astermind.ai) RAG - a drop-
|
|
|
24
25
|
|
|
25
26
|
---
|
|
26
27
|
|
|
28
|
+
## Architecture
|
|
29
|
+
|
|
30
|
+
This package is the **UI layer** for the AsterMind Chatbot system. It provides pre-built React components and hooks for embedding a chatbot in your application.
|
|
31
|
+
|
|
32
|
+
### Package Dependencies
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Your Application
|
|
36
|
+
│
|
|
37
|
+
└── @astermind/chatbot-template (this package - UI components)
|
|
38
|
+
│
|
|
39
|
+
└── @astermind/cybernetic-chatbot-client (required - API client)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**Important**: `@astermind/cybernetic-chatbot-client` is automatically installed as a dependency. It provides:
|
|
43
|
+
|
|
44
|
+
- **API Communication** - Connects to your AsterMind backend
|
|
45
|
+
- **Streaming Responses** - SSE-based token-by-token message display
|
|
46
|
+
- **Offline Fallback** - Local RAG processing with IndexedDB cache
|
|
47
|
+
- **Agentic Capabilities** - DOM interactions (optional, tree-shakeable)
|
|
48
|
+
|
|
49
|
+
### Where to Configure
|
|
50
|
+
|
|
51
|
+
All configuration is done in **your application code**, not in node_modules:
|
|
52
|
+
|
|
53
|
+
| Configuration Method | Where to Set |
|
|
54
|
+
|---------------------|--------------|
|
|
55
|
+
| React Props | In your component: `<ChatbotWidget apiKey="..." />` |
|
|
56
|
+
| Environment Variables | In your `.env` file |
|
|
57
|
+
| SSR Injection | In your server template |
|
|
58
|
+
| Global Object | In your HTML/JS before loading |
|
|
59
|
+
| Data Attributes | On your script tag |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
27
63
|
## Features
|
|
28
64
|
|
|
29
|
-
### Core Widget Features
|
|
65
|
+
### Core Widget Features (this package)
|
|
30
66
|
|
|
31
67
|
- **Embeddable Floating Chat Bubble** - Position anywhere on the page (4 corners)
|
|
32
68
|
- **React Components Library** - 11 fully customizable components
|
|
33
69
|
- **Vanilla JS Standalone Bundle** - IIFE format with React bundled for non-React sites
|
|
34
70
|
- **Full TypeScript Support** - Complete type definitions exported
|
|
71
|
+
- **Theming System** - 20+ CSS custom properties for full visual customization
|
|
35
72
|
|
|
36
|
-
### RAG
|
|
73
|
+
### RAG & Backend Features (via cybernetic-chatbot-client)
|
|
37
74
|
|
|
38
75
|
- **AsterMind Backend Integration** - Connects to `/api/external/chat` endpoints
|
|
39
76
|
- **Streaming Responses** - SSE-based token-by-token message display
|
|
40
77
|
- **Source Citations** - Collapsible source references with confidence levels
|
|
41
78
|
- **Session Management** - Automatic sessionId handling across conversations
|
|
42
|
-
- **
|
|
79
|
+
- **Offline Fallback** - Local RAG processing when backend is unavailable
|
|
80
|
+
- **Connection Status** - Automatic online/offline/connecting/error states
|
|
81
|
+
|
|
82
|
+
### Agentic Capabilities (via cybernetic-chatbot-client)
|
|
43
83
|
|
|
44
|
-
|
|
84
|
+
When enabled, the chatbot can perform actions on your page:
|
|
45
85
|
|
|
46
86
|
- **Navigation Actions** - Navigate users to specific pages
|
|
47
87
|
- **Form Filling** - Auto-fill form fields with suggested values
|
|
@@ -50,26 +90,8 @@ Embeddable AI chatbot widget for [AsterMind](https://astermind.ai) RAG - a drop-
|
|
|
50
90
|
- **Scrolling** - Scroll to specific elements
|
|
51
91
|
- **Element Highlighting** - Draw attention to page elements
|
|
52
92
|
- **Custom Action Handlers** - Define your own action types
|
|
53
|
-
- **Action Cards UI** - Confirm/cancel interface for proposed actions
|
|
54
|
-
- **Confidence Thresholds** - Auto-execute high-confidence actions
|
|
55
|
-
- **Site Map Configuration** - Define navigable pages for the agent
|
|
56
|
-
|
|
57
|
-
### Offline & Fallback
|
|
58
|
-
|
|
59
|
-
- **Graceful Degradation** - Works when connection is lost
|
|
60
|
-
- **Custom Offline Message** - Configure what users see offline
|
|
61
|
-
- **Connection Status Indicator** - Shows online/offline/connecting/error states
|
|
62
|
-
- **Optional Local RAG Fallback** - Use Cybernetic RAG locally when offline
|
|
63
93
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- **20+ CSS Custom Properties** - Full visual customization via CSS variables
|
|
67
|
-
- **JavaScript Theme Object** - Configure themes programmatically
|
|
68
|
-
- **4 Position Options** - bottom-right, bottom-left, top-right, top-left
|
|
69
|
-
- **Configurable Dimensions** - Width, height, bubble size
|
|
70
|
-
- **Full Color Customization** - Every color is customizable
|
|
71
|
-
- **Typography Settings** - Font family and size
|
|
72
|
-
- **Border Radius & Shadows** - Visual effects customization
|
|
94
|
+
Agentic capabilities are tree-shakeable - they're only included in your bundle if you import and use them.
|
|
73
95
|
|
|
74
96
|
---
|
|
75
97
|
|
|
@@ -81,6 +103,8 @@ Embeddable AI chatbot widget for [AsterMind](https://astermind.ai) RAG - a drop-
|
|
|
81
103
|
npm install @astermind/chatbot-template
|
|
82
104
|
```
|
|
83
105
|
|
|
106
|
+
This automatically installs `@astermind/cybernetic-chatbot-client` as a dependency.
|
|
107
|
+
|
|
84
108
|
### CDN (Vanilla JS)
|
|
85
109
|
|
|
86
110
|
```html
|
|
@@ -134,14 +158,108 @@ function App() {
|
|
|
134
158
|
|
|
135
159
|
---
|
|
136
160
|
|
|
161
|
+
## Configuration in Your Application
|
|
162
|
+
|
|
163
|
+
All configuration is done in **your application code**. The chatbot-template reads configuration from several sources in your project.
|
|
164
|
+
|
|
165
|
+
### React Applications
|
|
166
|
+
|
|
167
|
+
**Option 1: Pass props directly**
|
|
168
|
+
```tsx
|
|
169
|
+
<ChatbotWidget
|
|
170
|
+
apiUrl="https://api.astermind.ai"
|
|
171
|
+
apiKey="am_your-api-key"
|
|
172
|
+
position="bottom-right"
|
|
173
|
+
/>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**Option 2: Use environment variables**
|
|
177
|
+
|
|
178
|
+
Create a `.env` file in your project root:
|
|
179
|
+
|
|
180
|
+
```env
|
|
181
|
+
# Vite projects
|
|
182
|
+
VITE_ASTERMIND_RAG_API_KEY=am_your_api_key
|
|
183
|
+
VITE_ASTERMIND_RAG_API_SERVER_URL=https://api.astermind.ai
|
|
184
|
+
|
|
185
|
+
# Create React App projects
|
|
186
|
+
REACT_APP_ASTERMIND_RAG_API_KEY=am_your_api_key
|
|
187
|
+
REACT_APP_ASTERMIND_RAG_API_SERVER_URL=https://api.astermind.ai
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Then use the widget without explicit props:
|
|
191
|
+
```tsx
|
|
192
|
+
<ChatbotWidget position="bottom-right" />
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Vanilla JS Applications
|
|
196
|
+
|
|
197
|
+
**Option 1: Pass config to init()**
|
|
198
|
+
```javascript
|
|
199
|
+
AsterMindChatbot.init({
|
|
200
|
+
apiKey: 'am_your_api_key',
|
|
201
|
+
apiUrl: 'https://api.astermind.ai',
|
|
202
|
+
position: 'bottom-right'
|
|
203
|
+
});
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Option 2: Global config object**
|
|
207
|
+
```html
|
|
208
|
+
<script>
|
|
209
|
+
window.astermindConfig = {
|
|
210
|
+
apiKey: 'am_your_api_key',
|
|
211
|
+
apiUrl: 'https://api.astermind.ai'
|
|
212
|
+
};
|
|
213
|
+
</script>
|
|
214
|
+
<script src="astermind-chatbot.min.js"></script>
|
|
215
|
+
<script>
|
|
216
|
+
AsterMindChatbot.init();
|
|
217
|
+
</script>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Option 3: Script data attributes**
|
|
221
|
+
```html
|
|
222
|
+
<script
|
|
223
|
+
src="astermind-chatbot.min.js"
|
|
224
|
+
data-astermind-key="am_your_api_key"
|
|
225
|
+
data-astermind-url="https://api.astermind.ai"
|
|
226
|
+
></script>
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### SSR / Server-Side Rendering
|
|
230
|
+
|
|
231
|
+
For Next.js, Nuxt, or other SSR frameworks:
|
|
232
|
+
|
|
233
|
+
```html
|
|
234
|
+
<script>
|
|
235
|
+
window.__ASTERMIND_CONFIG__ = {
|
|
236
|
+
apiKey: '<%= process.env.ASTERMIND_RAG_API_KEY %>',
|
|
237
|
+
apiUrl: '<%= process.env.ASTERMIND_RAG_API_SERVER_URL %>'
|
|
238
|
+
};
|
|
239
|
+
</script>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
137
244
|
## Configuration Reference
|
|
138
245
|
|
|
139
|
-
###
|
|
246
|
+
### Configuration Priority
|
|
140
247
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
248
|
+
The widget supports multiple configuration methods with this priority (highest to lowest):
|
|
249
|
+
|
|
250
|
+
1. **Props / init() config** - Direct configuration passed to the component or `init()` function
|
|
251
|
+
2. **Environment variables** - `VITE_ASTERMIND_RAG_API_KEY`, `REACT_APP_ASTERMIND_RAG_API_KEY`
|
|
252
|
+
3. **SSR-injected config** - `window.__ASTERMIND_CONFIG__`
|
|
253
|
+
4. **Global object** - `window.astermindConfig`
|
|
254
|
+
5. **Script data attributes** - `data-astermind-key`, `data-astermind-url`
|
|
255
|
+
|
|
256
|
+
### API Key and URL
|
|
257
|
+
|
|
258
|
+
| Option | Type | Default | Description |
|
|
259
|
+
|--------|------|---------|-------------|
|
|
260
|
+
| `apiKey` | `string` | (from env) | Your AsterMind API key (starts with `am_`). Falls back to environment variables. |
|
|
261
|
+
| `apiUrl` | `string` | `'https://api.astermind.ai'` | Backend API URL. Falls back to environment variables. |
|
|
262
|
+
| `throwOnMissingKey` | `boolean` | `true` | Throw error if API key is missing. Set to `false` to log warning instead. |
|
|
145
263
|
|
|
146
264
|
### Widget Options
|
|
147
265
|
|
|
@@ -163,21 +281,21 @@ Customize appearance via the `theme` object:
|
|
|
163
281
|
```javascript
|
|
164
282
|
{
|
|
165
283
|
theme: {
|
|
166
|
-
primaryColor: '#4F46E5',
|
|
167
|
-
primaryHover: '#4338CA',
|
|
168
|
-
backgroundColor: '#ffffff',
|
|
169
|
-
surfaceColor: '#f3f4f6',
|
|
170
|
-
textColor: '#1f2937',
|
|
171
|
-
textMuted: '#6b7280',
|
|
172
|
-
borderColor: '#e5e7eb',
|
|
173
|
-
userBubbleBackground: '#4F46E5',
|
|
174
|
-
userBubbleText: '#ffffff',
|
|
175
|
-
botBubbleBackground: '#f3f4f6',
|
|
176
|
-
botBubbleText: '#1f2937',
|
|
177
|
-
widgetWidth: '380px',
|
|
178
|
-
widgetHeight: '520px',
|
|
179
|
-
bubbleSize: '60px',
|
|
180
|
-
borderRadius: '12px',
|
|
284
|
+
primaryColor: '#4F46E5',
|
|
285
|
+
primaryHover: '#4338CA',
|
|
286
|
+
backgroundColor: '#ffffff',
|
|
287
|
+
surfaceColor: '#f3f4f6',
|
|
288
|
+
textColor: '#1f2937',
|
|
289
|
+
textMuted: '#6b7280',
|
|
290
|
+
borderColor: '#e5e7eb',
|
|
291
|
+
userBubbleBackground: '#4F46E5',
|
|
292
|
+
userBubbleText: '#ffffff',
|
|
293
|
+
botBubbleBackground: '#f3f4f6',
|
|
294
|
+
botBubbleText: '#1f2937',
|
|
295
|
+
widgetWidth: '380px',
|
|
296
|
+
widgetHeight: '520px',
|
|
297
|
+
bubbleSize: '60px',
|
|
298
|
+
borderRadius: '12px',
|
|
181
299
|
fontFamily: "'Inter', system-ui, sans-serif",
|
|
182
300
|
fontSize: '14px',
|
|
183
301
|
shadow: '0 4px 20px rgba(0, 0, 0, 0.15)'
|
|
@@ -187,26 +305,20 @@ Customize appearance via the `theme` object:
|
|
|
187
305
|
|
|
188
306
|
### Agent Configuration
|
|
189
307
|
|
|
190
|
-
Enable agentic capabilities:
|
|
308
|
+
Enable agentic capabilities (powered by cybernetic-chatbot-client):
|
|
191
309
|
|
|
192
310
|
```javascript
|
|
193
311
|
{
|
|
194
312
|
agent: {
|
|
195
313
|
enabled: true,
|
|
196
|
-
confidenceThreshold: 0.8,
|
|
314
|
+
confidenceThreshold: 0.8,
|
|
197
315
|
siteMap: [
|
|
198
316
|
{ path: '/products', name: 'Products', description: 'View products' },
|
|
199
|
-
{ path: '/contact', name: 'Contact', description: 'Contact us' }
|
|
200
|
-
{ path: '/pricing', name: 'Pricing', description: 'View pricing plans' }
|
|
317
|
+
{ path: '/contact', name: 'Contact', description: 'Contact us' }
|
|
201
318
|
],
|
|
202
319
|
customActions: {
|
|
203
320
|
openModal: async (params) => {
|
|
204
|
-
// Custom action handler - open a modal
|
|
205
321
|
document.getElementById(params.modalId).showModal();
|
|
206
|
-
},
|
|
207
|
-
trackEvent: async (params) => {
|
|
208
|
-
// Custom analytics tracking
|
|
209
|
-
analytics.track(params.eventName, params.data);
|
|
210
322
|
}
|
|
211
323
|
}
|
|
212
324
|
}
|
|
@@ -238,48 +350,6 @@ Configure offline behavior:
|
|
|
238
350
|
|
|
239
351
|
---
|
|
240
352
|
|
|
241
|
-
## Cybernetic Chatbot Integration
|
|
242
|
-
|
|
243
|
-
This widget is designed to work seamlessly with the `@astermind/cybernetic-chatbot-client` for advanced RAG capabilities.
|
|
244
|
-
|
|
245
|
-
### How It Works
|
|
246
|
-
|
|
247
|
-
1. **Widget sends messages** to your AsterMind backend via the configured `apiUrl`
|
|
248
|
-
2. **Backend processes queries** using your RAG pipeline and returns responses
|
|
249
|
-
3. **Streaming responses** arrive via Server-Sent Events (SSE) for real-time display
|
|
250
|
-
4. **Agentic actions** are proposed by the AI and confirmed via Action Cards
|
|
251
|
-
|
|
252
|
-
### API Endpoints
|
|
253
|
-
|
|
254
|
-
The widget connects to these backend endpoints:
|
|
255
|
-
|
|
256
|
-
| Endpoint | Method | Description |
|
|
257
|
-
|----------|--------|-------------|
|
|
258
|
-
| `/api/external/health` | GET | Health check, verifies connection |
|
|
259
|
-
| `/api/external/chat` | POST | Non-streaming chat endpoint |
|
|
260
|
-
| `/api/external/chat/stream` | POST | Streaming chat endpoint (SSE) |
|
|
261
|
-
|
|
262
|
-
### SSE Event Format
|
|
263
|
-
|
|
264
|
-
```
|
|
265
|
-
data: {"type": "chunk", "content": "Hello"}
|
|
266
|
-
data: {"type": "chunk", "content": " there!"}
|
|
267
|
-
data: {"type": "sources", "sources": [{"title": "Doc", "url": "..."}]}
|
|
268
|
-
data: {"type": "action", "action": {"type": "navigate", "path": "/products"}}
|
|
269
|
-
data: {"type": "done", "sessionId": "sess_xxx"}
|
|
270
|
-
data: {"type": "error", "error": "Error message"}
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
### Offline Fallback
|
|
274
|
-
|
|
275
|
-
When offline or disconnected:
|
|
276
|
-
|
|
277
|
-
1. Widget shows connection status indicator
|
|
278
|
-
2. Custom offline message is displayed
|
|
279
|
-
3. If `@astermind/cybernetic-chatbot-client` is installed with local RAG enabled, queries can still be processed locally
|
|
280
|
-
|
|
281
|
-
---
|
|
282
|
-
|
|
283
353
|
## Theming
|
|
284
354
|
|
|
285
355
|
### CSS Variables
|
|
@@ -288,7 +358,6 @@ Override CSS variables in your stylesheet for quick customization:
|
|
|
288
358
|
|
|
289
359
|
```css
|
|
290
360
|
:root {
|
|
291
|
-
/* Colors */
|
|
292
361
|
--astermind-primary: #10B981;
|
|
293
362
|
--astermind-primary-hover: #059669;
|
|
294
363
|
--astermind-background: #ffffff;
|
|
@@ -296,25 +365,15 @@ Override CSS variables in your stylesheet for quick customization:
|
|
|
296
365
|
--astermind-text: #1f2937;
|
|
297
366
|
--astermind-text-muted: #6b7280;
|
|
298
367
|
--astermind-border: #e5e7eb;
|
|
299
|
-
|
|
300
|
-
/* User messages */
|
|
301
368
|
--astermind-user-bubble-bg: #10B981;
|
|
302
369
|
--astermind-user-bubble-text: #ffffff;
|
|
303
|
-
|
|
304
|
-
/* Bot messages */
|
|
305
370
|
--astermind-bot-bubble-bg: #f3f4f6;
|
|
306
371
|
--astermind-bot-bubble-text: #1f2937;
|
|
307
|
-
|
|
308
|
-
/* Dimensions */
|
|
309
372
|
--astermind-widget-width: 400px;
|
|
310
373
|
--astermind-widget-height: 600px;
|
|
311
374
|
--astermind-bubble-size: 64px;
|
|
312
|
-
|
|
313
|
-
/* Effects */
|
|
314
375
|
--astermind-border-radius: 16px;
|
|
315
376
|
--astermind-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
|
|
316
|
-
|
|
317
|
-
/* Typography */
|
|
318
377
|
--astermind-font-family: 'Inter', system-ui, sans-serif;
|
|
319
378
|
--astermind-font-size: 14px;
|
|
320
379
|
}
|
|
@@ -322,7 +381,7 @@ Override CSS variables in your stylesheet for quick customization:
|
|
|
322
381
|
|
|
323
382
|
### CSS Classes
|
|
324
383
|
|
|
325
|
-
All elements use the `astermind-` prefix
|
|
384
|
+
All elements use the `astermind-` prefix:
|
|
326
385
|
|
|
327
386
|
| Class | Element |
|
|
328
387
|
|-------|---------|
|
|
@@ -343,12 +402,12 @@ All elements use the `astermind-` prefix for easy targeting:
|
|
|
343
402
|
|
|
344
403
|
## React Hooks API
|
|
345
404
|
|
|
346
|
-
###
|
|
405
|
+
### useCybernetic
|
|
347
406
|
|
|
348
407
|
Direct API client access for custom implementations:
|
|
349
408
|
|
|
350
409
|
```tsx
|
|
351
|
-
import {
|
|
410
|
+
import { useCybernetic } from '@astermind/chatbot-template';
|
|
352
411
|
|
|
353
412
|
function MyComponent() {
|
|
354
413
|
const {
|
|
@@ -358,8 +417,10 @@ function MyComponent() {
|
|
|
358
417
|
isProcessing, // Whether a request is in progress
|
|
359
418
|
lastError, // Last error that occurred
|
|
360
419
|
sessionId, // Current session ID
|
|
361
|
-
clearSession
|
|
362
|
-
|
|
420
|
+
clearSession, // Clear the current session
|
|
421
|
+
syncCache, // Sync cache for offline use
|
|
422
|
+
client // Underlying CyberneticClient instance
|
|
423
|
+
} = useCybernetic({
|
|
363
424
|
apiUrl: 'https://api.example.com',
|
|
364
425
|
apiKey: 'am_your-api-key'
|
|
365
426
|
});
|
|
@@ -368,15 +429,6 @@ function MyComponent() {
|
|
|
368
429
|
const response = await sendMessage('Hello!');
|
|
369
430
|
console.log(response.reply, response.sources);
|
|
370
431
|
};
|
|
371
|
-
|
|
372
|
-
const handleStreamingSend = () => {
|
|
373
|
-
sendMessageStream('Tell me about...', {
|
|
374
|
-
onChunk: (chunk) => console.log('Chunk:', chunk),
|
|
375
|
-
onSources: (sources) => console.log('Sources:', sources),
|
|
376
|
-
onDone: (sessionId) => console.log('Done:', sessionId),
|
|
377
|
-
onError: (error) => console.error('Error:', error)
|
|
378
|
-
});
|
|
379
|
-
};
|
|
380
432
|
}
|
|
381
433
|
```
|
|
382
434
|
|
|
@@ -412,7 +464,6 @@ function MyComponent() {
|
|
|
412
464
|
borderRadius: '16px'
|
|
413
465
|
});
|
|
414
466
|
|
|
415
|
-
// cssVariables contains the CSS custom property declarations
|
|
416
467
|
return <div style={cssVariables}>...</div>;
|
|
417
468
|
}
|
|
418
469
|
```
|
|
@@ -457,48 +508,6 @@ import {
|
|
|
457
508
|
} from '@astermind/chatbot-template';
|
|
458
509
|
```
|
|
459
510
|
|
|
460
|
-
### Component Example
|
|
461
|
-
|
|
462
|
-
Build a custom chat interface:
|
|
463
|
-
|
|
464
|
-
```tsx
|
|
465
|
-
import {
|
|
466
|
-
ChatWindow,
|
|
467
|
-
ChatHeader,
|
|
468
|
-
MessageList,
|
|
469
|
-
MessageBubble,
|
|
470
|
-
ChatInput,
|
|
471
|
-
StatusIndicator
|
|
472
|
-
} from '@astermind/chatbot-template';
|
|
473
|
-
import '@astermind/chatbot-template/styles';
|
|
474
|
-
|
|
475
|
-
function CustomChat({ messages, onSend, status }) {
|
|
476
|
-
return (
|
|
477
|
-
<ChatWindow>
|
|
478
|
-
<ChatHeader
|
|
479
|
-
title="Support Bot"
|
|
480
|
-
subtitle="Always here to help"
|
|
481
|
-
/>
|
|
482
|
-
<StatusIndicator status={status} />
|
|
483
|
-
<MessageList>
|
|
484
|
-
{messages.map(msg => (
|
|
485
|
-
<MessageBubble
|
|
486
|
-
key={msg.id}
|
|
487
|
-
content={msg.content}
|
|
488
|
-
role={msg.role}
|
|
489
|
-
timestamp={msg.timestamp}
|
|
490
|
-
/>
|
|
491
|
-
))}
|
|
492
|
-
</MessageList>
|
|
493
|
-
<ChatInput
|
|
494
|
-
onSend={onSend}
|
|
495
|
-
placeholder="Ask a question..."
|
|
496
|
-
/>
|
|
497
|
-
</ChatWindow>
|
|
498
|
-
);
|
|
499
|
-
}
|
|
500
|
-
```
|
|
501
|
-
|
|
502
511
|
---
|
|
503
512
|
|
|
504
513
|
## TypeScript Support
|
|
@@ -507,33 +516,35 @@ Full TypeScript support with exported types:
|
|
|
507
516
|
|
|
508
517
|
```typescript
|
|
509
518
|
import type {
|
|
510
|
-
//
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
AgentConfig,
|
|
514
|
-
FallbackConfig,
|
|
515
|
-
|
|
516
|
-
// Messages
|
|
519
|
+
// Template-specific types
|
|
520
|
+
AsterMindChatbotProps,
|
|
521
|
+
ChatbotTheme,
|
|
517
522
|
ChatMessage,
|
|
518
|
-
MessageRole,
|
|
519
|
-
|
|
520
|
-
// Actions
|
|
521
523
|
AgentAction,
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
524
|
+
ChatState,
|
|
525
|
+
WidgetPosition,
|
|
526
|
+
AgentConfig,
|
|
527
|
+
FallbackConfig,
|
|
528
|
+
SiteMapEntry,
|
|
529
|
+
VanillaInitConfig,
|
|
530
|
+
SendOptions,
|
|
531
|
+
|
|
532
|
+
// Re-exported from @astermind/cybernetic-chatbot-client
|
|
533
|
+
CyberneticConfig,
|
|
534
|
+
CyberneticResponse,
|
|
535
|
+
CyberneticError,
|
|
528
536
|
Source,
|
|
529
|
-
SourceCitation,
|
|
530
|
-
|
|
531
|
-
// Status
|
|
532
537
|
ConnectionStatus,
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
538
|
+
ConfidenceLevel,
|
|
539
|
+
StreamCallbacks,
|
|
540
|
+
AskOptions,
|
|
541
|
+
CachedDocument,
|
|
542
|
+
CacheStatus,
|
|
543
|
+
AgenticConfig
|
|
536
544
|
} from '@astermind/chatbot-template';
|
|
545
|
+
|
|
546
|
+
// CyberneticClient class is also re-exported for advanced usage
|
|
547
|
+
import { CyberneticClient } from '@astermind/chatbot-template';
|
|
537
548
|
```
|
|
538
549
|
|
|
539
550
|
---
|