Implements weeks 1-4 of the multi-provider architecture: Week 1 - Foundation: - Add domain models (AgentProvider, AgentRequest, AgentEvent, AgentResult) - Define CodeAgent port interface with Execute, Cancel, Capabilities - Create thread-safe provider registry with first-registered default Week 2 - Claude Code Adapter: - Extract kubectl exec logic into CodeAgent implementation - Parse stream-json output format (init, message, tool_use, result) - Support session continuation via --resume flag Week 3 - OpenCode Adapter: - HTTP/SSE client for opencode serve API - Session management (create, send message, abort) - Event streaming with documented buffer rationale Week 4 - Quality & Polish: - Fix race condition in OpenCode Cancel method - Add AgentRequest.Validate() with ErrPromptRequired, ErrInvalidTimeout - Document DefaultAvailabilityTimeout constants - Add HTTP error context for debugging Also includes: - Work queue system with PostgreSQL adapter - Credential store for infrastructure secrets - Project templates with Woodpecker CI integration - Comprehensive test coverage Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
53 lines
1.9 KiB
Go
53 lines
1.9 KiB
Go
package domain
|
|
|
|
import "errors"
|
|
|
|
// Domain errors - these are business-level errors that should be translated
|
|
// to appropriate HTTP status codes or gRPC error codes by the presentation layer.
|
|
var (
|
|
// Project errors
|
|
ErrProjectNotFound = errors.New("project not found")
|
|
ErrProjectNotRunning = errors.New("project is not running")
|
|
ErrInvalidProjectName = errors.New("invalid project name")
|
|
|
|
// Template errors
|
|
ErrTemplateNotFound = errors.New("template not found")
|
|
|
|
// Command errors
|
|
ErrCommandNotFound = errors.New("command not found")
|
|
ErrCommandTimeout = errors.New("command timed out")
|
|
ErrCommandCancelled = errors.New("command was cancelled")
|
|
ErrLimitExceeded = errors.New("concurrent command limit exceeded")
|
|
ErrInvalidCommand = errors.New("invalid command")
|
|
ErrCommandSanitization = errors.New("command failed sanitization")
|
|
|
|
// Agent errors
|
|
ErrInvalidAgentProvider = errors.New("invalid agent provider")
|
|
ErrPromptRequired = errors.New("prompt is required")
|
|
ErrInvalidTimeout = errors.New("timeout cannot be negative")
|
|
|
|
// Work queue errors
|
|
ErrWorkTaskNotFound = errors.New("work task not found")
|
|
|
|
// API Key errors
|
|
ErrKeyNotFound = errors.New("api key not found")
|
|
ErrKeyRevoked = errors.New("api key has been revoked")
|
|
ErrKeyExpired = errors.New("api key has expired")
|
|
ErrKeyInvalid = errors.New("invalid api key format")
|
|
|
|
// Authorization errors
|
|
ErrUnauthorized = errors.New("unauthorized")
|
|
ErrForbidden = errors.New("forbidden")
|
|
ErrInsufficientScope = errors.New("insufficient scope")
|
|
|
|
// Rate limiting errors
|
|
ErrRateLimited = errors.New("rate limit exceeded")
|
|
|
|
// Audit errors
|
|
ErrAuditNotFound = errors.New("audit log entry not found")
|
|
|
|
// Infrastructure errors (should typically be wrapped)
|
|
ErrDatabaseConnection = errors.New("database connection error")
|
|
ErrKubernetesError = errors.New("kubernetes error")
|
|
)
|