Files
neo/docs/superpowers/plans/2026-07-15-sticker-refactor-plan.md
T

2.8 KiB

Sticker Refactor Implementation Plan

For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.

Goal: Move EXIF generation and WebP conversion helpers out of sticker.go into helper packages.

Architecture:

  1. Create helper/exif.go handling exif metadata extraction.
  2. Create helper/media_convert.go abstracting commands like cwebp and ffmpeg wrappers to convert byte slices to webp.
  3. Simplify cmds/media/sticker.go to depend on these new exports.

Tech Stack: Go, exec, Neo Context, waProto

Global Constraints

  • Only use standard library inside helper/ where possible (no whatsapp dependencies except general bytes handling).
  • The behavior of the /Users/fd/Documents/perf/cmds/media/sticker.go command should remain functionally identical.

Task 1: Migrate Exif Support to Helper

Files:

  • Create: /Users/fd/Documents/perf/helper/exif.go
  • Modify: /Users/fd/Documents/perf/cmds/media/sticker.go

Interfaces:

  • Produces: helper.CreateDynamicExif(args []string) (exifPath string, cleanup bool)

  • Step 1: Write exif.go Extract exifData, webpExif, getOrCreateDefaultExif, and resolveExif into helper/exif.go. Make resolveExif exported as ResolveExif. Ensure it uses the existing env logic. Keep uuid dependency.

  • Step 2: Update sticker.go EXIF usage Remove the exif functions/structs from sticker.go and update Sticker.Run to call helper.ResolveExif(ctx.Arguments()).

  • Step 3: Commit

Task 2: Abstract Conversion Functions

Files:

  • Create: /Users/fd/Documents/perf/helper/media_convert.go
  • Modify: /Users/fd/Documents/perf/cmds/media/sticker.go

Interfaces:

  • Produces: ConvertImageToSticker(imgData []byte, exifPath string) ([]byte, error) ConvertVideoToSticker(vidData []byte, exifPath string) ([]byte, error) RewriteStickerExif(webpData []byte, exifPath string) ([]byte, error)

  • Step 1: Create media_convert.go Implement the three conversion functions. Each should take bytes (downloaded media) and an exifPath, do the conversion via exec.Command, inject exif via webpmux, clean up its own internal temp files, and return the final []byte of the webp ready to send. (They don't need Whatsapp Context).

  • Step 2: Update sticker.go media usage Remove cmdStickerImage, cmdStickerVideo, and cmdStickerRewrite from sticker.go. Instead, in Sticker.Run, download the bytes directly using ctx.Client().Download(...), then pass those bytes to the helper.ConvertX functions, and ctx.SendSticker() the returned bytes.

  • Step 3: Test build Run go build ./...

  • Step 4: Commit git commit -m "refactor: extract media conversion logic to helper"