{"repo": "a1pro/gottanew", "files": {"config/services.php": {"e269c04f3aff276ee998f811844bebaba0957a59": {"t": 1786068315.2678804, "n": 3283, "h": "89475ef71fca7804", "c": " [\n 'key' => env('POSTMARK_API_KEY'),\n ],\n\n 'resend' => [\n 'key' => env('RESEND_API_KEY'),\n ],\n\n 'ses' => [\n 'key' => env('AWS_ACCESS_KEY_ID'),\n 'secret' => env('AWS_SECRET_ACCESS_KEY'),\n 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n ],\n\n 'slack' => [\n 'notifications' => [\n 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),\n 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),\n ],\n ],\n\n 'daily' => [\n 'api_key' => env('DAILY_API_KEY'),\n 'transcription_language' => env('DAILY_TRANSCRIPTION_LANGUAGE', 'en'),\n 'transcription_model' => env('DAILY_TRANSCRIPTION_MODEL'),\n /**\n * Daily webhooks:\n * - Daily provides X-Webhook-Signature + X-Webhook-Timestamp headers.\n * - The hmac shared secret must be BASE64-encoded.\n * - See Daily docs: https://docs.daily.co/reference/rest-api/webhooks\n */\n 'webhook_hmac' => env('DAILY_WEBHOOK_HMAC'),\n 'webhook_max_age_seconds' => (int) env('DAILY_WEBHOOK_MAX_AGE_SECONDS', 300),\n 'webhook_url' => env('DAILY_WEBHOOK_URL'),\n 'webhook_retry_type' => env('DAILY_WEBHOOK_RETRY_TYPE', 'circuit-breaker'),\n /**\n * Transcription storage:\n * Daily defaults enable_transcription_storage=false unless explicitly enabled.\n * When enabled, Daily stores a WebVTT file and makes it downloadable via the REST API.\n */\n 'enable_transcription_storage' =>\n filter_var(env('DAILY_ENABLE_TRANSCRIPTION_STORAGE', true), FILTER_VALIDATE_BOOL),\n ],\n\n 'twilio' => [\n 'account_sid' => env('TWILIO_ACCOUNT_SID'),\n 'auth_token' => env('TWILIO_AUTH_TOKEN'),\n 'api_key' => env('TWILIO_API_KEY'),\n 'api_secret' => env('TWILIO_API_SECRET'),\n 'messaging_service_sid' => env('TWILIO_MESSAGING_SERVICE_SID'),\n 'sms_from' => env('TWILIO_SMS_FROM'),\n 'whatsapp_from' => env('TWILIO_WHATSAPP_FROM'),\n 'status_callback_url' => env('TWILIO_STATUS_CALLBACK_URL'),\n 'use_sms_fallback_for_whatsapp' =>\n filter_var(env('TWILIO_USE_SMS_FALLBACK_FOR_WHATSAPP', true), FILTER_VALIDATE_BOOL),\n ],\n\n 'stripe' => [\n 'secret' => env('STRIPE_SECRET'),\n 'publishable_key' => env('STRIPE_PUBLISHABLE_KEY'),\n 'webhook_secret' => env('STRIPE_WEBHOOK_SECRET'),\n ],\n\n 'frontend' => [\n 'url' => env('FRONTEND_URL', env('APP_URL', 'http://localhost:8080')),\n ],\n \n 'deepseek' => [\n 'key' => env('DEEPSEEK_API_KEY'),\n 'base_url' => env('DEEPSEEK_BASE_URL', 'https://api.deepseek.com'),\n 'model' => env('DEEPSEEK_MODEL', 'deepseek-v4-flash'),\n ],\n];\n"}}, "app/Console/Commands/TestDeepSeekConnection.php": {"e269c04f3aff276ee998f811844bebaba0957a59": {"t": 1786068315.424676, "n": 3182, "h": "e7a767597110849e", "c": " just checks the API connection\n * php artisan deepseek:test --session=42 -> also runs pre/post summary generation on a real session\n */\n protected $signature = 'deepseek:test {--session= : Optional session ID to test real pre/post summary generation}';\n\n protected $description = 'Verify the DeepSeek API key/config works, and optionally test summary generation on a real session';\n\n public function handle(DeepSeekClient $client, SessionInsightService $insightService): int\n {\n $this->info('Step 1: Checking DeepSeek API connection...');\n\n $ping = $client->ping();\n\n if (!$ping['ok']) {\n $this->error('DeepSeek connection FAILED: ' . $ping['error']);\n $this->warn('Check DEEPSEEK_API_KEY / DEEPSEEK_BASE_URL / DEEPSEEK_MODEL in .env, then run php artisan config:clear.');\n return self::FAILURE;\n }\n\n $this->info('DeepSeek connection OK.');\n $this->line(' Model responded: ' . $ping['model']);\n $this->line(' Content: ' . $ping['content']);\n $this->line(' Usage: ' . json_encode($ping['usage']));\n\n $sessionId = $this->option('session');\n\n if (!$sessionId) {\n $this->comment('No --session given, skipping summary generation test. Example: php artisan deepseek:test --session=42');\n return self::SUCCESS;\n }\n\n $this->info(\"Step 2: Generating pre/post summaries for session #{$sessionId}...\");\n\n $session = CoachingSession::with(['client', 'coach', 'recording'])->find($sessionId);\n\n if (!$session) {\n $this->error(\"Session #{$sessionId} not found.\");\n return self::FAILURE;\n }\n\n $preRecording = $insightService->generatePreSessionSummary($session, true);\n $this->line('');\n $this->info('--- pre_session_summary ---');\n $this->line((string) $preRecording->pre_session_summary);\n $this->line('');\n $this->info('--- personality_insights ---');\n $this->line(json_encode($preRecording->personality_insights, JSON_PRETTY_PRINT));\n\n $postRecording = $insightService->generatePostSessionSummary($session->fresh(['client', 'coach', 'recording']), true);\n $this->line('');\n $this->info('--- post_session_summary ---');\n $this->line((string) $postRecording->post_session_summary);\n $this->line('');\n $this->info('--- next_actions ---');\n $this->line(json_encode($postRecording->next_actions, JSON_PRETTY_PRINT));\n $this->line('');\n $this->info('--- key_topics ---');\n $this->line(json_encode($postRecording->key_topics, JSON_PRETTY_PRINT));\n\n $this->line('');\n $this->info('Done. Check storage/logs/laravel.log for any \"DeepSeek API\" warnings — if you see none, both summaries came from the AI path, not the fallback.');\n\n return self::SUCCESS;\n }\n}"}}}}