feat: add agent dropdown for task assignment

- Replace assignee text input with select dropdown
- Populate dropdown with agents from /api/agents endpoint
- Add styling to match existing form elements
- Improves UX by preventing typos and showing available agents
This commit is contained in:
2026-03-03 16:25:12 -08:00
parent 1804aa664b
commit f907a72530
3 changed files with 59 additions and 1 deletions

View File

@@ -270,3 +270,32 @@ ws.onmessage = (event) => {
loadTasks(); loadTasks();
} }
}; };
// Populate agent dropdown
async function populateAgentDropdown() {
try {
const res = await fetch('/api/agents');
const agents = await res.json();
const select = document.getElementById('assignee');
if (!select) return;
// Clear existing options except the first placeholder
select.innerHTML = '<option value="">Select agent...</option>';
// Add agent options
agents.forEach(agent => {
const option = document.createElement('option');
option.value = agent.name;
option.textContent = agent.name;
select.appendChild(option);
});
} catch (err) {
console.error('Failed to load agents for dropdown:', err);
}
}
// Populate dropdown on page load
document.addEventListener('DOMContentLoaded', () => {
populateAgentDropdown();
});

View File

@@ -30,7 +30,9 @@
<h3>Create Task</h3> <h3>Create Task</h3>
<form id="task-form"> <form id="task-form">
<input id="title" name="title" placeholder="Task title" required /> <input id="title" name="title" placeholder="Task title" required />
<input id="assignee" name="assignee" placeholder="Assignee agent" /> <select id="assignee" name="assignee">
<option value="">Select agent...</option>
</select>
<select id="priority" name="priority"> <select id="priority" name="priority">
<option>Low</option> <option>Low</option>
<option selected>Medium</option> <option selected>Medium</option>

View File

@@ -529,3 +529,30 @@ body {
max-height: none; max-height: none;
} }
} }
/* Agent Dropdown Styling */
#task-form select {
width: 100%;
padding: 0.75rem;
border: 1px solid var(--border);
border-radius: 8px;
font-size: 1rem;
background: var(--bg);
color: var(--fg);
cursor: pointer;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
#task-form select:hover {
border-color: var(--primary);
}
#task-form select:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
}
#task-form select option {
padding: 0.5rem;
}