[{"name":"alibaba-quota-config.json","kind":"file","size":469,"lastCommitHash":"2aa3198dbe3a093a512a9c6eb56faa17d54d3464","lastCommitWhen":"2026-09-16T03:51:48+03:00","lastCommitMessage":"feat(usage): read alibaba's token plan through the official CLI, not only a scraped session\n\ndawn's token-plan keys are inference-only, so we reverse-engineered the console endpoint from a\nbrowser HAR. That worked, but it was the wrong shape of solution: the provider ships a supported CLI,\nand CodexBar's docs (MIT, read as reference only — dawn does not want us depending on it) name both it\nand the `quota-config` endpoint we had missed.\n\n- `UsageRequest` is now a union: `{kind:\"http\",...}` or `{kind:\"command\", command, args, timeoutMs}`.\n  The core still spawns nothing; it asks, and the host answers. A host that will not run commands\n  replies `status: 127` and the feed routes around it into the captured-session path.\n- a new credential kind, `cli`: no secret, because the provider's own CLI is already signed in.\n- the alibaba feed tries `bl usage token-plan --console-region <id> --console-site <site> --output\n  json` first, over the four region variants (`intl`/`cn`/`intl-personal`/`cn-personal`), and falls\n  back to the console session. One parser reads both payloads, because the CLI answers with the same\n  field names the console wraps in `data.DataV2.data.data`: `per*Percentage` is a FRACTION and\n  `per*ResetTime` is epoch MILLISECONDS.\n- two corrections from the reference: `sec_token` is optional (some accounts are not given one, and\n  the console proceeds without it — ours used to fail), and `quota-config` reports per-tier\n  allowances, so the report now says \"Token plan pro: weekly 40000, 5h 12000 credits\" beside the\n  percentage. Remaining days and reset cards become notes.\n- the coding-agent host runs only allowlisted command names (`bl`), with the environment narrowed to\n  PATH/HOME/locale/timezone/proxies, a timeout and a 64 KiB stdout cap; a refusal or a missing binary\n  comes back as a status the feed treats as data.\n- the Zig core and the Swift driver mirror all of it, including the command request in the Swift\n  decoder and a `runCommand` that applies the same allowlist, timeout and cap.\n\nVerified: zig unit + C ABI tests, the twelve-case parity suite, the Swift smoke test (which now shows\n`alibaba=4 calls`), 71 pi-ai usage tests, 45 coding-agent usage tests, and `npm run check` end to end.\nThe child proved the new surface bites: dropping `kind` from command requests fails parity and the\nSwift smoke immediately.\n\nCaveat, stated rather than papered over: `bl` is not installed on this machine, so the CLI path is\ntested against recorded payloads and scripted hosts, not live.\n"},{"name":"alibaba-reset-card_list.json","kind":"file","size":575,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"alibaba-subscription.json","kind":"file","size":852,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"alibaba-usage.json","kind":"file","size":669,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"anthropic-profile.json","kind":"file","size":1040,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"anthropic-usage.json","kind":"file","size":2245,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"antigravity-quota.json","kind":"file","size":5136,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"codex-usage-edge.json","kind":"file","size":548,"lastCommitHash":"6bb9da4709e28779906bf8409b569bbe6bb09765","lastCommitWhen":"2026-09-16T02:33:00+03:00","lastCommitMessage":"feat(native): implement the usage query core in Zig for native hosts\n\ndawn wants the usage query from a macOS app, and JavaScript will not run there. This is\nthe query alone — the rules that turn a provider body into limits — as a C ABI library\nin Zig, with the TypeScript implementation left in place as the reference.\n\nThe core is pure on purpose: it never opens a socket, reads a clock, or touches the\nfilesystem.\n\n- `usage_parse(provider, body, now_ms)`, `usage_build_request(provider, token,\n  account_id)`, `usage_credentials_from_access_token(jwt)`, `usage_supported_providers()`,\n  `usage_abi_version()`, `usage_free()`. JSON in, JSON out, so the shapes are the contract\n  already documented in packages/ai/docs/usage-query.md. Failures come back as\n  `{\"error\":\"...\"}` and NULL only ever means allocation failed; a host with its own token\n  needs no auth store.\n- Host owns the socket. A usage query is one GET, and doing it here would mean shipping\n  TLS with its own trust store and proxy behaviour; a host with NSURLSession already has\n  that, so it asks for the request, sends it, and hands back the body.\n- `native/usage/tests/c_smoke.c` is compiled by the toolchain and linked against the\n  installed static library, so `zig build test` exercises the ABI the way a native caller\n  does — including a NULL argument and a provider without a feed.\n- `packages/ai/test/usage-zig-parity.test.ts` computes both implementations from the same\n  recorded bodies at test time (one captured live, redacted of user_id/account_id/email),\n  so neither can drift from the other quietly.\n- Zig is pinned to 0.16.0 with a verified checksum: 0.16 moved args, stdio, fs, and clock\n  APIs, and the pure core compiled unchanged through that while only the debug CLI needed\n  edits, which is the boundary doing its job. `npm run check` now includes `check:zig`,\n  and CI installs the pinned toolchain.\n\nVerified: zig unit tests plus the C ABI smoke test, byte-identical output against the\nTypeScript reference on both fixtures, `npm run check` clean.\n"},{"name":"codex-usage-live.json","kind":"file","size":2031,"lastCommitHash":"6bb9da4709e28779906bf8409b569bbe6bb09765","lastCommitWhen":"2026-09-16T02:33:00+03:00","lastCommitMessage":"feat(native): implement the usage query core in Zig for native hosts\n\ndawn wants the usage query from a macOS app, and JavaScript will not run there. This is\nthe query alone — the rules that turn a provider body into limits — as a C ABI library\nin Zig, with the TypeScript implementation left in place as the reference.\n\nThe core is pure on purpose: it never opens a socket, reads a clock, or touches the\nfilesystem.\n\n- `usage_parse(provider, body, now_ms)`, `usage_build_request(provider, token,\n  account_id)`, `usage_credentials_from_access_token(jwt)`, `usage_supported_providers()`,\n  `usage_abi_version()`, `usage_free()`. JSON in, JSON out, so the shapes are the contract\n  already documented in packages/ai/docs/usage-query.md. Failures come back as\n  `{\"error\":\"...\"}` and NULL only ever means allocation failed; a host with its own token\n  needs no auth store.\n- Host owns the socket. A usage query is one GET, and doing it here would mean shipping\n  TLS with its own trust store and proxy behaviour; a host with NSURLSession already has\n  that, so it asks for the request, sends it, and hands back the body.\n- `native/usage/tests/c_smoke.c` is compiled by the toolchain and linked against the\n  installed static library, so `zig build test` exercises the ABI the way a native caller\n  does — including a NULL argument and a provider without a feed.\n- `packages/ai/test/usage-zig-parity.test.ts` computes both implementations from the same\n  recorded bodies at test time (one captured live, redacted of user_id/account_id/email),\n  so neither can drift from the other quietly.\n- Zig is pinned to 0.16.0 with a verified checksum: 0.16 moved args, stdio, fs, and clock\n  APIs, and the pure core compiled unchanged through that while only the debug CLI needed\n  edits, which is the boundary doing its job. `npm run check` now includes `check:zig`,\n  and CI installs the pinned toolchain.\n\nVerified: zig unit tests plus the C ABI smoke test, byte-identical output against the\nTypeScript reference on both fixtures, `npm run check` clean.\n"},{"name":"deepseek-balance.json","kind":"file","size":188,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"hyper-billing.json","kind":"file","size":750,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"hyper-members.json","kind":"file","size":149,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"hyper-teams.json","kind":"file","size":197,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"opencode-go-usage.json","kind":"file","size":364,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"},{"name":"zai-usage.json","kind":"file","size":762,"lastCommitHash":"c54fe13f793503593922d399c8830e8a5ffdc337","lastCommitWhen":"2026-09-16T03:12:11+03:00","lastCommitMessage":"feat(usage): host-driven feeds for every provider, plus the extension seam\n\nThe first pass had one provider and one shape. dawn wants /usage to cover what she actually\npays for - antigravity, hyper, opencode-go, zai, deepseek, alibaba - and to reuse the same\nrules from a macOS app, so the query became a definition instead of a function.\n\nA feed is now driven by the host: `advance(state, responses)` returns either the requests to\nsend or the finished report. The host owns HTTP, which is what lets one definition run in the\nCLI, in the Zig core, and in a tray. It also covers the providers that need more than one call\n- hyper reads /v1/teams before it can ask for that team's billing - without inventing a second\nconcept for them.\n\n- packages/ai/docs/usage-feeds.md is the contract: report shape, credential kinds, and the unit\n  rules (percent vs fraction vs remaining-fraction vs dollars; epoch seconds vs milliseconds vs\n  ISO-8601) that every provider gets wrong in its own way.\n- seven feeds: openai-codex, anthropic (the normalised limits[] array, not the codenamed\n  windows), google-antigravity (including the antigravity/... user-agent its endpoint gates on),\n  hyper (plan allocation vs remaining credits, two-step, dollar balance), opencode-go, zai, and\n  deepseek, which is balance-only and therefore has no windows at all.\n- reports gained `balance` and `notes`, so a provider without a percentage is not forced into\n  one, and `skipped` became {provider, reason} - a key-only alibaba now says \"needs a session\n  credential\" instead of going quiet.\n- credentials are provider-defined: oauth, apiKey, or a captured session. alibaba's token-plan\n  keys are inference-only, so its quota needs a console session, and\n  scripts/capture-alibaba-session.mjs turns a browser HAR export into the 0600 session file the\n  bridge reads.\n- pi.registerProvider(..., { usage }) registers a feed from an extension into the same lookup, so\n  a provider dawn builds herself is covered by /usage with no new wiring, and unregistering drops\n  it. Documented in docs/custom-provider.md.\n\nVerified: 64 tests across the five usage suites (every feed driven through the host loop with\nscripted responses, no network in any of them), coding-agent usage 12/12 plus the CLI and\ninteractive suites, tsgo and biome clean.\n"}]