function listProjects() { apiGet('/project/list') .then(data => { const select = document.getElementById('project-select'); select.innerHTML = ''; Object.keys(data).forEach(project => { const option = document.createElement('option'); option.value = project; option.text = project; select.appendChild(option); }); }) .catch(err => console.error(err)); } function loadProjectDetails() { const project = document.getElementById('project-select').value; if (!project) return; apiGet(`/project/${project}/latest`) .then(data => { const details = document.getElementById('project-details'); const info = document.getElementById('project-info'); details.classList.remove('d-none'); let html = `

Version: ${data.version_number}

`; html += `

Published: ${data.published ? '✅ Yes' : '❌ No'}

`; html += `
Intents:
`; info.innerHTML = html; if (data.published) { document.querySelectorAll('#project-info input, #project-info button').forEach(el => { el.disabled = true; }); } }) .catch(err => console.error(err)); } function addIntent() { const project = document.getElementById('project-select').value; const intentName = prompt('Enter new intent name:'); if (!intentName) return; apiPost('/project/add_intent', { project_name: project, intent_name: intentName }) .then(data => { showResult('project-result', data); loadProjectDetails(); }) .catch(err => { console.error(err); alert('Failed to add intent.'); }); } function removeIntent(name) { const project = document.getElementById('project-select').value; if (!confirm(`Are you sure you want to delete intent '${name}'?`)) return; apiPost('/project/delete_intent', { project_name: project, intent_name: name }) .then(data => { showResult('project-result', data); loadProjectDetails(); }) .catch(err => { console.error(err); alert('Failed to delete intent.'); }); } function editIntent(name) { const project = document.getElementById('project-select').value; apiGet(`/project/${project}/latest`) .then(data => { const intent = data.intents.find(i => i.name === name); if (!intent) { alert('Intent not found.'); return; } document.getElementById('intent-project-name').value = project; document.getElementById('intent-name').value = intent.name; document.getElementById('intent-action').value = intent.action || ''; document.getElementById('intent-fallback').value = intent.fallback_error_message || ''; document.getElementById('intent-prompt').value = intent.humanization_prompt || ''; document.getElementById('intent-examples').value = (intent.examples || []).join(', '); document.getElementById('intent-parameters').value = JSON.stringify(intent.parameters || [], null, 2); $('#intentModal').modal('show'); }) .catch(err => console.error(err)); } function saveIntent() { const project = document.getElementById('intent-project-name').value; const name = document.getElementById('intent-name').value; const action = document.getElementById('intent-action').value; const fallback = document.getElementById('intent-fallback').value; const prompt = document.getElementById('intent-prompt').value; const examples = document.getElementById('intent-examples').value.split(',').map(e => e.trim()); let parameters = []; try { parameters = JSON.parse(document.getElementById('intent-parameters').value); } catch (e) { alert('Invalid JSON in parameters.'); return; } const intentData = { action: action, fallback_error_message: fallback, humanization_prompt: prompt, examples: examples, parameters: parameters }; apiPost('/project/update_intent', { project_name: project, intent_name: name, intent_data: intentData }) .then(data => { showResult('project-result', data); $('#intentModal').modal('hide'); loadProjectDetails(); }) .catch(err => { console.error(err); alert('Failed to save intent.'); }); } function saveProject() { alert('Save logic will be implemented here.'); } function publishProject() { alert('Publish logic will be implemented here.'); }