MCPcopy Create free account
hub / github.com/cli/cli / selectSkillsWithSelector

Function selectSkillsWithSelector

pkg/cmd/skills/install/install.go:698–760  ·  view source on GitHub ↗
(opts *InstallOptions, skills []discovery.Skill, canPrompt bool, sel skillSelector)

Source from the content-addressed store, hash-verified

696var errSkillsListed = errors.New("skills listed")
697
698func selectSkillsWithSelector(opts *InstallOptions, skills []discovery.Skill, canPrompt bool, sel skillSelector) ([]discovery.Skill, error) {
699 checkCollisions := func(ss []discovery.Skill) error {
700 if err := collisionError(ss); err != nil {
701 fmt.Fprintf(opts.IO.ErrOut, "Hint: install individually using the full name: gh skill install %s namespace/skill-name\n", sel.sourceHint)
702 return err
703 }
704 return nil
705 }
706
707 if opts.All {
708 if err := checkCollisions(skills); err != nil {
709 return nil, err
710 }
711 return skills, nil
712 }
713
714 if opts.SkillName != "" {
715 return sel.matchByName(opts, skills)
716 }
717
718 if !canPrompt {
719 if err := listAvailableSkills(opts, skills, sel); err != nil {
720 return nil, err
721 }
722 return nil, errSkillsListed
723 }
724
725 if sel.fetchDescriptions != nil {
726 sel.fetchDescriptions()
727 }
728
729 labelWidth := max(opts.IO.TerminalWidth()-multiSelectLabelMargin, 1)
730
731 selected, err := opts.Prompter.MultiSelectWithSearch(
732 "Select skill(s) to install:",
733 "Filter skills",
734 nil,
735 []string{allSkillsKey},
736 skillSearchFunc(skills, labelWidth),
737 )
738 if err != nil {
739 return nil, err
740 }
741
742 if len(selected) == 0 {
743 return nil, fmt.Errorf("must select at least one skill")
744 }
745
746 for _, s := range selected {
747 if s == allSkillsKey {
748 if err := checkCollisions(skills); err != nil {
749 return nil, err
750 }
751 return skills, nil
752 }
753 }
754
755 result, err := matchSelectedSkills(skills, selected)

Callers 3

installRunFunction · 0.85
runLocalInstallFunction · 0.85

Calls 7

collisionErrorFunction · 0.85
listAvailableSkillsFunction · 0.85
skillSearchFuncFunction · 0.85
matchSelectedSkillsFunction · 0.85
TerminalWidthMethod · 0.80
MultiSelectWithSearchMethod · 0.65
ErrorfMethod · 0.65