mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
bef99f861b
## Why Codex users can earn personal rate-limit reset credits, but app-server clients do not currently have an API for reading or redeeming them. This adds the backend and protocol foundation used by the `/usage` TUI flow in #28154. ## What changed - Extend `account/rateLimits/read` with a nullable `rateLimitResetCredits` summary sourced from the existing usage response. - Add backend-client and app-server support for consuming a reset with a caller-generated idempotency key. A UUID is recommended, and clients reuse the same key when retrying the same logical reset. - Return only the consume `outcome`; clients refetch `account/rateLimits/read` for updated window state. - Document the response field and each consume outcome, and regenerate the JSON and TypeScript schema fixtures. - Clarify in `AGENTS.md` that new app-server string enum values use camelCase on the wire. - Update the existing TUI response fixture for the expanded protocol shape. - Add coverage for authentication, response mapping, backend failures, consume outcomes, and request timeout behavior. ## Validation - `just test -p codex-app-server-protocol` — 231 passed. - `just test -p codex-backend-client` — 14 passed. - Focused `codex-app-server` reset-credit tests — 5 passed. - Focused `codex-tui` protocol response fixture test — passed. - `just fix -p codex-backend-client -p codex-app-server-protocol -p codex-app-server` — passed. - `just fmt` — passed.
47 lines
1.1 KiB
JSON
Generated
47 lines
1.1 KiB
JSON
Generated
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"definitions": {
|
|
"ConsumeAccountRateLimitResetCreditOutcome": {
|
|
"oneOf": [
|
|
{
|
|
"description": "A reset credit was consumed and the eligible rate-limit windows were reset.",
|
|
"enum": [
|
|
"reset"
|
|
],
|
|
"type": "string"
|
|
},
|
|
{
|
|
"description": "No current rate-limit window is eligible for a reset.",
|
|
"enum": [
|
|
"nothingToReset"
|
|
],
|
|
"type": "string"
|
|
},
|
|
{
|
|
"description": "The account has no earned reset credits available.",
|
|
"enum": [
|
|
"noCredit"
|
|
],
|
|
"type": "string"
|
|
},
|
|
{
|
|
"description": "The same idempotency key already completed a reset successfully.",
|
|
"enum": [
|
|
"alreadyRedeemed"
|
|
],
|
|
"type": "string"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"properties": {
|
|
"outcome": {
|
|
"$ref": "#/definitions/ConsumeAccountRateLimitResetCreditOutcome"
|
|
}
|
|
},
|
|
"required": [
|
|
"outcome"
|
|
],
|
|
"title": "ConsumeAccountRateLimitResetCreditResponse",
|
|
"type": "object"
|
|
} |