diff --git a/docs/GETTING_STARTED.md b/docs/GETTING_STARTED.md new file mode 100644 index 0000000..22070b1 --- /dev/null +++ b/docs/GETTING_STARTED.md @@ -0,0 +1,469 @@ +# 🚀 Getting Started with Chat Switchboard + +## What is Chat Switchboard? + +Chat Switchboard is a **plugin-first, multi-model AI platform** that works in two modes: + +- **🏠 Unmanaged Mode:** Runs entirely in your browser (like the current version) +- **🌐 Managed Mode:** Full backend with collaboration, workflows, and advanced features + +## Quick Start (Unmanaged Mode) + +### 1. Download & Run + +```bash +# Clone the repo +git clone https://git.gobha.me/xcaliber/chat-switchboard.git +cd chat-switchboard + +# Build standalone version +./build.sh + +# Open in browser +xdg-open standalone/index.html +# or serve it +python3 -m http.server 8080 --directory standalone +``` + +### 2. Configure Your API + +1. Click ⚙️ Settings +2. Enter your API details: + - **API Endpoint:** `https://api.openai.com/v1` (or OpenRouter, Venice.ai, etc.) + - **API Key:** Your API key + - **Model:** Select or type model name +3. Click "Save Settings" + +### 3. Start Chatting + +- Type a message and press Enter +- Switch models per-chat using the dropdown +- Export conversations as Markdown/JSON + +**That's it!** No backend needed, all data stays in your browser. + +--- + +## Full Installation (Managed Mode) + +For teams, collaboration, and advanced features like Workflows and Channels. + +### Prerequisites + +- Docker & Docker Compose +- PostgreSQL 15+ +- Go 1.21+ (for development) +- Python 3.9+ (for AI extensions) + +### 1. Clone & Configure + +```bash +git clone https://git.gobha.me/xcaliber/chat-switchboard.git +cd chat-switchboard + +# Copy environment template +cp .env.example .env + +# Edit configuration +nano .env +``` + +```bash +# .env +DATABASE_URL=postgres://user:pass@localhost:5432/chatswitch +JWT_SECRET=your-secret-key-here +PORT=8080 +FRONTEND_URL=http://localhost:3000 +REDIS_URL=redis://localhost:6379 +``` + +### 2. Start Services + +```bash +# Start everything with Docker Compose +docker-compose up -d + +# Services: +# - PostgreSQL (5432) +# - Backend API (8080) +# - Redis (6379) +# - Frontend (3000) +``` + +### 3. Run Migrations + +```bash +# Apply database schema +docker-compose exec backend ./migrate up +``` + +### 4. Create Admin User + +```bash +curl -X POST http://localhost:8080/api/auth/register \ + -H "Content-Type: application/json" \ + -d '{ + "username": "admin", + "email": "admin@example.com", + "password": "secure-password", + "role": "admin" + }' +``` + +### 5. Access Frontend + +Open http://localhost:3000 + +1. Click "Connect to Backend" +2. Enter backend URL: `http://localhost:8080` +3. Login with your credentials + +--- + +## Architecture Overview + +``` +┌─────────────────────────────────────┐ +│ Frontend (Vanilla JS) │ +│ - Manages UI state │ +│ - Switches modes (managed/local) │ +└─────────────┬───────────────────────┘ + │ + ┌─────────┴─────────┐ + │ │ +[LocalStorage] [Backend API] + │ │ + │ ┌─────────▼──────────┐ + │ │ Go Core │ + │ │ - Auth │ + │ │ - WebSocket │ + │ │ - Extension Mgr │ + │ └─────────┬──────────┘ + │ │ + │ ┌─────────┴──────────┐ + │ │ PostgreSQL │ + │ │ - Users, chats │ + │ │ - Channels, notes │ + │ │ - Vector search │ + │ └────────────────────┘ + │ + └─── Extensions (Python/Go) ───┐ + ├─ Chat Engine │ + ├─ RAG Engine │ + ├─ Workflows │ + └─ Custom Tools │ +``` + +## Core Features + +### 1. Chat (User → AI) + +**Available in:** Both modes + +- Multi-model support (OpenAI, Anthropic, Ollama, etc.) +- Per-conversation model switching +- Streaming responses +- Message history +- Export (Markdown, JSON, Plain Text) + +**Managed mode additions:** +- Auto-routing (smart model selection) +- Cost tracking +- Shared conversations +- Server-side tool calling + +### 2. Channels (User → User + AI) + +**Available in:** Managed mode only + +Multi-user chat rooms with AI participants: + +``` +#general + @alice: What do you think about this design? + @claude: I'd suggest using a darker color scheme... + @bob: Agreed! Also, @gpt4 can you review the code? + @gpt4: I see a potential issue in line 42... +``` + +- Public/private/DM channels +- @mention users and AI models +- Threaded conversations +- Real-time updates (WebSocket) +- Reactions and formatting + +### 3. Notes & Knowledge Bases + +**Available in:** Both modes (limited in unmanaged) + +- Markdown notes with folders +- Tagging and search +- Linked notes (wiki-style) + +**Managed mode additions:** +- Shared notes +- Knowledge base collections +- RAG (vector search) +- Semantic search with embeddings + +### 4. Workflows 🌟 (UNIQUE FEATURE) + +**Available in:** Managed mode only + +Chain multiple AI models and tools into automated pipelines: + +``` +[User Query] → [Web Search] → [GPT-4 Summarize] + ↓ ↓ + [Save to KB] [Claude Verify] + ↓ + [Generate Report] +``` + +**Use cases:** +- Research assistants +- Code review pipelines +- Content creation factories +- Data processing +- Multi-model consensus + +See `docs/WORKFLOWS.md` for details. + +## Extension System + +### Frontend Extensions (Both Modes) + +Simple JavaScript plugins that run in the browser: + +```javascript +// extensions/frontend/my-plugin/main.js +window.ChatSwitchboard.registerExtension({ + name: 'my-plugin', + hooks: { + onMessageSend: (msg) => { + console.log('Sending:', msg); + return msg; // Can modify + } + } +}); +``` + +### Backend Extensions (Managed Only) + +Full-featured plugins in any language: + +```python +# extensions/backend/my-tool/main.py +from fastapi import FastAPI + +app = FastAPI() + +@app.post("/tools/my_tool") +async def my_tool(input: str): + result = process(input) + return {"result": result} +``` + +See `docs/PLUGIN_SPEC.md` for complete guide. + +## Development + +### Frontend Development + +```bash +# Serve source files +python3 -m http.server 8080 --directory src + +# Build standalone +./build.sh +``` + +### Backend Development + +```bash +# Install Go dependencies +go mod download + +# Run backend +go run server/main.go + +# Or with air (hot reload) +air +``` + +### Extension Development + +```bash +# Create from template +cp -r extensions/_template-python extensions/my-extension + +# Edit files +cd extensions/my-extension +nano extension.json +nano main.py + +# Test locally +python main.py +``` + +## Configuration + +### Frontend Settings + +Stored in localStorage (unmanaged) or user profile (managed): + +- API endpoints and keys +- Default model +- Stream responses +- System prompt +- Temperature, max tokens, etc. + +### Backend Configuration + +```yaml +# config.yaml +server: + port: 8080 + host: 0.0.0.0 + +database: + url: ${DATABASE_URL} + max_connections: 20 + +redis: + url: ${REDIS_URL} + enabled: true + +extensions: + directory: ./extensions/backend + auto_load: true + +security: + jwt_secret: ${JWT_SECRET} + jwt_expiry: 24h + rate_limit: 100/minute +``` + +## Switching Modes + +### From Unmanaged → Managed + +1. Deploy backend (see Full Installation above) +2. In Settings, enter Backend URL +3. Login/register +4. Your local data will be **uploaded** on first sync + +### From Managed → Unmanaged + +1. Export your data (Settings → Export) +2. Remove backend URL from settings +3. Continue using locally + +**Note:** Managed-only features (Channels, Workflows) won't work in unmanaged mode. + +## Common Workflows + +### Personal Use (Unmanaged) +``` +Open standalone/index.html → Configure API → Chat +``` + +### Team Collaboration (Managed) +``` +Deploy backend → Create team channels → @mention AI models +``` + +### Development (Contributing) +``` +Fork repo → Create extension → Test locally → Submit PR +``` + +### Self-Hosted (Privacy) +``` +Deploy on your server → Configure domains → Invite team +``` + +## Troubleshooting + +### Frontend Issues + +**"No settings found"** +- Click Settings ⚙️ and configure API endpoint + key + +**"API request failed"** +- Check API endpoint URL (trailing slash?) +- Verify API key is correct +- Check browser console for errors + +**"LocalStorage full"** +- Export old chats +- Delete unused chats +- Clear browser data + +### Backend Issues + +**"Connection refused"** +- Is backend running? `docker-compose ps` +- Check firewall rules +- Verify port 8080 is open + +**"Database migration failed"** +- Check PostgreSQL is running +- Verify DATABASE_URL is correct +- Run migrations manually: `./migrate up` + +**"Extension not loading"** +- Check extension.json is valid +- Verify runtime is installed (python3, go, node) +- Check logs: `docker-compose logs backend` + +### WebSocket Issues + +**"Real-time updates not working"** +- Check WebSocket connection in browser console +- Verify Redis is running (for multi-instance setups) +- Check nginx WebSocket proxy config + +## Next Steps + +1. **Explore Features:** Try Chat, Notes, and (if managed) Channels +2. **Read Docs:** + - `docs/ARCHITECTURE.md` - System design + - `docs/WORKFLOWS.md` - Workflow system + - `docs/PLUGIN_SPEC.md` - Extension development +3. **Build Extensions:** Use templates in `extensions/` +4. **Join Community:** Discord, GitHub Discussions +5. **Contribute:** Submit PRs, report bugs, suggest features + +## Resources + +- **GitHub:** https://git.gobha.me/xcaliber/chat-switchboard +- **Documentation:** `/docs` directory +- **Examples:** `/examples` directory +- **Extensions:** `/extensions` directory + +--- + +## FAQ + +**Q: Is my data private?** +A: In unmanaged mode, everything stays in your browser. In managed mode, you control the backend. + +**Q: Can I use my own models?** +A: Yes! Configure any OpenAI-compatible API (Ollama, LM Studio, etc.) + +**Q: How do I migrate from ChatGPT/Claude?** +A: Export your conversations, then import via our import tool (coming soon). + +**Q: Can I run this offline?** +A: Unmanaged mode works offline if you pre-load the page. For LLM calls, you need internet or local models (Ollama). + +**Q: How much does it cost?** +A: Chat Switchboard is free and open-source. You pay for API usage (OpenAI, etc.) or use free models (Ollama). + +**Q: Can I sell extensions?** +A: Yes! The marketplace (coming soon) will support paid extensions. + +--- + +**Ready to switch? Start building! 🚀**