New:Microsoft Teams Notifications Are Now Available in Socket.Learn more →
Get Started

@astermind/chatbot-template

Package Overview
Dependencies
Maintainers
2
Versions
26
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@astermind/chatbot-template

Embeddable AI chatbot widget with React support for AsterMind RAG

npmnpm
Version
2.2.19
Version published
Weekly downloads
3
-72.73%
Maintainers
2
Weekly downloads
 
Created
Source

@astermind/chatbot-template

Embeddable AI chatbot widget for AsterMind RAG - a drop-in chat UI that connects to your AsterMind backend with full agentic capabilities.

npm version License: MIT

Table of Contents

Architecture

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.

Package Dependencies

Your Application
    │
    └── @astermind/chatbot-template (this package - UI components)
            │
            └── @astermind/cybernetic-chatbot-client (required - API client)

Important: @astermind/cybernetic-chatbot-client is automatically installed as a dependency. It provides:

  • API Communication - Connects to your AsterMind backend
  • Streaming Responses - SSE-based token-by-token message display
  • Offline Fallback - Local RAG processing with IndexedDB cache
  • Agentic Capabilities - DOM interactions (optional, tree-shakeable)

Where to Configure

All configuration is done in your application code, not in node_modules:

Configuration MethodWhere to Set
React PropsIn your component: <ChatbotWidget apiKey="..." />
Environment VariablesIn your .env file
SSR InjectionIn your server template
Global ObjectIn your HTML/JS before loading
Data AttributesOn your script tag

Features

Core Widget Features (this package)

  • Embeddable Floating Chat Bubble - Position anywhere on the page (4 corners)
  • React Components Library - 11 fully customizable components
  • Vanilla JS Standalone Bundle - IIFE format with React bundled for non-React sites
  • Full TypeScript Support - Complete type definitions exported
  • Theming System - 20+ CSS custom properties for full visual customization

RAG & Backend Features (via cybernetic-chatbot-client)

  • AsterMind Backend Integration - Connects to /api/external/chat endpoints
  • Streaming Responses - SSE-based token-by-token message display
  • Source Citations - Collapsible source references with confidence levels
  • Session Management - Automatic sessionId handling across conversations
  • Offline Fallback - Local RAG processing when backend is unavailable
  • Connection Status - Automatic online/offline/connecting/error states

Agentic Capabilities (via cybernetic-chatbot-client)

When enabled, the chatbot can perform actions on your page:

  • Navigation Actions - Navigate users to specific pages
  • Form Filling - Auto-fill form fields with suggested values
  • Element Clicking - Programmatically click buttons and links
  • Modal Triggering - Open dialogs and modals
  • Scrolling - Scroll to specific elements
  • Element Highlighting - Draw attention to page elements
  • Custom Action Handlers - Define your own action types

Agentic capabilities are tree-shakeable - they're only included in your bundle if you import and use them.

Installation

NPM (React Projects)

npm install @astermind/chatbot-template

This automatically installs @astermind/cybernetic-chatbot-client as a dependency.

CDN (Vanilla JS)

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@astermind/chatbot-template/dist/astermind-chatbot.css">
<script src="https://cdn.jsdelivr.net/npm/@astermind/chatbot-template/dist/astermind-chatbot.min.js"></script>

Quick Start

React Usage

import { ChatbotWidget } from '@astermind/chatbot-template';
import '@astermind/chatbot-template/styles';

function App() {
  return (
    <ChatbotWidget
      apiUrl="https://your-api-url.com"
      apiKey="am_your-api-key"
      position="bottom-right"
      greeting="Hi! How can I help you today?"
    />
  );
}

Vanilla JS Usage

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@astermind/chatbot-template/dist/astermind-chatbot.css">
</head>
<body>
  <script src="https://cdn.jsdelivr.net/npm/@astermind/chatbot-template/dist/astermind-chatbot.min.js"></script>
  <script>
    AsterMindChatbot.init({
      apiUrl: 'https://your-api-url.com',
      apiKey: 'am_your-api-key',
      position: 'bottom-right',
      greeting: 'Hi! How can I help you today?'
    });
  </script>
</body>
</html>

Configuration in Your Application

All configuration is done in your application code. The chatbot-template reads configuration from several sources in your project.

React Applications

Option 1: Pass props directly

<ChatbotWidget
  apiUrl="https://api.astermind.ai"
  apiKey="am_your-api-key"
  position="bottom-right"
/>

Option 2: Use environment variables

Create a .env file in your project root:

# Vite projects
VITE_ASTERMIND_RAG_API_KEY=am_your_api_key
VITE_ASTERMIND_RAG_API_SERVER_URL=https://api.astermind.ai

# Create React App projects
REACT_APP_ASTERMIND_RAG_API_KEY=am_your_api_key
REACT_APP_ASTERMIND_RAG_API_SERVER_URL=https://api.astermind.ai

Then use the widget without explicit props:

<ChatbotWidget position="bottom-right" />

Vanilla JS Applications

Option 1: Pass config to init()

AsterMindChatbot.init({
  apiKey: 'am_your_api_key',
  apiUrl: 'https://api.astermind.ai',
  position: 'bottom-right'
});

Option 2: Global config object

<script>
  window.astermindConfig = {
    apiKey: 'am_your_api_key',
    apiUrl: 'https://api.astermind.ai'
  };
</script>
<script src="astermind-chatbot.min.js"></script>
<script>
  AsterMindChatbot.init();
</script>

Option 3: Script data attributes

<script
  src="astermind-chatbot.min.js"
  data-astermind-key="am_your_api_key"
  data-astermind-url="https://api.astermind.ai"
></script>

SSR / Server-Side Rendering

For Next.js, Nuxt, or other SSR frameworks:

<script>
  window.__ASTERMIND_CONFIG__ = {
    apiKey: '<%= process.env.ASTERMIND_RAG_API_KEY %>',
    apiUrl: '<%= process.env.ASTERMIND_RAG_API_SERVER_URL %>'
  };
</script>

Configuration Reference

Configuration Priority

The widget supports multiple configuration methods with this priority (highest to lowest):

  • Props / init() config - Direct configuration passed to the component or init() function
  • Environment variables - VITE_ASTERMIND_RAG_API_KEY, REACT_APP_ASTERMIND_RAG_API_KEY
  • SSR-injected config - window.__ASTERMIND_CONFIG__
  • Global object - window.astermindConfig
  • Script data attributes - data-astermind-key, data-astermind-url

API Key and URL

OptionTypeDefaultDescription
apiKeystring(from env)Your AsterMind API key (starts with am_). Falls back to environment variables.
apiUrlstring'https://api.astermind.ai'Backend API URL. Falls back to environment variables.
throwOnMissingKeybooleantrueThrow error if API key is missing. Set to false to log warning instead.

Widget Options

OptionTypeDefaultDescription
position'bottom-right' | 'bottom-left' | 'top-right' | 'top-left''bottom-right'Widget position on screen
greetingstring'Hi! How can I help you today?'Initial greeting message
placeholderstring'Type your message...'Input placeholder text
headerTitlestring'AsterMind'Chat window header title
headerSubtitlestring'AI Assistant'Chat window header subtitle
defaultOpenbooleanfalseStart with chat window open
showPoweredBybooleantrueShow "Powered by AsterMind" badge
zIndexnumber9999Z-index for the widget

Theme Options

Customize appearance via the theme object:

{
  theme: {
    primaryColor: '#4F46E5',
    primaryHover: '#4338CA',
    backgroundColor: '#ffffff',
    surfaceColor: '#f3f4f6',
    textColor: '#1f2937',
    textMuted: '#6b7280',
    borderColor: '#e5e7eb',
    userBubbleBackground: '#4F46E5',
    userBubbleText: '#ffffff',
    botBubbleBackground: '#f3f4f6',
    botBubbleText: '#1f2937',
    widgetWidth: '380px',
    widgetHeight: '75vh',      // Default: 75% of viewport height
    bubbleSize: '60px',
    borderRadius: '12px',
    fontFamily: "'Inter', system-ui, sans-serif",
    fontSize: '14px',
    shadow: '0 4px 20px rgba(0, 0, 0, 0.15)'
  }
}

Agent Configuration

Enable agentic capabilities (powered by cybernetic-chatbot-client):

{
  agent: {
    enabled: true,
    confidenceThreshold: 0.8,
    siteMap: [
      { path: '/products', name: 'Products', description: 'View products' },
      { path: '/contact', name: 'Contact', description: 'Contact us' }
    ],
    customActions: {
      openModal: async (params) => {
        document.getElementById(params.modalId).showModal();
      }
    }
  }
}

Fallback Configuration

Configure offline behavior:

{
  fallback: {
    enabled: true,
    message: 'Working in offline mode. Some features may be limited.'
  }
}

Event Callbacks

CallbackParametersDescription
onReady()Called when widget is ready
onMessage(message: ChatMessage)Called on each message sent/received
onAction(action: AgentAction)Called when an agentic action occurs
onError(error: Error)Called when an error occurs
onToggle(isOpen: boolean)Called when widget opens/closes

Theming

CSS Variables

Override CSS variables in your stylesheet for quick customization:

:root {
  --astermind-primary: #10B981;
  --astermind-primary-hover: #059669;
  --astermind-background: #ffffff;
  --astermind-surface: #f3f4f6;
  --astermind-text: #1f2937;
  --astermind-text-muted: #6b7280;
  --astermind-border: #e5e7eb;
  --astermind-user-bubble-bg: #10B981;
  --astermind-user-bubble-text: #ffffff;
  --astermind-bot-bubble-bg: #f3f4f6;
  --astermind-bot-bubble-text: #1f2937;
  --astermind-widget-width: 400px;
  --astermind-widget-height: 75vh;  /* Default: 75% of viewport height (accepts px, vh, %) */
  --astermind-bubble-size: 64px;
  --astermind-border-radius: 16px;
  --astermind-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
  --astermind-font-family: 'Inter', system-ui, sans-serif;
  --astermind-font-size: 14px;
}

CSS Classes

All elements use the astermind- prefix:

ClassElement
.astermind-chatbotMain container
.astermind-bubbleFloating trigger button
.astermind-windowChat window
.astermind-headerWindow header
.astermind-messagesMessage list container
.astermind-messageIndividual message
.astermind-message--userUser message modifier
.astermind-message--botBot message modifier
.astermind-inputInput area
.astermind-statusStatus indicator
.astermind-action-cardAction confirmation card
.astermind-sourcesSource citations container

React Hooks API

useCybernetic

Direct API client access for custom implementations:

import { useCybernetic } from '@astermind/chatbot-template';

function MyComponent() {
  const {
    sendMessage,        // Send a message (non-streaming)
    sendMessageStream,  // Send a message (streaming)
    connectionStatus,   // 'online' | 'offline' | 'connecting' | 'error'
    isProcessing,       // Whether a request is in progress
    lastError,          // Last error that occurred
    sessionId,          // Current session ID
    clearSession,       // Clear the current session
    syncCache,          // Sync cache for offline use
    client              // Underlying CyberneticClient instance
  } = useCybernetic({
    apiUrl: 'https://api.example.com',
    apiKey: 'am_your-api-key'
  });

  const handleSend = async () => {
    const response = await sendMessage('Hello!');
    console.log(response.reply, response.sources);
  };
}

useChat

Chat state management:

import { useChat } from '@astermind/chatbot-template';

function MyComponent() {
  const {
    messages,          // Array of chat messages
    addMessage,        // Add a new message
    updateMessage,     // Update an existing message
    clearMessages,     // Clear all messages
    pendingAction,     // Currently pending agent action
    setPendingAction   // Set pending action
  } = useChat();
}

useTheme

Theme customization hook:

import { useTheme } from '@astermind/chatbot-template';

function MyComponent() {
  const { theme, cssVariables } = useTheme({
    primaryColor: '#10B981',
    borderRadius: '16px'
  });

  return <div style={cssVariables}>...</div>;
}

useScrollToBottom

Auto-scroll behavior for message lists:

import { useScrollToBottom } from '@astermind/chatbot-template';

function MessageList({ messages }) {
  const { containerRef, scrollToBottom } = useScrollToBottom();

  return (
    <div ref={containerRef}>
      {messages.map(msg => <Message key={msg.id} {...msg} />)}
    </div>
  );
}

Components API

All components are exported for custom compositions:

import {
  ChatbotWidget,    // Main widget (includes bubble + window)
  ChatBubble,       // Floating trigger button
  ChatWindow,       // Chat window container
  ChatHeader,       // Window header with title/subtitle
  ChatInput,        // Message input with send button
  MessageList,      // Scrollable message container
  MessageBubble,    // Individual message bubble
  ActionCard,       // Agentic action confirmation card
  SourceCitation,   // Source reference component
  StatusIndicator,  // Connection status display
  TypingIndicator   // Typing/loading animation
} from '@astermind/chatbot-template';

TypeScript Support

Full TypeScript support with exported types:

import type {
  // Template-specific types
  AsterMindChatbotProps,
  ChatbotTheme,
  ChatMessage,
  AgentAction,
  ChatState,
  WidgetPosition,
  AgentConfig,
  FallbackConfig,
  SiteMapEntry,
  VanillaInitConfig,
  SendOptions,

  // Re-exported from @astermind/cybernetic-chatbot-client
  CyberneticConfig,
  CyberneticResponse,
  CyberneticError,
  Source,
  ConnectionStatus,
  ConfidenceLevel,
  StreamCallbacks,
  AskOptions,
  CachedDocument,
  CacheStatus,
  AgenticConfig
} from '@astermind/chatbot-template';

// CyberneticClient class is also re-exported for advanced usage
import { CyberneticClient } from '@astermind/chatbot-template';

Troubleshooting

Widget not appearing

  • Ensure styles are imported: import '@astermind/chatbot-template/styles'
  • Check that apiUrl and apiKey are provided
  • Verify the widget container has position: relative or is in the document flow

Connection errors

  • Check that your apiUrl is correct and accessible
  • Verify your API key is valid and has the correct permissions
  • Check browser console for CORS errors - ensure your backend allows the origin

Streaming not working

  • Verify your backend supports the /api/external/chat/stream endpoint
  • Check that SSE is not being blocked by proxies or firewalls
  • Ensure Content-Type: text/event-stream header is set on responses

Actions not executing

  • Confirm agent.enabled is set to true
  • Check that actions meet the confidenceThreshold
  • Verify custom action handlers are properly defined

Styles not applying

  • Ensure the CSS file is loaded before the JS
  • Check for CSS specificity conflicts with your existing styles
  • Use !important or increase specificity if needed

Browser Support

BrowserVersion
Chrome80+
Firefox75+
Safari13+
Edge80+

The standalone bundle includes necessary polyfills for broader compatibility.

Build Outputs

FileFormatDescription
astermind-chatbot.esm.jsESMES Module for bundlers (tree-shakeable)
astermind-chatbot.umd.jsUMDUniversal Module Definition
astermind-chatbot.min.jsIIFEStandalone bundle with React included
astermind-chatbot.cssCSSCompiled and minified styles

License

MIT License - see LICENSE for details.

Built with care by the AsterMind team.

Keywords

chatbot

FAQs

Package last updated on 21 Jan 2026

Related posts