完成一个简易的全局skill、command管理器
This commit is contained in:
99
manager/cmd/skillmgr/update.go
Normal file
99
manager/cmd/skillmgr/update.go
Normal file
@@ -0,0 +1,99 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user