L’API HTTP d’agents de Mastra retourne une structure JSON avec des steps, chacune contenant des elements content types comme reasoning, tool-call, tool-result et text. La sortie brute est dense. Commencez par l’explorer:

# Appeler l'API et voir la structure brute
http localhost:4111/api/agents/weather-agent/generate \
  messages[0]="what's the weather in montreal?" | jq .

# Obtenir uniquement la reponse finale
http localhost:4111/api/agents/weather-agent/generate \
  messages[0]="what's the weather in montreal?" | jq -r '.text'

# Explorer ce qui se trouve dans les steps
http localhost:4111/api/agents/weather-agent/generate \
  messages[0]="what's the weather in montreal?" | jq '.steps[].content[] | .type'
# "reasoning"
# "tool-call"
# "tool-result"
# "text"
# "reasoning"
# "text"

# Voir quels champs chaque type possede
http localhost:4111/api/agents/weather-agent/generate \
  messages[0]="what's the weather in montreal?" | jq '.steps[].content[] | select(.type == "tool-call")'

Une fois la structure comprise, passez dans jq -r avec des sequences d’echappement ANSI en ligne pour coloriser chaque element:

http localhost:4111/api/agents/weather-agent/generate \
  messages[0]="what's the weather in montreal?" | jq -r '
  (
    .steps[]
    | .content[]
    | select(.type != "tool-result" and .type != "text")
    | if .type == "tool-call" then
        "\u001b[35m<\(.type)>\(.text // .toolName)</\(.type)>\u001b[0m"
      else
        "\u001b[90m<\(.type)>\(.text // .toolName)</\(.type)>\u001b[0m"
      end
  ),
  "\n\n\u001b[32mAssistant: \(.text)\u001b[0m"
'

Les sequences \u001b[Xm sont des codes de couleur ANSI: 35 est magenta pour les appels d’outils, 90 est gris fonce pour le raisonnement, 32 est vert pour la reponse finale. jq les affiche litteralement en mode brut (-r), et le terminal les rend en couleurs. Le filtre utilise .text // .toolName pour gerer les elements de contenu qui stockent leur label dans differents champs selon le type.