80 lines
2.0 KiB
Go
80 lines
2.0 KiB
Go
package agents
|
|
|
|
import "gocoder/db"
|
|
|
|
// Agent defines the interface that all agents must implement.
|
|
type Agent interface {
|
|
// Type returns the unique agent type identifier (e.g. "dadjokes", "poet", "robot").
|
|
Type() string
|
|
|
|
// DisplayName returns the human-readable name for the agent.
|
|
DisplayName() string
|
|
|
|
// Description returns a short description shown in the UI.
|
|
Description() string
|
|
|
|
// Icon returns an SVG icon string (inline) for the agent selector.
|
|
Icon() string
|
|
|
|
// SystemMessage returns the system prompt for this agent.
|
|
SystemMessage() string
|
|
|
|
// ShouldRespond returns true if the agent should process the given user message.
|
|
// When false, the agent will not be used even if selected.
|
|
ShouldRespond(message string) bool
|
|
|
|
// RequiresWorkspace returns true if this agent needs a workspace location to function.
|
|
RequiresWorkspace() bool
|
|
}
|
|
|
|
// AgentRegistry holds all registered agents and provides lookup by type.
|
|
type AgentRegistry struct {
|
|
agents []Agent
|
|
}
|
|
|
|
// NewAgentRegistry creates and registers all built-in agents.
|
|
func NewAgentRegistry() *AgentRegistry {
|
|
r := &AgentRegistry{}
|
|
r.Register(&DadjokesAgent{})
|
|
r.Register(&PoetAgent{})
|
|
r.Register(&RobotAgent{})
|
|
r.Register(&CompactorAgent{})
|
|
r.Register(&CodingAgent{})
|
|
return r
|
|
}
|
|
|
|
// Register adds an agent to the registry.
|
|
func (r *AgentRegistry) Register(a Agent) {
|
|
r.agents = append(r.agents, a)
|
|
}
|
|
|
|
// All returns all registered agents.
|
|
func (r *AgentRegistry) All() []Agent {
|
|
return r.agents
|
|
}
|
|
|
|
// GetByType returns the agent with the given type.
|
|
func (r *AgentRegistry) GetByType(t string) Agent {
|
|
for _, a := range r.agents {
|
|
if a.Type() == t {
|
|
return a
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetSystemMessages returns a slice of system messages for the selected agents.
|
|
func (r *AgentRegistry) GetSystemMessages(agentTypes []string) []db.Message {
|
|
var msgs []db.Message
|
|
for _, t := range agentTypes {
|
|
a := r.GetByType(t)
|
|
if a != nil {
|
|
msgs = append(msgs, db.Message{
|
|
Role: "system",
|
|
Content: a.SystemMessage(),
|
|
})
|
|
}
|
|
}
|
|
return msgs
|
|
}
|