feat(agent): add agent management UI, skills/tools/triggers, and issue assignment

- Complete agents management page with create dialog, runtime device selector,
  skills/tools/triggers/tasks tabs, and agent detail view
- Add AssigneePicker to issue detail page for assigning to members or agents
- Extend agent types with description, skills, tools, triggers, RuntimeDevice
- Add SDK methods for agent CRUD and task listing
- Add migration 002 for agent config columns (skills, tools, triggers)
- Update seed data with realistic agent configurations
- Use auth context as single source of truth for agents (fixes state sync)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jiayuan Zhang 2026-03-23 18:29:39 +08:00
parent 88ca7848b5
commit b4303f9bec
10 changed files with 1415 additions and 122 deletions

View file

@ -7,6 +7,9 @@ import type {
CreateMemberRequest,
UpdateMemberRequest,
Agent,
CreateAgentRequest,
UpdateAgentRequest,
AgentTask,
InboxItem,
Comment,
Workspace,
@ -151,6 +154,28 @@ export class ApiClient {
return this.fetch(`/api/agents/${id}`);
}
async createAgent(data: CreateAgentRequest): Promise<Agent> {
return this.fetch("/api/agents", {
method: "POST",
body: JSON.stringify(data),
});
}
async updateAgent(id: string, data: UpdateAgentRequest): Promise<Agent> {
return this.fetch(`/api/agents/${id}`, {
method: "PUT",
body: JSON.stringify(data),
});
}
async deleteAgent(id: string): Promise<void> {
await this.fetch(`/api/agents/${id}`, { method: "DELETE" });
}
async listAgentTasks(agentId: string): Promise<AgentTask[]> {
return this.fetch(`/api/agents/${agentId}/tasks`);
}
// Inbox
async listInbox(): Promise<InboxItem[]> {
return this.fetch("/api/inbox");