// AI-функции (линтер, генерация, объяснение) async function aiCheck(codeId, langId, resultId) { var code = document.getElementById(codeId).value.trim(); var lang = (document.getElementById(langId) ? document.getElementById(langId).value : '') || 'python'; var resEl = document.getElementById(resultId); if (!code) { resEl.style.display = 'block'; resEl.style.background = 'var(--bg-alt)'; resEl.textContent = 'Введите код для проверки.'; return; } var btnId = codeId === 'c-code' ? 'c-ai-btn' : 'e-ai-btn'; var btn = document.getElementById(btnId); btn.disabled = true; btn.textContent = '⏳ Проверяю...'; resEl.style.display = 'block'; resEl.style.background = 'var(--bg-alt)'; resEl.style.color = 'var(--fg)'; resEl.textContent = 'Проверяю код линтером...'; try { var data = await requestJSON(API_BASE + '/ai/check', 'POST', { language: lang, code: code }); resEl.style.background = data.ok ? '#1a3a1a' : '#3a1a1a'; resEl.style.color = data.ok ? '#8f8' : '#f88'; resEl.textContent = data.result || '(пустой ответ)'; } catch (e) { resEl.style.background = '#3a2a00'; resEl.style.color = '#ffa'; resEl.textContent = 'Ошибка: ' + e.message; } finally { btn.disabled = false; btn.textContent = '🔍 Проверить синтаксис линтером'; } } function showGenPrompt() { var el = document.getElementById('c-gen-prompt'); el.style.display = 'flex'; document.getElementById('c-gen-desc').focus(); } async function aiGenerate() { var name = (document.getElementById('c-name').value || '').trim() || 'my-func'; var lang = document.getElementById('c-lang').value || 'python'; var desc = (document.getElementById('c-gen-desc').value || '').trim(); if (!desc) { document.getElementById('c-gen-desc').focus(); return; } var btn = document.getElementById('c-gen-btn'); var resEl = document.getElementById('c-ai-result'); btn.disabled = true; btn.textContent = '⏳ Генерирую...'; resEl.style.display = 'block'; resEl.style.background = 'var(--bg-alt)'; resEl.style.color = 'var(--fg)'; resEl.textContent = 'Запрашиваю у LLM...'; try { var d = await requestJSON('/console/api/ai/ask', 'POST', { mode: 'codegen', language: lang, name: name, description: desc }); var code = (d.answer || '').replace(/^```[\w]*\n?/, '').replace(/\n?```$/, ''); document.getElementById('c-code').value = addLLMWarning(code, lang); document.getElementById('c-gen-prompt').style.display = 'none'; resEl.style.background = '#1a3a1a'; resEl.style.color = '#8f8'; resEl.textContent = 'Код сгенерирован и вставлен.'; } catch (e) { resEl.style.background = '#3a2a00'; resEl.style.color = '#ffa'; resEl.textContent = 'Ошибка: ' + e.message; } finally { btn.disabled = false; btn.textContent = '✨ Сгенерировать код LLM'; } } async function aiExplain(codeId, langId, resultId) { var code = (document.getElementById(codeId).value || '').trim(); var lang = (document.getElementById(langId) ? document.getElementById(langId).value : '') || 'python'; var resEl = document.getElementById(resultId); var btnId = codeId === 'c-code' ? 'c-exp-btn' : 'e-exp-btn'; var btn = document.getElementById(btnId); if (!code) { resEl.style.display = 'block'; resEl.style.background = 'var(--bg-alt)'; resEl.textContent = 'Введите код.'; return; } btn.disabled = true; btn.textContent = '⏳ Объясняю...'; resEl.style.display = 'block'; resEl.style.background = 'var(--bg-alt)'; resEl.style.color = 'var(--fg)'; resEl.textContent = 'Запрашиваю у LLM...'; try { var d = await requestJSON('/console/api/ai/ask', 'POST', { mode: 'explain', language: lang, code: code }); resEl.style.background = '#1a2a3a'; resEl.style.color = '#8cf'; resEl.textContent = d.answer || '(пустой ответ)'; } catch (e) { resEl.style.background = '#3a2a00'; resEl.style.color = '#ffa'; resEl.textContent = 'Ошибка: ' + e.message; } finally { btn.disabled = false; btn.textContent = '📖 LLM: Что делает?'; } }