1
0
Files
Skill/manager/cmd/skillmgr/update.go

100 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package main
import (
"fmt"
"github.com/spf13/cobra"
"skillmgr/internal/config"
"skillmgr/internal/installer"
"skillmgr/internal/types"
)
var updateCmd = &cobra.Command{
Use: "update [type] [name]",
Short: "更新已安装的 skill 或 command",
Long: `从源仓库重新安装最新版本。
示例:
# 更新单个
skillmgr update skill lyxy-kb --platform claude --global
skillmgr update command lyxy-kb --platform opencode
# 更新所有
skillmgr update --all`,
RunE: func(cmd *cobra.Command, args []string) error {
all, _ := cmd.Flags().GetBool("all")
if all {
return updateAll()
}
if len(args) != 2 {
return fmt.Errorf("需要指定类型和名称,或使用 --all 更新所有")
}
itemType := args[0]
name := args[1]
platformStr, _ := cmd.Flags().GetString("platform")
global, _ := cmd.Flags().GetBool("global")
platform := types.Platform(platformStr)
scope := types.ScopeProject
if global {
scope = types.ScopeGlobal
}
switch itemType {
case "skill":
return installer.UpdateSkill(name, platform, scope)
case "command":
return installer.UpdateCommand(name, platform, scope)
default:
return fmt.Errorf("无效的类型: %s必须是 'skill' 或 'command'", itemType)
}
},
}
func updateAll() error {
cfg, err := config.LoadInstallConfig()
if err != nil {
return err
}
if len(cfg.Installations) == 0 {
fmt.Println("无已安装的 skills/commands")
return nil
}
var hasError bool
for _, r := range cfg.Installations {
fmt.Printf("正在更新 [%s] %s...\n", r.Type, r.Name)
var err error
if r.Type == types.ItemTypeSkill {
err = installer.UpdateSkill(r.Name, r.Platform, r.Scope)
} else {
err = installer.UpdateCommand(r.Name, r.Platform, r.Scope)
}
if err != nil {
fmt.Printf(" ✗ 更新失败: %v\n", err)
hasError = true
continue
}
}
if hasError {
fmt.Println("\n部分项目更新失败")
}
return nil
}
func init() {
updateCmd.Flags().StringP("platform", "p", "", "目标平台 (claude|opencode)")
updateCmd.Flags().BoolP("global", "g", false, "全局更新")
updateCmd.Flags().Bool("all", false, "更新所有已安装项")
rootCmd.AddCommand(updateCmd)
}