refactor: migrar tasks/ a dev/issues/ con estructura de desarrollo
Se mueve la documentación de issues/tasks de .claude/tasks/ a dev/issues/ para separar la planificación de desarrollo de la configuración de Claude. Se añade dev/README.md como índice de la carpeta de desarrollo. Los issues completados se mueven a dev/issues/completed/. Esto permite que dev/ sea el punto central de documentación interna del proyecto. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# Plan: Editar fotos de perfil de los bots
|
||||
|
||||
## Objetivo
|
||||
Poder actualizar el avatar (foto de perfil) y el display name de cada bot en Matrix
|
||||
desde la CLI (`agentctl`) o desde un dev-script.
|
||||
|
||||
## Estado: COMPLETADO
|
||||
|
||||
---
|
||||
|
||||
## Cómo funciona en Matrix
|
||||
- Endpoint: `PUT /_matrix/client/v3/profile/{userId}/avatar_url`
|
||||
- Body: `{ "avatar_url": "mxc://..." }` — URI de contenido subido al Media repo
|
||||
- Para subir una imagen: `POST /_matrix/media/v3/upload` con el body binario
|
||||
y `Content-Type` de la imagen
|
||||
- También se puede cambiar el display name:
|
||||
`PUT /_matrix/client/v3/profile/{userId}/displayname`
|
||||
|
||||
La secuencia es:
|
||||
1. Subir imagen → obtener `mxc://server/mediaID`
|
||||
2. Establecer `avatar_url` en el perfil con esa URI
|
||||
|
||||
---
|
||||
|
||||
## Diseño
|
||||
|
||||
### CLI: `agentctl avatar <agent-id> <image-path>`
|
||||
Nuevo subcomando en `cmd/agentctl/`:
|
||||
```
|
||||
agentctl avatar assistant-bot /path/to/photo.png
|
||||
agentctl displayname assistant-bot "Assistant Bot"
|
||||
```
|
||||
|
||||
### Shell: `shell/matrix/profile.go`
|
||||
```go
|
||||
// UploadMedia sube un archivo y devuelve la mxc:// URI
|
||||
func UploadMedia(ctx, client, filePath string) (mxcURI string, err error)
|
||||
|
||||
// SetAvatar establece avatar_url en el perfil del bot
|
||||
func SetAvatar(ctx, client, mxcURI string) error
|
||||
|
||||
// SetDisplayName cambia el displayname
|
||||
func SetDisplayName(ctx, client, name string) error
|
||||
```
|
||||
|
||||
Usa el cliente `mautrix.Client` ya existente en `shell/matrix/client.go`.
|
||||
|
||||
### Dev-script: `dev-scripts/avatar.sh`
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
# Uso: ./dev-scripts/avatar.sh <agent-id> <image-path>
|
||||
./bin/agentctl avatar "$1" "$2"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Archivos a crear/modificar
|
||||
- `shell/matrix/profile.go` — UploadMedia, SetAvatar, SetDisplayName
|
||||
- `cmd/agentctl/avatar.go` — subcomando `avatar` y `displayname`
|
||||
- `cmd/agentctl/main.go` — registrar los nuevos subcomandos en Cobra
|
||||
- `dev-scripts/avatar.sh` — wrapper convenience
|
||||
|
||||
## Notas
|
||||
- El token del bot necesita permiso de escritura en su propio perfil (normal por defecto)
|
||||
- Formatos soportados: PNG, JPG, WebP — Matrix los acepta todos
|
||||
- mautrix-go tiene métodos `client.UploadMedia()` y `client.SetAvatarURL()`;
|
||||
usar esos directamente para evitar HTTP manual
|
||||
- El comando debe cargar el token del bot desde las env vars (`MATRIX_TOKEN_<BOT>`)
|
||||
igual que hace `cmd/launcher/`
|
||||
Reference in New Issue
Block a user