From cc8c5a664543b9c569be81460a4042deeb2fd4b0 Mon Sep 17 00:00:00 2001 From: Enmanuel Date: Thu, 9 Apr 2026 21:37:13 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20a=C3=B1adir=20subcomandos=20upload-medi?= =?UTF-8?q?a=20y=20set-avatar-url=20en=20agentctl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Expone las funciones separadas de profile.go como CLI: - agentctl upload-media — sube sin activar avatar - agentctl set-avatar-url — activa un mxc ya subido Complementa la refactorizacion de shell/matrix/profile.go. Co-Authored-By: Claude Opus 4.6 (1M context) --- cmd/agentctl/avatar.go | 57 ++++++++++++++++++++++++++++++++++++++++++ cmd/agentctl/main.go | 3 +++ 2 files changed, 60 insertions(+) diff --git a/cmd/agentctl/avatar.go b/cmd/agentctl/avatar.go index 2d982f8..54155ea 100644 --- a/cmd/agentctl/avatar.go +++ b/cmd/agentctl/avatar.go @@ -41,6 +41,63 @@ func avatarCmd() *cobra.Command { } } +func uploadMediaCmd() *cobra.Command { + return &cobra.Command{ + Use: "upload-media ", + Short: "Upload an image to Matrix media repo (does NOT set it as avatar)", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + agentID, imagePath := args[0], args[1] + + cfg, err := loadMatrixCfg(agentID) + if err != nil { + return err + } + + client, err := shellmatrix.New(cfg.Matrix) + if err != nil { + return fmt.Errorf("matrix client: %w", err) + } + + uri, err := client.UploadMedia(context.Background(), imagePath) + if err != nil { + return err + } + + fmt.Printf("ok %-20s uploaded → %s\n", agentID, uri) + return nil + }, + } +} + +func setAvatarURLCmd() *cobra.Command { + return &cobra.Command{ + Use: "set-avatar-url ", + Short: "Set the bot's avatar to an already-uploaded mxc:// URI", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + agentID, mxcURI := args[0], args[1] + + cfg, err := loadMatrixCfg(agentID) + if err != nil { + return err + } + + client, err := shellmatrix.New(cfg.Matrix) + if err != nil { + return fmt.Errorf("matrix client: %w", err) + } + + if err := client.SetAvatarURL(context.Background(), mxcURI); err != nil { + return err + } + + fmt.Printf("ok %-20s avatar-url → %s\n", agentID, mxcURI) + return nil + }, + } +} + func displaynameCmd() *cobra.Command { return &cobra.Command{ Use: "displayname [name]", diff --git a/cmd/agentctl/main.go b/cmd/agentctl/main.go index 1385f71..3fef581 100644 --- a/cmd/agentctl/main.go +++ b/cmd/agentctl/main.go @@ -51,6 +51,9 @@ func main() { reloadCmd(mgr), removeCmd(mgr), avatarCmd(), + uploadMediaCmd(), + setAvatarURLCmd(), + autoAvatarCmd(), displaynameCmd(), )