feat: Replace capability broadcasting with availability broadcasting
- Add availability broadcasting every 30s showing real working status - Replace constant capability broadcasts with change-based system - Implement persistent capability storage in ~/.config/bzzz/ - Add SimpleTaskTracker for real task status monitoring - Only broadcast capabilities on startup or when models/capabilities change - Add proper Hive API URL configuration and integration - Fix capability change detection with proper comparison logic This eliminates P2P mesh spam and provides accurate node availability. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
118
pkg/hive/models.go
Normal file
118
pkg/hive/models.go
Normal file
@@ -0,0 +1,118 @@
|
||||
package hive
|
||||
|
||||
import "time"
|
||||
|
||||
// Project represents a project managed by the Hive system
|
||||
type Project struct {
|
||||
ID int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
Status string `json:"status"`
|
||||
GitURL string `json:"git_url"`
|
||||
Owner string `json:"owner"`
|
||||
Repository string `json:"repository"`
|
||||
Branch string `json:"branch"`
|
||||
BzzzEnabled bool `json:"bzzz_enabled"`
|
||||
ReadyToClaim bool `json:"ready_to_claim"`
|
||||
PrivateRepo bool `json:"private_repo"`
|
||||
GitHubTokenRequired bool `json:"github_token_required"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
Metadata map[string]interface{} `json:"metadata,omitempty"`
|
||||
}
|
||||
|
||||
// Task represents a task (GitHub issue) from the Hive system
|
||||
type Task struct {
|
||||
ID int `json:"id"`
|
||||
ProjectID int `json:"project_id"`
|
||||
ProjectName string `json:"project_name"`
|
||||
GitURL string `json:"git_url"`
|
||||
Owner string `json:"owner"`
|
||||
Repository string `json:"repository"`
|
||||
Branch string `json:"branch"`
|
||||
|
||||
// GitHub issue fields
|
||||
IssueNumber int `json:"issue_number"`
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
State string `json:"state"`
|
||||
Assignee string `json:"assignee,omitempty"`
|
||||
|
||||
// Task metadata
|
||||
TaskType string `json:"task_type"`
|
||||
Priority int `json:"priority"`
|
||||
Labels []string `json:"labels"`
|
||||
Requirements []string `json:"requirements,omitempty"`
|
||||
Deliverables []string `json:"deliverables,omitempty"`
|
||||
Context map[string]interface{} `json:"context,omitempty"`
|
||||
|
||||
// Timestamps
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// TaskClaim represents a task claim in the Hive system
|
||||
type TaskClaim struct {
|
||||
ID int `json:"id"`
|
||||
ProjectID int `json:"project_id"`
|
||||
TaskID int `json:"task_id"`
|
||||
AgentID string `json:"agent_id"`
|
||||
Status string `json:"status"` // claimed, in_progress, completed, failed
|
||||
ClaimedAt time.Time `json:"claimed_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
Results map[string]interface{} `json:"results,omitempty"`
|
||||
}
|
||||
|
||||
// ProjectActivationRequest represents a request to activate/deactivate a project
|
||||
type ProjectActivationRequest struct {
|
||||
BzzzEnabled bool `json:"bzzz_enabled"`
|
||||
ReadyToClaim bool `json:"ready_to_claim"`
|
||||
}
|
||||
|
||||
// ProjectRegistrationRequest represents a request to register a new project
|
||||
type ProjectRegistrationRequest struct {
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
GitURL string `json:"git_url"`
|
||||
PrivateRepo bool `json:"private_repo"`
|
||||
BzzzEnabled bool `json:"bzzz_enabled"`
|
||||
AutoActivate bool `json:"auto_activate"`
|
||||
}
|
||||
|
||||
// AgentCapability represents an agent's capabilities for task matching
|
||||
type AgentCapability struct {
|
||||
AgentID string `json:"agent_id"`
|
||||
NodeID string `json:"node_id"`
|
||||
Capabilities []string `json:"capabilities"`
|
||||
Models []string `json:"models"`
|
||||
Status string `json:"status"`
|
||||
LastSeen time.Time `json:"last_seen"`
|
||||
}
|
||||
|
||||
// CoordinationEvent represents a P2P coordination event
|
||||
type CoordinationEvent struct {
|
||||
EventID string `json:"event_id"`
|
||||
ProjectID int `json:"project_id"`
|
||||
TaskID int `json:"task_id"`
|
||||
EventType string `json:"event_type"` // task_claimed, plan_proposed, escalated, completed
|
||||
AgentID string `json:"agent_id"`
|
||||
Message string `json:"message"`
|
||||
Context map[string]interface{} `json:"context,omitempty"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
}
|
||||
|
||||
// ErrorResponse represents an error response from the Hive API
|
||||
type ErrorResponse struct {
|
||||
Error string `json:"error"`
|
||||
Message string `json:"message"`
|
||||
Code string `json:"code,omitempty"`
|
||||
}
|
||||
|
||||
// HealthStatus represents the health status of the Hive system
|
||||
type HealthStatus struct {
|
||||
Status string `json:"status"`
|
||||
Version string `json:"version"`
|
||||
Database string `json:"database"`
|
||||
Uptime string `json:"uptime"`
|
||||
CheckedAt time.Time `json:"checked_at"`
|
||||
}
|
||||
Reference in New Issue
Block a user