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

Function selectSkillsWithSelector

pkg/cmd/skills/install/install.go:698–763  ·  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 := opts.IO.TerminalWidth() - multiSelectLabelMargin
730 if labelWidth < 1 {
731 labelWidth = 1
732 }
733
734 selected, err := opts.Prompter.MultiSelectWithSearch(
735 "Select skill(s) to install:",
736 "Filter skills",
737 nil,
738 []string{allSkillsKey},
739 skillSearchFunc(skills, labelWidth),
740 )
741 if err != nil {
742 return nil, err
743 }
744
745 if len(selected) == 0 {
746 return nil, fmt.Errorf("must select at least one skill")
747 }
748
749 for _, s := range selected {
750 if s == allSkillsKey {
751 if err := checkCollisions(skills); err != nil {
752 return nil, err
753 }
754 return skills, nil
755 }

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