package cmd import ( "fmt" "strings" ) type Handler func(args []string) type Command struct { Name string Aliases []string Handler Handler MinArgs int } type Registry struct { cmds map[string]Command } func NewRegistry() *Registry { return &Registry{cmds: make(map[string]Command)} } func (r *Registry) Register(cmd Command) { r.cmds[cmd.Name] = cmd for _, a := range cmd.Aliases { r.cmds[a] = cmd } } func (r *Registry) Dispatch(input string) error { parts := strings.Fields(input) if len(parts) == 0 { return nil } name := strings.ToLower(parts[0]) cmd, ok := r.cmds[name] if !ok { return fmt.Errorf("unknown command: %s", name) } args := parts[1:] if len(args) < cmd.MinArgs { return fmt.Errorf("usage: %s requires at least %d arguments", cmd.Name, cmd.MinArgs) } cmd.Handler(args) return nil }