* feat(sse): add live gRPC-web quota fetcher for grok-cli (#6844)
* fix(sse): send gRPC-web request frame + decode real GetGrokCreditsConfig schema
Live validation against grok.com (real bearer token, tier-4 account) proved
the #6844 grok-cli quota fetcher was a silent no-op:
- The POST to GetGrokCreditsConfig had no body. gRPC-web requires a request
frame even for a no-argument RPC; without one the upstream returns
`grpc-status: 13 "Missing request message."` with a 0-byte response.
Fixed by sending the empty gRPC-web frame (flag 0x00 + 4-byte length 0).
- The decoder's field mapping (top-level field 1 = double percent, field 2 =
string resetAt) was reverse-engineered from a third-party doc and never
matched the real response. The real shape is: top-level field 1 is a
NESTED message whose subfield 1 is a fixed32 float usage ratio (0..1) and
subfield 5 is a Timestamp{seconds,nanos} reset time. grokCliQuotaFrame.ts
now decodes that nested shape; grokCliQuotaFetcher.ts's buildQuota()
rescales the decoder's 0-100 percentUsed back to the 0-1 fraction the rest
of the quota pipeline expects (quotaPreflight.ts::remainingPercentFrom).
- The response's 2nd gRPC-web frame (trailer, flag 0x80) is now explicitly
walked-and-skipped instead of relying on incidental length-bounding.
Test fixtures in both files now encode the real captured wire structure
(nested message, fixed32 ratio, Timestamp reset, trailer frame) instead of
the old synthetic fixed64-double buffers, and the stale "Cloudflare
non-blocking is an assumption" comment is corrected to reflect that it is
now live-validated.