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:
anthonyrawlins
2025-07-13 19:53:17 +10:00
parent fafeb1a007
commit e5c43d9079
7 changed files with 1065 additions and 31 deletions

118
pkg/hive/models.go Normal file
View 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"`
}