feat: improve onboarding and task setup (#21)
This commit is contained in:
@@ -21,6 +21,8 @@ var (
|
||||
ErrAgentProfileInUse = errors.New("agent profile is used by an active agent session")
|
||||
)
|
||||
|
||||
const defaultAgentProfileName = "default"
|
||||
|
||||
type Controller struct {
|
||||
repo store.Repository
|
||||
discovery *discovery.Registry
|
||||
@@ -76,6 +78,49 @@ func (c *Controller) ListAgents(ctx context.Context) (*dto.ListAgentsResponse, e
|
||||
return &dto.ListAgentsResponse{Agents: payload, Total: len(payload)}, nil
|
||||
}
|
||||
|
||||
func (c *Controller) EnsureInitialAgentProfiles(ctx context.Context) error {
|
||||
results, err := c.discovery.Detect(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, result := range results {
|
||||
if !result.Available {
|
||||
continue
|
||||
}
|
||||
agent, err := c.repo.GetAgentByName(ctx, result.Name)
|
||||
if err != nil && !errors.Is(err, sql.ErrNoRows) {
|
||||
return err
|
||||
}
|
||||
if errors.Is(err, sql.ErrNoRows) || agent == nil {
|
||||
agent = &models.Agent{
|
||||
Name: result.Name,
|
||||
SupportsMCP: result.SupportsMCP,
|
||||
MCPConfigPath: result.MCPConfigPath,
|
||||
}
|
||||
if err := c.repo.CreateAgent(ctx, agent); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
profiles, err := c.repo.ListAgentProfiles(ctx, agent.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(profiles) > 0 {
|
||||
continue
|
||||
}
|
||||
defaultProfile := &models.AgentProfile{
|
||||
AgentID: agent.ID,
|
||||
Name: defaultAgentProfileName,
|
||||
Model: "",
|
||||
Plan: "",
|
||||
}
|
||||
if err := c.repo.CreateAgentProfile(ctx, defaultProfile); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Controller) GetAgent(ctx context.Context, id string) (*dto.AgentDTO, error) {
|
||||
agent, err := c.repo.GetAgent(ctx, id)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user