diff --git a/.gemini/tasks/multiagent-task-ui-plan.md b/.gemini/tasks/multiagent-task-ui-plan.md
new file mode 100644
index 0000000..134a375
--- /dev/null
+++ b/.gemini/tasks/multiagent-task-ui-plan.md
@@ -0,0 +1,931 @@
+# Multi-Agent Task Management UI — Implementation Plan
+
+> **Unifying `auto_task`, `tasks`, `designer` → Draggable Multi-Agent Windows**
+
+---
+
+## 1. High-Level Vision (from Screenshots)
+
+The user wants a **desktop-like environment** with these elements:
+
+### Layout Components
+
+```
+┌──────┬──────────────────────────────────────────────────────┐
+│ │ [Tasks ⚙ 👤] ← Top Left Mini Bar (fixed) │
+│ SIDE │ │
+│ BAR │ ┌─────────────────────┐ ┌────────────────────────┐ │
+│ │ │ PRIMARY WINDOW │ │ SECONDARY WINDOW │ │
+│ (far │ │ "Tasks" │ │ "Agents & Workspaces" │ │
+│ left)│ │ Tabs: │ │ (can be minimized) │ │
+│ │ │ - // DASHBOARD │ │ │ │
+│ /chat│ │ - // TASK #N │ │ Agent cards, quota │ │
+│/drive│ │ │ │ monitors, workspace │ │
+│ etc. │ │ PLAN|BUILD|REVIEW| │ │ assignment │ │
+│ │ │ DEPLOY|MONITOR tabs │ │ │ │
+│ │ │ │ │ │ │
+│ │ │ Draggable task cards│ │ │ │
+│ │ │ with sub-tasks, │ │ │ │
+│ │ │ logs, output, chat │ │ │ │
+│ │ └─────────────────────┘ └────────────────────────┘ │
+│ │ │
+│ │ ┌───────────────────────────────────────────────┐ │
+│ │ │ // Chat (shared chat at bottom) │ │
+│ │ │ TIP: Describe your project... │ │
+│ │ └───────────────────────────────────────────────┘ │
+│ ├──────────────────────────────────────────────────────┤
+│ │ [Taskbar: open windows] [Clock] [Date] │
+└──────┴──────────────────────────────────────────────────────┘
+```
+
+### Key Rules from User Request
+
+1. **Sidebar** → Far left (already exists in `desktop.html`, keep it)
+2. **Top-left mini bar** → Fixed bar with "Tasks" label, ⚙ Settings icon, 👤 Account icon. **Remove Mantis logo**.
+3. **Where it reads "Mantis" → read "Tasks"** (generic rename throughout)
+4. **Primary Window: "Tasks"** → Two tabs:
+ - **// DASHBOARD** — Overview with Task #N agent card, DNA info, tokens, activity
+ - **// TASK #N** (project view) — PLAN | BUILD | REVIEW | DEPLOY | MONITOR pipeline tabs, with draggable task cards showing sub-tasks, logs, output
+5. **Secondary Window: "Agents & Workspaces"** → Shows agent roster, quota monitors, workspace assignments. Can be minimized.
+6. **Chat panel** → Shared at bottom of task view, project-scoped
+7. **All windows** → Draggable, resizable, use existing `WindowManager`
+8. **VibCode integration** → Multi-draggable agents like the designer canvas
+
+---
+
+## 2. Codebase Inventory & Current State
+
+### Frontend (botui/ui/suite)
+
+| File/Dir | Purpose | Lines | Status |
+|----------|---------|-------|--------|
+| `desktop.html` | Main desktop shell, sidebar, tabs, workspace | 281 | ✅ Keep as shell |
+| `js/window-manager.js` | Window open/close/drag/minimize/maximize | 296 | 🔧 Extend |
+| `tasks/tasks.html` | Current task list + detail panel | 318 | 🔄 Refactor into new primary window |
+| `tasks/tasks.js` | Task JS (3297 lines) | 3297 | 🔄 Refactor (heavy) |
+| `tasks/tasks.css` | Task styles (70k+) | ~2400 | 🔄 Refactor/extend |
+| `tasks/autotask.html` | AutoTask standalone UI | 484 | 🔄 Merge into primary window |
+| `tasks/autotask.js` | AutoTask JS (2201 lines) | 2201 | 🔄 Merge |
+| `tasks/autotask.css` | AutoTask styles | ~1200 | 🔄 Merge |
+| `tasks/progress-panel.html` | Floating progress panel | 133 | 🔄 Keep as sub-component |
+| `tasks/progress-panel.js` | Progress panel JS | ~550 | ✅ Keep |
+| `tasks/intents.html` | Intents listing | ~400 | 🔄 Merge |
+| `designer.html` | Visual .bas designer (node canvas) | 2718 | 📎 Reference for drag patterns |
+| `designer.js` | Designer JS (nodes, connections, drag) | 921 | 📎 Reference for drag |
+| `designer.css` | Designer styles | 500 | 📎 Reference |
+| `partials/tasks.html` | Alternative tasks partial | 318 | 🔄 Will be replaced by new entry |
+
+### Backend (botserver/src)
+
+| File/Dir | Purpose | Lines | Status |
+|----------|---------|-------|--------|
+| `auto_task/autotask_api.rs` | AutoTask CRUD + execution API | 2302 | ✅ Keep (API stable) |
+| `auto_task/task_types.rs` | AutoTask data types | 423 | ✅ Keep |
+| `auto_task/task_manifest.rs` | Manifest tracking (progress tree) | 977 | ✅ Keep |
+| `auto_task/app_generator.rs` | App generation from LLM | 3587 | ✅ Keep |
+| `auto_task/intent_classifier.rs` | Intent classification | 1200+ | ✅ Keep |
+| `auto_task/intent_compiler.rs` | Intent → plan compilation | 900+ | ✅ Keep |
+| `auto_task/mod.rs` | Routes + WebSocket handlers | 293 | 🔧 Add new agent/workspace endpoints |
+| `tasks/task_api/handlers.rs` | Task CRUD handlers | 393 | 🔧 Extend with agent-aware responses |
+| `tasks/task_api/html_renderers.rs` | HTML card rendering | 700+ | 🔧 Update HTML to new design |
+| `tasks/types.rs` | Task data types | 223 | 🔧 Add agent fields |
+| `tasks/scheduler.rs` | Task scheduler (cron etc.) | 503 | ✅ Keep |
+| `designer/workflow_canvas.rs` | Workflow design types | 421 | 📎 Reference |
+| `designer/designer_api/` | Designer API handlers | ~200 | 📎 Reference |
+
+---
+
+## 3. Implementation Phases
+
+### Phase 0: Terminology Rename (Mantis → Tasks/Agent)
+
+**Scope**: All UI references
+**Effort**: ~30 min
+
+| What | Where | Change |
+|------|-------|--------|
+| "Mantis #1" | All HTML templates | → "Agent #1" |
+| "MANTIS MANAGER" | Task cards | → "AGENT MANAGER" |
+| Mantis logo/icon | Top bar, cards | → Remove, use ⚡ or 🤖 icon |
+| "mantis" CSS classes | tasks CSS | → Rename to `agent-*` |
+| Variable names | tasks.js, autotask.js | → `agent*` where needed |
+
+**Files to modify**:
+- `botui/ui/suite/tasks/tasks.html` — template references
+- `botui/ui/suite/tasks/tasks.js` — variable names
+- `botui/ui/suite/tasks/tasks.css` — class names
+- `botui/ui/suite/tasks/autotask.html` — template references
+- `botui/ui/suite/tasks/autotask.js` — variable names
+- `botserver/src/tasks/task_api/html_renderers.rs` — server-rendered HTML
+
+---
+
+### Phase 1: Top-Left Mini Bar (Fixed)
+
+**Scope**: New component added to `desktop.html`
+**Effort**: ~45 min
+
+Create a fixed top-left panel (anchored above sidebar) matching screenshot:
+
+```
+┌──────────────────────┐
+│ Tasks ⚙️ 👤 │
+└──────────────────────┘
+```
+
+#### 1.1 New file: `botui/ui/suite/partials/minibar.html`
+
+```html
+
+
Tasks
+
+
+
+
+
+```
+
+#### 1.2 CSS additions in `desktop.html
+
+
+```
+
+**Integration into Vibe:**
+```javascript
+// In vibe.html, add deployment button to the canvas header:
+
+
+```
+
+**Estimated Effort:** 8-10 hours
+
+---
+
+## Part II: Remaining Feature Implementation (Phases 1-7)
+
+After deployment infrastructure is in place, continue with the original plan:
+
+### Phase 1: Code Editor Integration (P0 - Critical)
+*(Same as original TASK.md - Monaco Editor)*
+
+### Phase 2: Database UI & Schema Visualization (P0 - Critical)
+*(Same as original TASK.md)*
+
+### Phase 3: Git Operations UI (P1 - High Priority)
+**UPDATED:** Add Forgejo-specific git operations
+- View Forgejo repository status
+- Sync with Forgejo remote
+- View CI/CD pipeline status
+- Trigger manual builds
+
+### Phase 4: Browser Automation Engine (P1 - High Priority)
+*(Same as original TASK.md)*
+
+### Phase 5: Multi-File Editing Workspace (P2 - Medium Priority)
+*(Same as original TASK.md)*
+
+### Phase 6: Enhanced Terminal (P2 - Medium Priority)
+*(Same as original TASK.md)*
+
+### Phase 7: Advanced CRM Templates (P2 - Medium Priority)
+**UPDATED:** Templates should support both deployment models
+- Internal deployment templates (use GB APIs)
+- External deployment templates (standalone with CI/CD)
+
+---
+
+## Part III: Updated Rollout Plan
+
+### Milestone 0: Deployment Infrastructure (Week 0)
+- **Day 1-3:** Phase 0.1 - Deployment Router
+- **Day 4-5:** Phase 0.2 - Forgejo Integration
+- **Day 6-7:** Phase 0.3 - Deployment UI
+
+**Success Criteria:**
+- ✅ Can deploy app internally to /apps/{name}
+- ✅ Can deploy app externally to Forgejo
+- ✅ CI/CD pipeline auto-generated
+- ✅ Deployment choice works in Vibe UI
+
+### Milestone 1-7: (Weeks 1-4)
+*(Same as original TASK.md)*
+
+---
+
+## Part IV: Technical Implementation Notes
+
+### File Organization (UPDATED)
+
+**Botserver (Backend):**
+```
+botserver/src/
+ deployment/ # NEW - Deployment infrastructure
+ mod.rs # DeploymentRouter
+ forgejo.rs # ForgejoClient
+ api.rs # Deployment API endpoints
+ templates.rs # CI/CD workflow templates
+ api/
+ editor.rs
+ database.rs
+ git.rs # UPDATED - Add Forgejo git operations
+ browser/
+ mod.rs
+ recorder.rs
+ validator.rs
+ api.rs
+ test_generator.rs
+ templates/
+ crm/
+ sales.json
+ real_estate.json
+ healthcare.json
+ mod.rs
+ sources/ # EXISTING - MCP integration
+ mod.rs
+ mcp.rs
+ ui.rs
+ knowledge_base.rs
+```
+
+**Botui (Frontend):**
+```
+botui/ui/suite/
+ partials/
+ vibe.html # UPDATED - Add deploy button
+ vibe-deployment.html # NEW - Deployment modal
+ editor.html
+ database.html
+ git-status.html # UPDATED - Add Forgejo status
+ git-diff.html
+ browser-controls.html
+ terminal.html
+ template-gallery.html
+ js/
+ deployment.js # NEW - Deployment logic
+ editor.js
+ database.js
+ git.js # UPDATED - Add Forgejo operations
+ browser.js
+ terminal.js
+ templates.js
+ css/
+ deployment.css # NEW - Deployment styles
+ editor.css
+ database.css
+ git.css
+ browser.css
+ terminal.css
+ templates.css
+```
+
+### Dependencies (UPDATED)
+
+**Already in Workspace:**
+```toml
+[dependencies]
+chromiumoxide = "0.7" # Browser automation
+tokio = "1.41" # Async runtime
+axum = "0.7" # HTTP framework
+diesel = "2.1" # Database
+git2 = "0.18" # Git operations
+reqwest = { version = "0.11", features = ["json"] } # HTTP client
+```
+
+**Frontend:**
+```
+monaco-editor@0.45.0 # Code editor
+xterm.js@5.3.0 # Terminal (already vendor file)
+```
+
+---
+
+## Part V: Success Metrics (UPDATED)
+
+### Deployment Infrastructure
+- ✅ Internal deployment succeeds in < 30 seconds
+- ✅ External Forgejo deployment succeeds in < 2 minutes
+- ✅ CI/CD pipeline auto-generates correctly
+- ✅ Both deployment models accessible from Vibe UI
+- ✅ Can switch between internal/external deployment
+
+### Phases 1-7
+*(Same as original TASK.md)*
+
+---
+
+## Conclusion
+
+The **critical gap** in the original TASK.md was the **deployment routing logic**. The platform must support:
+
+1. **Internal GB Apps** - Quick prototypes using GB APIs and shared resources
+2. **External Forgejo Projects** - Production apps with independent infrastructure and CI/CD
+
+**Updated Priority:**
+1. ⚠️ **Phase 0** - Deployment Infrastructure (CRITICAL - Week 0)
+ - Phase 0.1: Deployment Router
+ - Phase 0.2: Forgejo Integration
+ - Phase 0.3: Deployment UI
+
+2. 📝 **Phase 1** - Code Editor (Week 1)
+
+3. 🗄️ **Phase 2** - Database UI (Week 2)
+
+4. 🐙 **Phase 3** - Git Operations + Forgejo (Week 2)
+
+5. 🌐 **Phase 4** - Browser Automation (Week 3)
+
+6. 📂 **Phase 5** - Multi-File Workspace (Week 3)
+
+7. 🖥️ **Phase 6** - Terminal (Week 4)
+
+8. 📇 **Phase 7** - CRM Templates (Week 4)
+
+Once Phase 0 is complete, VibeCode will be able to **deploy apps both internally and externally**, giving users the flexibility to choose the right deployment model for their use case.
+
+**Total Estimated Effort:** 125-155 hours (~3-4 weeks with 1 developer)
+**Including Phase 0:** +40-50 hours
+
+**Final Total:** 165-205 hours (~4-5 weeks with 1 developer)
diff --git a/UNIFIED_PLAN.md b/UNIFIED_PLAN.md
new file mode 100644
index 0000000..546d72f
--- /dev/null
+++ b/UNIFIED_PLAN.md
@@ -0,0 +1,877 @@
+# Unified Implementation Plan: VibeCode Platform
+
+## Executive Summary
+
+This document **unifies** two separate task lists into a cohesive roadmap:
+- **task.md**: Security & stability fixes (immediate priority)
+- **TASK.md**: Feature implementation roadmap (development pipeline)
+
+**Current Status:**
+- 🎯 Backend: **80% complete** - LLM-powered app generation, multi-agent orchestration, browser automation ready
+- 🎨 Frontend: **40% complete** - Vibe UI exists, missing professional tools (Monaco, Database UI, Git, Browser)
+- 🔐 Security: **Needs attention** - Unsafe unwraps, dependency vulnerabilities (see Security Priorities below)
+
+---
+
+## Part I: Security & Stability (FROM task.md) - IMMEDIATE PRIORITY ⚠️
+
+### 1. Unsafe Unwraps in Production (Violates AGENTS.md Error Handling)
+
+**Issue:** The codebase uses `.unwrap()`, `.expect()`, `panic!()` in production code, which is explicitly forbidden by AGENTS.md.
+
+**Vulnerable Locations:**
+```
+botserver/src/drive/drive_handlers.rs:269 - Response::builder() unwrap
+botserver/src/basic/compiler/mod.rs - Multiple unwrap() calls
+botserver/src/llm/llm_models/deepseek_r3.rs - unwrap() outside tests
+botserver/src/botmodels/opencv.rs - Test scope unwrap() leaks
+```
+
+**Action Items:**
+- [ ] Replace ALL `.unwrap()` with safe alternatives:
+ - Use `?` operator with proper error propagation
+ - Use `unwrap_or_default()` for defaults
+ - Use pattern matching with early returns
+ - Apply `ErrorSanitizer` to avoid panics
+- [ ] Run `cargo clippy -- -W clippy::unwrap_used -W clippy::expect_used`
+- [ ] Add unit tests verifying error paths work correctly
+
+**Estimated Effort:** 4-6 hours
+
+---
+
+### 2. Dependency Vulnerabilities (Found by `cargo audit`)
+
+**Vulnerable Component:**
+- **Crate:** `glib 0.18.5`
+- **Advisory:** `RUSTSEC-2024-0429`
+- **Issue:** Unsoundness in `Iterator` and `DoubleEndedIterator` impls for `glib::VariantStrIter`
+- **Context:** Pulled through `botdevice` and `botapp` via Tauri plugins/GTK dependencies
+
+**Action Items:**
+- [ ] Review exact usage of glib in the codebase
+- [ ] Check if patches are available in newer versions
+- [ ] Evaluate risk given desktop GUI context
+- [ ] If critical: upgrade GTK/Glib ecosystem dependencies
+- [ ] If acceptable: document risk assessment and add to security review checklist
+
+**Estimated Effort:** 2-4 hours
+
+---
+
+### 3. General Security Posture Alignment
+
+**CSRF Protection:**
+- ✅ Custom CSRF store exists: `redis_csrf_store.rs`
+- ⚠️ Verify: ALL state-changing endpoints use it (standard `tower-csrf` is absent from Cargo.toml)
+
+**Security Headers:**
+- ✅ `headers.rs` provides CSP, HSTS, X-Frame-Options
+- ⚠️ Verify: Headers are attached UNIVERSALLY in botserver, not selectively omitted
+
+**Action Items:**
+- [ ] Audit all POST/PUT/DELETE endpoints for CSRF token validation
+- [ ] Create middleware test to ensure security headers on all responses
+- [ ] Document security checklist for new endpoints
+
+**Estimated Effort:** 3-4 hours
+
+---
+
+## Part II: Feature Implementation Roadmap (FROM TASK.md) - DEVELOPMENT PIPELINE
+
+### Architecture Overview
+
+```
+┌──────────────────────────────────────────────────────────────┐
+│ USER REQUEST │
+│ "I want a full CRM system" │
+└────────────────────────┬─────────────────────────────────────┘
+ │
+ ▼
+┌──────────────────────────────────────────────────────────────┐
+│ VIBE BUILDER UI │
+│ ┌──────────────────┐ ┌──────────────────┐ │
+│ │ Agent Sidebar │ │ Canvas Area │ │
+│ │ (Mantis #1-4) │ │ - Task Nodes │ │
+│ │ - Status cards │ │ - Preview │ │
+│ │ - Workspaces │ │ - Chat Overlay │ │
+│ └──────────────────┘ └──────────────────┘ │
+│ │
+│ NEW TOOLS TO ADD: │
+│ 🔌 MCP Sources Panel ← botserver/src/sources/ui.rs │
+│ 📝 Monaco Editor ← Phase 1 (Critical) │
+│ 🗄️ Database Visualizer ← Phase 2 (Critical) │
+│ 🐙 Git Operations ← Phase 3 (High) │
+│ 🌐 Browser Automation ← Phase 4 (High) │
+│ 📂 Multi-File Workspace ← Phase 5 (Medium) │
+│ 🖥️ Enhanced Terminal ← Phase 6 (Medium) │
+└────────────────────────┬─────────────────────────────────────┘
+ │
+ ▼
+┌──────────────────────────────────────────────────────────────┐
+│ BOTSERVER (Rust Backend) │
+│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
+│ │ Orchestrator │ │ AppGenerator │ │ Designer AI │ │
+│ │ (5 agents) │ │(LLM-driven) │ │(modifications)│ │
+│ └──────────────┘ └──────────────┘ └──────────────┘ │
+│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
+│ │ Browser │ │ Git │ │ Terminal │ │
+│ │ Automation │ │ Operations │ │ Service │ │
+│ │(chromiumoxide)│ │(git2) │ │(xterm.js) │ │
+│ └──────────────┘ └──────────────┘ └──────────────┘ │
+│ ┌──────────────────────────────────────────────────┐ │
+│ │ MCP & Sources Integration ← ALREADY IMPLEMENTED │ │
+│ │ - botserver/src/sources/mcp.rs │ │
+│ │ - botserver/src/sources/ui.rs │ │
+│ │ - /api/ui/sources/* endpoints │ │
+│ └──────────────────────────────────────────────────┘ │
+└────────────────────────┬─────────────────────────────────────┘
+ │
+ ▼
+┌──────────────────────────────────────────────────────────────┐
+│ GENERATED OUTPUT │
+│ - PostgreSQL tables │
+│ - HTML pages with HTMX │
+│ - CSS styling │
+│ - JavaScript │
+│ - BASIC tools/schedulers │
+│ - E2E tests (Playwright) │
+└──────────────────────────────────────────────────────────────┘
+```
+
+---
+
+## Part III: MCP & Sources Integration - EXISTING INFRASTRUCTURE ✅
+
+### What Already Exists
+
+**Backend Implementation (botserver/src/sources/):**
+```
+sources/
+├── mod.rs # Module exports
+├── mcp.rs # MCP client, connection, server types
+├── ui.rs # HTML pages for /suite/sources/*
+├── knowledge_base.rs # Knowledge base upload/query
+└── sources_api # API endpoints
+```
+
+**API Endpoints (defined in botserver/src/core/urls.rs):**
+```
+/sources/*:
+ /suite/sources - Main sources list page
+ /suite/sources/mcp/add - Add MCP server form
+ /suite/sources/mcp/catalog - MCP server catalog
+
+/api/ui/sources/*:
+ /api/ui/sources/mcp - List MCP servers
+ /api/ui/sources/mcp/:name - Get server details
+ /api/ui/sources/mcp/:name/enable - Enable server
+ /api/ui/sources/mcp/:name/disable - Disable server
+ /api/ui/sources/mcp/:name/tools - List server tools
+ /api/ui/sources/mcp/:name/test - Test server connection
+ /api/ui/sources/mcp/scan - Scan for MCP servers
+ /api/ui/sources/mcp-servers - Get server catalog
+ /api/ui/sources/kb/upload - Upload to knowledge base
+ /api/ui/sources/kb/list - List knowledge base docs
+ /api/ui/sources/kb/query - Query knowledge base
+ /api/ui/sources/repositories - List repositories
+ /api/ui/sources/apps - List connected apps
+```
+
+**Vibe UI Integration (botui/ui/suite/):**
+```
+botui/ui/suite/
+├── partials/
+│ └── vibe.html # Main Vibe Builder UI
+│ # - Agent sidebar (Mantis #1-4)
+│ # - Canvas area with task nodes
+│ # - Chat overlay
+│ # - Preview panel
+├── vibe/
+│ └── agents-sidebar.css # Styles for agent sidebar
+├── js/
+│ └── chat-agent-mode.js # Agent-mode JavaScript
+└── css/
+ └── chat-agent-mode.css # Agent-mode styles
+```
+
+### Integration Task: Add MCP Panel to Vibe UI
+
+**Goal:** Add a "Sources" panel to Vibe that shows connected MCP servers and allows management.
+
+**Action Items:**
+1. **Create MCP Panel Component:**
+ - File: `botui/ui/suite/partials/vibe-mcp-panel.html`
+ - Features:
+ - List connected MCP servers
+ - Show server status (active/inactive)
+ - Display available tools per server
+ - Quick enable/disable toggles
+ - "Add Server" button (opens `/suite/sources/mcp/add`)
+
+2. **Add JavaScript:**
+ - File: `botui/ui/suite/js/vibe-mcp.js`
+ - Fetch servers from `/api/ui/sources/mcp`
+ - Handle enable/disable actions
+ - Update server status in real-time
+ - Display tool risk levels
+
+3. **Add Styles:**
+ - File: `botui/ui/suite/vibe/mcp-panel.css`
+ - Match existing agents-sidebar.css aesthetic
+ - Server cards with status indicators
+ - Tool badges with risk levels
+
+4. **Integrate into Vibe:**
+ - Add "Sources" tab to Vibe sidebar
+ - Load MCP panel when tab clicked
+ - Show server count badge
+
+**Estimated Effort:** 6-8 hours
+
+---
+
+## Part IV: Implementation Phases (UPDATED WITH MCP INTEGRATION)
+
+### Phase 0: Security & Stability ⚠️ - IMMEDIATE (Week 0)
+
+**Priority: CRITICAL - Must complete before any feature work**
+
+**Tasks:**
+1. [ ] Fix all unsafe `unwrap()` calls
+2. [ ] Address dependency vulnerabilities
+3. [ ] Verify CSRF & security headers coverage
+
+**Estimated Effort:** 9-14 hours
+
+**Success Criteria:**
+- ✅ Zero `unwrap()` in production code
+- ✅ `cargo audit` passes cleanly
+- ✅ All state-changing endpoints use CSRF tokens
+- ✅ All responses include security headers
+
+---
+
+### Phase 0.5: MCP Integration in Vibe (Week 0.5)
+
+**Priority: HIGH - Leverage existing infrastructure**
+
+**Tasks:**
+1. [ ] Create MCP panel component
+2. [ ] Add JavaScript for server management
+3. [ ] Style panel to match Vibe aesthetic
+4. [ ] Integrate into Vibe sidebar
+
+**Estimated Effort:** 6-8 hours
+
+**Success Criteria:**
+- ✅ MCP servers visible in Vibe UI
+- ✅ Can enable/disable servers
+- ✅ Can see available tools
+- ✅ Can add new servers
+
+---
+
+### Phase 1: Code Editor Integration (P0 - Critical)
+
+**Goal:** Replace textarea with professional code editor
+
+**Tasks:**
+
+1. **Download Monaco Editor**
+ ```bash
+ cd botui
+ npm install monaco-editor@0.45.0
+ cp -r node_modules/monaco-editor min/vs ui/suite/js/vendor/
+ ```
+
+2. **Create Editor Component**
+ - `botui/ui/suite/partials/editor.html`
+ - Monaco container with tab bar
+ - File tree sidebar
+ - Save/Publish buttons
+
+3. **Editor JavaScript**
+ - `botui/ui/suite/js/editor.js`
+ - Monaco initialization
+ - Language detection (.html, .css, .js, .bas, .json)
+ - Tab management (open, close, switch)
+ - Auto-save with WebSocket sync
+
+4. **API Endpoints**
+ - `botserver/src/api/editor.rs`
+ - GET `/api/editor/file/{path}` - Read file
+ - POST `/api/editor/file/{path}` - Save file
+ - GET `/api/editor/files` - List files
+
+5. **Integration**
+ - Update `chat-agent-mode.html` - replace textarea with Monaco
+ - Update `vibe.html` - add editor panel
+ - Add keyboard shortcuts (Ctrl+S, Ctrl+P, Ctrl+Shift+F)
+
+**Success Criteria:**
+- Monaco loads in < 2 seconds
+- Syntax highlighting for 5+ languages
+- Multi-file tabs work
+- Auto-save completes successfully
+
+**Estimated Effort:** 8-12 hours
+
+---
+
+### Phase 2: Database UI & Schema Visualization (P0 - Critical)
+
+**Goal:** Visual database management and query builder
+
+**Tasks:**
+
+1. **Schema Visualizer Component**
+ - `botui/ui/suite/partials/database.html`
+ - Canvas-based ER diagram
+ - Table cards with fields
+ - Relationship lines (foreign keys)
+ - Zoom/pan controls
+
+2. **Database JavaScript**
+ - `botui/ui/suite/js/database.js`
+ - Fetch schema: `/api/database/schema`
+ - Render tables using Canvas API
+ - Click table → show field details
+ - Drag to rearrange
+
+3. **Query Builder UI**
+ - Visual SELECT builder
+ - Table selection dropdown
+ - Join interface
+ - Filter conditions
+ - SQL preview pane
+
+4. **Data Grid**
+ - Sortable columns
+ - Inline editing
+ - Pagination
+ - Export (CSV/JSON)
+
+5. **Backend API**
+ - `botserver/src/api/database.rs`
+ - GET `/api/database/schema` - Tables, fields, relationships
+ - GET `/api/database/table/{name}/data` - Paginated data
+ - POST `/api/database/query` - Execute SQL
+ - POST `/api/database/table/{name}/row` - Insert/update
+ - DELETE `/api/database/table/{name}/row/{id}` - Delete
+
+**Success Criteria:**
+- ER diagram shows all tables
+- Query builder generates valid SQL
+- Data grid supports inline edits
+- Export works correctly
+
+**Estimated Effort:** 16-20 hours
+
+---
+
+### Phase 3: Git Operations UI (P1 - High Priority)
+
+**Goal:** Version control interface in Vibe
+
+**Tasks:**
+
+1. **Git Status Panel**
+ - `botui/ui/suite/partials/git-status.html`
+ - File list with status icons
+ - Stage/unstage checkboxes
+ - "Commit" button
+
+2. **Diff Viewer**
+ - `botui/ui/suite/partials/git-diff.html`
+ - Side-by-side comparison
+ - Line highlighting (green/red)
+ - Syntax highlighting
+
+3. **Commit Interface**
+ - Message input
+ - "Commit & Push" button
+ - Progress indicator
+
+4. **Branch Manager**
+ - Branch dropdown
+ - "New Branch" dialog
+ - Switch/delete actions
+
+5. **Commit Timeline**
+ - Vertical timeline
+ - Author, date, message
+ - Click → view diff
+
+6. **Backend API**
+ - `botserver/src/api/git.rs`
+ - GET `/api/git/status` - Git status
+ - GET `/api/git/diff/{file}` - File diff
+ - POST `/api/git/commit` - Create commit
+ - POST `/api/git/push` - Push to remote
+ - GET `/api/git/branches` - List branches
+ - POST `/api/git/branch/{name}` - Create/switch
+ - GET `/api/git/log` - Commit history
+
+**Success Criteria:**
+- Git status displays correctly
+- Diff viewer shows side-by-side
+- Commit workflow works end-to-end
+- Branch switching succeeds
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+### Phase 4: Browser Automation Engine (P1 - High Priority)
+
+**Goal:** Pure Rust browser automation for testing & recording
+
+**Why Rust + Chromiumoxide:**
+- ✅ Already in workspace: `chromiumoxide = "0.7"`
+- ✅ No Node.js dependency
+- ✅ Feature flag exists: `browser` in botserver/Cargo.toml
+- ✅ Reference implementation: bottest/src/web/browser.rs (1000+ lines)
+
+**Tasks:**
+
+1. **Core Browser Module**
+ - `botserver/src/browser/mod.rs`
+ - `BrowserSession` - Manage browser instance
+ - `BrowserManager` - Session lifecycle
+ - Methods: `navigate()`, `click()`, `fill()`, `screenshot()`, `execute()`
+
+2. **Action Recorder**
+ - `botserver/src/browser/recorder.rs`
+ - `RecordedAction` - Navigate, Click, Fill, Wait, Assert
+ - `ActionRecorder` - Record/stop/export
+ - Export as Playwright test
+
+3. **Test Validator**
+ - `botserver/src/browser/validator.rs`
+ - Check for flaky selectors
+ - Validate wait conditions
+ - Suggest improvements via Designer AI
+
+4. **Browser API**
+ - `botserver/src/browser/api.rs`
+ - POST `/api/browser/session` - Create session
+ - POST `/api/browser/session/:id/execute` - Run action
+ - GET `/api/browser/session/:id/screenshot` - Capture
+ - POST `/api/browser/session/:id/record/start` - Start recording
+ - POST `/api/browser/session/:id/record/stop` - Stop & get actions
+ - GET `/api/browser/session/:id/record/export` - Export test
+
+5. **Vibe UI - Browser Panel**
+ - `botui/ui/suite/partials/browser-controls.html`
+ - URL bar with navigation buttons
+ - Record/Stop/Export buttons
+ - Actions timeline
+ - Browser preview iframe
+ - Screenshot gallery
+
+ - `botui/ui/suite/js/browser.js`
+ - Session management
+ - Action recording
+ - Test export
+
+ - `botui/ui/suite/css/browser.css`
+ - Browser panel styling
+ - Recording indicator animation
+ - Actions timeline
+ - Screenshot gallery grid
+
+6. **Integration with Vibe**
+ - Add "Browser Automation" button to Vibe toolbar
+ - Load browser-controls.html in panel
+ - Element picker for selector capture
+ - Screenshot capture & gallery
+
+**Success Criteria:**
+- Can navigate to any URL
+- Element picker captures selectors
+- Recording generates valid Playwright tests
+- Screenshots capture correctly
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+### Phase 5: Multi-File Editing Workspace (P2 - Medium Priority)
+
+**Goal:** Professional multi-file editing
+
+**Tasks:**
+
+1. **Tab Management**
+ - File tabs with close buttons
+ - Active tab highlighting
+ - Tab overflow scrolling
+ - Drag to reorder
+
+2. **Split-Pane Layout**
+ - Split horizontal/vertical buttons
+ - Resize handles
+ - 2x2 grid max
+
+3. **File Comparison**
+ - Side-by-side diff
+ - Line-by-line navigation
+ - Copy changes (L→R)
+
+4. **File Tree Sidebar**
+ - Nested folders
+ - File type icons
+ - Expand/collapse
+ - Double-click to open
+
+5. **Quick Open**
+ - Ctrl+P → Search files
+ - Fuzzy matching
+ - Arrow navigation
+
+6. **Project Search**
+ - Ctrl+Shift+F → Search all files
+ - Results with line numbers
+ - Click to open file
+
+**Success Criteria:**
+- 10+ files open in tabs
+- Split view works (2-4 panes)
+- File comparison displays diffs
+- Quick open searches files
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+### Phase 6: Enhanced Terminal (P2 - Medium Priority)
+
+**Goal:** Interactive shell in Vibe
+
+**Tasks:**
+
+1. **Terminal Container**
+ - xterm.js integration (already vendor file)
+ - Multiple terminal tabs
+ - Fit addon for auto-resize
+
+2. **WebSocket Terminal**
+ - Bi-directional WebSocket: `/ws/terminal/{session_id}`
+ - Protocol: `{"type": "input", "data": "command\n"}`
+ - Handle ANSI escape codes
+
+3. **Command History**
+ - Up/Down arrows
+ - Ctrl+R search
+ - Persist in localStorage
+
+4. **Command Completion**
+ - Tab completion
+ - File path completion
+ - Command flags
+
+5. **Backend Terminal Server**
+ - Spawn PTY per session
+ - WebSocket handler
+ - Clean up on disconnect
+
+6. **File Transfer**
+ - Drag file to upload
+ - `upload` / `download` commands
+ - Progress bars
+
+**Success Criteria:**
+- Can type commands & see output
+- Arrow keys navigate history
+- Can run vim, top, etc.
+- Multiple terminals work
+
+**Estimated Effort:** 10-14 hours
+
+---
+
+### Phase 7: Advanced CRM Templates (P2 - Medium Priority)
+
+**Goal:** Pre-built CRM accelerators
+
+**Tasks:**
+
+1. **Template System**
+ - `botserver/src/templates/crm/`
+ - Template JSON definitions
+ - Prompt templates
+ - Field libraries
+
+2. **CRM Templates**
+ - **Sales CRM**
+ - Tables: contacts, leads, opportunities, accounts, activities
+ - Pages: dashboard, pipeline, contacts list
+ - Tools: lead_scoring, email_automation
+ - Schedulers: daily_summary, weekly_review
+
+ - **Real Estate CRM**
+ - Tables: properties, clients, showings, offers
+ - Pages: property gallery, client portal
+ - Tools: mls_sync, showing_scheduler
+ - Schedulers: showing_reminders, market_update
+
+ - **Healthcare CRM**
+ - Tables: patients, appointments, treatments, insurance
+ - Pages: patient portal, appointment scheduler
+ - Tools: insurance_verification, appointment_reminders
+ - Schedulers: daily_appointments, insurance_alerts
+
+3. **Template Gallery UI**
+ - `botui/ui/suite/partials/template-gallery.html`
+ - Template cards with descriptions
+ - Preview screenshots
+ - "Use Template" button
+
+4. **Template Generator**
+ - Load template JSON
+ - Customize with user details
+ - Generate all files
+ - Deploy to /apps/{name}
+
+**Success Criteria:**
+- Can select template from gallery
+- Template generates full CRM
+- Customization works
+- Generated CRM is functional
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+## Part V: Technical Implementation Notes
+
+### Code Quality Standards (per AGENTS.md)
+
+**MUST Follow:**
+1. ✅ **Error Handling** - NO panics, use `?` operator
+2. ✅ **Safe Commands** - Use `SafeCommand` wrapper
+3. ✅ **Error Sanitization** - Use `ErrorSanitizer`
+4. ✅ **SQL Safety** - Use `sql_guard`
+5. ✅ **Rate Limiting** - Per-IP and per-User limits
+6. ✅ **CSRF Protection** - CSRF tokens on state-changing endpoints
+7. ✅ **Security Headers** - CSP, HSTS, X-Frame-Options, etc.
+8. ✅ **No CDNs** - All assets local
+9. ✅ **File Size** - Max 450 lines per file
+10. ✅ **Clippy Clean** - 0 warnings, no `#[allow()]`
+
+### File Organization
+
+**Botui (Frontend):**
+```
+botui/ui/suite/
+ partials/
+ editor.html
+ database.html
+ git-status.html
+ git-diff.html
+ browser-controls.html
+ terminal.html
+ template-gallery.html
+ vibe-mcp-panel.html # NEW - MCP integration
+ js/
+ editor.js
+ database.js
+ git.js
+ browser.js
+ terminal.js
+ templates.js
+ vibe-mcp.js # NEW - MCP integration
+ css/
+ editor.css
+ database.css
+ git.css
+ browser.css
+ terminal.css
+ templates.css
+ vibe/
+ mcp-panel.css # NEW - MCP integration
+```
+
+**Botserver (Backend):**
+```
+botserver/src/
+ api/
+ editor.rs
+ database.rs
+ git.rs
+ browser/
+ mod.rs # BrowserSession, BrowserManager
+ recorder.rs # ActionRecorder
+ validator.rs # TestValidator
+ api.rs # HTTP endpoints
+ test_generator.rs
+ templates/
+ crm/
+ sales.json
+ real_estate.json
+ healthcare.json
+ mod.rs
+ sources/ # ALREADY EXISTS
+ mod.rs
+ mcp.rs
+ ui.rs
+ knowledge_base.rs
+```
+
+### Dependencies
+
+**Already in Workspace:**
+```toml
+chromiumoxide = "0.7" # Browser automation
+tokio = "1.41" # Async runtime
+axum = "0.7" # HTTP framework
+diesel = "2.1" # Database
+git2 = "0.18" # Git operations (add if needed)
+```
+
+**Frontend (download & serve locally):**
+```
+monaco-editor@0.45.0 # Code editor
+xterm.js@5.3.0 # Terminal (already vendor file)
+```
+
+---
+
+## Part VI: Testing Strategy
+
+### Unit Tests
+- All new modules need unit tests
+- Test coverage > 80%
+- Location: `botserver/src//tests.rs`
+
+### Integration Tests
+- End-to-end workflows
+- Location: `bottest/tests/integration/`
+
+### E2E Tests
+- Use chromiumoxide (bottest infrastructure)
+- Location: `bottest/tests/e2e/`
+- Test scenarios:
+ - Generate CRM from template
+ - Edit in Monaco editor
+ - View database schema
+ - Create git commit
+ - Record browser test
+
+---
+
+## Part VII: Rollout Plan (UPDATED)
+
+### Milestone 0: Security & MCP (Week 0)
+- **Day 1-2:** Fix all unsafe `unwrap()` calls
+- **Day 3:** Address dependency vulnerabilities
+- **Day 4:** Verify CSRF & security headers
+- **Day 5:** Integrate MCP panel into Vibe UI
+
+### Milestone 1: Core Editor (Week 1)
+- Phase 1 complete (Monaco integration)
+
+### Milestone 2: Database & Git (Week 2)
+- Phase 2 complete (Database UI)
+- Phase 3 complete (Git Operations)
+
+### Milestone 3: Browser & Workspace (Week 3)
+- Phase 4 complete (Browser Automation)
+- Phase 5 complete (Multi-File Editing)
+
+### Milestone 4: Terminal & Templates (Week 4)
+- Phase 6 complete (Enhanced Terminal)
+- Phase 7 complete (CRM Templates)
+
+---
+
+## Part VIII: Success Metrics
+
+### Security Milestones
+- ✅ Zero `unwrap()` in production code
+- ✅ `cargo audit` passes
+- ✅ All endpoints have CSRF + security headers
+
+### Phase 0.5: MCP Integration
+- ✅ MCP panel visible in Vibe sidebar
+- ✅ Can enable/disable servers
+- ✅ Can view available tools
+- ✅ Can add new servers
+
+### Phase 1: Code Editor
+- Monaco loads < 2 seconds
+- 5+ syntax highlighters work
+- Multi-file tabs functional
+- Auto-save succeeds
+
+### Phase 2: Database UI
+- Schema visualizer displays all tables
+- Query builder generates valid SQL
+- Data grid supports inline edits
+- Export functionality works
+
+### Phase 3: Git Operations
+- Git status shows changed files
+- Diff viewer shows side-by-side
+- Commit workflow works
+- Branch switching succeeds
+
+### Phase 4: Browser Automation
+- Can navigate to any URL
+- Element picker captures selectors
+- Recording generates valid tests
+- Screenshots capture correctly
+
+### Phase 5: Multi-File Workspace
+- 10+ files open in tabs
+- Split view supports 2-4 panes
+- File comparison works
+- Project search is fast (< 1s for 100 files)
+
+### Phase 6: Terminal
+- Interactive shell works
+- Can run vim, top, etc.
+- Multiple terminals run simultaneously
+- File transfer works
+
+### Phase 7: CRM Templates
+- 3+ CRM templates available
+- Generation takes < 30 seconds
+- Generated CRMs are fully functional
+- Industry-specific features work
+
+---
+
+## Conclusion
+
+The BotUI platform has a **powerful backend** capable of generating full applications via LLM. The main gaps are in the **frontend user experience** and **security hardening**.
+
+**Key Insight:**
+- The `botserver/src/sources/` infrastructure for MCP is **already complete**
+- The Vibe UI exists and is functional
+- We need to **connect** them: add an MCP panel to the Vibe sidebar
+
+**Updated Priority Order:**
+1. ⚠️ **Security fixes** (Week 0) - Unblock development risk
+2. 🔌 **MCP integration** (Week 0.5) - Quick win, leverage existing code
+3. 📝 **Code editor** (Week 1) - Core developer tool
+4. 🗄️ **Database UI** (Week 2) - Visual data management
+5. 🐙 **Git operations** (Week 2) - Version control
+6. 🌐 **Browser automation** (Week 3) - Testing & recording
+7. 📂 **Multi-file workspace** (Week 3) - Professional editing
+8. 🖥️ **Terminal** (Week 4) - Interactive shell
+9. 📇 **CRM templates** (Week 4) - Accelerators
+
+Once these phases are complete, VibeCode will match or exceed Claude Code's capabilities while offering:
+
+✅ **Multi-user SaaS deployment**
+✅ **Visual app building** (Vibe Builder)
+✅ **Enterprise-grade multi-agent orchestration**
+✅ **Pure Rust backend** (no Node.js dependency)
+✅ **Integrated MCP servers** (extensible tools)
+✅ **Integrated browser automation** (chromiumoxide)
+✅ **Professional development environment**
+
+**Total Estimated Effort:** 113-141 hours (~3-4 weeks with 1 developer)
diff --git a/VIBE.md b/VIBE.md
new file mode 100644
index 0000000..cb6fb40
--- /dev/null
+++ b/VIBE.md
@@ -0,0 +1,1068 @@
+# VibeCode Platform - Complete Implementation Roadmap
+
+## Executive Summary
+
+**Current Status:** BotUI's backend is **80% complete** with powerful LLM-driven code generation. The platform needs professional frontend tools AND must support **two deployment models**:
+
+1. **Internal GB Apps** - Apps served from GB platform using shared APIs
+2. **External Forgejo ALM Projects** - Apps deployed to Forgejo repositories with CI/CD
+
+**What Works (Backend):**
+- ✅ LLM-powered app generation (AppGenerator: 3400+ lines)
+- ✅ Multi-agent pipeline (Orchestrator: Plan → Build → Review → Deploy → Monitor)
+- ✅ Real-time WebSocket progress
+- ✅ Database schema generation
+- ✅ File generation (HTML, CSS, JS, BAS)
+- ✅ Designer AI (runtime modifications with undo/redo)
+- ✅ chromiumoxide dependency for browser automation
+- ✅ **Forgejo ALM integration** (mTLS, runners, port 3000)
+- ✅ **MCP servers integration** (`botserver/src/sources/`)
+- ✅ **App deployment** (`/apps/{name}` routes, Drive storage)
+
+**What's Missing (Critical Gaps):**
+- ❌ **Security fixes** - Unsafe unwraps, dependency vulnerabilities
+- ❌ **Deployment routing** - Logic to choose internal vs external
+- ❌ **Forgejo git push** - Repository initialization & CI/CD generation
+- ❌ **MCP UI panel** - Integration into Vibe sidebar
+- ❌ **Monaco editor** - Currently just textarea
+- ❌ **Database UI** - No schema visualizer
+- ❌ **Git operations UI** - No version control interface
+- ❌ **Browser automation UI** - Engine exists, no frontend
+- ❌ **Multi-file workspace** - Single file editing only
+- ❌ **Enhanced terminal** - Basic implementation only
+
+---
+
+## Table of Contents
+
+1. [Part I: Security & Stability (IMMEDIATE)](#part-i-security--stability)
+2. [Part II: Dual Deployment Infrastructure](#part-ii-dual-deployment-infrastructure)
+3. [Part III: MCP Integration](#part-iii-mcp-integration)
+4. [Part IV: Professional Development Tools](#part-iv-professional-development-tools)
+5. [Part V: Architecture Diagrams](#part-v-architecture-diagrams)
+6. [Part VI: Implementation Phases](#part-vi-implementation-phases)
+7. [Part VII: File Organization](#part-vii-file-organization)
+8. [Part VIII: Testing Strategy](#part-viii-testing-strategy)
+9. [Part IX: Rollout Plan](#part-ix-rollout-plan)
+10. [Part X: Success Metrics](#part-x-success-metrics)
+
+---
+
+## Part I: Security & Stability
+
+**Priority:** ⚠️ **CRITICAL** - Must complete before any feature work
+
+### 1. Unsafe Unwraps in Production
+
+**Issue:** Codebase uses `.unwrap()`, `.expect()`, `panic!()` in production, violating AGENTS.md rules.
+
+**Vulnerable Locations:**
+```
+botserver/src/drive/drive_handlers.rs:269 - Response::builder() unwrap
+botserver/src/basic/compiler/mod.rs - Multiple unwrap() calls
+botserver/src/llm/llm_models/deepseek_r3.rs - unwrap() outside tests
+botserver/src/botmodels/opencv.rs - Test scope unwrap() leaks
+```
+
+**Action Items:**
+- [ ] Replace ALL `.unwrap()` with safe alternatives:
+ - Use `?` operator with proper error propagation
+ - Use `unwrap_or_default()` for defaults
+ - Use pattern matching with early returns
+ - Apply `ErrorSanitizer` to avoid panics
+- [ ] Run `cargo clippy -- -W clippy::unwrap_used -W clippy::expect_used`
+- [ ] Add unit tests verifying error paths work correctly
+
+**Estimated Effort:** 4-6 hours
+
+---
+
+### 2. Dependency Vulnerabilities
+
+**Vulnerable Component:**
+- **Crate:** `glib 0.18.5`
+- **Advisory:** `RUSTSEC-2024-0429`
+- **Issue:** Unsoundness in `Iterator` and `DoubleEndedIterator` impls
+- **Context:** Pulled through `botdevice`/`botapp` via Tauri/GTK
+
+**Action Items:**
+- [ ] Review exact usage of glib in codebase
+- [ ] Check if patches are available in newer versions
+- [ ] Evaluate risk given desktop GUI context
+- [ ] If critical: upgrade GTK/Glib dependencies
+- [ ] If acceptable: document risk assessment
+
+**Estimated Effort:** 2-4 hours
+
+---
+
+### 3. General Security Posture
+
+**CSRF Protection:**
+- ✅ Custom CSRF store exists: `redis_csrf_store.rs`
+- ⚠️ **Verify:** ALL state-changing endpoints use it (standard `tower-csrf` is absent)
+
+**Security Headers:**
+- ✅ `headers.rs` provides CSP, HSTS, X-Frame-Options
+- ⚠️ **Verify:** Headers are attached UNIVERSALLY, not selectively omitted
+
+**Action Items:**
+- [ ] Audit all POST/PUT/DELETE endpoints for CSRF validation
+- [ ] Create middleware test to ensure security headers on all responses
+- [ ] Document security checklist for new endpoints
+
+**Estimated Effort:** 3-4 hours
+
+---
+
+## Part II: Dual Deployment Infrastructure
+
+**Priority:** 🔴 **CRITICAL** - Core feature missing
+
+### Current State
+
+**Existing Infrastructure:**
+```rust
+// Forgejo ALM already configured:
+botserver/src/security/mutual_tls.rs:150
+ - configure_forgejo_mtls() - mTLS for Forgejo
+
+botserver/src/core/package_manager/installer.rs
+ - forgejo binary installer
+ - forgejo-runner integration
+ - ALM_URL environment variable
+ - Port 3000 for Forgejo web UI
+
+botserver/src/basic/keywords/create_site.rs
+ - CREATE SITE keyword
+ - Stores to Drive: apps/{alias}
+ - Serves from: /apps/{alias}
+```
+
+### Architecture: Dual Deployment Model
+
+```
+┌──────────────────────────────────────────────────────────────────┐
+│ USER REQUEST │
+│ "I want a full CRM system" │
+└────────────────────────────┬─────────────────────────────────────┘
+ │
+ ▼
+┌──────────────────────────────────────────────────────────────────┐
+│ VIBE BUILDER UI │
+│ ┌──────────────────┐ ┌──────────────────┐ │
+│ │ Agent Sidebar │ │ Canvas Area │ │
+│ │ (Mantis #1-4) │ │ - Task Nodes │ │
+│ │ - Status cards │ │ - Preview │ │
+│ │ - Workspaces │ │ - Chat Overlay │ │
+│ └──────────────────┘ └──────────────────┘ │
+│ │
+│ ⚠️ DEPLOYMENT CHOICE: │
+│ ┌─────────────────────────────────────────────────────┐ │
+│ │ 📱 Deploy to GB Platform 🌐 Deploy to Forgejo │ │
+│ │ - Serve from /apps/ - Push to repo │ │
+│ │ - Use GB API - CI/CD pipeline │ │
+│ │ - Fast iteration - Custom domain │ │
+│ │ - Shared resources - Independent │ │
+│ └─────────────────────────────────────────────────────┘ │
+└────────────────────────────┬─────────────────────────────────────┘
+ │
+ ┌────────────┴────────────┐
+ │ │
+ ▼ ▼
+┌───────────────────────┐ ┌──────────────────────────────────┐
+│ INTERNAL GB APPS │ │ EXTERNAL FORGEJO PROJECTS │
+│ │ │ │
+│ Deployment Flow: │ │ Deployment Flow: │
+│ 1. Generate files │ │ 1. Generate files │
+│ 2. Store in Drive │ │ 2. Init git repo │
+│ 3. Serve from /apps/ │ │ 3. Push to Forgejo │
+│ 4. Use GB APIs │ │ 4. Create CI/CD (.forgejo/*) │
+│ 5. Shared DB │ │ 5. Runner builds & deploys │
+│ 6. Shared auth │ │ 6. Independent deployment │
+│ │ │ 7. Custom domain │
+│ ┌─────────────────┐ │ │ │
+│ │ App Router │ │ │ ┌──────────────────────────────┐ │
+│ │ /apps/{name} │ │ │ │ Forgejo ALM (port 3000) │ │
+│ │ - HTMX routes │ │ │ │ - Git server │ │
+│ │ - API proxy │ │ │ │ - CI/CD (.forgejo/workflows) │ │
+│ │ - Auth wrapper │ │ │ │ - Packages (npm, cargo) │ │
+│ └─────────────────┘ │ │ │ - Actions runner │ │
+│ │ │ └──────────────────────────────┘ │
+└───────────────────────┘ └──────────────────────────────────┘
+```
+
+### Phase 0.1: Deployment Router
+
+**File:** `botserver/src/deployment/mod.rs`
+
+```rust
+use serde::{Deserialize, Serialize};
+use std::path::PathBuf;
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub enum DeploymentTarget {
+ /// Serve from GB platform (/apps/{name})
+ Internal {
+ route: String,
+ shared_resources: bool,
+ },
+ /// Deploy to external Forgejo repository
+ External {
+ repo_url: String,
+ custom_domain: Option,
+ ci_cd_enabled: bool,
+ },
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct DeploymentConfig {
+ pub app_name: String,
+ pub target: DeploymentTarget,
+ pub environment: DeploymentEnvironment,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub enum DeploymentEnvironment {
+ Development,
+ Staging,
+ Production,
+}
+
+pub struct DeploymentRouter {
+ forgejo_url: String,
+ forgejo_token: Option,
+ internal_base_path: PathBuf,
+}
+
+impl DeploymentRouter {
+ pub async fn deploy(
+ &self,
+ config: DeploymentConfig,
+ generated_app: GeneratedApp,
+ ) -> Result {
+ match config.target {
+ DeploymentTarget::Internal { route, .. } => {
+ self.deploy_internal(route, generated_app).await
+ }
+ DeploymentTarget::External { ref repo_url, .. } => {
+ self.deploy_external(repo_url, generated_app).await
+ }
+ }
+ }
+}
+```
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+### Phase 0.2: Forgejo Integration
+
+**File:** `botserver/src/deployment/forgejo.rs`
+
+```rust
+use git2::{Repository};
+use reqwest::Client;
+
+pub struct ForgejoClient {
+ base_url: String,
+ token: String,
+ client: Client,
+}
+
+impl ForgejoClient {
+ /// Create a new repository in Forgejo
+ pub async fn create_repository(
+ &self,
+ name: &str,
+ description: &str,
+ private: bool,
+ ) -> Result {
+ // API call to create repo
+ todo!()
+ }
+
+ /// Push generated app to Forgejo repository
+ pub async fn push_app(
+ &self,
+ repo_url: &str,
+ app: &GeneratedApp,
+ branch: &str,
+ ) -> Result {
+ // 1. Initialize local git repo
+ // 2. Add all files
+ // 3. Create commit
+ // 4. Add Forgejo remote
+ // 5. Push to Forgejo
+ todo!()
+ }
+
+ /// Create CI/CD workflow for the app
+ pub async fn create_cicd_workflow(
+ &self,
+ repo_url: &str,
+ app_type: AppType,
+ build_config: BuildConfig,
+ ) -> Result<(), ForgejoError> {
+ // Create .forgejo/workflows/deploy.yml
+ todo!()
+ }
+}
+```
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+### Phase 0.3: Deployment UI
+
+**File:** `botui/ui/suite/partials/vibe-deployment.html`
+
+```html
+
+
+
+
Choose Deployment Target
+
+
+
+
+
📱
+
GB Platform
+
Deploy directly to the GB platform with shared resources
+
+ - ✓ Fast deployment
+ - ✓ Shared authentication
+ - ✓ Shared database
+ - ✓ API integration
+
+
+
+
+
+
🌐
+
Forgejo ALM
+
Deploy to an external Forgejo repository with full CI/CD
+
+ - ✓ Independent deployment
+ - ✓ Custom domain
+ - ✓ Version control
+ - ✓ CI/CD pipelines
+
+
+
+
+
+
+
+
+
+```
+
+**Estimated Effort:** 8-10 hours
+
+---
+
+## Part III: MCP Integration
+
+**Priority:** 🟡 **HIGH** - Leverage existing infrastructure
+
+### What Already Exists
+
+**Backend Implementation:**
+```
+botserver/src/sources/
+├── mod.rs # Module exports
+├── mcp.rs # MCP client, connection, server types
+├── ui.rs # HTML pages for /suite/sources/*
+├── knowledge_base.rs # Knowledge base upload/query
+└── sources_api # API endpoints
+```
+
+**API Endpoints (40+ endpoints):**
+```
+/suite/sources:
+ - Main sources list page
+ - MCP server catalog
+ - Add MCP server form
+
+/api/ui/sources/*:
+ - /api/ui/sources/mcp - List MCP servers
+ - /api/ui/sources/mcp/:name/enable - Enable server
+ - /api/ui/sources/mcp/:name/tools - List tools
+ - /api/ui/sources/kb/query - Query knowledge base
+ - /api/ui/sources/repositories - List repos
+ - /api/ui/sources/apps - List apps
+```
+
+### Integration Task: Add MCP Panel to Vibe
+
+**Goal:** Show connected MCP servers in Vibe sidebar
+
+**Files to Create:**
+1. `botui/ui/suite/partials/vibe-mcp-panel.html` - MCP panel UI
+2. `botui/ui/suite/js/vibe-mcp.js` - Server management JavaScript
+3. `botui/ui/suite/vibe/mcp-panel.css` - Styling
+
+**Features:**
+- List connected MCP servers
+- Show server status (active/inactive)
+- Display available tools per server
+- Quick enable/disable toggles
+- "Add Server" button (opens `/suite/sources/mcp/add`)
+
+**Estimated Effort:** 6-8 hours
+
+---
+
+## Part IV: Professional Development Tools
+
+### Phase 1: Code Editor Integration (P0 - Critical)
+
+**Goal:** Replace textarea with Monaco Editor
+
+**Tasks:**
+1. Download Monaco Editor
+ ```bash
+ cd botui
+ npm install monaco-editor@0.45.0
+ cp -r node_modules/monaco-editor min/vs ui/suite/js/vendor/
+ ```
+
+2. Create Editor Component
+ - `botui/ui/suite/partials/editor.html`
+ - Monaco container with tab bar
+ - File tree sidebar
+ - Save/Publish buttons
+
+3. Editor JavaScript
+ - `botui/ui/suite/js/editor.js`
+ - Monaco initialization
+ - Language detection (.html, .css, .js, .bas, .json)
+ - Tab management (open, close, switch)
+ - Auto-save with WebSocket sync
+
+4. API Endpoints
+ - `botserver/src/api/editor.rs`
+ - GET `/api/editor/file/{path}` - Read file
+ - POST `/api/editor/file/{path}` - Save file
+ - GET `/api/editor/files` - List files
+
+**Estimated Effort:** 8-12 hours
+
+---
+
+### Phase 2: Database UI & Schema Visualization (P0 - Critical)
+
+**Goal:** Visual database management and query builder
+
+**Tasks:**
+1. Schema Visualizer Component
+ - `botui/ui/suite/partials/database.html`
+ - Canvas-based ER diagram
+ - Table cards with fields
+ - Relationship lines (foreign keys)
+
+2. Database JavaScript
+ - `botui/ui/suite/js/database.js`
+ - Fetch schema: `/api/database/schema`
+ - Render tables using Canvas API
+
+3. Backend API
+ - `botserver/src/api/database.rs`
+ - GET `/api/database/schema` - Tables, fields, relationships
+ - GET `/api/database/table/{name}/data` - Paginated data
+ - POST `/api/database/query` - Execute SQL
+
+**Estimated Effort:** 16-20 hours
+
+---
+
+### Phase 3: Git Operations UI (P1 - High Priority)
+
+**Goal:** Version control interface in Vibe
+
+**Tasks:**
+1. Git Status Panel
+ - `botui/ui/suite/partials/git-status.html`
+ - File list with status icons
+ - Stage/unstage checkboxes
+
+2. Diff Viewer
+ - `botui/ui/suite/partials/git-diff.html`
+ - Side-by-side comparison
+
+3. Backend API
+ - `botserver/src/api/git.rs`
+ - GET `/api/git/status` - Git status
+ - GET `/api/git/diff/{file}` - File diff
+ - POST `/api/git/commit` - Create commit
+ - GET `/api/git/branches` - List branches
+
+**Forgejo-Specific Features:**
+- View Forgejo repository status
+- Sync with Forgejo remote
+- View CI/CD pipeline status
+- Trigger manual builds
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+### Phase 4: Browser Automation Engine (P1 - High Priority)
+
+**Goal:** Pure Rust browser automation for testing & recording
+
+**Why Rust + Chromiumoxide:**
+- ✅ Already in workspace: `chromiumoxide = "0.7"`
+- ✅ No Node.js dependency
+- ✅ Reference implementation: `bottest/src/web/browser.rs`
+
+**Tasks:**
+1. Core Browser Module
+ - `botserver/src/browser/mod.rs`
+ - `BrowserSession`, `BrowserManager`
+ - Methods: `navigate()`, `click()`, `fill()`, `screenshot()`
+
+2. Action Recorder
+ - `botserver/src/browser/recorder.rs`
+ - `RecordedAction` - Navigate, Click, Fill, Wait, Assert
+ - Export as Playwright test
+
+3. Browser API
+ - `botserver/src/browser/api.rs`
+ - POST `/api/browser/session` - Create session
+ - POST `/api/browser/session/:id/execute` - Run action
+ - POST `/api/browser/session/:id/record/start` - Start recording
+
+4. Vibe UI - Browser Panel
+ - `botui/ui/suite/partials/browser-controls.html`
+ - `botui/ui/suite/js/browser.js`
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+### Phase 5: Multi-File Editing Workspace (P2 - Medium Priority)
+
+**Goal:** Professional multi-file editing
+
+**Tasks:**
+1. Tab Management
+ - File tabs with close buttons
+ - Active tab highlighting
+ - Drag to reorder
+
+2. Split-Pane Layout
+ - Split horizontal/vertical buttons
+ - Resize handles
+ - 2x2 grid max
+
+3. File Tree Sidebar
+ - Nested folders
+ - File type icons
+ - Double-click to open
+
+4. Quick Open
+ - Ctrl+P → Search files
+ - Fuzzy matching
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+### Phase 6: Enhanced Terminal (P2 - Medium Priority)
+
+**Goal:** Interactive shell in Vibe
+
+**Tasks:**
+1. Terminal Container
+ - xterm.js integration (already vendor file)
+ - Multiple terminal tabs
+
+2. WebSocket Terminal
+ - Bi-directional WebSocket: `/ws/terminal/{session_id}`
+ - Handle ANSI escape codes
+
+3. Backend Terminal Server
+ - Spawn PTY per session
+ - WebSocket handler
+
+**Estimated Effort:** 10-14 hours
+
+---
+
+### Phase 7: Advanced CRM Templates (P2 - Medium Priority)
+
+**Goal:** Pre-built CRM accelerators
+
+**Tasks:**
+1. Template System
+ - `botserver/src/templates/crm/`
+ - Template JSON definitions
+
+2. CRM Templates
+ - **Sales CRM** - contacts, leads, opportunities
+ - **Real Estate CRM** - properties, clients, showings
+ - **Healthcare CRM** - patients, appointments, treatments
+
+3. Template Gallery UI
+ - `botui/ui/suite/partials/template-gallery.html`
+
+4. Template Generator
+ - Load template JSON
+ - Generate all files
+ - Deploy to target (internal/external)
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+## Part V: Architecture Diagrams
+
+### Overall System Architecture
+
+```
+┌─────────────────────────────────────────────────────────────┐
+│ USER REQUEST │
+│ "I want a full CRM system" │
+└────────────────────────┬────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────────────────────────────┐
+│ VIBE BUILDER UI │
+│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
+│ │ Orchestrator│ │AppGenerator│ │Designer AI │ │
+│ │ (5 agents) │ │(LLM-driven)│ │(modifications)│ │
+│ └────────────┘ └────────────┘ └────────────┘ │
+│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
+│ │ Browser │ │ Git │ │ Terminal │ │
+│ │ Automation │ │ Operations │ │ Service │ │
+│ │(chromiumoxide)│ │(git2) │ │(xterm.js) │ │
+│ └────────────┘ └────────────┘ └────────────┘ │
+│ ┌────────────────────────────────────────────┐ │
+│ │ MCP & Sources Integration ← ALREADY EXISTS │ │
+│ │ - botserver/src/sources/mcp.rs │ │
+│ │ - /api/ui/sources/* endpoints │ │
+│ └────────────────────────────────────────────┘ │
+└────────────────────────┬────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────────────────────────────┐
+│ DEPLOYMENT CHOICE │
+│ ┌──────────────────┐ ┌──────────────────┐ │
+│ │ INTERNAL GB APPS │ │ FORGEJO ALM │ │
+│ │ - /apps/{name} │ │ - Git repo │ │
+│ │ - GB APIs │ │ - CI/CD │ │
+│ │ - Shared DB │ │ - Custom domain │ │
+│ └──────────────────┘ └──────────────────┘ │
+└────────────────────────┬────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────────────────────────────┐
+│ GENERATED OUTPUT │
+│ - PostgreSQL tables │
+│ - HTML pages with HTMX │
+│ - CSS styling │
+│ - JavaScript │
+│ - BASIC tools/schedulers │
+│ - E2E tests (Playwright) │
+└─────────────────────────────────────────────────────────────┘
+```
+
+### Vibe UI Layout
+
+```
+┌──────────────────────────────────────────────────────────────┐
+│ VIBE BUILDER │
+├──────────────┬───────────────────────────────────────────────┤
+│ │ PIPELINE TABS │
+│ AGENTS │ [PLAN] [BUILD] [REVIEW] [DEPLOY] [MONITOR] │
+│ SIDEBAR ├───────────────────────────────────────────────┤
+│ │ │
+│ ┌──────────┐ │ CANVAS AREA │
+│ │Mantis #1│ │ - Task nodes (horizontal flow) │
+│ │ EVOLVED │ │ - Preview panel │
+│ └──────────┘ │ - Chat overlay │
+│ ┌──────────┐ │ │
+│ │Mantis #2│ │ [DEPLOYMENT BUTTON] │
+│ │ BRED │ │ │
+│ └──────────┘ │ │
+│ ┌──────────┐ │ │
+│ │Mantis #3│ │ │
+│ │ WILD │ │ │
+│ └──────────┘ │ │
+│ │ │
+│ [+ NEW AGENT] │ │
+├──────────────┤ │
+│ WORKSPACES │ │
+│ ┌──────────┐ │ │
+│ │E-Commerce│ │ │
+│ │ App │ │ │
+│ └──────────┘ │ │
+│ │ │
+│ [+ PROJECT] │ │
+├──────────────┤ │
+│ SOURCES │ [NEW - MCP Integration] │
+│ ┌──────────┐ │ │
+│ │🔌 GitHub │ │ │
+│ │ MCP │ │ │
+│ └──────────┘ │ │
+│ ┌──────────┐ │ │
+│ │🗄️ Postgres│ │ │
+│ │ MCP │ │ │
+│ └──────────┘ │ │
+│ │ │
+│ [+ ADD MCP] │ │
+└──────────────┴───────────────────────────────────────────────┘
+```
+
+---
+
+## Part VI: Implementation Phases
+
+### Milestone 0: Security & Deployment Infrastructure (Week 0)
+
+**Day 1-2:** Security Fixes
+- Fix all unsafe `unwrap()` calls
+- Address dependency vulnerabilities
+- Verify CSRF & security headers
+
+**Day 3-4:** Deployment Router
+- `botserver/src/deployment/mod.rs`
+- DeploymentTarget enum
+- DeploymentRouter implementation
+
+**Day 5-6:** Forgejo Integration
+- `botserver/src/deployment/forgejo.rs`
+- ForgejoClient implementation
+- CI/CD workflow generation
+
+**Day 7:** Deployment UI
+- `botui/ui/suite/partials/vibe-deployment.html`
+- Deployment modal
+- Integration into Vibe
+
+**Success Criteria:**
+- ✅ Zero `unwrap()` in production code
+- ✅ `cargo audit` passes
+- ✅ Can deploy internally to /apps/{name}
+- ✅ Can deploy externally to Forgejo
+- ✅ CI/CD pipeline auto-generates
+
+---
+
+### Milestone 1: Core Editor (Week 1)
+
+- Phase 1 complete (Monaco integration)
+
+**Success Criteria:**
+- Monaco loads < 2 seconds
+- 5+ syntax highlighters work
+- Multi-file tabs functional
+
+---
+
+### Milestone 2: Database & Git (Week 2)
+
+- Phase 2 complete (Database UI)
+- Phase 3 complete (Git Operations + Forgejo)
+
+**Success Criteria:**
+- Schema visualizer displays all tables
+- Query builder generates valid SQL
+- Git status shows changed files
+- Forgejo sync works
+
+---
+
+### Milestone 3: Browser & Workspace (Week 3)
+
+- Phase 4 complete (Browser Automation)
+- Phase 5 complete (Multi-File Editing)
+
+**Success Criteria:**
+- Can navigate to any URL
+- Recording generates valid tests
+- 10+ files open in tabs
+- Split view supports 2-4 panes
+
+---
+
+### Milestone 4: Terminal & Templates (Week 4)
+
+- Phase 6 complete (Enhanced Terminal)
+- Phase 7 complete (CRM Templates)
+
+**Success Criteria:**
+- Interactive shell works
+- Multiple terminals run simultaneously
+- 3+ CRM templates available
+- Generation takes < 30 seconds
+
+---
+
+## Part VII: File Organization
+
+### Botserver (Backend)
+
+```
+botserver/src/
+ deployment/ # NEW - Deployment infrastructure
+ mod.rs # DeploymentRouter
+ forgejo.rs # ForgejoClient
+ api.rs # Deployment API endpoints
+ templates.rs # CI/CD workflow templates
+ api/
+ editor.rs # NEW - Code editor API
+ database.rs # NEW - Database UI API
+ git.rs # NEW - Git operations API
+ browser/
+ mod.rs # NEW - BrowserSession, BrowserManager
+ recorder.rs # NEW - ActionRecorder
+ validator.rs # NEW - TestValidator
+ api.rs # NEW - HTTP endpoints
+ test_generator.rs # NEW - Test script generator
+ templates/ # NEW - CRM templates
+ crm/
+ sales.json
+ real_estate.json
+ healthcare.json
+ mod.rs
+ sources/ # EXISTING - MCP integration
+ mod.rs
+ mcp.rs
+ ui.rs
+ knowledge_base.rs
+```
+
+### Botui (Frontend)
+
+```
+botui/ui/suite/
+ partials/
+ vibe.html # EXISTING - Main Vibe UI
+ vibe-deployment.html # NEW - Deployment modal
+ vibe-mcp-panel.html # NEW - MCP panel
+ editor.html # NEW - Code editor
+ database.html # NEW - Database UI
+ git-status.html # NEW - Git status
+ git-diff.html # NEW - Diff viewer
+ browser-controls.html # NEW - Browser automation
+ terminal.html # NEW - Terminal
+ template-gallery.html # NEW - Template gallery
+ js/
+ deployment.js # NEW - Deployment logic
+ editor.js # NEW - Monaco integration
+ database.js # NEW - Database UI
+ git.js # NEW - Git operations
+ browser.js # NEW - Browser automation
+ terminal.js # NEW - Terminal
+ templates.js # NEW - Templates
+ css/
+ deployment.css # NEW - Deployment styles
+ editor.css # NEW - Editor styles
+ database.css # NEW - Database styles
+ git.css # NEW - Git styles
+ browser.css # NEW - Browser styles
+ terminal.css # NEW - Terminal styles
+ templates.css # NEW - Template styles
+ vibe/
+ agents-sidebar.css # EXISTING
+ mcp-panel.css # NEW - MCP panel styles
+```
+
+---
+
+## Part VIII: Testing Strategy
+
+### Unit Tests
+- All new modules need unit tests
+- Test coverage > 80%
+- Location: `botserver/src//tests.rs`
+
+### Integration Tests
+- End-to-end workflows
+- Location: `bottest/tests/integration/`
+
+### E2E Tests
+- Use chromiumoxide (bottest infrastructure)
+- Location: `bottest/tests/e2e/`
+- Test scenarios:
+ - Generate CRM from template
+ - Deploy internally to /apps/{name}
+ - Deploy externally to Forgejo
+ - Edit in Monaco editor
+ - View database schema
+ - Create git commit
+ - Record browser test
+
+---
+
+## Part IX: Rollout Plan
+
+### Week 0: Security & Deployment (CRITICAL)
+- **Day 1-2:** Security fixes
+- **Day 3-4:** Deployment Router
+- **Day 5-6:** Forgejo Integration
+- **Day 7:** Deployment UI
+
+### Week 1: Code Editor
+- Monaco integration
+- File tree
+- Tab management
+
+### Week 2: Database & Git
+- Schema visualizer
+- Query builder
+- Git operations
+- Forgejo sync
+
+### Week 3: Browser & Workspace
+- Browser automation UI
+- Multi-file editing
+- Split-pane layout
+
+### Week 4: Terminal & Templates
+- Enhanced terminal
+- CRM templates
+- Template gallery
+
+---
+
+## Part X: Success Metrics
+
+### Security Milestones
+- ✅ Zero `unwrap()` in production code
+- ✅ `cargo audit` passes
+- ✅ All endpoints have CSRF + security headers
+
+### Deployment Infrastructure
+- ✅ Internal deployment < 30 seconds
+- ✅ External Forgejo deployment < 2 minutes
+- ✅ CI/CD pipeline auto-generates
+- ✅ Both models accessible from Vibe UI
+
+### MCP Integration
+- ✅ MCP panel visible in Vibe sidebar
+- ✅ Can enable/disable servers
+- ✅ Can view available tools
+- ✅ Can add new servers
+
+### Code Editor
+- Monaco loads < 2 seconds
+- 5+ syntax highlighters work
+- Multi-file tabs functional
+- Auto-save succeeds
+
+### Database UI
+- Schema visualizer displays all tables
+- Query builder generates valid SQL
+- Data grid supports inline edits
+- Export works correctly
+
+### Git Operations
+- Git status shows changed files
+- Diff viewer shows side-by-side
+- Commit workflow works end-to-end
+- Forgejo sync succeeds
+
+### Browser Automation
+- Can navigate to any URL
+- Element picker captures selectors
+- Recording generates valid tests
+- Screenshots capture correctly
+
+### Multi-File Workspace
+- 10+ files open in tabs
+- Split view supports 2-4 panes
+- File comparison works
+- Project search is fast (< 1s for 100 files)
+
+### Terminal
+- Interactive shell works
+- Can run vim, top, etc.
+- Multiple terminals run simultaneously
+- File transfer works
+
+### CRM Templates
+- 3+ CRM templates available
+- Generation takes < 30 seconds
+- Generated CRMs are fully functional
+- Industry-specific features work
+
+---
+
+## Conclusion
+
+The VibeCode platform has a **powerful backend** capable of generating full applications via LLM. The main gaps are in **frontend user experience**, **security hardening**, and **deployment routing**.
+
+**Critical Path:**
+1. ⚠️ **Week 0:** Security fixes + Deployment infrastructure
+2. 🔌 **Week 0.5:** MCP integration in Vibe
+3. 📝 **Week 1:** Monaco code editor
+4. 🗄️ **Week 2:** Database UI + Git operations
+5. 🌐 **Week 3:** Browser automation + Multi-file workspace
+6. 🖥️ **Week 4:** Terminal + CRM templates
+
+Once these phases are complete, VibeCode will match or exceed Claude Code's capabilities while offering:
+
+✅ **Dual deployment model** (Internal GB Apps + External Forgejo Projects)
+✅ **Multi-user SaaS deployment**
+✅ **Visual app building** (Vibe Builder)
+✅ **Enterprise-grade multi-agent orchestration**
+✅ **Pure Rust backend** (no Node.js dependency)
+✅ **Integrated MCP servers** (extensible tools)
+✅ **Integrated browser automation** (chromiumoxide)
+✅ **Professional development environment**
+
+**Total Estimated Effort:** 165-205 hours (~4-5 weeks with 1 developer)
+
+---
+
+## Appendix: Code Quality Standards
+
+**MUST Follow (per AGENTS.md):**
+1. ✅ **Error Handling** - NO panics, use `?` operator
+2. ✅ **Safe Commands** - Use `SafeCommand` wrapper
+3. ✅ **Error Sanitization** - Use `ErrorSanitizer`
+4. ✅ **SQL Safety** - Use `sql_guard`
+5. ✅ **Rate Limiting** - Per-IP and per-User limits
+6. ✅ **CSRF Protection** - CSRF tokens on state-changing endpoints
+7. ✅ **Security Headers** - CSP, HSTS, X-Frame-Options
+8. ✅ **No CDNs** - All assets local
+9. ✅ **File Size** - Max 450 lines per file
+10. ✅ **Clippy Clean** - 0 warnings, no `#[allow()]`
+
+---
+
+## Appendix: Dependencies
+
+### Backend (Already in Workspace)
+
+```toml
+[dependencies]
+chromiumoxide = "0.7" # Browser automation
+tokio = "1.41" # Async runtime
+axum = "0.7" # HTTP framework
+diesel = "2.1" # Database
+git2 = "0.18" # Git operations
+reqwest = { version = "0.11", features = ["json"] } # HTTP client
+```
+
+### Frontend (Download & Serve Locally)
+
+```bash
+# Code editor
+npm install monaco-editor@0.45.0
+
+# Terminal (already vendor file exists)
+# xterm.js@5.3.0
+```
+
+---
+
+**Document Version:** 2.0
+**Last Updated:** 2025-02-28
+**Status:** Ready for Implementation
diff --git a/package-lock.json b/package-lock.json
index 2740c40..3f0e90f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,8 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
+ "jsonwebtoken": "^9.0.3",
+ "node-fetch": "^3.3.2",
"ws": "^8.19.0"
},
"devDependencies": {
@@ -42,6 +44,65 @@
"undici-types": "~7.16.0"
}
},
+ "node_modules/buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ },
+ "engines": {
+ "node": "^12.20 || >= 14.13"
+ }
+ },
+ "node_modules/formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "license": "MIT",
+ "dependencies": {
+ "fetch-blob": "^3.1.2"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
@@ -57,6 +118,135 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
+ "node_modules/jsonwebtoken": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz",
+ "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==",
+ "license": "MIT",
+ "dependencies": {
+ "jws": "^4.0.1",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/jwa": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz",
+ "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer-equal-constant-time": "^1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz",
+ "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==",
+ "license": "MIT",
+ "dependencies": {
+ "jwa": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "license": "MIT"
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "deprecated": "Use your platform's native DOMException instead",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.5.0"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+ "license": "MIT",
+ "dependencies": {
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-fetch"
+ }
+ },
"node_modules/playwright": {
"version": "1.58.2",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz",
@@ -89,6 +279,38 @@
"node": ">=18"
}
},
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/undici-types": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
@@ -96,6 +318,15 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/ws": {
"version": "8.19.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz",
diff --git a/package.json b/package.json
index 4fbb238..a2d207a 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,8 @@
},
"scripts": {},
"dependencies": {
+ "jsonwebtoken": "^9.0.3",
+ "node-fetch": "^3.3.2",
"ws": "^8.19.0"
}
}
diff --git a/reset.sh b/reset.sh
index 5a8d08f..35c3c9e 100755
--- a/reset.sh
+++ b/reset.sh
@@ -1 +1,109 @@
-rm -rf botserver-stack/ ./work/ .env
+#!/bin/bash
+set -e
+
+#######################################
+# General Bots Development Environment Reset Script
+# Description: Cleans and restarts the development environment
+# Usage: ./reset.sh
+#######################################
+
+# Color codes for output
+readonly GREEN='\033[0;32m'
+readonly YELLOW='\033[1;33m'
+readonly BLUE='\033[0;34m'
+readonly NC='\033[0m' # No Color
+
+# Log function
+log_info() {
+ echo -e "${BLUE}[INFO]${NC} $1"
+}
+
+log_success() {
+ echo -e "${GREEN}[SUCCESS]${NC} $1"
+}
+
+log_warning() {
+ echo -e "${YELLOW}[WARNING]${NC} $1"
+}
+
+# Trap errors and cleanup
+cleanup_on_error() {
+ log_warning "Script encountered an error"
+ exit 1
+}
+
+trap cleanup_on_error ERR
+
+log_info "Starting environment reset..."
+echo ""
+
+# Step 1: Clean up existing installations
+log_info "Step 1/4: Cleaning up existing installation..."
+rm -rf botserver-stack/ ./work/ .env
+log_success "Cleanup complete"
+echo ""
+
+# Step 2: Build and restart services
+log_info "Step 2/4: Building and restarting services..."
+./restart.sh
+log_success "Services restarted"
+echo ""
+
+# Step 3: Wait for bootstrap
+log_info "Step 3/4: Waiting for BotServer to bootstrap (this may take a minute)..."
+
+# Tail the log starting from now, so we only see the new run
+tail -n 0 -f botserver.log | while read line; do
+ # Show bootstrap-related messages
+ if [[ "$line" == *"GENERAL BOTS - INITIAL SETUP"* ]]; then
+ SHOW=1
+ log_info "Bootstrap process started..."
+ fi
+
+ if [[ "$SHOW" == "1" ]]; then
+ echo "$line"
+ elif [[ "$line" == *"Checking if bootstrap is needed"* ]] || \
+ [[ "$line" == *"No admin user found"* ]] || \
+ [[ "$line" == *"Created admin user"* ]] || \
+ [[ "$line" == *"Created default organization"* ]] || \
+ [[ "$line" == *"Starting"* ]] || \
+ [[ "$line" == *"Installing"* ]]; then
+ echo "$line"
+ fi
+
+ # Stop tracking when bootstrap completes
+ if [[ "$line" == *"Bootstrap complete: admin user"* ]] || \
+ [[ "$line" == *"Skipping bootstrap"* ]]; then
+ pkill -P $$ tail || true
+ break
+ fi
+done
+
+log_success "Bootstrap complete"
+echo ""
+
+# Step 4: Final confirmation
+log_info "Step 4/4: Verifying services..."
+sleep 2
+
+if pgrep -f "botserver" > /dev/null; then
+ log_success "BotServer is running"
+else
+ log_warning "BotServer may not be running properly"
+fi
+
+if pgrep -f "botui" > /dev/null; then
+ log_success "BotUI is running"
+else
+ log_warning "BotUI may not be running properly"
+fi
+
+echo ""
+echo "=========================================="
+log_success "✅ Reset complete!"
+echo "=========================================="
+echo ""
+echo "You can now access:"
+echo " - BotUI Desktop: Check the BotUI window or logs"
+echo " - Logs: tail -f botserver.log botui.log"
+echo ""
diff --git a/restart.sh b/restart.sh
index a1d4b96..d39060b 100755
--- a/restart.sh
+++ b/restart.sh
@@ -14,11 +14,11 @@ cargo build -p botserver
cargo build -p botui
echo "Starting botserver..."
-./target/debug/botserver --noconsole > botserver.log 2>&1 &
+RUST_LOG=trace ./target/debug/botserver --noconsole > botserver.log 2>&1 &
echo " PID: $!"
echo "Starting botui..."
-BOTSERVER_URL="http://localhost:9000" ./target/debug/botui > botui.log 2>&1 &
+BOTSERVER_URL="http://localhost:8080" ./target/debug/botui > botui.log 2>&1 &
echo " PID: $!"
echo "Done. Logs: tail -f botserver.log botui.log"
diff --git a/sec.md b/sec.md
new file mode 100644
index 0000000..7f69b46
--- /dev/null
+++ b/sec.md
@@ -0,0 +1,740 @@
+# VibeCode Complete Implementation Roadmap
+
+## Executive Summary
+
+**Current Status:** BotUI's backend is **80% complete** with powerful LLM-driven code generation. The frontend needs professional tools to match Claude Code's capabilities.
+
+**What Works (Backend):**
+- ✅ LLM-powered app generation (AppGenerator: 3400+ lines)
+- ✅ Multi-agent pipeline (Orchestrator: Plan → Build → Review → Deploy → Monitor)
+- ✅ Real-time WebSocket progress
+- ✅ Database schema generation
+- ✅ File generation (HTML, CSS, JS, BAS)
+- ✅ Designer AI (runtime modifications with undo/redo)
+- ✅ chromiumoxide dependency ready for browser automation
+
+**What's Missing (Frontend):**
+- ❌ Monaco/CodeMirror editor (just textarea now)
+- ❌ Database UI (no schema visualizer)
+- ❌ Git operations UI
+- ❌ Browser automation engine (using Rust + chromiumoxide)
+- ❌ Multi-file editing workspace
+- ❌ Enhanced terminal
+
+---
+
+## Architecture
+
+```
+┌─────────────────────────────────────────────────────────────┐
+│ USER REQUEST │
+│ "I want a full CRM system" │
+└────────────────────────┬────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────────────────────────────┐
+│ VIBE BUILDER UI │
+│ - Agent cards (Mantis #1-4) │
+│ - Task nodes visualization │
+│ - WebSocket real-time updates │
+│ - Live chat overlay │
+│ - Code editor (Monaco) ← Phase 1 │
+│ - Browser automation panel ← Phase 4 │
+│ - Database schema visualizer ← Phase 2 │
+│ - Git operations UI ← Phase 3 │
+└────────────────────────┬────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────────────────────────────┐
+│ BOTSERVER (Rust Backend) │
+│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
+│ │ Orchestrator│ │AppGenerator│ │Designer AI │ │
+│ │ (5 agents) │ │(LLM-driven)│ │(modifications)│ │
+│ └────────────┘ └────────────┘ └────────────┘ │
+│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
+│ │ Browser │ │ Git │ │ Terminal │ │
+│ │ Automation │ │ Operations │ │ Service │ │
+│ │(chromiumoxide)│ │(git2) │ │(xterm.js) │ │
+│ └────────────┘ └────────────┘ └────────────┘ │
+└────────────────────────┬────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────────────────────────────┐
+│ GENERATED OUTPUT │
+│ - PostgreSQL tables │
+│ - HTML pages with HTMX │
+│ - CSS styling │
+│ - JavaScript │
+│ - BASIC tools/schedulers │
+│ - E2E tests (Playwright) │
+└─────────────────────────────────────────────────────────────┘
+```
+
+---
+
+## Implementation Phases
+
+### Phase 1: Code Editor Integration (P0 - Critical)
+
+**Goal:** Replace textarea with professional code editor
+
+**Tasks:**
+
+1. **Download Monaco Editor**
+ ```bash
+ cd botui
+ npm install monaco-editor@0.45.0
+ cp -r node_modules/monaco-editor min/vs ui/suite/js/vendor/
+ ```
+
+2. **Create Editor Component**
+ - `botui/ui/suite/partials/editor.html`
+ - Monaco container with tab bar
+ - File tree sidebar
+ - Save/Publish buttons
+
+3. **Editor JavaScript**
+ - `botui/ui/suite/js/editor.js`
+ - Monaco initialization
+ - Language detection (.html, .css, .js, .bas, .json)
+ - Tab management (open, close, switch)
+ - Auto-save with WebSocket sync
+
+4. **API Endpoints**
+ - `botserver/src/api/editor.rs`
+ - GET `/api/editor/file/{path}` - Read file
+ - POST `/api/editor/file/{path}` - Save file
+ - GET `/api/editor/files` - List files
+
+5. **Integration**
+ - Update `chat-agent-mode.html` - replace textarea with Monaco
+ - Update `vibe.html` - add editor panel
+ - Add keyboard shortcuts (Ctrl+S, Ctrl+P, Ctrl+Shift+F)
+
+**Success Criteria:**
+- Monaco loads in < 2 seconds
+- Syntax highlighting for 5+ languages
+- Multi-file tabs work
+- Auto-save completes successfully
+
+**Estimated Effort:** 8-12 hours
+
+---
+
+### Phase 2: Database UI & Schema Visualization (P0 - Critical)
+
+**Goal:** Visual database management and query builder
+
+**Tasks:**
+
+1. **Schema Visualizer Component**
+ - `botui/ui/suite/partials/database.html`
+ - Canvas-based ER diagram
+ - Table cards with fields
+ - Relationship lines (foreign keys)
+ - Zoom/pan controls
+
+2. **Database JavaScript**
+ - `botui/ui/suite/js/database.js`
+ - Fetch schema: `/api/database/schema`
+ - Render tables using Canvas API
+ - Click table → show field details
+ - Drag to rearrange
+
+3. **Query Builder UI**
+ - Visual SELECT builder
+ - Table selection dropdown
+ - Join interface
+ - Filter conditions
+ - SQL preview pane
+
+4. **Data Grid**
+ - Sortable columns
+ - Inline editing
+ - Pagination
+ - Export (CSV/JSON)
+
+5. **Backend API**
+ - `botserver/src/api/database.rs`
+ - GET `/api/database/schema` - Tables, fields, relationships
+ - GET `/api/database/table/{name}/data` - Paginated data
+ - POST `/api/database/query` - Execute SQL
+ - POST `/api/database/table/{name}/row` - Insert/update
+ - DELETE `/api/database/table/{name}/row/{id}` - Delete
+
+**Success Criteria:**
+- ER diagram shows all tables
+- Query builder generates valid SQL
+- Data grid supports inline edits
+- Export works correctly
+
+**Estimated Effort:** 16-20 hours
+
+---
+
+### Phase 3: Git Operations UI (P1 - High Priority)
+
+**Goal:** Version control interface in Vibe
+
+**Tasks:**
+
+1. **Git Status Panel**
+ - `botui/ui/suite/partials/git-status.html`
+ - File list with status icons
+ - Stage/unstage checkboxes
+ - "Commit" button
+
+2. **Diff Viewer**
+ - `botui/ui/suite/partials/git-diff.html`
+ - Side-by-side comparison
+ - Line highlighting (green/red)
+ - Syntax highlighting
+
+3. **Commit Interface**
+ - Message input
+ - "Commit & Push" button
+ - Progress indicator
+
+4. **Branch Manager**
+ - Branch dropdown
+ - "New Branch" dialog
+ - Switch/delete actions
+
+5. **Commit Timeline**
+ - Vertical timeline
+ - Author, date, message
+ - Click → view diff
+
+6. **Backend API**
+ - `botserver/src/api/git.rs`
+ - GET `/api/git/status` - Git status
+ - GET `/api/git/diff/{file}` - File diff
+ - POST `/api/git/commit` - Create commit
+ - POST `/api/git/push` - Push to remote
+ - GET `/api/git/branches` - List branches
+ - POST `/api/git/branch/{name}` - Create/switch
+ - GET `/api/git/log` - Commit history
+
+**Success Criteria:**
+- Git status displays correctly
+- Diff viewer shows side-by-side
+- Commit workflow works end-to-end
+- Branch switching succeeds
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+### Phase 4: Browser Automation Engine (P1 - High Priority)
+
+**Goal:** Pure Rust browser automation for testing & recording
+
+**Why Rust + Chromiumoxide:**
+- ✅ Already in workspace: `chromiumoxide = "0.7"`
+- ✅ No Node.js dependency
+- ✅ Feature flag exists: `browser` in botserver/Cargo.toml
+- ✅ Reference implementation: bottest/src/web/browser.rs (1000+ lines)
+
+**Tasks:**
+
+1. **Core Browser Module**
+ - `botserver/src/browser/mod.rs`
+ - `BrowserSession` - Manage browser instance
+ - `BrowserManager` - Session lifecycle
+ - Methods: `navigate()`, `click()`, `fill()`, `screenshot()`, `execute()`
+
+ ```rust
+ pub struct BrowserSession {
+ id: String,
+ browser: Arc,
+ page: Arc>,
+ created_at: DateTime,
+ }
+
+ impl BrowserSession {
+ pub async fn new(headless: bool) -> Result;
+ pub async fn navigate(&self, url: &str) -> Result<()>;
+ pub async fn click(&self, selector: &str) -> Result<()>;
+ pub async fn fill(&self, selector: &str, text: &str) -> Result<()>;
+ pub async fn screenshot(&self) -> Result>;
+ pub async fn execute(&self, script: &str) -> Result;
+ }
+ ```
+
+2. **Action Recorder**
+ - `botserver/src/browser/recorder.rs`
+ - `RecordedAction` - Navigate, Click, Fill, Wait, Assert
+ - `ActionRecorder` - Record/stop/export
+ - Export as Playwright test
+
+ ```rust
+ #[derive(Serialize, Deserialize)]
+ pub struct RecordedAction {
+ pub timestamp: i64,
+ pub action_type: ActionType,
+ pub selector: Option,
+ pub value: Option,
+ }
+
+ impl ActionRecorder {
+ pub fn start(&mut self);
+ pub fn stop(&mut self) -> Vec;
+ pub fn export_test_script(&self) -> String;
+ }
+ ```
+
+3. **Test Validator**
+ - `botserver/src/browser/validator.rs`
+ - Check for flaky selectors
+ - Validate wait conditions
+ - Suggest improvements via Designer AI
+
+4. **Browser API**
+ - `botserver/src/browser/api.rs`
+ - POST `/api/browser/session` - Create session
+ - POST `/api/browser/session/:id/execute` - Run action
+ - GET `/api/browser/session/:id/screenshot` - Capture
+ - POST `/api/browser/session/:id/record/start` - Start recording
+ - POST `/api/browser/session/:id/record/stop` - Stop & get actions
+ - GET `/api/browser/session/:id/record/export` - Export test
+
+5. **Vibe UI - Browser Panel**
+ - `botui/ui/suite/partials/browser-controls.html`
+ - URL bar with navigation buttons
+ - Record/Stop/Export buttons
+ - Actions timeline
+ - Browser preview iframe
+ - Screenshot gallery
+
+ - `botui/ui/suite/js/browser.js`
+ ```javascript
+ let currentSessionId = null;
+ let isRecording = false;
+ let recordedActions = [];
+
+ async function initBrowser() {
+ const resp = await fetch('/api/browser/session', {
+ method: 'POST',
+ body: JSON.stringify({ headless: false })
+ });
+ currentSessionId = (await resp.json()).id;
+ }
+
+ async function browserNavigate(url) {
+ if (isRecording) {
+ recordedActions.push({
+ type: 'navigate',
+ value: url,
+ timestamp: Date.now()
+ });
+ }
+ await executeAction('navigate', { url });
+ }
+
+ async function browserClick(selector) {
+ if (isRecording) {
+ recordedActions.push({
+ type: 'click',
+ selector: selector,
+ timestamp: Date.now()
+ });
+ }
+ await executeAction('click', { selector });
+ }
+
+ async function exportTest() {
+ const resp = await fetch(`/api/browser/session/${currentSessionId}/record/export`);
+ const data = await resp.json();
+
+ // Download test file
+ const blob = new Blob([data.script], { type: 'text/javascript' });
+ const a = document.createElement('a');
+ a.href = URL.createObjectURL(blob);
+ a.download = `test-${Date.now()}.spec.js`;
+ a.click();
+ }
+ ```
+
+ - `botui/ui/suite/css/browser.css`
+ - Browser panel styling
+ - Recording indicator animation
+ - Actions timeline
+ - Screenshot gallery grid
+
+6. **Integration with Vibe**
+ - Add "Browser Automation" button to Vibe toolbar
+ - Load browser-controls.html in panel
+ - Element picker for selector capture
+ - Screenshot capture & gallery
+
+**Usage Example:**
+```javascript
+// In Vibe UI
+openBrowserPanel();
+toggleRecording(); // Start recording
+browserNavigate('http://localhost:3000/my-crm');
+browserClick('#create-btn');
+browserFill('#name', 'Test');
+browserClick('#save-btn');
+toggleRecording(); // Stop recording
+exportTest(); // Download test-123.spec.js
+```
+
+**Generated Test Output:**
+```javascript
+import { test, expect } from '@playwright/test';
+
+test('Recorded test', async ({ page }) => {
+ await page.goto('http://localhost:3000/my-crm');
+ await page.click('#create-btn');
+ await page.fill('#name', 'Test');
+ await page.click('#save-btn');
+});
+```
+
+**Success Criteria:**
+- Can navigate to any URL
+- Element picker captures selectors
+- Recording generates valid Playwright tests
+- Screenshots capture correctly
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+### Phase 5: Multi-File Editing Workspace (P2 - Medium Priority)
+
+**Goal:** Professional multi-file editing
+
+**Tasks:**
+
+1. **Tab Management**
+ - File tabs with close buttons
+ - Active tab highlighting
+ - Tab overflow scrolling
+ - Drag to reorder
+
+2. **Split-Pane Layout**
+ - Split horizontal/vertical buttons
+ - Resize handles
+ - 2x2 grid max
+
+3. **File Comparison**
+ - Side-by-side diff
+ - Line-by-line navigation
+ - Copy changes (L→R)
+
+4. **File Tree Sidebar**
+ - Nested folders
+ - File type icons
+ - Expand/collapse
+ - Double-click to open
+
+5. **Quick Open**
+ - Ctrl+P → Search files
+ - Fuzzy matching
+ - Arrow navigation
+
+6. **Project Search**
+ - Ctrl+Shift+F → Search all files
+ - Results with line numbers
+ - Click to open file
+
+**Success Criteria:**
+- 10+ files open in tabs
+- Split view works (2-4 panes)
+- File comparison displays diffs
+- Quick open searches files
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+### Phase 6: Enhanced Terminal (P2 - Medium Priority)
+
+**Goal:** Interactive shell in Vibe
+
+**Tasks:**
+
+1. **Terminal Container**
+ - xterm.js integration (already vendor file)
+ - Multiple terminal tabs
+ - Fit addon for auto-resize
+
+2. **WebSocket Terminal**
+ - Bi-directional WebSocket: `/ws/terminal/{session_id}`
+ - Protocol: `{"type": "input", "data": "command\n"}`
+ - Handle ANSI escape codes
+
+3. **Command History**
+ - Up/Down arrows
+ - Ctrl+R search
+ - Persist in localStorage
+
+4. **Command Completion**
+ - Tab completion
+ - File path completion
+ - Command flags
+
+5. **Backend Terminal Server**
+ - Spawn PTY per session
+ - WebSocket handler
+ - Clean up on disconnect
+
+6. **File Transfer**
+ - Drag file to upload
+ - `upload` / `download` commands
+ - Progress bars
+
+**Success Criteria:**
+- Can type commands & see output
+- Arrow keys navigate history
+- Can run vim, top, etc.
+- Multiple terminals work
+
+**Estimated Effort:** 10-14 hours
+
+---
+
+### Phase 7: Advanced CRM Templates (P2 - Medium Priority)
+
+**Goal:** Pre-built CRM accelerators
+
+**Tasks:**
+
+1. **Template System**
+ - `botserver/src/templates/crm/`
+ - Template JSON definitions
+ - Prompt templates
+ - Field libraries
+
+2. **CRM Templates**
+ - **Sales CRM**
+ - Tables: contacts, leads, opportunities, accounts, activities
+ - Pages: dashboard, pipeline, contacts list
+ - Tools: lead_scoring, email_automation
+ - Schedulers: daily_summary, weekly_review
+
+ - **Real Estate CRM**
+ - Tables: properties, clients, showings, offers
+ - Pages: property gallery, client portal
+ - Tools: mls_sync, showing_scheduler
+ - Schedulers: showing_reminders, market_update
+
+ - **Healthcare CRM**
+ - Tables: patients, appointments, treatments, insurance
+ - Pages: patient portal, appointment scheduler
+ - Tools: insurance_verification, appointment_reminders
+ - Schedulers: daily_appointments, insurance_alerts
+
+3. **Template Gallery UI**
+ - `botui/ui/suite/partials/template-gallery.html`
+ - Template cards with descriptions
+ - Preview screenshots
+ - "Use Template" button
+
+4. **Template Generator**
+ - Load template JSON
+ - Customize with user details
+ - Generate all files
+ - Deploy to /apps/{name}
+
+**Success Criteria:**
+- Can select template from gallery
+- Template generates full CRM
+- Customization works
+- Generated CRM is functional
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+## Technical Implementation Notes
+
+### Code Quality Standards (per AGENTS.md)
+
+**MUST Follow:**
+1. ✅ **Error Handling** - NO panics, use `?` operator
+2. ✅ **Safe Commands** - Use `SafeCommand` wrapper
+3. ✅ **Error Sanitization** - Use `ErrorSanitizer`
+4. ✅ **SQL Safety** - Use `sql_guard`
+5. ✅ **Rate Limiting** - Per-IP and per-User limits
+6. ✅ **CSRF Protection** - CSRF tokens on state-changing endpoints
+7. ✅ **Security Headers** - CSP, HSTS, X-Frame-Options, etc.
+8. ✅ **No CDNs** - All assets local
+9. ✅ **File Size** - Max 450 lines per file
+10. ✅ **Clippy Clean** - 0 warnings, no `#[allow()]`
+
+### File Organization
+
+**Botui (Frontend):**
+```
+botui/ui/suite/
+ partials/
+ editor.html
+ database.html
+ git-status.html
+ git-diff.html
+ browser-controls.html
+ terminal.html
+ template-gallery.html
+ js/
+ editor.js
+ database.js
+ git.js
+ browser.js
+ terminal.js
+ templates.js
+ css/
+ editor.css
+ database.css
+ git.css
+ browser.css
+ terminal.css
+ templates.css
+```
+
+**Botserver (Backend):**
+```
+botserver/src/
+ api/
+ editor.rs
+ database.rs
+ git.rs
+ browser/
+ mod.rs # BrowserSession, BrowserManager
+ recorder.rs # ActionRecorder
+ validator.rs # TestValidator
+ api.rs # HTTP endpoints
+ test_generator.rs
+ templates/
+ crm/
+ sales.json
+ real_estate.json
+ healthcare.json
+ mod.rs
+```
+
+### Dependencies
+
+**Already in Workspace:**
+```toml
+chromiumoxide = "0.7" # Browser automation
+tokio = "1.41" # Async runtime
+axum = "0.7" # HTTP framework
+diesel = "2.1" # Database
+git2 = "0.18" # Git operations (add if needed)
+```
+
+**Frontend (download & serve locally):**
+```
+monaco-editor@0.45.0 # Code editor
+xterm.js@5.3.0 # Terminal (already vendor file)
+```
+
+---
+
+## Testing Strategy
+
+### Unit Tests
+- All new modules need unit tests
+- Test coverage > 80%
+- Location: `botserver/src//tests.rs`
+
+### Integration Tests
+- End-to-end workflows
+- Location: `bottest/tests/integration/`
+
+### E2E Tests
+- Use chromiumoxide (bottest infrastructure)
+- Location: `bottest/tests/e2e/`
+- Test scenarios:
+ - Generate CRM from template
+ - Edit in Monaco editor
+ - View database schema
+ - Create git commit
+ - Record browser test
+
+---
+
+## Rollout Plan
+
+### Milestone 1: Core Editor (Week 1)
+- Phase 1 complete (Monaco integration)
+
+### Milestone 2: Database & Git (Week 2)
+- Phase 2 complete (Database UI)
+- Phase 3 complete (Git Operations)
+
+### Milestone 3: Browser & Workspace (Week 3)
+- Phase 4 complete (Browser Automation)
+- Phase 5 complete (Multi-File Editing)
+
+### Milestone 4: Terminal & Templates (Week 4)
+- Phase 6 complete (Enhanced Terminal)
+- Phase 7 complete (CRM Templates)
+
+---
+
+## Success Metrics
+
+### Phase 1: Code Editor
+- Monaco loads < 2 seconds
+- 5+ syntax highlighters work
+- Multi-file tabs functional
+- Auto-save succeeds
+
+### Phase 2: Database UI
+- Schema visualizer displays all tables
+- Query builder generates valid SQL
+- Data grid supports inline edits
+- Export functionality works
+
+### Phase 3: Git Operations
+- Git status shows changed files
+- Diff viewer shows side-by-side
+- Commit workflow works
+- Branch switching succeeds
+
+### Phase 4: Browser Automation
+- Can navigate to any URL
+- Element picker captures selectors
+- Recording generates valid tests
+- Screenshots capture correctly
+
+### Phase 5: Multi-File Workspace
+- 10+ files open in tabs
+- Split view supports 2-4 panes
+- File comparison works
+- Project search is fast (< 1s for 100 files)
+
+### Phase 6: Terminal
+- Interactive shell works
+- Can run vim, top, etc.
+- Multiple terminals run simultaneously
+- File transfer works
+
+### Phase 7: CRM Templates
+- 3+ CRM templates available
+- Generation takes < 30 seconds
+- Generated CRMs are fully functional
+- Industry-specific features work
+
+---
+
+## Conclusion
+
+The BotUI platform already has a **powerful backend** capable of generating full applications via LLM. The main gaps are in the **frontend user experience**.
+
+Once these 7 phases are complete, VibeCode will match or exceed Claude Code's capabilities while offering:
+
+✅ **Multi-user SaaS deployment**
+✅ **Visual app building** (Vibe Builder)
+✅ **Enterprise-grade multi-agent orchestration**
+✅ **Pure Rust backend** (no Node.js dependency)
+✅ **Integrated browser automation** (chromiumoxide)
+✅ **Professional development environment**
+
+The biggest advantage: VibeCode can already **generate working CRMs** via the LLM pipeline. These phases add the **professional UI tools** to make it a complete development environment.
+
+**Total Estimated Effort:** 98-126 hours (~3-4 weeks with 1 developer)
diff --git a/vibe.md b/vibe.md
new file mode 100644
index 0000000..b54daea
--- /dev/null
+++ b/vibe.md
@@ -0,0 +1,1799 @@
+# VibeCode Complete Implementation Roadmap v3.0
+## Dual Deployment: Internal GB Apps + External Forgejo ALM Projects
+
+## Executive Summary
+
+**Current Status:** BotUI's backend is **80% complete** with powerful LLM-driven code generation. The platform must support **two deployment models** and needs professional frontend tools to match Claude Code's capabilities.
+
+**Dual Deployment Strategy:**
+1. **Internal GB Apps** - Apps served directly from the GB platform using API endpoints
+2. **External Forgejo ALM Projects** - Apps deployed to external Forgejo repositories with CI/CD
+
+**What Works (Backend):**
+- ✅ LLM-powered app generation (AppGenerator: 3400+ lines)
+- ✅ Multi-agent pipeline (Orchestrator: Plan → Build → Review → Deploy → Monitor)
+- ✅ Real-time WebSocket progress
+- ✅ Database schema generation
+- ✅ File generation (HTML, CSS, JS, BAS)
+- ✅ Designer AI (runtime modifications with undo/redo)
+- ✅ chromiumoxide dependency ready for browser automation
+- ✅ **Forgejo ALM integration** (mTLS, runners, web server on port 3000)
+- ✅ **App deployment** (`/apps/{name}` routes, Drive storage)
+
+**What's Missing (Critical Gaps):**
+
+**Deployment Infrastructure (Phase 0 - CRITICAL):**
+- ❌ Deployment routing logic (internal vs external)
+- ❌ Forgejo project initialization & git push
+- ❌ CI/CD pipeline generation for Forgejo projects
+- ❌ Deployment UI in Vibe Builder
+
+**Frontend Tools (Phases 1-7):**
+- ❌ Monaco/CodeMirror editor (just textarea now)
+- ❌ Database UI (no schema visualizer)
+- ❌ Git operations UI
+- ❌ Browser automation engine UI
+- ❌ Multi-file editing workspace
+- ❌ Enhanced terminal
+
+---
+
+## Architecture: Dual Deployment Model
+
+```
+┌──────────────────────────────────────────────────────────────────┐
+│ USER REQUEST │
+│ "I want a full CRM system" │
+└────────────────────────────┬─────────────────────────────────────┘
+ │
+ ▼
+┌──────────────────────────────────────────────────────────────────┐
+│ VIBE BUILDER UI │
+│ ┌──────────────────┐ ┌──────────────────┐ │
+│ │ Agent Sidebar │ │ Canvas Area │ │
+│ │ (Mantis #1-4) │ │ - Task Nodes │ │
+│ │ - Status cards │ │ - Preview │ │
+│ │ - Workspaces │ │ - Chat Overlay │ │
+│ └──────────────────┘ └──────────────────┘ │
+│ │
+│ ⚠️ DEPLOYMENT CHOICE (Phase 0): │
+│ ┌─────────────────────────────────────────────────────┐ │
+│ │ 📱 Deploy to GB Platform 🌐 Deploy to Forgejo │ │
+│ │ - Serve from /apps/{name} - Push to repo │ │
+│ │ - Use GB API - CI/CD pipeline │ │
+│ │ - Fast iteration - Custom domain │ │
+│ │ - Shared resources - Independent │ │
+│ └─────────────────────────────────────────────────────┘ │
+│ │
+│ 📝 Code Editor (Monaco) ← Phase 1 │
+│ 🗄️ Database Schema Visualizer ← Phase 2 │
+│ 🐙 Git Operations UI ← Phase 3 │
+│ 🌐 Browser Automation Panel ← Phase 4 │
+│ 📂 Multi-File Workspace ← Phase 5 │
+│ 🖥️ Enhanced Terminal ← Phase 6 │
+└────────────────────────────┬─────────────────────────────────────┘
+ │
+ ┌────────────┴────────────┐
+ │ │
+ ▼ ▼
+┌───────────────────────┐ ┌──────────────────────────────────┐
+│ INTERNAL GB APPS │ │ EXTERNAL FORGEJO PROJECTS │
+│ │ │ │
+│ Deployment Flow: │ │ Deployment Flow: │
+│ 1. Generate files │ │ 1. Generate files │
+│ 2. Store in Drive │ │ 2. Init git repo │
+│ 3. Serve from /apps/ │ │ 3. Push to Forgejo │
+│ 4. Use GB APIs │ │ 4. Create CI/CD (.forgejo/*) │
+│ 5. Shared DB │ │ 5. Runner builds & deploys │
+│ 6. Shared auth │ │ 6. Independent deployment │
+│ │ │ 7. Custom domain │
+│ ┌─────────────────┐ │ │ │
+│ │ App Router │ │ │ ┌──────────────────────────────┐ │
+│ │ /apps/{name} │ │ │ │ Forgejo ALM (port 3000) │ │
+│ │ - HTMX routes │ │ │ │ - Git server │ │
+│ │ - API proxy │ │ │ │ - CI/CD (.forgejo/workflows) │ │
+│ │ - Auth wrapper │ │ │ │ - Packages (npm, cargo) │ │
+│ └─────────────────┘ │ │ │ - Actions runner │ │
+│ │ │ └──────────────────────────────┘ │
+└───────────────────────┘ └──────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────────────────────────────┐
+│ BOTSERVER (Rust Backend) │
+│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
+│ │ Orchestrator│ │AppGenerator│ │Designer AI │ │
+│ │ (5 agents) │ │(LLM-driven)│ │(modifications)│ │
+│ └────────────┘ └────────────┘ └────────────┘ │
+│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
+│ │ Browser │ │ Git │ │ Terminal │ │
+│ │ Automation │ │ Operations │ │ Service │ │
+│ │(chromiumoxide)│ │(git2) │ │(xterm.js) │ │
+│ └────────────┘ └────────────┘ └────────────┘ │
+└────────────────────────┬────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────────────────────────────┐
+│ GENERATED OUTPUT │
+│ - PostgreSQL tables │
+│ - HTML pages with HTMX │
+│ - CSS styling │
+│ - JavaScript │
+│ - BASIC tools/schedulers │
+│ - E2E tests (Playwright) │
+└─────────────────────────────────────────────────────────────┘
+```
+
+---
+
+# PART I: Deployment Infrastructure (Phase 0 - CRITICAL)
+
+## Current State Analysis
+
+**Existing Infrastructure:**
+```rust
+// Forgejo ALM is already configured:
+botserver/src/security/mutual_tls.rs:150
+ - configure_forgejo_mtls() - mTLS setup for Forgejo
+
+botserver/src/core/package_manager/installer.rs
+ - forgejo binary installer
+ - forgejo-runner integration
+ - ALM_URL environment variable
+ - Port 3000 for Forgejo web UI
+
+botserver/src/basic/keywords/create_site.rs
+ - CREATE SITE keyword for app generation
+ - Stores to Drive: apps/{alias}
+ - Serves from: /apps/{alias}
+
+botserver/src/basic/keywords/app_server.rs
+ - Suite JS file serving
+ - Vendor file routing
+```
+
+**Missing Components:**
+1. ❌ Deployment routing logic (internal vs external choice)
+2. ❌ Forgejo repository initialization API
+3. ❌ Git push to Forgejo repositories
+4. ❌ CI/CD pipeline template generation
+5. ❌ Forgejo Actions workflow builder
+6. ❌ Custom domain configuration for external projects
+
+---
+
+## Phase 0.1: Deployment Router (P0 - CRITICAL)
+
+**Goal:** Create routing logic to deploy apps internally or to Forgejo
+
+**File:** `botserver/src/deployment/mod.rs`
+
+```rust
+use serde::{Deserialize, Serialize};
+use std::path::PathBuf;
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub enum DeploymentTarget {
+ /// Serve from GB platform (/apps/{name})
+ Internal {
+ route: String,
+ shared_resources: bool,
+ },
+ /// Deploy to external Forgejo repository
+ External {
+ repo_url: String,
+ custom_domain: Option,
+ ci_cd_enabled: bool,
+ },
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct DeploymentConfig {
+ pub app_name: String,
+ pub target: DeploymentTarget,
+ pub environment: DeploymentEnvironment,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub enum DeploymentEnvironment {
+ Development,
+ Staging,
+ Production,
+}
+
+pub struct DeploymentRouter {
+ forgejo_url: String,
+ forgejo_token: Option,
+ internal_base_path: PathBuf,
+}
+
+impl DeploymentRouter {
+ pub fn new(
+ forgejo_url: String,
+ forgejo_token: Option,
+ internal_base_path: PathBuf,
+ ) -> Self {
+ Self {
+ forgejo_url,
+ forgejo_token,
+ internal_base_path,
+ }
+ }
+
+ /// Route deployment based on target type
+ pub async fn deploy(
+ &self,
+ config: DeploymentConfig,
+ generated_app: GeneratedApp,
+ ) -> Result {
+ match config.target {
+ DeploymentTarget::Internal { route, .. } => {
+ self.deploy_internal(route, generated_app).await
+ }
+ DeploymentTarget::External { ref repo_url, .. } => {
+ self.deploy_external(repo_url, generated_app).await
+ }
+ }
+ }
+
+ /// Deploy internally to GB platform
+ async fn deploy_internal(
+ &self,
+ route: String,
+ app: GeneratedApp,
+ ) -> Result {
+ // 1. Store files in Drive
+ // 2. Register route in app router
+ // 3. Create API endpoints
+ // 4. Return deployment URL
+ todo!()
+ }
+
+ /// Deploy externally to Forgejo
+ async fn deploy_external(
+ &self,
+ repo_url: &str,
+ app: GeneratedApp,
+ ) -> Result {
+ // 1. Initialize git repo
+ // 2. Add Forgejo remote
+ // 3. Push generated files
+ // 4. Create CI/CD workflow
+ // 5. Trigger build
+ todo!()
+ }
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct DeploymentResult {
+ pub url: String,
+ pub deployment_type: String,
+ pub status: DeploymentStatus,
+ pub metadata: serde_json::Value,
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub enum DeploymentStatus {
+ Pending,
+ Building,
+ Deployed,
+ Failed,
+}
+
+#[derive(Debug)]
+pub enum DeploymentError {
+ InternalDeploymentError(String),
+ ForgejoError(String),
+ GitError(String),
+ CiCdError(String),
+}
+```
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+## Phase 0.2: Forgejo Integration (P0 - CRITICAL)
+
+**Goal:** Initialize repositories and push code to Forgejo
+
+**File:** `botserver/src/deployment/forgejo.rs`
+
+```rust
+use git2::{Repository, Oid};
+use serde::{Deserialize, Serialize};
+
+pub struct ForgejoClient {
+ base_url: String,
+ token: String,
+ client: reqwest::Client,
+}
+
+impl ForgejoClient {
+ pub fn new(base_url: String, token: String) -> Self {
+ Self {
+ base_url,
+ token,
+ client: reqwest::Client::new(),
+ }
+ }
+
+ /// Create a new repository in Forgejo
+ pub async fn create_repository(
+ &self,
+ name: &str,
+ description: &str,
+ private: bool,
+ ) -> Result {
+ let url = format!("{}/api/v1/user/repos", self.base_url);
+
+ let payload = CreateRepoRequest {
+ name: name.to_string(),
+ description: description.to_string(),
+ private,
+ auto_init: true,
+ gitignores: Some("Node,React,Vite".to_string()),
+ license: Some("MIT".to_string()),
+ readme: Some("Default".to_string()),
+ };
+
+ let response = self
+ .client
+ .post(&url)
+ .header("Authorization", format!("token {}", self.token))
+ .json(&payload)
+ .send()
+ .await
+ .map_err(|e| ForgejoError::HttpError(e.to_string()))?;
+
+ if response.status().is_success() {
+ let repo: ForgejoRepo = response
+ .json()
+ .await
+ .map_err(|e| ForgejoError::JsonError(e.to_string()))?;
+ Ok(repo)
+ } else {
+ Err(ForgejoError::ApiError(
+ response.status().to_string(),
+ ))
+ }
+ }
+
+ /// Push generated app to Forgejo repository
+ pub async fn push_app(
+ &self,
+ repo_url: &str,
+ app: &GeneratedApp,
+ branch: &str,
+ ) -> Result {
+ // 1. Initialize local git repo
+ let repo = Repository::init(app.temp_dir()?)?;
+
+ // 2. Add all files
+ let mut index = repo.index()?;
+ for file in &app.files {
+ index.add_path(PathBuf::from(&file.path))?;
+ }
+ index.write()?;
+
+ // 3. Create commit
+ let tree_id = index.write_tree()?;
+ let tree = repo.find_tree(tree_id)?;
+
+ let sig = repo.signature()?;
+ let oid = repo.commit(
+ Some(&format!("refs/heads/{}", branch)),
+ &sig,
+ &sig,
+ &format!("Initial commit: {}", app.description),
+ &tree,
+ &[],
+ )?;
+
+ // 4. Add Forgejo remote
+ let mut remote = repo.remote(
+ "origin",
+ &format!(
+ "{}",
+ repo_url.replace("https://", &format!("https://{}@", self.token))
+ ),
+ )?;
+
+ // 5. Push to Forgejo
+ remote.push(&[format!("refs/heads/{}", branch)], None)?;
+
+ Ok(oid.to_string())
+ }
+
+ /// Create CI/CD workflow for the app
+ pub async fn create_cicd_workflow(
+ &self,
+ repo_url: &str,
+ app_type: AppType,
+ build_config: BuildConfig,
+ ) -> Result<(), ForgejoError> {
+ let workflow = match app_type {
+ AppType::Htmx => self.generate_htmx_workflow(build_config),
+ AppType::React => self.generate_react_workflow(build_config),
+ AppType::Vue => self.generate_vue_workflow(build_config),
+ };
+
+ // Create .forgejo/workflows/deploy.yml
+ // Commit and push
+ todo!()
+ }
+
+ fn generate_htmx_workflow(&self, config: BuildConfig) -> String {
+ r#"
+name: Deploy HTMX App
+
+on:
+ push:
+ branches: [main, develop]
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+
+ - name: Setup Node.js
+ uses: actions/setup-node@v3
+ with:
+ node-version: '20'
+
+ - name: Install dependencies
+ run: npm ci
+
+ - name: Build
+ run: npm run build
+
+ - name: Deploy to server
+ run: |
+ # Add deployment commands here
+ echo "Deploying to production..."
+"#
+ .to_string()
+ }
+
+ fn generate_react_workflow(&self, config: BuildConfig) -> String {
+ // Generate React/Vite CI/CD workflow
+ todo!()
+ }
+
+ fn generate_vue_workflow(&self, config: BuildConfig) -> String {
+ // Generate Vue CI/CD workflow
+ todo!()
+ }
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct ForgejoRepo {
+ pub id: u64,
+ pub name: String,
+ pub full_name: String,
+ pub clone_url: String,
+ pub html_url: String,
+}
+
+#[derive(Debug, Serialize)]
+struct CreateRepoRequest {
+ name: String,
+ description: String,
+ private: bool,
+ auto_init: bool,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ gitignores: Option,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ license: Option,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ readme: Option,
+}
+
+#[derive(Debug, Clone, Copy)]
+pub enum AppType {
+ Htmx,
+ React,
+ Vue,
+}
+
+#[derive(Debug, Clone)]
+pub struct BuildConfig {
+ pub node_version: String,
+ pub build_command: String,
+ pub output_directory: String,
+}
+
+#[derive(Debug)]
+pub enum ForgejoError {
+ HttpError(String),
+ JsonError(String),
+ ApiError(String),
+ GitError(String),
+}
+```
+
+**API Endpoints:**
+```rust
+// botserver/src/deployment/api.rs
+
+use axum::{
+ extract::State,
+ response::Json,
+ routing::{get, post},
+ Router, Json as ResponseJson,
+};
+
+use crate::core::shared::state::AppState;
+
+pub fn configure_deployment_routes() -> Router> {
+ Router::new()
+ // Get deployment targets (internal vs external)
+ .route("/api/deployment/targets", get(get_deployment_targets))
+
+ // Deploy app
+ .route("/api/deployment/deploy", post(deploy_app))
+
+ // Get deployment status
+ .route("/api/deployment/status/:id", get(get_deployment_status))
+
+ // Forgejo repositories
+ .route("/api/deployment/forgejo/repos", get(list_forgejo_repos))
+ .route("/api/deployment/forgejo/create-repo", post(create_forgejo_repo))
+
+ // CI/CD workflows
+ .route("/api/deployment/forgejo/workflows", get(list_workflows))
+ .route("/api/deployment/forgejo/workflows/create", post(create_workflow))
+}
+
+pub async fn get_deployment_targets(
+ State(_state): State>,
+) -> Json {
+ Json(serde_json::json!({
+ "targets": [
+ {
+ "id": "internal",
+ "name": "GB Platform",
+ "description": "Deploy to the GB platform with shared resources",
+ "features": [
+ "Fast deployment",
+ "Shared authentication",
+ "Shared database",
+ "API integration",
+ "Instant scaling"
+ ],
+ "icon": "📱"
+ },
+ {
+ "id": "external",
+ "name": "Forgejo ALM",
+ "description": "Deploy to an external Forgejo repository with CI/CD",
+ "features": [
+ "Independent deployment",
+ "Custom domain",
+ "Version control",
+ "CI/CD pipelines",
+ "Separate infrastructure"
+ ],
+ "icon": "🌐"
+ }
+ ]
+ }))
+}
+
+pub async fn deploy_app(
+ State(state): State>,
+ ResponseJson(payload): ResponseJson,
+) -> Result, DeploymentError> {
+ let router = state.deployment_router.clone();
+
+ let config = DeploymentConfig {
+ app_name: payload.app_name,
+ target: payload.target,
+ environment: payload.environment.unwrap_or(DeploymentEnvironment::Production),
+ };
+
+ let generated_app = generate_app_from_manifest(&payload.manifest).await?;
+
+ let result = router.deploy(config, generated_app).await?;
+
+ Ok(Json(result))
+}
+
+#[derive(Debug, Deserialize)]
+pub struct DeploymentRequest {
+ pub app_name: String,
+ pub target: DeploymentTarget,
+ pub environment: Option,
+ pub manifest: serde_json::Value,
+}
+```
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+## Phase 0.3: Deployment UI in Vibe (P0 - CRITICAL)
+
+**Goal:** Add deployment choice UI to Vibe Builder
+
+**File:** `botui/ui/suite/partials/vibe-deployment.html`
+
+```html
+
+
+
+
+
+
+
+
+
+
📱
+
+
GB Platform
+
Deploy directly to the GB platform with shared resources
+
+ - ✓ Fast deployment
+ - ✓ Shared authentication
+ - ✓ Shared database
+ - ✓ API integration
+ - ✓ Instant scaling
+
+
+
Recommended for quick prototypes
+
+
+
+
+
🌐
+
+
Forgejo ALM
+
Deploy to an external Forgejo repository with full CI/CD
+
+ - ✓ Independent deployment
+ - ✓ Custom domain
+ - ✓ Version control
+ - ✓ CI/CD pipelines
+ - ✓ Separate infrastructure
+
+
+
Best for production apps
+
+
+
+
+
+
Forgejo Configuration
+
+
+
+
+
+
Internal Deployment Configuration
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+**Integration into Vibe:**
+```javascript
+// In vibe.html, add deployment button to the canvas header:
+
+
+```
+
+**Estimated Effort:** 8-10 hours
+
+---
+
+# PART II: Frontend Feature Implementation (Phases 1-7)
+
+After deployment infrastructure is in place, continue with the frontend tools:
+
+## Phase 1: Code Editor Integration (P0 - Critical)
+
+**Goal:** Replace textarea with professional code editor
+
+**Tasks:**
+
+1. **Download Monaco Editor**
+ ```bash
+ cd botui
+ npm install monaco-editor@0.45.0
+ cp -r node_modules/monaco-editor min/vs ui/suite/js/vendor/
+ ```
+
+2. **Create Editor Component**
+ - `botui/ui/suite/partials/editor.html`
+ - Monaco container with tab bar
+ - File tree sidebar
+ - Save/Publish buttons
+
+3. **Editor JavaScript**
+ - `botui/ui/suite/js/editor.js`
+ - Monaco initialization
+ - Language detection (.html, .css, .js, .bas, .json)
+ - Tab management (open, close, switch)
+ - Auto-save with WebSocket sync
+
+4. **API Endpoints**
+ - `botserver/src/api/editor.rs`
+ - GET `/api/editor/file/{path}` - Read file
+ - POST `/api/editor/file/{path}` - Save file
+ - GET `/api/editor/files` - List files
+
+5. **Integration**
+ - Update `chat-agent-mode.html` - replace textarea with Monaco
+ - Update `vibe.html` - add editor panel
+ - Add keyboard shortcuts (Ctrl+S, Ctrl+P, Ctrl+Shift+F)
+
+**Success Criteria:**
+- Monaco loads in < 2 seconds
+- Syntax highlighting for 5+ languages
+- Multi-file tabs work
+- Auto-save completes successfully
+
+**Estimated Effort:** 8-12 hours
+
+---
+
+## Phase 2: Database UI & Schema Visualization (P0 - Critical)
+
+**Goal:** Visual database management and query builder
+
+**Tasks:**
+
+1. **Schema Visualizer Component**
+ - `botui/ui/suite/partials/database.html`
+ - Canvas-based ER diagram
+ - Table cards with fields
+ - Relationship lines (foreign keys)
+ - Zoom/pan controls
+
+2. **Database JavaScript**
+ - `botui/ui/suite/js/database.js`
+ - Fetch schema: `/api/database/schema`
+ - Render tables using Canvas API
+ - Click table → show field details
+ - Drag to rearrange
+
+3. **Query Builder UI**
+ - Visual SELECT builder
+ - Table selection dropdown
+ - Join interface
+ - Filter conditions
+ - SQL preview pane
+
+4. **Data Grid**
+ - Sortable columns
+ - Inline editing
+ - Pagination
+ - Export (CSV/JSON)
+
+5. **Backend API**
+ - `botserver/src/api/database.rs`
+ - GET `/api/database/schema` - Tables, fields, relationships
+ - GET `/api/database/table/{name}/data` - Paginated data
+ - POST `/api/database/query` - Execute SQL
+ - POST `/api/database/table/{name}/row` - Insert/update
+ - DELETE `/api/database/table/{name}/row/{id}` - Delete
+
+**Success Criteria:**
+- ER diagram shows all tables
+- Query builder generates valid SQL
+- Data grid supports inline edits
+- Export works correctly
+
+**Estimated Effort:** 16-20 hours
+
+---
+
+## Phase 3: Git Operations UI (P1 - High Priority)
+
+**Goal:** Version control interface in Vibe
+
+**Tasks:**
+
+1. **Git Status Panel**
+ - `botui/ui/suite/partials/git-status.html`
+ - File list with status icons
+ - Stage/unstage checkboxes
+ - "Commit" button
+
+2. **Diff Viewer**
+ - `botui/ui/suite/partials/git-diff.html`
+ - Side-by-side comparison
+ - Line highlighting (green/red)
+ - Syntax highlighting
+
+3. **Commit Interface**
+ - Message input
+ - "Commit & Push" button
+ - Progress indicator
+
+4. **Branch Manager**
+ - Branch dropdown
+ - "New Branch" dialog
+ - Switch/delete actions
+
+5. **Commit Timeline**
+ - Vertical timeline
+ - Author, date, message
+ - Click → view diff
+
+6. **Backend API**
+ - `botserver/src/api/git.rs`
+ - GET `/api/git/status` - Git status
+ - GET `/api/git/diff/{file}` - File diff
+ - POST `/api/git/commit` - Create commit
+ - POST `/api/git/push` - Push to remote
+ - GET `/api/git/branches` - List branches
+ - POST `/api/git/branch/{name}` - Create/switch
+ - GET `/api/git/log` - Commit history
+
+**NEW: Forgejo-Specific Operations**
+- View Forgejo repository status
+- Sync with Forgejo remote
+- View CI/CD pipeline status
+- Trigger manual builds
+
+**Success Criteria:**
+- Git status displays correctly
+- Diff viewer shows side-by-side
+- Commit workflow works end-to-end
+- Branch switching succeeds
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+## Phase 4: Browser Automation Engine (P1 - High Priority)
+
+**Goal:** Pure Rust browser automation for testing & recording
+
+**Why Rust + Chromiumoxide:**
+- ✅ Already in workspace: `chromiumoxide = "0.7"`
+- ✅ No Node.js dependency
+- ✅ Feature flag exists: `browser` in botserver/Cargo.toml
+- ✅ Reference implementation: bottest/src/web/browser.rs (1000+ lines)
+
+**Tasks:**
+
+1. **Core Browser Module**
+ - `botserver/src/browser/mod.rs`
+ - `BrowserSession` - Manage browser instance
+ - `BrowserManager` - Session lifecycle
+ - Methods: `navigate()`, `click()`, `fill()`, `screenshot()`, `execute()`
+
+ ```rust
+ pub struct BrowserSession {
+ id: String,
+ browser: Arc,
+ page: Arc>,
+ created_at: DateTime,
+ }
+
+ impl BrowserSession {
+ pub async fn new(headless: bool) -> Result;
+ pub async fn navigate(&self, url: &str) -> Result<()>;
+ pub async fn click(&self, selector: &str) -> Result<()>;
+ pub async fn fill(&self, selector: &str, text: &str) -> Result<()>;
+ pub async fn screenshot(&self) -> Result>;
+ pub async fn execute(&self, script: &str) -> Result;
+ }
+ ```
+
+2. **Action Recorder**
+ - `botserver/src/browser/recorder.rs`
+ - `RecordedAction` - Navigate, Click, Fill, Wait, Assert
+ - `ActionRecorder` - Record/stop/export
+ - Export as Playwright test
+
+ ```rust
+ #[derive(Serialize, Deserialize)]
+ pub struct RecordedAction {
+ pub timestamp: i64,
+ pub action_type: ActionType,
+ pub selector: Option,
+ pub value: Option,
+ }
+
+ impl ActionRecorder {
+ pub fn start(&mut self);
+ pub fn stop(&mut self) -> Vec;
+ pub fn export_test_script(&self) -> String;
+ }
+ ```
+
+3. **Test Validator**
+ - `botserver/src/browser/validator.rs`
+ - Check for flaky selectors
+ - Validate wait conditions
+ - Suggest improvements via Designer AI
+
+4. **Browser API**
+ - `botserver/src/browser/api.rs`
+ - POST `/api/browser/session` - Create session
+ - POST `/api/browser/session/:id/execute` - Run action
+ - GET `/api/browser/session/:id/screenshot` - Capture
+ - POST `/api/browser/session/:id/record/start` - Start recording
+ - POST `/api/browser/session/:id/record/stop` - Stop & get actions
+ - GET `/api/browser/session/:id/record/export` - Export test
+
+5. **Vibe UI - Browser Panel**
+ - `botui/ui/suite/partials/browser-controls.html`
+ - URL bar with navigation buttons
+ - Record/Stop/Export buttons
+ - Actions timeline
+ - Browser preview iframe
+ - Screenshot gallery
+
+ - `botui/ui/suite/js/browser.js`
+ ```javascript
+ let currentSessionId = null;
+ let isRecording = false;
+ let recordedActions = [];
+
+ async function initBrowser() {
+ const resp = await fetch('/api/browser/session', {
+ method: 'POST',
+ body: JSON.stringify({ headless: false })
+ });
+ currentSessionId = (await resp.json()).id;
+ }
+
+ async function browserNavigate(url) {
+ if (isRecording) {
+ recordedActions.push({
+ type: 'navigate',
+ value: url,
+ timestamp: Date.now()
+ });
+ }
+ await executeAction('navigate', { url });
+ }
+
+ async function browserClick(selector) {
+ if (isRecording) {
+ recordedActions.push({
+ type: 'click',
+ selector: selector,
+ timestamp: Date.now()
+ });
+ }
+ await executeAction('click', { selector });
+ }
+
+ async function exportTest() {
+ const resp = await fetch(`/api/browser/session/${currentSessionId}/record/export`);
+ const data = await resp.json();
+
+ // Download test file
+ const blob = new Blob([data.script], { type: 'text/javascript' });
+ const a = document.createElement('a');
+ a.href = URL.createObjectURL(blob);
+ a.download = `test-${Date.now()}.spec.js`;
+ a.click();
+ }
+ ```
+
+ - `botui/ui/suite/css/browser.css`
+ - Browser panel styling
+ - Recording indicator animation
+ - Actions timeline
+ - Screenshot gallery grid
+
+6. **Integration with Vibe**
+ - Add "Browser Automation" button to Vibe toolbar
+ - Load browser-controls.html in panel
+ - Element picker for selector capture
+ - Screenshot capture & gallery
+
+**Usage Example:**
+```javascript
+// In Vibe UI
+openBrowserPanel();
+toggleRecording(); // Start recording
+browserNavigate('http://localhost:3000/my-crm');
+browserClick('#create-btn');
+browserFill('#name', 'Test');
+browserClick('#save-btn');
+toggleRecording(); // Stop recording
+exportTest(); // Download test-123.spec.js
+```
+
+**Generated Test Output:**
+```javascript
+import { test, expect } from '@playwright/test';
+
+test('Recorded test', async ({ page }) => {
+ await page.goto('http://localhost:3000/my-crm');
+ await page.click('#create-btn');
+ await page.fill('#name', 'Test');
+ await page.click('#save-btn');
+});
+```
+
+**Success Criteria:**
+- Can navigate to any URL
+- Element picker captures selectors
+- Recording generates valid Playwright tests
+- Screenshots capture correctly
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+## Phase 5: Multi-File Editing Workspace (P2 - Medium Priority)
+
+**Goal:** Professional multi-file editing
+
+**Tasks:**
+
+1. **Tab Management**
+ - File tabs with close buttons
+ - Active tab highlighting
+ - Tab overflow scrolling
+ - Drag to reorder
+
+2. **Split-Pane Layout**
+ - Split horizontal/vertical buttons
+ - Resize handles
+ - 2x2 grid max
+
+3. **File Comparison**
+ - Side-by-side diff
+ - Line-by-line navigation
+ - Copy changes (L→R)
+
+4. **File Tree Sidebar**
+ - Nested folders
+ - File type icons
+ - Expand/collapse
+ - Double-click to open
+
+5. **Quick Open**
+ - Ctrl+P → Search files
+ - Fuzzy matching
+ - Arrow navigation
+
+6. **Project Search**
+ - Ctrl+Shift+F → Search all files
+ - Results with line numbers
+ - Click to open file
+
+**Success Criteria:**
+- 10+ files open in tabs
+- Split view works (2-4 panes)
+- File comparison displays diffs
+- Quick open searches files
+
+**Estimated Effort:** 12-16 hours
+
+---
+
+## Phase 6: Enhanced Terminal (P2 - Medium Priority)
+
+**Goal:** Interactive shell in Vibe
+
+**Tasks:**
+
+1. **Terminal Container**
+ - xterm.js integration (already vendor file)
+ - Multiple terminal tabs
+ - Fit addon for auto-resize
+
+2. **WebSocket Terminal**
+ - Bi-directional WebSocket: `/ws/terminal/{session_id}`
+ - Protocol: `{"type": "input", "data": "command\n"}`
+ - Handle ANSI escape codes
+
+3. **Command History**
+ - Up/Down arrows
+ - Ctrl+R search
+ - Persist in localStorage
+
+4. **Command Completion**
+ - Tab completion
+ - File path completion
+ - Command flags
+
+5. **Backend Terminal Server**
+ - Spawn PTY per session
+ - WebSocket handler
+ - Clean up on disconnect
+
+6. **File Transfer**
+ - Drag file to upload
+ - `upload` / `download` commands
+ - Progress bars
+
+**Success Criteria:**
+- Can type commands & see output
+- Arrow keys navigate history
+- Can run vim, top, etc.
+- Multiple terminals work
+
+**Estimated Effort:** 10-14 hours
+
+---
+
+## Phase 7: Advanced CRM Templates (P2 - Medium Priority)
+
+**Goal:** Pre-built CRM accelerators
+
+**Tasks:**
+
+1. **Template System**
+ - `botserver/src/templates/crm/`
+ - Template JSON definitions
+ - Prompt templates
+ - Field libraries
+
+2. **CRM Templates**
+ - **Sales CRM**
+ - Tables: contacts, leads, opportunities, accounts, activities
+ - Pages: dashboard, pipeline, contacts list
+ - Tools: lead_scoring, email_automation
+ - Schedulers: daily_summary, weekly_review
+
+ - **Real Estate CRM**
+ - Tables: properties, clients, showings, offers
+ - Pages: property gallery, client portal
+ - Tools: mls_sync, showing_scheduler
+ - Schedulers: showing_reminders, market_update
+
+ - **Healthcare CRM**
+ - Tables: patients, appointments, treatments, insurance
+ - Pages: patient portal, appointment scheduler
+ - Tools: insurance_verification, appointment_reminders
+ - Schedulers: daily_appointments, insurance_alerts
+
+3. **Template Gallery UI**
+ - `botui/ui/suite/partials/template-gallery.html`
+ - Template cards with descriptions
+ - Preview screenshots
+ - "Use Template" button
+
+4. **Template Generator**
+ - Load template JSON
+ - Customize with user details
+ - Generate all files
+ - Deploy to /apps/{name} (internal) OR Forgejo (external)
+
+**NEW: Dual Deployment Support**
+- Internal deployment templates (use GB APIs)
+- External deployment templates (standalone with CI/CD)
+
+**Success Criteria:**
+- Can select template from gallery
+- Template generates full CRM
+- Customization works
+- Generated CRM is functional
+
+**Estimated Effort:** 20-24 hours
+
+---
+
+# PART III: Technical Implementation Notes
+
+## Code Quality Standards (per AGENTS.md)
+
+**MUST Follow:**
+1. ✅ **Error Handling** - NO panics, use `?` operator
+2. ✅ **Safe Commands** - Use `SafeCommand` wrapper
+3. ✅ **Error Sanitization** - Use `ErrorSanitizer`
+4. ✅ **SQL Safety** - Use `sql_guard`
+5. ✅ **Rate Limiting** - Per-IP and per-User limits
+6. ✅ **CSRF Protection** - CSRF tokens on state-changing endpoints
+7. ✅ **Security Headers** - CSP, HSTS, X-Frame-Options, etc.
+8. ✅ **No CDNs** - All assets local
+9. ✅ **File Size** - Max 450 lines per file
+10. ✅ **Clippy Clean** - 0 warnings, no `#[allow()]`
+
+## File Organization
+
+**Botserver (Backend):**
+```
+botserver/src/
+ deployment/ # NEW - Deployment infrastructure
+ mod.rs # DeploymentRouter
+ forgejo.rs # ForgejoClient
+ api.rs # Deployment API endpoints
+ templates.rs # CI/CD workflow templates
+ api/
+ editor.rs
+ database.rs
+ git.rs # UPDATED - Add Forgejo git operations
+ browser/
+ mod.rs # BrowserSession, BrowserManager
+ recorder.rs # ActionRecorder
+ validator.rs # TestValidator
+ api.rs # HTTP endpoints
+ test_generator.rs
+ templates/
+ crm/
+ sales.json
+ real_estate.json
+ healthcare.json
+ mod.rs
+ sources/ # EXISTING - MCP integration
+ mod.rs
+ mcp.rs
+ ui.rs
+ knowledge_base.rs
+```
+
+**Botui (Frontend):**
+```
+botui/ui/suite/
+ partials/
+ vibe.html # UPDATED - Add deploy button
+ vibe-deployment.html # NEW - Deployment modal
+ editor.html
+ database.html
+ git-status.html # UPDATED - Add Forgejo status
+ git-diff.html
+ browser-controls.html
+ terminal.html
+ template-gallery.html
+ js/
+ deployment.js # NEW - Deployment logic
+ editor.js
+ database.js
+ git.js # UPDATED - Add Forgejo operations
+ browser.js
+ terminal.js
+ templates.js
+ css/
+ deployment.css # NEW - Deployment styles
+ editor.css
+ database.css
+ git.css
+ browser.css
+ terminal.css
+ templates.css
+```
+
+## Dependencies
+
+**Already in Workspace:**
+```toml
+[dependencies]
+chromiumoxide = "0.7" # Browser automation
+tokio = "1.41" # Async runtime
+axum = "0.7" # HTTP framework
+diesel = "2.1" # Database
+git2 = "0.18" # Git operations
+reqwest = { version = "0.11", features = ["json"] } # HTTP client
+```
+
+**Frontend:**
+```
+monaco-editor@0.45.0 # Code editor
+xterm.js@5.3.0 # Terminal (already vendor file)
+```
+
+---
+
+# PART IV: Testing Strategy
+
+## Unit Tests
+- All new modules need unit tests
+- Test coverage > 80%
+- Location: `botserver/src//tests.rs`
+
+## Integration Tests
+- End-to-end workflows
+- Location: `bottest/tests/integration/`
+
+## E2E Tests
+- Use chromiumoxide (bottest infrastructure)
+- Location: `bottest/tests/e2e/`
+- Test scenarios:
+ - Generate CRM from template
+ - Deploy to internal GB Platform
+ - Deploy to external Forgejo
+ - Edit in Monaco editor
+ - View database schema
+ - Create git commit
+ - Record browser test
+
+---
+
+# PART V: Rollout Plan
+
+## Milestone 0: Deployment Infrastructure (Week 0)
+- **Day 1-3:** Phase 0.1 - Deployment Router
+- **Day 4-5:** Phase 0.2 - Forgejo Integration
+- **Day 6-7:** Phase 0.3 - Deployment UI
+
+**Success Criteria:**
+- ✅ Can deploy app internally to /apps/{name}
+- ✅ Can deploy app externally to Forgejo
+- ✅ CI/CD pipeline auto-generated
+- ✅ Deployment choice works in Vibe UI
+
+## Milestone 1: Core Editor (Week 1)
+- Phase 1 complete (Monaco integration)
+
+## Milestone 2: Database & Git (Week 2)
+- Phase 2 complete (Database UI)
+- Phase 3 complete (Git Operations + Forgejo)
+
+## Milestone 3: Browser & Workspace (Week 3)
+- Phase 4 complete (Browser Automation)
+- Phase 5 complete (Multi-File Editing)
+
+## Milestone 4: Terminal & Templates (Week 4)
+- Phase 6 complete (Enhanced Terminal)
+- Phase 7 complete (CRM Templates with dual deployment)
+
+---
+
+# PART VI: Success Metrics
+
+## Deployment Infrastructure (Phase 0)
+- Internal deployment succeeds in < 30 seconds
+- External Forgejo deployment succeeds in < 2 minutes
+- CI/CD pipeline auto-generates correctly
+- Both deployment models accessible from Vibe UI
+- Can switch between internal/external deployment
+
+## Phase 1: Code Editor
+- Monaco loads < 2 seconds
+- 5+ syntax highlighters work
+- Multi-file tabs functional
+- Auto-save succeeds
+
+## Phase 2: Database UI
+- Schema visualizer displays all tables
+- Query builder generates valid SQL
+- Data grid supports inline edits
+- Export functionality works
+
+## Phase 3: Git Operations
+- Git status shows changed files
+- Diff viewer shows side-by-side
+- Commit workflow works
+- Branch switching succeeds
+
+## Phase 4: Browser Automation
+- Can navigate to any URL
+- Element picker captures selectors
+- Recording generates valid tests
+- Screenshots capture correctly
+
+## Phase 5: Multi-File Workspace
+- 10+ files open in tabs
+- Split view supports 2-4 panes
+- File comparison works
+- Project search is fast (< 1s for 100 files)
+
+## Phase 6: Terminal
+- Interactive shell works
+- Can run vim, top, etc.
+- Multiple terminals run simultaneously
+- File transfer works
+
+## Phase 7: CRM Templates
+- 3+ CRM templates available
+- Generation takes < 30 seconds
+- Generated CRMs are fully functional
+- Industry-specific features work
+- Templates support both deployment models
+
+---
+
+# Conclusion
+
+The **critical foundation** is the **deployment infrastructure (Phase 0)**. The platform must support:
+
+1. **Internal GB Apps** - Quick prototypes using GB APIs and shared resources
+2. **External Forgejo Projects** - Production apps with independent infrastructure and CI/CD
+
+**Implementation Priority:**
+1. ⚠️ **Phase 0** - Deployment Infrastructure (CRITICAL - Week 0)
+ - Phase 0.1: Deployment Router
+ - Phase 0.2: Forgejo Integration
+ - Phase 0.3: Deployment UI
+
+2. 📝 **Phase 1** - Code Editor (Week 1)
+
+3. 🗄️ **Phase 2** - Database UI (Week 2)
+
+4. 🐙 **Phase 3** - Git Operations + Forgejo (Week 2)
+
+5. 🌐 **Phase 4** - Browser Automation (Week 3)
+
+6. 📂 **Phase 5** - Multi-File Workspace (Week 3)
+
+7. 🖥️ **Phase 6** - Terminal (Week 4)
+
+8. 📇 **Phase 7** - CRM Templates (Week 4)
+
+Once Phase 0 is complete, VibeCode will be able to **deploy apps both internally and externally**, giving users the flexibility to choose the right deployment model for their use case.
+
+**Total Estimated Effort:**
+- Phases 1-7: 125-155 hours (~3-4 weeks with 1 developer)
+- Phase 0: +40-50 hours
+- **Final Total:** 165-205 hours (~4-5 weeks with 1 developer)
+
+The BotUI platform already has a **powerful backend** capable of generating full applications via LLM. These phases add the **deployment infrastructure** and **professional UI tools** to make it a complete development environment with dual deployment capabilities.
+
+Once complete, VibeCode will match or exceed Claude Code's capabilities while offering:
+
+✅ **Multi-user SaaS deployment**
+✅ **Visual app building** (Vibe Builder)
+✅ **Enterprise-grade multi-agent orchestration**
+✅ **Pure Rust backend** (no Node.js dependency)
+✅ **Integrated browser automation** (chromiumoxide)
+✅ **Dual deployment model** (Internal GB Platform + External Forgejo ALM)
+✅ **Professional development environment**
diff --git a/yarn.lock b/yarn.lock
index 3a453c2..8f40338 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -16,6 +16,125 @@
dependencies:
undici-types "~7.16.0"
+buffer-equal-constant-time@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz"
+ integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
+
+data-uri-to-buffer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz"
+ integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==
+
+ecdsa-sig-formatter@1.0.11:
+ version "1.0.11"
+ resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz"
+ integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
+ dependencies:
+ safe-buffer "^5.0.1"
+
+fetch-blob@^3.1.2, fetch-blob@^3.1.4:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz"
+ integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==
+ dependencies:
+ node-domexception "^1.0.0"
+ web-streams-polyfill "^3.0.3"
+
+formdata-polyfill@^4.0.10:
+ version "4.0.10"
+ resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz"
+ integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==
+ dependencies:
+ fetch-blob "^3.1.2"
+
+jsonwebtoken@^9.0.3:
+ version "9.0.3"
+ resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz"
+ integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==
+ dependencies:
+ jws "^4.0.1"
+ lodash.includes "^4.3.0"
+ lodash.isboolean "^3.0.3"
+ lodash.isinteger "^4.0.4"
+ lodash.isnumber "^3.0.3"
+ lodash.isplainobject "^4.0.6"
+ lodash.isstring "^4.0.1"
+ lodash.once "^4.0.0"
+ ms "^2.1.1"
+ semver "^7.5.4"
+
+jwa@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz"
+ integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==
+ dependencies:
+ buffer-equal-constant-time "^1.0.1"
+ ecdsa-sig-formatter "1.0.11"
+ safe-buffer "^5.0.1"
+
+jws@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz"
+ integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==
+ dependencies:
+ jwa "^2.0.1"
+ safe-buffer "^5.0.1"
+
+lodash.includes@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz"
+ integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==
+
+lodash.isboolean@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz"
+ integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==
+
+lodash.isinteger@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz"
+ integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==
+
+lodash.isnumber@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz"
+ integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==
+
+lodash.isplainobject@^4.0.6:
+ version "4.0.6"
+ resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz"
+ integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
+
+lodash.isstring@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz"
+ integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==
+
+lodash.once@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz"
+ integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==
+
+ms@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+node-domexception@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz"
+ integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
+
+node-fetch@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz"
+ integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==
+ dependencies:
+ data-uri-to-buffer "^4.0.0"
+ fetch-blob "^3.1.4"
+ formdata-polyfill "^4.0.10"
+
playwright-core@1.58.2:
version "1.58.2"
resolved "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz"
@@ -30,11 +149,26 @@ playwright@1.58.2:
optionalDependencies:
fsevents "2.3.2"
+safe-buffer@^5.0.1:
+ version "5.2.1"
+ resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+semver@^7.5.4:
+ version "7.7.4"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz"
+ integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
+
undici-types@~7.16.0:
version "7.16.0"
resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz"
integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==
+web-streams-polyfill@^3.0.3:
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz"
+ integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==
+
ws@^8.19.0:
version "8.19.0"
resolved "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz"