VIBN Frontend for Coolify deployment

This commit is contained in:
2026-02-15 19:25:52 -08:00
commit 40bf8428cd
398 changed files with 76513 additions and 0 deletions

303
test-e2e-collector.sh Executable file
View File

@@ -0,0 +1,303 @@
#!/bin/bash
# End-to-End Collector Flow Test
# Simulates a real user journey from welcome → document upload → GitHub → extension → handoff
# set -e # Don't exit on error - show all test results
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Configuration
BASE_URL="http://localhost:3000"
API_BASE="$BASE_URL/api"
# You MUST set these from a real logged-in session
echo ""
echo "=========================================="
echo " E2E COLLECTOR FLOW TEST"
echo "=========================================="
echo ""
echo -e "${YELLOW}SETUP REQUIRED:${NC}"
echo "1. Log into http://localhost:3000"
echo "2. Open DevTools → Network tab"
echo "3. Send a test message in AI Chat"
echo "4. Copy the 'Authorization: Bearer XXX' header"
echo "5. Create a project and copy the projectId"
echo ""
echo -e "${CYAN}Then run:${NC}"
echo " export AUTH_TOKEN='your-token-here'"
echo " export PROJECT_ID='your-project-id-here'"
echo " ./test-e2e-collector.sh"
echo ""
if [ -z "$AUTH_TOKEN" ] || [ -z "$PROJECT_ID" ]; then
echo -e "${RED}ERROR: AUTH_TOKEN and PROJECT_ID must be set${NC}"
echo ""
exit 1
fi
# Test results
TESTS_PASSED=0
TESTS_FAILED=0
FAILED_TESTS=()
# Helper functions
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[PASS]${NC} $1"
((TESTS_PASSED++))
}
log_error() {
echo -e "${RED}[FAIL]${NC} $1"
((TESTS_FAILED++))
FAILED_TESTS+=("$1")
}
log_warning() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_response() {
echo -e "${CYAN}[RESPONSE]${NC} $1"
}
# Send a chat message and check response
send_chat_message() {
local message="$1"
local expected_keywords="$2"
log_info "Sending: \"$message\""
response=$(curl -s -X POST "$API_BASE/ai/chat" \
-H "Authorization: Bearer $AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"projectId\":\"$PROJECT_ID\",\"message\":\"$message\"}")
http_code=$?
if [ $http_code -ne 0 ]; then
log_error "Failed to send message: $message"
return 1
fi
# Check for error in response
if echo "$response" | jq -e '.error' > /dev/null 2>&1; then
error_msg=$(echo "$response" | jq -r '.error')
log_error "API Error: $error_msg"
echo "$response" | jq '.' 2>/dev/null || echo "$response"
return 1
fi
# Extract reply
reply=$(echo "$response" | jq -r '.reply' 2>/dev/null)
if [ -z "$reply" ] || [ "$reply" = "null" ]; then
log_error "No reply received"
echo "$response" | jq '.' 2>/dev/null || echo "$response"
return 1
fi
log_response "$(echo "$reply" | head -c 200)..."
# Check for expected keywords
if [ -n "$expected_keywords" ]; then
all_found=true
IFS='|' read -ra KEYWORDS <<< "$expected_keywords"
for keyword in "${KEYWORDS[@]}"; do
if echo "$reply" | grep -qi "$keyword"; then
log_success "Response contains: '$keyword'"
else
log_error "Response missing expected keyword: '$keyword'"
all_found=false
fi
done
if $all_found; then
return 0
else
return 1
fi
fi
return 0
}
# Check collector handoff state
check_handoff_state() {
local expected_docs="$1"
local expected_github="$2"
local expected_extension="$3"
log_info "Checking collector handoff state..."
# This would require Firestore access or an API endpoint
# For now, we'll just log what we expect
log_info "Expected state:"
echo " - hasDocuments: $expected_docs"
echo " - githubConnected: $expected_github"
echo " - extensionLinked: $expected_extension"
# TODO: Add actual Firestore check or API endpoint
log_warning "Handoff state check not implemented (would need Firestore access)"
}
# Simulate document upload
simulate_document_upload() {
local filename="$1"
log_info "Simulating upload: $filename"
# Create a temporary test file
temp_file=$(mktemp)
echo "This is a test document for QA purposes.
Project Overview:
- We're building a SaaS platform
- Target users: Small businesses
- Key features: User management, billing, analytics
Technical Stack:
- Frontend: React, Next.js
- Backend: Node.js, PostgreSQL
- Infrastructure: AWS
This is test content for $filename" > "$temp_file"
# Upload via API
response=$(curl -s -X POST "$API_BASE/projects/$PROJECT_ID/knowledge/upload-document" \
-H "Authorization: Bearer $AUTH_TOKEN" \
-F "file=@$temp_file;filename=$filename")
rm "$temp_file"
if echo "$response" | jq -e '.success' > /dev/null 2>&1; then
knowledge_id=$(echo "$response" | jq -r '.knowledgeItemId')
log_success "Uploaded: $filename (ID: $knowledge_id)"
return 0
else
error_msg=$(echo "$response" | jq -r '.error' 2>/dev/null || echo "Unknown error")
log_error "Upload failed for $filename: $error_msg"
return 1
fi
}
# Main test flow
main() {
echo ""
echo "=========================================="
echo " RUNNING E2E COLLECTOR TESTS"
echo "=========================================="
echo ""
echo "Project ID: $PROJECT_ID"
echo ""
# Step 1: Initial greeting (auto-sent "Hello")
log_info "=== STEP 1: Welcome Message ==="
send_chat_message "Hello" "Welcome|Step 1|Step 2|Step 3|documents|GitHub|extension"
sleep 2
# Step 2: Upload documents
log_info ""
log_info "=== STEP 2: Upload Documents ==="
docs=(
"project-overview.md"
"user-stories.md"
"technical-requirements.md"
"api-specification.md"
"database-schema.md"
"ui-mockups.md"
"business-requirements.md"
"deployment-plan.md"
)
for doc in "${docs[@]}"; do
simulate_document_upload "$doc"
sleep 1
done
# Step 3: Tell AI about documents
log_info ""
log_info "=== STEP 3: Inform AI About Documents ==="
send_chat_message "I just uploaded 8 documents about my project" "uploaded|document"
sleep 2
# Step 4: Connect GitHub
log_info ""
log_info "=== STEP 4: GitHub Connection ==="
send_chat_message "Yes, I have a GitHub repo. It's called myuser/my-saas-app" "GitHub|repo|connected"
sleep 2
# Note: Actual GitHub connection requires OAuth flow
log_warning "GitHub OAuth flow requires manual browser interaction"
log_info "In real testing, user would click 'Connect GitHub' button"
# Step 5: Extension
log_info ""
log_info "=== STEP 5: Extension Installation ==="
send_chat_message "I want to install the browser extension" "extension|install|capture"
sleep 2
# Step 6: Confirm ready
log_info ""
log_info "=== STEP 6: Confirm Everything ==="
send_chat_message "Yes, that's everything I have for now" "everything|analyze|dig"
sleep 2
# Step 7: Check for auto-transition
log_info ""
log_info "=== STEP 7: Verify Auto-Transition ==="
send_chat_message "What do you need from me?" "extraction|review|important|V1"
sleep 2
# Step 8: Check handoff state
log_info ""
log_info "=== STEP 8: Verify Handoff State ==="
check_handoff_state "true" "true" "false"
# Results
echo ""
echo "=========================================="
echo " TEST RESULTS"
echo "=========================================="
echo -e "${GREEN}Passed:${NC} $TESTS_PASSED"
echo -e "${RED}Failed:${NC} $TESTS_FAILED"
echo ""
if [ $TESTS_FAILED -gt 0 ]; then
echo -e "${RED}Failed checks:${NC}"
for test in "${FAILED_TESTS[@]}"; do
echo " - $test"
done
echo ""
exit 1
else
echo -e "${GREEN}✅ E2E COLLECTOR FLOW COMPLETE!${NC}"
echo ""
echo "Next steps:"
echo "1. Open http://localhost:3000 in browser"
echo "2. Navigate to the project"
echo "3. Check AI Chat page - verify checklist shows:"
echo " ✅ Documents uploaded (8)"
echo " ✅ GitHub connected"
echo " ⭕ Extension linked"
echo "4. Verify mode switched to 'Extraction Review'"
echo ""
exit 0
fi
}
# Run tests
cd "$(dirname "$0")"
main