run.sh asks a Mistral agent (mistral-large-4-0) through the Conversations API. The agent reads the repo and the PR through the read-only Gitea connector, so the review step no longer holds a Claude token or a local checkout. The Claude CLI invocation, the model picker and the context clones stay in run.sh as comments. The answer is cut at the first heading and empty or None-only sections are dropped before the review event is derived. A tool call that is not read-only fails the run and nothing is posted. A failed request now fails the pipeline. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
20 lines
892 B
Bash
20 lines
892 B
Bash
#!/bin/sh
|
|
# Reads a Mistral Conversations API response (JSON) on stdin.
|
|
# text the answer text (the text blocks of the message output)
|
|
# calls number of tool executions
|
|
# violations names of tool executions that are not read-only, one per line
|
|
# A tool is read-only when its name contains _get_, _list_ or _search_ or ends in _read.
|
|
set -eu
|
|
case "${1:-}" in
|
|
text)
|
|
jq -r '[.outputs[]? | select(.type == "message.output") | .content
|
|
| if type == "array" then map(select(.type == "text") | .text) | join("") else . end]
|
|
| join("\n")' ;;
|
|
calls)
|
|
jq -r '[.outputs[]? | select(.type == "tool.execution")] | length' ;;
|
|
violations)
|
|
jq -r '.outputs[]? | select(.type == "tool.execution") | .name
|
|
| select(test("_(get|list|search)_|_read$") | not)' ;;
|
|
*) echo "usage: parse-response.sh text|calls|violations" >&2; exit 2 ;;
|
|
esac
|