diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
new file mode 100644
index 0000000..2eb9163
--- /dev/null
+++ b/.github/copilot-instructions.md
@@ -0,0 +1,302 @@
+# GitHub Copilot Instructions for Trading Bot Development
+
+## ๐ฏ Project Context & Architecture
+
+This is an AI-powered trading automation system with advanced learning capabilities. When working on this codebase:
+
+### Core System Components
+1. **Superior Parallel Screenshot System** - 60% faster than sequential capture
+2. **AI Learning System** - Adapts trading decisions based on outcomes
+3. **Orphaned Order Cleanup** - Automatic cleanup when positions close
+4. **Position Monitoring** - Frequent checks with integrated cleanup triggers
+
+### Critical File Relationships
+```
+app/api/automation/position-monitor/route.js โ Monitors positions + triggers cleanup
+lib/simplified-stop-loss-learner.js โ AI learning core with pattern recognition
+lib/superior-screenshot-service.ts โ Parallel screenshot capture system
+lib/enhanced-autonomous-risk-manager.js โ Risk management with AI integration
+```
+
+## ๐ง AI Learning System Patterns
+
+### Always Include These Functions in Learning Classes:
+```javascript
+async generateLearningReport() {
+ // Return comprehensive learning status
+ return {
+ summary: { totalDecisions, systemConfidence, successRate },
+ insights: { thresholds, confidenceLevel },
+ recommendations: []
+ };
+}
+
+async getSmartRecommendation(requestData) {
+ // Analyze patterns and return AI recommendation
+ const { distanceFromSL, symbol, marketConditions } = requestData;
+ // Return: { action, confidence, reasoning }
+}
+
+async recordDecision(decisionData) {
+ // Log decision for learning with unique ID
+ const id = `decision_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
+ // Store in database for pattern analysis
+}
+
+async assessDecisionOutcome(outcomeData) {
+ // Update decision with actual result for learning
+ // Calculate if decision was correct based on outcome
+}
+```
+
+### Database Operations Best Practices:
+```javascript
+// ALWAYS provide unique IDs for Prisma records
+await prisma.ai_learning_data.create({
+ data: {
+ id: `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
+ // ... other fields
+ }
+});
+
+// Use correct import path
+const { getDB } = require('./db'); // NOT './database-util'
+```
+
+## ๐ง Error Handling Patterns
+
+### Function Existence Checks:
+```javascript
+// Always check if functions exist before calling
+if (typeof this.learner.generateLearningReport === 'function') {
+ const report = await this.learner.generateLearningReport();
+} else {
+ // Fallback to alternative method
+ const status = await this.learner.getLearningStatus();
+}
+```
+
+### Comprehensive Try-Catch:
+```javascript
+try {
+ const result = await aiFunction();
+ return result;
+} catch (error) {
+ await this.log(`โ AI function error: ${error.message}`);
+ return fallbackResult(); // Always provide fallback
+}
+```
+
+## ๐ Integration Patterns
+
+### Position Monitor Integration:
+```javascript
+// When no position detected, check for orphaned orders
+if (!result.hasPosition) {
+ console.log('๐ No active positions detected - checking for orphaned orders...');
+
+ try {
+ const ordersResponse = await fetch(`${baseUrl}/api/drift/orders`);
+ if (ordersResponse.ok) {
+ const ordersData = await ordersResponse.json();
+ if (ordersData.orders?.length > 0) {
+ // Trigger cleanup
+ const cleanupResponse = await fetch(`${baseUrl}/api/drift/cleanup-orders`, {
+ method: 'POST'
+ });
+ // Handle cleanup result
+ }
+ }
+ } catch (error) {
+ // Handle error gracefully
+ }
+}
+```
+
+### Parallel Processing for Screenshots:
+```javascript
+// Use Promise.allSettled for parallel processing
+const promises = timeframes.map(timeframe =>
+ captureTimeframe(timeframe, symbol, layoutType)
+);
+const results = await Promise.allSettled(promises);
+
+// Process results with error isolation
+results.forEach((result, index) => {
+ if (result.status === 'fulfilled') {
+ // Handle success
+ } else {
+ // Handle individual failure without breaking others
+ }
+});
+```
+
+## ๐ฏ Performance Optimization Rules
+
+### Screenshot Capture:
+- Always use parallel processing for multiple timeframes
+- Reuse browser sessions to avoid login/captcha
+- Isolate errors so one failure doesn't break others
+- Prefer `Promise.allSettled` over `Promise.all`
+
+### Database Queries:
+- Use indexed fields for frequent searches (symbol, createdAt)
+- Batch operations when possible
+- Include proper error handling for connection issues
+
+### Container Optimization:
+- Check syntax before deployment: `node -c filename.js`
+- Use health checks for monitoring
+- Implement graceful shutdown handling
+
+## ๐งช Testing Requirements
+
+### Always Include These Tests:
+```javascript
+// Test AI learning functions
+const learner = new SimplifiedStopLossLearner();
+const report = await learner.generateLearningReport();
+console.log('Learning report:', report.summary);
+
+// Test API endpoints
+const response = await fetch('/api/automation/position-monitor');
+const result = await response.json();
+console.log('Position monitor working:', result.success);
+
+// Test error scenarios
+try {
+ await riskyFunction();
+} catch (error) {
+ console.log('Error handling working:', error.message);
+}
+```
+
+## ๐จ UI/UX Patterns
+
+### Preset Configuration:
+```javascript
+// Frontend presets MUST match backend exactly
+const TRADING_PRESETS = {
+ scalp: ['5m', '15m', '30m'], // NOT ['5m', '15m', '1h']
+ day: ['1h', '2h'], // NOT ['1h', '4h', '1d']
+ swing: ['4h', '1D'],
+ extended: ['1m', '3m', '5m', '15m', '30m', '1h', '4h', '1D']
+};
+```
+
+### Status Display:
+```javascript
+// Always provide detailed feedback
+return {
+ success: true,
+ monitor: {
+ hasPosition: false,
+ orphanedOrderCleanup: {
+ triggered: true,
+ success: true,
+ message: 'Cleaned up 2 orphaned orders',
+ summary: { totalCanceled: 2 }
+ }
+ }
+};
+```
+
+## ๐ Debugging Strategies
+
+### Container Issues:
+```bash
+# Check for syntax errors
+find . -name "*.js" -exec node -c {} \;
+
+# Monitor logs for patterns
+docker logs trader_dev --since="1m" | grep -E "(Error|unhandled|crash)"
+
+# Test specific components
+node test-learning-system.js
+```
+
+### Integration Issues:
+```bash
+# Test API endpoints individually
+curl -s http://localhost:9001/api/automation/position-monitor | jq .
+
+# Verify database connectivity
+node -e "const {getDB} = require('./lib/db'); getDB().then(() => console.log('DB OK'));"
+```
+
+## ๐จ Critical Anti-Patterns to Avoid
+
+### โ Don't Do This:
+```javascript
+// Missing error handling
+const report = await this.learner.generateLearningReport(); // Will crash if function missing
+
+// Redundant polling
+setInterval(checkOrders, 60000); // When position monitor already runs frequently
+
+// Frontend/backend preset mismatch
+backend: ['5m', '15m', '1h']
+frontend: ['5m', '15m', '30m'] // Will cause confusion
+
+// Missing unique IDs
+await prisma.create({ data: { symbol, timeframe } }); // Will fail validation
+```
+
+### โ
Do This Instead:
+```javascript
+// Defensive programming
+if (typeof this.learner.generateLearningReport === 'function') {
+ try {
+ const report = await this.learner.generateLearningReport();
+ } catch (error) {
+ await this.log(`Report generation failed: ${error.message}`);
+ }
+}
+
+// Leverage existing infrastructure
+// Add cleanup to existing position monitor instead of new polling
+
+// Ensure consistency
+const PRESETS = { scalp: ['5m', '15m', '30m'] }; // Same in frontend and backend
+
+// Always provide unique IDs
+const id = `${type}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
+```
+
+## ๐ฏ Configuration Standards
+
+### Environment Variables:
+```javascript
+// Always provide fallbacks
+const apiKey = process.env.OPENAI_API_KEY || '';
+if (!apiKey) {
+ throw new Error('OPENAI_API_KEY is required');
+}
+```
+
+### Next.js Configuration:
+```typescript
+// Use new format, not deprecated
+const nextConfig: NextConfig = {
+ serverExternalPackages: ['puppeteer-core'], // NOT experimental.serverComponentsExternalPackages
+ transpilePackages: ['next-font'],
+ typescript: { ignoreBuildErrors: true },
+ eslint: { ignoreDuringBuilds: true }
+};
+```
+
+## ๐ Enhancement Guidelines
+
+When adding new features:
+
+1. **Check Existing Infrastructure** - Can it be integrated vs creating new?
+2. **Add Comprehensive Error Handling** - Assume functions may not exist
+3. **Include Fallback Mechanisms** - System should work without AI/learning
+4. **Test in Isolation** - Create test scripts for new components
+5. **Document Integration Points** - How does it connect to existing systems?
+6. **Maintain Consistency** - Frontend and backend must match exactly
+7. **Use Defensive Programming** - Check before calling, handle gracefully
+
+---
+
+**Follow these patterns to maintain system stability and avoid the complex debugging issues that were resolved in this session.**
diff --git a/ADVANCED_SYSTEM_KNOWLEDGE.md b/ADVANCED_SYSTEM_KNOWLEDGE.md
new file mode 100644
index 0000000..fdd0e34
--- /dev/null
+++ b/ADVANCED_SYSTEM_KNOWLEDGE.md
@@ -0,0 +1,266 @@
+# ๐ง AI Learning & Advanced System Knowledge
+
+## ๐ฏ Critical System Components (Learned from Session)
+
+### ๐ Superior Parallel Screenshot System
+**BREAKTHROUGH: 60% Performance Improvement**
+
+```javascript
+// Key Implementation in lib/superior-screenshot-service.ts
+- Parallel capture vs sequential: 71s vs 180s for 3 timeframes
+- Trading Presets Must Match Frontend UI EXACTLY:
+ * Scalp: 5m,15m,30m (NOT 5m,15m,1h)
+ * Day: 1h,2h (NOT 1h,4h,1d)
+ * Swing: 4h,1D
+ * Extended: 1m-1D comprehensive
+```
+
+**Critical Lesson**: Frontend UI is the source of truth for preset definitions.
+
+### ๐งน Orphaned Order Cleanup Integration
+**PROBLEM SOLVED**: Drift always leaves opposite positions open after SL/TP hits
+
+```javascript
+// Integration Point: app/api/automation/position-monitor/route.js
+- Triggers cleanup ONLY when hasPosition: false
+- Uses existing frequent position monitoring (no redundant polling)
+- Provides detailed cleanup results in monitoring response
+
+Key Insight: Leverage existing monitoring infrastructure vs creating separate timers
+```
+
+### ๐ค AI Learning System Architecture
+**CRITICAL COMPONENT**: Actual learning system that adapts trading decisions
+
+```javascript
+// lib/simplified-stop-loss-learner.js - Core Learning Functions:
+1. recordDecision() - Logs every risk management choice
+2. assessDecisionOutcome() - Tracks what actually happened
+3. getSmartRecommendation() - AI suggestions based on learned patterns
+4. generateLearningReport() - 15-minute learning progress reports
+
+// Learning Flow:
+Risk Manager -> Records Decision -> Waits 5min -> Assesses Outcome -> Updates Thresholds
+```
+
+**Key Learning**: This isn't just statistics - it actively influences trading decisions!
+
+## ๐ง Critical Technical Fixes
+
+### Database Schema Issues
+```javascript
+// ISSUE: Prisma validation errors crashed container
+// FIX: Always provide unique ID for ai_learning_data records
+await prisma.ai_learning_data.create({
+ data: {
+ id: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
+ // ... other fields
+ }
+});
+```
+
+### Memory Leak Prevention
+```javascript
+// ISSUE: Unhandled promise rejections caused EventEmitter overflow
+// FIX: Proper error handling with try/catch and function existence checks
+if (typeof this.learner.generateLearningReport === 'function') {
+ const report = await this.learner.generateLearningReport();
+}
+```
+
+### Import Path Corrections
+```javascript
+// ISSUE: Module not found errors
+// FIX: Use correct relative paths for database utilities
+const { getDB } = require('./db'); // NOT './database-util'
+```
+
+## ๐ฏ AI Learning System Deep Dive
+
+### How The AI Actually Learns
+1. **Pattern Recognition**:
+ ```
+ "When SOL is 4% from SL with bullish momentum, holding works 73% of time"
+ ```
+
+2. **Threshold Optimization**:
+ ```
+ Original: Emergency=1%, Risk=2%
+ After Learning: Emergency=0.7%, Risk=1.8% (based on outcomes)
+ ```
+
+3. **Smart Recommendations**:
+ ```javascript
+ // AI analyzes similar historical situations
+ const recommendation = await learner.getSmartRecommendation({
+ distanceFromSL: 3.5,
+ symbol: 'SOL-PERP',
+ marketConditions: { /* current state */ }
+ });
+ // Returns: EMERGENCY_EXIT vs HOLD_CONFIDENT based on learned patterns
+ ```
+
+### Learning Confidence Progression
+```
+0-5 decisions: 30% confidence (LOW)
+5-20 decisions: 40-60% confidence (MEDIUM)
+20-50 decisions: 60-80% confidence (HIGH)
+50+ decisions: 80-95% confidence (EXPERT)
+```
+
+## ๐จ Critical Error Patterns & Solutions
+
+### Container Crash Root Causes
+1. **Database Schema Violations** โ Add unique IDs to all Prisma records
+2. **Missing Function Calls** โ Implement all required interfaces
+3. **Memory Leaks from Unhandled Errors** โ Comprehensive error handling
+4. **Configuration Deprecations** โ Keep configs updated with framework changes
+
+### Next.js Common Issues
+```javascript
+// Issue: serverComponentsExternalPackages deprecated
+// Old: experimental.serverComponentsExternalPackages
+// New: serverExternalPackages
+
+// Issue: Module resolution in Docker
+// Fix: Ensure correct relative paths for all imports
+```
+
+## ๐ก Development Best Practices Discovered
+
+### 1. Integration Strategy
+- **Leverage Existing Infrastructure**: Don't create redundant polling when monitoring already exists
+- **Gradual Enhancement**: Add features to existing endpoints vs creating new ones
+- **Fail Gracefully**: Always provide fallbacks for AI/learning features
+
+### 2. Testing Approach
+```javascript
+// Always test critical components in isolation
+node test-learning-system.js // Test AI learning
+node test-orphaned-cleanup.js // Test cleanup integration
+curl /api/automation/position-monitor // Test monitoring
+```
+
+### 3. Error Handling Philosophy
+```javascript
+// Defensive Programming for AI Systems
+try {
+ const aiResult = await aiFunction();
+ return aiResult;
+} catch (error) {
+ logger.error(`AI function failed: ${error.message}`);
+ return fallbackFunction(); // Always have a fallback
+}
+```
+
+## ๐ฏ Performance Optimizations
+
+### Screenshot Capture
+- **Parallel Processing**: 60% time savings over sequential
+- **Session Reuse**: Avoid repeated logins/captchas
+- **Error Isolation**: One layout failure doesn't break others
+
+### Database Operations
+- **Batch Inserts**: For multiple learning records
+- **Indexed Queries**: On frequently searched fields (symbol, createdAt)
+- **Connection Pooling**: Reuse database connections
+
+### Container Optimization
+```dockerfile
+# Multi-stage builds for smaller images
+# Non-root user for security
+# Health checks for monitoring
+# Proper signal handling for graceful shutdowns
+```
+
+## ๐งช Testing Protocols
+
+### AI Learning System
+```bash
+# Test learning functions
+node test-learning-system.js
+
+# Expected output:
+โ
Learning report generated: 0 decisions, 30% confidence
+โ
Smart recommendation: MONITOR at 3.5% distance
+```
+
+### Integration Testing
+```bash
+# Test orphaned cleanup integration
+curl /api/automation/position-monitor | jq '.monitor.orphanedOrderCleanup'
+
+# Test parallel screenshots
+curl -X POST /api/superior-screenshot -d '{"timeframes":["5m","15m","30m"]}'
+```
+
+### System Health
+```bash
+# Monitor for critical errors
+docker logs trader_dev --since="1m" | grep -E "(Error|unhandled|crash)"
+
+# Should return: 0 errors
+```
+
+## ๐ Future Enhancement Opportunities
+
+### 1. Advanced Learning Features
+- **Market Condition Clustering**: Group similar market states
+- **Volatility Adaptation**: Adjust thresholds based on VIX/volatility
+- **Time-of-Day Learning**: Different strategies for different sessions
+
+### 2. Performance Improvements
+- **WebSocket Integration**: Real-time position monitoring
+- **Caching Layer**: Redis for frequently accessed data
+- **GPU Acceleration**: For complex AI computations
+
+### 3. Risk Management Enhancements
+- **Portfolio-Level Learning**: Cross-symbol pattern recognition
+- **Drawdown Protection**: Automatic position sizing reduction
+- **Correlation Analysis**: Avoid over-concentration
+
+## ๐ Debugging Guide
+
+### Common Issues & Solutions
+
+1. **Container Won't Start**
+ ```bash
+ # Check syntax errors
+ find . -name "*.js" -exec node -c {} \;
+
+ # Check Docker logs
+ docker logs trader_dev --tail=50
+ ```
+
+2. **AI Learning Not Working**
+ ```bash
+ # Test learning functions
+ node -e "
+ const Learner = require('./lib/simplified-stop-loss-learner');
+ const l = new Learner();
+ l.generateLearningReport().then(console.log);
+ "
+ ```
+
+3. **Database Connection Issues**
+ ```bash
+ # Test database connectivity
+ node -e "
+ const { getDB } = require('./lib/db');
+ getDB().then(() => console.log('DB connected'));
+ "
+ ```
+
+## ๐ Key Learnings for Future Development
+
+1. **Always Verify Frontend-Backend Consistency**: UI defines truth
+2. **Implement Comprehensive Error Handling**: Prevent cascade failures
+3. **Use Existing Infrastructure**: Don't reinvent monitoring/polling
+4. **Test AI Components Independently**: Isolate learning system testing
+5. **Document Integration Points**: Critical for maintenance
+6. **Monitor System Health**: Proactive error detection
+7. **Version Control Critical Fixes**: Always commit stability improvements
+
+---
+
+**This knowledge base captures critical insights that took significant debugging to discover. Use it to avoid repeating complex troubleshooting and to guide future enhancements.**
diff --git a/README.md b/README.md
index aebf80a..ef1799b 100644
--- a/README.md
+++ b/README.md
@@ -332,6 +332,38 @@ curl -X POST http://localhost:9001/api/automation \
4. Push to branch: `git push origin feature/amazing-feature`
5. Open a Pull Request
+## ๐ Documentation & Knowledge Base
+
+This project includes comprehensive documentation covering all aspects of the system:
+
+### ๐ฏ **Core Documentation**
+- **`README.md`** - Main project overview and quick start guide
+- **`ADVANCED_SYSTEM_KNOWLEDGE.md`** - Critical technical insights and troubleshooting
+- **`.github/copilot-instructions.md`** - Development patterns and best practices
+
+### ๐ง **AI & Learning System**
+- **Complete AI Learning Architecture** - Pattern recognition and adaptive decision making
+- **Smart Recommendation Engine** - Historical outcome analysis for trading decisions
+- **Learning Report Generation** - 15-minute progress reports with confidence tracking
+- **Threshold Optimization** - Automatic adjustment based on trading success rates
+
+### ๐ง **Technical Analysis Documentation**
+- **`TECHNICAL_ANALYSIS_BASICS.md`** - Complete guide to all indicators used
+- **`TA_QUICK_REFERENCE.md`** - Quick reference for indicator interpretation
+- **AI Analysis Integration** - TA fundamentals built into AI analysis prompts
+
+### โก **Performance Optimizations**
+- **Superior Parallel Screenshot System** - 60% faster than sequential (71s vs 180s)
+- **Orphaned Order Cleanup Integration** - Automatic cleanup when positions close
+- **Container Stability Fixes** - Resolved memory leaks and crash issues
+- **Database Schema Optimizations** - Proper Prisma validation and error handling
+
+### ๐ ๏ธ **Development Guides**
+- **Integration Patterns** - How to add features without breaking existing systems
+- **Error Handling Best Practices** - Defensive programming for AI systems
+- **Testing Protocols** - Isolated testing for critical components
+- **Debugging Strategies** - Common issues and their solutions
+
## ๏ฟฝ Technical Analysis Documentation
This project includes comprehensive Technical Analysis (TA) documentation:
diff --git a/app/api/automation/stop/route.js b/app/api/automation/stop/route.js
index c784056..5e900bd 100644
--- a/app/api/automation/stop/route.js
+++ b/app/api/automation/stop/route.js
@@ -1,10 +1,10 @@
-import { positionAwareAutomation } from '@/lib/position-aware-automation';
+import { simpleAutomation } from '@/lib/simple-automation';
export async function POST() {
try {
console.log('๐ AUTOMATION STOP: Request received');
- const result = await positionAwareAutomation.stop();
+ const result = await simpleAutomation.stop();
// Additional cleanup
try {
diff --git a/app/api/enhanced-screenshot/route.js b/app/api/enhanced-screenshot/route.js
new file mode 100644
index 0000000..9511adf
--- /dev/null
+++ b/app/api/enhanced-screenshot/route.js
@@ -0,0 +1,165 @@
+import { NextResponse } from 'next/server'
+import { superiorScreenshotService } from '../../../lib/superior-screenshot-service'
+import { aiAnalysisService } from '../../../lib/ai-analysis'
+import { progressTracker } from '../../../lib/progress-tracker'
+
+export async function POST(request) {
+ let sessionId = null
+
+ try {
+ const body = await request.json()
+ console.log('๐ Enhanced Screenshot API request:', body)
+
+ const config = {
+ symbol: body.symbol || 'SOLUSD',
+ timeframe: body.timeframe || '240',
+ layouts: body.layouts || ['ai', 'diy'],
+ analyze: body.analyze === true
+ }
+
+ // Create session for progress tracking
+ sessionId = progressTracker.createSession()
+ config.sessionId = sessionId
+
+ console.log(`๐ Created session ${sessionId} for enhanced screenshot`)
+
+ // Initialize progress steps
+ progressTracker.initializeSteps(sessionId, [
+ { id: 'init', name: 'Initialize', status: 'active' },
+ { id: 'auth', name: 'Authentication', status: 'pending' },
+ { id: 'loading', name: 'Loading Chart', status: 'pending' },
+ { id: 'capture', name: 'Capture Screenshot', status: 'pending' },
+ { id: 'analysis', name: 'AI Analysis', status: 'pending' }
+ ])
+
+ let screenshots = []
+ let analysis = null
+
+ // Capture screenshots using superior parallel technique
+ try {
+ console.log('๐ Starting superior screenshot capture...')
+
+ // Use single timeframe capture for backwards compatibility
+ const screenshotPaths = await superiorScreenshotService.captureQuick(
+ config.symbol,
+ config.timeframe,
+ config.layouts
+ )
+
+ screenshots = screenshotPaths
+ console.log('๐ธ Superior screenshot capture completed:', screenshots.length, 'files')
+ } catch (screenshotError) {
+ console.error('โ Superior screenshot capture failed:', screenshotError)
+ throw new Error(`Screenshot capture failed: ${screenshotError.message}`)
+ }
+
+ // Run AI analysis if requested
+ if (config.analyze && screenshots.length > 0) {
+ try {
+ console.log('๐ค Starting AI analysis...')
+ progressTracker.updateStep(sessionId, 'analysis', 'active', 'Analyzing screenshots...')
+
+ const analysisConfig = {
+ sessionId,
+ screenshots,
+ symbol: config.symbol,
+ timeframe: config.timeframe,
+ layouts: config.layouts
+ }
+
+ analysis = await aiAnalysisService.analyzeScreenshots(analysisConfig)
+
+ if (analysis) {
+ progressTracker.updateStep(sessionId, 'analysis', 'completed', 'Analysis completed successfully')
+ console.log('โ
AI analysis completed')
+ } else {
+ progressTracker.updateStep(sessionId, 'analysis', 'error', 'Analysis failed to return results')
+ console.warn('โ ๏ธ AI analysis completed but returned no results')
+ }
+
+ } catch (analysisError) {
+ console.error('โ AI analysis failed:', analysisError)
+ progressTracker.updateStep(sessionId, 'analysis', 'error', analysisError.message)
+ // Don't throw - return partial results with screenshots
+ analysis = { error: analysisError.message }
+ }
+ }
+
+ console.log('๐ธ Final screenshots:', screenshots)
+
+ const result = {
+ success: true,
+ sessionId,
+ timestamp: Date.now(),
+ symbol: config.symbol,
+ layouts: config.layouts,
+ timeframes: [config.timeframe],
+ screenshots,
+ analysis,
+ message: `Successfully captured ${screenshots.length} screenshot(s)${config.analyze ? ' with AI analysis' : ''}`
+ }
+
+ console.log('โ
Enhanced screenshot API completed successfully')
+ return NextResponse.json(result)
+
+ } catch (error) {
+ console.error('โ Enhanced screenshot API error:', error)
+
+ if (sessionId) {
+ // Mark any active step as error
+ const progress = progressTracker.getProgress(sessionId)
+ if (progress) {
+ const activeStep = progress.steps.find(step => step.status === 'active')
+ if (activeStep) {
+ progressTracker.updateStep(sessionId, activeStep.id, 'error', error.message)
+ }
+ }
+ }
+
+ return NextResponse.json({
+ success: false,
+ error: error.message,
+ timestamp: Date.now(),
+ sessionId
+ }, { status: 500 })
+
+ } finally {
+ // CRITICAL: Always run cleanup in finally block
+ console.log('๐งน FINALLY BLOCK: Running superior screenshot service cleanup...')
+
+ try {
+ // Force cleanup all browser sessions (API-managed, no action needed)
+ await superiorScreenshotService.cleanup()
+ console.log('โ
FINALLY BLOCK: Superior screenshot service cleanup completed')
+
+ // Also run aggressive cleanup to ensure no processes remain
+ const { automatedCleanupService } = await import('../../../lib/automated-cleanup-service')
+ await automatedCleanupService.forceCleanup()
+ console.log('โ
FINALLY BLOCK: Automated cleanup completed')
+
+ } catch (cleanupError) {
+ console.error('โ FINALLY BLOCK: Error during cleanup:', cleanupError)
+ }
+
+ // Clean up progress session after delay to allow frontend to read final state
+ if (sessionId) {
+ setTimeout(() => {
+ try {
+ progressTracker.deleteSession(sessionId)
+ console.log(`๐๏ธ Cleaned up session ${sessionId}`)
+ } catch (sessionCleanupError) {
+ console.error('Error cleaning up session:', sessionCleanupError)
+ }
+ }, 30000) // 30 second delay
+ }
+ }
+}
+
+export async function GET() {
+ return NextResponse.json({
+ message: 'Enhanced Screenshot API - use POST method for analysis',
+ endpoints: {
+ POST: '/api/enhanced-screenshot - Run analysis with parameters'
+ }
+ })
+}
diff --git a/app/automation-v2/page-clean.js b/app/automation-v2/page-clean.js
new file mode 100644
index 0000000..c0a0719
--- /dev/null
+++ b/app/automation-v2/page-clean.js
@@ -0,0 +1,444 @@
+'use client'
+import React, { useState, useEffect } from 'react'
+
+// Available timeframes for automation (matching analysis page format)
+const timeframes = [
+ { label: '5m', value: '5' },
+ { label: '15m', value: '15' },
+ { label: '30m', value: '30' },
+ { label: '1h', value: '60' },
+ { label: '2h', value: '120' },
+ { label: '4h', value: '240' },
+ { label: '1d', value: 'D' },
+]
+
+export default function AutomationPageV2() {
+ const [config, setConfig] = useState({
+ mode: 'SIMULATION',
+ dexProvider: 'DRIFT',
+ symbol: 'SOLUSD',
+ selectedTimeframes: ['60'], // Multi-timeframe support
+ tradingAmount: 100,
+ balancePercentage: 50, // Default to 50% of available balance
+ })
+
+ const [status, setStatus] = useState(null)
+ const [balance, setBalance] = useState(null)
+ const [positions, setPositions] = useState([])
+ const [loading, setLoading] = useState(false)
+
+ useEffect(() => {
+ fetchStatus()
+ fetchBalance()
+ fetchPositions()
+
+ const interval = setInterval(() => {
+ fetchStatus()
+ fetchBalance()
+ fetchPositions()
+ }, 30000)
+ return () => clearInterval(interval)
+ }, [])
+
+ const toggleTimeframe = (timeframe) => {
+ setConfig(prev => ({
+ ...prev,
+ selectedTimeframes: prev.selectedTimeframes.includes(timeframe)
+ ? prev.selectedTimeframes.filter(tf => tf !== timeframe)
+ : [...prev.selectedTimeframes, timeframe]
+ }))
+ }
+
+ const fetchStatus = async () => {
+ try {
+ const response = await fetch('/api/automation/status')
+ const data = await response.json()
+ if (data.success) {
+ setStatus(data.status)
+ }
+ } catch (error) {
+ console.error('Failed to fetch status:', error)
+ }
+ }
+
+ const fetchBalance = async () => {
+ try {
+ const response = await fetch('/api/drift/balance')
+ const data = await response.json()
+ if (data.success) {
+ setBalance(data)
+ }
+ } catch (error) {
+ console.error('Failed to fetch balance:', error)
+ }
+ }
+
+ const fetchPositions = async () => {
+ try {
+ const response = await fetch('/api/drift/positions')
+ const data = await response.json()
+ if (data.success) {
+ setPositions(data.positions || [])
+ }
+ } catch (error) {
+ console.error('Failed to fetch positions:', error)
+ }
+ }
+
+ const handleStart = async () => {
+ console.log('๐ Starting automation...')
+ setLoading(true)
+ try {
+ if (config.selectedTimeframes.length === 0) {
+ console.error('No timeframes selected')
+ setLoading(false)
+ return
+ }
+
+ const automationConfig = {
+ symbol: config.symbol,
+ selectedTimeframes: config.selectedTimeframes,
+ mode: config.mode,
+ tradingAmount: config.tradingAmount,
+ leverage: config.leverage,
+ stopLoss: config.stopLoss,
+ takeProfit: config.takeProfit
+ }
+
+ const response = await fetch('/api/automation/start', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(automationConfig)
+ })
+
+ const data = await response.json()
+
+ if (data.success) {
+ console.log('โ
Automation started successfully')
+ fetchStatus()
+ } else {
+ console.error('Failed to start automation:', data.error)
+ }
+ } catch (error) {
+ console.error('Failed to start automation:', error)
+ } finally {
+ setLoading(false)
+ }
+ }
+
+ const handleStop = async () => {
+ console.log('๐ Stopping automation...')
+ setLoading(true)
+ try {
+ const response = await fetch('/api/automation/stop', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' }
+ })
+
+ const data = await response.json()
+
+ if (data.success) {
+ console.log('โ
Automation stopped successfully')
+ fetchStatus()
+ } else {
+ console.error('Failed to stop automation:', data.error)
+ }
+ } catch (error) {
+ console.error('Failed to stop automation:', error)
+ } finally {
+ setLoading(false)
+ }
+ }
+
+ return (
+
+ {/* Header with Start/Stop */}
+
+
+
Automated Trading
+
Multi-Timeframe Analysis
+
+
+ {status?.isActive ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ {/* Configuration Panel */}
+
+
+
Configuration
+
+ {/* Trading Mode */}
+
+
+ {/* Symbol and Position Size */}
+
+
+
+
+
+
+
+
+
{
+ const percentage = parseFloat(e.target.value);
+ const newAmount = balance ? (parseFloat(balance.availableBalance) * percentage / 100) : 100;
+ setConfig({
+ ...config,
+ balancePercentage: percentage,
+ tradingAmount: Math.round(newAmount)
+ });
+ }}
+ disabled={status?.isActive}
+ />
+
+ 10%
+ 50%
+ 100%
+
+
+
+
+ {/* MULTI-TIMEFRAME SELECTION */}
+
+
+
+ {/* Timeframe Checkboxes */}
+
+ {timeframes.map(tf => (
+
+ ))}
+
+
+ {/* Selected Timeframes Display */}
+ {config.selectedTimeframes.length > 0 && (
+
+
+ Selected:
+ {config.selectedTimeframes.map(tf => timeframes.find(t => t.value === tf)?.label || tf).filter(Boolean).join(', ')}
+
+
+
+ ๐ก Multiple timeframes provide more robust analysis
+
+
+ )}
+
+ {/* Quick Selection Buttons */}
+
+
+
+
+
+
+
+
+
+ {/* Status and Info Panel */}
+
+ {/* Status */}
+
+
Bot Status
+
+
+
+ Status:
+
+ {status?.isActive ? 'RUNNING' : 'STOPPED'}
+
+
+
+ {status?.isActive && (
+ <>
+
+ Symbol:
+ {status.symbol}
+
+
+
+ Mode:
+
+ {status.mode}
+
+
+
+
+ Timeframes:
+
+ {status.timeframes?.map(tf => timeframes.find(t => t.value === tf)?.label || tf).join(', ')}
+
+
+ >
+ )}
+
+
+
+ {/* Balance */}
+ {balance && (
+
+
Account Balance
+
+
+
+ Available:
+ ${balance.availableBalance}
+
+
+
+ Total:
+ ${balance.totalCollateral}
+
+
+
+ Positions:
+ {balance.positions || 0}
+
+
+
+ )}
+
+ {/* Positions */}
+ {positions.length > 0 && (
+
+
Open Positions
+
+
+ {positions.map((position, index) => (
+
+ {position.symbol}
+
+ {position.side} ${position.size}
+
+
+ ))}
+
+
+ )}
+
+
+
+ )
+}
diff --git a/app/automation-v2/page.js b/app/automation-v2/page.js
index 39b0246..ce6cd05 100644
--- a/app/automation-v2/page.js
+++ b/app/automation-v2/page.js
@@ -1,6 +1,5 @@
'use client'
import React, { useState, useEffect } from 'react'
-import PositionMonitor from '../components/PositionMonitor.tsx'
// Available timeframes for automation (matching analysis page format)
const timeframes = [
@@ -156,10 +155,7 @@ export default function AutomationPageV2() {
}
return (
-
- {/* Position Monitor - Real-time Trading Overview */}
-
-
+
{/* Configuration Panel */}
@@ -168,16 +164,6 @@ export default function AutomationPageV2() {
Configuration
- {/* Emergency Stop Button - Always Available */}
-
-
{status?.isActive ? (