WIP: Save agent roles integration work before CHORUS rebrand
- Agent roles and coordination features - Chat API integration testing - New configuration and workspace management 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
164
repository/interface.go
Normal file
164
repository/interface.go
Normal file
@@ -0,0 +1,164 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
)
|
||||
|
||||
// TaskProvider defines the interface for task management systems (GitHub, Gitea, etc.)
|
||||
type TaskProvider interface {
|
||||
// Task lifecycle management
|
||||
ListAvailableTasks() ([]*Task, error)
|
||||
ClaimTask(issueNumber int64, agentID string) (*Task, error)
|
||||
CompleteTask(issueNumber int64, agentID string, results map[string]interface{}) error
|
||||
|
||||
// Task metadata
|
||||
GetTask(issueNumber int64) (*Task, error)
|
||||
|
||||
// Configuration
|
||||
GetConfig() *Config
|
||||
}
|
||||
|
||||
// Task represents a unified task interface across different providers
|
||||
type Task struct {
|
||||
// Basic task information
|
||||
ID int64 `json:"id"`
|
||||
Number int64 `json:"number"`
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
State string `json:"state"` // open, closed
|
||||
Provider string `json:"provider"` // github, gitea
|
||||
Repository string `json:"repository"` // owner/repo
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
|
||||
// Assignment information
|
||||
Assignee string `json:"assignee,omitempty"`
|
||||
Labels []string `json:"labels"`
|
||||
|
||||
// Bzzz-specific metadata
|
||||
TaskType string `json:"task_type"`
|
||||
Priority int `json:"priority"`
|
||||
Requirements []string `json:"requirements"`
|
||||
Deliverables []string `json:"deliverables"`
|
||||
Context map[string]interface{} `json:"context"`
|
||||
RequiredRole string `json:"required_role"`
|
||||
RequiredExpertise []string `json:"required_expertise"`
|
||||
|
||||
// Role-based assignment hints
|
||||
PreferredAgents []string `json:"preferred_agents,omitempty"`
|
||||
ExcludedAgents []string `json:"excluded_agents,omitempty"`
|
||||
CollaborationMode string `json:"collaboration_mode,omitempty"` // solo, pair, team
|
||||
}
|
||||
|
||||
// Config represents unified configuration for task providers
|
||||
type Config struct {
|
||||
// Provider type
|
||||
Provider string `json:"provider"` // "github" or "gitea"
|
||||
|
||||
// Connection details
|
||||
BaseURL string `json:"base_url"`
|
||||
AccessToken string `json:"access_token"`
|
||||
Owner string `json:"owner"`
|
||||
Repository string `json:"repository"`
|
||||
|
||||
// Task management settings
|
||||
TaskLabel string `json:"task_label"`
|
||||
InProgressLabel string `json:"in_progress_label"`
|
||||
CompletedLabel string `json:"completed_label"`
|
||||
Assignee string `json:"assignee"`
|
||||
|
||||
// Branch management
|
||||
BaseBranch string `json:"base_branch"`
|
||||
BranchPrefix string `json:"branch_prefix"`
|
||||
}
|
||||
|
||||
// TaskFilter represents criteria for filtering tasks
|
||||
type TaskFilter struct {
|
||||
// Basic filters
|
||||
State string `json:"state,omitempty"` // open, closed, all
|
||||
Labels []string `json:"labels,omitempty"` // Must have these labels
|
||||
Assignee string `json:"assignee,omitempty"` // Assigned to specific user
|
||||
|
||||
// Role-based filters
|
||||
RequiredRole string `json:"required_role,omitempty"`
|
||||
RequiredExpertise []string `json:"required_expertise,omitempty"`
|
||||
|
||||
// Priority filters
|
||||
MinPriority int `json:"min_priority,omitempty"`
|
||||
MaxPriority int `json:"max_priority,omitempty"`
|
||||
|
||||
// Task type filters
|
||||
TaskTypes []string `json:"task_types,omitempty"`
|
||||
|
||||
// Pagination
|
||||
Page int `json:"page,omitempty"`
|
||||
PerPage int `json:"per_page,omitempty"`
|
||||
}
|
||||
|
||||
// AssignmentRequest represents a task assignment request
|
||||
type AssignmentRequest struct {
|
||||
TaskNumber int64 `json:"task_number"`
|
||||
AgentID string `json:"agent_id"`
|
||||
AgentRole string `json:"agent_role,omitempty"`
|
||||
Reason string `json:"reason,omitempty"`
|
||||
}
|
||||
|
||||
// CompletionResult represents task completion information
|
||||
type CompletionResult struct {
|
||||
TaskNumber int64 `json:"task_number"`
|
||||
AgentID string `json:"agent_id"`
|
||||
Status string `json:"status"` // success, failed, partial
|
||||
Results map[string]interface{} `json:"results"`
|
||||
ErrorMessage string `json:"error_message,omitempty"`
|
||||
PullRequestURL string `json:"pull_request_url,omitempty"`
|
||||
BranchName string `json:"branch_name,omitempty"`
|
||||
CommitSHA string `json:"commit_sha,omitempty"`
|
||||
}
|
||||
|
||||
// ProviderFactory creates task providers based on configuration
|
||||
type ProviderFactory interface {
|
||||
CreateProvider(ctx context.Context, config *Config) (TaskProvider, error)
|
||||
SupportedProviders() []string
|
||||
}
|
||||
|
||||
// TaskMatcher defines interface for role-based task assignment
|
||||
type TaskMatcher interface {
|
||||
// Match tasks to agent roles and expertise
|
||||
MatchTasksToRole(tasks []*Task, role string, expertise []string) ([]*Task, error)
|
||||
|
||||
// Score task suitability for an agent
|
||||
ScoreTaskForAgent(task *Task, agentRole string, expertise []string) float64
|
||||
|
||||
// Get recommended agents for a task
|
||||
GetRecommendedAgents(task *Task, availableAgents []AgentInfo) ([]AgentInfo, error)
|
||||
}
|
||||
|
||||
// AgentInfo represents information about an available agent
|
||||
type AgentInfo struct {
|
||||
ID string `json:"id"`
|
||||
Role string `json:"role"`
|
||||
Expertise []string `json:"expertise"`
|
||||
CurrentTasks int `json:"current_tasks"`
|
||||
MaxTasks int `json:"max_tasks"`
|
||||
Status string `json:"status"`
|
||||
LastSeen time.Time `json:"last_seen"`
|
||||
Performance float64 `json:"performance"` // Performance score 0-1
|
||||
Availability float64 `json:"availability"` // Availability score 0-1
|
||||
}
|
||||
|
||||
// TaskEvent represents events that can trigger actions
|
||||
type TaskEvent struct {
|
||||
Type string `json:"type"` // created, updated, assigned, completed, commented
|
||||
TaskNumber int64 `json:"task_number"`
|
||||
Repository string `json:"repository"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Actor string `json:"actor"` // User who triggered the event
|
||||
Data map[string]interface{} `json:"data"`
|
||||
}
|
||||
|
||||
// WebhookHandler defines interface for handling repository webhooks
|
||||
type WebhookHandler interface {
|
||||
HandleWebhook(payload []byte, eventType string) (*TaskEvent, error)
|
||||
SupportedEvents() []string
|
||||
}
|
||||
Reference in New Issue
Block a user