1
0

完成一个简易的全局skill、command管理器

This commit is contained in:
2026-02-25 14:33:56 +08:00
parent f4cb809f9d
commit 2d327b5af8
60 changed files with 6053 additions and 1 deletions

View 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)
}