Comprehensive documentation for coordination, messaging, discovery, and internal systems. Core Coordination Packages: - pkg/election - Democratic leader election (uptime-based, heartbeat mechanism, SLURP integration) - pkg/coordination - Meta-coordination with dependency detection (4 built-in rules) - coordinator/ - Task orchestration and assignment (AI-powered scoring) - discovery/ - mDNS peer discovery (automatic LAN detection) Messaging & P2P Infrastructure: - pubsub/ - GossipSub messaging (31 message types, role-based topics, HMMM integration) - p2p/ - libp2p networking (DHT modes, connection management, security) Monitoring & Health: - pkg/metrics - Prometheus metrics (80+ metrics across 12 categories) - pkg/health - Health monitoring (4 HTTP endpoints, enhanced checks, graceful degradation) Internal Systems: - internal/licensing - License validation (KACHING integration, cluster leases, fail-closed) - internal/hapui - Human Agent Portal UI (9 commands, HMMM wizard, UCXL browser, decision voting) - internal/backbeat - P2P operation telemetry (6 phases, beat synchronization, health reporting) Documentation Statistics (Phase 3): - 10 packages documented (~18,000 lines) - 31 PubSub message types cataloged - 80+ Prometheus metrics documented - Complete API references with examples - Integration patterns and best practices Key Features Documented: - Election: 5 triggers, candidate scoring (5 weighted components), stability windows - Coordination: AI-powered dependency detection, cross-repo sessions, escalation handling - PubSub: Topic patterns, message envelopes, SHHH redaction, Hypercore logging - Metrics: All metric types with labels, Prometheus scrape config, alert rules - Health: Liveness vs readiness, critical checks, Kubernetes integration - Licensing: Grace periods, circuit breaker, cluster lease management - HAP UI: Interactive terminal commands, HMMM composition wizard, web interface (beta) - BACKBEAT: 6-phase operation tracking, beat budget estimation, drift detection Implementation Status Marked: - ✅ Production: Election, metrics, health, licensing, pubsub, p2p, discovery, coordinator - 🔶 Beta: HAP web interface, BACKBEAT telemetry, advanced coordination - 🔷 Alpha: SLURP election scoring - ⚠️ Experimental: Meta-coordination, AI-powered dependency detection Progress: 22/62 files complete (35%) Next Phase: AI providers, SLURP system, API layer, reasoning engine 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
949 lines
27 KiB
Markdown
949 lines
27 KiB
Markdown
# Package: pkg/coordination
|
|
|
|
**Location**: `/home/tony/chorus/project-queues/active/CHORUS/pkg/coordination/`
|
|
|
|
## Overview
|
|
|
|
The `pkg/coordination` package provides **advanced cross-repository coordination primitives** for managing complex task dependencies and multi-agent collaboration in CHORUS. It includes AI-powered dependency detection, meta-coordination sessions, and automated escalation handling to enable sophisticated distributed development workflows.
|
|
|
|
## Architecture
|
|
|
|
### Coordination Layers
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────┐
|
|
│ MetaCoordinator │
|
|
│ - Session management │
|
|
│ - AI-powered coordination planning │
|
|
│ - Escalation handling │
|
|
│ - SLURP integration │
|
|
└─────────────────┬───────────────────────────────┘
|
|
│
|
|
┌─────────────────▼───────────────────────────────┐
|
|
│ DependencyDetector │
|
|
│ - Cross-repo dependency detection │
|
|
│ - Rule-based pattern matching │
|
|
│ - Relationship analysis │
|
|
└─────────────────┬───────────────────────────────┘
|
|
│
|
|
┌─────────────────▼───────────────────────────────┐
|
|
│ PubSub (HMMM Meta-Discussion) │
|
|
│ - Coordination messages │
|
|
│ - Session broadcasts │
|
|
│ - Escalation notifications │
|
|
└─────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Core Components
|
|
|
|
### MetaCoordinator
|
|
|
|
Manages advanced cross-repository coordination and multi-agent collaboration sessions.
|
|
|
|
```go
|
|
type MetaCoordinator struct {
|
|
pubsub *pubsub.PubSub
|
|
ctx context.Context
|
|
dependencyDetector *DependencyDetector
|
|
slurpIntegrator *integration.SlurpEventIntegrator
|
|
|
|
// Active coordination sessions
|
|
activeSessions map[string]*CoordinationSession
|
|
sessionLock sync.RWMutex
|
|
|
|
// Configuration
|
|
maxSessionDuration time.Duration // Default: 30 minutes
|
|
maxParticipants int // Default: 5
|
|
escalationThreshold int // Default: 10 messages
|
|
}
|
|
```
|
|
|
|
**Key Responsibilities:**
|
|
- Create and manage coordination sessions
|
|
- Generate AI-powered coordination plans
|
|
- Monitor session progress and health
|
|
- Escalate to humans when needed
|
|
- Generate SLURP events from coordination outcomes
|
|
- Integrate with HMMM for meta-discussion
|
|
|
|
### DependencyDetector
|
|
|
|
Analyzes tasks across repositories to detect relationships and dependencies.
|
|
|
|
```go
|
|
type DependencyDetector struct {
|
|
pubsub *pubsub.PubSub
|
|
ctx context.Context
|
|
knownTasks map[string]*TaskContext
|
|
dependencyRules []DependencyRule
|
|
coordinationHops int // Default: 3
|
|
}
|
|
```
|
|
|
|
**Key Responsibilities:**
|
|
- Track tasks across multiple repositories
|
|
- Apply pattern-based dependency detection rules
|
|
- Identify task relationships (API contracts, schema changes, etc.)
|
|
- Broadcast dependency alerts
|
|
- Trigger coordination sessions
|
|
|
|
### CoordinationSession
|
|
|
|
Represents an active multi-agent coordination session.
|
|
|
|
```go
|
|
type CoordinationSession struct {
|
|
SessionID string
|
|
Type string // dependency, conflict, planning
|
|
Participants map[string]*Participant
|
|
TasksInvolved []*TaskContext
|
|
Messages []CoordinationMessage
|
|
Status string // active, resolved, escalated
|
|
CreatedAt time.Time
|
|
LastActivity time.Time
|
|
Resolution string
|
|
EscalationReason string
|
|
}
|
|
```
|
|
|
|
**Session Types:**
|
|
- **dependency**: Coordinating dependent tasks across repos
|
|
- **conflict**: Resolving conflicts or competing changes
|
|
- **planning**: Joint planning for complex multi-repo features
|
|
|
|
**Session States:**
|
|
- **active**: Session in progress
|
|
- **resolved**: Consensus reached, coordination complete
|
|
- **escalated**: Requires human intervention
|
|
|
|
## Data Structures
|
|
|
|
### TaskContext
|
|
|
|
Represents a task with its repository and project context for dependency analysis.
|
|
|
|
```go
|
|
type TaskContext struct {
|
|
TaskID int
|
|
ProjectID int
|
|
Repository string
|
|
Title string
|
|
Description string
|
|
Keywords []string
|
|
AgentID string
|
|
ClaimedAt time.Time
|
|
}
|
|
```
|
|
|
|
### Participant
|
|
|
|
Represents an agent participating in a coordination session.
|
|
|
|
```go
|
|
type Participant struct {
|
|
AgentID string
|
|
PeerID string
|
|
Repository string
|
|
Capabilities []string
|
|
LastSeen time.Time
|
|
Active bool
|
|
}
|
|
```
|
|
|
|
### CoordinationMessage
|
|
|
|
A message within a coordination session.
|
|
|
|
```go
|
|
type CoordinationMessage struct {
|
|
MessageID string
|
|
FromAgentID string
|
|
FromPeerID string
|
|
Content string
|
|
MessageType string // proposal, question, agreement, concern
|
|
Timestamp time.Time
|
|
Metadata map[string]interface{}
|
|
}
|
|
```
|
|
|
|
**Message Types:**
|
|
- **proposal**: Proposed solution or approach
|
|
- **question**: Request for clarification
|
|
- **agreement**: Agreement with proposal
|
|
- **concern**: Concern or objection
|
|
|
|
### TaskDependency
|
|
|
|
Represents a detected relationship between tasks.
|
|
|
|
```go
|
|
type TaskDependency struct {
|
|
Task1 *TaskContext
|
|
Task2 *TaskContext
|
|
Relationship string // Rule name (e.g., "API_Contract")
|
|
Confidence float64 // 0.0 - 1.0
|
|
Reason string // Human-readable explanation
|
|
DetectedAt time.Time
|
|
}
|
|
```
|
|
|
|
### DependencyRule
|
|
|
|
Defines how to detect task relationships.
|
|
|
|
```go
|
|
type DependencyRule struct {
|
|
Name string
|
|
Description string
|
|
Keywords []string
|
|
Validator func(task1, task2 *TaskContext) (bool, string)
|
|
}
|
|
```
|
|
|
|
## Dependency Detection
|
|
|
|
### Built-in Detection Rules
|
|
|
|
#### 1. API Contract Rule
|
|
|
|
Detects dependencies between API definitions and implementations.
|
|
|
|
```go
|
|
{
|
|
Name: "API_Contract",
|
|
Description: "Tasks involving API contracts and implementations",
|
|
Keywords: []string{"api", "endpoint", "contract", "interface", "schema"},
|
|
Validator: func(task1, task2 *TaskContext) (bool, string) {
|
|
text1 := strings.ToLower(task1.Title + " " + task1.Description)
|
|
text2 := strings.ToLower(task2.Title + " " + task2.Description)
|
|
|
|
if (strings.Contains(text1, "api") && strings.Contains(text2, "implement")) ||
|
|
(strings.Contains(text2, "api") && strings.Contains(text1, "implement")) {
|
|
return true, "API definition and implementation dependency"
|
|
}
|
|
return false, ""
|
|
},
|
|
}
|
|
```
|
|
|
|
**Example Detection:**
|
|
- Task 1: "Define user authentication API"
|
|
- Task 2: "Implement authentication endpoint"
|
|
- **Detected**: API_Contract dependency
|
|
|
|
#### 2. Database Schema Rule
|
|
|
|
Detects schema changes affecting multiple services.
|
|
|
|
```go
|
|
{
|
|
Name: "Database_Schema",
|
|
Description: "Database schema changes affecting multiple services",
|
|
Keywords: []string{"database", "schema", "migration", "table", "model"},
|
|
Validator: func(task1, task2 *TaskContext) (bool, string) {
|
|
// Checks for database-related keywords in both tasks
|
|
// Returns true if both tasks involve database work
|
|
},
|
|
}
|
|
```
|
|
|
|
**Example Detection:**
|
|
- Task 1: "Add user preferences table"
|
|
- Task 2: "Update user service for preferences"
|
|
- **Detected**: Database_Schema dependency
|
|
|
|
#### 3. Configuration Dependency Rule
|
|
|
|
Detects configuration changes affecting multiple components.
|
|
|
|
```go
|
|
{
|
|
Name: "Configuration_Dependency",
|
|
Description: "Configuration changes affecting multiple components",
|
|
Keywords: []string{"config", "environment", "settings", "parameters"},
|
|
}
|
|
```
|
|
|
|
**Example Detection:**
|
|
- Task 1: "Add feature flag for new UI"
|
|
- Task 2: "Implement feature flag checks in backend"
|
|
- **Detected**: Configuration_Dependency
|
|
|
|
#### 4. Security Compliance Rule
|
|
|
|
Detects security changes requiring coordinated implementation.
|
|
|
|
```go
|
|
{
|
|
Name: "Security_Compliance",
|
|
Description: "Security changes requiring coordinated implementation",
|
|
Keywords: []string{"security", "auth", "permission", "token", "encrypt"},
|
|
}
|
|
```
|
|
|
|
**Example Detection:**
|
|
- Task 1: "Implement JWT token refresh"
|
|
- Task 2: "Update authentication middleware"
|
|
- **Detected**: Security_Compliance dependency
|
|
|
|
### Custom Rules
|
|
|
|
Add project-specific dependency detection:
|
|
|
|
```go
|
|
customRule := DependencyRule{
|
|
Name: "GraphQL_Schema",
|
|
Description: "GraphQL schema and resolver dependencies",
|
|
Keywords: []string{"graphql", "schema", "resolver", "query", "mutation"},
|
|
Validator: func(task1, task2 *TaskContext) (bool, string) {
|
|
text1 := strings.ToLower(task1.Title + " " + task1.Description)
|
|
text2 := strings.ToLower(task2.Title + " " + task2.Description)
|
|
|
|
hasSchema := strings.Contains(text1, "schema") || strings.Contains(text2, "schema")
|
|
hasResolver := strings.Contains(text1, "resolver") || strings.Contains(text2, "resolver")
|
|
|
|
if hasSchema && hasResolver {
|
|
return true, "GraphQL schema and resolver must be coordinated"
|
|
}
|
|
return false, ""
|
|
},
|
|
}
|
|
|
|
dependencyDetector.AddCustomRule(customRule)
|
|
```
|
|
|
|
## Coordination Flow
|
|
|
|
### 1. Task Registration and Detection
|
|
|
|
```
|
|
Task Claimed by Agent A → RegisterTask() → DependencyDetector
|
|
↓
|
|
detectDependencies()
|
|
↓
|
|
Apply all dependency rules to known tasks
|
|
↓
|
|
Dependency detected? → Yes → announceDependency()
|
|
↓ ↓
|
|
No MetaCoordinator
|
|
```
|
|
|
|
### 2. Dependency Announcement
|
|
|
|
```go
|
|
// Dependency detector announces to HMMM meta-discussion
|
|
coordMsg := map[string]interface{}{
|
|
"message_type": "dependency_detected",
|
|
"dependency": dep,
|
|
"coordination_request": "Cross-repository dependency detected...",
|
|
"agents_involved": [agentA, agentB],
|
|
"repositories": [repoA, repoB],
|
|
"hop_count": 0,
|
|
"max_hops": 3,
|
|
}
|
|
|
|
pubsub.PublishHmmmMessage(MetaDiscussion, coordMsg)
|
|
```
|
|
|
|
### 3. Session Creation
|
|
|
|
```
|
|
MetaCoordinator receives dependency_detected message
|
|
↓
|
|
handleDependencyDetection()
|
|
↓
|
|
Create CoordinationSession
|
|
↓
|
|
Add participating agents
|
|
↓
|
|
Generate AI coordination plan
|
|
↓
|
|
Broadcast plan to participants
|
|
```
|
|
|
|
### 4. AI-Powered Coordination Planning
|
|
|
|
```go
|
|
prompt := `
|
|
You are an expert AI project coordinator managing a distributed development team.
|
|
|
|
SITUATION:
|
|
- A dependency has been detected between two tasks in different repositories
|
|
- Task 1: repo1/title #42 (Agent: agent-001)
|
|
- Task 2: repo2/title #43 (Agent: agent-002)
|
|
- Relationship: API_Contract
|
|
- Reason: API definition and implementation dependency
|
|
|
|
COORDINATION REQUIRED:
|
|
Generate a concise coordination plan that addresses:
|
|
1. What specific coordination is needed between the agents
|
|
2. What order should tasks be completed in (if any)
|
|
3. What information/artifacts need to be shared
|
|
4. What potential conflicts to watch for
|
|
5. Success criteria for coordinated completion
|
|
`
|
|
|
|
plan := reasoning.GenerateResponse(ctx, "phi3", prompt)
|
|
```
|
|
|
|
**Plan Output Example:**
|
|
```
|
|
COORDINATION PLAN:
|
|
|
|
1. SEQUENCE:
|
|
- Task 1 (API definition) must be completed first
|
|
- Task 2 (implementation) depends on finalized API contract
|
|
|
|
2. INFORMATION SHARING:
|
|
- Agent-001 must share: API specification document, endpoint definitions
|
|
- Agent-002 must share: Implementation plan, integration tests
|
|
|
|
3. COORDINATION POINTS:
|
|
- Review API spec before implementation begins
|
|
- Daily sync on implementation progress
|
|
- Joint testing before completion
|
|
|
|
4. POTENTIAL CONFLICTS:
|
|
- API spec changes during implementation
|
|
- Performance requirements not captured in spec
|
|
- Authentication/authorization approach
|
|
|
|
5. SUCCESS CRITERIA:
|
|
- API spec reviewed and approved
|
|
- Implementation matches spec
|
|
- Integration tests pass
|
|
- Documentation complete
|
|
```
|
|
|
|
### 5. Session Progress Monitoring
|
|
|
|
```
|
|
Agents respond to coordination plan
|
|
↓
|
|
handleCoordinationResponse()
|
|
↓
|
|
Add message to session
|
|
↓
|
|
Update participant activity
|
|
↓
|
|
evaluateSessionProgress()
|
|
↓
|
|
┌──────────────────────┐
|
|
│ Check conditions: │
|
|
│ - Message count │
|
|
│ - Session duration │
|
|
│ - Agreement keywords │
|
|
└──────┬───────────────┘
|
|
│
|
|
┌──────▼──────┬──────────────┐
|
|
│ │ │
|
|
Consensus? Too long? Too many msgs?
|
|
│ │ │
|
|
Resolved Escalate Escalate
|
|
```
|
|
|
|
### 6. Session Resolution
|
|
|
|
**Consensus Reached:**
|
|
```go
|
|
// Detect agreement in recent messages
|
|
agreementKeywords := []string{
|
|
"agree", "sounds good", "approved", "looks good", "confirmed"
|
|
}
|
|
|
|
if agreementCount >= len(participants)-1 {
|
|
resolveSession(session, "Consensus reached among participants")
|
|
}
|
|
```
|
|
|
|
**Session Resolved:**
|
|
1. Update session status to "resolved"
|
|
2. Record resolution reason
|
|
3. Generate SLURP event (if integrator available)
|
|
4. Broadcast resolution to participants
|
|
5. Clean up after timeout
|
|
|
|
### 7. Session Escalation
|
|
|
|
**Escalation Triggers:**
|
|
- Message count exceeds threshold (default: 10)
|
|
- Session duration exceeds limit (default: 30 minutes)
|
|
- Explicit escalation request from agent
|
|
|
|
**Escalation Process:**
|
|
```go
|
|
escalateSession(session, reason)
|
|
↓
|
|
Update status to "escalated"
|
|
↓
|
|
Generate SLURP event for human review
|
|
↓
|
|
Broadcast escalation notification
|
|
↓
|
|
Human intervention required
|
|
```
|
|
|
|
## SLURP Integration
|
|
|
|
### Event Generation from Sessions
|
|
|
|
When sessions are resolved or escalated, the MetaCoordinator generates SLURP events:
|
|
|
|
```go
|
|
discussionContext := integration.HmmmDiscussionContext{
|
|
DiscussionID: session.SessionID,
|
|
SessionID: session.SessionID,
|
|
Participants: [agentIDs],
|
|
StartTime: session.CreatedAt,
|
|
EndTime: session.LastActivity,
|
|
Messages: hmmmMessages,
|
|
ConsensusReached: (outcome == "resolved"),
|
|
ConsensusStrength: 0.9, // 0.3 for escalated, 0.5 for other
|
|
OutcomeType: outcome, // "resolved" or "escalated"
|
|
ProjectPath: projectPath,
|
|
RelatedTasks: [taskIDs],
|
|
Metadata: {
|
|
"session_type": session.Type,
|
|
"session_status": session.Status,
|
|
"resolution": session.Resolution,
|
|
"escalation_reason": session.EscalationReason,
|
|
"message_count": len(session.Messages),
|
|
"participant_count": len(session.Participants),
|
|
},
|
|
}
|
|
|
|
slurpIntegrator.ProcessHmmmDiscussion(ctx, discussionContext)
|
|
```
|
|
|
|
**SLURP Event Outcomes:**
|
|
- **Resolved sessions**: High consensus (0.9), successful coordination
|
|
- **Escalated sessions**: Low consensus (0.3), human intervention needed
|
|
- **Other outcomes**: Medium consensus (0.5)
|
|
|
|
### Policy Learning
|
|
|
|
SLURP uses coordination session data to learn:
|
|
- Effective coordination patterns
|
|
- Common dependency types
|
|
- Escalation triggers
|
|
- Agent collaboration efficiency
|
|
- Task complexity indicators
|
|
|
|
## PubSub Message Types
|
|
|
|
### 1. dependency_detected
|
|
|
|
Announces a detected dependency between tasks.
|
|
|
|
```json
|
|
{
|
|
"message_type": "dependency_detected",
|
|
"dependency": {
|
|
"task1": {
|
|
"task_id": 42,
|
|
"project_id": 1,
|
|
"repository": "backend-api",
|
|
"title": "Define user authentication API",
|
|
"agent_id": "agent-001"
|
|
},
|
|
"task2": {
|
|
"task_id": 43,
|
|
"project_id": 2,
|
|
"repository": "frontend-app",
|
|
"title": "Implement login page",
|
|
"agent_id": "agent-002"
|
|
},
|
|
"relationship": "API_Contract",
|
|
"confidence": 0.8,
|
|
"reason": "API definition and implementation dependency",
|
|
"detected_at": "2025-09-30T10:00:00Z"
|
|
},
|
|
"coordination_request": "Cross-repository dependency detected...",
|
|
"agents_involved": ["agent-001", "agent-002"],
|
|
"repositories": ["backend-api", "frontend-app"],
|
|
"hop_count": 0,
|
|
"max_hops": 3
|
|
}
|
|
```
|
|
|
|
### 2. coordination_plan
|
|
|
|
Broadcasts AI-generated coordination plan to participants.
|
|
|
|
```json
|
|
{
|
|
"message_type": "coordination_plan",
|
|
"session_id": "dep_1_42_1727692800",
|
|
"plan": "COORDINATION PLAN:\n1. SEQUENCE:\n...",
|
|
"tasks_involved": [taskContext1, taskContext2],
|
|
"participants": {
|
|
"agent-001": { "agent_id": "agent-001", "repository": "backend-api" },
|
|
"agent-002": { "agent_id": "agent-002", "repository": "frontend-app" }
|
|
},
|
|
"message": "Coordination plan generated for dependency: API_Contract"
|
|
}
|
|
```
|
|
|
|
### 3. coordination_response
|
|
|
|
Agent response to coordination plan or session message.
|
|
|
|
```json
|
|
{
|
|
"message_type": "coordination_response",
|
|
"session_id": "dep_1_42_1727692800",
|
|
"agent_id": "agent-001",
|
|
"response": "I agree with the proposed sequence. API spec will be ready by EOD.",
|
|
"timestamp": "2025-09-30T10:05:00Z"
|
|
}
|
|
```
|
|
|
|
### 4. session_message
|
|
|
|
General message within a coordination session.
|
|
|
|
```json
|
|
{
|
|
"message_type": "session_message",
|
|
"session_id": "dep_1_42_1727692800",
|
|
"from_agent": "agent-002",
|
|
"content": "Can we schedule a quick sync to review the API spec?",
|
|
"timestamp": "2025-09-30T10:10:00Z"
|
|
}
|
|
```
|
|
|
|
### 5. escalation
|
|
|
|
Session escalated to human intervention.
|
|
|
|
```json
|
|
{
|
|
"message_type": "escalation",
|
|
"session_id": "dep_1_42_1727692800",
|
|
"escalation_reason": "Message limit exceeded - human intervention needed",
|
|
"session_summary": "Session dep_1_42_1727692800 (dependency): 2 participants, 12 messages, duration 35m",
|
|
"participants": { /* participant info */ },
|
|
"tasks_involved": [ /* task contexts */ ],
|
|
"requires_human": true
|
|
}
|
|
```
|
|
|
|
### 6. resolution
|
|
|
|
Session successfully resolved.
|
|
|
|
```json
|
|
{
|
|
"message_type": "resolution",
|
|
"session_id": "dep_1_42_1727692800",
|
|
"resolution": "Consensus reached among participants",
|
|
"summary": "Session dep_1_42_1727692800 (dependency): 2 participants, 8 messages, duration 15m"
|
|
}
|
|
```
|
|
|
|
## Usage Examples
|
|
|
|
### Basic Setup
|
|
|
|
```go
|
|
import (
|
|
"context"
|
|
"chorus/pkg/coordination"
|
|
"chorus/pubsub"
|
|
)
|
|
|
|
// Create MetaCoordinator
|
|
mc := coordination.NewMetaCoordinator(ctx, pubsubInstance)
|
|
|
|
// Optionally attach SLURP integrator
|
|
mc.SetSlurpIntegrator(slurpIntegrator)
|
|
|
|
// MetaCoordinator automatically:
|
|
// - Initializes DependencyDetector
|
|
// - Sets up HMMM message handlers
|
|
// - Starts session cleanup loop
|
|
```
|
|
|
|
### Register Tasks for Dependency Detection
|
|
|
|
```go
|
|
// Agent claims a task
|
|
taskContext := &coordination.TaskContext{
|
|
TaskID: 42,
|
|
ProjectID: 1,
|
|
Repository: "backend-api",
|
|
Title: "Define user authentication API",
|
|
Description: "Create OpenAPI spec for user auth endpoints",
|
|
Keywords: []string{"api", "authentication", "openapi"},
|
|
AgentID: "agent-001",
|
|
ClaimedAt: time.Now(),
|
|
}
|
|
|
|
mc.dependencyDetector.RegisterTask(taskContext)
|
|
```
|
|
|
|
### Add Custom Dependency Rule
|
|
|
|
```go
|
|
// Add project-specific rule
|
|
microserviceRule := coordination.DependencyRule{
|
|
Name: "Microservice_Interface",
|
|
Description: "Microservice interface and consumer dependencies",
|
|
Keywords: []string{"microservice", "interface", "consumer", "producer"},
|
|
Validator: func(task1, task2 *coordination.TaskContext) (bool, string) {
|
|
t1 := strings.ToLower(task1.Title + " " + task1.Description)
|
|
t2 := strings.ToLower(task2.Title + " " + task2.Description)
|
|
|
|
hasProducer := strings.Contains(t1, "producer") || strings.Contains(t2, "producer")
|
|
hasConsumer := strings.Contains(t1, "consumer") || strings.Contains(t2, "consumer")
|
|
|
|
if hasProducer && hasConsumer {
|
|
return true, "Microservice producer and consumer must coordinate"
|
|
}
|
|
return false, ""
|
|
},
|
|
}
|
|
|
|
mc.dependencyDetector.AddCustomRule(microserviceRule)
|
|
```
|
|
|
|
### Query Active Sessions
|
|
|
|
```go
|
|
// Get all active coordination sessions
|
|
sessions := mc.GetActiveSessions()
|
|
|
|
for sessionID, session := range sessions {
|
|
fmt.Printf("Session %s:\n", sessionID)
|
|
fmt.Printf(" Type: %s\n", session.Type)
|
|
fmt.Printf(" Status: %s\n", session.Status)
|
|
fmt.Printf(" Participants: %d\n", len(session.Participants))
|
|
fmt.Printf(" Messages: %d\n", len(session.Messages))
|
|
fmt.Printf(" Duration: %v\n", time.Since(session.CreatedAt))
|
|
}
|
|
```
|
|
|
|
### Monitor Coordination Events
|
|
|
|
```go
|
|
// Set custom HMMM message handler
|
|
pubsub.SetHmmmMessageHandler(func(msg pubsub.Message, from peer.ID) {
|
|
switch msg.Data["message_type"] {
|
|
case "dependency_detected":
|
|
fmt.Printf("🔗 Dependency detected: %v\n", msg.Data)
|
|
case "coordination_plan":
|
|
fmt.Printf("📋 Coordination plan: %v\n", msg.Data)
|
|
case "escalation":
|
|
fmt.Printf("🚨 Escalation: %v\n", msg.Data)
|
|
case "resolution":
|
|
fmt.Printf("✅ Resolution: %v\n", msg.Data)
|
|
}
|
|
})
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### MetaCoordinator Configuration
|
|
|
|
```go
|
|
mc := coordination.NewMetaCoordinator(ctx, ps)
|
|
|
|
// Adjust session parameters
|
|
mc.maxSessionDuration = 45 * time.Minute // Extend session timeout
|
|
mc.maxParticipants = 10 // Support larger teams
|
|
mc.escalationThreshold = 15 // More messages before escalation
|
|
```
|
|
|
|
### DependencyDetector Configuration
|
|
|
|
```go
|
|
dd := mc.dependencyDetector
|
|
|
|
// Adjust coordination hop limit
|
|
dd.coordinationHops = 5 // Allow deeper meta-discussion chains
|
|
```
|
|
|
|
## Session Lifecycle Management
|
|
|
|
### Automatic Cleanup
|
|
|
|
Sessions are automatically cleaned up by the session cleanup loop:
|
|
|
|
```go
|
|
// Runs every 10 minutes
|
|
func (mc *MetaCoordinator) cleanupInactiveSessions() {
|
|
for sessionID, session := range mc.activeSessions {
|
|
// Remove sessions older than 2 hours OR already resolved/escalated
|
|
if time.Since(session.LastActivity) > 2*time.Hour ||
|
|
session.Status == "resolved" ||
|
|
session.Status == "escalated" {
|
|
delete(mc.activeSessions, sessionID)
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
**Cleanup Criteria:**
|
|
- Session inactive for 2+ hours
|
|
- Session status is "resolved"
|
|
- Session status is "escalated"
|
|
|
|
### Manual Session Management
|
|
|
|
```go
|
|
// Not exposed in current API, but could be added:
|
|
|
|
// Force resolve session
|
|
mc.resolveSession(session, "Manual resolution by admin")
|
|
|
|
// Force escalate session
|
|
mc.escalateSession(session, "Manual escalation requested")
|
|
|
|
// Cancel/close session
|
|
mc.closeSession(sessionID)
|
|
```
|
|
|
|
## Performance Considerations
|
|
|
|
### Memory Usage
|
|
|
|
- **TaskContext Storage**: ~500 bytes per task
|
|
- **Active Sessions**: ~5KB per session (varies with message count)
|
|
- **Dependency Rules**: ~1KB per rule
|
|
|
|
**Typical Usage**: 100 tasks + 10 sessions = ~100KB
|
|
|
|
### CPU Usage
|
|
|
|
- **Dependency Detection**: O(N²) where N = number of tasks per repository
|
|
- **Rule Evaluation**: O(R) where R = number of rules
|
|
- **Session Monitoring**: Periodic evaluation (every message received)
|
|
|
|
**Optimization**: Dependency detection skips same-repository comparisons.
|
|
|
|
### Network Usage
|
|
|
|
- **Dependency Announcements**: ~2KB per dependency
|
|
- **Coordination Plans**: ~5KB per plan (includes full context)
|
|
- **Session Messages**: ~1KB per message
|
|
- **SLURP Events**: ~10KB per event (includes full session history)
|
|
|
|
## Best Practices
|
|
|
|
### 1. Rule Design
|
|
|
|
**Good Rule:**
|
|
```go
|
|
// Specific, actionable, clear success criteria
|
|
{
|
|
Name: "Database_Migration",
|
|
Keywords: []string{"migration", "schema", "database"},
|
|
Validator: func(t1, t2 *TaskContext) (bool, string) {
|
|
// Clear matching logic
|
|
// Specific reason returned
|
|
},
|
|
}
|
|
```
|
|
|
|
**Bad Rule:**
|
|
```go
|
|
// Too broad, unclear coordination needed
|
|
{
|
|
Name: "Backend_Tasks",
|
|
Keywords: []string{"backend"},
|
|
Validator: func(t1, t2 *TaskContext) (bool, string) {
|
|
return strings.Contains(t1.Title, "backend") &&
|
|
strings.Contains(t2.Title, "backend"), "Both backend tasks"
|
|
},
|
|
}
|
|
```
|
|
|
|
### 2. Session Participation
|
|
|
|
- **Respond promptly**: Keep sessions moving
|
|
- **Be explicit**: Use clear agreement/disagreement language
|
|
- **Stay focused**: Don't derail session with unrelated topics
|
|
- **Escalate when stuck**: Don't let sessions drag on indefinitely
|
|
|
|
### 3. AI Plan Quality
|
|
|
|
AI plans are most effective when:
|
|
- Task descriptions are detailed
|
|
- Dependencies are clear
|
|
- Agent capabilities are well-defined
|
|
- Historical context is available
|
|
|
|
### 4. SLURP Integration
|
|
|
|
For best SLURP learning:
|
|
- Enable SLURP integrator at startup
|
|
- Ensure all sessions generate events (resolved or escalated)
|
|
- Provide rich task metadata
|
|
- Include project context in task descriptions
|
|
|
|
## Troubleshooting
|
|
|
|
### Dependencies Not Detected
|
|
|
|
**Symptoms**: Related tasks not triggering coordination.
|
|
|
|
**Checks:**
|
|
1. Verify tasks registered with detector: `dd.GetKnownTasks()`
|
|
2. Check rule keywords match task content
|
|
3. Test validator logic with task pairs
|
|
4. Verify tasks are from different repositories
|
|
5. Check PubSub connection for announcements
|
|
|
|
### Sessions Not Escalating
|
|
|
|
**Symptoms**: Long-running sessions without escalation.
|
|
|
|
**Checks:**
|
|
1. Verify escalation threshold: `mc.escalationThreshold`
|
|
2. Check session duration limit: `mc.maxSessionDuration`
|
|
3. Verify message count in session
|
|
4. Check for agreement keywords in messages
|
|
5. Test escalation logic manually
|
|
|
|
### AI Plans Not Generated
|
|
|
|
**Symptoms**: Sessions created but no coordination plan.
|
|
|
|
**Checks:**
|
|
1. Verify reasoning engine available: `reasoning.GenerateResponse()`
|
|
2. Check AI model configuration
|
|
3. Verify network connectivity to AI provider
|
|
4. Check reasoning engine error logs
|
|
5. Test with simpler dependency
|
|
|
|
### SLURP Events Not Generated
|
|
|
|
**Symptoms**: Sessions complete but no SLURP events.
|
|
|
|
**Checks:**
|
|
1. Verify SLURP integrator attached: `mc.SetSlurpIntegrator()`
|
|
2. Check SLURP integrator initialization
|
|
3. Verify session outcome triggers event generation
|
|
4. Check SLURP integrator error logs
|
|
5. Test event generation manually
|
|
|
|
## Future Enhancements
|
|
|
|
### Planned Features
|
|
|
|
1. **Machine Learning Rules**: Learn dependency patterns from historical data
|
|
2. **Automated Testing**: Generate integration tests for coordinated tasks
|
|
3. **Visualization**: Web UI for monitoring active sessions
|
|
4. **Advanced Metrics**: Track coordination efficiency and success rates
|
|
5. **Multi-Repo CI/CD**: Coordinate deployments across dependent services
|
|
6. **Conflict Resolution**: AI-powered conflict resolution suggestions
|
|
7. **Predictive Coordination**: Predict dependencies before tasks are claimed
|
|
|
|
## See Also
|
|
|
|
- [coordinator/](coordinator.md) - Task coordinator integration
|
|
- [pubsub/](../pubsub.md) - PubSub messaging for coordination
|
|
- [pkg/integration/](integration.md) - SLURP integration
|
|
- [pkg/hmmm/](hmmm.md) - HMMM meta-discussion system
|
|
- [reasoning/](../reasoning.md) - AI reasoning engine for planning
|
|
- [internal/logging/](../internal/logging.md) - Hypercore logging |