Files
hive/backend/app/models/agent_role.py
anthonyrawlins 1e81daaf18
Some checks failed
Frontend Tests / unit-tests (push) Has been cancelled
Frontend Tests / e2e-tests (push) Has been cancelled
Fix frontend URLs for production deployment and resolve database issues
- Update API base URL from localhost to https://api.hive.home.deepblack.cloud
- Update WebSocket URL to https://hive.home.deepblack.cloud for proper TLS routing
- Remove metadata field from Project model to fix SQLAlchemy conflict
- Remove index from JSON expertise column in AgentRole to fix PostgreSQL indexing
- Update push script to use local registry instead of Docker Hub
- Add Gitea repository support and monitoring endpoints

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-28 09:16:22 +10:00

69 lines
3.5 KiB
Python

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) # 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
}