feat(usage): read alibaba's token plan through the official CLI, not only a scraped session master
dawn's token-plan keys are inference-only, so we reverse-engineered the console endpoint from a browser HAR. That worked, but it was the wrong shape of solution: the provider ships a supported CLI, and CodexBar's docs (MIT, read as reference only — dawn does not want us depending on it) name both it and the `quota-config` endpoint we had missed. - `UsageRequest` is now a union: `{kind:"http",...}` or `{kind:"command", command, args, timeoutMs}`. The core still spawns nothing; it asks, and the host answers. A host that will not run commands replies `status: 127` and the feed routes around it into the captured-session path. - a new credential kind, `cli`: no secret, because the provider's own CLI is already signed in. - the alibaba feed tries `bl usage token-plan --console-region <id> --console-site <site> --output json` first, over the four region variants (`intl`/`cn`/`intl-personal`/`cn-personal`), and falls back to the console session. One parser reads both payloads, because the CLI answers with the same field names the console wraps in `data.DataV2.data.data`: `per*Percentage` is a FRACTION and `per*ResetTime` is epoch MILLISECONDS. - two corrections from the reference: `sec_token` is optional (some accounts are not given one, and the console proceeds without it — ours used to fail), and `quota-config` reports per-tier allowances, so the report now says "Token plan pro: weekly 40000, 5h 12000 credits" beside the percentage. Remaining days and reset cards become notes. - the coding-agent host runs only allowlisted command names (`bl`), with the environment narrowed to PATH/HOME/locale/timezone/proxies, a timeout and a 64 KiB stdout cap; a refusal or a missing binary comes back as a status the feed treats as data. - the Zig core and the Swift driver mirror all of it, including the command request in the Swift decoder and a `runCommand` that applies the same allowlist, timeout and cap. Verified: zig unit + C ABI tests, the twelve-case parity suite, the Swift smoke test (which now shows `alibaba=4 calls`), 71 pi-ai usage tests, 45 coding-agent usage tests, and `npm run check` end to end. The child proved the new surface bites: dropping `kind` from command requests fails parity and the Swift smoke immediately. Caveat, stated rather than papered over: `bl` is not installed on this machine, so the CLI path is tested against recorded payloads and scripted hosts, not live.