Add agent role management system for Bees-AgenticWorkers integration
Backend: - Database migration for agent role fields and predefined roles - AgentRole and AgentCollaboration models - Updated Agent model with role-based fields Frontend: - AgentRoleSelector component for role assignment - CollaborationDashboard for monitoring agent interactions - AgentManagement interface with role analytics 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from . import agent
|
||||
from . import agent_role
|
||||
from . import project
|
||||
from . import task
|
||||
from . import sqlalchemy_models
|
||||
@@ -1,4 +1,4 @@
|
||||
from sqlalchemy import Column, Integer, String, DateTime, JSON
|
||||
from sqlalchemy import Column, Integer, String, DateTime, JSON, Text
|
||||
from sqlalchemy.sql import func
|
||||
from sqlalchemy.orm import relationship
|
||||
from ..core.database import Base
|
||||
@@ -24,6 +24,14 @@ class Agent(Base):
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
last_seen = Column(DateTime(timezone=True), nullable=True)
|
||||
|
||||
# Role-based collaboration fields
|
||||
role = Column(String, nullable=True) # Role from Bees-AgenticWorkers
|
||||
system_prompt = Column(Text, nullable=True) # Role-specific system prompt
|
||||
reports_to = Column(JSON, nullable=True) # Array of roles this agent reports to
|
||||
expertise = Column(JSON, nullable=True) # Array of expertise areas
|
||||
deliverables = Column(JSON, nullable=True) # Array of deliverables
|
||||
collaboration_settings = Column(JSON, nullable=True) # Collaboration preferences
|
||||
|
||||
# Relationships
|
||||
tasks = relationship("Task", back_populates="assigned_agent")
|
||||
|
||||
@@ -45,5 +53,13 @@ class Agent(Base):
|
||||
"performance_targets": self.performance_targets,
|
||||
"created_at": self.created_at.isoformat() if self.created_at else None,
|
||||
"updated_at": self.updated_at.isoformat() if self.updated_at else None,
|
||||
"last_seen": self.last_seen.isoformat() if self.last_seen else None
|
||||
"last_seen": self.last_seen.isoformat() if self.last_seen else None,
|
||||
|
||||
# Role-based fields
|
||||
"role": self.role,
|
||||
"system_prompt": self.system_prompt,
|
||||
"reports_to": self.reports_to,
|
||||
"expertise": self.expertise,
|
||||
"deliverables": self.deliverables,
|
||||
"collaboration_settings": self.collaboration_settings
|
||||
}
|
||||
69
backend/app/models/agent_role.py
Normal file
69
backend/app/models/agent_role.py
Normal file
@@ -0,0 +1,69 @@
|
||||
from sqlalchemy import Column, String, DateTime, JSON, Text
|
||||
from sqlalchemy.sql import func
|
||||
from sqlalchemy.orm import relationship
|
||||
from ..core.database import Base
|
||||
|
||||
class AgentRole(Base):
|
||||
__tablename__ = "agent_roles"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
name = Column(String, unique=True, nullable=False, index=True) # Role identifier (e.g., "senior_software_architect")
|
||||
display_name = Column(String, nullable=False) # Human-readable name
|
||||
system_prompt = Column(Text, nullable=False) # Role-specific system prompt
|
||||
reports_to = Column(JSON, nullable=True) # Array of roles this role reports to
|
||||
expertise = Column(JSON, nullable=True, index=True) # Array of expertise areas
|
||||
deliverables = Column(JSON, nullable=True) # Array of deliverables
|
||||
capabilities = Column(JSON, nullable=True) # Array of capabilities
|
||||
collaboration_defaults = Column(JSON, nullable=True) # Default collaboration settings
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
def to_dict(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"name": self.name,
|
||||
"display_name": self.display_name,
|
||||
"system_prompt": self.system_prompt,
|
||||
"reports_to": self.reports_to,
|
||||
"expertise": self.expertise,
|
||||
"deliverables": self.deliverables,
|
||||
"capabilities": self.capabilities,
|
||||
"collaboration_defaults": self.collaboration_defaults,
|
||||
"created_at": self.created_at.isoformat() if self.created_at else None,
|
||||
"updated_at": self.updated_at.isoformat() if self.updated_at else None
|
||||
}
|
||||
|
||||
|
||||
class AgentCollaboration(Base):
|
||||
__tablename__ = "agent_collaborations"
|
||||
|
||||
id = Column(String, primary_key=True, index=True)
|
||||
from_agent_id = Column(String, nullable=False, index=True) # References agents(id)
|
||||
to_agent_id = Column(String, nullable=True, index=True) # References agents(id), can be null for broadcasts
|
||||
message_type = Column(String, nullable=False) # Type of collaboration message
|
||||
thread_id = Column(String, nullable=True, index=True) # Conversation thread ID
|
||||
project_id = Column(String, nullable=True, index=True) # Associated project
|
||||
message_data = Column(JSON, nullable=True) # Original message data
|
||||
response_data = Column(JSON, nullable=True) # Response data
|
||||
status = Column(String, default="pending", index=True) # pending, responded, escalated, resolved
|
||||
priority = Column(String, default="medium", index=True) # low, medium, high, urgent
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
responded_at = Column(DateTime(timezone=True), nullable=True)
|
||||
resolved_at = Column(DateTime(timezone=True), nullable=True)
|
||||
|
||||
def to_dict(self):
|
||||
return {
|
||||
"id": self.id,
|
||||
"from_agent_id": self.from_agent_id,
|
||||
"to_agent_id": self.to_agent_id,
|
||||
"message_type": self.message_type,
|
||||
"thread_id": self.thread_id,
|
||||
"project_id": self.project_id,
|
||||
"message_data": self.message_data,
|
||||
"response_data": self.response_data,
|
||||
"status": self.status,
|
||||
"priority": self.priority,
|
||||
"created_at": self.created_at.isoformat() if self.created_at else None,
|
||||
"responded_at": self.responded_at.isoformat() if self.responded_at else None,
|
||||
"resolved_at": self.resolved_at.isoformat() if self.resolved_at else None
|
||||
}
|
||||
171
backend/migrations/004_add_agent_roles.sql
Normal file
171
backend/migrations/004_add_agent_roles.sql
Normal file
@@ -0,0 +1,171 @@
|
||||
-- Migration to add role-based collaboration fields to agents table
|
||||
|
||||
-- Add role-based fields to agents table
|
||||
ALTER TABLE agents ADD COLUMN role VARCHAR(255);
|
||||
ALTER TABLE agents ADD COLUMN system_prompt TEXT;
|
||||
ALTER TABLE agents ADD COLUMN reports_to JSONB; -- Array of roles this agent reports to
|
||||
ALTER TABLE agents ADD COLUMN expertise JSONB; -- Array of expertise areas
|
||||
ALTER TABLE agents ADD COLUMN deliverables JSONB; -- Array of deliverables this agent produces
|
||||
ALTER TABLE agents ADD COLUMN collaboration_settings JSONB; -- Collaboration preferences
|
||||
|
||||
-- Add indexes for role-based queries
|
||||
CREATE INDEX idx_agents_role ON agents(role);
|
||||
CREATE INDEX idx_agents_expertise ON agents USING GIN(expertise);
|
||||
CREATE INDEX idx_agents_reports_to ON agents USING GIN(reports_to);
|
||||
|
||||
-- Create agent_roles table for predefined role definitions
|
||||
CREATE TABLE agent_roles (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
name VARCHAR(255) UNIQUE NOT NULL,
|
||||
display_name VARCHAR(255) NOT NULL,
|
||||
system_prompt TEXT NOT NULL,
|
||||
reports_to JSONB, -- Array of roles this role reports to
|
||||
expertise JSONB, -- Array of expertise areas
|
||||
deliverables JSONB, -- Array of deliverables
|
||||
capabilities JSONB, -- Array of capabilities
|
||||
collaboration_defaults JSONB, -- Default collaboration settings
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- Create index for agent_roles
|
||||
CREATE INDEX idx_agent_roles_name ON agent_roles(name);
|
||||
CREATE INDEX idx_agent_roles_expertise ON agent_roles USING GIN(expertise);
|
||||
|
||||
-- Insert predefined roles from Bees-AgenticWorkers.md
|
||||
INSERT INTO agent_roles (name, display_name, system_prompt, reports_to, expertise, deliverables, capabilities, collaboration_defaults) VALUES
|
||||
(
|
||||
'senior_software_architect',
|
||||
'Senior Software Architect',
|
||||
'You are the **Senior Software Architect**. You define the system''s overall structure, select tech stacks, and ensure long-term maintainability.
|
||||
|
||||
* **Responsibilities:** Draft high-level architecture diagrams, define API contracts, set coding standards, mentor engineering leads.
|
||||
* **Expertise:** Deep experience in multiple programming paradigms, distributed systems, security models, and cloud architectures.
|
||||
* **Reports To:** Product Owner / Technical Director.
|
||||
* **Deliverables:** Architecture blueprints, tech stack decisions, integration strategies, and review sign-offs on major design changes.',
|
||||
'["product_owner", "technical_director"]'::jsonb,
|
||||
'["architecture", "distributed_systems", "security", "cloud_architectures", "api_design"]'::jsonb,
|
||||
'["architecture_blueprints", "tech_stack_decisions", "integration_strategies", "design_reviews"]'::jsonb,
|
||||
'["task-coordination", "meta-discussion", "architecture", "code-review", "mentoring"]'::jsonb,
|
||||
'{
|
||||
"preferred_message_types": ["coordination_request", "meta_discussion", "escalation_trigger"],
|
||||
"auto_subscribe_to_roles": ["lead_designer", "security_expert", "systems_engineer"],
|
||||
"auto_subscribe_to_expertise": ["architecture", "security", "infrastructure"],
|
||||
"response_timeout_seconds": 300,
|
||||
"max_collaboration_depth": 5,
|
||||
"escalation_threshold": 3
|
||||
}'::jsonb
|
||||
),
|
||||
(
|
||||
'lead_designer',
|
||||
'Lead Designer',
|
||||
'You are the **Lead Designer**. You guide the creative vision and maintain design cohesion across the product.
|
||||
|
||||
* **Responsibilities:** Oversee UX flow, wireframes, and feature design; ensure consistency of theme and style; mediate between product vision and technical constraints.
|
||||
* **Expertise:** UI/UX principles, accessibility, information architecture, Figma/Sketch proficiency.
|
||||
* **Reports To:** Product Owner.
|
||||
* **Deliverables:** Style guides, wireframes, feature specs, and iterative design documentation.',
|
||||
'["product_owner"]'::jsonb,
|
||||
'["ui_ux", "accessibility", "information_architecture", "design_systems", "user_research"]'::jsonb,
|
||||
'["style_guides", "wireframes", "feature_specs", "design_documentation"]'::jsonb,
|
||||
'["task-coordination", "meta-discussion", "design", "user_experience"]'::jsonb,
|
||||
'{
|
||||
"preferred_message_types": ["task_help_request", "coordination_request", "meta_discussion"],
|
||||
"auto_subscribe_to_roles": ["ui_ux_designer", "frontend_developer"],
|
||||
"auto_subscribe_to_expertise": ["design", "frontend", "user_experience"],
|
||||
"response_timeout_seconds": 180,
|
||||
"max_collaboration_depth": 3,
|
||||
"escalation_threshold": 2
|
||||
}'::jsonb
|
||||
),
|
||||
(
|
||||
'security_expert',
|
||||
'Security Expert',
|
||||
'You are the **Security Expert**. You ensure the system is hardened against vulnerabilities.
|
||||
|
||||
* **Responsibilities:** Conduct threat modeling, penetration tests, code reviews for security flaws, and define access control policies.
|
||||
* **Expertise:** Cybersecurity frameworks (OWASP, NIST), encryption, key management, zero-trust systems.
|
||||
* **Reports To:** Senior Software Architect.
|
||||
* **Deliverables:** Security audits, vulnerability reports, risk mitigation plans, compliance documentation.',
|
||||
'["senior_software_architect"]'::jsonb,
|
||||
'["cybersecurity", "owasp", "nist", "encryption", "key_management", "zero_trust", "penetration_testing"]'::jsonb,
|
||||
'["security_audits", "vulnerability_reports", "risk_mitigation_plans", "compliance_documentation"]'::jsonb,
|
||||
'["task-coordination", "meta-discussion", "security-analysis", "code-review", "threat-modeling"]'::jsonb,
|
||||
'{
|
||||
"preferred_message_types": ["dependency_alert", "task_help_request", "escalation_trigger"],
|
||||
"auto_subscribe_to_roles": ["backend_developer", "devops_engineer", "senior_software_architect"],
|
||||
"auto_subscribe_to_expertise": ["security", "backend", "infrastructure"],
|
||||
"response_timeout_seconds": 120,
|
||||
"max_collaboration_depth": 4,
|
||||
"escalation_threshold": 1
|
||||
}'::jsonb
|
||||
),
|
||||
(
|
||||
'frontend_developer',
|
||||
'Frontend Developer',
|
||||
'You are the **Frontend Developer**. You turn designs into interactive interfaces.
|
||||
|
||||
* **Responsibilities:** Build UI components, optimize performance, ensure cross-browser/device compatibility, and integrate frontend with backend APIs.
|
||||
* **Expertise:** HTML, CSS, JavaScript/TypeScript, React/Vue/Angular, accessibility standards.
|
||||
* **Reports To:** Frontend Lead or Senior Architect.
|
||||
* **Deliverables:** Functional UI screens, reusable components, and documented frontend code.',
|
||||
'["frontend_lead", "senior_software_architect"]'::jsonb,
|
||||
'["html", "css", "javascript", "typescript", "react", "vue", "angular", "accessibility"]'::jsonb,
|
||||
'["ui_screens", "reusable_components", "frontend_code", "documentation"]'::jsonb,
|
||||
'["task-coordination", "meta-discussion", "frontend", "ui_development", "component_design"]'::jsonb,
|
||||
'{
|
||||
"preferred_message_types": ["task_help_request", "coordination_request", "task_help_response"],
|
||||
"auto_subscribe_to_roles": ["ui_ux_designer", "backend_developer", "lead_designer"],
|
||||
"auto_subscribe_to_expertise": ["design", "backend", "api_integration"],
|
||||
"response_timeout_seconds": 180,
|
||||
"max_collaboration_depth": 3,
|
||||
"escalation_threshold": 2
|
||||
}'::jsonb
|
||||
),
|
||||
(
|
||||
'backend_developer',
|
||||
'Backend Developer',
|
||||
'You are the **Backend Developer**. You create APIs, logic, and server-side integrations.
|
||||
|
||||
* **Responsibilities:** Implement core logic, manage data pipelines, enforce security, and support scaling strategies.
|
||||
* **Expertise:** Server frameworks, REST/GraphQL APIs, authentication, caching, microservices.
|
||||
* **Reports To:** Backend Lead or Senior Architect.
|
||||
* **Deliverables:** API endpoints, backend services, unit tests, and deployment-ready server code.',
|
||||
'["backend_lead", "senior_software_architect"]'::jsonb,
|
||||
'["server_frameworks", "rest_api", "graphql", "authentication", "caching", "microservices", "databases"]'::jsonb,
|
||||
'["api_endpoints", "backend_services", "unit_tests", "server_code"]'::jsonb,
|
||||
'["task-coordination", "meta-discussion", "backend", "api_development", "database_design"]'::jsonb,
|
||||
'{
|
||||
"preferred_message_types": ["task_help_request", "coordination_request", "dependency_alert"],
|
||||
"auto_subscribe_to_roles": ["database_engineer", "frontend_developer", "security_expert"],
|
||||
"auto_subscribe_to_expertise": ["database", "frontend", "security"],
|
||||
"response_timeout_seconds": 200,
|
||||
"max_collaboration_depth": 4,
|
||||
"escalation_threshold": 2
|
||||
}'::jsonb
|
||||
);
|
||||
|
||||
-- Create agent_collaborations table to track collaboration history
|
||||
CREATE TABLE agent_collaborations (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
from_agent_id UUID REFERENCES agents(id),
|
||||
to_agent_id UUID REFERENCES agents(id),
|
||||
message_type VARCHAR(100) NOT NULL,
|
||||
thread_id UUID,
|
||||
project_id INTEGER REFERENCES projects(id),
|
||||
message_data JSONB,
|
||||
response_data JSONB,
|
||||
status VARCHAR(50) DEFAULT 'pending', -- pending, responded, escalated, resolved
|
||||
priority VARCHAR(20) DEFAULT 'medium', -- low, medium, high, urgent
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
responded_at TIMESTAMP,
|
||||
resolved_at TIMESTAMP
|
||||
);
|
||||
|
||||
-- Indexes for collaboration tracking
|
||||
CREATE INDEX idx_agent_collaborations_from_agent ON agent_collaborations(from_agent_id);
|
||||
CREATE INDEX idx_agent_collaborations_to_agent ON agent_collaborations(to_agent_id);
|
||||
CREATE INDEX idx_agent_collaborations_thread ON agent_collaborations(thread_id);
|
||||
CREATE INDEX idx_agent_collaborations_project ON agent_collaborations(project_id);
|
||||
CREATE INDEX idx_agent_collaborations_status ON agent_collaborations(status);
|
||||
CREATE INDEX idx_agent_collaborations_priority ON agent_collaborations(priority);
|
||||
Reference in New Issue
Block a user