mirror of
https://github.com/sst/opencode.git
synced 2025-08-25 23:44:08 +00:00
74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
package completions
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"strings"
|
|
|
|
"github.com/sst/opencode-sdk-go"
|
|
"github.com/sst/opencode/internal/app"
|
|
"github.com/sst/opencode/internal/styles"
|
|
"github.com/sst/opencode/internal/theme"
|
|
)
|
|
|
|
type agentsContextGroup struct {
|
|
app *app.App
|
|
}
|
|
|
|
func (cg *agentsContextGroup) GetId() string {
|
|
return "agents"
|
|
}
|
|
|
|
func (cg *agentsContextGroup) GetEmptyMessage() string {
|
|
return "no matching agents"
|
|
}
|
|
|
|
func (cg *agentsContextGroup) GetChildEntries(
|
|
query string,
|
|
) ([]CompletionSuggestion, error) {
|
|
items := make([]CompletionSuggestion, 0)
|
|
|
|
query = strings.TrimSpace(query)
|
|
|
|
agents, err := cg.app.Client.App.Agents(
|
|
context.Background(),
|
|
)
|
|
if err != nil {
|
|
slog.Error("Failed to get agent list", "error", err)
|
|
return items, err
|
|
}
|
|
if agents == nil {
|
|
return items, nil
|
|
}
|
|
|
|
for _, agent := range *agents {
|
|
if query != "" && !strings.Contains(strings.ToLower(agent.Name), strings.ToLower(query)) {
|
|
continue
|
|
}
|
|
if agent.Mode == opencode.AgentModePrimary {
|
|
continue
|
|
}
|
|
|
|
displayFunc := func(s styles.Style) string {
|
|
t := theme.CurrentTheme()
|
|
muted := s.Foreground(t.TextMuted()).Render
|
|
return s.Render(agent.Name) + muted(" (agent)")
|
|
}
|
|
|
|
item := CompletionSuggestion{
|
|
Display: displayFunc,
|
|
Value: agent.Name,
|
|
ProviderID: cg.GetId(),
|
|
RawData: agent,
|
|
}
|
|
items = append(items, item)
|
|
}
|
|
|
|
return items, nil
|
|
}
|
|
|
|
func NewAgentsContextGroup(app *app.App) CompletionProvider {
|
|
return &agentsContextGroup{
|
|
app: app,
|
|
}
|
|
}
|