···5252 text = ''
5353 server=${server}
5454 tokens="$HOME/.omnigent/auth_tokens.json"
5555- if ! jq -e --arg s "$server" '.[$s].token // empty' "$tokens" >/dev/null 2>&1; then
5656- echo "covibe: no session for $server yet, logging in" >&2
5555+ # The cached session is a JWT with a server-side TTL
5656+ # (OMNIGENT_OIDC_SESSION_TTL_HOURS), so "a token exists" is not the
5757+ # same as "we are logged in": a stale entry makes omnigent fail with
5858+ # `Pi session creation failed (401): Authentication required`
5959+ # instead of re-authenticating. Check the recorded expiry (with a
6060+ # minute of slack, via jq's own clock so this needs no coreutils).
6161+ if ! jq -e --arg s "$server" \
6262+ '((.[$s].expires_at // 0) > (now + 60)) and ((.[$s].token // "") != "")' \
6363+ "$tokens" >/dev/null 2>&1; then
6464+ echo "covibe: no valid session for $server, logging in" >&2
5765 omnigent login "$server"
5866 fi
5967 exec omnigent pi --server "$server" "$@"