'stub'];} } } // Autoload only if not heavy require_once '/opt/wevia-brain/autoload.php'; $input = json_decode(file_get_contents('php://input'), true); $action = $input['action'] ?? $_GET['action'] ?? 'code'; $prompt = trim($input['prompt'] ?? $input['message'] ?? ''); $code = $input['code'] ?? ''; $lang = $input['language'] ?? 'auto'; $file = $input['file'] ?? ''; function callAI($systemPrompt, $userPrompt, $model = 'qwen-plus') { $providers = [ ["url" => "http://127.0.0.1:4000/v1/chat/completions", "key" => "sovereign", "model" => "auto"], ['url' => 'https://api.cerebras.ai/v1/chat/completions', 'key' => getenv('CEREBRAS_API_KEY') ?: '', 'model' => 'qwen-3-235b-a22b-instruct-2507'], ['url' => 'https://api.groq.com/openai/v1/chat/completions', 'key' => getenv('GROQ_API_KEY') ?: '', 'model' => 'llama-3.3-70b-versatile'], ['url' => 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions', 'key' => getenv('ALIBABA_API_KEY') ?: 'sk-34db1ad3152443cd86563d1bfc576c30', 'model' => 'qwen-plus'], ]; foreach ($providers as $p) { if (empty($p['key'])) continue; $ch = curl_init($p['url']); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_TIMEOUT => 30, CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'Authorization: Bearer '.$p['key']], CURLOPT_POSTFIELDS => json_encode([ 'model' => $p['model'], 'messages' => [ ['role' => 'system', 'content' => $systemPrompt], ['role' => 'user', 'content' => $userPrompt] ], 'max_tokens' => 4096, 'temperature' => 0.3 ]) ]); $resp = curl_exec($ch); $code_http = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($code_http === 200) { $data = json_decode($resp, true); return $data['choices'][0]['message']['content'] ?? ''; } } return null; } // Load secrets $secrets = []; $sf = '/etc/weval/secrets.env'; if (file_exists($sf)) { foreach (file($sf) as $line) { $line = trim($line); if ($line && $line[0] !== '#' && strpos($line, '=') !== false) { [$k, $v] = explode('=', $line, 2); putenv("$k=$v"); $secrets[$k] = $v; } } } try { switch ($action) { case 'code': // Generate code from natural language $cogBoost = ''; try { $cogBoost = @wevia_get_cognitive_boost($prompt) ?: ''; } catch(Throwable $e) { $cogBoost = ''; } $ragCtx = ''; try { $ragCtx = @wevia_get_rag_context($prompt) ?: ''; } catch(Throwable $e) { $ragCtx = ''; } $sysPrompt = "You are WEVCODE, an expert sovereign coding agent. Write clean, production-ready code. Always include comments. $cogBoost"; if ($ragCtx) $sysPrompt .= "\n\nRelevant knowledge:\n$ragCtx"; $result = callAI($sysPrompt, $prompt); echo json_encode(['success' => true, 'action' => 'code', 'result' => $result, 'functions_loaded' => 635]); break; case 'analyze': // Static code analysis using CodeAnalyzer $analyzer = new CodeAnalyzer('http://127.0.0.1:4000'); $analysis = $analyzer->analyze($code, $lang); echo json_encode(['success' => true, 'action' => 'analyze', 'analysis' => $analysis]); break; case 'plan': // Create implementation plan using Planner if (function_exists('cotDecomposeSteps')) { $steps = cotDecomposeSteps($prompt); $plan = callAI( "You are a technical architect. Create a detailed implementation plan with steps, files to create/modify, and estimated complexity.", "Plan this task:\n$prompt\n\nDecomposed steps: " . json_encode($steps) ); echo json_encode(['success' => true, 'action' => 'plan', 'steps' => $steps, 'plan' => $plan]); } else { $plan = callAI("Create a detailed implementation plan.", $prompt); echo json_encode(['success' => true, 'action' => 'plan', 'plan' => $plan]); } break; case 'execute': // Execute a command (sandboxed) $cmd = $input['command'] ?? ''; if (empty($cmd)) { echo json_encode(['error' => 'No command']); break; } // Whitelist safe commands $safe = preg_match('/^(ls|cat|head|tail|grep|wc|find|php -l|python3 -c|node -e|git (status|log|diff)|curl)/i', $cmd); if (!$safe) { echo json_encode(['error' => 'Command not whitelisted']); break; } $output = shell_exec("timeout 10 $cmd 2>&1"); echo json_encode(['success' => true, 'action' => 'execute', 'output' => $output]); break; case 'git': // Git operations $repo = $input['repo'] ?? '/var/www/html'; $gitcmd = $input['gitcmd'] ?? 'status'; $safe_git = in_array($gitcmd, ['status','log --oneline -10','diff --stat','branch -a']); if (!$safe_git) { echo json_encode(['error' => 'Git command not allowed']); break; } $output = shell_exec("cd $repo && git $gitcmd 2>&1"); echo json_encode(['success' => true, 'action' => 'git', 'output' => $output]); break; case 'rag': // Direct RAG search $context = wevia_get_rag_context($prompt, 5); echo json_encode(['success' => true, 'action' => 'rag', 'context' => $context, 'chars' => strlen($context)]); break; case 'health': echo json_encode([ 'status' => 'ok', 'version' => '2.0', 'functions_loaded' => 635, 'qdrant_skills' => 5231, 'modes' => ['code','analyze','plan','execute','git','rag'], 'cognitive' => [ 'opus46' => function_exists('cotShouldActivate'), 'opus46_advanced' => function_exists('cotDecomposeSteps'), 'expansion' => function_exists('loadCognitivePrompts'), 'rag' => function_exists('wevia_get_rag_context'), 'manager' => function_exists('wevia_should_use_manager'), ] ]); break; default: echo json_encode(['error' => "Unknown action: $action", 'available' => ['code','analyze','plan','execute','git','rag','health']]); } } catch (Exception $e) { echo json_encode(['error' => $e->getMessage()]); }