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

161
test-actual-user-flow.sh Executable file
View File

@@ -0,0 +1,161 @@
#!/bin/bash
# Test script simulating actual user conversation flow
# Project: Dr Dave EMR (Rcj5OY2xpQFHAzqUyMim)
# Context: GitHub connected, no documents uploaded
set -e
PROJECT_ID="Rcj5OY2xpQFHAzqUyMim"
BASE_URL="http://localhost:3000"
# Colors for output
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}Testing Actual User Conversation Flow${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
# Get Firebase token
echo -e "${YELLOW}Step 1: Get Firebase Auth Token${NC}"
if [ -z "$FIREBASE_TOKEN" ]; then
echo "Please provide your Firebase ID token:"
echo "(or set FIREBASE_TOKEN environment variable)"
read -r FIREBASE_TOKEN
fi
if [ -z "$FIREBASE_TOKEN" ]; then
echo -e "${RED}Error: Firebase token is required${NC}"
exit 1
fi
echo -e "${GREEN}✓ Token received${NC}"
echo ""
# Function to send chat message
send_message() {
local message="$1"
local step_name="$2"
echo -e "${YELLOW}${step_name}${NC}"
echo -e "User: ${message}"
local response=$(curl -s -X POST "${BASE_URL}/api/ai/chat" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${FIREBASE_TOKEN}" \
-d "{
\"message\": \"${message}\",
\"projectId\": \"${PROJECT_ID}\"
}")
local ai_reply=$(echo "$response" | jq -r '.reply // .error // "No reply"')
echo -e "AI: ${ai_reply}"
echo ""
# Return the full response for checking
echo "$response"
}
# Function to check project phase
check_project_phase() {
local step_name="$1"
echo -e "${YELLOW}${step_name}${NC}"
# Get project data from Firestore via API
local project_data=$(curl -s "${BASE_URL}/api/projects/${PROJECT_ID}" \
-H "Authorization: Bearer ${FIREBASE_TOKEN}")
local current_phase=$(echo "$project_data" | jq -r '.currentPhase // "unknown"')
local handoff_ready=$(echo "$project_data" | jq -r '.phaseData.phaseHandoffs.collector.readyForNextPhase // false')
local has_extraction=$(echo "$project_data" | jq -r '.phaseData.phaseHandoffs.extraction // "null"')
echo "Current Phase: ${current_phase}"
echo "Collector Ready: ${handoff_ready}"
echo "Has Extraction Handoff: $([ "$has_extraction" != "null" ] && echo "YES" || echo "NO")"
echo ""
echo "$project_data"
}
# Simulate the actual user conversation
echo -e "${BLUE}Starting conversation simulation...${NC}"
echo ""
# Message 1: Initial greeting (AI should welcome and ask what they have)
response1=$(send_message "Hello" "Message 1: Initial greeting")
sleep 2
# Message 2: User mentions GitHub repo
response2=$(send_message "I have a GitHub repo connected" "Message 2: User mentions GitHub")
sleep 2
# Message 3: User confirms they have everything
response3=$(send_message "that's everything" "Message 3: User confirms ready")
sleep 2
# Check if handoff was triggered
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}Checking Handoff Contract${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
project_state=$(check_project_phase "Step 1: Check project state immediately after 'that's everything'")
# Wait a bit for async extraction to run
echo -e "${YELLOW}Waiting 5 seconds for backend extraction to complete...${NC}"
sleep 5
project_state_after=$(check_project_phase "Step 2: Check project state after backend extraction")
# Extract key values
current_phase=$(echo "$project_state_after" | jq -r '.currentPhase // "unknown"')
ready_for_next=$(echo "$project_state_after" | jq -r '.phaseData.phaseHandoffs.collector.readyForNextPhase // false')
has_extraction=$(echo "$project_state_after" | jq -r '.phaseData.phaseHandoffs.extraction // "null"')
# Message 4: Send another message to see if AI is in extraction review mode
response4=$(send_message "what did you find?" "Message 4: Ask about findings (should be in extraction_review mode)")
# Verify results
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}Test Results${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
if [ "$ready_for_next" = "true" ]; then
echo -e "${GREEN}✓ Collector handoff.readyForNextPhase = true${NC}"
else
echo -e "${RED}✗ Collector handoff.readyForNextPhase = false (expected true)${NC}"
fi
if [ "$has_extraction" != "null" ]; then
echo -e "${GREEN}✓ Extraction handoff exists${NC}"
else
echo -e "${RED}✗ Extraction handoff missing${NC}"
fi
if [ "$current_phase" = "extraction_review" ]; then
echo -e "${GREEN}✓ Phase transitioned to extraction_review${NC}"
else
echo -e "${RED}✗ Phase is '${current_phase}' (expected 'extraction_review')${NC}"
fi
# Check if AI's final response mentions "processing" or "analyzing"
if echo "$response4" | jq -r '.reply' | grep -qi "processing\|analyzing\|let me analyze"; then
echo -e "${RED}✗ AI is still saying it's processing/analyzing (should present results)${NC}"
else
echo -e "${GREEN}✓ AI is not hallucinating processing state${NC}"
fi
echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}Full Project State${NC}"
echo -e "${BLUE}========================================${NC}"
echo "$project_state_after" | jq '.'