Files
kandev/backend/pkg/acp/protocol/helpers.go
T
jcfs ba919305c2 Initial commit: Kandev with SQLite persistence and agent integration
Features:
- Unified Go binary running Task Service, Agent Manager, and Orchestrator
- SQLite persistence for boards, columns, and tasks
- Docker-based agent execution with ACP message streaming
- Augment Agent integration with session resumption support
- RESTful API for all operations (port 8080)
- In-memory event bus for service communication

Architecture:
- cmd/kandev: Single entry point for all services
- internal/task: Task, board, and column management
- internal/agent: Docker container lifecycle and ACP streaming
- internal/orchestrator: Agent coordination and monitoring
- internal/events: In-memory pub/sub event bus

Documentation:
- README.md: Project overview and quick start
- docs/ARCHITECTURE.md: System architecture (current + planned)
- docs/GETTING_STARTED.md: Development setup guide
- docs/IMPLEMENTATION_PLAN.md: Original microservices plan
- backend/NEXT_STEPS.md: Development roadmap
2026-01-10 01:30:24 +00:00

72 lines
2.2 KiB
Go

package protocol
// NewProgressMessage creates a new progress message
func NewProgressMessage(agentID, taskID string, data ProgressData) *Message {
return NewMessage(MessageTypeProgress, agentID, taskID, map[string]interface{}{
"progress": data.Progress,
"message": data.Message,
"current_file": data.CurrentFile,
"files_processed": data.FilesProcessed,
"total_files": data.TotalFiles,
})
}
// NewLogMessage creates a new log message
func NewLogMessage(agentID, taskID string, data LogData) *Message {
return NewMessage(MessageTypeLog, agentID, taskID, map[string]interface{}{
"level": data.Level,
"message": data.Message,
"metadata": data.Metadata,
})
}
// NewResultMessage creates a new result message
func NewResultMessage(agentID, taskID string, data ResultData) *Message {
// Convert artifacts to interface slice
artifacts := make([]interface{}, len(data.Artifacts))
for i, a := range data.Artifacts {
artifacts[i] = map[string]interface{}{
"type": a.Type,
"path": a.Path,
"url": a.URL,
}
}
return NewMessage(MessageTypeResult, agentID, taskID, map[string]interface{}{
"status": data.Status,
"summary": data.Summary,
"artifacts": artifacts,
})
}
// NewErrorMessage creates a new error message
func NewErrorMessage(agentID, taskID string, data ErrorData) *Message {
return NewMessage(MessageTypeError, agentID, taskID, map[string]interface{}{
"error": data.Error,
"file": data.File,
"details": data.Details,
})
}
// NewStatusMessage creates a new status message
func NewStatusMessage(agentID, taskID string, data StatusData) *Message {
return NewMessage(MessageTypeStatus, agentID, taskID, map[string]interface{}{
"status": data.Status,
"message": data.Message,
})
}
// NewHeartbeatMessage creates a new heartbeat message
func NewHeartbeatMessage(agentID, taskID string) *Message {
return NewMessage(MessageTypeHeartbeat, agentID, taskID, map[string]interface{}{})
}
// NewControlMessage creates a new control message
func NewControlMessage(agentID, taskID string, data ControlData) *Message {
return NewMessage(MessageTypeControl, agentID, taskID, map[string]interface{}{
"action": data.Action,
"reason": data.Reason,
})
}